n_sources = ntohl(reply.data.n_sources.n_sources);
if (verbose) {
- printf( " .-- State: N - noselect, M - missing samples, d/D - large distance,\n");
- printf( " / ~ - jittery, w/W - waits for others, T - not trusted,\n");
- printf( "| x - falseticker, P - not preferred, U - waits for update,\n");
- printf( "| S - stale, O - orphan, + - combined, * - best.\n");
- printf( "| Effective options ------. (N - noselect, P - prefer\n");
- printf( "| Configured options -. \\ T - trust, R - require)\n");
+ printf( " . State: N - noselect, s - unsynchronised, M - missing samples,\n");
+ printf( " / d/D - large distance, ~ - jittery, w/W - waits for others,\n");
+ printf( "| S - stale, O - orphan, T - not trusted, P - not preferred,\n");
+ printf( "| U - waits for update,, x - falseticker, + - combined, * - best.\n");
+ printf( "| Effective options ---------. (N - noselect, P - prefer\n");
+ printf( "| Configured options ----. \\ T - trust, R - require)\n");
printf( "| Auth. enabled (Y/N) -. \\ \\ Offset interval --.\n");
printf( "| | | | |\n");
}
The following states indicate the source is not considered selectable for
synchronisation:
* _N_ - has the *noselect* option.
+* _s_ - is not synchronised.
* _M_ - does not have enough measurements.
* _d_ - has a root distance larger than the maximum distance (configured by the
<<chrony.conf.adoc#maxdistance,*maxdistance*>> directive).
typedef enum {
SRC_OK, /* OK so far, not a final status! */
SRC_UNSELECTABLE, /* Has noselect option set */
+ SRC_UNSYNCHRONISED, /* Provides samples but not unsynchronised */
SRC_BAD_STATS, /* Doesn't have valid stats data */
SRC_BAD_DISTANCE, /* Has root distance longer than allowed maximum */
SRC_JITTERY, /* Had std dev larger than allowed maximum */
continue;
}
+ /* Ignore sources which are not synchronised */
+ if (sources[i]->leap == LEAP_Unsynchronised) {
+ mark_source(sources[i], SRC_UNSYNCHRONISED);
+ continue;
+ }
+
si = &sources[i]->sel_info;
SST_GetSelectionData(sources[i]->stats, &now,
&si->lo_limit, &si->hi_limit, &si->root_distance,
switch (status) {
case SRC_UNSELECTABLE:
return 'N';
+ case SRC_UNSYNCHRONISED:
+ return 's';
case SRC_BAD_STATS:
return 'M';
case SRC_BAD_DISTANCE:
TEST_CHECK(sources[l]->status > SRC_OK && sources[l]->status <= SRC_SELECTED);
if (sources[l]->sel_options & SRC_SELECT_NOSELECT) {
TEST_CHECK(sources[l]->status == SRC_UNSELECTABLE);
+ } else if (sources[l]->leap == LEAP_Unsynchronised) {
+ TEST_CHECK(sources[l]->status == SRC_UNSYNCHRONISED);
} else if (sources[l]->status != SRC_BAD_DISTANCE) {
if (sources[l]->status >= SRC_NONPREFERRED) {
passed++;