Add minstratum option
Stratum in received packets is raised to the configured minimum.
This commit is contained in:
parent
fe4b661fe7
commit
c8fe69c956
7 changed files with 35 additions and 1 deletions
8
client.c
8
client.c
|
@ -909,6 +909,11 @@ process_cmd_add_server_or_peer(CMD_Request *msg, char *line)
|
|||
break;
|
||||
}
|
||||
|
||||
if (data.params.min_stratum) {
|
||||
fprintf(stderr, "Option minstratum not supported\n");
|
||||
break;
|
||||
}
|
||||
|
||||
msg->data.ntp_source.port = htonl((unsigned long) data.port);
|
||||
UTI_IPHostToNetwork(&data.ip_addr, &msg->data.ntp_source.ip_addr);
|
||||
msg->data.ntp_source.minpoll = htonl(data.params.minpoll);
|
||||
|
@ -951,6 +956,9 @@ process_cmd_add_server_or_peer(CMD_Request *msg, char *line)
|
|||
case CPS_BadKey:
|
||||
fprintf(stderr, "Unreadable key value\n");
|
||||
break;
|
||||
case CPS_BadMinstratum:
|
||||
fprintf(stderr, "Unreadable minstratum value\n");
|
||||
break;
|
||||
}
|
||||
|
||||
return result;
|
||||
|
|
2
cmdmon.c
2
cmdmon.c
|
@ -1227,6 +1227,7 @@ handle_add_server(CMD_Request *rx_message, CMD_Reply *tx_message)
|
|||
params.iburst = ntohl(rx_message->data.ntp_source.flags) & REQ_ADDSRC_IBURST ? 1 : 0;
|
||||
params.max_delay = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay);
|
||||
params.max_delay_ratio = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay_ratio);
|
||||
params.min_stratum = 0; /* not transmitted in cmdmon protocol yet */
|
||||
status = NSR_AddSource(&rem_addr, NTP_SERVER, ¶ms);
|
||||
switch (status) {
|
||||
case NSR_Success:
|
||||
|
@ -1268,6 +1269,7 @@ handle_add_peer(CMD_Request *rx_message, CMD_Reply *tx_message)
|
|||
params.iburst = ntohl(rx_message->data.ntp_source.flags) & REQ_ADDSRC_IBURST ? 1 : 0;
|
||||
params.max_delay = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay);
|
||||
params.max_delay_ratio = UTI_FloatNetworkToHost(rx_message->data.ntp_source.max_delay_ratio);
|
||||
params.min_stratum = 0; /* not transmitted in cmdmon protocol yet */
|
||||
status = NSR_AddSource(&rem_addr, NTP_PEER, ¶ms);
|
||||
switch (status) {
|
||||
case NSR_Success:
|
||||
|
|
10
cmdparse.c
10
cmdparse.c
|
@ -59,6 +59,7 @@ CPS_ParseNTPSourceAdd(const char *line, CPS_NTP_Source *src)
|
|||
src->params.online = 1;
|
||||
src->params.auto_offline = 0;
|
||||
src->params.iburst = 0;
|
||||
src->params.min_stratum = 0;
|
||||
|
||||
result = CPS_Success;
|
||||
|
||||
|
@ -153,6 +154,15 @@ CPS_ParseNTPSourceAdd(const char *line, CPS_NTP_Source *src)
|
|||
|
||||
} else if (!strncasecmp(cmd, "iburst", 6)) {
|
||||
src->params.iburst = 1;
|
||||
|
||||
} else if (!strncasecmp(cmd, "minstratum", 10)) {
|
||||
if (sscanf(line, "%d%n", &src->params.min_stratum, &n) != 1) {
|
||||
result = CPS_BadMinstratum;
|
||||
ok = 0;
|
||||
done = 1;
|
||||
} else {
|
||||
line += n;
|
||||
}
|
||||
|
||||
} else {
|
||||
result = CPS_BadOption;
|
||||
|
|
|
@ -44,7 +44,8 @@ typedef enum {
|
|||
CPS_BadPresend,
|
||||
CPS_BadMaxdelayratio,
|
||||
CPS_BadMaxdelay,
|
||||
CPS_BadKey
|
||||
CPS_BadKey,
|
||||
CPS_BadMinstratum
|
||||
} CPS_Status;
|
||||
|
||||
typedef struct {
|
||||
|
|
3
conf.c
3
conf.c
|
@ -394,6 +394,9 @@ parse_source(const char *line, NTP_Source_Type type)
|
|||
case CPS_BadKey:
|
||||
LOG(LOGS_WARN, LOGF_Configure, "Unreadable key value at line %d", line_number);
|
||||
break;
|
||||
case CPS_BadMinstratum:
|
||||
LOG(LOGS_WARN, LOGF_Configure, "Unreadable minstratum value at line %d", line_number);
|
||||
break;
|
||||
}
|
||||
|
||||
return;
|
||||
|
|
|
@ -107,6 +107,9 @@ struct NCR_Instance_Record {
|
|||
int minpoll; /* Log2 of minimum defined polling interval */
|
||||
int maxpoll; /* Log2 of maximum defined polling interval */
|
||||
|
||||
int min_stratum; /* Increase stratum in received packets to the
|
||||
minimum */
|
||||
|
||||
double max_delay; /* Maximum round-trip delay to the
|
||||
peer that we can tolerate and still
|
||||
use the sample for generating
|
||||
|
@ -268,6 +271,7 @@ NCR_GetInstance(NTP_Remote_Address *remote_addr, NTP_Source_Type type, SourcePar
|
|||
|
||||
result->minpoll = params->minpoll;
|
||||
result->maxpoll = params->maxpoll;
|
||||
result->min_stratum = params->min_stratum;
|
||||
|
||||
result->presend_minpoll = params->presend_minpoll;
|
||||
result->presend_done = 0;
|
||||
|
@ -981,6 +985,11 @@ receive_packet(NTP_Packet *message, struct timeval *now, double now_err, NCR_Ins
|
|||
message->stratum = NTP_MAX_STRATUM + 1;
|
||||
}
|
||||
|
||||
/* Increase stratum to the configured minimum */
|
||||
if (message->stratum < inst->min_stratum) {
|
||||
message->stratum = inst->min_stratum;
|
||||
}
|
||||
|
||||
/* Test 7 checks that the stratum in the packet is appropriate */
|
||||
if ((message->stratum > REF_GetOurStratum()) ||
|
||||
(message->stratum > NTP_MAX_STRATUM)) {
|
||||
|
|
|
@ -38,6 +38,7 @@ typedef struct {
|
|||
int auto_offline;
|
||||
int presend_minpoll;
|
||||
int iburst;
|
||||
int min_stratum;
|
||||
unsigned long authkey;
|
||||
double max_delay;
|
||||
double max_delay_ratio;
|
||||
|
|
Loading…
Reference in a new issue