Add minstratum option

Stratum in received packets is raised to the configured minimum.
This commit is contained in:
Benny Lyne Amorsen 2010-08-24 18:37:38 +02:00 committed by Miroslav Lichvar
parent fe4b661fe7
commit c8fe69c956
7 changed files with 35 additions and 1 deletions

View file

@ -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;

View file

@ -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, &params);
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, &params);
switch (status) {
case NSR_Success:

View file

@ -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;

View file

@ -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
View file

@ -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;

View file

@ -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)) {

View file

@ -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;