sommerfeld@apollo.hp.com (Bill Sommerfeld) (03/29/90)
NTP is the Network Time Protocol, a time synchronization protocol in use on the Internet; xntp is an implementation of NTP for UNIX systems. This message includes patches to xntp to allow it to run on Apollo systems running Domain/OS SR10.2 and later. Note that xntp and xntpd are *not* supported by myself or by HP/Apollo; use it at your own risk; however, if you do have any problems with this software, I'm interested in hearing about them; send a *complete* report including as much information as possible about the problem via email at sommerfeld@apollo.com The base sources to which these patches can be applied was obtained by anonymous FTP from gw.ccie.utoronto.ca, in pub/ntp/xntp.tar.Z. Those interested in the details of the protocol will probably want to pick up the Internet Request for Comments 1119 (RFC1119); these are available from a number of places on the Internet, including by anonymous FTP from NIC.DDN.MIL in the RFC: directory. You may want to join an Internet mailing list about NTP; send mail to ntp-request@trantor.umd.edu to join. Announcements of new versions of ntp software and much other discussion happens on that list. Those configuring clocks on the Internet should fetch pub/ntp/ntpinfo and pub/ntp/clock.txt from louie.udel.edu for some advice. I'm not aware of any non-Internet sites which have xntp available for anonymous UUCP, so you're probably SOL if you're not connected to the Internet (please don't ask me to post sources; they're over 1MB uncompressed). What works: Support for both unicast and broadcast NTP has been tested with these patches; it has been built on both 680x0 and PRISM systems. Support for reference clocks has not been tested, although it might work; people with a spare radio clock are encouraged to try it out. Known bugs: XNTPD uses asynchronous I/O (aka SIGIO). There is a bug in the "short circuit" support for asynchronous UDP at SR10.2 and before; in order to run ntpq, xntpdc, and other programs that may talk to the daemon on the same host as the daemon, you need to either: a) turn on the lo0 ("loopback") interface in /etc/rc.local and communicate with "localhost" b) run these programs as root. To build on an SR10.2 system, you need to do the following in the BSD4.3 environment: - fetch and unpack the source tar file. - read the documentation and man pages in doc/* - apply the enclosed patches, either by hand or with "patch". - edit Config to include the appropriate definitions; you *must* include -DNOKMEM in DEFS; you might need to use -DNO_SIGNED_CHAR_DECL as well depending on which version of the C compiler you have. - apply the config file to the makefiles by running "make makefiles" - build the system by using "make". See the README file in the sources for additional information. *** xntpd/ntp_io.c/1 Sun Nov 5 19:24:42 1989 --- xntpd/ntp_io.c Fri Mar 23 15:43:38 1990 *************** *** 339,346 **** --- 339,348 ---- continue; if (inter_list[i].flags & INT_BCASTOPEN) continue; + #ifndef apollo inter_list[i].bfd = open_socket(&inter_list[i].bcast, 0); inter_list[i].flags |= INT_BCASTOPEN; + #endif } } *************** *** 744,753 **** n--; /* * Get a buffer and read the frame. If we ! * haven't got a buffer, or this is received ! * on the wild card socket, just dump the packet. */ ! if (i == 0 || free_recvbufs == 0) { char buf[RX_BUFF_SIZE]; (void) read(fd, buf, sizeof buf); --- 746,763 ---- n--; /* * Get a buffer and read the frame. If we ! * haven't got a buffer, ! #ifndef apollo ! * or this is received ! * on the wild card socket, ! #endif ! * just dump the packet. */ ! if ( ! #ifndef apollo ! i == 0 || ! #endif ! free_recvbufs == 0) { char buf[RX_BUFF_SIZE]; (void) read(fd, buf, sizeof buf); *** xntpd/ntp_unixclock.c/1 Wed Oct 25 22:53:05 1989 --- xntpd/ntp_unixclock.c Fri Mar 23 00:55:06 1990 *************** *** 4,10 **** --- 4,12 ---- */ #include <stdio.h> + #ifndef NOKMEM #include <nlist.h> + #endif #include <sys/types.h> #include <sys/time.h> #include <sys/file.h> *************** *** 365,371 **** ! #ifndef NOKMEM /* * clock_parms - return the local clock tickadj and tick parameters * --- 367,405 ---- ! #ifdef NOKMEM ! /* ! * clock_parms - return the local clock tickadj and tick parameters. ! * ! * Note that this version requires the correct constants to be set at ! * compile time. ! */ ! void ! clock_parms(tickadj, tick) ! u_long *tickadj; ! u_long *tick; ! { ! #ifndef HZ ! #define HZ 60 ! #endif ! ! #ifndef TICKADJ ! #define TICKADJ 668 /* correct for apollo SR10.2 ... */ ! #endif ! ! *tickadj = TICKADJ; ! *tick = 1000000L / HZ; ! #ifdef DEBUG ! if (debug) { ! printf("NOTE: Using preset values for tick and tickadj !!\n"); ! printf("kernel vars: tickadj = %d, tick = %d\n", ! *tickadj, *tick); ! } ! #endif ! } ! ! ! #else /* * clock_parms - return the local clock tickadj and tick parameters * *** xntpd/ntpd.c/1 Sat Sep 23 17:22:45 1989 --- xntpd/ntpd.c Fri Mar 23 00:38:51 1990 *************** *** 119,124 **** --- 119,125 ---- (void) ioctl(s, (u_long) TIOCNOTTY, (char *) 0); (void) close(s); } + (void) setpgrp(0, getpid()); } #ifdef DEBUG }