Merge branch 'bu'

This commit is contained in:
Richard P. Curnow 2007-06-26 23:51:18 +01:00
commit b6e40dbde7
3 changed files with 32 additions and 8 deletions

View file

@ -196,6 +196,9 @@ struct NCR_Instance_Record {
/* Maximum allowed stratum */ /* Maximum allowed stratum */
#define NTP_MAX_STRATUM 15 #define NTP_MAX_STRATUM 15
/* INVALID or Unkown stratum from external server as per the NTP 4 docs */
#define NTP_INVALID_STRATUM 0
/* ================================================== */ /* ================================================== */
static ADF_AuthTable access_auth_table; static ADF_AuthTable access_auth_table;
@ -539,7 +542,13 @@ transmit_packet(NTP_Mode my_mode, /* The mode this machine wants to be */
/* Generate transmit packet */ /* Generate transmit packet */
message.lvm = ((leap << 6) &0xc0) | ((version << 3) & 0x38) | (my_mode & 0x07); message.lvm = ((leap << 6) &0xc0) | ((version << 3) & 0x38) | (my_mode & 0x07);
message.stratum = our_stratum; if (our_stratum <= NTP_MAX_STRATUM) {
message.stratum = our_stratum;
} else {
/* (WGU) to handle NTP "Invalid" stratum as per the NTP V4 documents. */
message.stratum = NTP_INVALID_STRATUM;
}
message.poll = my_poll; message.poll = my_poll;
message.precision = LCL_GetSysPrecisionAsLog(); message.precision = LCL_GetSysPrecisionAsLog();
@ -983,6 +992,12 @@ receive_packet(NTP_Packet *message, struct timeval *now, NCR_Instance inst, int
test6 = 1; /* Succeeded */ test6 = 1; /* Succeeded */
} }
/* (WGU) Set stratum to greater than any valid if incoming is 0 */
/* as per the NPT v4 documentation*/
if (message->stratum <= NTP_INVALID_STRATUM) {
message->stratum = NTP_MAX_STRATUM + 1;
}
/* Test 7 checks that the stratum in the packet is appropriate */ /* Test 7 checks that the stratum in the packet is appropriate */
if ((message->stratum > REF_GetOurStratum()) || if ((message->stratum > REF_GetOurStratum()) ||
(message->stratum > NTP_MAX_STRATUM)) { (message->stratum > NTP_MAX_STRATUM)) {

View file

@ -174,7 +174,7 @@ static double file_ref_offset, file_rate_ppm;
/* ================================================== */ /* ================================================== */
/* Flag to remember whether to assume the RTC is running on UTC */ /* Flag to remember whether to assume the RTC is running on UTC */
static int rtc_on_utc = 0; static int rtc_on_utc = 1;
/* ================================================== */ /* ================================================== */
@ -226,15 +226,18 @@ accumulate_sample(time_t rtc, struct timeval *sys)
discard_samples(NEW_FIRST_WHEN_FULL); discard_samples(NEW_FIRST_WHEN_FULL);
} }
rtc_sec[n_samples] = rtc;
/* Always use most recent sample as reference */ /* Always use most recent sample as reference */
/* use sample only if n_sample is not negative*/
if(n_samples >=0)
{
rtc_ref = rtc; rtc_ref = rtc;
rtc_sec[n_samples] = rtc;
rtc_trim[n_samples] = 0.0; rtc_trim[n_samples] = 0.0;
system_times[n_samples] = *sys; system_times[n_samples] = *sys;
++n_samples;
++n_samples_since_regression; ++n_samples_since_regression;
}
++n_samples;
return; return;
} }
@ -742,7 +745,11 @@ handle_initial_trim(void)
run_regression(1, &coefs_valid, &coef_ref_time, &coef_seconds_fast, &coef_gain_rate); run_regression(1, &coefs_valid, &coef_ref_time, &coef_seconds_fast, &coef_gain_rate);
n_samples_since_regression = 0; n_samples_since_regression = 0;
n_samples = 0;
/* Set sample number to -1 so the next sample is not used, as it will not yet be corrected for System Trim*/
n_samples = -1;
read_coefs_from_file(); read_coefs_from_file();
@ -866,6 +873,8 @@ read_from_device(void *any)
int error = 0; int error = 0;
status = read(fd, &data, sizeof(data)); status = read(fd, &data, sizeof(data));
if (operating_mode == OM_NORMAL)
status = read(fd, &data, sizeof(data));
if (status < 0) { if (status < 0) {
/* This looks like a bad error : the file descriptor was indicating it was /* This looks like a bad error : the file descriptor was indicating it was
* ready to read but we couldn't read anything. Give up. */ * ready to read but we couldn't read anything. Give up. */

View file

@ -373,9 +373,9 @@ find_best_sample_index(SST_Stats inst, double *times_back)
/* This defines the assumed ratio between the standard deviation of /* This defines the assumed ratio between the standard deviation of
the samples and the peer distance as measured from the round trip the samples and the peer distance as measured from the round trip
time. E.g. a value of 4 means that we think the standard deviation time. E.g. a value of 4 means that we think the standard deviation
is a quarter of the peer distance */ is four times the fluctuation of the peer distance */
#define SD_TO_DIST_RATIO 8.0 #define SD_TO_DIST_RATIO 1.0
/* ================================================== */ /* ================================================== */
/* This function runs the linear regression operation on the data. It /* This function runs the linear regression operation on the data. It