diff options
author | wollman <wollman@FreeBSD.org> | 1994-04-21 01:32:32 +0000 |
---|---|---|
committer | wollman <wollman@FreeBSD.org> | 1994-04-21 01:32:32 +0000 |
commit | 626ad815dc68f63750bef31813d6674bc71e957b (patch) | |
tree | e6118904954fc216401d8283456aeac5e7592395 /usr.sbin/xntpd | |
parent | 77b27d49908102e93566da2c2257e619c2b292dc (diff) | |
download | FreeBSD-src-626ad815dc68f63750bef31813d6674bc71e957b.zip FreeBSD-src-626ad815dc68f63750bef31813d6674bc71e957b.tar.gz |
Merged xntp3.3q from vendor branch.
Diffstat (limited to 'usr.sbin/xntpd')
-rw-r--r-- | usr.sbin/xntpd/Makefile.inc | 2 | ||||
-rw-r--r-- | usr.sbin/xntpd/README.FreeBSD | 2 | ||||
-rw-r--r-- | usr.sbin/xntpd/include/ntp_machine.h | 6 | ||||
-rw-r--r-- | usr.sbin/xntpd/ntpq/ntpq.c | 64 | ||||
-rw-r--r-- | usr.sbin/xntpd/util/tickadj.c | 16 | ||||
-rw-r--r-- | usr.sbin/xntpd/xntpd/ntp_control.c | 35 | ||||
-rw-r--r-- | usr.sbin/xntpd/xntpd/ntp_loopfilter.c | 2 | ||||
-rw-r--r-- | usr.sbin/xntpd/xntpd/ntp_request.c | 2 | ||||
-rw-r--r-- | usr.sbin/xntpd/xntpd/refclock_trak.c | 75 |
9 files changed, 167 insertions, 37 deletions
diff --git a/usr.sbin/xntpd/Makefile.inc b/usr.sbin/xntpd/Makefile.inc index 33125f2..f38f0a9 100644 --- a/usr.sbin/xntpd/Makefile.inc +++ b/usr.sbin/xntpd/Makefile.inc @@ -1,5 +1,5 @@ DEFS_LOCAL=-DREFCLOCK -DPARSE -NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS +NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD AUTHDEFS= -DMD5 CLOCKDEFS= -DLOCAL_CLOCK -DPST -DWWVB -DAS2201 -DGOES -DGPSTM -DOMEGA \ -DLEITCH -DTRAK diff --git a/usr.sbin/xntpd/README.FreeBSD b/usr.sbin/xntpd/README.FreeBSD index 2a7286e..fe83361 100644 --- a/usr.sbin/xntpd/README.FreeBSD +++ b/usr.sbin/xntpd/README.FreeBSD @@ -1,6 +1,6 @@ This version of NTP was converted to the BSD-style Makefile system by Garrett Wollman (wollman@freefall.cdrom.com); it is based on version -3.3p (late beta) from the University of Delaware. +3.3s (late beta) from the University of Delaware. Besides the Makefile changes, the DES code has been completely removed in order to make this code exportable. If you have a legal copy of diff --git a/usr.sbin/xntpd/include/ntp_machine.h b/usr.sbin/xntpd/include/ntp_machine.h index abc0acb..74af397 100644 --- a/usr.sbin/xntpd/include/ntp_machine.h +++ b/usr.sbin/xntpd/include/ntp_machine.h @@ -84,6 +84,7 @@ INFO ON NEW KERNEL PLL SYS CALLS NTP_SYSCALLS_STD - use the "normal" ones NTP_SYSCALL_GET - SYS_ntp_gettime id NTP_SYSCALL_ADJ - SYS_ntp_adjtime id + NTP_SYSCALLS_LIBC - ntp_adjtime() and ntp_gettime() are in libc. HOW TO GET IP INTERFACE INFORMATION @@ -394,6 +395,11 @@ in this file. #define STR_SYSTEM "UNIX/*BSD" #endif #endif +#ifdef SYS_FREEBSD +#define HAVE_TERMIOS +#define HAVE_UNAME +#define NTP_SYSCALLS_LIBC +#endif /* * DEC AXP OSF/1 diff --git a/usr.sbin/xntpd/ntpq/ntpq.c b/usr.sbin/xntpd/ntpq/ntpq.c index b956cc9..73c2a35 100644 --- a/usr.sbin/xntpd/ntpq/ntpq.c +++ b/usr.sbin/xntpd/ntpq/ntpq.c @@ -75,6 +75,7 @@ int jump = 0; #define OC 12 /* integer, print in octal */ #define MD 13 /* mode */ #define AR 14 /* array of times */ +#define TST 15 /* test flags */ #define EOV 255 /* end of table */ @@ -145,7 +146,7 @@ struct ctl_var peer_var[] = { { CP_RECEIVED, UI, "received" }, /* 31 */ { CP_SENT, UI, "sent" }, /* 32 */ { CP_FILTERROR, AR, "filterror" }, /* 33 */ - { CP_FLASH, ST, "flash"}, /* 34 */ + { CP_FLASH, TST, "flash"}, /* 34 */ { CP_DISP, AR, "disp" }, /* 35 */ /* * These are duplicate entires so that we can @@ -189,6 +190,20 @@ struct codestring { }; /* + * flasher bits + */ +static char *tstflagnames[] = { + "DUPLICATE PKT", + "BOGUS PKT", + "PROTO UNSYNC", + "PEER BOUNDS", + "BAD AUTH", + "PEER CLOCK UNSYNC", + "BAD STRATUM", + "ROOT BOUNDS" +}; + +/* * Leap values */ struct codestring leap_codes[] = { @@ -2836,7 +2851,45 @@ outputarr(fp, name, narr, lfp) output(fp, name, buf); } - +static char * +tstflags(val) + U_LONG val; +{ + register char *cb, *s; + register int i; + register char *sep; + + sep = ""; + i = 0; + s = cb = &circ_buf[nextcb][0]; + if (++nextcb >= NUMCB) + nextcb = 0; + + sprintf(cb, "0x%x", val); + cb += strlen(cb); + if (val <= ((1<<8)-1)) { + if (!val) { + strcat(cb, "<OK>"); + cb += strlen(cb); + } else { + *cb++ = '<'; + while (val) { + if (val & 0x1) { + sprintf(cb, "%s%s", sep, tstflagnames[i]); + sep = ";"; + cb += strlen(cb); + } + i++; + val >>= 1; + } + *cb++ = '>'; + } + } else { + *cb++ = '?'; + } + *cb = '\0'; + return s; +} /* * cookedprint - output variables in cooked mode @@ -2994,6 +3047,13 @@ cookedprint(datatype, length, data, status, fp) outputarr(fp, name, narr, lfparr); break; + case TST: + if (!decodeuint(value, &uval)) + output_raw = '?'; + else + output(fp, name, tstflags(uval)); + break; + default: (void) fprintf(stderr, "Internal error in cookedprint, %s=%s, fmt %d\n", diff --git a/usr.sbin/xntpd/util/tickadj.c b/usr.sbin/xntpd/util/tickadj.c index b3b6ba9..caec068 100644 --- a/usr.sbin/xntpd/util/tickadj.c +++ b/usr.sbin/xntpd/util/tickadj.c @@ -333,10 +333,13 @@ getoffsets(filex, tick_off, tickadj_off, dosync_off, noprintf_off) #if defined(SYS_AUX3) || defined(SYS_AUX2) #define X_TICKADJ 0 -#define X_V 1 -#define X_TICK 2 +#define X_TICK 1 #define X_DEF - static struct nlist nl[4]; + static struct nlist nl[] = + { {"tickadj"}, + {"tick"}, + {""}, + }; #endif #ifdef NeXT @@ -429,13 +432,6 @@ getoffsets(filex, tick_off, tickadj_off, dosync_off, noprintf_off) }; struct stat stbuf; -#if defined(SYS_AUX3) || defined(SYS_AUX2) - strcpy (nl[X_TICKADJ].n_name, "tickadj"); - strcpy (nl[X_V].n_name, "v"); - strcpy (nl[X_TICK].n_name, "tick"); - nl[3].n_name[0] = '\0'; -#endif - for (kname = kernels; *kname != NULL; kname++) { if (stat(*kname, &stbuf) == -1) continue; diff --git a/usr.sbin/xntpd/xntpd/ntp_control.c b/usr.sbin/xntpd/xntpd/ntp_control.c index 77e21f5..ef9c37a 100644 --- a/usr.sbin/xntpd/xntpd/ntp_control.c +++ b/usr.sbin/xntpd/xntpd/ntp_control.c @@ -264,8 +264,20 @@ static u_char def_clock_var[] = { /* * System and processor definitions. These will change for the gizmo board. */ +#ifndef HAVE_UNAME +#ifndef STR_SYSTEM +#define STR_SYSTEM "UNIX" +#endif +#ifndef STR_PROCESSOR +#define STR_PROCESSOR "unknown" +#endif + +static char str_system[] = STR_SYSTEM; +static char str_processor[] = STR_PROCESSOR; +#else #include <sys/utsname.h> static struct utsname utsname; +#endif /* HAVE_UNAME */ /* * Trap structures. We only allow a few of these, and send @@ -294,7 +306,7 @@ static struct utsname utsname; static u_char clocktypes[] = { CTL_SST_TS_NTP, /* REFCLK_NONE */ CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */ - CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */ + CTL_SST_TS_UHF, /* REFCLK_GPS_TRAK */ CTL_SST_TS_HF, /* REFCLK_WWV_PST */ CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */ CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */ @@ -379,6 +391,7 @@ extern struct peer *sys_peer; extern l_fp last_offset; extern s_fp drift_comp; extern int time_constant; +extern int pll_control; /* * Imported from the leap module */ @@ -426,7 +439,9 @@ init_control() { int i; +#ifdef HAVE_UNAME uname(&utsname); +#endif /* HAVE_UNAME */ ctl_clr_stats(); @@ -716,10 +731,12 @@ ctlsysstatus() if (sys_peer != 0) if (sys_peer->sstclktype != CTL_SST_TS_UNSPEC) clock = sys_peer->sstclktype; - else + else { if (sys_peer->refclktype < sizeof(clocktypes)) clock = clocktypes[sys_peer->refclktype]; - + if (pps_control) + clock |= CTL_SST_TS_PPS; + } return (u_short)CTL_SYS_STATUS(sys_leap, clock, ctl_sys_num_events, ctl_sys_last_event); } @@ -1262,12 +1279,22 @@ ctl_putsys(varid) ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning); break; case CS_PROCESSOR: +#ifndef HAVE_UNAME + ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor, + sizeof(str_processor) - 1); +#else ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine, strlen(utsname.machine)); +#endif /* HAVE_UNAME */ break; case CS_SYSTEM: - ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname, +#ifndef HAVE_UNAME + ctl_putstr(sys_var[CS_SYSTEM].text, str_system, + sizeof(str_system) - 1); +#else + ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname, strlen(utsname.sysname)); +#endif /* HAVE_UNAME */ break; case CS_KEYID: ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0); diff --git a/usr.sbin/xntpd/xntpd/ntp_loopfilter.c b/usr.sbin/xntpd/xntpd/ntp_loopfilter.c index 61332b9..3f66317 100644 --- a/usr.sbin/xntpd/xntpd/ntp_loopfilter.c +++ b/usr.sbin/xntpd/xntpd/ntp_loopfilter.c @@ -45,8 +45,10 @@ #ifdef KERNEL_PLL #include <sys/timex.h> +#ifndef NTP_SYSCALLS_LIBC #define ntp_gettime(t) syscall(SYS_ntp_gettime, (t)) #define ntp_adjtime(t) syscall(SYS_ntp_adjtime, (t)) +#endif #endif /* KERNEL_PLL */ /* diff --git a/usr.sbin/xntpd/xntpd/ntp_request.c b/usr.sbin/xntpd/xntpd/ntp_request.c index a776698..d1fb18f 100644 --- a/usr.sbin/xntpd/xntpd/ntp_request.c +++ b/usr.sbin/xntpd/xntpd/ntp_request.c @@ -18,8 +18,10 @@ #ifdef KERNEL_PLL #include <sys/timex.h> +#ifndef NTP_SYSCALLS_LIBC #define ntp_gettime(t) syscall(SYS_ntp_gettime, (t)) #define ntp_adjtime(t) syscall(SYS_ntp_adjtime, (t)) +#endif #endif /* KERNEL_PLL */ /* diff --git a/usr.sbin/xntpd/xntpd/refclock_trak.c b/usr.sbin/xntpd/xntpd/refclock_trak.c index b79bcbef..f2b3eb1 100644 --- a/usr.sbin/xntpd/xntpd/refclock_trak.c +++ b/usr.sbin/xntpd/xntpd/refclock_trak.c @@ -1,7 +1,9 @@ /* * refclock_trak.c - clock driver for the TRAK 8810 GPS STATION CLOCK * Tsuruoka Tomoaki Oct 30, 1993 - * + * tsuruoka@nc.fukuoka-u.ac.jp + * Faculty of Engineering, + * Fukuoka University, Fukuoka, JAPAN */ #if defined(REFCLOCK) && (defined(TRAK) || defined(TRAKCLK) || defined(TRAKPPS)) @@ -63,6 +65,14 @@ static void gps_send(); * Q=2 Pahse error < 10 ns * (note that my clock almost stable at 1 us per 10 hours) * + * Request leap second status - if needed. + * send: rqls\n + * reply: RQLS yy,mm,dd + * where: yy is year + * mm is month + * dd is day of month.baud + * Note: Default data is all zeros + * i.e. RQLS 00,00,00 */ /* @@ -70,7 +80,7 @@ static void gps_send(); */ #define MAXUNITS 4 /* max number of GPS units */ #define GPS232 "/dev/gps%d" /* name of radio device */ -#define SPEED232 B9600 /* uart speed (9600 baud) */ +#define SPEED232 B9600 /* uart speed (9600 bps) */ /* * Radio interface parameters @@ -78,7 +88,7 @@ static void gps_send(); #define GPSPRECISION (-20) /* precision assumed (about 1 us) */ #define GPSREFID "GPS" /* reference id */ #define GPSDESCRIPTION "TRAK 8810 GPS station clock" /* who we are */ -#define GPSHSREFID 0x7f7f110a /* 127.127.17.10 refid hi strata */ +#define GPSHSREFID 0x7f7f020a /* 127.127.2.10 refid hi strata */ #define GMT 0 /* hour offset from Greenwich */ #define NCODES 3 /* stages of median filter */ #define LENTOC 25 /* *RQTS U,ddd:hh:mm:ss.0,Q datecode length */ @@ -191,8 +201,8 @@ trak_init() /* * Just zero the data arrays */ - bzero((char *)gpsunits, sizeof gpsunits); - bzero((char *)unitinuse, sizeof unitinuse); + memset((char *)gpsunits, 0, sizeof gpsunits); + memset((char *)unitinuse, 0, sizeof unitinuse); /* * Initialize fudge factors to default. @@ -563,21 +573,28 @@ trak_receive(rbufp) * timecode has format *........RQTS U,ddd:hh:mm:ss.0,Q\r\n). * 012345678901234567890123 */ +#define RQTS 0 +#define RQLS 1 cp = (u_char *)gps->lastcode; gps->leap = 0; cmdtype=0; - if (strncmp(cp,"RQTS",4)==0) { - cmdtype=1; + if(strncmp(cp,"*RQTS",5)==0) { + cmdtype=RQTS; + cp += 8; + } + else if(strncmp(cp,"RQTS",4)==0) { + cmdtype=RQTS; cp += 7; } - else if(strncmp(cp,"*RQTS",5)==0) { - cmdtype=2; - cp += 8; + else if(strncmp(cp,"RQLS",4)==0) { + cmdtype=RQLS; + cp += 5; } - else return; + else + return; + switch( cmdtype ) { - case 1: - case 2: + case RQTS: /* * Check time code format of TRAK 8810 */ @@ -598,6 +615,12 @@ trak_receive(rbufp) return; } break; + case RQLS: + /* + * reply for leap second request + */ + if (cp[0] !='0' || cp[1] != '0' ) gps->leap = LEAP_ADDSECOND; + return; default: return; @@ -627,8 +650,10 @@ trak_receive(rbufp) return; } + if (!gps->polled) return; + /* - * Test for synchronization + * Test for synchronization Check for quality byte. */ /* switch( cp[15] ) { @@ -646,9 +671,20 @@ trak_receive(rbufp) break; } */ - gps->lasttime = current_time; - - if (!gps->polled) return; + if( cp[15] == '0') /* TRAK derailed from tracking satellites */ + { + gps->leap = LEAP_NOTINSYNC; + gps->noreply++; + trak_report_event(gps, CEVNT_TIMEOUT); + } + else + { + gps->lasttime = current_time; + if( gps->lastevent == CEVNT_TIMEOUT ) { + gps->status = CEVNT_NOMINAL; + trak_report_event(gps, CEVNT_NOMINAL); + } + } /* * Now, compute the reference time value. Use the heavy @@ -848,7 +884,7 @@ trak_poll(unit, peer) #endif gps->polls++; /* - * may be polled every 64 seconds + * may be polled every 16 seconds (minpoll 4) */ gps->polled = 1; } @@ -906,7 +942,8 @@ trak_control(unit, in, out) out->flags = sloppyclockflag[unit]; if (unitinuse[unit]) { gps = gpsunits[unit]; - out->lencode = LENTOC; + out->lencode = gps->lencode; /* LENTOC */; + out->lastcode = gps->lastcode; out->timereset = current_time - gps->timestarted; out->polls = gps->polls; out->noresponse = gps->noreply; |