This commit was generated by cvs2svn to compensate for changes in r1381,

which included commits to RCS files with non-trunk default branches.
This commit is contained in:
Garrett Wollman 1994-04-21 00:33:33 +00:00
commit 2bd971d8d2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=1382
99 changed files with 21678 additions and 2568 deletions

View File

@ -55,4 +55,6 @@
* Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
* Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
* Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
* Ray Schnitzler <schnitz@unipress.com> (First pass at a Unixware1 port.)
* Ajit Thyagarajan <ajit@ee.udel.edu> (IP multicast support)
*/

View File

@ -78,7 +78,7 @@ DEFS_OPT=-DDEBUG
# special distribution.
#
# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DKERNEL_PLL -DMCAST
#
# Radio clock support definitions (these only make sense if -DREFCLOCK
@ -182,7 +182,7 @@ DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL
# under Ultrix 4.2a/3. If the MX4200 is removed, all the rest compile on a DEC
# OSF/1 Alpha.
#
CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHU -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH
CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHUPPS -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DLEITCH
#
# Directory into which binaries should be installed (default /usr/local)

View File

@ -31,6 +31,10 @@ this distribution. To make these programs:
For custom tailored configuration copying Config.local.dist to Config.local
and editing Config.local to suit the local needs is neccessary (at most
3 lines to change), or use one of the make's above and then tweak it.
Config.local can also be used to override common settings from the
machines/* files like the AUTHDEFS= to select very specific configurations.
Please use this feature with care and don't be disappointed if it doesn't
work the way you expect.
(2) Type "make" to compile everything of general interest. Expect few or
no warnings using cc and a moderate level of warnings using gcc.
@ -140,6 +144,7 @@ the meal. The converse is not always true.
PC BSD/386 1.0 gcc LOCAL_CLOCK possibly see "build problems"
PC Linux (pl14) gcc LOCAL_CLOCK (dw 93/10/30)
PC Dell SVR4 v2.2 gcc ? (tl 93/12/30)
PC Unixware1/SVR4 cc no tickadj, ? (ras 93/04/11)
NCR3445 NCR SVR4 cc LOCAL_CLOCK (tm 93/11/29)
pb: Piete Brooks
@ -149,6 +154,7 @@ the meal. The converse is not always true.
tl: Tony Lill <ajlill@tlill.hookup.net>
tm: Tom Moore <Tom.Moore@DaytonOH.NCR.COM>
jmj: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
ras: Ray Schnitzler <schnitz@unipress.com>
Build Problems (and workaround):

View File

@ -1 +1 @@
version=3.3p (beta)
version=3.3s (beta multicast)

View File

@ -2,7 +2,7 @@
* authspeed - figure out how LONG it takes to do an NTP encryption
*/
#if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
#if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIXWARE1)
#define FAKE_RUSAGE
#endif

View File

@ -78,7 +78,7 @@ DEFS_OPT=-DDEBUG
# special distribution.
#
# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DKERNEL_PLL -DMCAST
#
# Radio clock support definitions (these only make sense if -DREFCLOCK
@ -182,7 +182,7 @@ DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL
# under Ultrix 4.2a/3. If the MX4200 is removed, all the rest compile on a DEC
# OSF/1 Alpha.
#
CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHUPPS -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH
CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHUPPS -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DLEITCH
#
# Directory into which binaries should be installed (default /usr/local)

View File

@ -78,7 +78,7 @@ DEFS_OPT=-DDEBUG
# special distribution.
#
# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DKERNEL_PLL
DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DKERNEL_PLL -DMCAST
#
# Radio clock support definitions (these only make sense if -DREFCLOCK

File diff suppressed because it is too large Load Diff

View File

@ -137,6 +137,9 @@ on this computer
specify the location of the drift file
.Ip -k 8
specify the location of the file which contains the NTP authentication keys
.Ip -m 8
listen for multicast NTP and sync to this if available (requires multicast
kernel)
.Ip -p 8
specify the name of the file to record the daemon's process id
.Ip -r 8
@ -215,7 +218,10 @@ the remote host synchronize to your own time. The
.B broadcast
statement requests your local daemon to transmit broadcast NTP to
the specified address. The latter is usually the broadcast address
on [one of] your local network[s].
on [one of] your local network[s] or a multicast address assigned to
NTP. The Numbers Czar has assigned the address 224.0.1.1 to NTP; this
is presently the only number that should be used. Note that the use
of multicast requires a multicast kernel.
.PP
The
.B key
@ -273,7 +279,7 @@ must have write permission for the directory the drift file is located
in, and that file system links, symbolic or otherwise, should probably
be avoided.
.PP
.B "monitor yes|no"
.B monitor yes|no
.PP
Indicates whether the
.I xntpd
@ -297,10 +303,23 @@ is primarily intended for very popular servers which exchange time with
large numbers of peers, though it may also be useful for access monitoring
of local servers if you are willing to accept the overhead.
.PP
.B "broadcastclient yes|no"
.B broadcastclient
.PP
This indicates whether the local server should listen for, and attempt to
synchonize to, broadcast NTP. The default is \*(L"no\*(R".
This directs the local server should listen for, and attempt to
synchonize to, broadcast NTP. Note that authentication is required in
this mode.
.PP
.B multicastclient
[
.I IP address ...
]
.PP
This directs the local server should listen for, and attempt to
synchonize to, multicast NTP. This function requires a multicast kernel
and the use of authentication.
If one or more IP addresses are given, the server joins the respective
multicast group. If none are given, the default address assigned to
NTP (224.0.1.1) is assumed.
.PP
.B broadcastdelay
.I seconds
@ -311,7 +330,7 @@ typically (for ethernet) a number between 0.007 and 0.015 seconds. This
initial estimate may be improved by polling each server to determine a
more accurate value. Defaults to 0.008 seconds.
.PP
.B "authenticate yes|no"
.B authenticate yes|no
.PP
Indicates whether the local server should operate in authenticate mode
or not. If \*(L"yes\*(R", only peers which include an authentication field

View File

@ -382,6 +382,12 @@ other clock performance information.
Obtain debugging information for a clock peer. This information is
provided only by some clock drivers and is mostly undecodable without
a copy of the driver source in hand.
.PP
.B kerninfo
.PP
Obtain and print kernel phase-lock loop operating parameters. This
information is available only if the kernel has been specially modified
for a precision timekeeping function.
.SH RUNTIME CONFIGURATION REQUESTS
.PP
All requests which cause state changes in the server are authenticated
@ -494,15 +500,16 @@ deleted. When appropriate, however, the association may persist in
an unconfigured mode if the remote peer is willing to continue on in
this fashion.
.PP
.B set bclient|auth
.B set bclient|mclient|auth
[
.I ...
]
.PP
Allows the setting of the broadcast client and/or authenticate system
flags. Setting the former causes the server to listen for broadcast
NTP to to synchronize to broadcasts when appropriate. Setting the
latter flag causes the server to only synchronize with peers which
Allows the setting of the broadcast/multicast client and/or authenticate
system flags. Setting bclient causes the server to listen for broadcast
NTP to to synchronize to broadcasts when appropriate. Setting mclient
causes the same thing, but using multicast facilities, when available.
Setting auth causes the server to only synchronize with peers which
include an authentication field encrypted with one of the local server's
trusted keys.
.PP
@ -511,9 +518,9 @@ trusted keys.
.I ...
]
.PP
Allows the broadcast client and/or authenticate system flags to be
cleared. Clearing the former causes incoming broadcast NTP packets
to be ignored. Clearing the latter allows peers which have not included
Allows the broadcast/multicast client and/or authenticate system flags to be
cleared. Clearing bclient causes incoming broadcast and multicast NTP packets
to be ignored. Clearing auth allows peers which have not included
an authentication field, or which have included one but have encrypted
it with an untrusted key, to be considered synchronization candidates.
.PP
@ -663,14 +670,6 @@ done.
.PP
Sets the precision which the server advertises to the specified value. This
should be a negative integer in the range -4 through -20.
.PP
.B setselect
.I algorithm_number
.PP
Sets the selection weight algorithm to that indicated by the specified number.
This should be an integer value between 1 and 5 inclusive. Algorithm 1
is that specified in RFC 1119, the other 4 algorithms are experimental
and should be used with caution.
.SH SEE ALSO
.PP
.IR xntpd (8)

View File

@ -70,11 +70,11 @@ extern int getppid P((void));
extern int close P((int));
extern int ioctl P((int, int, char *));
extern int read P((int, char *, unsigned));
extern int read P((int, void *, unsigned));
extern int rename P((char *, char *));
extern int write P((int, char *, int));
extern int unlink P((char *));
extern int link P((char *, char *));
extern int write P((int, const void *, unsigned));
extern int unlink P((const char *));
extern int link P((const char *, const char *));
#ifdef FILE
extern int fclose P((FILE *));

View File

@ -173,6 +173,7 @@ struct interface {
#define INT_BROADCAST 1 /* can broadcast out this interface */
#define INT_BCASTOPEN 2 /* broadcast socket is open */
#define INT_LOOPBACK 4 /* the loopback interface */
#define INT_MULTICAST 8 /* multicasting enabled */
/*
* Define flasher bits (tests 1 through 8 in packet procedure)
@ -222,7 +223,7 @@ struct peer {
U_LONG keyid; /* encription key ID */
U_LONG pkeyid; /* keyid used to encrypt last message */
u_short associd; /* association ID, a unique integer */
u_char unused;
u_char ttl; /* time to live (multicast) */
/* **Start of clear-to-zero area.*** */
/* Everything that is cleared to zero goes below here */
u_char valid; /* valid counter */
@ -248,12 +249,6 @@ struct peer {
s_fp soffset; /* fp version of above */
s_fp synch; /* synch distance from above */
u_fp selectdisp; /* select dispersion */
/*
* Stuff related to the experimental broadcast delay
* determination code. The registers will probably go away
* later.
*/
U_LONG estbdelay; /* broadcast delay, as a ts fraction */
/*
@ -579,8 +574,8 @@ struct recvbuf {
#define PROTO_AUTHENTICATE 3
#define PROTO_BROADDELAY 4
#define PROTO_AUTHDELAY 5
#define PROTO_MAXSKEW 6
#define PROTO_SELECT 7
#define PROTO_MULTICAST_ADD 6
#define PROTO_MULTICAST_DEL 7
/*
* Configuration items for the loop filter
@ -603,7 +598,7 @@ struct recvbuf {
*/
#define DEFPRECISION (-5) /* conservatively low */
#define DEFBROADDELAY (0x020c49ba) /* 8 ms. This is round trip delay */
#define INADDR_NTP 0xe0000101 /* NTP multicast address 224.0.1.1 */
/*
* Structure used optionally for monitoring when this is turned on.
*/

View File

@ -68,6 +68,7 @@ struct ntp_control {
#define CTL_SST_TS_UDPTIME 7 /* time source UDP/TIME */
#define CTL_SST_TS_WRSTWTCH 8 /* time source is wristwatch */
#define CTL_SST_TS_TELEPHONE 9 /* time source is telephone modem */
#define CTL_SST_TS_PPS 0x20 /* time source is PPS signal */
#define CTL_SYS_MAXEVENTS 15

View File

@ -16,6 +16,10 @@
#include <sys/sockio.h>
#endif
#if defined(SYS_UNIXWARE1)
#include <sys/sockio.h>
#endif
#if defined(SYS_PTX) || defined(SYS_SINIXM)
#include <sys/stream.h>
#include <sys/stropts.h>

259
usr.sbin/xntpd/include/ntp_in.h Executable file
View File

@ -0,0 +1,259 @@
/* @(#)in.h 1.19 90/07/27 SMI; from UCB 7.5 2/22/88 */
/*
* Copyright (c) 1982, 1986 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that this notice is preserved and that due credit is given
* to the University of California at Berkeley. The name of the University
* may not be used to endorse or promote products derived from this
* software without specific prior written permission. This software
* is provided ``as is'' without express or implied warranty.
*/
/*
* Constants and structures defined by the internet system,
* Per RFC 790, September 1981.
*/
#ifndef _netinet_in_h
#define _netinet_in_h
#define _NETINET_IN_H_
#define _SYS_IN_INCLUDED
#define __IN_HEADER
/*
* Protocols
*/
#define IPPROTO_IP 0 /* dummy for IP */
#define IPPROTO_ICMP 1 /* control message protocol */
#define IPPROTO_IGMP 2 /* group control protocol */
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */
#define IPPROTO_ST 5 /* st */
#define IPPROTO_TCP 6 /* tcp */
#define IPPROTO_EGP 8 /* exterior gateway protocol */
#define IPPROTO_PUP 12 /* pup */
#define IPPROTO_UDP 17 /* user datagram protocol */
#define IPPROTO_IDP 22 /* xns idp */
#define IPPROTO_HELLO 63 /* "hello" routing protocol */
#define IPPROTO_ND 77 /* UNOFFICIAL net disk proto */
#define IPPROTO_OSPF 89 /* Open SPF IGP */
#define IPPROTO_RAW 255 /* raw IP packet */
#define IPPROTO_MAX 256
/*
* Port/socket numbers: network standard functions
*/
#define IPPORT_ECHO 7
#define IPPORT_DISCARD 9
#define IPPORT_SYSTAT 11
#define IPPORT_DAYTIME 13
#define IPPORT_NETSTAT 15
#define IPPORT_FTP 21
#define IPPORT_TELNET 23
#define IPPORT_SMTP 25
#define IPPORT_TIMESERVER 37
#define IPPORT_NAMESERVER 42
#define IPPORT_WHOIS 43
#define IPPORT_MTP 57
/*
* Port/socket numbers: host specific functions
*/
#define IPPORT_TFTP 69
#define IPPORT_RJE 77
#define IPPORT_FINGER 79
#define IPPORT_TTYLINK 87
#define IPPORT_SUPDUP 95
/*
* UNIX TCP sockets
*/
#define IPPORT_EXECSERVER 512
#define IPPORT_LOGINSERVER 513
#define IPPORT_CMDSERVER 514
#define IPPORT_EFSSERVER 520
/*
* UNIX UDP sockets
*/
#define IPPORT_BIFFUDP 512
#define IPPORT_WHOSERVER 513
#define IPPORT_ROUTESERVER 520 /* 520+1 also used */
/*
* Ports < IPPORT_RESERVED are reserved for
* privileged processes (e.g. root).
* Ports > IPPORT_USERRESERVED are reserved
* for servers, not necessarily privileged.
*/
#define IPPORT_RESERVED 1024
#define IPPORT_USERRESERVED 5000
/*
* Link numbers
*/
#define IMPLINK_IP 155
#define IMPLINK_LOWEXPER 156
#define IMPLINK_HIGHEXPER 158
/*
* Internet address
* This definition contains obsolete fields for compatibility
* with SunOS 3.x and 4.2bsd. The presence of subnets renders
* divisions into fixed fields misleading at best. New code
* should use only the s_addr field.
*/
struct in_addr {
union {
struct { u_char s_b1,s_b2,s_b3,s_b4; } S_un_b;
struct { u_short s_w1,s_w2; } S_un_w;
u_long S_addr;
} S_un;
#define s_addr S_un.S_addr /* should be used for all code */
#define s_host S_un.S_un_b.s_b2 /* OBSOLETE: host on imp */
#define s_net S_un.S_un_b.s_b1 /* OBSOLETE: network */
#define s_imp S_un.S_un_w.s_w2 /* OBSOLETE: imp */
#define s_impno S_un.S_un_b.s_b4 /* OBSOLETE: imp # */
#define s_lh S_un.S_un_b.s_b3 /* OBSOLETE: logical host */
};
/*
* Definitions of bits in internet address integers.
* On subnets, the decomposition of addresses to host and net parts
* is done according to subnet mask, not the masks here.
*/
#define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0)
#define IN_CLASSA_NET 0xff000000
#define IN_CLASSA_NSHIFT 24
#define IN_CLASSA_HOST 0x00ffffff
#define IN_CLASSA_MAX 128
#define IN_CLASSB(i) (((long)(i) & 0xc0000000) == 0x80000000)
#define IN_CLASSB_NET 0xffff0000
#define IN_CLASSB_NSHIFT 16
#define IN_CLASSB_HOST 0x0000ffff
#define IN_CLASSB_MAX 65536
#define IN_CLASSC(i) (((long)(i) & 0xe0000000) == 0xc0000000)
#define IN_CLASSC_NET 0xffffff00
#define IN_CLASSC_NSHIFT 8
#define IN_CLASSC_HOST 0x000000ff
#define IN_CLASSD(i) (((long)(i) & 0xf0000000) == 0xe0000000)
#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */
#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */
#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */
#define IN_MULTICAST(i) IN_CLASSD(i)
#define IN_EXPERIMENTAL(i) (((long)(i) & 0xe0000000) == 0xe0000000)
#define IN_BADCLASS(i) (((long)(i) & 0xf0000000) == 0xf0000000)
#define INADDR_ANY (u_long)0x00000000
#define INADDR_LOOPBACK (u_long)0x7F000001
#define INADDR_BROADCAST (u_long)0xffffffff /* must be masked */
#define INADDR_UNSPEC_GROUP (u_long)0xe0000000 /* 224.0.0.0 */
#define INADDR_ALLHOSTS_GROUP (u_long)0xe0000001 /* 224.0.0.1 */
#define INADDR_MAX_LOCAL_GROUP (u_long)0xe00000ff /* 224.0.0.255 */
#define IN_LOOPBACKNET 127 /* official! */
/*
* Define a macro to stuff the loopback address into an Internet address
*/
#define IN_SET_LOOPBACK_ADDR(a) {(a)->sin_addr.s_addr = htonl(INADDR_LOOPBACK); \
(a)->sin_family = AF_INET;}
/*
* Socket address, internet style.
*/
struct sockaddr_in {
short sin_family;
u_short sin_port;
struct in_addr sin_addr;
char sin_zero[8];
};
/*
* Options for use with [gs]etsockopt at the IP level.
*/
#define IP_OPTIONS 1 /* set/get IP per-packet options */
#define IP_MULTICAST_IF 2 /* set/get IP multicast interface */
#define IP_MULTICAST_TTL 3 /* set/get IP multicast timetolive */
#define IP_MULTICAST_LOOP 4 /* set/get IP multicast loopback */
#define IP_ADD_MEMBERSHIP 5 /* add an IP group membership */
#define IP_DROP_MEMBERSHIP 6 /* drop an IP group membership */
#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */
#define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
#define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */
/*
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
*/
struct ip_mreq {
struct in_addr imr_multiaddr; /* IP multicast address of group */
struct in_addr imr_interface; /* local IP address of interface */
};
#if !defined(vax) && !defined(ntohl) && !defined(i386)
/*
* Macros for number representation conversion.
*/
#define ntohl(x) (x)
#define ntohs(x) (x)
#define htonl(x) (x)
#define htons(x) (x)
#endif
#if !defined(ntohl) && (defined(vax) || defined(i386))
u_short ntohs(), htons();
u_long ntohl(), htonl();
#endif
#ifdef KERNEL
extern struct domain inetdomain;
extern struct protosw inetsw[];
struct in_addr in_makeaddr();
u_long in_netof(), in_lnaof();
#endif
#ifndef BYTE_ORDER
/*
* Definitions for byte order,
* according to byte significance from low address to high.
*/
#define LITTLE_ENDIAN 1234 /* least-significant byte first (vax) */
#define BIG_ENDIAN 4321 /* most-significant byte first (IBM, net) */
#define PDP_ENDIAN 3412 /* LSB first in word, MSW first in long (pdp) */
#if defined(vax) || defined(i386)
#define BYTE_ORDER LITTLE_ENDIAN
#else
#define BYTE_ORDER BIG_ENDIAN /* mc68000, tahoe, most others */
#endif
#endif BYTE_ORDER
/*
* Macros for number representation conversion.
*/
#if BYTE_ORDER==LITTLE_ENDIAN
#define NTOHL(d) ((d) = ntohl((d)))
#define NTOHS(d) ((d) = ntohs((d)))
#define HTONL(d) ((d) = htonl((d)))
#define HTONS(d) ((d) = htons((d)))
#else
#define ntohl(x) (x)
#define ntohs(x) (x)
#define htonl(x) (x)
#define htons(x) (x)
#define NTOHL(d)
#define NTOHS(d)
#define HTONL(d)
#define HTONS(d)
#endif
#endif /*!_netinet_in_h*/

View File

@ -3,6 +3,7 @@
* SEEK_SET symbol form <untisd.h>.
*/
#if defined(NTP_POSIX_SOURCE)
/*
* POSIX way
*/

View File

@ -525,6 +525,40 @@ typedef unsigned long u_long;
#endif
#endif
/*
* (Univel/Novell) Unixware1 SVR4 on intel x86 processor
*/
#if defined(SYS_UNIXWARE1)
/* #define _POSIX_SOURCE */
#undef HAVE_ATT_SETPGRP
#define USE_PROTOTYPES
#define NTP_POSIX_SOURCE
#define HAVE_ATT_NICE
#define HAVE_READKMEM
#define USE_TTY_SIGPOLL
#define USE_UDP_SIGPOLL
#define UDP_WILDCARD_DELIVERY
#undef HAVE_SIGNALED_IO
#define STREAM
#define STREAMS
#ifndef STREAMS_TLI
/*#define STREAMS_TLI*/
#endif
/* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
#undef STEP_SLEW /* TWO step */
#define LOCK_PROCESS
#define NO_SIGNED_CHAR_DECL
#undef SYSV_TIMEOFDAY
#define SIZE_RETURNED_IN_BUFFER
#define RETSIGTYPE void
#include <sys/sockio.h>
#include <sys/types.h>
#include <netinet/in_systm.h>
#ifndef STR_SYSTEM
#define STR_SYSTEM "UNIX/Unixware1"
#endif
#endif
/*
* DomainOS
*/

View File

@ -254,9 +254,8 @@ struct resp_pkt {
#define REQ_GET_LEAPINFO 35 /* get leap information */
#define REQ_GET_CLOCKINFO 36 /* get clock information */
#define REQ_SET_CLKFUDGE 37 /* set clock fudge factors */
#define REQ_SET_MAXSKEW 38 /* set the maximum skew factor */
#define REQ_GET_KERNEL 38 /* get kernel pll/pps information */
#define REQ_GET_CLKBUGINFO 39 /* get clock debugging info */
#define REQ_SET_SELECT_CODE 40 /* set selection algorithm */
#define REQ_SET_PRECISION 41 /* set clock precision */
@ -267,8 +266,9 @@ struct resp_pkt {
#define INFO_FLAG_SYSPEER 0x2
#define INFO_FLAG_MINPOLL 0x4
#define INFO_FLAG_REFCLOCK 0x8
#define INFO_FLAG_MCLIENT 0x8 /* danger */
#define INFO_FLAG_BCLIENT 0x10
#define INFO_FLAG_PREFER 0x10 /* SHARES BCLIENT bit - ok since mutually exclusive - Oh why ist flags a u_char ? */
#define INFO_FLAG_PREFER 0x10 /* danger */
#define INFO_FLAG_AUTHENABLE 0x20
#define INFO_FLAG_SEL_CANDIDATE 0x40
#define INFO_FLAG_SHORTLIST 0x80
@ -323,10 +323,10 @@ struct info_peer {
u_char valid; /* peer.valid */
u_char reach; /* peer.reach */
u_char unreach; /* peer.unreach */
u_char trust; /* peer.trust */
u_char unused1;
u_char unused2;
u_char unused3;
u_char flash; /* peer.flash */
u_char ttl; /* peer.ttl */
u_char unused8; /* (obsolete) */
u_char unused9;
u_short associd; /* association ID */
U_LONG keyid; /* auth key in use */
U_LONG pkeyid; /* peer.pkeyid */
@ -344,7 +344,14 @@ struct info_peer {
s_fp delay; /* peer.estdelay */
u_fp dispersion; /* peer.estdisp */
l_fp offset; /* peer.estoffset */
U_LONG bdelay[NTP_SHIFT]; /* broadcast delay filters */
u_fp selectdisp; /* peer select dispersion */
LONG unused1; /* (obsolete) */
LONG unused2;
LONG unused3;
LONG unused4;
LONG unused5;
LONG unused6;
LONG unused7;
U_LONG estbdelay; /* broadcast delay */
};
@ -406,12 +413,13 @@ struct info_sys {
U_LONG refid; /* reference ID of sync source */
l_fp reftime; /* system reference time */
U_LONG poll; /* system poll interval */
u_short flags; /* system flags */
u_char selection; /* selection algorithm code */
u_char unused;
l_fp bdelay; /* default broadcast delay, a ts fraction */
u_char flags; /* system flags */
u_char unused1; /* unused */
u_char unused2; /* unused */
u_char unused3; /* unused */
l_fp bdelay; /* default broadcast delay */
l_fp authdelay; /* default authentication delay */
u_fp maxskew; /* maximum skew parameter (obsolete) */
u_fp maxskew; /* (obsolete) */
};
@ -428,7 +436,7 @@ struct info_sys_stats {
U_LONG badlength; /* packets with bad length */
U_LONG processed; /* packets processed */
U_LONG badauth; /* packets dropped because of authorization */
U_LONG wanderhold;
U_LONG wanderhold; /* (obsolete) */
U_LONG limitrejected; /* rejected because of client limitation */
};
@ -504,7 +512,8 @@ struct conf_peer {
u_char minpoll; /* min host poll interval */
u_char maxpoll; /* max host poll interval */
u_char flags; /* flags for this request */
u_char unused;
u_char ttl; /* time to live (multicast) */
u_short unused; /* unused */
U_LONG keyid; /* key to use for this association */
};
@ -534,6 +543,7 @@ struct conf_sys_flags {
*/
#define SYS_FLAG_BCLIENT 0x1
#define SYS_FLAG_AUTHENTICATE 0x2
#define SYS_FLAG_MCLIENT 0x4
/*
* Structure used for returning restrict entries
@ -742,3 +752,29 @@ struct info_clkbug {
U_LONG values[NUMCBUGVALUES];
l_fp times[NUMCBUGTIMES];
};
/*
* Structure used for returning kernel pll/PPS information
*/
struct info_kernel {
LONG offset;
LONG freq;
LONG maxerror;
LONG esterror;
u_short status;
u_short shift;
LONG constant;
LONG precision;
LONG tolerance;
/*
* Variables used only if PPS signal discipline is implemented
*/
LONG ppsfreq;
LONG jitter;
LONG stabil;
LONG jitcnt;
LONG calcnt;
LONG errcnt;
LONG stbcnt;
};

View File

@ -17,6 +17,10 @@
/*
* Modification history timex.h
*
* 19 Mar 94 David L. Mills
* Moved defines from kernel routines to header file and added new
* defines for PPS phase-lock loop.
*
* 20 Feb 94 David L. Mills
* Revised status codes and structures for external clock and PPS
* signal discipline.
@ -24,7 +28,7 @@
* 28 Nov 93 David L. Mills
* Adjusted parameters to improve stability and increase poll
* interval.
*
*
* 17 Sep 93 David L. Mills
* Created file
*/
@ -57,98 +61,213 @@
* struct timex *tptr pointer to timex structure
*
*/
#ifndef MSDOS /* Microsoft specific */
#include <sys/syscall.h>
#endif /* MSDOS */
/*
* The following defines establish the engineering parameters of the PLL
* model. The hz variable is defined in the kernel build environment. It
* The following defines establish the engineering parameters of the
* phase-lock loop (PLL) model used in the kernel implementation. These
* parameters have been carefully chosen by analysis for good stability
* and wide dynamic range.
*
* The hz variable is defined in the kernel build environment. It
* establishes the timer interrupt frequency, 100 Hz for the SunOS
* kernel, 256 Hz for the Ultrix kernel and 1024 Hz for the OSF/1
* kernel. The SHIFT_HZ define expresses the same value as the nearest
* power of two in order to avoid hardware multiply operations.
* kernel. SHIFT_HZ expresses the same value as the nearest power of two
* in order to avoid hardware multiply operations.
*
* SHIFT_KG and SHIFT_KF establish the damping of the PLL and are chosen
* for a slightly underdamped convergence characteristic.
*
* MAXTC establishes the maximum time constant of the PLL. With the
* SHIFT_KG and SHIFT_KF values given and a time constant range from
* zero to MAXTC, the PLL will converge in 15 minutes to 16 hours,
* respectively.
*/
#define SHIFT_HZ 7 /* log2(hz) */
/*
* The SHIFT_KG and SHIFT_KF defines establish the damping of the PLL
* and are chosen by analysis for a slightly underdamped convergence
* characteristic. The MAXTC define establishes the maximum time
* constant of the PLL. With the parameters given and the minimum time
* constant of zero, the PLL will converge in about 15 minutes.
*/
#define SHIFT_KG 6 /* phase factor (shift) */
#define SHIFT_KF 16 /* frequency factor (shift) */
#define MAXTC 6 /* maximum time constant (shift) */
/*
* The following defines establish the scaling of the various variables
* used by the PLL. They are chosen to allow the greatest precision
* possible without overflow of a 32-bit word.
*
* SHIFT_SCALE defines the scaling (shift) of the time_phase variable,
* which serves as a an extension to the low-order bits of the system
* clock variable time.tv_usec. SHIFT_UPDATE defines the scaling (shift)
* of the time_offset variable, which represents the current time offset
* with respect to standard time. SHIFT_USEC defines the scaling (shift)
* of the time_freq and time_tolerance variables, which represent the
* current frequency offset and frequency tolerance. FINEUSEC is 1 us in
* SHIFT_UPDATE units of the time_phase variable.
* clock variable time.tv_usec.
*
* SHIFT_UPDATE defines the scaling (shift) of the time_offset variable,
* which represents the current time offset with respect to standard
* time.
*
* SHIFT_USEC defines the scaling (shift) of the time_freq and
* time_tolerance variables, which represent the current frequency
* offset and maximum frequency tolerance.
*
* FINEUSEC is 1 us in SHIFT_UPDATE units of the time_phase variable.
*/
#define SHIFT_SCALE 23 /* phase scale (shift) */
#define SHIFT_UPDATE (SHIFT_KG + MAXTC) /* time offset scale (shift) */
#define SHIFT_USEC 16 /* frequency offset scale (shift) */
#define FINEUSEC (1 << SHIFT_SCALE) /* 1 us in phase units */
#define FINEUSEC (1L << SHIFT_SCALE) /* 1 us in phase units */
/*
* Mode codes (timex.mode)
* The following defines establish the performance envelope of the PLL.
* They insure it operates within predefined limits, in order to satisfy
* correctness assertions. An excursion which exceeds these bounds is
* clamped to the bound and operation proceeds accordingly. In practice,
* this can occur only if something has failed or is operating out of
* tolerance, but otherwise the PLL continues to operate in a stable
* mode.
*
* MAXPHASE must be set greater than or equal to CLOCK.MAX (128 ms), as
* defined in the NTP specification. CLOCK.MAX establishes the maximum
* time offset allowed before the system time is reset, rather than
* incrementally adjusted. Here, the maximum offset is clamped to
* MAXPHASE only in order to prevent overflow errors due to defective
* protocol implementations.
*
* MAXFREQ is the maximum frequency tolerance of the CPU clock
* oscillator plus the maximum slew rate allowed by the protocol. It
* should be set to at least the frequency tolerance of the oscillator
* plus 100 ppm for vernier frequency adjustments. If the kernel
* PPS discipline code is configured (PPS_SYNC), the oscillator time and
* frequency are disciplined to an external source, presumably with
* negligible time and frequency error relative to UTC, and MAXFREQ can
* be reduced.
*
* MAXTIME is the maximum jitter tolerance of the PPS signal if the
* kernel PPS discipline code is configured (PPS_SYNC).
*
* MINSEC and MAXSEC define the lower and upper bounds on the interval
* between protocol updates.
*/
#define ADJ_OFFSET 0x0001 /* time offset */
#define ADJ_FREQUENCY 0x0002 /* frequency offset */
#define ADJ_MAXERROR 0x0004 /* maximum time error */
#define ADJ_ESTERROR 0x0008 /* estimated time error */
#define ADJ_STATUS 0x0010 /* clock status */
#define ADJ_TIMECONST 0x0020 /* pll time constant */
#define MAXPHASE 128000L /* max phase error (us) */
#ifdef PPS_SYNC
#define MAXFREQ (100L << SHIFT_USEC) /* max freq error (100 ppm) */
#define MAXTIME (200L << PPS_AVG) /* max PPS error (jitter) (200 us) */
#else
#define MAXFREQ (200L << SHIFT_USEC) /* max freq error (200 ppm) */
#endif /* PPS_SYNC */
#define MINSEC 16L /* min interval between updates (s) */
#define MAXSEC 1200L /* max interval between updates (s) */
#ifdef PPS_SYNC
/*
* The following defines are used only if a pulse-per-second (PPS)
* signal is available and connected via a modem control lead, such as
* produced by the optional ppsclock feature incorporated in the Sun
* asynch driver. They establish the design parameters of the frequency-
* lock loop used to discipline the CPU clock oscillator to the PPS
* signal.
*
* PPS_AVG is the averaging factor for the frequency loop, as well as
* the time and frequency dispersion.
*
* PPS_SHIFT and PPS_SHIFTMAX specify the minimum and maximum
* calibration intervals, respectively, in seconds as a power of two.
*
* PPS_VALID is the maximum interval before the PPS signal is considered
* invalid and protocol updates used directly instead.
*
* MAXGLITCH is the maximum interval before a time offset of more than
* MAXTIME is believed.
*/
#define PPS_AVG 2 /* pps averaging constant (shift) */
#define PPS_SHIFT 2 /* min interval duration (s) (shift) */
#define PPS_SHIFTMAX 8 /* max interval duration (s) (shift) */
#define PPS_VALID 120 /* pps signal watchdog max (s) */
#define MAXGLITCH 30 /* pps signal glitch max (s) */
#endif /* PPS_SYNC */
/*
* Clock command/status codes (timex.status)
* The following defines and structures define the user interface for
* the ntp_gettime() and ntp_adjtime() system calls.
*
* Control mode codes (timex.modes)
*/
#define TIME_OK 0 /* clock synchronized */
#define TIME_INS 1 /* insert leap second */
#define TIME_DEL 2 /* delete leap second */
#define MOD_OFFSET 0x0001 /* set time offset */
#define MOD_FREQUENCY 0x0002 /* set frequency offset */
#define MOD_MAXERROR 0x0004 /* set maximum time error */
#define MOD_ESTERROR 0x0008 /* set estimated time error */
#define MOD_STATUS 0x0010 /* set clock status bits */
#define MOD_TIMECONST 0x0020 /* set pll time constant */
#define MOD_CLKB 0x4000 /* set clock B */
#define MOD_CLKA 0x8000 /* set clock A */
/*
* Status codes (timex.status)
*/
#define STA_PLL 0x0001 /* enable PLL updates (rw) */
#define STA_PPSFREQ 0x0002 /* enable PPS freq discipline (rw) */
#define STA_PPSTIME 0x0004 /* enable PPS time discipline (rw) */
#define STA_INS 0x0010 /* insert leap (rw) */
#define STA_DEL 0x0020 /* delete leap (rw) */
#define STA_UNSYNC 0x0040 /* clock unsynchronized (rw) */
#define STA_PPSSIGNAL 0x0100 /* PPS signal present (ro) */
#define STA_PPSJITTER 0x0200 /* PPS signal jitter exceeded (ro) */
#define STA_PPSWANDER 0x0400 /* PPS signal wander exceeded (ro) */
#define STA_PPSERROR 0x0800 /* PPS signal calibration error (ro) */
#define STA_CLOCKERR 0x1000 /* clock hardware fault (ro) */
#define STA_RONLY (STA_PPSSIGNAL | STA_PPSJITTER | STA_PPSWANDER | \
STA_PPSERROR | STA_CLOCKERR) /* read-only bits */
/*
* Clock states (time_state)
*/
#define TIME_OK 0 /* no leap second warning */
#define TIME_INS 1 /* insert leap second warning */
#define TIME_DEL 2 /* delete leap second warning */
#define TIME_OOP 3 /* leap second in progress */
#define TIME_BAD 4 /* kernel clock not synchronized */
#define TIME_ERR 5 /* external clock not synchronized */
#define TIME_WAIT 4 /* leap second has occured */
#define TIME_ERROR 5 /* clock not synchronized */
/*
* NTP user interface - used to read kernel clock values
* NTP user interface (ntp_gettime()) - used to read kernel clock values
*
* Note: maximum error = NTP synch distance = dispersion + delay / 2;
* estimated error = NTP dispersion.
*/
struct ntptimeval {
struct timeval time; /* current time */
long maxerror; /* maximum error (us) */
long esterror; /* estimated error (us) */
struct timeval time; /* current time (ro) */
LONG maxerror; /* maximum error (us) (ro) */
LONG esterror; /* estimated error (us) (ro) */
};
/*
* NTP daemon interface - used to discipline kernel clock oscillator
* NTP daemon interface - (ntp_adjtime()) used to discipline CPU clock
* oscillator
*/
struct timex {
int mode; /* mode selector */
long offset; /* time offset (us) */
long frequency; /* frequency offset (scaled ppm) */
long maxerror; /* maximum error (us) */
long esterror; /* estimated error (us) */
int status; /* clock command/status */
long time_constant; /* pll time constant */
long precision; /* clock precision (us) (read only) */
long tolerance; /* clock frequency tolerance (scaled
* ppm) (read only) */
unsigned int modes; /* clock mode bits (wo) */
LONG offset; /* time offset (us) (rw) */
LONG freq; /* frequency offset (scaled ppm) (rw) */
LONG maxerror; /* maximum error (us) (rw) */
LONG esterror; /* estimated error (us) (rw) */
int status; /* clock status bits (rw) */
LONG constant; /* pll time constant (rw) */
LONG precision; /* clock precision (us) (ro) */
LONG tolerance; /* clock frequency tolerance (scaled
* ppm) (ro) */
/*
* The following read-only structure members are implemented
* only if the PPS signal discipline is configured in the
* kernel.
*/
long ybar; /* frequency estimate (scaled ppm) */
long disp; /* dispersion estimate (scaled ppm) */
int shift; /* interval duration (s) (shift) */
long calcnt; /* calibration intervals */
long jitcnt; /* jitter limit exceeded */
long discnt; /* dispersion limit exceeded */
LONG ppsfreq; /* pps frequency (scaled ppm) (ro) */
LONG jitter; /* pps jitter (us) (ro) */
int shift; /* interval duration (s) (shift) (ro) */
LONG stabil; /* pps stability (scaled ppm) (ro) */
LONG jitcnt; /* jitter limit exceeded (ro) */
LONG calcnt; /* calibration intervals (ro) */
LONG errcnt; /* calibration errors (ro) */
LONG stbcnt; /* stability limit exceeded (ro) */
};

View File

@ -63,6 +63,9 @@ extern void input_handler P((l_fp *));
extern void io_clr_stats P((void));
extern void io_setbclient P((void));
extern void io_unsetbclient P((void));
extern void io_multicast_add P((U_LONG));
extern void io_multicast_del P((U_LONG));
extern void sendpkt P((struct sockaddr_in *, struct interface *, struct pkt *, int));
#ifdef HAVE_SIGNALED_IO
extern void wait_for_signal P((void));
@ -102,10 +105,10 @@ extern void init_peer P((void));
extern struct peer *findexistingpeer P((struct sockaddr_in *, struct peer *));
extern struct peer *findpeer P((struct sockaddr_in *, struct interface *));
extern struct peer *findpeerbyassoc P((int));
extern struct peer *newpeer P((struct sockaddr_in *, struct interface *, int, int, int, int, U_LONG));
extern struct peer *newpeer P((struct sockaddr_in *, struct interface *, int, int, int, int, int, U_LONG));
extern void peer_all_reset P((void));
extern void peer_clr_stats P((void));
extern struct peer *peer_config P((struct sockaddr_in *, struct interface *, int, int, int, int, U_LONG, int));
extern struct peer *peer_config P((struct sockaddr_in *, struct interface *, int, int, int, int, int, int, U_LONG));
extern void peer_reset P((struct peer *));
extern int peer_unconfig P((struct sockaddr_in *, struct interface *));
extern void unpeer P((struct peer *));
@ -131,7 +134,7 @@ extern void clock_select P((void));
extern void clock_combine P((struct peer **, int));
extern void fast_xmit P((struct recvbuf *, int, int));
extern void init_proto P((void));
extern void proto_config P((int, LONG));
extern void proto_config P((int, U_LONG));
extern void proto_clr_stats P((void));
#ifdef REFCLOCK

View File

@ -1,7 +1,7 @@
/*
* CHU STREAMS module for SunOS
*
* Version 2.3
* Version 2.6
*
* Copyright 1991-1994, Nick Sayer
*
@ -44,9 +44,22 @@
*
* The OS will load it for you automagically when it is first pushed.
*
* If you get syntax errors from <sys/timer.h> (really references
* to types that weren't typedef'd in gcc's version of types.h),
* add -D_SYS_TIMER_H to blot out the miscreants.
*
* Under Solaris 2.2 and previous, do not attempt to modunload the
* module unless you're SURE it's not in use. I haven't tried it, but
* I've been told it won't do the right thing. Under Solaris 2.3 (and
* presumably future revs) an attempt to unload the module when it's in
* use will properly refuse with a "busy" message.
*
*
* HISTORY:
*
* v2.6 - Mutexed the per-instance chucode just to be safe.
* v2.5 - Fixed show-stopper bug in Solaris 2.x - qprocson().
* v2.4 - Added dynamic allocation support for Solaris 2.x.
* v2.3 - Added support for Solaris 2.x.
* v2.2 - Added SERVICE IMMEDIATE hack.
* v2.1 - Added 'sixth byte' heuristics.
@ -58,9 +71,9 @@
#ifdef SOLARIS2
# ifndef NCHU
# define NCHU 3
# define _KERNEL
# endif
# define NCHU 1
# endif
# define _KERNEL
#elif defined(LOADABLE)
# ifndef NCHU
# define NCHU 3
@ -92,6 +105,9 @@
#ifdef SOLARIS2
#include <sys/ksynch.h>
#include <sys/kmem.h>
#include <sys/cmn_err.h>
#include <sys/conf.h>
#include <sys/strtty.h>
#include <sys/modctl.h>
@ -129,9 +145,17 @@ struct streamtab chuinfo = { &rinit, &winit, NULL, NULL };
*/
struct priv_data
{
#ifdef SOLARIS2
kmutex_t chucode_mutex;
#else
char in_use;
#endif
struct chucode chu_struct;
} our_priv_data[NCHU];
};
#ifndef SOLARIS2
struct priv_data our_priv_data[NCHU];
#endif
#ifdef SOLARIS2
@ -139,7 +163,7 @@ static struct fmodsw fsw =
{
"chu",
&chuinfo,
D_NEW
D_NEW | D_MP
};
extern struct mod_ops mod_strmodops;
@ -147,7 +171,7 @@ extern struct mod_ops mod_strmodops;
static struct modlstrmod modlstrmod =
{
&mod_strmodops,
"CHU timecode decoder v2.3",
"CHU timecode decoder v2.6",
&fsw
};
@ -160,11 +184,6 @@ static struct modlinkage modlinkage =
int _init()
{
int i;
for (i=0; i<NCHU; i++)
our_priv_data[i].in_use=0;
return mod_install(&modlinkage);
}
@ -176,16 +195,6 @@ struct modinfo *foo;
int _fini()
{
int dev;
for (dev = 0; dev < NCHU; dev++)
if (our_priv_data[dev].in_use)
{
/* One of the modules is still open */
/* This is likely supposed to be impossible under Solaris 2.x */
return (EBUSY);
}
return mod_remove(&modlinkage);
}
@ -290,6 +299,27 @@ int sflag;
}
#endif
#ifdef SOLARIS2
/* According to the docs, calling with KM_SLEEP can never
fail */
q->q_ptr = kmem_alloc( sizeof(struct priv_data), KM_SLEEP );
((struct priv_data *) q->q_ptr)->chu_struct.ncodechars = 0;
mutex_init(&((struct priv_data *) q->q_ptr)->chucode_mutex,"Chucode Mutex",MUTEX_DRIVER,NULL);
qprocson(q);
if (!putnextctl1(WR(q), M_CTL, MC_SERVICEIMM))
{
qprocsoff(q);
mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex);
kmem_free(q->q_ptr, sizeof(struct chucode) );
return (EFAULT);
}
return 0;
#else
for(i=0;i<NCHU;i++)
if (!our_priv_data[i].in_use)
{
@ -299,19 +329,12 @@ int sflag;
if (!putctl1(WR(q)->q_next, M_CTL, MC_SERVICEIMM))
{
our_priv_data[i].in_use=0;
#ifdef SOLARIS2
return (EFAULT);
#else
u.u_error = EFAULT;
return (OPENFAIL);
#endif
}
return 0;
}
#ifdef SOLARIS2
return (EBUSY);
#else
u.u_error = EBUSY;
return (OPENFAIL);
#endif
@ -323,8 +346,13 @@ static int chuclose(q, flag)
queue_t *q;
int flag;
{
#ifdef SOLARIS2
qprocsoff(q);
mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex);
kmem_free(q->q_ptr, sizeof(struct chucode) );
#else
((struct priv_data *) (q->q_ptr))->in_use=0;
#endif
return (0);
}
@ -397,8 +425,7 @@ queue_t *q;
if (mp==NULL)
{
#ifdef SOLARIS2
/* XXX we can't log it because strlog() is too complicated. This isn't
supposed to happen anyway. The hell with it. */
cmn_err(CE_WARN,"chu module couldn't allocate message block");
#else
log(LOG_ERR,"chu: cannot allocate message");
#endif
@ -435,6 +462,10 @@ queue_t *q;
*/
uniqtime(&tv);
#ifdef SOLARIS2
mutex_enter(&((struct priv_data *)q->q_ptr)->chucode_mutex);
#endif
/*
* Now, locate the chu struct once so we don't have to do it
* over and over.
@ -540,6 +571,9 @@ queue_t *q;
if (chuc->codechars[i] != chuc->codechars[i+(NCHUCHARS/2)])
{
chuc->ncodechars = 0;
#ifdef SOLARIS2
mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
#endif
return;
}
}
@ -551,6 +585,9 @@ queue_t *q;
!= 0xff )
{
chuc->ncodechars = 0;
#ifdef SOLARIS2
mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
#endif
return;
}
}
@ -558,6 +595,9 @@ queue_t *q;
passback(chuc,q); /* We're done! */
chuc->ncodechars = 0; /* Start all over again! */
}
#ifdef SOLARIS2
mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
#endif
}
#endif /* NCHU > 0 */

View File

@ -1,12 +1,11 @@
/* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
/*
* numtohost - convert network number to host name.
*/
#include "ntp_types.h"
#include <netdb.h>
#include "ntp_fp.h"
#include "lib_strbuf.h"
#include "ntp_stdlib.h"
#include "lib_strbuf.h"
#define LOOPBACKNET 0x7f000000
#define LOOPBACKHOST 0x7f000001

View File

@ -0,0 +1,10 @@
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS=
DAEMONLIBS= -lnsl -lsocket -lelf
RESLIB= -lnsl -lsocket -lelf
INSTALL=$(TOP)scripts/install.sh
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V

View File

@ -0,0 +1,10 @@
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\"
AUTHDEFS= -DDES -DMD5
CLOCKDEFS=
DAEMONLIBS= -lnsl -lsocket -lelf
RESLIB= -lnsl -lsocket -lelf
INSTALL=$(TOP)scripts/install.sh
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V

View File

@ -54,7 +54,11 @@ struct server {
* are close, or step the time if the times are farther apart. The
* following defines what is "close".
*/
#ifdef linux
#define NTPDATE_THRESHOLD (FP_SECOND / 8) /* 1/8 second */
#else
#define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
#endif
/*
* When doing adjustments, ntpdate actually overadjusts (currently

View File

@ -1,8 +1,8 @@
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
* /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
* /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
* parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
* parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
* Parser module for reference clock
*
@ -29,6 +29,10 @@ static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp";
#include "sys/time.h"
#include "sys/errno.h"
#include "ntp_fp.h"
#include "ntp_unixtime.h"
#include "ntp_calendar.h"
#include "ntp_machine.h"
#if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
@ -49,10 +53,6 @@ static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp";
#endif
#endif
#include "ntp_fp.h"
#include "ntp_unixtime.h"
#include "ntp_calendar.h"
#include "parse.h"
#include "ntp_stdlib.h"
@ -178,6 +178,10 @@ setup_bitmaps(parseio, low, high)
{
fmt = clockformats[i];
if (!(parseio->parse_flags & PARSE_FIXED_FMT) &&
(fmt->flags & CVT_FIXEDONLY))
continue;
if (fmt->flags & F_START)
{
index = fmt->startsym / 8;
@ -1158,6 +1162,9 @@ parse_setcs(dct, parse)
* History:
*
* parse.c,v
* Revision 3.23 1994/03/25 13:09:02 kardel
* considering FIXEDONLY entries only in FIXEDONLY mode
*
* Revision 3.22 1994/02/25 12:34:49 kardel
* allow for converter generated utc times
*

View File

@ -0,0 +1,790 @@

Received: from louie.udel.edu by huey.udel.edu id aa12064; 26 Jan 94 16:33 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa12284;
26 Jan 94 16:26 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA16418 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 22:26:48 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA29418 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 22:26:45 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199401262126.AA29418@faui43.informatik.uni-erlangen.de>
Subject: Re: Solaribum
To: Mills@udel.edu
Date: Wed, 26 Jan 94 22:26:38 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
Paul_Vixie@corpmis.sjc.hw.sony.com
In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
X-Mailer: ELM [version 2.3 PL11]
> Frank,
> Your command-line weenie sounds rather useful, especially in cases where
> 1-pps signals, kernel mods, etc., are involved. Better be quick about
> patches, though. Paul Vixie is burning rubber on changes.
> Dave
Ok, you overan me with 3.3c - thus the following patches will be
relative to 3.3c around Jan 26th 11:something.
The patches include additional sys and refclock variables, the
adjtime fix from Lewis, doc fixes and a include botch fix for
lib/numtohost.c.
For examples how to add extra refclock variables see refclock_parse.c
(as usual 8-). The variable mechanism is documented in doc/xntpd.8.
Ok, here it goes...
begin 644 patches-fau.Z
M'YV09-*8,0.BQ1@05)X0>:(CA@N'#F<@5,APAHL:"E1HG+BPX<./,Q)<*4,&
MA)(P;D#(L*$RA@X:-E[> !$C1PX:"EKHY/A$)$F3*%6RE.$2YDL<-&WBU,BT
MJ5,5&3?&8%$#1%,%($",4!!"*T\6=D!8I)'TY@L8,5[(D!CC1L,<.F"P7!-&
M#IDR;$ 4P0,'JU:_5-"DF0/"3!HV94",>>.&3I@T;@C#D?-&#.(VA->X>7,G
M)9TW(.B@21RFCN@W<@B+#D,'Q!PZA_.Z*?/S,P@QB<DP+N/"[T@0=][485,R
M#)S)9<:D89U8((@\PA4+)^X:3MW$<]ZT2?R&(/0Z<D*GV1X:-)LW;]:$1D.Y
MSADT.7=.K:I3I]^M74=\#6NQ:DVS:*GE'UPPS*!##57191=>>O%U'V""$688
M8M(U]EAD($Q6V669;=99>>N19AH:J*F&!FNNP<:&;+259!MN(.@V6V]9_1;<
M<,4=)T=RR]'1G'?1+89C==>YIAUW0((G'GFVG9?>>NV]IT! Q5TD&YCO(!'
M8W"0X0(.'D'T4 PQOI'EEG1T^:4.%A$5E0IEGLFEEV"*"5$,/I5T4DHKM233
M@63]AU-]<6HYYY=Y L7G4$6YA6!92STE*51,@7 ##2S<D(-53,77@J68XD!?
M?7YU <(6?KD@1$%TI)I$:'+4\1I):Y21AP(K@& JJKFJ6I =N(+@PJMVU+6<
M964$NVNPOK9@!;/$&AL&LJ6F.@42(!!1Q!1#2)$$%%0D\803KH* Q9QO3GI5
MI3'0 ,+[59U%:'MV@#OH_6UX-<<</!H1AX@A!%C&CN.\9D< +^8F*P_F8&:
M8CNR!MD9*4K\6AIC2'A8&7.X"@>K(.#@5QAD% ="K0"[44<;N(5GFVB)T1'K
MK"6A# (;@[7::Q(?MQ"6R+F2;/(<><S:!@C%RG$L8M#V;$7(P0H=L&M%^WAT
MTDLGAC/-MP%\EQFEL=%J5BY<"X((0XQK1!)'5"%%$.&."\+:3!0!PA/@BNO$
M%"*X*H6Y<X)P0L=9+>:&86> )S%CA6T,PF @[,B&Q';@!; 9.R;FL!QML.9"
M5D-HMUUC<[ G&!CH %"YP#CEJZZ&KT) @TWL4#[IO/N5 ,,F-8P UGY0@CY
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
MN9,].2Y^X1<O !59814@ 4OM7R$445,=CP@Y6+'TU\Q<)#P<@-D$CPH>9,>
MF9,4:9$8J9$WP)%HJ9(Y&9(C69(Q<)):090YV9(O&9,S.91Q"0(Y:05!( 5,
MD 06^9-!"0* .6)%>91)601+69B':9%/F151Z1=4:97O%5/ L3!<66_\0Y"3
M(CM B2E$D7MJE9=Q"9%0,)%%X 14D ), .%=9:..02O23<7*052\ 124)LS
M )>YN9M,$ 374ILXD1]Z^9I$@)A00)LS@!',V9JZ^05&B90*(9G7^9Q34#Y"
MB9E2F15P,@2BYYE:60>AZ975-)4J\ +]=9HL0!0289:L69RP*9O2>9OWB9.[
MF01,T)N_&9PS,)RXZ9]?8 3'F9R_TYAR)IBO29B&B9BS.9U/F2LVB9_9&9FN
MJ9.42:'! I7C297F.6Y8^9E;&8OLJ9GO29J28IHR( /S*0.XLY#]F99#D*!5
M0 1'4 2$R00RH)&+F:$XF:,*&@1', 4:&0/$6:1?H"U6D 1#()G_]935F9LY
MNJ';"9$Y"J526@27"0*9Z9[9@I8AY#T^"%0;Q$(9N##HLV6\55N-9AO8)S/&
M@85^U1N$$J-FM19E66 W*I=&NJ,]^J-!.E9-BJ,)>IQ)NJ2)*JA/ZJ-?JI&%
MA:$I*9@Y*J&5.9LQ8*",>:5.JJ5*.029^J&6&9YB.J)P0@1F&HAPER*Q8C [
MQV1O6D)QBF0@4J>Z]3&)!X@BU!O$:!#&.([)N(P34@:*)6KH^!$1,:SU:*P;
MDZS=R"8N\):50H_DB(W'*JW+*B8A,1)ZTH^, I Q"BGSF%3$:H]?L*U(M8_@
MJBCM^(_O&)"Y)X]@M2Y2017,-IZ9V154":V(P:U@(18NP!+_,0-GD0-G02;_
M6 ,N(0-DH2!AUB!]X9XL*F*0<:88LCD@()M0X&J)D:SMED*+5 ?'@1IC0YY@
MJ:_VV:_D"3W:&JWMB@8#:Q$S(2@+*R!)$1<TT!!S41<3NQ<5J[)DVI$:NX8>
M"[(@(+*Z1;*N8;*7) <I:Q53(A $(:S86JS8"&>",2/=^A&;DK7JRK5R-JT.
M ;'AB*[/NK6,U;6\\;4.D0/\N"CN"(\W.Y"$(K;+2+9>.[?Q6A1V:Z[WVBGL
MLA;P\CO[&J99@01!L)-?4 5.0*%$\ 78,I4% 0)-<$PP0F9# B.YY48$X;%?
M 5/, 5)@ 43^01N,Z4@\ -AF@5!4F8@H :R0H6M]H,CMFA"I"TO>4NS44*K
MT[9R-@<OP .8!$7'ZE:O(B,GT!H]AHHP@TXMATF@.S #<8JQE ?](D':486(
M\4HH(C '9#5'TP:SA08I>R*58SK9P22PI!A!H1L90ADOH[U]1UJMU)7QU!JT
M%#U M& !509',[X"K+Q+"VD"\TV1$3.@D5G+1 84TKY7V$.&@SB*$XBY)5!K
MQ%O_P[_=NS&_1QYBL$8_P3C$@U\@]0)\:V[:45<C1 <]QAB$<46TVG>B 3E9
M"[)/-P6T42&5@P>F\Q@"1UHKE!(5/%L7+$+KEAB0)1VBA1@"YWJ*57!AVJ*6
M"Y:&VZE(89^:"0*,Z[B0*[F4:[F7F[EYL+DDTKF)\;FN);JD:[JH.P6J*P6L
MZ[I"F2N\FP21&S=[,S? "0)K>9%- (F8 )5^9M3.@5R+ 7!DA46*04369&"
M3,93^2E,Y$2N1<!74VZ-#,A4 ,E0@,C;LLAD;,D%A,E!I"$R- ?9 5.<G"M^
M ;MU(!U#0KN$-UZ2%9>ZVT.\NU?YU1PIL<+$:[QS@+P;8\#,Z[S4&#.N1!K3
M2WA!9(HA%QK:RWP?_+W[.S6:7+[GF[[34P;L>R393$ME,K^CU,#V6WGX&[TF
M(D\HX;^, U!A(, 85<!^\2I3/#4*_$ O4T8E$\'B_*I'G#A-JV<9W#FSDAH!
MX\&B!<(&)L(D#%Q&W+W?J\+"^[O$X\*L$<,80L.R8L,1XJS,E+R&Q<,L[ 8_
M',0!YV5%7"$67- R_&A,S!E.C,)1W!I3C'I5#)]7/+BQPRXU(*,Q4 ,SD3N?
M,M3V$I; Z@C@%14<A].[1Q1^05", 5$8!4\':@)\,5%0-56_061.Z7!,@("
MP94$\<B1S)9-,-:7BM:!C)%G$\98\ )!<+I]@Z%1O4,,F=>I"@*M: ,P$-A8
M'::9Z=.4(A4VD-1DF;CT<@,(B0-_NGM:W9)48+I'0 59 62:0=OL$R/F@"B
MNY9#$ 1,P 1?T*.<:IN?'=H5.=JE_05!0 1*H)$T\)886M9?X\F0_-9K;:F!
MZ=:2#-<B(-<O, 7J6;JSXP)X<-=:D==0?3P"0=B'/;ABA0-"C0-(8=1)(:-
M&=GZ<J"_Z\:E>[JIN[I@"MZ)P=6P3054 )M4 5'( 7@&:A>W+A=#3?M'=9@
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
M1Z=8A35@!TC*:]@!.!).&"(+Y)GLGZOT>R]K5E(6K!-Z3!2NU)7^LDWYRBH
M+$&#L"26SL-6@91D>5G21XIQ \VR SU+BIE\U,.TW![54HA<S&Q)!K8EL+):
MQ4AOI0DO ;<*5IBT1SS3(V"$-%F-Q&303$<V0$Z.JWDUG<P5GBR:0)-/ABNZ
M):_ 1-.T5V4Q7S'!V-$5?..AH%G\(<,=K+-P \X"2T +<<$M%(C9)0;4 ,6Z
M6%_S<D$!^C5*JMD:"A_5Q3UEM97E$_5%U\QT<?-3S,USIA"A"<?"FVY%&T+&
MK*GM:MSK&X@M@2JX1>\B<T"*&X!WG8T,) !5-D/PT39B PD "J %) QO\T8
ML ,=A""H --Q+%- "I"4>,]R8LYED@!V1-2B U] 5-*!T#DZCR7[DAELRJ6\
M%Q7@.E]EKO":V,@<V9:#,"0G8*Z@2E, >,HJ#?0P[%1DF!R!R#$(DV7)68ZE
MY20AFJR1P8EM ]U6V>7!>P,'$#V5P98K2J?!8 ,"<P\$BTY)9B1BMKF(N8)^
M5L3"T'/PYZ0\E2K 1\@<__DPCR=4>)YPP@ALE_;11#B&^(1/-1 B!8&Q)P(3
M S V@AZ$G0L7<%O,5%LJ 8M%(QII3(NVC3!05*&A0*Q+;GM"A-*!YP%QJT
M"#P!*^!"<4!WF9&3K2>@@-%&0?EB+HR@5T"'\M OT$&3P$7ZH9--)NW0"<H>
M8QL?&*)%](B&J%P1._U,X5B7<")@E R!*3I)I_3D7P$S:7 *T]$0.6))\(AG
M@'4VAN(9+*IH2D :F=-R80[:H%.>3Q=UGV$T7Q+/U]E&*Z<5A:/+Q')I$RXZ
M.O$H_!2C&L%T % RNA%I2T=$?VJ4#K!1*NI'WVB\*PE3:9 J%#':11?I5G*(
MCU2_1-))&BMAUCTZEE3%!3#/K.9&9Z?F7$:HE&/P3A1P2=FH4 I6!T%LY1;T
M\28_ DO0I76!EWJCAS"<B&:ZVJ5O*QHYA*3YKOSDTK2:!@MO[01@FAK>EM*L
M6VPBFMZ$ @DGID+&XU=0P5_!B1<P!^1 EO!8+Z EH<"$( 6RP NP PB+F@K3
MFO40ZI52R%FNL"T$) /Q\4X&T&(00HM%&1:JA$R[$3W]+Y "G[(%M[ 6XD*"
M^*=Y(:!:+#(5.N! 'E :[Z$UH( QD *2PM2#%S;A7?R'J? ?A)I-0$@#B4P9
M@:6C'I8 1)T;2H,D*(W4T0*" !3C'^^E]<!, 3+/6D,1D .30[\@E1;@!)R(
MGVD99V!E>4! Y;*H$CDUIR\ G:K3\<9.W2D\?0'R]&T=5+9P3P-$M]M9O",@
MD0F)!5 =A,42ITIGGH9-/HBSO.J X%EBU9\NB(AJ5HG6RZJH%[6;51R.ZE&3
MS7\0J3:!I-H$DUI60.HV5:DL%02XU+D*4^'-M*2I-C7FX-3PH%.[$D^%-#\U
MJ"8KHFI4W0!2Y:8T0=4MF\HX#/F?"FU%70T)\#\@9UH+$X94K5_@/@B$!! "
M4$ WS"^2% 3P 3Z L:@)"N!_1\ )5($<]05<YT U/1A#,:Q+9,H>,L8RV0)=
MH >(@((*-@D60FVK:2&?,E1^^E 9J]":&Q!/!$C*KRA;U>396$:%$_6@@;Y!
M+T2K=Y.M]K&UHE;*M5I_G7Q]K?5U#-)6VQJ79B%N[:B[M;>2A-]ZVH0K<36N
M_@JY'H13R5S-:8\A ]!5NE+7K9I0W2I8[5G+AJS2U8]A!,+K>+6.L-"\B@#T
M:C>[4=]XAC9 ]AW$[S<#4FS6<VRO\&4A@9R!&O( ^)FH+VO" @L$ZM>RS&#0
M,Q:!#U;8[%H5+FQ<E:MA1GR" "1725"P6 ,R@%[+AX$>K%FY;#D:-8U]PQ9
MM2 1:,)V=:A90<->+$%A.J%L]4@M%@N7_DQDBH_,0"]U"-,H3[+9"F8F+T+:
M@IISEC&XV9Y9 ZYIU603=VN;/LUC&DS+0)N5FO#J3S+-0!LIJ!N[R!2'<@*B
MU:=Z3M];.BT"ZQ0X6=5X*F<+[:&MKF-ARVK7?9HVD6Q9'5I4"ZWFV<-A4,-F
MH.BJ3=;+DEH8,!,T[-O$L20J!.75C+I7.^K!,JPX ;&BA);Z4E>J8YVI:*"F
MWM30Q'H SDYU#)@5J':=H5I4+>=GI1>0MF6%TY=%::.JI9VJIJNJOE-.BV<]
M+9T%M1=!U+[5L.H*;:U$55FJUMSJV59+L 8$D]59-0&NMMN7^FZI%D75M1@5
M??7:LH!2#^O+6JG#5K$6VYCZ6)-M9,4#D[794LO+ZE.EK5!U YS5VH*4I$H*
MA]I\0H7C"4J"@/O:U=*&$S "]#6VVM?1Y5I+KMI(N?!UO][6UJE;>6LW!*X&
MEO\AV$R*AY+KJ20#8\ ,--<'&V&GJ[QEM>CVU=[;4=M0::VIW;#@M0J(5R=Y
M[=KKQXVQ(I?DTL67"UM9*\N=KR87Y7;=;2AS^RL*^*\U5\#.0IP[7'5N+DRP
M$,CGKDN@*W0=['.-KD:WFGY:>FIO:0 ^7;<85B*X6[X0=:<N2;QV:E9L'1"L
M4F@W"+C!#&_69RK>HL%XJZGC%2CJE5K=GCN;KA8O,KV\D+=G,M,^*:ZP*0U0
MNH-BFN9)S]MX9<;C5:]^EDZ>7L'%.&D"I%U-376<EM-*"P4N;:9MI^,6JZY>
MROMY72_FI;=!5LE@5RXK:QLJ0AV\J';;$M36&S%"[T%5OK"6^>I3YYM[H*]
M_;<6->!J5+Y:$S[J7S6L@O4)&M:"&VP/;F)=K!/+V,I4C.%PEVTLDKC/MJ?J
M!8N[6:OM4=VX2C7&YEXQM7N];>\%MT94TP;?R4N\BF_U5:\'E4PLWZ^:;\.J
MQWNZMQ;>YECJ^WJ1[YA0MT;V GM?7%N> *Y>W:B^]L7YU9"*?@TK866_%POA
MN@%BRUCE;\-5MI*5V596[@%M*ZYFI;:=];-V7)0::15GS*VM,W>-IMV;6V#;
M;G%]NSQ78BS8Y5IH,=[0O;L2E@,?7W0[5D3M0B6USY??\@7#FP^UPMFC<J?5
MUH4D*: (F0!8(L+9T/X=8?XZ8OPKS0VP3#BX.N&=FQ7B[A3.E\C4"MM="(MW
M'7 'YL(2./M28 +1LT2P&(8#9)B\FCW_EH:+P!INPU;R:AV$/O-G7D#FJA7)
MBPX\,67J @2OY<0+GC@,@.)C)HKQ"[4"1Y6"$Z/B3WR3$(,+:,5L@!1_*])+
M-67OIKB3.T$6LX%4O(IM,2Z.O0")=M!>1YNOONF#R \$&*I*54Q+517P517&
MQ+@6\P9<S'>]L*R%<P="\#[B!_$IM@)#2JLR1CC,%V8F3V07C+@@P"NS>,S)
ML<H>!.A@D5 0/&D'J 8QL#*VHY,K29%8][K>ZLQ\+W&IW@8T^)0_,3HJ3;U
MNQ:V C?B[AJTZJHY]@K(-'*HXP>U&CR8&J-56\<S!(<,08\=*$/R"VFC">3C
MNB$%^'$,R<3%"&>( 7):-0Z,*B7%75@FTV1)Q!O&@$>P5AM!)X\OF^R3T]%8
M0<:[(RY@7T&[$X1R36XK8P IPP"EO(SOE6FR@/,)QE;&TY< ^L!3^A0)0*'8
M(?BC35P _*P#:0 $\&.RG#Z^0!JXB&!9+#L@MEQPSC)!6,L#89": ;@L 1.
M<T !_N_ H 3X/_L@.DP 6^@,'?4L@,#.JK\1)1AN6B<AS. F#>%^!)4L!T
MH V4T+S*F1@B [9,%/L?'0 "2D ;$ %\%#(W$A+"CV$ O^S*5X<-1+Y)63N9
MB%JF":]R&^8V;1$?X]L4 &R![5X>D,E<F5?>9?9-FCG_/:"G7 900 F8 RF
M--/EV_R<GS,7< ,B@ 7<RP1@N=J &4 MB7ETYC\> -^0 MP"8TYB(%FTY$#
M4@#KG .SX0S\ !'0 D2 #A !V7D[6ZZ5\9T_0QA 739+9N. &T&V#,;+97#
M^0U09LN,F35S"2@)#[HT0V@R<)VS<\6AN87Y%A=,/*.=2V4"0 $8&C2K#PW]
M!1C&&# =(%H))V81;0=(-(>^T&MT.Z]H_=>BU4>)QC.I6>GU-=Y<!7PS<&9U
M>[-4_F4 G:%M-)ZA?ZTY[<[H$6VC3322!@&-F9 9,A30.?# %]@,V>B)I8_$
M $4:LV/>SG. "E@!#3D%!O.2-LR$;$E#Y]><*&$;$2 "@UDN>R*Z?)C5-!_U
MT EZ01OG*U"8(M>BU,QST\?^FL\<FD=':P@(9, -=.83QCS* &H>K[F1RO'H
M(["=__)=Z" 4 XK0 "A,FR+S'"#.EGE2=VC:S)VGD@@(U,/RUP3F[8 ".BHU
MHFA;VG10E64B=:CS'*C0H[I36R[UX9_-M&+.T<W00_]EG5"EK_0;R-(HK'GT
M@-;<4?-T<69Y?)H-Z[$CD*MIDPBH%$X -+0!U) 83@"JMCSY;V DZD4-JWW$
M"7C4Z=(K(\H=D8'< I8S6P@1WOE-P?C,![6Y<KJNB__Y57=G DSBZ[3BAD$
M,.8O#9F=-8-&SF=C"'#F0]W NDS^JUV&FC2;9G2MFFUS:W[-?2 V/Q#YB:>+
M!C.:RWDY?9CE$IV6\7+\P9UO&4Q[[+$<LNMRB;[+_>1DKRM.69M9,VY^DI&:
M($SJOQ;8NDO'_M0*^ED?Y\Q\-I3S4&;5SSDZQ^SDPH^K\ZW&SM4Z 7AG\/R?
M 3-H)L_F&3V[9RVJ!@ST>X[/\[D^W^?\[*$IY=3NU0$Z#0SHEKVN#/2=ILT&
MVS@WZ+,1H>OVA,;5,#JW%ND-G1RB=HK6VRR:1)MH%$USS[2+[MMYFU/3)L/=
MI''TAWUP.[H(]&:>+=CDL+ F"$0Z<!OIY/"DE4R 9=P%TTF' &8- C@VJ0[3
M8_H)5#9?_:_3M/];T]NY3:_0.+VR0?;)!M@B&G:7[;]<K+$TH][29@=*?^FR
M[:E!]9[NT],Z:I?JK'"J=T2JEA7@&C1#[#>$J!4U0TO6CAI8Y^QL(;E[=.SV
MRYC[4KN'X+VIOW?Q#MJANGM3:_-MN9JWH(;>_+I5&Z-R#<Z^S8.MU4W[:9-M
M4DV;=K4=Z-6(^5<_[J=&O(=U"^C=Q_IW*VMF;;[C-K1&WG^:?9MJ;*VMN;7@
M^-:$6EQ;[YK6J,_UV^[47ME#Y^NNG"[9-7APU_!:7L-D8:5'[%$<N,GI""B9
MTCC@PF]RF^@NE:*%ZQ$8_B6!DE0^$+]8FGX*'=Y[5.D/KP%!?)N2PFZ'\>93
M#;!NWX^)<[LG3OLD6^U$5FGD4F+1,0 '..6.. -97+GJ43?0Q4LX%D]H8CP\
MJ N[M3\IU\N/6MGE/R$BYTN_7 :?W];(#MIJMC$*NMXS_W#KJR!YO&C]*/J
MAA/HXT)IB<.Z/G606)V-2@!W0#!0B(WZ,<H.&W\>A>Q"LS+K($-0P!J' QTU
MDW_R)WT"N( <. %2VBIP<5)^G4^ <87,7'P%K !.2<9O\R4K Z\YDCL.2BZP
M%4._P.2&;)2/;L'! ESY=E8!9%R6W^9/+LLYI2Z?Y+4<BMSR5#X8^ 5C:<XJ
M((_ @?/L.LLA;2;C.H%3(O./P8]+.0PX 7 9W,&Z5X<- 14DE^2)@9=;\E]>
M$C(YB-[DU]R3<_%0'LQ7^3 OY:<\E0OS<M[*7SEMCN6S/%W6<GY\RW,Y/-^K
ME=R7.[54/CH'.C%WY6DWCJ^9G5NJ3??RUD%RO"1X 7Y<T9-YKN#'S'P%=-1E
M+3A$@"M_S5DAA/?E9Q[/HSD#Q629O)IS<FRNS;FY0:=-X+P%B/.%+CBXP#F_
MB&H6F6;CY"6,27'N4>H+^9@U]3,I.Z"Z*M;&+J"IQW"D[!)NC]/<"5:]&/,&
M8<S5&T(B5N*UU^/9CL?9;"8E=6@!X:$%>,Q"BXZ7QXAS >8A#8@!-BN,78#
M< $NX 7H9)G,)?QZN@0"R8%$G U"D00B@V-H*2< F:)R[/$"L/$&V=8)YV&4
MAL\020[">2 9$V/2&1;1HH4A[QL@S8;X^!X$\S4&Z)=-!@V 7;#K==DN!@J[
MP)#)?#TA^W5A$=BS:C?B[<(7:K)>RVM\0V^ZC"'%J 40 >/8+50W:+0;) %
M]+*.V@*20&S/8:D=\OIC1/G6XSIH( % H*X7=]0#VP/[8-?KMOV6['5/V]<%
M!A=(EQ^=M;OVMG)<UO71: $$(;N3]WN)V%,':*#/.T&6!:^CLZ)7AW['ZTCC
MFIP S/[92P)I)^X/&*]/]L;0P("*,!;M7>' GW;Q'N$/0FP_[[4]3>QVW,[>
M=?M?[^V=MIK^]NL^?!MP:5>OQ_T@"*OH/MT+@G5'\463PW=@?UPJNWM!^.[A
M';P#=Q"?WDF\WFWO_#VQ_W="(>!9Q\TH\!H^P0N,!0]X&KR./[YO8,*_# N?
MD$5[5I#OH^2UD^;HSMQ_4[BX?!UUC1 -<4(X_J>,MQO5_7.0>2EEYI\[@'TT
M):$%=.L7P 5<@->I#"2D1 .<.#!87@ 90.50!+R[@#307]2ZPXJQ"<#'RW5T
M7->_''E7[[G=S^"%W?[A9SMA%_%AX+ K^<6^$QJ[BX'LDAUX5?:$3$YE!F9/
MGP'#-&@'*?SD0;M^P? &_L7C==+\X#/)>,?K+B"Z+X'"9 @Y=7]7[ #^4S3Y
M^6?E>SW'^/5O(-BC@&%/QY! 1QV64Y[!%WAG#WK)N[2G]L5>RU?XQ'#A#<MH
MU_#?GMA;>]2NZU<[QICOO*&\TW;:7N3U>J;_,YP>QQ-:%:\Z6+QP)[ZZ'CX@
M2N0NK)1[F7?NEP\$T'B7A MMO+\G5E=>NZ=+20_D(_ZE[_0S^=,;E-MN[TN\
MIK<M[AV^=^=W'^;I>PF_[_E=UQ^7VYCA53Z[A_ =.-H+>W5O[$=]L@<!RY[
MAQMT/_.K_;57\-I^YZO\=._SQ;T0*?="J>7#?"Q/](O]R_?U'7[(>WKT#NHQ
MO<?']R<^N.][80K<&7#EA?J'.,87HX7_DJC[C=?ZR,CBJ])[2?$5?GB/\AB?
MWE=](X\^O@"2+Y6<HR"D_*5OVL,4F!\LNU[AHX"#?^:+0)IG97F S8O]%@#G
MK;O@)_QV7K?B^8*PY_O\GQ]A>4'0IP%"?V ,/:)W^XM^A1\$I6Y3<@K=/8B!
MC8>+B9E ^MF Z0^ZJ!\&V/"'@,,W0NM__68@]JO^CW #RGI8^NJ?XO9_@=/?
MLXUX,RV]#:NK,UK0.A6RFXW:?&H7!?"EI @>EP _KSC=L!(#6)MK=BNQ7G&=
MJ;P;4O\A@!F5G!&(_=Y\ '?;:?Q[-^W73T:E?_C#_N)_HL-F$H?(L7;[NH1'
M/X)?UJ=Z6?$?\9?ZU7\$R_VG4#5?^]]8-8Z18'H!$_ TF'^Q'\VT+0E4V!:Y
M$_+$0F;7]'<977]TF)PQ"VE_2UCWUW)]?]>?^.<=08 ]6_HG?>E>TMBW18V%
M6]88PB+\"8"R'P&8?(%@%5@-4&KU?U3)_T>5!(#SWP!X?>& !((.Z'3Q@)G.
MB/0 #@'G7\\F 3(-:1;.)*P(?]L!9(!4[7X. >M7:+T \5\5Z%EM7+/?YE4I
M4(%E@!4(!A9E7U+O=_SU8@>"\@?\H6-<H.OW!7B!5V!4M@;^+6U@0Q HH77,
M6#?U+45:T%\WI %6?QQ@]M=R;7_1G_<798!_F9P)6/UA)T6 'B,$\"1'@ HX
M4+& !!D")FY=562@&2@'[!<V(.WGC>E_@ (&UF]E49?@4I%3T(%GX! X@7UA
M#4O$L@#:551)$U &?H&?8,OTM)PL4@L%*!_\@3@.!EB'27\NR?AG_5%TAB!J
MA0@F@[8."1C^F5W&("0H"5*"EN"D58"Q?P:9^]<)XH*@8 1&!#I4#8&2@00F
M?0"@',@*?H*JE#<X@:U;.F 7A@1>++:@)T@QM"$K!"\XM4PW5IE-U"[8#C4!
M'K0/MD+DCV1#E<Q8KT&-=6/1@G!"%W@+UH%@@9)E9?U8C$.012: 8&!5.ZAD
M/%U*UM+E9 $A2<69-64AA#W6E05DB8+>& )8"F*$9 J9]61UA%(68R!0)75;
M8/RG6]P!=!<66*W @3)A&$ 3!EVS'TTR!L:$<N!,6!.B@:N?[W?_]1?"GU#(
M$]J!O!@>Z+"\!5496"%6_(&D%3>4 1:#&R R* (J@R'@,*@(XD(E(#3H';T-
M5X#Y5PUR6]>@"]C^!5])H4XX%-)3>R#^IQ;4*P]+S^+5C8,^8$(8%+J%2R%<
M*&K1A0&)7:@ >E=UE;\5,>F$V0(3:*]5$K)9Q:1\U(.WDR]XU "#3(TPZ $2
M@T: ,5@(;H6VSC+(&6):BV!8. Q&@V2A6>CP6(,MX 'V B9@!YD,"!3F%$JA
MFQ4*&H 161'8$'1?LV /F KFA#NA;$A/T89$5D5X&YJ"A:&LA!A"@*S?</!
MT(-0"\HB4)%"04UVA+AH-]%A@[14"81P D%X,-A8WU<Y"!ORA;[ACA4Q^5A8
MED6P*5"$.>!PB!'R6!IAF<42^A7B4Y5%'HZ$2,%?F!7<'H&A61=F0507BV&
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
MNMU+Z>5KB5PZF+BF"" 1DF&E&@!585Z8^&6ZA*J4:AM$4F%1@6AF0!O0 O@
M9L"51E&8#FW /6$Z& %- ,YS^4P!6@ ?]5N*F^\5HI2O43+H9A=#R7AT[29L
M ,A]&TOD@REOUE/TIGRIQMV;]V6&.2GMF^FEG\'%Y0$ I\!)<!J<VP'"J7#.
M#0VGC;0M1)P74<?5[=@>*X&,TRG^G/#"2@ J*ILGYG;H3EXLTZ8\R2L6E*\B
MJ"E%\H=D8^YH9.** B5[:5U-A#]F3>DUBEDIH;%H1<*':&22J=29!H?!4L>*
MC6(Q'!R(=BID5QU#YHH%65,F'4DXOIUJIS'&=O9P95U:%"*ZG2I"WKF-/3%]
M9[N8.:*6+Z) UFB:F0GCV1EX1G5Z)WZQ:R(LMP?$>+,8"+_#<-C_760IV4JV
MC_5C?D$OTP.L+)/320:-+9[9HR1Y=SZ><>?:*7E2F\ZE"^D@E9*<)SZFC[5D
MH&=6('J*?H!GVDEW,8BD&$6Y!>*=OV<8.#39G<D(\1ET 9_I"$AY!TJ.; )7
M-2[VGL-8\>E'(G\)8/09%1H;CY9**6FQE <C,=EX#I^!I_4I3?*:] JD>%-F
MFB^+^;E629\WYD%9* J55 ER2!,$-FI!8(,99 C*(78P#Z4.E ' $5 $(O*/
M ,,X: @$A4!1<6![HPX,( 24!B4!;$%"_#+>7"WY"[*5*^7UV%(^FB]E\EE^
M+I^M8Y#5=WV:MF$KM'["F3$""!HHCJ"U(3AH@M*?JXIB>+/@GT )#+!_,H8/
M!-&05+ 'C,%@8&$4H-M:+T$9)*!' RUU3>P.#RAB\6@H$'D!!2I.OHL;@6-C
M5EP*CEQ;1Z:H>2L#.]8::"6&P_802P ?,0A\T;4($>I)P/$"2!P4QVEA)J@.
M1&2.Y8R@/] $$[%,W!6N!2PR6[@>6V4PI7$F1U/)7^:$#)QY:'A0=M0$@0T4
M9KG\H3Y ( H"K #\V%CAFO5&< (6((DJ%\\%H $:N!XJ0E[ P E3Y!JJ0]9
M+G#"YD%XJ"\E$V<A,$0,)$A\1CDD!HIHU?$I!!HAR./0*G1+!4JF,&!D0R\+
M%NJ^H A<*&/@A=X@S$3[P6UL)68H&GIU7!(M1!M*4+VA0A5A((<:$A&&2C P
M@'&M02!*2Y(G\$F"Y8<R%8 HN"&(0@J&Z%2"B"JBC.C]^8@F3.;")'K#9"5F
MA/R"B9H1FRA9D0$)EY\HF2**M@:DZ!EABGX;N(HJ"ALX$JUH&/J*4@:\2JLP
M.'J@:>=5.1228E6!XYF0/GL+J7FH43*+>*="NA0RI'UG'DDH.*3#F$4J&V:D
MVV=!TGV.F2N@6VDS1I)QY>KYD+X&;V'8U%,R79ID^HAIHJ >:0@*)M&4;:9,
M*FHR@#V&EI88GG\S* R0?]J@DD'_&1H\>^8,$;J 'J$.* 2ZA,86ODL94('^
MD),A!OI]:J#AITO))U:D$&E?V%Q.DR5HI+AA>9*I8$WJ5X*E+JA8FH'IF:X!
MCT0AV)^.Z%!Z@QJE5V52REPLI0(#$NJ42J!-J)PQE?*>$:+24%R\ $> $\'*
MN "/19/I&K1VH1 ,0Y@:IJA'8GHGR Z!:6-*O!2F,P1B*GHA99JD5_=W5J:#
M*69ZF#X6G.EPB#5UF,#E:D*;/"\!QP'GS75JB<,,T0.PIGC 0??)0 [ )M6
MQ& 2'17\\D"( "2 /52#0&8)P*$9 Q!/2PMD*EWMIG- @ 0"Y*:W*883 _2F
MR:EL:D.J)YB$="H"/*<T6P* X2"G64%LRLHLI]CI'(#AR #;*73Z6\XG1R=\
M1YNZIK>I>#H'S*892VW:!MRFT"F>5I[R 7/E8*"X)0 3Q&\:G&ZG"@AQ:IPB
MI_(I>;H9-*?I:7<JG5*G">IUNJ!JI]QI=.H"@*?5Z7@JH6:G'DZ#"EHA<2Q
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
M<9^4&?7D51Y"0F- 2'E1 RS =$CI497OX7M) :@XKZ#'+R0'HN\793JA3G6
MZC1*Y6BV;^9TQ9$,=XC.\;[>4;YOP0#\"K^4+_'[QR&^OX5.$4'TOK&O\YLZ
M3;ZMTYU;>T4]9P4^.YXD #AK4-22A$/; A6 M5I0=&M,]RI]"K!29O(I0$]?
MU*S"L5A/GYJ%H3W!$]R3L=08?$\&1-4@P,!*5 GY%!"83V,(^@2%$, MRJ<P
M^N9+\A-8!A+53Q[,7<"7Z4\H"_]T:L!+L!* BD4)4/;2I_ PP;^^Y<&U0-UR
M'</\VP"GK$Q4!75!,2GEF%["1$51DLD)!2N!K"K4FS:MU5#=10S<FLA0-!0(
M!4/!OSZP8_*;?&A#E B4:&HU0102/ -[4(;?#4R4!+=.< _E1$%14/ 2#"O%
MOYG.%" ;S(*!+)PTW$,OM*U41?H%K,$!0',W 7_H9EQ*Y I?VJY44*PP2#"
M-&$M@<"UVCV1.#7 .T%/Q +D @1=POH.HU'JV"2[V@Y6.MO@K5VFT;#=EJT
MHJ-AH_U#_AK"7P!=0I(DPD_ (HPR+!..,-;J&W61DC#.NI<P?#$))KP(%Q6A
M2&;9"4/"N$,VFK92PDR)Z3(NF,()@ @@UI*U;2UV=K:BHS)<* REK;] \"(L
M EBQ=FNL1.%\P2>*5H+,M@8TC#8+HQT6>H >@/FQ$@M""9LM[0ARG1SPR<X0
M4RE\0B^0%45G(%P(JR6(L)24"=?"FLPJ_ D7-5G-)#R7B"27L#FL"8>T*NHN
M_ EG-^VP*"R1\"4P21%P!=#"(@ J;&*HP]U4*WPOZ<,>RH1BD0#$M.U.D3-T
MPKY1+YP/_\*T23!<"P_#^5HQ'"QHOK[O^\3YXCW+V1P@,)%T#[ :EP*X9B%*
M/;IG(L/HR1J3R'8-(D94FZ)!P]+P16' @A0()[>6#6_#K$PWS/SY#O>"@H0H
MY22BT4MRZZ"M*PD1X"T8 >IONI23=)Z'R00UI6AG8-E@8K+.PNG28J(1TPO[
M;*?"5IJ6W X,(+/VN6V!GLO ADNB\&MBZ\@F#+'_01"+!:K)1'R=\":8&7 "
M$.,:E($<\!87*(J3.VR<("=(P%T\>*Q7]C =-(_.3VEQ0KRI ,3GK4YA,.4]
M9VM?TS3YPN]"13Q#"</$\*NTQ"$(["F?&Y_\#JL.I"<*#RH\BH]"VL@H\G M
M7"XI%N?26]R%^<*DRJ*"I-B7J;$(8("XQFF%7-RE2"I3<6U\%PQ+,H1K'!<C
MQIB*8DRA ,1V"$/A4$#$W92,,Q%7Q@F 18R?9<8J;>T%8/0I@' 4)Y:P.59I
M6 0](<.D!>?$RCP,1@O)4@8[$(E!GIH7*# >QOT+5(!Q>L"V=ALD9G;!'@Q!
M#9=ED)4S[S0[M;!<PQB=2&A-* ,>C3+ R6<3(&M&BTPMK)YH!IP!=@8C\3T;
M,?6:+VT0(;'5\& V._[3X@JK?"*4P2K3RES(!(Z '!X!)Z.K=ZPQ[BJ/;YM"
M?8 OT%P$3!H'U.#41%9P!WH0Q#S/$R]S%^,0E+%*-ZG1SQ>'!"TE+$ 2#RP
MI0?60 9(2A$P0GN\ E!L+4?#*<%/WUEH(%IHNG. KM%"!,E*PRD; <L'0 G0
MR0<%#SZG#55TY@"$\$&G^)H&:%EC0#H-N7+ %I"3U U! !00K?EI1T 7<(OA
M/2A:1KO1I@"(@7'P!7B58,@WZ^8>=QFN1"(B$\A20(=K)L-//[+,L":+Q$F#
MFVPH(\C B9T, IL.!_* K,C8Q?I9)I4&Z &,K@B;*8_(4@!U1Q,(RA4NIQ2@
M)@;DL%JC*"^[9S(,XR@WQ)*R&60IX\GWD0GK*8/*W0$M= "9RM,IS38H#WR%
M<B4,#Q,!UFWBRRBCR<?2HZQ3U,J6,!%P*\L<>;)&.RZ=Q!(GEYS8%)WV6KBD
M+'\BS+*:3"N_R8"0G S!U<EW,K5<<>C)UW*??(\ RA,#JAS:JLK%\J&\*2?*
MVYF/;!IL$,YRI)R3V,N+S+1,!PBP'+*9,$.@!KIR'_8IA\JP;\'L(:,&P+*\
M+-T2R@]$JRS(O,K?<J,L!_3+=4&MS-L(S 2S)I,PMZ6\\B(;4F@R$;.PG"I3
MS*PR2'(L)\OZ<@32+(_++G-= C*OR];RHH0M]YR9(HV"D'@\93)KVS*S1WV)
M/PPSQ\ILP'?&,;?)HW#1? 7<S": 0B$09Y82LX7[/Q7+L;#>@#''S/PRS5RR
M-B6'7+H\,(, 3;((,3)O$'<M"E VN[55,SE;MV(Q'V:G8@%!>JLR)<P/QR1'
M\[(L<BC-7O/=[ ]#S5*S-)$*WP%M\[U4-P\FI@H5@#%SL";G;1#\NLE4@&F3
MG3PI<$,0H-'R<6Q:5D#I%KI85(7)RJ2<]R5ND#E_&X\ND5%ZI&P>FN:<Z+X7
M)?' Q"]URH0!/Y8ZC<XP@NP<_"ZB)#/#G#J9RFBS;NLU:RH4BL!L*M, H_-?
M1AA $;B!XF:YN+GHJ)!*X%4>8M0]$3*T "C Y;($Q ;#DRO<O_U_V_.6^V_2
ME[]SXBP\C\Y;+FM .FEF9BU^5LCV88LH/]8[NVNZ&VVV5MQF'/"%NSUS+"B
M>N ^L\D[ /V3/P^<&X@) 2_3B>#+*<\3R6,,QE3LL$J:?,:,'""P.NS HVY
MS0$K0!J@UYH=LK-4VN:NS*FS!%UQ$ ;#G"05NU&8REPY5\R-SH*4S/!RGL\G
MPP.-]T30@E3[_#B@T'2K_5RJX<_ZL_&*.S7$_;-ZD,G55@XTP=ES$#(#= ]M
M0'?*/VX'+4C%SBVT#P "T]!9P5^FY4)GL1NOH3+@<N:>$CV5]+H4)F$@RK$R
MI%P/8,R5;:S,=FM#4S(+-!C]*0313S02W8=.T!7T!9U$G!'_Z:"L14?1$_23
M)D*7;23T27?10=&PBK\)<]*7;#2NG ; T)F4#(TZR\]3B4S7*1O/*T#N,4<G
MSVZT'<U(=\I]]&UVKJ%SF#03;<YQTF>T[ LN,[*LP7^6.K$O667P:SIXMMO9
MA#LL3TH9<:EKS[8+?+&("1/HN;N#52HT0RCYB>(,W\7,:3)YV1C[RVKQ.'0S
MG[<#)R$B2:G,\_+\=#A'*(FS:DN;R4^K;>.<.D'.DO-10CE3 9:S(=?'5=.D
M<QAG;X+.5H'H3-JJSJ5S;W$Z/[?H=!C7.JL ]"T.U3W?9K/S.>UHV,X$0?NT
M,/?*N_/E\CZC ,-TQWR= ,\6B?!\N1#/]K3Q'+Q1TN!T5L \I[.A:J.!1B40
M[\_T7#U_"M?SBI ]V]/VM/<\2)L. 373#$TKQ%3 ^-Q1J]#F,WTI J3/Z!HX
M31B4H_\T[ 9.MP;NL_]D3^/0MUE(W3\#T0#T$"U SU $]!IP1#?4ZR91'473
MSS)# ^U"RQQ^[?9LN4#2%C29,$EKT*MM C H&]6/0QX=0B-1#R\%[4>? ">T
M/9U"FU/?L^E02#/5[#09\U+S8RD;4>V5R=.E&B0M26?07/5'=U5?TN!T)FWP
M<M)YM2=MU/'5(Q0C'3/+/XX!"G!*NP:I=($FO#VW;S5M]DH3P]5QA[D[D%2[
MPSG97GE+84F+I=F.U6DS(NJ$W 418N5+F[C2*W/^=#B7*B2U-$V;4-."];IT
M30\!D3-VHDV31MSTY7S(I=6;LW,Q3EL%GS.&&3ICT>!T;FTZMP9M-2,M7(<'
M[W0\'5C/T_AT6ET[.\[Y=.[,3P>_O'-2K=LFQP(U:KVI&-2J4%JM4"//5#4C
M[5"GRLUS1/T\4PS1,T5A45O/V+,:=Q]OSR<U6?U1MTS/<FQ,4)?48G-3S6^B
MU.2E2LU2Z]?L,TQM7<// '9H0#_;U. T3NV2.2!)PT[]/PO1&S 1#50;T2J=
M6%U4B]=]*%(-5.FV9_4R;6'CT1]T'"U5T]6Q[5WM5+_1'[0>75<G 'KU'_UA
MPRHK-"&]5'O86/5:/4-;V(WU3?TPY,_P+C?J Q!,CW$/G>4^V %T$5U 5]A$
M-6M]8O=A3'2'G58_U9C;%+UB6]%.Q),]E;S87#08_46#T.6<&+UBE]$)'5R-
M1M//-FH3W49CU5"U'$UB5]4F]D<'8I-.*G9LVV*#U8#UDAU(Q]AF]8S-.A78
M,70Y6ES;V12F)OU76]DY-C@M5V/0=+2%W687M=OSG.W2I=6!]K4+6-O3@W4I
M;5BKTHBU98EIL]*K;6--X3;3%N?;3!)U7 Y+G#/4[*TSJU)C:J=855R=0^U>
M<>ETBBQ*(U)V@*,K3F]Q<$#*6<;!M25DZTSQEFZ_L%YP&4NMG)*&?$W_%SC
M09LN<9CZZJEM>_@.XB]8DF+Y58F-58K%5AP[0AR 6B#:V;93\YI><>U:ICM%
M34I_F7*<,Q2\'W1'G$>9Q(W9_*0ZA]LF0*S+*2W;XR]5P@3(JK">P!#J$AZ6
M$HCQ7MRNJL.T&C.<&KZ2#H&BV,$_,58VU+PCY*:Y2TOUU!&V(3- .[S@6\51
M6]D!$/?*0<A4)2O4M';]6;LHW</M1+_0%'<"D";8<C,VF_;.[7(!U,?PS_W5
MJ=PJ5W9TV\"<*D?.H71I0LD-H,(!VRUQ:G+SW D=<;KCTB9_6<N-;G_2.G>O
M*W-_&W' 1)?3X7.=G+3[;7=JS.YM6G'S<BP=S5T2!%@@]T7WI1V;-X!08P-
M<>&2PXUQ0]@:M\0-5%/<4K3('4!SW#JPSBS0K7(L739W=D/0)??)S="EW+$;
M%WURO]SGG$#W=W?9J%PFMW1KW7/WS8UA#KNO-M4-='>G/W?/3:H-W5>W)Z=W
M2]J(H.6M>)\ 7G;2[>H>WBV1TVW(Z'3YG-1M=>_<DG>G=G73W?P8XLUUL]Y>
M][KI:HH*\$*"-!:;<;'V.UUKX]Z5[CKMS^I1MUP95RJMM\ !2@##; $[E$0B
MJA0!/L!ULGQW5,EM\BU;:R?:@E[;49%F.]1KLGQ;WWV<D%9ZG &C1(,=IES=
M-*V:9R8$4BQ=E-9XR[_R 63C5UDWBNJD=%S+VAXQK6UKHW'A9<HV\&%1P?=K
M1GRK ,8$Z?":A9?@]S81'I!T.<GRW7QKWY#)=@)]5QP)> ->?4^G:6[V/7U'
M)M:WION7E=_CL7)0$J3?%#>S#85V4PF28N-T@;=R !RP!A0<[])MAK[(,!N5
MR'% O$NMVC>[@7,,'NUI0!?D 5.W1ZQ0J QM0.Y4+S'1*+&')@: RI0!<8M%
MI0 !. QC.D3@U'<1D('#=P6X&$7NTB:]+BT%[WJ^Z0/HVP8LS8=9\ W^#7/J
M]VU:;F?<7K2P;04,;_R;1QS!H@8[%&9&]L"M3X#<*J'DN.#V"=>=3KB0G/'-
MY)[=V0:NR>W&I^%WOE3QT@M1CT@E*K3:\%T*OH(CIKXL$_V"1P8QN&Q6--#@
MHC7YC8-O=B3"#MZ#!TP_^,H@A+M+K.YV5H7G2^5HZXL[S;4@<4-<R#;A3#2"
M"T"E *,/F$FH "G.'O+IAWA(,4;H(33OK"XZ9"+?[.Y>"D.F67A88%+QH7#
M!E8#&$[(B.$=%1E><I_A:'<:/D"OFV6;NCFD)>.B].?;C+?B;'(8?LJ<%F,X
MZ6;BNMDHMMOM4ZOA;+CJC8X7#@'3&[XQ3RF^R1P>MSH!=[C*W:G-4<W91K6$
MP^)X.&UBPOD9^C@)1[SUX:1#K;Q]QP K " >@PCB!7DQ7O$>Y%0V%IV-4S*P
MV9EZCJN;;FY?P[D0!QO<B7 <<!;UC_8,PMVF?#@LO@4XY'<!1$Z(&^#;+L_<
M89(E(E78'333)OCS LWM/@X"&S\&A4<F_;,%76'[W'^92IX&= %3-ZRL-P/)
MA_2;J[$E!HTWK!W&_=\9@Z:+D^_8&<-M]C6$Q#I%_[S&<=F9KF+@5?^G&?.^
M7#3T3FO45_[-WK=/^:Q+F\W?I=-Y:Q6<M^]O^XW9P@L=4/R]C^_8.GE0WI-3
MPLMW4'Y$$^68FU&.E)_>7/-9WI3'MCDYJZM#<^5BU ^- H#CD'+'?)2[ &^W
MD2V4K]C:>&'NAV\!%O1/OIWHM8=Y5?V.B]+C!6']GU'FS_)E?BG'M@8N ZW;
MLN:1LFO^0J_2:WE;'I7/WU0Y!UQ5P^7J]NRKQA%,5GD"@#]GY?S85LY#JW)@
MN6LFEA_1%[GA&BL#R7];"J"6J]PX-#=.F]<%/718()D33&CXQFUD$TS0.:G6
MF5<<X'DUOG'S+F2YNEEI%];I^:4LF[MK\?EMOEC;MZ0M/_Z+F\0 .3FKFS?B
MJS-R[?O*Y2H 71Y9-]N.C5!S*=S>JID*SH)'XB[X9T")OT_G+0U^WF;B-[A(
MS(FG!\?$U(U,^P! ^"A..I3B1C@2[HO[XW4!\12,\](+.3%>B!_@XO8Q[NIJ
MX<HX_.2-"S ]4NA4XCC#10H%XV;XV8XYG9V9^9 M5NN>KOA:08<3H]#,F_K
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
M^L9MA8-2W//D=+#+\:%-^_)GLAP.WL2MDU$XV&[A4-YM)QS% %EW 9 B1IL
M4>B :)H> ZC,=/ U0**HU8![B!1XVNYM$#B5X .&4B@&FD#@&AJM]/ UP -V
M,GASC90^(/I#$O@*?-?= 0&!B@%XEW# ]377$@4R >!.311H/^$/,'LJ_^!
M FE?_+T\W4:EC4=AVJ>9S%Q]ZS92RINM#D@*O+!-^18#_R9G'?%D#8"BF<6)
M MD7SD "X*RMO+7&\6M1,MA]L[C-WS"PD88+].003%( 6X Q@)VLZ@#O6@>Z
M ^T \$!YH-@L*T#2V>]U#O!TI).%F3EP:?<.C ?:R380R3EI@CW0%Q@/),VI
M4L)0@D#Q%D/PU[<JV0?2Z69Q*+%!X#TP'^@01 BJX=:!43J"(#[0("@VFP3B
M4"XI&[&V#":0$UA* P=N D4,GL"Q&C10.,<I(,XQ AMG*@#5W#JP%!@+/ 7F
MSG:"4316H$(P6) '#*>A<6Z!@\#YVVXMW_0(S*I9W%1S:1<MET#P)HBT:PH.
M:8*![\"8X(^K&I@5<+@%T1Q[7#4E&_LL.5=*<^/,S_@Q3C9WFU/0R\55LUR(
M!<D8?K<_GD"GS-;' \&1MM9W?1A'("--D<=84PM"V99VL3.<&T7'\G9T\[)%
M!0,HQI75%EZ0DM6<Z; 5V#IL%T$[W3^PC)<*++") ;"!,"?57)[-"%CN$PBF
MU;Z"0[2$X%[&GE85Q.PAM=B!I\&,TVEP*[AR(F- !ON!DD%;7)ZN,F@6)&-<
M!G4MMI66H)D-5T8;] M.)4"#$3;18&W0<E$:_.AXVL(L>D$23C6PL786U**0
M >9[!!.78/VF$[@.O W^FS2#H0'IH%^+#8@2;)]4\N9[V,%4("=0FJ 5Q GJ
M!&^"J:\WX.H+%;@P PK"ZUJ!1$$[H$JPMA5OT]\=]L*#"[/QH!E@.SANZPXR
M!G-\KX%Q7WF0_K9N&YB, JV!!$*:(#QM';@#Q ?>!(N"<I1EWVV&..<_ PY:
M^\9S.$#]G&/0/<@8+-5M _&!0,'&FE=&S=+Q0FG9A*H")4*9A:@A<51/D1VD
M" ,6[0J/DLFK0[0NXJ=@CE9>%R^ !;(B1HB4L1&&I$H3CY8L8 :JZ!6S@!&N
M"!M%906(D0S@+" 1*! <"'1 39/)0!T 8' *\B2YI008I+@[%M/"KU"RL ?!
M>CP6GB2KU<9 ZM5SV5F!+%)@OZ#2TU6*2'B/,!&&DF)/,8&[D/J(=G0E--1H
M#"@$6T*G19A((L*Q !/2CL2$\ 0B1IG0XW0FM'CM3/0DE:QGS[=*(M#QRK89
MI@H.+,).A8LP1XB-<!0J"C=>NY@L$\I+#_0&:A0F"E\#QA\:X::PBY2O,O/1
M.&H<;+XHSNT!5=@/RM5EV_H?. 72"<?/&N8]H162<59PI@,]AA'@"3"T:>+1
MUH( 0CR^'0L/KM8$I/O9_S*"?9DK3MJOJ<<&&,P(#:9Z$S\#(,GO\*<"7/Q9
MY3 &FSVF@E3O-O,L1$Q!!OH?)0,Y &(*7!AH*/-QGRH>R+:/2RT-<D*?0!7.
MS;QEV$*"4X?A4<(&(!.P]38)]#XWR6J,7AC8P]F- 0!H\\)S29B.T9 OQ,P%
M#"$E7+U"7^8 0$A>*A9V #5XMCYQ8$>K#4$\V=;L"#X1*[CF5:@-4:+O0P-@
M#,E+?!02X<6+J><X2D=L"KA5)$/N$;5",C(I/!2F#%4\'B6YQ<FK88%Y.@KA
M"%V&*KU/!/>H1\@F. H-DEQ:VY#HCRX)^X,O$AU]@'Y)U:,AH4G*T822NJJ@
M#'.&Y"."A3YK%!03 ##T#-=/J:"7H0*)GC(UI"E5#:TFO*,YX<N":9%<42HE
MEI0/+Y.4@S=)AD M01XU?TA&0D/I7YKH>>1+BAZ!D!9)U".##ID)>R1^VA,]
M#9>%4<.Q LJ.%2!J1KBF792&ABJA-9PA20U'!Q^C^("AD.L(9F";'@0,!L:
MCV($LH@"Q-JP# 0S>4*="[LI-(K#A9!PVY3V42%=D#Y6SH$00#<D+D*J,%T$
MB;)<29C<R@\M#Y-S*:ZXE@B%MB8LS,L/<,@]XAK"GV!'7\.K(00)LH7I4 $L
M:XZ'R,/DH?)P><@\;!XZ#Y^'SD,LAE^E:1(,$K%05[P\8Q#ZQ^J05\@MB$C4
MB6"'_2.:R^S0[")"LAT:ER1D2:784M%E<6B3NAC!"0,2A\-3BW1)VQ25,!Y"
M#^^'^,/\H?X0>0A:@5CT*1AN,PY]EIRCHK>' A/1&=H."Y9QE38)94+&L']D
M!:!D'P/?WY0OHJ'+R@/TS\Q-OI$VA/HA0W B>"!,9YHG#\2:E@21DA&)^&-=
M$#&(>B$3Q08Q$L%!-&U]$.E1$Y &(I@(#\'$X!\(&UX MA.4A>QAB5.P\WAX
MQC8>IA"Q6, **,(KC$V4)+9:)0%/3@J@!C>DH(+P"G^%M E3%E9/%\(KW!4J
M2> &%['/1U!$K^#D*(V0,1830 [SCVODB"@",/\,PWPCE,.?E.)$^B%&M)R1
M)&IAYI\PP!D13F CB29PDRP,]*S:"^W@LB5$U(G8!*@"X:[R!R %DZ+*@9_H
M!(M8&T2HX'5 W_8PF*Y,$;93W@0!43A!<9(5 (E$R<11\!/*P"C!A%C$TB0R
MLBJ(E$360^6O< _&6&\*2J(X+P,8KND]#"=^128 L\H(D3, <E!;\3& "&*
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
M 6 N*9/VB3O_GAS=#Y.'J&/V\?IX^4#_&A^##N6'[F/IC$F !42"^E]W$)R
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
M 21_(\018IL25/F(7.NQU1YPUQI*YME \F=G8_]I ]IM4LR!ORD#;""$\SP
M9-PS&,M\HSGE#?&E=$0EZV:9I8?TI".J)JE6@V0*V X,(LE=S53B0ZG;\K#Q
M*961[;P1Y51RD*F9Z9]](6P8!X855A? )3D':F6R:DB0E2\S9//QKD4/)&.H
M,=-F#4QM9A-R"M'-G$K8'-\EZL?FXV"AY>C-W%L*%998)(%N%YOCVP5@@%C$
M6.*6QC,_9MPRB::K[&I1+1TT<P"GS2'S0>,"4&0R,O<W=C829"13O'(V2'.I
MM?R2F4SQ5JZQ!<?2.:0M-%4 HLR')F3&<,54ROFA,F.94XE5IC6S.?/*3&7*
M,F4(I8=:9F#CEHG2; WH,@M1!<E>YM'@E[D="&;>\5R.Q$PEES$S&6F\FV)6
M**64)TEGIGH"#/%96&%E*6\&U4S8)#931-FAS$@^!Y.6#DJ'@NE@G\77^F+^
M-/^95LF<X3)!*WFK46L5'MF0G,QE(AG+>-+4/$I:,0F02\L3IE/R-S$0%*2T
M,*N66DWM0 R"JWG4Q$,FKR8&H<;GX!NRC_4++&LR**&:)LP'9=,RP%#5Y! N
M,Q59,$J4I ,B;1A2N&JES]B'H2#W(5I*+@ _-!29,6$9ZB:5(S<3(MC._*>%
M,S.;V\P-1CESW BQ3&<V(=>9A 27HSG3G?GL:2/$,T$K'@_'I,>#3,9B^2]$
M0SH5[D5S4SGQ$-FRV4QJ$PX,Y4:R)(J2K$G),&W,;A S+9M5Y!J2$,F#\UKJ
M)'F2:TIMP29SL!#<[%LR!WXZK[8W6Q/ -3(%Z%%$ 0 T X&1C=(/_C"R4:R=
M9U9I> ;2L\F!22E@6W./K(>=1 6BX.$\>$N6-[)6-I)5B/(9HM)BZ1U$AS&
MF"PL8)7(88V)*E%%*B/EF%066Z/^YD>)+( ><@O8)O8I0B8EBS9A_Z7'JIQP
M)4H",87XD*Y(P3DU-"@%#V=/":7L4'3$2(+<0*5H2V0([0EED8&H(" '2$<@
M!70R0+C/ (D 5.B/J13 .%<&,D[JA4TH3C*!&0I,9?X+;:#^PHVS#9#CI''.
M))8NXPI]2@9ED&19NT#]EZ '.,XWP(P34JCS&IOPO! ?:!/1WDM R2#T<IN<
M@J"<1$XI)_7B<M&% BFT!DQ48 3U !"N99"K&'/JP;)>4@X1"XFEV)1#HB%Q
8FY81&X3S0IV3=,A,,"*D#\@ 8@"PUU,"
end
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,536 @@

Received: from louie.udel.edu by huey.udel.edu id aa05908; 9 Feb 94 18:18 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa21398;
9 Feb 94 18:13 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA29809 (5.65c-6/7.3v-FAU); Thu, 10 Feb 1994 00:12:50 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA11633 (5.65c-6/7.3m-FAU); Thu, 10 Feb 1994 00:12:46 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402092312.AA11633@faui43.informatik.uni-erlangen.de>
Subject: .zz Patches
To: Mills@udel.edu
Date: Thu, 10 Feb 94 0:12:41 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de,
Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
X-Mailer: ELM [version 2.3 PL11]
Guys,
Ok, here are some patches (including some WWVB cleanup 8-) relative
to the zz version. The KERNEL stuff in ntp_timex.h must still
be resolved.
diff -c Makefile:1.1.1.11 Makefile:3.46
*** Makefile:1.1.1.11 Wed Feb 9 23:54:57 1994
--- Makefile Wed Feb 9 23:54:57 1994
***************
*** 162,168 ****
FRC:
savebin:
! @test -d bin || mkdir bin
@echo
@echo '### saving $(TARGETS) $(OPTTARG) in bin'
-@for f in $(TARGETS) $(OPTTARG); \
--- 162,168 ----
FRC:
savebin:
! -@test -d bin || mkdir bin
@echo
@echo '### saving $(TARGETS) $(OPTTARG) in bin'
-@for f in $(TARGETS) $(OPTTARG); \
diff -c include/ntp_machine.h:1.1.1.11 include/ntp_machine.h:1.27
*** include/ntp_machine.h:1.1.1.11 Wed Feb 9 23:56:27 1994
--- include/ntp_machine.h Wed Feb 9 23:56:27 1994
***************
*** 274,280 ****
#ifndef STR_SYSTEM
#define STR_SYSTEM "UNIX/Ultrix"
#endif
- #define HAVE_TERMIOS
#endif
/*
--- 274,279 ----
diff -c lib/systime.c:1.1.1.11 lib/systime.c:1.9
*** lib/systime.c:1.1.1.11 Wed Feb 9 23:57:45 1994
--- lib/systime.c Wed Feb 9 23:57:45 1994
***************
*** 47,58 ****
* We also remember the clock precision we computed from the kernel in
* case someone asks us.
*/
LONG adj_precision; /* adj precision in usec (tickadj) */
LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
U_LONG tsf_maxslew; /* same as above, as LONG format */
- LONG sys_clock;
l_fp sys_clock_offset; /* correction for current system time */
/*
--- 47,59 ----
* We also remember the clock precision we computed from the kernel in
* case someone asks us.
*/
+ LONG sys_clock;
+
LONG adj_precision; /* adj precision in usec (tickadj) */
LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
U_LONG tsf_maxslew; /* same as above, as LONG format */
l_fp sys_clock_offset; /* correction for current system time */
/*
diff -c machines/sunos4.bsd:1.1.1.3 machines/sunos4.bsd:1.3
*** machines/sunos4.bsd:1.1.1.3 Wed Feb 9 23:58:15 1994
--- machines/sunos4.bsd Wed Feb 9 23:58:15 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SUNOS4
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lkvm
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lkvm
diff -c machines/ultrix.bsd:1.1.1.2 machines/ultrix.bsd:1.3
*** machines/ultrix.bsd:1.1.1.2 Wed Feb 9 23:58:19 1994
--- machines/ultrix.bsd Wed Feb 9 23:58:19 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_ULTRIX
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/ultrix.posix:1.1.1.2 machines/ultrix.posix:1.3
*** machines/ultrix.posix:1.1.1.2 Wed Feb 9 23:58:20 1994
--- machines/ultrix.posix Wed Feb 9 23:58:20 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c parse/clk_dcf7000.c:1.1.1.8 parse/clk_dcf7000.c:3.11
*** parse/clk_dcf7000.c:1.1.1.8 Wed Feb 9 23:58:51 1994
--- parse/clk_dcf7000.c Wed Feb 9 23:58:51 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
*
! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
*
* ELV DCF7000 module
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
*
! * clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
*
* ELV DCF7000 module
*
***************
*** 121,126 ****
--- 121,129 ----
* History:
*
* clk_dcf7000.c,v
+ * Revision 3.11 1994/02/02 17:45:14 kardel
+ * rcs ids fixed
+ *
* Revision 3.6 1993/10/09 15:01:27 kardel
* file structure unified
*
diff -c parse/clk_meinberg.c:1.1.1.8 parse/clk_meinberg.c:3.13
*** parse/clk_meinberg.c:1.1.1.8 Wed Feb 9 23:58:53 1994
--- parse/clk_meinberg.c Wed Feb 9 23:58:53 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
*
! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
*
* Meinberg clock support
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
*
! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
*
* Meinberg clock support
*
***************
*** 414,419 ****
--- 414,422 ----
* History:
*
* clk_meinberg.c,v
+ * Revision 3.13 1994/02/02 17:45:21 kardel
+ * rcs ids fixed
+ *
* Revision 3.11 1994/01/25 19:05:10 kardel
* 94/01/23 reconcilation
*
diff -c parse/clk_rawdcf.c:1.1.1.8 parse/clk_rawdcf.c:3.11
*** parse/clk_rawdcf.c:1.1.1.8 Wed Feb 9 23:58:54 1994
--- parse/clk_rawdcf.c Wed Feb 9 23:58:54 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
*
! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
*
* Raw DCF77 pulse clock support
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
*
! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
*
* Raw DCF77 pulse clock support
*
***************
*** 529,534 ****
--- 529,537 ----
* History:
*
* clk_rawdcf.c,v
+ * Revision 3.11 1994/02/02 17:45:23 kardel
+ * rcs ids fixed
+ *
* Revision 3.9 1994/01/25 19:05:12 kardel
* 94/01/23 reconcilation
*
diff -c parse/clk_schmid.c:1.1.1.8 parse/clk_schmid.c:3.12
*** parse/clk_schmid.c:1.1.1.8 Wed Feb 9 23:58:55 1994
--- parse/clk_schmid.c Wed Feb 9 23:58:55 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
*
! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
*
* Schmid clock support
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
*
! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
*
* Schmid clock support
*
***************
*** 168,173 ****
--- 168,176 ----
* History:
*
* clk_schmid.c,v
+ * Revision 3.12 1994/02/02 17:45:25 kardel
+ * rcs ids fixed
+ *
* Revision 3.10 1994/01/25 19:05:15 kardel
* 94/01/23 reconcilation
*
diff -c parse/clk_trimble.c:1.1.1.3 parse/clk_trimble.c:3.9
*** parse/clk_trimble.c:1.1.1.3 Wed Feb 9 23:58:56 1994
--- parse/clk_trimble.c Wed Feb 9 23:58:57 1994
***************
*** 1,6 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp
*
* Trimble SV6 clock support
*/
--- 1,6 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.9 1994/02/02 17:45:27 kardel Exp
*
* Trimble SV6 clock support
*/
***************
*** 106,111 ****
--- 106,114 ----
* History:
*
* clk_trimble.c,v
+ * Revision 3.9 1994/02/02 17:45:27 kardel
+ * rcs ids fixed
+ *
* Revision 3.7 1994/01/25 19:05:17 kardel
* 94/01/23 reconcilation
*
diff -c parse/parse.c:1.1.1.8 parse/parse.c:3.21
*** parse/parse.c:1.1.1.8 Wed Feb 9 23:58:59 1994
--- parse/parse.c Wed Feb 9 23:59:00 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
*
! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
*
* Parser module for reference clock
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
* Parser module for reference clock
*
***************
*** 1148,1153 ****
--- 1148,1156 ----
* History:
*
* parse.c,v
+ * Revision 3.21 1994/02/02 17:45:30 kardel
+ * rcs ids fixed
+ *
* Revision 3.19 1994/01/25 19:05:20 kardel
* 94/01/23 reconcilation
*
diff -c parse/parse_conf.c:1.1.1.8 parse/parse_conf.c:3.15
*** parse/parse_conf.c:1.1.1.8 Wed Feb 9 23:59:01 1994
--- parse/parse_conf.c Wed Feb 9 23:59:01 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
*
! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
*
* Parser configuration module for reference clocks
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
*
! * parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
*
* Parser configuration module for reference clocks
*
***************
*** 81,86 ****
--- 81,89 ----
* History:
*
* parse_conf.c,v
+ * Revision 3.15 1994/02/02 17:45:32 kardel
+ * rcs ids fixed
+ *
* Revision 3.13 1994/01/25 19:05:23 kardel
* 94/01/23 reconcilation
*
diff -c parse/parsesolaris.c:1.1.1.6 parse/parsesolaris.c:3.12
*** parse/parsesolaris.c:1.1.1.6 Wed Feb 9 23:59:02 1994
--- parse/parsesolaris.c Wed Feb 9 23:59:02 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
*
! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
*
! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
***************
*** 139,145 ****
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.9";
char *s, *S, *t;
/*
--- 139,145 ----
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.12";
char *s, *S, *t;
/*
***************
*** 1179,1184 ****
--- 1179,1187 ----
* History:
*
* parsesolaris.c,v
+ * Revision 3.12 1994/02/02 17:45:35 kardel
+ * rcs ids fixed
+ *
* Revision 3.9 1994/01/25 19:05:26 kardel
* 94/01/23 reconcilation
*
diff -c parse/parsestreams.c:1.1.1.7 parse/parsestreams.c:3.14
*** parse/parsestreams.c:1.1.1.7 Wed Feb 9 23:59:03 1994
--- parse/parsestreams.c Wed Feb 9 23:59:04 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
*
! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
*
! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
***************
*** 1258,1263 ****
--- 1258,1266 ----
* History:
*
* parsestreams.c,v
+ * Revision 3.14 1994/02/02 17:45:38 kardel
+ * rcs ids fixed
+ *
* Revision 3.12 1994/01/25 19:05:30 kardel
* 94/01/23 reconcilation
*
diff -c xntpd/ntp_proto.c:1.1.1.20 xntpd/ntp_proto.c:3.22
*** xntpd/ntp_proto.c:1.1.1.20 Thu Feb 10 00:00:36 1994
--- xntpd/ntp_proto.c Thu Feb 10 00:00:36 1994
***************
*** 25,31 ****
l_fp sys_refskew; /* accumulated skew since last update */
struct peer *sys_peer; /* our current peer */
u_char sys_poll; /* log2 of desired system poll interval */
! LONG sys_clock; /* second part of current time */
LONG sys_lastselect; /* sys_clock at last synch-dist update */
/*
--- 25,31 ----
l_fp sys_refskew; /* accumulated skew since last update */
struct peer *sys_peer; /* our current peer */
u_char sys_poll; /* log2 of desired system poll interval */
! extern LONG sys_clock; /* second part of current time - now in systime.c */
LONG sys_lastselect; /* sys_clock at last synch-dist update */
/*
diff -c xntpd/ntpd.c:1.1.1.28 xntpd/ntpd.c:3.32
*** xntpd/ntpd.c:1.1.1.28 Thu Feb 10 00:00:43 1994
--- xntpd/ntpd.c Thu Feb 10 00:00:43 1994
***************
*** 139,145 ****
(void) dup2(0, 1);
(void) dup2(0, 2);
#ifdef NTP_POSIX_SOURCE
! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX)
(void) setsid();
#else
(void) setpgid(0, 0);
--- 139,145 ----
(void) dup2(0, 1);
(void) dup2(0, 2);
#ifdef NTP_POSIX_SOURCE
! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX) || defined(SYS_ULTRIX)
(void) setsid();
#else
(void) setpgid(0, 0);
diff -c xntpd/refclock_parse.c:1.1.1.10 xntpd/refclock_parse.c:3.47
*** xntpd/refclock_parse.c:1.1.1.10 Thu Feb 10 00:00:54 1994
--- xntpd/refclock_parse.c Thu Feb 10 00:00:54 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
*
! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
*
* generic reference clock driver for receivers
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
*
! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
*
* generic reference clock driver for receivers
*
***************
*** 3396,3401 ****
--- 3396,3404 ----
* History:
*
* refclock_parse.c,v
+ * Revision 3.47 1994/02/02 17:44:30 kardel
+ * rcs ids fixed
+ *
* Revision 3.45 1994/01/25 19:06:27 kardel
* 94/01/23 reconcilation
*
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,66 @@

Received: from louie.udel.edu by huey.udel.edu id aa16020; 11 Feb 94 10:28 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27338;
11 Feb 94 10:12 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA00715 (5.65c-6/7.3v-FAU); Fri, 11 Feb 1994 14:26:34 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA24390 (5.65c-6/7.3m-FAU); Fri, 11 Feb 1994 14:26:31 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402111326.AA24390@faui43.informatik.uni-erlangen.de>
Subject: Re: Beep, beep, beep
To: Mills@udel.edu
Date: Fri, 11 Feb 94 14:26:25 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de,
Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
In-Reply-To: <9402101138.aa10259@huey.udel.edu>; from "Mills@udel.edu" at Feb 10, 94 11:38 am
X-Mailer: ELM [version 2.3 PL11]
> Frank,
> In the latest xntp3.3zz.tar.Z the Ultrix kernel finds joy of clock.
> (Whew).
Ok, I just dug out an old allocation failure in xntpdc. While
reading respones the input buffer might be realloced(and MOVED) without
telling the rest of the system. This was fatal when stdio needed a
buffer for non terminal operation. Net result was confused output.
Ok, here ist the patch:
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/xntpdc/ntpdc.c,v
retrieving revision 3.17
diff -c -r3.17 xntpdc/ntpdc.c
*** xntpdc/ntpdc.c:3.17 1994/01/28 14:07:13
--- xntpdc/ntpdc.c 1994/02/11 13:20:56
***************
*** 598,605 ****
/*
* So far, so good. Copy this data into the output array.
*/
! if ((datap + datasize) > (pktdata + pktdatasize))
growpktdata();
memmove(datap, (char *)rpkt.data, datasize);
datap += datasize;
if (firstpkt) {
--- 598,609 ----
/*
* So far, so good. Copy this data into the output array.
*/
! if ((datap + datasize) > (pktdata + pktdatasize)) {
! int offset = datap - pktdata;
growpktdata();
+ *rdata = pktdata; /* might have been realloced ! */
+ datap = pktdata + offset;
+ }
memmove(datap, (char *)rpkt.data, datasize);
datap += datasize;
if (firstpkt) {
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,68 @@

Received: from louie.udel.edu by huey.udel.edu id af16153; 14 Feb 94 7:27 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27498;
13 Feb 94 13:23 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA22387 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:22:59 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA27117 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:22:57 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402131822.AA27117@faui43.informatik.uni-erlangen.de>
Subject: compilation setup for solaris
To: mills@udel.edu
Date: Sun, 13 Feb 94 19:22:53 MET
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave.
Just to remove some compilation noise in solaris (NTP_POSIX_SOURCE
redefined):
For 3.3e:
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.1,v
retrieving revision 1.4
diff -c -r1.4 machines/sunos5.1
*** machines/sunos5.1:1.4 1994/02/01 23:30:54
--- machines/sunos5.1 1994/02/13 18:16:24
***************
*** 1,6 ****
RANLIB= :
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DNTP_POSIX_SOURCE
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= :
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.2,v
retrieving revision 1.4
diff -c -r1.4 machines/sunos5.2
*** machines/sunos5.2:1.4 1994/02/01 23:30:56
--- machines/sunos5.2 1994/02/13 18:16:27
***************
*** 1,6 ****
RANLIB= :
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE -DNTP_POSIX_SOURCE
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= :
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,116 @@

Received: from louie.udel.edu by huey.udel.edu id aa16187; 14 Feb 94 7:27 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27096;
13 Feb 94 13:04 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA21590 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:04:48 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA26947 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:04:46 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402131804.AA26947@faui43.informatik.uni-erlangen.de>
Subject: patches for 3.3e
To: mills@udel.edu
Date: Sun, 13 Feb 94 19:04:42 MET
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave.
Here is something to make Sequent PTX happier.
I also changed the version number from 3.3zz to 3.3e.
The patch is relative to the current 3.3e version.
diff -c Makefile:1.1.1.12 Makefile:3.47
*** Makefile:1.1.1.12 Sun Feb 13 18:53:06 1994
--- Makefile Sun Feb 13 18:53:07 1994
***************
*** 144,150 ****
@echo '###' creating XNTPRES utility
@cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
! util/tickadj: util/Makefile FRC
@echo
@echo '###' creating TICKADJ utility
@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
--- 144,150 ----
@echo '###' creating XNTPRES utility
@cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
! util/tickadj: util/Makefile lib/libntp.a FRC
@echo
@echo '###' creating TICKADJ utility
@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
diff -c VERSION:1.1.1.7 VERSION:3.12
*** VERSION:1.1.1.7 Sun Feb 13 18:53:10 1994
--- VERSION Sun Feb 13 18:53:10 1994
***************
*** 1 ****
! version=3.3zz (beta)
--- 1 ----
! version=3.3e (beta)
diff -c authstuff/Makefile.tmpl:1.1.1.9 authstuff/Makefile.tmpl:3.12
*** authstuff/Makefile.tmpl:1.1.1.9 Sun Feb 13 18:53:18 1994
--- authstuff/Makefile.tmpl Sun Feb 13 18:53:18 1994
***************
*** 38,50 ****
all: $(PROGRAM)
authcert: $(CRTOBJS) $(LIB)
! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB)
authspeed: $(SPDOBJS) $(LIB)
$(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
keyparity: $(PAROBJS) $(LIB)
! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB)
makeIPFP: $(IFPOBJS)
$(CC) $(COPTS) -o $@ $(IFPOBJS)
--- 38,50 ----
all: $(PROGRAM)
authcert: $(CRTOBJS) $(LIB)
! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB)
authspeed: $(SPDOBJS) $(LIB)
$(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
keyparity: $(PAROBJS) $(LIB)
! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB)
makeIPFP: $(IFPOBJS)
$(CC) $(COPTS) -o $@ $(IFPOBJS)
***************
*** 68,74 ****
$(CC) $(COPTS) -o $@ $(UNXBJS)
md5: $(MD5OBJS)
! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB)
tags:
ctags *.c *.h
--- 68,74 ----
$(CC) $(COPTS) -o $@ $(UNXBJS)
md5: $(MD5OBJS)
! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB)
tags:
ctags *.c *.h
diff -c include/ntp_machine.h:1.1.1.12 include/ntp_machine.h:1.28
*** include/ntp_machine.h:1.1.1.12 Sun Feb 13 18:54:32 1994
--- include/ntp_machine.h Sun Feb 13 18:54:32 1994
***************
*** 457,462 ****
--- 457,463 ----
#define HAVE_READKMEM
#define UDP_WILDCARD_DELIVERY
#define NTP_POSIX_SOURCE
+ #define memmove(x, y, z) memcpy(x, y, z)
struct timezone { int __0; }; /* unused placebo */
/*
* no comment !@!
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,39 @@

Received: from louie.udel.edu by huey.udel.edu id aq16153; 14 Feb 94 7:28 EST
Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24615;
14 Feb 94 6:34 EST
Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #1)
id m0pW1Zk-000C8UC; Mon, 14 Feb 94 06:34 EST
Message-Id: <m0pW1Zk-000C8UC@jagubox.gsfc.nasa.gov>
From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
Subject: xntp 3.3e (or is that zz ;) )
To: Mills@udel.edu
Date: Mon, 14 Feb 1994 06:34:52 -0500 (EST)
Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
X-Mailer: ELM [version 2.4 PL23]
Content-Type: text
Content-Length: 621
This latest version requires the NTP_NEED_BOPS define in ntp_machine.h for
A/UX:
*** ntp_machine.h.orig Mon Feb 14 06:34:34 1994
--- ntp_machine.h Mon Feb 14 06:20:57 1994
***************
*** 299,304 ****
--- 299,305 ----
#define HAVE_BSD_TTYS
#define LOG_NTP LOG_LOCAL1
#define HAVE_SIGNALED_IO
+ #define NTP_NEED_BOPS
#ifndef STR_SYSTEM
#define STR_SYSTEM "UNIX/AUX"
#endif
--
#include <std/disclaimer.h>
Jim Jagielski |
jim@jagubox.gsfc.nasa.gov | "Ahh... west and wewaxation at wast"
NASA/GSFC, Code 734.4 | Elmer Fudd
Greenbelt, MD 20771 |


View File

@ -0,0 +1,267 @@

Received: from louie.udel.edu by huey.udel.edu id aa25712; 15 Feb 94 17:54 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18345;
15 Feb 94 17:51 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA15109 (5.65c-6/7.3v-FAU); Tue, 15 Feb 1994 23:50:53 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA17375 (5.65c-6/7.3m-FAU); Tue, 15 Feb 1994 23:50:51 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402152250.AA17375@faui43.informatik.uni-erlangen.de>
Subject: fixed for parse kernel stuff...
To: mills@udel.edu
Date: Tue, 15 Feb 94 23:50:47 MET
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave !
Here are some fixes for the PARSE kernel modules. Basically they
fix a memory leak on an open error condition and pronounce the
Solaris 2.x stream module MT safe.
Well, actually I should put something for you to eat here 8-).
RCS file: /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v
retrieving revision 1.1.1.7
diff -c -r1.1.1.7 parsesolaris.c
*** parse/parsesolaris.c:1.1.1.7 1994/02/12 09:53:42
--- parse/parsesolaris.c 1994/02/15 22:20:51
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
*
! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
*
! * parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
***************
*** 19,25 ****
*/
#ifndef lint
! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
#endif
/*
--- 19,25 ----
*/
#ifndef lint
! static char rcsid[] = "parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp";
#endif
/*
***************
*** 65,71 ****
{
"parse", /* module name */
&parseinfo, /* module information */
! D_NEW, /* not clean yet */
/* lock ptr */
};
--- 65,71 ----
{
"parse", /* module name */
&parseinfo, /* module information */
! D_NEW|D_MP|D_MTQPAIR, /* exclusive for q pair */
/* lock ptr */
};
***************
*** 139,145 ****
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.12";
char *s, *S, *t;
/*
--- 139,145 ----
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.15";
char *s, *S, *t;
/*
***************
*** 413,418 ****
--- 413,420 ----
parse->parse_ppsclockev.tv.tv_usec = 0;
parse->parse_ppsclockev.serial = 0;
+ qprocson(q);
+
parseprintf(DD_OPEN,("parse: OPEN - initializing io subsystem q=%x\n", q));
if (!parse_ioinit(&parse->parse_io))
***************
*** 420,425 ****
--- 422,429 ----
/*
* ok guys - beat it
*/
+ qprocsoff(q);
+
kmem_free((caddr_t)parse, sizeof(parsestream_t));
parsebusy--;
***************
*** 441,447 ****
*/
if (!notice)
{
! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", modlstrmod.strmod_linkinfo);
notice = 1;
}
--- 445,451 ----
*/
if (!notice)
{
! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", modlstrmod.strmod_linkinfo);
notice = 1;
}
***************
*** 449,455 ****
--- 453,464 ----
}
else
{
+ qprocsoff(q);
+
+ kmem_free((caddr_t)parse, sizeof(parsestream_t));
+
parsebusy--;
+
return EIO;
}
}
***************
*** 462,467 ****
--- 471,478 ----
parseprintf(DD_CLOSE,("parse: CLOSE\n"));
+ qprocsoff(q);
+
s = splhigh();
if (parse->parse_dqueue)
***************
*** 1178,1184 ****
/*
* History:
*
! * parsesolaris.c,v
* Revision 3.12 1994/02/02 17:45:35 kardel
* rcs ids fixed
*
--- 1189,1204 ----
/*
* History:
*
! * parsesolaris.c,v
! * Revision 3.15 1994/02/15 22:20:51 kardel
! * rcsid fixed
! *
! * Revision 3.14 1994/02/15 22:06:04 kardel
! * added qprocsx & flags for MT capability
! *
! * Revision 3.13 1994/02/13 19:16:47 kardel
! * updated verbose Copyright message
! *
* Revision 3.12 1994/02/02 17:45:35 kardel
* rcs ids fixed
*
RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v
retrieving revision 1.1.1.8
diff -c -r1.1.1.8 parsestreams.c
*** parse/parsestreams.c:1.1.1.8 1994/02/12 09:53:45
--- parse/parsestreams.c 1994/02/15 22:39:50
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
*
! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
*
! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
***************
*** 527,533 ****
*/
if (!notice)
{
! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", parsesync_vd.Drv_name);
notice = 1;
}
--- 527,533 ----
*/
if (!notice)
{
! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", parsesync_vd.Drv_name);
notice = 1;
}
***************
*** 535,540 ****
--- 535,542 ----
}
else
{
+ kmem_free((caddr_t)parse, sizeof(parsestream_t));
+
#ifdef VDDRV
parsebusy--;
#endif
***************
*** 1257,1263 ****
/*
* History:
*
! * parsestreams.c,v
* Revision 3.14 1994/02/02 17:45:38 kardel
* rcs ids fixed
*
--- 1259,1271 ----
/*
* History:
*
! * parsestreams.c,v
! * Revision 3.16 1994/02/15 22:39:50 kardel
! * memory leak on open failure closed
! *
! * Revision 3.15 1994/02/13 19:16:50 kardel
! * updated verbose Copyright message
! *
* Revision 3.14 1994/02/02 17:45:38 kardel
* rcs ids fixed
*
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,50 @@

Received: from louie.udel.edu by huey.udel.edu id aa00480; 16 Feb 94 12:17 EST
Received: from quack.kfu.com by louie.udel.edu id aa24950; 16 Feb 94 12:12 EST
Received: by quack.kfu.com id AA03532
(5.65c8/IDA-1.4.4 for mills@udel.edu); Wed, 16 Feb 1994 09:12:04 -0800
Date: Wed, 16 Feb 1994 09:12:04 -0800
From: Nick Sayer <nsayer@quack.kfu.com>
Message-Id: <199402161712.AA03532@quack.kfu.com>
To: mills@udel.edu
Subject: CHU debug patch
I don't know what you think about this, but I thought I'd pass it
along. I'm sorry I don't have a proper 'patch' format patch, but
it should be aparent from the context where this goes in refclock_chu.c:
return;
}
/*
* Get the clock this applies to and a pointer to the data
*/
chu = (struct chuunit *)rbufp->recv_srcclock;
chuc = (struct chucode *)&rbufp->recv_space;
chu->responses++;
chu->lastupdate = current_time;
/*
* Just for fun, we can debug the whole frame if
* we want.
*/
#ifndef NO_CHU_DEBUG
syslog(LOG_DEBUG,"CHU %s packet:",(chuc->chutype==CHU_YEAR)?
"year":"time");
for (i=0;i<NCHUCHARS;i++)
{
char c[64];
sprintf(c,"%c%c %s",hexstring[chuc->codechars[i]&0xf],
hexstring[chuc->codechars[i]>>4],
ctime(&(chuc->codetimes[i].tv_sec)));
c[strlen(c)-1]=0; /* ctime() adds a damn \n */
syslog(LOG_DEBUG,"%s .%06d",c,chuc->codetimes[i].tv_usec);
}
#endif
/*
* At this point we're assured that both halves of the
* data match because of what the kernel has done.


View File

@ -0,0 +1,99 @@

Received: from louie.udel.edu by huey.udel.edu id aa00679; 16 Feb 94 13:00 EST
Received: from spatula.csv.warwick.ac.uk by louie.udel.edu id aa26092;
16 Feb 94 12:48 EST
Date: Wed, 16 Feb 1994 17:47:50 GMT
From: Ian Dickinson <cudep@csv.warwick.ac.uk>
Message-Id: <7051.199402161747@spatula.csv.warwick.ac.uk>
Received: from localhost by spatula.csv.warwick.ac.uk
id RAA07051; Wed, 16 Feb 1994 17:47:50 GMT
In-Reply-To: Mills@udel.edu
"Re: xntp sunos5 config" (Feb 16, 10:50am)
X-Mailer: Mail User's Shell (7.2.4 2/2/92)
To: Mills@udel.edu
Subject: Re: xntp sunos5 config
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
On Feb 16, 10:50am, Mills@udel.edu wrote:
} Subject: Re: xntp sunos5 config
BTW, 3.3f seems to work fine on an SC2000 sunos5.3 (including the patch below)
> Your message did not say in which file sunos5.1 or sunos5.2 or both
> you wanted the -DLOCK_PROCESS. I'll wait for your patches.
I've never done any heavy work on a sunos5.1 machine, so I can't remember if
plock() exists there. I *think* sunso5.2 will work with it.
Perhaps it's time to create a sunos5.3 file which has -DLOCK_PROCESS and is
otherwise identical to sunos5.2, though this is getting silly for supposedly
a single SVR4-based operating system.
As far as I'm aware, the choice between plock() and mlockall() can be done
with feature testing and doesn't need a seperate #define.
This patch applies to 3.3b and 3.3f (with line fuzz).
I'm certainly not sure this is the best way to do this, but it does work here.
Perhaps it's worth asking around how widely this works in sunos5.x
*** 1.1 1994/02/01 17:16:13
--- xntpd/ntpd.c 1994/02/16 16:32:47
***************
*** 28,35 ****
--- 28,39 ----
#include "ntp_stdlib.h"
#ifdef LOCK_PROCESS
+ #ifdef SYS_SOLARIS
+ #include <sys/mman.h>
+ #else
#include <sys/lock.h>
#endif
+ #endif
/*
* Signals we catch for debugging. If not debugging we ignore them.
***************
*** 218,229 ****
if (rtprio(0, 120) < 0)
syslog(LOG_ERR, "rtprio() error: %m");
#else
! #if defined(PROCLOCK) && defined(LOCK_PROCESS)
/*
* lock the process into memory
*/
if (plock(PROCLOCK) < 0)
syslog(LOG_ERR, "plock(): %m");
#endif
#if defined(NTPD_PRIO) && NTPD_PRIO != 0
/*
--- 222,243 ----
if (rtprio(0, 120) < 0)
syslog(LOG_ERR, "rtprio() error: %m");
#else
! #if defined(LOCK_PROCESS)
! #if defined(MCL_CURRENT) && defined(MCL_FUTURE)
! /*
! * lock the process into memory
! */
! if (mlockall(MCL_CURRENT|MCL_FUTURE) < 0)
! syslog(LOG_ERR, "mlockall(): %m");
! #else
! #if defined(PROCLOCK)
/*
* lock the process into memory
*/
if (plock(PROCLOCK) < 0)
syslog(LOG_ERR, "plock(): %m");
+ #endif
+ #endif
#endif
#if defined(NTPD_PRIO) && NTPD_PRIO != 0
/*
Cheers,
--
Ian


View File

@ -0,0 +1,599 @@

Received: from louie.udel.edu by huey.udel.edu id aa08047; 17 Feb 94 15:26 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa17403;
17 Feb 94 15:15 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA04056 (5.65c-6/7.3v-FAU); Thu, 17 Feb 1994 21:14:43 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA29721 (5.65c-6/7.3m-FAU); Thu, 17 Feb 1994 21:14:39 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402172014.AA29721@faui43.informatik.uni-erlangen.de>
Subject: Re: Beep, beep, beep
To: Mills@udel.edu
Date: Thu, 17 Feb 94 21:14:33 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de,
Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
In-Reply-To: <9402171155.aa07032@huey.udel.edu>; from "Mills@udel.edu" at Feb 17, 94 11:55 am
X-Mailer: ELM [version 2.3 PL11]
> Guys,
> Trouble with HAVE_BSD_TTYS on a VAX
> ### creating NTP library
> cc -O -DDES -DXNTP_LITTLE_ENDIAN -DSYS_VAX -DDEBUG -DREFCLOCK -I../include -c atoint.c
> "../include/ntp_machine.h", line 570: syntax error
Yupp, nit TTY define set.
> "atoint.c", line 12: redeclaration of ival
> "atoint.c", line 13: syntax error
> ...
Well, I guess the trouble is more that none of the tty defines was
defined. For the sake of completeness i have added the tty defines to
(hopefully) all machine/* files. Some configurations were unknown to
me so I assumed HAVE_BSD_TTYS. Would be nice if someone could run
the whole suite 8-).
I have put the tty defines into the machine files so that the
refconf scripts can pick up the define without having to run the
preprocessor to dig out the configuration.
Hope this works.
diff -c include/ntp_machine.h:1.1.1.13 include/ntp_machine.h:1.30
*** include/ntp_machine.h:1.1.1.13 Thu Feb 17 20:17:59 1994
--- include/ntp_machine.h Thu Feb 17 20:17:59 1994
***************
*** 44,54 ****
WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
NTP_POSIX_SOURCE was set but can't. The
posix tty driver is too restrictive on most systems.
! It defined if you define STREAMS.
HAVE_SYSV_TTYS - Use SYSV termio.h
HAVE_BSD_TTYS - Use BSD stty.h
- HAVE_TERMIOS - Use POSIX termios.h
THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
kernel mucking.
--- 44,59 ----
WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
NTP_POSIX_SOURCE was set but can't. The
posix tty driver is too restrictive on most systems.
! It is defined if you define STREAMS.
+ We do not put these defines in the ntp_machine.h as some systems
+ offer multiple interfaces and refclock configuration likes to
+ peek into the configuration defines for tty model restrictions.
+ Thus all tty definitions should be in the files in the machines directory.
+
+ HAVE_TERMIOS - Use POSIX termios.h
HAVE_SYSV_TTYS - Use SYSV termio.h
HAVE_BSD_TTYS - Use BSD stty.h
THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
kernel mucking.
***************
*** 296,302 ****
#define FORCE_NTPDATE_STEP
#define RETSIGTYPE void
#define HAVE_ATT_SETPGRP
- #define HAVE_BSD_TTYS
#define LOG_NTP LOG_LOCAL1
#define HAVE_SIGNALED_IO
#define NTP_NEED_BOPS
--- 301,306 ----
***************
*** 352,359 ****
#ifndef STR_SYSTEM
#define STR_SYSTEM "UNIX/BSDI"
#endif
- #define HAVE_BSD_TTYS
- #define HAVE_TERMIOS
#endif
/*
--- 356,361 ----
***************
*** 441,449 ****
*/
#if defined(SYS_PTX)
#define NO_SIGNED_CHAR_DECL
- #ifndef HAVE_SYSV_TTYS
- #define HAVE_SYSV_TTYS
- #endif
#define STREAMS_TLI
#define HAVE_ATT_SETPGRP
#define HAVE_SIGNALED_IO
--- 443,448 ----
***************
*** 528,534 ****
#define HAVE_BSD_NICE
#define NOKMEM
#define HAVE_SIGNALED_IO
- #define HAVE_BSD_TTYS
#define NTP_SYSCALLS_STD
#define USE_PROTOTYPES
#define UDP_WILDCARD_DELIVERY
--- 527,532 ----
***************
*** 565,570 ****
--- 563,582 ----
&& !defined(HAVE_NO_NICE)
ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
#endif
+
+ /*
+ * use only one tty model - no use in initialising
+ * a tty in three ways
+ * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS
+ */
+ #ifdef HAVE_TERMIOS
+ #undef HAVE_BSD_TTYS
+ #undef HAVE_SYSV_TTYS
+ #endif
+
+ #ifdef HAVE_SYSV_TTYS
+ #undef HAVE_BSD_TTYS
+ #endif
#if !defined(HAVE_SYSV_TTYS) \
&& !defined(HAVE_BSD_TTYS) \
diff -c machines/aux2:1.1.1.2 machines/aux2:1.4
*** machines/aux2:1.1.1.2 Thu Feb 17 20:19:50 1994
--- machines/aux2 Thu Feb 17 20:19:50 1994
***************
*** 1,6 ****
RANLIB= true # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_AUX2
AUTHDEFS= -DDES -DMD5 -DFASTMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= true # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5 -DFASTMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/aux3:1.1.1.2 machines/aux3:1.4
*** machines/aux3:1.1.1.2 Thu Feb 17 20:19:52 1994
--- machines/aux3 Thu Feb 17 20:19:52 1994
***************
*** 1,6 ****
RANLIB= true # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_AUX3
AUTHDEFS= -DDES -DMD5 -DFASTMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= true # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5 -DFASTMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/bsdi:1.1.1.4 machines/bsdi:1.6
*** machines/bsdi:1.1.1.4 Thu Feb 17 20:19:53 1994
--- machines/bsdi Thu Feb 17 20:19:53 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_BSDI
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lkvm
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_BSDI -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lkvm
diff -c machines/convexos10:1.1.1.2 machines/convexos10:1.3
*** machines/convexos10:1.1.1.2 Thu Feb 17 20:19:54 1994
--- machines/convexos10 Thu Feb 17 20:19:54 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_CONVEXOS10
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
RESLIB=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
RESLIB=
diff -c machines/convexos9:1.1.1.2 machines/convexos9:1.3
*** machines/convexos9:1.1.1.2 Thu Feb 17 20:19:55 1994
--- machines/convexos9 Thu Feb 17 20:19:56 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_CONVEXOS9
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
RESLIB=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
RESLIB=
diff -c machines/decosf1:1.1.1.2 machines/decosf1:1.4
*** machines/decosf1:1.1.1.2 Thu Feb 17 20:19:57 1994
--- machines/decosf1 Thu Feb 17 20:19:57 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSTREAM -DSYS_DECOSF1
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/dell.svr4:1.1.1.1 machines/dell.svr4:1.2
*** machines/dell.svr4:1.1.1.1 Thu Feb 17 20:19:58 1994
--- machines/dell.svr4 Thu Feb 17 20:19:58 1994
***************
*** 1,7 ****
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SVR4
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,7 ----
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SVR4 -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/domainos:1.1.1.1 machines/domainos:1.2
*** machines/domainos:1.1.1.1 Thu Feb 17 20:19:59 1994
--- machines/domainos Thu Feb 17 20:19:59 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/i386:1.1.1.2 machines/i386:1.3
*** machines/i386:1.1.1.2 Thu Feb 17 20:20:04 1994
--- machines/i386 Thu Feb 17 20:20:05 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_I386
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_I386 -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/i386svr4:1.1.1.3 machines/i386svr4:1.4
*** machines/i386svr4:1.1.1.3 Thu Feb 17 20:20:05 1994
--- machines/i386svr4 Thu Feb 17 20:20:05 1994
***************
*** 1,7 ****
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,7 ----
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/mips:1.1.1.2 machines/mips:1.3
*** machines/mips:1.1.1.2 Thu Feb 17 20:20:10 1994
--- machines/mips Thu Feb 17 20:20:10 1994
***************
*** 1,7 ****
#RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
DEFS=
! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lmld
RESLIB=
--- 1,7 ----
#RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
DEFS=
! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lmld
RESLIB=
diff -c machines/next:1.1.1.1 machines/next:1.2
*** machines/next:1.1.1.1 Thu Feb 17 20:20:12 1994
--- machines/next Thu Feb 17 20:20:13 1994
***************
*** 1,6 ****
RANLIB= ranlib -c -s
DEFS= -DSYS_NEXT
! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
--- 1,6 ----
RANLIB= ranlib -c -s
DEFS= -DSYS_NEXT
! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
diff -c machines/sequent:1.1.1.3 machines/sequent:1.4
*** machines/sequent:1.1.1.3 Thu Feb 17 20:20:14 1994
--- machines/sequent Thu Feb 17 20:20:14 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/sinix-m:1.1.1.2 machines/sinix-m:1.5
*** machines/sinix-m:1.1.1.2 Thu Feb 17 20:20:15 1994
--- machines/sinix-m Thu Feb 17 20:20:15 1994
***************
*** 1,6 ****
RANLIB= :
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_SINIXM
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
--- 1,6 ----
RANLIB= :
DEFS_LOCAL=-DREFCLOCK
! DEFS= -DSYS_SINIXM -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
diff -c machines/sony:1.1.1.2 machines/sony:1.3
*** machines/sony:1.1.1.2 Thu Feb 17 20:20:16 1994
--- machines/sony Thu Feb 17 20:20:16 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SONY
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lmld
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_SONY -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS= -lmld
diff -c machines/svr4:1.1.1.4 machines/svr4:1.4
*** machines/svr4:1.1.1.4 Thu Feb 17 20:20:20 1994
--- machines/svr4 Thu Feb 17 20:20:20 1994
***************
*** 1,6 ****
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
AUTHDEFS= -DDES -DMD5
CLOCKDEFS=
DAEMONLIBS= -lnet -lnsl -lsocket -lelf
--- 1,6 ----
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
AUTHDEFS= -DDES -DMD5
CLOCKDEFS=
DAEMONLIBS= -lnet -lnsl -lsocket -lelf
diff -c machines/vax:1.1.1.2 machines/vax:1.3
*** machines/vax:1.1.1.2 Thu Feb 17 20:20:23 1994
--- machines/vax Thu Feb 17 20:20:23 1994
***************
*** 1,6 ****
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_VAX
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
--- 1,6 ----
RANLIB= ranlib
DEFS_LOCAL= -DREFCLOCK
! DEFS= -DSYS_VAX -DHAVE_BSD_TTYS
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v
retrieving revision 1.1.1.2
retrieving revision 3.3
diff -c -r1.1.1.2 -r3.3
*** parse/README.new_clocks:1.1.1.2 1994/02/12 09:53:48
--- parse/README.new_clocks 1994/02/17 20:09:58
***************
*** 1,7 ****
! Here is an attempt to scetch out what you need to do in order to
add another clock to the parse driver:
! Prerequsites:
- Does the system you want the clock connect to have
termio.h or termios.h ? (You need that for the parse driver)
--- 1,7 ----
! Here is an attempt to sketch out what you need to do in order to
add another clock to the parse driver:
! Prerequisites:
- Does the system you want the clock connect to have
termio.h or termios.h ? (You need that for the parse driver)
***************
*** 32,38 ****
PARSEB_ANNOUNCE switch time zone warning (informational only)
PARSEB_POWERUP no synchronisation - clock confused (must set then)
PARSEB_NOSYNC timecode currently not confirmed (must set then)
! usually on reception error when the is still a
chance the the generated time is still ok.
PARSEB_DST DST in effect (informational only)
--- 32,38 ----
PARSEB_ANNOUNCE switch time zone warning (informational only)
PARSEB_POWERUP no synchronisation - clock confused (must set then)
PARSEB_NOSYNC timecode currently not confirmed (must set then)
! usually on reception error when there is still a
chance the the generated time is still ok.
PARSEB_DST DST in effect (informational only)
***************
*** 53,59 ****
them for examples. The basic structure is:
struct clockformat <yourclock>_format = {
! lots of field for you to fill out (see below)
};
static cvt_<yourclock>()
--- 53,59 ----
them for examples. The basic structure is:
struct clockformat <yourclock>_format = {
! lots of fields for you to fill out (see below)
};
static cvt_<yourclock>()
***************
*** 122,132 ****
file with the time code conversion. See the examples and pick a clock
closest to yours and tweak the code to match your clock.
! In order to make your clk_*.c file usable a referenc to the clockformat
structure must be put into parse_conf.c.
-
-
TTY setup and initialisation/configuration will be done in
xntpd/refclock_parse.c
--- 122,130 ----
file with the time code conversion. See the examples and pick a clock
closest to yours and tweak the code to match your clock.
! In order to make your clk_*.c file usable a reference to the clockformat
structure must be put into parse_conf.c.
TTY setup and initialisation/configuration will be done in
xntpd/refclock_parse.c
***************
*** 135,141 ****
termio*.h c_cflag macros.
- in xntpd/refclock_parse.c fill out a new the struct clockinfo element
! (allocates a new "IP" address - see comments)
(see all the other clocks for example)
struct clockinfo
{
--- 133,139 ----
termio*.h c_cflag macros.
- in xntpd/refclock_parse.c fill out a new the struct clockinfo element
! (that allocates a new "IP" address - see comments)
(see all the other clocks for example)
struct clockinfo
{
***************
*** 188,199 ****
Well, this is very sketchy, i know. But I hope it helps a little bit.
! The best way is to look which clock comes closet to your and tweak that
code.
! Two sorts of clocks are used with parse. Clocks that automatically sent
! thier time code (once a second) do not nee entries in the poll routines because
! they sent the data all the time. The second sort are the clocks that need a
! command sent to then in order to reply with a time code (like the Trimble
clock).
For questions: kardel@informatik.uni-erlangen.de. Please include
--- 186,197 ----
Well, this is very sketchy, i know. But I hope it helps a little bit.
! The best way is to look which clock comes closest to your and tweak that
code.
! Two sorts of clocks are used with parse. Clocks that automatically send
! their time code (once a second) do not need entries in the poll routines because
! they send the data all the time. The second sort are the clocks that need a
! command sent to them in order to reply with a time code (like the Trimble
clock).
For questions: kardel@informatik.uni-erlangen.de. Please include
RCS file: /src/NTP/REPOSITORY/v3/parse/README.parse_clocks,v
retrieving revision 1.1.1.1
retrieving revision 3.2
diff -c -r1.1.1.1 -r3.2
*** parse/README.parse_clocks:1.1.1.1 1994/01/01 00:00:00
--- parse/README.parse_clocks 1994/02/17 20:10:02
***************
*** 1,4 ****
! The parse driver currently supports several clock with different
query mechanisms. In order for you to find a sample that might be
similar to a clock you might want to integrate into parse i'll sum
up the major features of the clocks (this information is distributed
--- 1,4 ----
! The parse driver currently supports several clocks with different
query mechanisms. In order for you to find a sample that might be
similar to a clock you might want to integrate into parse i'll sum
up the major features of the clocks (this information is distributed
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,129 @@

Received: from louie.udel.edu by huey.udel.edu id aa12171; 26 Jan 94 17:04 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa15368;
26 Jan 94 17:00 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA17953 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 23:00:40 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA29710 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 23:00:37 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199401262200.AA29710@faui43.informatik.uni-erlangen.de>
Subject: Re: Solaribum
To: Mills@udel.edu
Date: Wed, 26 Jan 94 23:00:31 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
Paul_Vixie@corpmis.sjc.hw.sony.com
In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
X-Mailer: ELM [version 2.3 PL11]
Sorry, guys - i tripped over a backward compatibility
variable. Thus the second patch:
diff -c include/ntp_control.h:3.6 include/ntp_control.h:3.7
*** include/ntp_control.h:3.6 Wed Jan 26 22:57:52 1994
--- include/ntp_control.h Wed Jan 26 22:57:52 1994
***************
*** 204,210 ****
#define CP_SENT 32
#define CP_FILTERROR 33
#define CP_FLASH 34
! #define CP_VARLIST 35
#define CP_MAXCODE CP_VARLIST
--- 204,211 ----
#define CP_SENT 32
#define CP_FILTERROR 33
#define CP_FLASH 34
! #define CP_DISP 35
! #define CP_VARLIST 36
#define CP_MAXCODE CP_VARLIST
diff -c xntpd/ntp_control.c:3.21 xntpd/ntp_control.c:3.22
*** xntpd/ntp_control.c:3.21 Wed Jan 26 22:58:30 1994
--- xntpd/ntp_control.c Wed Jan 26 22:58:31 1994
***************
*** 175,181 ****
{ CP_SENT, RO, "sent" }, /* 32 */
{ CP_FILTERROR, RO, "filterror" }, /* 33 */
{ CP_FLASH, RO, "flash" }, /* 34 */
! { CP_VARLIST, RO, "peer_var_list" }, /* 35 */
{ 0, EOV, "" }
};
--- 175,182 ----
{ CP_SENT, RO, "sent" }, /* 32 */
{ CP_FILTERROR, RO, "filterror" }, /* 33 */
{ CP_FLASH, RO, "flash" }, /* 34 */
! { CP_DISP, PADDING,"" }, /* 35 */
! { CP_VARLIST, RO, "peer_var_list" }, /* 36 */
{ 0, EOV, "" }
};
***************
*** 1298,1303 ****
--- 1299,1307 ----
for (k = sys_var; !(k->flags &EOV); k++)
{
+ if (k->flags & PADDING)
+ continue;
+
i = strlen(k->text);
if (s+i+1 >= be)
break;
***************
*** 1309,1314 ****
--- 1313,1321 ----
for (k = ext_sys_var; k && !(k->flags &EOV); k++)
{
+ if (k->flags & PADDING)
+ continue;
+
ss = k->text;
if (!ss)
continue;
***************
*** 1484,1489 ****
--- 1491,1499 ----
for (k = peer_var; !(k->flags &EOV); k++)
{
+ if (k->flags & PADDING)
+ continue;
+
i = strlen(k->text);
if (s+i+1 >= be)
break;
***************
*** 1594,1599 ****
--- 1604,1612 ----
for (k = clock_var; !(k->flags &EOV); k++)
{
+ if (k->flags & PADDING)
+ continue;
+
i = strlen(k->text);
if (s+i+1 >= be)
break;
***************
*** 1605,1610 ****
--- 1618,1626 ----
for (k = clock->kv_list; k && !(k->flags &EOV); k++)
{
+ if (k->flags & PADDING)
+ continue;
+
ss = k->text;
if (!ss)
continue;
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,54 @@

Received: from louie.udel.edu by huey.udel.edu id aa25363; 23 Feb 94 18:50 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa28210;
23 Feb 94 18:44 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA07903 (5.65c-6/7.3v-FAU); Thu, 24 Feb 1994 00:44:18 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA19013 (5.65c-6/7.3m-FAU); Thu, 24 Feb 1994 00:44:17 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402232344.AA19013@faui43.informatik.uni-erlangen.de>
Subject: TRAK clock
To: mills@udel.edu
Date: Thu, 24 Feb 94 0:44:12 MET
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave - some obvious things about the TRAK clock:
- please removed the 4 ^A at the end of the
xntpd/reflock_trak.c file (email leftovers).
- add following refclocks/rclk.TRAK file
#!/bin/sh -
CMD="$1"
shift;
. refclocks/setup
case "$CMD" in
info)
echo " TRAK - TRAK 8810 GPS station clock"
;;
check)
if check "$RCONFIG" '$0 ~ /TRAK/'; then
echo "TRAK - TRAK 8810 GPS station clock"
fi
;;
config)
if check "$REFCONF" '$0 ~ /TRAK/' ||
( [ ! "$REFCONF" ] && query "Include TRAK 8810 GPS station clock (TRAK)" n); then
if check "$PPSFEATURES" '$0 ~ /CD/' &&
[ "$PPSOK" -eq 1 ] &&
(check "$REFCONF" '$0 ~ /TRAKPPS/' ||
( [ ! "$REFCONF" ] && query " Use TRAK for PPS" n)); then
echo "-DTRAKPPS" >> $RCONFIG
else
echo "-DTRAK" >> $RCONFIG
fi
fi
;;
esac
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,296 @@

Received: from louie.udel.edu by huey.udel.edu id aa02110; 24 Feb 94 18:54 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa13897;
24 Feb 94 18:53 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA27796 (5.65c-6/7.3v-FAU); Fri, 25 Feb 1994 00:53:32 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA16114 (5.65c-6/7.3m-FAU); Fri, 25 Feb 1994 00:53:31 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199402242353.AA16114@faui43.informatik.uni-erlangen.de>
Subject: patches (parse pps/pll control)
To: mills@udel.edu
Date: Fri, 25 Feb 94 0:52:59 MET
X-Mailer: ELM [version 2.3 PL11]
Hi, here are some patches.
pps pll control is nor supported by parse.
pps output variable are readable via mode 6 messages.
diff -c v3/parse/parsestreams.c:1.1.1.10 v3/parse/parsestreams.c:3.19
*** v3/parse/parsestreams.c:1.1.1.10 Fri Feb 25 00:44:41 1994
--- v3/parse/parsestreams.c Fri Feb 25 00:44:41 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
*
! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
*
! * parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
***************
*** 16,22 ****
*/
#ifndef lint
! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp";
#endif
#include "sys/types.h"
--- 16,22 ----
*/
#ifndef lint
! static char rcsid[] = "parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp";
#endif
#include "sys/types.h"
***************
*** 195,201 ****
}
else
{
! static char revision[] = "3.17";
char *s, *S, *t;
strncpy(ifm->f_name, mname, FMNAMESZ);
--- 195,201 ----
}
else
{
! static char revision[] = "3.19";
char *s, *S, *t;
strncpy(ifm->f_name, mname, FMNAMESZ);
***************
*** 1076,1081 ****
--- 1076,1086 ----
#define MAXDEPTH 50 /* maximum allowed stream crawl */
+ #ifdef PPS_SYNC
+ extern hardpps();
+ extern struct timeval time;
+ #endif
+
/*
* take external status interrupt (only CD interests us)
*/
***************
*** 1087,1101 ****
register queue_t *q;
register unsigned char zsstatus;
register int loopcheck;
- register unsigned char cdstate;
register char *dname;
/*
* pick up current state
*/
zsstatus = zsaddr->zscc_control;
! if (za->za_rr0 ^ (cdstate = zsstatus & ZSRR0_CD))
{
timestamp_t cdevent;
register int status;
--- 1092,1109 ----
register queue_t *q;
register unsigned char zsstatus;
register int loopcheck;
register char *dname;
+ #ifdef PPS_SYNC
+ register int s;
+ register long usec;
+ #endif
/*
* pick up current state
*/
zsstatus = zsaddr->zscc_control;
! if ((za->za_rr0 ^ zsstatus) & (ZSRR0_CD|ZSRR0_SYNC))
{
timestamp_t cdevent;
register int status;
***************
*** 1103,1129 ****
/*
* CONDITIONAL external measurement support
*/
! SET_LED(cdstate); /*
* inconsistent with upper SET_LED, but this
* is for oscilloscope business anyway and we
* are just interested in edge delays in the
* lower us range
*/
!
/*
* time stamp
*/
uniqtime(&cdevent.tv);
!
! TIMEVAL_USADD(&cdevent.tv, xsdelay);
!
! q = za->za_ttycommon.t_readq;
/*
* logical state
*/
! status = cd_invert ? cdstate == 0 : cdstate != 0;
/*
* ok - now the hard part - find ourself
*/
--- 1111,1155 ----
/*
* CONDITIONAL external measurement support
*/
! SET_LED(zsstatus & (ZSRR0_CD|ZSRR0_SYNC)); /*
* inconsistent with upper SET_LED, but this
* is for oscilloscope business anyway and we
* are just interested in edge delays in the
* lower us range
*/
! #ifdef PPS_SYNC
! s = splclock();
! usec = time.tv_usec;
! #endif
/*
* time stamp
*/
uniqtime(&cdevent.tv);
!
! #ifdef PPS_SYNC
! splx(s);
! #endif
/*
* logical state
*/
! status = cd_invert ? (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) == 0 : (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) != 0;
+ #ifdef PPS_SYNC
+ if (status)
+ {
+ usec = cdevent.tv.tv_usec - usec;
+ if (usec < 0)
+ usec += 1000000;
+
+ hardpps(&cdevent.tv, usec);
+ }
+ #endif
+
+ TIMEVAL_USADD(&cdevent.tv, xsdelay);
+
+ q = za->za_ttycommon.t_readq;
+
/*
* ok - now the hard part - find ourself
*/
***************
*** 1179,1188 ****
/*
* only pretend that CD has been handled
*/
! za->za_rr0 = za->za_rr0 & ~ZSRR0_CD | zsstatus & ZSRR0_CD;
ZSDELAY(2);
! if (!((za->za_rr0 ^ zsstatus) & ~ZSRR0_CD))
{
/*
* all done - kill status indication and return
--- 1205,1214 ----
/*
* only pretend that CD has been handled
*/
! za->za_rr0 = za->za_rr0 & ~(ZSRR0_CD|ZSRR0_SYNC) | zsstatus & (ZSRR0_CD|ZSRR0_SYNC);
ZSDELAY(2);
! if (!((za->za_rr0 ^ zsstatus) & ~(ZSRR0_CD|ZSRR0_SYNC)))
{
/*
* all done - kill status indication and return
***************
*** 1260,1265 ****
--- 1286,1297 ----
* History:
*
* parsestreams.c,v
+ * Revision 3.19 1994/02/24 16:33:54 kardel
+ * CD events can also be posted on sync flag
+ *
+ * Revision 3.18 1994/02/24 14:12:58 kardel
+ * initial PPS_SYNC support version
+ *
* Revision 3.17 1994/02/20 15:18:02 kardel
* rcs id cleanup
*
diff -c v3/xntpd/ntp_loopfilter.c:1.1.1.33 v3/xntpd/ntp_loopfilter.c:3.40
*** v3/xntpd/ntp_loopfilter.c:1.1.1.33 Fri Feb 25 00:46:20 1994
--- v3/xntpd/ntp_loopfilter.c Fri Feb 25 00:46:21 1994
***************
*** 522,529 ****
--- 522,545 ----
ntv.maxerror = sys_rootdispersion + sys_rootdelay / 2;
ntv.esterror = sys_rootdispersion;
ntv.time_constant = time_constant;
+ ntv.shift = 0;
(void)ntp_adjtime(&ntv);
drift_comp = ntv.frequency;
+ if (ntv.shift != 0) {
+ char buf[128];
+ (void) sprintf(buf, "pps_freq=%s", fptoa(ntv.ybar, 3));
+ set_sys_var(buf, strlen(buf)+1, RO|DEF);
+ (void) sprintf(buf, "pps_disp=%s", fptoa(ntv.disp, 3));
+ set_sys_var(buf, strlen(buf)+1, RO|DEF);
+ (void) sprintf(buf, "pps_interval=%ld",1 << ntv.shift);
+ set_sys_var(buf, strlen(buf)+1, RO);
+ (void) sprintf(buf, "pps_intervals=%ld", ntv.calcnt);
+ set_sys_var(buf, strlen(buf)+1, RO);
+ (void) sprintf(buf, "pps_jitterexceeded=%ld", ntv.jitcnt);
+ set_sys_var(buf, strlen(buf)+1, RO);
+ (void) sprintf(buf, "pps_dispersionexceeded=%ld", ntv.discnt);
+ set_sys_var(buf, strlen(buf)+1, RO);
+ }
#endif /* KERNEL_PLL */
} else {
if (offset < 0) {
***************
*** 725,730 ****
--- 741,748 ----
"loop_config: skew compensation %s too large",
fptoa(tmp, 5));
} else {
+ char var[40];
+
drift_comp = tmp;
#if defined(KERNEL_PLL)
***************
*** 751,756 ****
--- 769,778 ----
syslog(LOG_NOTICE,
"%susing kernel phase-lock loop",
(pll_control) ? "" : "Not ");
+ (void)sprintf(var, "kernel_pll=%s", pll_control ? "true" : "false");
+
+ set_sys_var(var, strlen(var)+1, RO);
+
#if DEBUG
if (debug)
printf("pll_control %d\n", pll_control);
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,80 @@

Received: from louie.udel.edu by huey.udel.edu id aa18634; 27 Feb 94 13:54 EST
Received: from rincewind.mech.virginia.edu by louie.udel.edu id aa11711;
27 Feb 94 13:53 EST
Received: from localhost (dmm0t@localhost) by rincewind.mech.virginia.edu (8.6.5/8.6.5) id NAA04646 for mills@udel.edu; Sun, 27 Feb 1994 13:53:35 -0500
From: David Meyer <dmm0t@rincewind.mech.virginia.edu>
Message-Id: <199402271853.NAA04646@rincewind.mech.virginia.edu>
Subject: patches to xntpd-3.3j for NeXT
To: mills@udel.edu
Date: Sun, 27 Feb 1994 13:53:34 -0500 (EST)
X-Mailer: ELM [version 2.4 PL23]
MIME-Version: 1.0
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Length: 2043
I have a couple of patches to make the 3.3j beta compile on a NeXT
running NS3.1.
The first patch just defines RETSIGTYPE. The second patch puts
HAVE_BSD_TTYS in DEFS rather than AUTHDEFS. The last patch just fixes
a type - using # rather than * in a comment block.
*** ../orig/include/ntp_machine.h Sun Feb 20 22:23:29 1994
--- include/ntp_machine.h Sun Feb 27 13:47:59 1994
***************
*** 313,318 ****
--- 313,319 ----
* Next
*/
#if defined(SYS_NEXT)
+ #define RETSIGTYPE void
#define DOSYNCTODR
#define HAVE_READKMEM
#define HAVE_BSD_NICE
*** ../orig/machines/next Sun Feb 20 22:23:36 1994
--- machines/next Sun Feb 27 13:47:15 1994
***************
*** 1,6 ****
RANLIB= ranlib -c -s
! DEFS= -DSYS_NEXT
! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
--- 1,6 ----
RANLIB= ranlib -c -s
! DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS
! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
CLOCKDEFS= -DLOCAL_CLOCK
DAEMONLIBS=
RESLIB=
*** ../orig/xntpd/refclock_irig.c Thu Jan 27 09:03:58 1994
--- xntpd/refclock_irig.c Sun Feb 27 13:36:30 1994
***************
*** 19,25 ****
* This driver supports the IRIG audio decoder. This clever gadget uses
* a modified BSD audio driver for the Sun SPARCstation which provides
* a timestamp, raw binary timecode, status byte and decoded ASCII
! # timecode. The data are represented in the structure:
*
* struct irig_time {
* struct timeval stamp; timestamp
--- 19,25 ----
* This driver supports the IRIG audio decoder. This clever gadget uses
* a modified BSD audio driver for the Sun SPARCstation which provides
* a timestamp, raw binary timecode, status byte and decoded ASCII
! * timecode. The data are represented in the structure:
*
* struct irig_time {
* struct timeval stamp; timestamp
--
David M. Meyer Mechanical & Aerospace Engineering
dmm0t@rincewind.mech.virginia.edu University of Virginia
NeXTmail ok


View File

@ -0,0 +1,474 @@

Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
4 Mar 94 6:34 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
Subject: Re: patches for 3.3l
To: Mills@udel.edu
Date: Fri, 4 Mar 94 12:33:49 MET
In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
X-Mailer: ELM [version 2.3 PL11]
> Frank,
> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
I didn't fiddle with lib/* this round. Thus it must be some problem
with the lib building process. Try make clean and again. I just checked
the patches with my 3.3l tree - fine. I do admit being a bit lax when
sending you the patches - you might have had to enter some paths
manually.
> ld: Undefined symbol
> _DESauth1crypt ....
Happens if ranlib isn't run.
> Obviously, it bombed.
Not likely being a problem from my patches - the lib/libntp.a got
inconsistent.
Usually this should not happen (ranlib need to be run on BSD systems).
Try building again from scratch (make clean all). If the problem
persists look (or send me) at the output of the lib building step
something is amiss there at your site.
I'll include the patches here again not properly prepared for a
plain "patch < patchfile".
Hi, Dave,
Here are some more patches:
- allow parse conversion routines to deliver UTC directly
- irix4 machine/cc from Amos
- rcs id fixing
- linux hints
- modload hints
- full integration of trak refclock driver (was only partially integrated)
diff -c /dev/null compilers/irix4.cc:1.1
*** /dev/null Thu Mar 3 10:29:50 1994
--- compilers/irix4.cc Thu Mar 3 10:29:50 1994
***************
*** 0 ****
--- 1,2 ----
+ COMPILER= cc -cckr
+ COPTS= -O2
diff -c hints/linux:1.1.1.3 hints/linux:1.5
*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
--- hints/linux Thu Mar 3 10:30:53 1994
***************
*** 1,5 ****
! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
------------
With this configuration, xntp should build an run right out of the box
--- 1,5 ----
! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
------------
With this configuration, xntp should build an run right out of the box
***************
*** 7,14 ****
versions of the kernel or libc, or have any other question not covered in the
READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
free to ask me (duwe@informatik.uni-erlangen.de)
-
- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
- binary compiled under the appropriate kernel. Get this one from
- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
- puplic relase after 4.5.20]
--- 7,9 ----
diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
--- include/parse.h Thu Mar 3 10:31:37 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
*
! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
*
! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
***************
*** 15,21 ****
#ifndef __PARSE_H__
#define __PARSE_H__
#if !(defined(lint) || defined(__GNUC__))
! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
#endif
#include "ntp_types.h"
--- 15,21 ----
#ifndef __PARSE_H__
#define __PARSE_H__
#if !(defined(lint) || defined(__GNUC__))
! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
#endif
#include "ntp_types.h"
***************
*** 301,306 ****
--- 301,307 ----
LONG second;
LONG usecond;
LONG utcoffset; /* in seconds */
+ time_t utctime; /* the actual time - alternative to date/time */
LONG flags; /* current clock status */
};
***************
*** 385,390 ****
--- 386,394 ----
* History:
*
* parse.h,v
+ * Revision 3.17 1994/03/03 09:27:20 kardel
+ * rcs ids fixed
+ *
* Revision 3.13 1994/01/25 19:04:21 kardel
* 94/01/23 reconcilation
*
diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
--- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
***************
*** 40,46 ****
rm -f parsestreams.o
parsestreams.o: parsestreams.o.$(KARCH)
! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c $(DEFS) -I../include parsestreams.c
--- 40,46 ----
rm -f parsestreams.o
parsestreams.o: parsestreams.o.$(KARCH)
! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c $(DEFS) -I../include parsestreams.c
diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
--- parse/README.new_clocks Thu Mar 3 10:35:53 1994
***************
*** 23,28 ****
--- 23,29 ----
LONG second;
LONG usecond;
LONG utcoffset; /* in seconds */
+ time_t utcoffset; /* true utc time instead of date/time */
LONG flags; /* current clock status */
};
***************
*** 52,57 ****
--- 53,65 ----
PARSEB_S_PPS supports PPS time stamping
PARSEB_S_POSITION supports position information (GPS)
+ If the utctime field is non zero this value will be take as
+ time code value. This allows for conversion routines that
+ already have the utc time value. The utctime field gives the seconds
+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
+ usec value. The fields for date and time (down to second resolution)
+ will be ignored.
+
Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
them for examples. The basic structure is:
diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
--- parse/parse.c Thu Mar 3 10:36:07 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
* Parser module for reference clock
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
* Parser module for reference clock
*
***************
*** 556,561 ****
--- 556,564 ----
register int i;
time_t t;
+ if (clock->utctime)
+ return clock->utctime; /* if the conversion routine gets it right away - why not */
+
if (clock->year < 100)
clock->year += 1900;
***************
*** 628,633 ****
--- 631,639 ----
t += clock->utcoffset; /* warp to UTC */
/* done */
+
+ clock->utctime = t; /* documentray only */
+
return t;
}
***************
*** 890,895 ****
--- 896,903 ----
if (parseio->parse_flags & PARSE_FIXED_FMT)
{
+ clock.utctime = 0;
+
switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
{
case CVT_FAIL:
***************
*** 941,946 ****
--- 949,956 ----
{
do
{
+ clock.utctime = 0;
+
switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
CVT_NONE) & CVT_MASK)
***************
*** 1148,1153 ****
--- 1158,1166 ----
* History:
*
* parse.c,v
+ * Revision 3.22 1994/02/25 12:34:49 kardel
+ * allow for converter generated utc times
+ *
* Revision 3.21 1994/02/02 17:45:30 kardel
* rcs ids fixed
*
diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
--- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
*
! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
*
* simple DCF77 100/200ms pulse test program (via 50Baud serial line)
*
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
*
! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
*
* simple DCF77 100/200ms pulse test program (via 50Baud serial line)
*
diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
--- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
***************
*** 34,40 ****
refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
refclock_parse.c refclock_as2201.c refclock_omega.c \
refclock_tpro.c refclock_leitch.c refclock_irig.c \
! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
--- 34,41 ----
refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
refclock_parse.c refclock_as2201.c refclock_omega.c \
refclock_tpro.c refclock_leitch.c refclock_irig.c \
! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
! ntp_intres.c ntp_filegen.c
OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
***************
*** 44,50 ****
refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
refclock_parse.o refclock_as2201.o refclock_omega.o \
refclock_tpro.o refclock_leitch.o refclock_irig.o \
! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
all: $(PROGRAM)
--- 45,52 ----
refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
refclock_parse.o refclock_as2201.o refclock_omega.o \
refclock_tpro.o refclock_leitch.o refclock_irig.o \
! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
! ntp_intres.o ntp_filegen.o
all: $(PROGRAM)
***************
*** 136,141 ****
--- 138,146 ----
refclock_msfees.o: refclock_msfees.c
$(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+
+ refclock_trak.o: refclock_trak.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
refclock_gpstm.o: refclock_gpstm.c
$(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
--- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
***************
*** 301,307 ****
static u_char clocktypes[] = {
CTL_SST_TS_NTP, /* REFCLK_NONE */
CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
CTL_SST_TS_HF, /* REFCLK_WWV_PST */
CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
--- 301,307 ----
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_HF, /* REFCLK_WWV_PST */
CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
--- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
***************
*** 113,119 ****
struct refclock *refclock_conf[] = {
&refclock_none, /* 0 REFCLK_NONE */
&refclock_local, /* 1 REFCLK_LOCAL */
! &refclock_none, /* 2 REFCLK_WWV_HEATH */
&refclock_pst, /* 3 REFCLK_WWV_PST */
&refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
&refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
--- 113,119 ----
struct refclock *refclock_conf[] = {
&refclock_none, /* 0 REFCLK_NONE */
&refclock_local, /* 1 REFCLK_LOCAL */
! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
&refclock_pst, /* 3 REFCLK_WWV_PST */
&refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
&refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
retrieving revision 1.1.1.12
diff -c -r1.1.1.12 xntpd/refclock_parse.c
*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
--- xntpd/refclock_parse.c 1994/03/03 09:49:54
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
*
! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
*
* generic reference clock driver for receivers
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
* generic reference clock driver for receivers
*
***************
*** 129,135 ****
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
#endif
/**===========================================================================
--- 129,135 ----
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
#endif
/**===========================================================================
***************
*** 1653,1659 ****
* done if no more characters are available
*/
FD_SET(fd, &fdmask);
! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
return;
}
}
--- 1653,1660 ----
* done if no more characters are available
*/
FD_SET(fd, &fdmask);
! if ((i == 0) &&
! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
return;
}
}
***************
*** 2823,2829 ****
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
--- 2824,2830 ----
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,474 @@

Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
4 Mar 94 6:34 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
Subject: Re: patches for 3.3l
To: Mills@udel.edu
Date: Fri, 4 Mar 94 12:33:49 MET
In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
X-Mailer: ELM [version 2.3 PL11]
> Frank,
> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
I didn't fiddle with lib/* this round. Thus it must be some problem
with the lib building process. Try make clean and again. I just checked
the patches with my 3.3l tree - fine. I do admit being a bit lax when
sending you the patches - you might have had to enter some paths
manually.
> ld: Undefined symbol
> _DESauth1crypt ....
Happens if ranlib isn't run.
> Obviously, it bombed.
Not likely being a problem from my patches - the lib/libntp.a got
inconsistent.
Usually this should not happen (ranlib need to be run on BSD systems).
Try building again from scratch (make clean all). If the problem
persists look (or send me) at the output of the lib building step
something is amiss there at your site.
I'll include the patches here again not properly prepared for a
plain "patch < patchfile".
Hi, Dave,
Here are some more patches:
- allow parse conversion routines to deliver UTC directly
- irix4 machine/cc from Amos
- rcs id fixing
- linux hints
- modload hints
- full integration of trak refclock driver (was only partially integrated)
diff -c /dev/null compilers/irix4.cc:1.1
*** /dev/null Thu Mar 3 10:29:50 1994
--- compilers/irix4.cc Thu Mar 3 10:29:50 1994
***************
*** 0 ****
--- 1,2 ----
+ COMPILER= cc -cckr
+ COPTS= -O2
diff -c hints/linux:1.1.1.3 hints/linux:1.5
*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
--- hints/linux Thu Mar 3 10:30:53 1994
***************
*** 1,5 ****
! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
------------
With this configuration, xntp should build an run right out of the box
--- 1,5 ----
! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
------------
With this configuration, xntp should build an run right out of the box
***************
*** 7,14 ****
versions of the kernel or libc, or have any other question not covered in the
READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
free to ask me (duwe@informatik.uni-erlangen.de)
-
- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
- binary compiled under the appropriate kernel. Get this one from
- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
- puplic relase after 4.5.20]
--- 7,9 ----
diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
--- include/parse.h Thu Mar 3 10:31:37 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
*
! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
*
! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
***************
*** 15,21 ****
#ifndef __PARSE_H__
#define __PARSE_H__
#if !(defined(lint) || defined(__GNUC__))
! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
#endif
#include "ntp_types.h"
--- 15,21 ----
#ifndef __PARSE_H__
#define __PARSE_H__
#if !(defined(lint) || defined(__GNUC__))
! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
#endif
#include "ntp_types.h"
***************
*** 301,306 ****
--- 301,307 ----
LONG second;
LONG usecond;
LONG utcoffset; /* in seconds */
+ time_t utctime; /* the actual time - alternative to date/time */
LONG flags; /* current clock status */
};
***************
*** 385,390 ****
--- 386,394 ----
* History:
*
* parse.h,v
+ * Revision 3.17 1994/03/03 09:27:20 kardel
+ * rcs ids fixed
+ *
* Revision 3.13 1994/01/25 19:04:21 kardel
* 94/01/23 reconcilation
*
diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
--- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
***************
*** 40,46 ****
rm -f parsestreams.o
parsestreams.o: parsestreams.o.$(KARCH)
! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c $(DEFS) -I../include parsestreams.c
--- 40,46 ----
rm -f parsestreams.o
parsestreams.o: parsestreams.o.$(KARCH)
! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c $(DEFS) -I../include parsestreams.c
diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
--- parse/README.new_clocks Thu Mar 3 10:35:53 1994
***************
*** 23,28 ****
--- 23,29 ----
LONG second;
LONG usecond;
LONG utcoffset; /* in seconds */
+ time_t utcoffset; /* true utc time instead of date/time */
LONG flags; /* current clock status */
};
***************
*** 52,57 ****
--- 53,65 ----
PARSEB_S_PPS supports PPS time stamping
PARSEB_S_POSITION supports position information (GPS)
+ If the utctime field is non zero this value will be take as
+ time code value. This allows for conversion routines that
+ already have the utc time value. The utctime field gives the seconds
+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
+ usec value. The fields for date and time (down to second resolution)
+ will be ignored.
+
Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
them for examples. The basic structure is:
diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
--- parse/parse.c Thu Mar 3 10:36:07 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
*
* Parser module for reference clock
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
* Parser module for reference clock
*
***************
*** 556,561 ****
--- 556,564 ----
register int i;
time_t t;
+ if (clock->utctime)
+ return clock->utctime; /* if the conversion routine gets it right away - why not */
+
if (clock->year < 100)
clock->year += 1900;
***************
*** 628,633 ****
--- 631,639 ----
t += clock->utcoffset; /* warp to UTC */
/* done */
+
+ clock->utctime = t; /* documentray only */
+
return t;
}
***************
*** 890,895 ****
--- 896,903 ----
if (parseio->parse_flags & PARSE_FIXED_FMT)
{
+ clock.utctime = 0;
+
switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
{
case CVT_FAIL:
***************
*** 941,946 ****
--- 949,956 ----
{
do
{
+ clock.utctime = 0;
+
switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
CVT_NONE) & CVT_MASK)
***************
*** 1148,1153 ****
--- 1158,1166 ----
* History:
*
* parse.c,v
+ * Revision 3.22 1994/02/25 12:34:49 kardel
+ * allow for converter generated utc times
+ *
* Revision 3.21 1994/02/02 17:45:30 kardel
* rcs ids fixed
*
diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
--- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
*
! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
*
* simple DCF77 100/200ms pulse test program (via 50Baud serial line)
*
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
*
! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
*
* simple DCF77 100/200ms pulse test program (via 50Baud serial line)
*
diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
--- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
***************
*** 34,40 ****
refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
refclock_parse.c refclock_as2201.c refclock_omega.c \
refclock_tpro.c refclock_leitch.c refclock_irig.c \
! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
--- 34,41 ----
refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
refclock_parse.c refclock_as2201.c refclock_omega.c \
refclock_tpro.c refclock_leitch.c refclock_irig.c \
! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
! ntp_intres.c ntp_filegen.c
OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
***************
*** 44,50 ****
refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
refclock_parse.o refclock_as2201.o refclock_omega.o \
refclock_tpro.o refclock_leitch.o refclock_irig.o \
! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
all: $(PROGRAM)
--- 45,52 ----
refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
refclock_parse.o refclock_as2201.o refclock_omega.o \
refclock_tpro.o refclock_leitch.o refclock_irig.o \
! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
! ntp_intres.o ntp_filegen.o
all: $(PROGRAM)
***************
*** 136,141 ****
--- 138,146 ----
refclock_msfees.o: refclock_msfees.c
$(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
+
+ refclock_trak.o: refclock_trak.c
+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
refclock_gpstm.o: refclock_gpstm.c
$(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
--- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
***************
*** 301,307 ****
static u_char clocktypes[] = {
CTL_SST_TS_NTP, /* REFCLK_NONE */
CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
CTL_SST_TS_HF, /* REFCLK_WWV_PST */
CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
--- 301,307 ----
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_HF, /* REFCLK_WWV_PST */
CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
--- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
***************
*** 113,119 ****
struct refclock *refclock_conf[] = {
&refclock_none, /* 0 REFCLK_NONE */
&refclock_local, /* 1 REFCLK_LOCAL */
! &refclock_none, /* 2 REFCLK_WWV_HEATH */
&refclock_pst, /* 3 REFCLK_WWV_PST */
&refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
&refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
--- 113,119 ----
struct refclock *refclock_conf[] = {
&refclock_none, /* 0 REFCLK_NONE */
&refclock_local, /* 1 REFCLK_LOCAL */
! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
&refclock_pst, /* 3 REFCLK_WWV_PST */
&refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
&refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
retrieving revision 1.1.1.12
diff -c -r1.1.1.12 xntpd/refclock_parse.c
*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
--- xntpd/refclock_parse.c 1994/03/03 09:49:54
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
*
! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
*
* generic reference clock driver for receivers
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
* generic reference clock driver for receivers
*
***************
*** 129,135 ****
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
#endif
/**===========================================================================
--- 129,135 ----
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
#endif
/**===========================================================================
***************
*** 1653,1659 ****
* done if no more characters are available
*/
FD_SET(fd, &fdmask);
! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
return;
}
}
--- 1653,1660 ----
* done if no more characters are available
*/
FD_SET(fd, &fdmask);
! if ((i == 0) &&
! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
return;
}
}
***************
*** 2823,2829 ****
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
--- 2824,2830 ----
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,36 @@

Received: from louie.udel.edu by huey.udel.edu id aa24501; 5 Mar 94 21:23 EST
Received: from goofus.wustl.edu by louie.udel.edu id aa01087; 5 Mar 94 21:15 EST
Received: from mumps.pfcs.com by goofus.wustl.edu with UUCP id AA17154
(5.67a+/IDA-1.5 for mills@udel.edu); Sat, 5 Mar 1994 20:15:06 -0600
Received: by mumps.pfcs.com id AA09821
(5.65c/IDA-1.4.4 for mills@udel.edu); Sat, 5 Mar 1994 19:10:18 -0600
Date: Sat, 5 Mar 1994 19:10:18 -0600
From: Harlan Stenn <harlan@mumps.pfcs.com>
Message-Id: <199403060110.AA09821@mumps.pfcs.com>
To: mills@udel.edu
Subject: xntpd/Makefile and 3.3l
Dave,
xntpd/Makefile doesn't get -DSYS_whatever and -DHAVE_xxx_TTYS "installed"
when the Makefile gets created. This is for OS=mips.
Same for xntpdc/Makefile.
A patch follows...
Harlan
PS - might you have a copy of the message I sent you a couple of weeks
ago where I asked about broadcast servers and clients and the ntp.conf
file? I was going to send it to the maling list but I lost my copy.
machines/mips
3,4c3,4
< DEFS=
< AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
---
> DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS
> AUTHDEFS= -DDES -DMD5


View File

@ -0,0 +1,86 @@

Received: from louie.udel.edu by huey.udel.edu id aa23654; 11 Mar 94 7:49 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa14038;
10 Mar 94 14:14 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA13885 (5.65c-6/7.3v-FAU); Thu, 10 Mar 1994 20:10:36 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA03872 (5.65c-6/7.3m-FAU); Thu, 10 Mar 1994 20:10:33 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403101910.AA03872@faui43.informatik.uni-erlangen.de>
Subject: RAW dcf77 showstopper 8-(.
To: mills@udel.edu
Date: Thu, 10 Mar 94 20:10:25 MET
Cc: dpk@morgan.com, Frank.Kardel@informatik.uni-erlangen.de,
Piete.Brooks@cl.cam.ac.uk, jcs@bear.zoo.bt.co.uk
X-Mailer: ELM [version 2.3 PL11]
Hi, my changes for 3.3m introduced a subtle reliability problem for
the cheap DCF77 receiver code - it only returned somtimes the
correct time 8-(.
Well, here is the patch. (I'll post this one to the news group
also as it is a show stopper for the cheap clocks 8-(). So
don't be confused.
RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v
retrieving revision 3.12
diff -c -r3.12 clk_rawdcf.c
*** parse/clk_rawdcf.c:3.12 1994/02/20 13:04:39
--- parse/clk_rawdcf.c 1994/03/10 19:00:43
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
*
! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
*
* Raw DCF77 pulse clock support
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
*
! * clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
*
* Raw DCF77 pulse clock support
*
***************
*** 245,250 ****
--- 245,251 ----
parseprintf(DD_RAWDCF,("parse: convert_rawdcf: parity check passed\n"));
clock->flags = PARSEB_S_ANTENNA|PARSEB_S_LEAP;
+ clock->utctime= 0;
clock->usecond= 0;
clock->second = 0;
clock->minute = ext_bf(buffer, DCF_M10, dcfparam->zerobits);
***************
*** 528,534 ****
/*
* History:
*
! * clk_rawdcf.c,v
* Revision 3.12 1994/02/20 13:04:39 kardel
* parse add/delete second support
*
--- 529,538 ----
/*
* History:
*
! * clk_rawdcf.c,v
! * Revision 3.13 1994/03/10 19:00:43 kardel
! * clear utctime field to avoid confusion on synthesize time stamps
! *
* Revision 3.12 1994/02/20 13:04:39 kardel
* parse add/delete second support
*
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,454 @@

Received: from louie.udel.edu by huey.udel.edu id aa07183; 13 Mar 94 23:57 EST
Received: from hpsdlo.sdd.hp.com by louie.udel.edu id aa17483;
13 Mar 94 23:50 EST
Received: from hpsdlz.sdd.hp.com by hpsdlo.sdd.hp.com with SMTP
(1.36.108.4/15.5+IOS 3.21+sdd) id AA07032; Sun, 13 Mar 1994 20:50:23 -0800
Received: from localhost by hpsdlz.sdd.hp.com with SMTP
(1.36.108.4/15.5+IOS 3.21+sdd) id AA05726; Sun, 13 Mar 1994 20:50:21 -0800
Message-Id: <9403140450.AA05726@hpsdlz.sdd.hp.com>
To: mills@udel.edu
Subject: patches for xntpd
Date: Sun, 13 Mar 1994 20:50:21 -0800
From: Ken Stone <ken@sdd.hp.com>
Ok Dave,
I guess I'll take a poke at the "m" version for cleanup and updates. This
should take care of the newly released 9.03 for s300/s400 which has the
adjtime(2) syscall. Also, cleanup in readiness for 10.0 all around.
-- Ken
P.S. How is your HP hardware/software deal going ? I haven't heard anything
lately.
First do a "rm */hpux10+*" as I have renamed all that to hpux-adj ... that
9.03 blew me out of the water on the naming scheme :-)
Then unshar the following ... it will add a few new files and give you
diff to apply (diffs.hpux).
#---------------------------------- cut here ----------------------------------
# This is a shell archive. Remove anything before this line,
# then unpack it by saving it in a file and typing "sh file".
#
# Wrapped by Source Hacker <src@hpsdlz> on Sun Mar 13 20:47:57 1994
#
# This archive contains:
# compilers/hpux-adj.cc compilers/hpux-adj.gcc
# machines/hpux-adj scripts/hpadjtime.sh
# diffs.hpux
#
# Error checking via wc(1) will be performed.
# Error checking via sum(1) will be performed.
LANG=""; export LANG
PATH=/bin:/usr/bin:$PATH; export PATH
if sum -r </dev/null >/dev/null 2>&1
then
sumopt='-r'
else
sumopt=''
fi
echo x - compilers/hpux-adj.cc
cat >compilers/hpux-adj.cc <<'@EOF'
COMPILER=cc +O1
@EOF
set `sum $sumopt <compilers/hpux-adj.cc`; if test $1 -ne 22541
then
echo ERROR: compilers/hpux-adj.cc checksum is $1 should be 22541
fi
set `wc -lwc <compilers/hpux-adj.cc`
if test $1$2$3 != 1216
then
echo ERROR: wc results of compilers/hpux-adj.cc are $* should be 1 2 16
fi
chmod 644 compilers/hpux-adj.cc
echo x - compilers/hpux-adj.gcc
cat >compilers/hpux-adj.gcc <<'@EOF'
COMPILER=gcc -O2
@EOF
set `sum $sumopt <compilers/hpux-adj.gcc`; if test $1 -ne 23593
then
echo ERROR: compilers/hpux-adj.gcc checksum is $1 should be 23593
fi
set `wc -lwc <compilers/hpux-adj.gcc`
if test $1$2$3 != 1217
then
echo ERROR: wc results of compilers/hpux-adj.gcc are $* should be 1 2 17
fi
chmod 644 compilers/hpux-adj.gcc
echo x - machines/hpux-adj
cat >machines/hpux-adj <<'@EOF'
SHELL= /bin/sh
RANLIB= ls # ar does the work of ranlib under System V
DEFS_LOCAL= -DREFCLOCK
DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10
AUTHDEFS= -DDES -DMD5
CLOCKDEFS= -DLOCAL_CLOCK
COPTS=
INSTALL=$(TOP)scripts/install.sh
@EOF
set `sum $sumopt <machines/hpux-adj`; if test $1 -ne 42265
then
echo ERROR: machines/hpux-adj checksum is $1 should be 42265
fi
set `wc -lwc <machines/hpux-adj`
if test $1$2$3 != 826251
then
echo ERROR: wc results of machines/hpux-adj are $* should be 8 26 251
fi
chmod 644 machines/hpux-adj
echo x - scripts/hpadjtime.sh
cat >scripts/hpadjtime.sh <<'@EOF'
#! /bin/sh
if [ -f /bin/uname -o -f /usr/bin/uname ]; then
set `uname -a | tr '[A-Z]' '[a-z]'`
case "$1" in
hp-ux) case "$3" in
*.10.*) val=1 ;;
*.09.03) case "$5" in
9000/3*) val=1 ;;
*) val=0 ;;
esac ;;
*) val=0 ;;
esac
;;
*)
esac
fi
exit $val
@EOF
set `sum $sumopt <scripts/hpadjtime.sh`; if test $1 -ne 1497
then
echo ERROR: scripts/hpadjtime.sh checksum is $1 should be 1497
fi
set `wc -lwc <scripts/hpadjtime.sh`
if test $1$2$3 != 1850287
then
echo ERROR: wc results of scripts/hpadjtime.sh are $* should be 18 50 287
fi
chmod 755 scripts/hpadjtime.sh
echo x - diffs.hpux
cat >diffs.hpux <<'@EOF'
*** xntp3.3m.orig/compilers/hpux.cc Thu Sep 2 13:19:56 1993
--- xntp3.3m/compilers/hpux.cc Sun Mar 13 12:10:23 1994
***************
*** 1,2 ****
! COMPILER=cc
! COPTS=+O1
--- 1 ----
! COMPILER=cc +O1
*** xntp3.3m.orig/compilers/hpux.gcc Thu Sep 2 13:19:59 1993
--- xntp3.3m/compilers/hpux.gcc Sun Mar 13 12:10:29 1994
***************
*** 1,2 ****
! COMPILER=gcc
! COPTS=-O2
--- 1 ----
! COMPILER=gcc -O2
*** xntp3.3m.orig/hints/hpux Fri Dec 3 02:28:57 1993
--- xntp3.3m/hints/hpux Sun Mar 13 20:20:38 1994
***************
*** 1,59 ****
This file hopefully describes the whatever and however of how to get xntp
! running on hpux 8.0 and later s300, s700, and s800.
First off, all the standard disclaimers hold here ... HP doesn't have anthing
to do with this stuff. I fool with it in my spare time because we use it and
because I like to. We just happen to have a lot of HP machines around here :-)
! Xntp has been in use here for several months and has a fair amount of mileage
on various HP platforms within the company. I can't really guarantee bug fixes
but I'd certainly like to hear about bugs and I won't hestitate to look at
any fixes sent to me.
! Now lets talk OS. If you don't have 8.0 or later, pretty much hang it up now.
! This stuff has run here on 8.0 s300, s700, and s800. Its possible that it
! runs on 7.0 but I have not tried v3 code on 7.0 at all.
! [Note that recent reports state that this release does in fact run on HP
! 300 and 400 boxes, which run 7.0 - Ed.]
! Next, let me explain a bit about how this stuff works on HP-UX since we don't
have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
daemon. Instead of the adjtime(2) system call, we use a library routine to
talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
code provided here is NOT a general replacement for adjtime(2) ... use of
! this adjtime(3)/adjtimed(8) other than here may yield very odd results.
What to do to get this stuff running ?
! * cd ..
! * Say "make makeconfig"
! * cd ..
! * Say "make", sit back for a few minutes.
* cd authstuff
* Say "./authcert < certdata" and check the output. Every line should
end with "OK" ... if not, we got trouble.
* Now try "./authspeed auth.samplekeys". What we want to
remember here is the "authentication delay in CPU time"
! * cd ..
! * Now we need to install this stuff ... make install will not work
! unless you have replaced the SYSV install command with a BSD
! compatible version. So ... the simplest thing to do is run
! make -n install and do manually what it would have done.
* I'd suggest reading the xntp docs about now :-) ... seriously !!
! * Check out the docs and the stuff in xntp/conf and build a config
! file ... put it in /usr/local/etc/xntp.conf (or where ever you
! defined the config file to be in Config). One thing we have
! added to this version of xntpd is a way to select config files
! if you are sharing /usr/local thru NFS or whatever. If the
! file /usr/local/etc/xntp.conf happens to be a directory, the files
! in that directory are searched until a match is found. The rules
! for a match are:
1. Our hostname
2. default.<machine id> (as in default.375 or default.850)
--- 1,63 ----
+ Last update: Sun Mar 13 15:05:31 PST 1994
+
This file hopefully describes the whatever and however of how to get xntp
! running on hpux 7.0 and later s300. s400, s700, and s800.
First off, all the standard disclaimers hold here ... HP doesn't have anthing
to do with this stuff. I fool with it in my spare time because we use it and
because I like to. We just happen to have a lot of HP machines around here :-)
! Xntpd has been in use here for several years and has a fair amount of mileage
on various HP platforms within the company. I can't really guarantee bug fixes
but I'd certainly like to hear about bugs and I won't hestitate to look at
any fixes sent to me.
! Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now.
! This stuff has run here on pretty much everything from 8.0 upward on s300,
! s700, and s800. It is known to run on 7.0 s300/s400 but all reports are
! from the field and not my personal experience.
! If you are lucky enough to have a s300 or s400 with 9.03, then you no longer
! have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you
! will have to wait on 10.0 which will have adjtime(2) and a supported though
! a bit older version of xntpd.
! Next, let me explain a bit about how this stuff works on HP-UX's that do not
have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
daemon. Instead of the adjtime(2) system call, we use a library routine to
talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
code provided here is NOT a general replacement for adjtime(2) ... use of
! this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results.
What to do to get this stuff running ?
! * If you are running an OS less than 10.0 or do not have a s300/s400
! with 9.03 or better
! -> cd machines
! -> vi hpux
! -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9])
! -> cd ..
! * Say "make makeconfig"
+ * Say "make", sit back for a few minutes.
+
* cd authstuff
* Say "./authcert < certdata" and check the output. Every line should
end with "OK" ... if not, we got trouble.
* Now try "./authspeed auth.samplekeys". What we want to
remember here is the "authentication delay in CPU time"
+ * cd ..
! * Say "make install"
* I'd suggest reading the xntp docs about now :-) ... seriously !!
! * One thing I have added to this version of xntpd is a way to select
! config files if you are sharing /usr/local thru NFS or whatever.
! If the file /usr/local/etc/xntp.conf happens to be a directory, the
! files in that directory are searched until a match is found. The
! rules for a match are:
1. Our hostname
2. default.<machine id> (as in default.375 or default.850)
***************
*** 72,76 ****
--- 76,92 ----
* On some 320's and 835's we have had to run adjtimed with "-p 45" or
so to get rid of syslog messages about "last adjust did not finish".
+
+ * At 9.0, there is a problem with DIAGMON (patch available from the
+ response center) which causes it to delete the message queue that
+ adjtimed/xntpd use to communicate. (see next note for result)
+
+ * Xntpd has been known to get really ticked off when adjtime() fails
+ which is usually only while running the emulation code on HP-UX.
+ When it gets mad, it usually jumps the clock into never never land.
+ Possible reasons for this are adjtimed being killed or just never
+ started or adjtimed being completely swapped out on a really busy
+ machine (newer adjtimed try to lock themselves in memory to prevent
+ this one).
Anything else ... just drop me a line at ken@sdd.hp.com
*** xntp3.3m.orig/include/ntp_machine.h Sun Feb 27 19:34:59 1994
--- xntp3.3m/include/ntp_machine.h Sun Mar 13 15:35:33 1994
***************
*** 334,341 ****
#define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
#define NO_SIGNED_CHAR_DECL
#define LOCK_PROCESS
- #define HAVE_NO_NICE /* HPUX uses rtprio instead */
#define RETSIGTYPE void
#if (SYS_HPUX < 10)
#define NOKMEM
#else
--- 334,345 ----
#define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
#define NO_SIGNED_CHAR_DECL
#define LOCK_PROCESS
#define RETSIGTYPE void
+ #if (SYS_HPUX < 9)
+ #define HAVE_NO_NICE /* HPUX uses rtprio instead */
+ #else
+ #define HAVE_BSD_NICE /* new at 9.X */
+ #endif
#if (SYS_HPUX < 10)
#define NOKMEM
#else
*** xntp3.3m.orig/lib/Makefile.tmpl Wed Feb 2 21:20:13 1994
--- xntp3.3m/lib/Makefile.tmpl Sun Mar 13 16:27:50 1994
***************
*** 49,55 ****
$(LIBNAME).a: $(OBJS)
ar rv $@ $?
-rm -f $?
! @if ( hp-pa || hp-mc680x0 ) > /dev/null 2>&1; then \
( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
else \
:; \
--- 49,55 ----
$(LIBNAME).a: $(OBJS)
ar rv $@ $?
-rm -f $?
! @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \
( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
else \
:; \
*** xntp3.3m.orig/scripts/Guess.sh Wed Jan 26 15:26:03 1994
--- xntp3.3m/scripts/Guess.sh Sun Mar 13 14:10:19 1994
***************
*** 40,46 ****
guess="ultrix"
;;
hp-ux) case "$3" in
! *.10.*) guess="hpux10+" ;;
*) guess="hpux" ;;
esac
;;
--- 40,50 ----
guess="ultrix"
;;
hp-ux) case "$3" in
! *.10.*) guess="hpux-adj" ;;
! *.09.03) case "$5" in
! 9000/3*) guess="hpux-adj" ;;
! *) guess="hpux" ;;
! esac ;;
*) guess="hpux" ;;
esac
;;
*** xntp3.3m.orig/util/tickadj.c Wed Feb 2 21:20:17 1994
--- xntp3.3m/util/tickadj.c Sun Mar 13 13:55:53 1994
***************
*** 388,393 ****
--- 388,409 ----
#endif
#endif
+ #if defined(SYS_HPUX)
+ #define X_TICKADJ 0
+ #define X_TICK 1
+ #define X_DEF
+ static struct nlist nl[] =
+ #ifdef hp9000s300
+ { {"_tickadj"},
+ {"_old_tick"},
+ #else
+ { {"tickadj"},
+ {"old_tick"},
+ #endif
+ {""},
+ };
+ #endif
+
#if !defined(X_DEF)
#define X_TICKADJ 0
#define X_TICK 1
***************
*** 408,413 ****
--- 424,430 ----
"/kernel/unix",
"/386bsd",
"/netbsd",
+ "/hp-ux",
NULL
};
struct stat stbuf;
*** xntp3.3m.orig/xntpd/ntp_loopfilter.c Sun Feb 27 19:36:16 1994
--- xntp3.3m/xntpd/ntp_loopfilter.c Sun Mar 13 14:03:54 1994
***************
*** 349,356 ****
}
}
#endif /* HAVE_BSD_TTYS */
- fdpps = fd232;
#endif /* HPUXGADGET */
/*
* Insert in device list.
--- 349,356 ----
}
}
#endif /* HAVE_BSD_TTYS */
#endif /* HPUXGADGET */
+ fdpps = fd232;
/*
* Insert in device list.
@EOF
set `sum $sumopt <diffs.hpux`; if test $1 -ne 46307
then
echo ERROR: diffs.hpux checksum is $1 should be 46307
fi
set `wc -lwc <diffs.hpux`
if test $1$2$3 != 288172410391
then
echo ERROR: wc results of diffs.hpux are $* should be 288 1724 10391
fi
chmod 664 diffs.hpux
exit 0


View File

@ -0,0 +1,52 @@

Received: from louie.udel.edu by huey.udel.edu id aa24239; 16 Mar 94 18:01 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18720;
16 Mar 94 17:57 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA25324 (5.65c-6/7.3v-FAU); Wed, 16 Mar 1994 23:57:39 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA18230 (5.65c-6/7.3m-FAU); Wed, 16 Mar 1994 23:57:37 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403162257.AA18230@faui43.informatik.uni-erlangen.de>
Subject: hpadjtime.sh
To: mills@udel.edu, ken@sdd.hp.com
Date: Wed, 16 Mar 94 23:57:32 MET
Return-Receipt-To: "Frank Kardel" <Frank.Kardel@informatik.uni-erlangen.de>
X-Mailer: ELM [version 2.3 PL11]
Hi, 3.3n is somewhat broken...
First of all
- scripts/hpadjtime.sh is missing (it's in patch.28)
And
- scripts/hpadjtime.sh is broken for non hp-ux
(will try to build adjtime libs on non hp-ux architectures
as a default value was no set)
Please use this version of scripts/hpadjtime.sh for increased safety:
#! /bin/sh
val=1
if [ -f /bin/uname -o -f /usr/bin/uname ]; then
set `uname -a | tr '[A-Z]' '[a-z]'`
case "$1" in
hp-ux) case "$3" in
*.10.*) val=1 ;;
*.09.03) case "$5" in
9000/3*) val=1 ;;
*) val=0 ;;
esac ;;
*) val=0 ;;
esac
;;
*)
esac
fi
exit $val
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,73 @@

Received: from louie.udel.edu by huey.udel.edu id aa14619; 22 Mar 94 11:53 EST
Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24926;
22 Mar 94 11:48 EST
Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
id m0pj9dD-000C8UC; Tue, 22 Mar 94 11:48 EST
Message-Id: <m0pj9dD-000C8UC@jagubox.gsfc.nasa.gov>
From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
Subject: Small patch for xntpd 3.3p and A/UX (tickadj)
To: Mills@udel.edu
Date: Tue, 22 Mar 1994 11:48:42 -0500 (EST)
Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
X-Mailer: ELM [version 2.4 PL23]
Content-Type: text
Content-Length: 1355
This little patch streamlines things a bit for tickadj and A/UX:
----------->8 cut here --------------------------------
*** tickadj.c.orig Mon Mar 14 02:47:28 1994
--- tickadj.c Tue Mar 22 11:41:19 1994
***************
*** 333,342 ****
#if defined(SYS_AUX3) || defined(SYS_AUX2)
#define X_TICKADJ 0
! #define X_V 1
! #define X_TICK 2
#define X_DEF
! static struct nlist nl[4];
#endif
#ifdef NeXT
--- 333,345 ----
#if defined(SYS_AUX3) || defined(SYS_AUX2)
#define X_TICKADJ 0
! #define X_TICK 1
#define X_DEF
! static struct nlist nl[] =
! { {"tickadj"},
! {"tick"},
! {""},
! };
#endif
#ifdef NeXT
***************
*** 428,440 ****
NULL
};
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)
--- 431,436 ----
----------->8 cut here --------------------------------
--
#include <std/disclaimer.h>
Jim Jagielski |
jim@jagubox.gsfc.nasa.gov | "Dead or alive, you're coming with me."
NASA/GSFC, Code 734.4 | RoboCop
Greenbelt, MD 20771 |


View File

@ -0,0 +1,83 @@

Received: from louie.udel.edu by huey.udel.edu id aa12734; 27 Mar 94 8:52 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa20329;
27 Mar 94 8:48 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA05771 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 15:48:38 +0200
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA01229 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 14:48:37 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403271348.AA01229@faui43.informatik.uni-erlangen.de>
Subject: minor patches
To: mills@udel.edu
Date: Sun, 27 Mar 94 15:48:32 MET DST
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave,
I just got through manually read news (in the spool area 8-( - when
will they ever fix our news installation).
In order to avoid ptx being picked up in AT&T machine i added hope-fully
an additional check. Why do vendor have to make machine look the
same when they aren't ? I though uname was supposed to find out - I
guess I was wrong - every vendor seems to have his own ideas about
uname and they all do not mix very well.
The fix to numtohost allows it to compile on ptx - I hope it still
compiles on all others (should though).
diff -c lib/numtohost.c:1.1.1.9 lib/numtohost.c:3.7
*** lib/numtohost.c:1.1.1.9 Sun Mar 27 15:36:54 1994
--- lib/numtohost.c Sun Mar 27 15:36:54 1994
***************
*** 1,12 ****
! /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
* numtohost - convert network number to host name.
*/
- #include "ntp_types.h"
#include <netdb.h>
#include "ntp_fp.h"
- #include "lib_strbuf.h"
#include "ntp_stdlib.h"
#define LOOPBACKNET 0x7f000000
#define LOOPBACKHOST 0x7f000001
--- 1,11 ----
! /*
* numtohost - convert network number to host name.
*/
#include <netdb.h>
#include "ntp_fp.h"
#include "ntp_stdlib.h"
+ #include "lib_strbuf.h"
#define LOOPBACKNET 0x7f000000
#define LOOPBACKHOST 0x7f000001
diff -c scripts/Guess.sh:1.1.1.8 scripts/Guess.sh:1.13
*** scripts/Guess.sh:1.1.1.8 Sun Mar 27 15:38:53 1994
--- scripts/Guess.sh Sun Mar 27 15:38:53 1994
***************
*** 78,84 ****
3.2.*)
case "$4" in
v*)
! (i386) >/dev/null 2>&1 && guess=ptx;;
esac
esac
fi
--- 78,84 ----
3.2.*)
case "$4" in
v*)
! (i386) >/dev/null 2>&1 && [ -f /usr/lib/libseq.a ] && guess=ptx;;
esac
esac
fi
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,89 @@

Received: from louie.udel.edu by huey.udel.edu id aa12910; 27 Mar 94 10:06 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa22473;
27 Mar 94 10:05 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA09307 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 17:05:03 +0200
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA05359 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 16:05:01 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403271505.AA05359@faui43.informatik.uni-erlangen.de>
Subject: more PTX related patches...
To: mills@udel.edu
Date: Sun, 27 Mar 94 17:04:56 MET DST
X-Mailer: ELM [version 2.3 PL11]
Hi, Dave !
And another patche to make parse compile on PTX (Sequents
SysVR2 version).
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/parse/parse.c,v
retrieving revision 3.23
retrieving revision 3.24
diff -c -r3.23 -r3.24
*** parse/parse.c:3.23 1994/03/25 13:09:02
--- parse/parse.c 1994/03/27 15:01:36
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
* Parser module for reference clock
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
*
! * parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
*
* Parser module for reference clock
*
***************
*** 29,34 ****
--- 29,38 ----
#include "sys/time.h"
#include "sys/errno.h"
+ #include "ntp_fp.h"
+ #include "ntp_unixtime.h"
+ #include "ntp_calendar.h"
+
#include "ntp_machine.h"
#if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
***************
*** 49,58 ****
#endif
#endif
- #include "ntp_fp.h"
- #include "ntp_unixtime.h"
- #include "ntp_calendar.h"
-
#include "parse.h"
#include "ntp_stdlib.h"
--- 53,58 ----
***************
*** 1162,1167 ****
--- 1162,1170 ----
* History:
*
* parse.c,v
+ * Revision 3.24 1994/03/27 15:01:36 kardel
+ * reorder include file to cope with PTX
+ *
* Revision 3.23 1994/03/25 13:09:02 kardel
* considering FIXEDONLY entries only in FIXEDONLY mode
*
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,75 @@

Received: from louie.udel.edu by huey.udel.edu id aa13737; 27 Mar 94 15:27 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa29101;
27 Mar 94 15:23 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA24270 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 22:23:35 +0200
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA07515 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 21:23:34 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403272023.AA07515@faui43.informatik.uni-erlangen.de>
Subject: and for patch 33?
To: mills@udel.edu
Date: Sun, 27 Mar 94 22:23:30 MET DST
X-Mailer: ELM [version 2.3 PL11]
This should get you to Patch 33. or higher.
- gcc 2.5.8 (from Per Hedeland - gcc 2.5.8 is just
causing to many poeple to complain 8-()_
- a an note what one can do in Config.local in HACKermode.
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/RELNOTES,v
retrieving revision 1.1.1.11
diff -c -r1.1.1.11 RELNOTES
*** 1.1.1.11 1994/01/30 17:08:20
--- RELNOTES 1994/03/27 19:40:27
***************
*** 31,36 ****
--- 31,40 ----
For custom tailored configuration copying Config.local.dist to Config.local
and editing Config.local to suit the local needs is neccessary (at most
3 lines to change), or use one of the make's above and then tweak it.
+ Config.local can also be used to override common settings from the
+ machines/* files like the AUTHDEFS= to select very specific configurations.
+ Please use this feature with care and don't be disappointed if it doesn't
+ work the way you expect.
(2) Type "make" to compile everything of general interest. Expect few or
no warnings using cc and a moderate level of warnings using gcc.
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/include/l_stdlib.h,v
retrieving revision 1.1.1.6
diff -c -r1.1.1.6 l_stdlib.h
*** include/l_stdlib.h:1.1.1.6 1994/01/28 13:07:49
--- include/l_stdlib.h 1994/03/27 19:34:40
***************
*** 70,80 ****
extern int close P((int));
extern int ioctl P((int, int, char *));
! extern int read P((int, char *, unsigned));
extern int rename P((char *, char *));
! extern int write P((int, char *, int));
! extern int unlink P((char *));
! extern int link P((char *, char *));
#ifdef FILE
extern int fclose P((FILE *));
--- 70,80 ----
extern int close P((int));
extern int ioctl P((int, int, char *));
! extern int read P((int, void *, unsigned));
extern int rename P((char *, char *));
! extern int write P((int, const void *, unsigned));
! extern int unlink P((const char *));
! extern int link P((const char *, const char *));
#ifdef FILE
extern int fclose P((FILE *));
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,303 @@

Received: from louie.udel.edu by huey.udel.edu id aa02155; 25 Mar 94 8:47 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa05544;
25 Mar 94 8:45 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA27199 (5.65c-6/7.3v-FAU); Fri, 25 Mar 1994 14:45:13 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA06935 (5.65c-6/7.3m-FAU); Fri, 25 Mar 1994 14:45:11 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199403251345.AA06935@faui43.informatik.uni-erlangen.de>
Subject: bugfixes for parse & ntpq enhancements
To: mills@udel.edu
Date: Fri, 25 Mar 94 14:45:05 MET
X-Mailer: ELM [version 2.3 PL11]
Hi Dave,
I have a 2 bug fixes and an ntpq enhancement:
- parse bitmap initialisation fixed
- allow for large offsets in refclock_parse (>4 min 8-()
- decode the flash bits in cooked mode
diff -c ntpq/ntpq.c:1.1.1.21 ntpq/ntpq.c:3.22
*** ntpq/ntpq.c:1.1.1.21 Fri Mar 25 14:32:38 1994
--- ntpq/ntpq.c Fri Mar 25 14:32:38 1994
***************
*** 75,80 ****
--- 75,81 ----
#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,151 ****
{ CP_RECEIVED, UI, "received" }, /* 31 */
{ CP_SENT, UI, "sent" }, /* 32 */
{ CP_FILTERROR, AR, "filterror" }, /* 33 */
! { CP_FLASH, ST, "flash"}, /* 34 */
{ CP_DISP, AR, "disp" }, /* 35 */
/*
* These are duplicate entires so that we can
--- 146,152 ----
{ CP_RECEIVED, UI, "received" }, /* 31 */
{ CP_SENT, UI, "sent" }, /* 32 */
{ CP_FILTERROR, AR, "filterror" }, /* 33 */
! { CP_FLASH, TST, "flash"}, /* 34 */
{ CP_DISP, AR, "disp" }, /* 35 */
/*
* These are duplicate entires so that we can
***************
*** 189,194 ****
--- 190,209 ----
};
/*
+ * 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,2842 ****
output(fp, name, buf);
}
!
/*
* cookedprint - output variables in cooked mode
--- 2851,2895 ----
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,2999 ****
--- 3047,3059 ----
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 -c parse/parse.c:1.1.1.10 parse/parse.c:3.23
*** parse/parse.c:1.1.1.10 Fri Mar 25 14:33:02 1994
--- parse/parse.c Fri Mar 25 14:33:02 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
*
* Parser module for reference clock
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
*
* Parser module for reference clock
*
***************
*** 178,183 ****
--- 178,187 ----
{
fmt = clockformats[i];
+ if (!(parseio->parse_flags & PARSE_FIXED_FMT) &&
+ (fmt->flags & CVT_FIXEDONLY))
+ continue;
+
if (fmt->flags & F_START)
{
index = fmt->startsym / 8;
***************
*** 1158,1163 ****
--- 1162,1170 ----
* History:
*
* parse.c,v
+ * Revision 3.23 1994/03/25 13:09:02 kardel
+ * considering FIXEDONLY entries only in FIXEDONLY mode
+ *
* Revision 3.22 1994/02/25 12:34:49 kardel
* allow for converter generated utc times
*
diff -c xntpd/refclock_parse.c:1.1.1.13 xntpd/refclock_parse.c:3.53
*** xntpd/refclock_parse.c:1.1.1.13 Fri Mar 25 14:35:07 1994
--- xntpd/refclock_parse.c Fri Mar 25 14:35:08 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
*
* generic reference clock driver for receivers
*
--- 1,8 ----
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
*
! * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
*
* generic reference clock driver for receivers
*
***************
*** 129,135 ****
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
#endif
/**===========================================================================
--- 129,135 ----
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp";
#endif
/**===========================================================================
***************
*** 2824,2830 ****
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
--- 2824,2830 ----
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
***************
*** 3103,3109 ****
L_ADD(&off, &offset);
rectime = off; /* this makes org time and xmt time somewhat artificial */
! if (parse->flags & PARSE_STAT_FILTER)
{
struct timeval usecerror;
/*
--- 3103,3113 ----
L_ADD(&off, &offset);
rectime = off; /* this makes org time and xmt time somewhat artificial */
! L_SUB(&off, &parsetime->parse_stime.fp);
!
! if ((parse->flags & PARSE_STAT_FILTER) &&
! (off.l_i > -60) &&
! (off.l_i < 60)) /* take usec error only if within +- 60 secs */
{
struct timeval usecerror;
/*
***************
*** 3115,3124 ****
sTVTOTS(&usecerror, &off);
L_ADD(&off, &offset);
}
- else
- {
- L_SUB(&off, &parsetime->parse_stime.fp);
- }
}
if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
--- 3119,3124 ----
***************
*** 3409,3414 ****
--- 3409,3420 ----
* History:
*
* refclock_parse.c,v
+ * Revision 3.53 1994/03/25 13:07:39 kardel
+ * fixed offset calculation for large (>4 Min) offsets
+ *
+ * Revision 3.52 1994/03/03 09:58:00 kardel
+ * stick -kv in cvs is no fun
+ *
* Revision 3.49 1994/02/20 13:26:00 kardel
* rcs id cleanup
*
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,914 @@

Received: from louie.udel.edu by huey.udel.edu id aa25410; 3 Apr 94 18:04 EDT
Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa09227;
3 Apr 94 17:56 EDT
Received: by adrastea.lcs.mit.edu; id AA26407; Sun, 3 Apr 1994 17:56:48 -0400
Date: Sun, 3 Apr 1994 17:56:48 -0400
From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
Message-Id: <9404032156.AA26407@adrastea.lcs.mit.edu>
To: Dave Mills <Mills@udel.edu>
Subject: xntpd 3.3p changes for FreeBSD
This still doesn't solve the 18-second discrepancy. However, the
patch file below shows the current differences between xntp3.3p and
the FreeBSD version of same, deleted files not included. I have also
included the Makefiles that we use to provide some idea of our build
structure. (Thankfully, xntp---unlike some other popular pieces of
software---has a sane directory structure to begin with, so it isn't
nearly as difficult to handle this sort of thing than it is with, say,
GCC.)
diff -c /dev/null 386BSD/src/contrib/xntpd/Makefile.inc:1.3
*** /dev/null Sun Apr 3 13:42:15 1994
--- 386BSD/src/contrib/xntpd/Makefile.inc Sun Apr 3 13:42:15 1994
***************
*** 0 ****
--- 1,7 ----
+ DEFS_LOCAL=-DREFCLOCK -DPARSE
+ NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS
+ AUTHDEFS= -DMD5
+ CLOCKDEFS= -DLOCAL_CLOCK -DPST -DWWVB -DAS2201 -DGOES -DGPSTM -DOMEGA \
+ -DLEITCH -DTRAK
+ CFLAGS+= ${NTPDEFS} ${DEFS_LOCAL} ${AUTHDEFS} ${CLOCKDEFS} ${COPTS}
+ BINDIR?= /usr/sbin
diff -c /dev/null 386BSD/src/contrib/xntpd/README.FreeBSD:1.5
*** /dev/null Sun Apr 3 13:42:15 1994
--- 386BSD/src/contrib/xntpd/README.FreeBSD Sun Apr 3 13:42:15 1994
***************
*** 0 ****
--- 1,78 ----
+ 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.
+
+ 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
+ `authdes.c', you can just add it to the lib/ directory and add `-DDES'
+ to the AUTHDEFS in Makefile.inc.
+
+ You can change CLOCKDEFS in the same file to add other reference clocks.
+
+ ----------------------------------------------------
+ Support for Conrad electronic's "DCF-77 Uhr, Mobil".
+ ----------------------------------------------------
+ Conrad electronic in Germany,, Phone (+49) 962230111 (?), sells a gadget
+ called "DCF77 Uhr, mobil", which is a DCF77 timecode receiver with a
+ rs-232 interface. The price is around DM130.
+ 9-pin interface is Order# 97 94 57 66
+ 25-pin interface is Order# 97 94 81 66
+
+ You must define
+ -DDCF77 -DPPS -DFREEBSD_CONRAD -DDEBUG
+ when you compile xntpd. You can later remove -DDEBUG, if you feel like it.
+
+ You must also have
+ options COM_BIDIR
+ defined in your kernel, and finally the ttyport you intend to use must
+ have special interrupt vector:
+ device sio1 at isa? port "IO_COM2" tty irq 3 vector siointrts
+ ^^^^^^^^^^^^
+ connect the radio-clock to the tty port and link it to /dev/refclock-0:
+
+ cd /dev
+ sh MAKEDEV cua1
+ ln -s /dev/cua01 /dev/refclock-0
+
+ make a directory to gather statistics in:
+ mkdir /var/tmp/ntp
+
+ Create a /etc/ntp.conf along these lines:
+
+ # DCF77 without PPS
+ server 127.127.8.20
+ # DCF77 with PPS
+ #server 127.127.8.148 prefer
+
+ driftfile /var/tmp/ntp/ntp.drift
+ statsdir /var/tmp/ntp
+ statistics loopstats
+ statistics peerstats
+ statistics clockstats
+ filegen peerstats file peerstats type day enable
+ filegen loopstats file loopstats type day enable
+ filegen clockstats file clockstats type day enable
+
+ Try to start it:
+ comcontrol ttyd1 bidir
+ tickadj -A
+ xntpd -d -d -d
+
+ You should see the red LED flash on the receiver every second now. You
+ may have to experiment a bit with the location, and possibly adjust the
+ minute variable resistor inside to get a good signal. Be aware, that just
+ because you see the light flash, is not the same as the signal being
+ received by the computer. The chip doing the work in the reciver uses
+ less than 1 micro-ampere, so even if RTS isn't pulled low, it will happily
+ receive, but be unable to buffer the signal to the rs-232 levels needed.
+
+ You can see what's going on in /var/log/messages, and query the
+ daemon using xntpdc and ntpq, in particular the "clockvar" command
+ of ntpq will tell about the clocks healt.
+
+ I live in Slagelse, Denmark, which is ~1000 Km from Mainflingen, yet
+ I have +/- 2 ms precision from this cheap gadget. If you have a very
+ stable signal, you can use the 'pps' address instead to improve your
+ timing.
+
+ Have fun... Poul-Henning Kamp <phk@login.dkuug.dk>
diff -c /dev/null 386BSD/src/contrib/xntpd/authstuff/Makefile:1.2
*** /dev/null Sun Apr 3 13:42:19 1994
--- 386BSD/src/contrib/xntpd/authstuff/Makefile Sun Apr 3 13:42:20 1994
***************
*** 0 ****
--- 1,27 ----
+ #
+ # $Id: Makefile,v 1.2 1993/12/22 11:32:10 rgrimes Exp $
+ #
+ # Most of the programs in this directory are completely useless for the
+ # NTP configuration that we provide by default.
+ # We provide the `md5' program as a public service.
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= ${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= md5
+
+ SRCS= md5driver.c
+ NOMAN=
+
+ install:
+
+ .include <bsd.prog.mk>
diff -c 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.2
*** 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 Sun Apr 3 13:42:20 1994
--- 386BSD/src/contrib/xntpd/authstuff/md5driver.c Sun Apr 3 13:42:20 1994
***************
*** 30,36 ****
--- 30,38 ----
#endif /* SYS_BSDI */
#include "md5.h"
+ #ifndef MD5
#define MD5
+ #endif
#include "ntp_string.h"
#include "ntp_stdlib.h"
diff -c /dev/null 386BSD/src/contrib/xntpd/clockstuff/Makefile:1.1
*** /dev/null Sun Apr 3 13:42:21 1994
--- 386BSD/src/contrib/xntpd/clockstuff/Makefile Sun Apr 3 13:42:21 1994
***************
*** 0 ****
--- 1,16 ----
+ #
+ # $Id: Makefile,v 1.1 1993/12/21 21:06:24 wollman Exp $
+ #
+
+ PROG= propdelay
+ LIBADD= -L${.CURDIR}/../lib -lntp -lm
+ DPADD= ${.CURDIR}/../lib/libntp.a
+
+ SRCS= propdelay.c
+ NOMAN=
+
+ install:
+
+ CLEANFILES+= chutest clktest chutest.o clktest.o
+
+ .include <bsd.prog.mk>
diff -c /dev/null 386BSD/src/contrib/xntpd/lib/Makefile:1.5
*** /dev/null Sun Apr 3 13:43:01 1994
--- 386BSD/src/contrib/xntpd/lib/Makefile Sun Apr 3 13:43:01 1994
***************
*** 0 ****
--- 1,30 ----
+ #
+ # $Id: Makefile,v 1.5 1994/04/03 20:37:05 wollman Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ SRCS= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \
+ authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \
+ buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \
+ clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c \
+ gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \
+ lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \
+ msutotsf.c netof.c numtoa.c refnumtoa.c numtohost.c octtoint.c \
+ prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \
+ uglydate.c uinttoa.c utvtoa.c clocktypes.c \
+ md5.c a_md5encrypt.c a_md5decrypt.c \
+ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
+ findconfig.c getopt.c
+
+ NOMAN=
+ NOPROFILE=
+ LIB= ntp
+ CLEANFILES+=authdes.c
+
+ install:
+
+ authdes.c: authdes.c.export
+ cp ${.CURDIR}/authdes.c.export authdes.c
+
+ .include <bsd.lib.mk>
diff -c /dev/null 386BSD/src/contrib/xntpd/ntpdate/Makefile:1.3
*** /dev/null Sun Apr 3 13:43:27 1994
--- 386BSD/src/contrib/xntpd/ntpdate/Makefile Sun Apr 3 13:43:27 1994
***************
*** 0 ****
--- 1,28 ----
+ #
+ # $Id: Makefile,v 1.3 1993/12/22 11:32:56 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= ntpdate
+ MAN8= ${.CURDIR}/../doc/ntpdate.8
+ CLEANFILES+= .version version.c
+
+ SRCS= ntpdate.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion ntpdate
+
+ .include <bsd.prog.mk>
diff -c /dev/null 386BSD/src/contrib/xntpd/ntpq/Makefile:1.3
*** /dev/null Sun Apr 3 13:43:28 1994
--- 386BSD/src/contrib/xntpd/ntpq/Makefile Sun Apr 3 13:43:29 1994
***************
*** 0 ****
--- 1,29 ----
+ #
+ # $Id: Makefile,v 1.3 1993/12/22 11:33:07 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= ntpq
+ MAN8= ${.CURDIR}/../doc/ntpq.8
+ CLEANFILES+= .version version.c
+ BINDIR= /usr/bin
+
+ SRCS= ntpq.c ntpq_ops.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion ntpq
+
+ .include <bsd.prog.mk>
diff -c 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.2
*** 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 Sun Apr 3 13:43:30 1994
--- 386BSD/src/contrib/xntpd/ntpq/ntpq.c Sun Apr 3 13:43:30 1994
***************
*** 301,307 ****
static int decodearr P((char *, int *, l_fp *));
static char * getcode P((int, struct codestring *));
static void help P((struct parse *, FILE *));
! #if defined(sgi) || defined(SYS_BSDI)
static int helpsort P((const void *, const void *));
#else
static int helpsort P((char **, char **));
--- 301,307 ----
static int decodearr P((char *, int *, l_fp *));
static char * getcode P((int, struct codestring *));
static void help P((struct parse *, FILE *));
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
static int helpsort P((const void *, const void *));
#else
static int helpsort P((char **, char **));
***************
*** 335,341 ****
static void endoutput P((FILE *));
static void outputarr P((FILE *, char *, int, l_fp *));
static void cookedprint P((int, int, char *, int, FILE *));
! #if defined(sgi) || defined(SYS_BSDI)
static int assoccmp P((const void *, const void *));
#else
static int assoccmp P((struct association *, struct association *));
--- 335,341 ----
static void endoutput P((FILE *));
static void outputarr P((FILE *, char *, int, l_fp *));
static void cookedprint P((int, int, char *, int, FILE *));
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
static int assoccmp P((const void *, const void *));
#else
static int assoccmp P((struct association *, struct association *));
***************
*** 1888,1894 ****
for (xcp = opcmds; xcp->keyword != 0; xcp++)
cmdsort[n++] = xcp->keyword;
! #if defined(sgi) || defined(SYS_BSDI)
qsort((void *)cmdsort, n, sizeof(char *), helpsort);
#else
qsort((char *)cmdsort, n, sizeof(char *), helpsort);
--- 1888,1894 ----
for (xcp = opcmds; xcp->keyword != 0; xcp++)
cmdsort[n++] = xcp->keyword;
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
qsort((void *)cmdsort, n, sizeof(char *), helpsort);
#else
qsort((char *)cmdsort, n, sizeof(char *), helpsort);
***************
*** 1934,1940 ****
* helpsort - do hostname qsort comparisons
*/
static int
! #if defined(sgi) || defined(SYS_BSDI)
helpsort(t1, t2)
const void *t1;
const void *t2;
--- 1934,1940 ----
* helpsort - do hostname qsort comparisons
*/
static int
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
helpsort(t1, t2)
const void *t1;
const void *t2;
***************
*** 3028,3034 ****
sortassoc()
{
if (numassoc > 1)
! #if defined(sgi) || defined(SYS_BSDI)
qsort((void *)assoc_cache, numassoc,
sizeof(struct association), assoccmp);
#else
--- 3028,3034 ----
sortassoc()
{
if (numassoc > 1)
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
qsort((void *)assoc_cache, numassoc,
sizeof(struct association), assoccmp);
#else
***************
*** 3042,3048 ****
* assoccmp - compare two associations
*/
static int
! #if defined(sgi) || defined(SYS_BSDI)
assoccmp(t1, t2)
const void *t1;
const void *t2;
--- 3042,3048 ----
* assoccmp - compare two associations
*/
static int
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
assoccmp(t1, t2)
const void *t1;
const void *t2;
diff -c /dev/null 386BSD/src/contrib/xntpd/ntptrace/Makefile:1.2
*** /dev/null Sun Apr 3 13:43:31 1994
--- 386BSD/src/contrib/xntpd/ntptrace/Makefile Sun Apr 3 13:43:31 1994
***************
*** 0 ****
--- 1,28 ----
+ #
+ # $Id: Makefile,v 1.2 1993/12/22 11:33:14 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= ntptrace
+ MAN8= ${.CURDIR}/../doc/ntptrace.8
+ CLEANFILES+= .version version.c
+
+ SRCS= ntptrace.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion ntptrace
+
+ .include <bsd.prog.mk>
diff -c /dev/null 386BSD/src/contrib/xntpd/parse/Makefile:1.1
*** /dev/null Sun Apr 3 13:43:32 1994
--- 386BSD/src/contrib/xntpd/parse/Makefile Sun Apr 3 13:43:32 1994
***************
*** 0 ****
--- 1,19 ----
+ #
+ # $Id: Makefile,v 1.1 1993/12/21 20:04:14 wollman Exp $
+ #
+
+ PARSEFLAGS= -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_MEINBERG \
+ -DCLOCK_RAWDCF -DCLOCK_TRIMSV6
+
+ CFLAGS+= -I${.CURDIR}/../include ${PARSEFLAGS}
+
+ SRCS= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \
+ clk_dcf7000.c clk_trimble.c
+
+ NOMAN=
+ NOPROFILE=
+ LIB= parse
+
+ install:
+
+ .include <bsd.lib.mk>
diff -c 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 386BSD/src/contrib/xntpd/scripts/mkversion:1.2
*** 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 Sun Apr 3 13:43:49 1994
--- 386BSD/src/contrib/xntpd/scripts/mkversion Sun Apr 3 13:43:49 1994
***************
*** 9,20 ****
echo $RUN > .version
DATE="`date`"
if [ -r VERSION ]; then
VERSION=VERSION
else
VERSION=../VERSION
! fi
if [ -f "$VERSION" ]; then
FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
--- 9,23 ----
echo $RUN > .version
DATE="`date`"
+ TOPDIR=`echo $0 | sed -e 's;mkversion;..;'`
if [ -r VERSION ]; then
VERSION=VERSION
+ else if [ -r ${TOPDIR}/VERSION ]; then
+ VERSION=${TOPDIR}/VERSION
else
VERSION=../VERSION
! fi; fi
if [ -f "$VERSION" ]; then
FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
diff -c /dev/null 386BSD/src/contrib/xntpd/util/Makefile:1.2
*** /dev/null Sun Apr 3 13:43:53 1994
--- 386BSD/src/contrib/xntpd/util/Makefile Sun Apr 3 13:43:54 1994
***************
*** 0 ****
--- 1,28 ----
+ #
+ # $Id: Makefile,v 1.2 1993/12/22 11:33:28 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= tickadj
+ MAN8= ${.CURDIR}/../doc/tickadj.8
+ CLEANFILES+= .version version.c
+
+ SRCS= tickadj.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion tickadj
+
+ .include <bsd.prog.mk>
diff -c /dev/null 386BSD/src/contrib/xntpd/xntpd/Makefile:1.5
*** /dev/null Sun Apr 3 13:43:56 1994
--- 386BSD/src/contrib/xntpd/xntpd/Makefile Sun Apr 3 13:43:56 1994
***************
*** 0 ****
--- 1,45 ----
+ #
+ # $Id: Makefile,v 1.5 1994/04/03 20:37:26 wollman Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= ${.CURDIR}/../lib/libntp.a
+ .endif
+
+ .if exists(${.CURDIR}/../parse/obj)
+ LDADD+= -L${.CURDIR}/../parse/obj
+ DPADD+= ${.CURDIR}/../parse/obj/libparse.a
+ .else
+ LDADD+= -L${.CURDIR}/../parse
+ DPADD+= ${.CURDIR}/../parse/libparse.a
+ .endif
+
+ LDADD+= -lntp -lparse
+
+ PROG= xntpd
+ MAN8= ${.CURDIR}/../doc/xntpd.8
+ CLEANFILES+= .version version.c
+
+ SRCS= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \
+ ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \
+ ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \
+ ntp_unixclock.c ntp_util.c ntpd.c refclock_chu.c \
+ refclock_conf.c refclock_local.c refclock_pst.c \
+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
+ refclock_parse.c refclock_as2201.c refclock_omega.c \
+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
+ refclock_msfees.c refclock_gpstm.c refclock_trak.c ntp_intres.c \
+ ntp_filegen.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion xntpd
+
+ .include <bsd.prog.mk>
diff -c 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.3
*** 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 Sun Apr 3 13:43:59 1994
--- 386BSD/src/contrib/xntpd/xntpd/ntp_control.c Sun Apr 3 13:44:00 1994
***************
*** 264,278 ****
/*
* System and processor definitions. These will change for the gizmo board.
*/
! #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;
/*
* Trap structures. We only allow a few of these, and send
--- 264,271 ----
/*
* System and processor definitions. These will change for the gizmo board.
*/
! #include <sys/utsname.h>
! static struct utsname utsname;
/*
* Trap structures. We only allow a few of these, and send
***************
*** 433,438 ****
--- 426,433 ----
{
int i;
+ uname(&utsname);
+
ctl_clr_stats();
ctl_auth_keyid = 0;
***************
*** 1267,1278 ****
ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
break;
case CS_PROCESSOR:
! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
! sizeof(str_processor) - 1);
break;
case CS_SYSTEM:
! ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
! sizeof(str_system) - 1);
break;
case CS_KEYID:
ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
--- 1262,1273 ----
ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
break;
case CS_PROCESSOR:
! ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine,
! strlen(utsname.machine));
break;
case CS_SYSTEM:
! ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname,
! strlen(utsname.sysname));
break;
case CS_KEYID:
ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.3
*** 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 Sun Apr 3 13:44:01 1994
--- 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c Sun Apr 3 13:44:01 1994
***************
*** 30,35 ****
--- 30,37 ----
* PPS - supply loopfilter with PPS samples (if configured)
* PPSPPS - notify loopfilter of PPS file descriptor
*
+ * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work
+ * with FreeBSD.
* TTY defines:
* HAVE_BSD_TTYS - currently unsupported
* HAVE_SYSV_TTYS - will use termio.h
***************
*** 82,87 ****
--- 84,92 ----
#include <time.h>
#include <sys/errno.h>
+ #ifdef FREEBSD_CONRAD
+ #include <sys/ioctl.h>
+ #endif
extern int errno;
#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
***************
*** 440,446 ****
--- 445,456 ----
#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
#define RAWDCF_FORMAT "RAW DCF77 Timecode"
#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
+
+ #ifdef FREEBSD_CONRAD
+ #define RAWDCF_CFLAG (CS8|CREAD|CLOCAL)
+ #else
#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL)
+ #endif
#define RAWDCF_IFLAG 0
#define RAWDCF_OFLAG 0
#define RAWDCF_LFLAG 0
***************
*** 1482,1492 ****
--- 1492,1513 ----
struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
register int count;
register char *s;
+ #ifdef FREEBSD_CONRAD
+ struct timeval foo;
+ #endif
+
/*
* eat all characters, parsing then and feeding complete samples
*/
count = rbufp->recv_length;
s = rbufp->recv_buffer;
+ #ifdef FREEBSD_CONRAD
+ ioctl(parse->fd,TIOCTIMESTAMP,&foo);
+ TVTOTS(&foo, &rbufp->recv_time);
+ rbufp->recv_time.l_uf += TS_ROUNDBIT;
+ rbufp->recv_time.l_ui += JAN_1970;
+ rbufp->recv_time.l_uf &= TS_MASK;
+ #endif
while (count--)
{
***************
*** 2271,2277 ****
tm.c_iflag = clockinfo[type].cl_iflag;
tm.c_oflag = clockinfo[type].cl_oflag;
tm.c_lflag = clockinfo[type].cl_lflag;
!
if (TTY_SETATTR(fd232, &tm) == -1)
{
syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
--- 2292,2301 ----
tm.c_iflag = clockinfo[type].cl_iflag;
tm.c_oflag = clockinfo[type].cl_oflag;
tm.c_lflag = clockinfo[type].cl_lflag;
! #ifdef FREEBSD_CONRAD
! tm.c_ispeed = 50;
! tm.c_ospeed = 50;
! #endif
if (TTY_SETATTR(fd232, &tm) == -1)
{
syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
***************
*** 2314,2319 ****
--- 2338,2358 ----
return 0; /* well, ok - special initialisation broke */
}
+ #ifdef FREEBSD_CONRAD
+ {
+ int i,j;
+ struct timeval tv;
+ ioctl(parse->fd,TIOCTIMESTAMP,&tv);
+ j = TIOCM_RTS;
+ i = ioctl(fd232, TIOCMBIC, &j);
+ if (i < 0) {
+ syslog(LOG_ERR,
+ "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m",
+ CL_UNIT(parse->unit));
+ }
+ }
+ #endif
+
strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.2
*** 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 Sun Apr 3 13:44:02 1994
--- 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c Sun Apr 3 13:44:02 1994
***************
*** 14,19 ****
--- 14,21 ----
#include "ntp_refclock.h"
#include "ntp_unixtime.h"
+ static void gps_send();
+
#if defined(HAVE_BSD_TTYS)
#include <sgtty.h>
#endif /* HAVE_BSD_TTYS */
***************
*** 841,847 ****
/*
* usually trak_receive can get a timestamp every second
*/
! #ifndef TRAKPPS && TRAKCLK
gettstamp(&gps->lastrec);
#endif
gps->polls++;
--- 843,849 ----
/*
* usually trak_receive can get a timestamp every second
*/
! #if !defined(TRAKPPS) && !defined(TRAKCLK)
gettstamp(&gps->lastrec);
#endif
gps->polls++;
diff -c /dev/null 386BSD/src/contrib/xntpd/xntpdc/Makefile:1.2
*** /dev/null Sun Apr 3 13:44:03 1994
--- 386BSD/src/contrib/xntpd/xntpdc/Makefile Sun Apr 3 13:44:03 1994
***************
*** 0 ****
--- 1,28 ----
+ #
+ # $Id: Makefile,v 1.2 1993/12/22 11:34:00 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= xntpdc
+ MAN8= ${.CURDIR}/../doc/xntpdc.8
+ CLEANFILES+= .version version.c
+
+ SRCS= ntpdc.c ntpdc_ops.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion xntpdc
+
+ .include <bsd.prog.mk>
diff -c 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.2
*** 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 Sun Apr 3 13:44:04 1994
--- 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c Sun Apr 3 13:44:04 1994
***************
*** 53,59 ****
static int getarg P((char *, int, arg_v *));
static int getnetnum P((char *, U_LONG *, char *));
static void help P((struct parse *, FILE *));
! #if defined(sgi) || defined(SYS_BSDI)
static int helpsort P((const void *, const void *));
#else
static int helpsort P((char **, char **));
--- 53,59 ----
static int getarg P((char *, int, arg_v *));
static int getnetnum P((char *, U_LONG *, char *));
static void help P((struct parse *, FILE *));
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
static int helpsort P((const void *, const void *));
#else
static int helpsort P((char **, char **));
***************
*** 1153,1159 ****
for (xcp = opcmds; xcp->keyword != 0; xcp++)
cmdsort[n++] = xcp->keyword;
! #if defined(sgi) || defined(SYS_BSDI)
qsort((void *)cmdsort, n, sizeof(char *), helpsort);
#else
qsort((char *)cmdsort, n, sizeof(char *), helpsort);
--- 1153,1159 ----
for (xcp = opcmds; xcp->keyword != 0; xcp++)
cmdsort[n++] = xcp->keyword;
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
qsort((void *)cmdsort, n, sizeof(char *), helpsort);
#else
qsort((char *)cmdsort, n, sizeof(char *), helpsort);
***************
*** 1199,1205 ****
* helpsort - do hostname qsort comparisons
*/
static int
! #if defined(sgi) || defined(SYS_BSDI)
helpsort(t1, t2)
const void *t1;
const void *t2;
--- 1199,1205 ----
* helpsort - do hostname qsort comparisons
*/
static int
! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
helpsort(t1, t2)
const void *t1;
const void *t2;
diff -c /dev/null 386BSD/src/contrib/xntpd/xntpres/Makefile:1.2
*** /dev/null Sun Apr 3 13:44:05 1994
--- 386BSD/src/contrib/xntpd/xntpres/Makefile Sun Apr 3 13:44:05 1994
***************
*** 0 ****
--- 1,28 ----
+ #
+ # $Id: Makefile,v 1.2 1993/12/22 11:34:09 rgrimes Exp $
+ #
+
+ CFLAGS+= -I${.CURDIR}/../include
+
+ .if exists(${.CURDIR}/../lib/obj)
+ LDADD+= -L${.CURDIR}/../lib/obj
+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
+ .else
+ LDADD+= -L${.CURDIR}/../lib
+ DPADD+= -L${.CURDIR}/../lib/libntp.a
+ .endif
+
+ LDADD+= -lntp
+
+ PROG= xntpres
+ NOMAN=
+ CLEANFILES+= .version version.c
+
+ SRCS= xntpres.c version.c
+
+ beforedepend: version.c
+
+ version.c: ${.CURDIR}/../VERSION
+ ${.CURDIR}/../scripts/mkversion xntpres
+
+ .include <bsd.prog.mk>
-GAWollman
--
Garrett A. Wollman | Shashish is simple, it's discreet, it's brief. ...
wollman@lcs.mit.edu | Shashish is the bonding of hearts in spite of distance.
formerly known as | It is a bond more powerful than absence. We like people
wollman@emba.uvm.edu | who like Shashish. - Claude McKenzie + Florent Vollant
[no save]


View File

@ -0,0 +1,42 @@

Received: from louie.udel.edu by huey.udel.edu id aa18708; 7 Apr 94 14:50 EDT
Received: from mudshark.artisoft.com by louie.udel.edu id aa16541;
7 Apr 94 14:46 EDT
Received: by mudshark.artisoft.com id AA11987
(5.67b/IDA-1.5 for mills@udel.edu); Thu, 7 Apr 1994 11:46:32 -0700
Date: Thu, 7 Apr 1994 11:46:32 -0700
From: Matt Day <mday@artisoft.com>
Message-Id: <199404071846.AA11987@mudshark.artisoft.com>
To: mills@udel.edu
Subject: XNTP bug on Linux
adjtime() on Linux fails if you try to adjust more than 131072
microseconds. This causes `ntpdate' to fail on Linux when the system
clock is off by more than 131072 microseconds but less than
NTPDATE_THRESHOLD (500 ms).
Reducing NTPDATE_THRESHOLD to less than 131072 microseconds fixed the
problem.
From the comments in the code for Linux's adjtime(), it looks like this
problem might go away someday.
Thanks!
*** ntpdate.h- Tue Aug 24 14:29:30 1993
--- ntpdate.h Thu Apr 7 11:33:53 1994
***************
*** 54,60 ****
--- 54,64 ----
* are close, or step the time if the times are farther apart. The
* following defines what is "close".
*/
+ #ifdef linux
+ #define NTPDATE_THRESHOLD (FP_SECOND / 8) /* 1/8 second */
+ #else
#define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
+ #endif
/*
* When doing adjustments, ntpdate actually overadjusts (currently


View File

@ -0,0 +1,204 @@

Received: from louie.udel.edu by huey.udel.edu id aa25219; 8 Apr 94 17:07 EDT
Received: from ni.umd.edu by louie.udel.edu id aa03359; 8 Apr 94 16:58 EDT
Received: by ni.umd.edu id AA18341
(5.65c/IDA-1.4.4 for ntp-list); Fri, 8 Apr 1994 16:55:09 -0400
Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA18337
(5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Fri, 8 Apr 1994 16:55:02 -0400
Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
id AA16356; Fri, 8 Apr 94 16:54:44 EDT
Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
id AA10459; Fri, 8 Apr 94 16:54:36 EDT via
Message-Id: <9404082054.AA10459@repo.unipress.com>
To: ntp@ni.umd.edu
Subject: Re: xntp for univel/unix-ware on x86
Date: Fri, 08 Apr 94 16:54:31 -0400
From: Ray Schnitzler <ras@unipress.com>
I am happy (but not particularly proud - it's more than a
little rough around the edges) to report a working
xntpd for Univel.
It wound up being a hack on solaris, svr4, and (for the lack
of kernel tickadj) irix.
util/tickadj does *not* work, even for controlling 'tick'.
I'm not sure what the right behavior should be.
Most of the changes are signalled by SYS_UNIVEL, as
initiated by OS=univel.
There are many additional loose ends, which are not terribly
important to me to clean up, since the univel is a
very low usage machine, here, and my because
employer expects me to be working on other things,
altogether.
Nevertheless, it seems to work.
Special thanks go to Denton Gentry for advice along the way.
Enjoy.
Here are the changes I made. First, the (new)
machines/univel file, and then the (rest of the)
context diffs:
*** /dev/null Fri Apr 8 16:49:24 1994
--- machines/univel Fri Apr 8 12:38:20 1994
***************
*** 0 ****
--- 1,10 ----
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS=
+ DAEMONLIBS= -lnsl -lsocket -lelf
+ RESLIB= -lnsl -lsocket -lelf
+ INSTALL=$(TOP)scripts/install.sh
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
*** authstuff/authspeed.c.orig Thu Jan 27 09:03:12 1994
--- authstuff/authspeed.c Fri Apr 8 14:19:35 1994
***************
*** 2,8 ****
* authspeed - figure out how LONG it takes to do an NTP encryption
*/
! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
#define FAKE_RUSAGE
#endif
--- 2,8 ----
* authspeed - figure out how LONG it takes to do an NTP encryption
*/
! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIVEL)
#define FAKE_RUSAGE
#endif
*** include/ntp_if.h.orig Mon Nov 15 16:21:29 1993
--- include/ntp_if.h Fri Apr 8 14:51:49 1994
***************
*** 16,21 ****
--- 16,25 ----
#include <sys/sockio.h>
#endif
+ #if defined(SYS_UNIVEL)
+ #include <sys/sockio.h>
+ #endif
+
#if defined(SYS_PTX) || defined(SYS_SINIXM)
#include <sys/stream.h>
#include <sys/stropts.h>
*** include/ntp_machine.h.orig Mon Mar 14 02:47:02 1994
--- include/ntp_machine.h Fri Apr 8 14:45:42 1994
***************
*** 526,531 ****
--- 526,563 ----
#endif
/*
+ * Univel SVR4 on intel x86 processor
+ */
+ #if defined(SYS_UNIVEL)
+ /* #define _POSIX_SOURCE */
+ #define NTP_POSIX_SOURCE
+ #define HAVE_ATT_NICE
+ #define HAVE_READKMEM
+ #define USE_PROTOTYPES
+ #undef HAVE_ATT_SETPGRP
+ #define UDP_WILDCARD_DELIVERY
+ #define HAVE_SIGNALED_IO
+ #define USE_TTY_SIGPOLL
+ #define USE_UDP_SIGPOLL
+ #define STREAM
+ #define STREAMS
+ #ifndef STREAMS_TLI
+ /*#define STREAMS_TLI*/
+ #endif
+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
+ #undef STEP_SLEW /* TWO step */
+ #define LOCK_PROCESS
+ #undef SYSV_TIMEOFDAY
+ #define SIZE_RETURNED_IN_BUFFER
+ #define RETSIGTYPE void
+ #include <sys/types.h>
+ #include <netinet/in_systm.h>
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Univel"
+ #endif
+ #endif
+
+ /*
* DomainOS
*/
#if defined(SYS_DOMAINOS)
*** xntpd/ntp_unixclock.c.orig Thu Feb 3 00:20:20 1994
--- xntpd/ntp_unixclock.c Fri Apr 8 14:40:55 1994
***************
*** 255,260 ****
--- 255,277 ----
/* Define the following to be what the tick and tickadj variables are
* called in your kernel.
*/
+ #if defined(SYS_UNIVEL)
+ /*
+ * clock_parms - return the local clock tickadj and tick parameters
+ *
+ * The values set here were determined experimentally on a 486 system
+ * I'm not confident in them. - RAS
+ *
+ */
+ static void
+ clock_parms(tickadj, tick)
+ U_LONG *tickadj;
+ U_LONG *tick;
+ {
+ *tick = 10000; /* microseconds */
+ *tickadj = 80; /* microseconds */
+ }
+ #else /* SYS_UNIVEL */
#if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
#define K_TICKADJ_NAME "tickadj"
***************
*** 421,427 ****
}
#endif /* sgi */
-
#ifdef NOKMEM
#ifndef HZ
--- 438,443 ----
***************
*** 571,573 ****
--- 587,590 ----
*tick = (U_LONG)txc.tick;
}
#endif /* SYS_LINUX */
+ #endif /* SYS_UNIVEL */
*** xntpd/ntpd.c.orig Wed Feb 16 22:09:35 1994
--- xntpd/ntpd.c Fri Apr 8 16:35:57 1994
***************
*** 14,20 ****
#include <sys/rtprio.h>
#endif
! #if defined(SYS_SVR4)
#include <termios.h>
#endif
--- 14,20 ----
#include <sys/rtprio.h>
#endif
! #if defined(SYS_SVR4) || defined (SYS_UNIVEL)
#include <termios.h>
#endif


View File

@ -0,0 +1,226 @@

Received: from louie.udel.edu by huey.udel.edu id aa09565; 11 Apr 94 13:04 EDT
Received: from ni.umd.edu by louie.udel.edu id aa10661; 11 Apr 94 12:57 EDT
Received: by ni.umd.edu id AA00787
(5.65c/IDA-1.4.4 for ntp-list); Mon, 11 Apr 1994 12:50:20 -0400
Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA00783
(5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Mon, 11 Apr 1994 12:50:13 -0400
Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
id AA26905; Mon, 11 Apr 94 12:49:43 EDT
Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
id AA03031; Mon, 11 Apr 94 12:49:27 EDT via
Message-Id: <9404111649.AA03031@repo.unipress.com>
To: ntp@ni.umd.edu
Subject: Re: xntp for univel/unix-ware on x86
Date: Mon, 11 Apr 94 12:49:25 -0400
From: Ray Schnitzler <ras@unipress.com>
As seems usual, every patch is followed by a re-patch. This
is a (modified) re-posting of patches to make xntp
work on unixware svr4. It now uses
machines/unixware1 and SYS_UNIXWARE1 (instead of
univel, as suggested by J J Farrell), and now
includes some RELNOTES and COPYRIGHT text (as
suggested by Dave)
It is still rough, but it still works. The tickadj utility
still does *not* work, even for controlling 'tick'.
I'm not sure what the right behavior should be since
there is no 'tickadj' kernel var.
In addition to the credits I mentioned above, special thanks
go to Denton Gentry for advice along the way.
Enjoy.
Ray Schnitzler
UniPress Software, Inc.
------------------------------------------------------------
Here are the changes I made. First, the (new)
machines/univel file, and then the (rest of the)
context diffs:
*** machines/unixware1.3.3p Fri Apr 8 16:48:35 1994
--- machines/unixware1 Mon Apr 11 11:08:10 1994
***************
*** 0 ****
--- 1,10 ----
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
+ DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\"
+ AUTHDEFS= -DDES -DMD5
+ CLOCKDEFS=
+ DAEMONLIBS= -lnsl -lsocket -lelf
+ RESLIB= -lnsl -lsocket -lelf
+ INSTALL=$(TOP)scripts/install.sh
+ SHELL= /bin/sh
+ RANLIB= ls # ar does the work of ranlib under System V
*** COPYRIGHT.3.3p Thu Feb 3 00:20:07 1994
--- COPYRIGHT Mon Apr 11 10:47:24 1994
***************
*** 55,58 ****
--- 55,59 ----
* Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
* Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
* Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
+ * Ray Schnitzler <schnitz@unipress.com> (First pass at a Unixware1 port.)
*/
*** RELNOTES.3.3p Thu Jan 27 09:33:09 1994
--- RELNOTES Mon Apr 11 11:14:35 1994
***************
*** 140,145 ****
--- 140,146 ----
PC BSD/386 1.0 gcc LOCAL_CLOCK possibly see "build problems"
PC Linux (pl14) gcc LOCAL_CLOCK (dw 93/10/30)
PC Dell SVR4 v2.2 gcc ? (tl 93/12/30)
+ PC Unixware1/SVR4 cc no tickadj, ? (ras 93/04/11)
NCR3445 NCR SVR4 cc LOCAL_CLOCK (tm 93/11/29)
pb: Piete Brooks
***************
*** 149,154 ****
--- 150,156 ----
tl: Tony Lill <ajlill@tlill.hookup.net>
tm: Tom Moore <Tom.Moore@DaytonOH.NCR.COM>
jmj: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
+ ras: Ray Schnitzler <schnitz@unipress.com>
Build Problems (and workaround):
*** authstuff/authspeed.c.3.3p Thu Jan 27 09:03:12 1994
--- authstuff/authspeed.c Mon Apr 11 10:29:47 1994
***************
*** 2,8 ****
* authspeed - figure out how LONG it takes to do an NTP encryption
*/
! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
#define FAKE_RUSAGE
#endif
--- 2,8 ----
* authspeed - figure out how LONG it takes to do an NTP encryption
*/
! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIXWARE1)
#define FAKE_RUSAGE
#endif
*** include/ntp_if.h.3.3p Mon Nov 15 16:21:29 1993
--- include/ntp_if.h Mon Apr 11 10:30:21 1994
***************
*** 16,21 ****
--- 16,25 ----
#include <sys/sockio.h>
#endif
+ #if defined(SYS_UNIXWARE1)
+ #include <sys/sockio.h>
+ #endif
+
#if defined(SYS_PTX) || defined(SYS_SINIXM)
#include <sys/stream.h>
#include <sys/stropts.h>
*** include/ntp_machine.h.3.3p Mon Mar 14 02:47:02 1994
--- include/ntp_machine.h Mon Apr 11 10:31:11 1994
***************
*** 526,531 ****
--- 526,565 ----
#endif
/*
+ * (Univel/Novell) Unixware1 SVR4 on intel x86 processor
+ */
+ #if defined(SYS_UNIXWARE1)
+ /* #define _POSIX_SOURCE */
+ #undef HAVE_ATT_SETPGRP
+ #define USE_PROTOTYPES
+ #define NTP_POSIX_SOURCE
+ #define HAVE_ATT_NICE
+ #define HAVE_READKMEM
+ #define USE_TTY_SIGPOLL
+ #define USE_UDP_SIGPOLL
+ #define UDP_WILDCARD_DELIVERY
+ #undef HAVE_SIGNALED_IO
+ #define STREAM
+ #define STREAMS
+ #ifndef STREAMS_TLI
+ /*#define STREAMS_TLI*/
+ #endif
+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
+ #undef STEP_SLEW /* TWO step */
+ #define LOCK_PROCESS
+ #define NO_SIGNED_CHAR_DECL
+ #undef SYSV_TIMEOFDAY
+ #define SIZE_RETURNED_IN_BUFFER
+ #define RETSIGTYPE void
+ #include <sys/sockio.h>
+ #include <sys/types.h>
+ #include <netinet/in_systm.h>
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Unixware1"
+ #endif
+ #endif
+
+ /*
* DomainOS
*/
#if defined(SYS_DOMAINOS)
*** xntpd/ntp_unixclock.c.3.3p Thu Feb 3 00:20:20 1994
--- xntpd/ntp_unixclock.c Mon Apr 11 10:33:23 1994
***************
*** 255,260 ****
--- 255,277 ----
/* Define the following to be what the tick and tickadj variables are
* called in your kernel.
*/
+ #if defined(SYS_UNIXWARE1)
+ /*
+ * clock_parms - return the local clock tickadj and tick parameters
+ *
+ * The values set here were determined experimentally on a 486 system
+ * I'm not confident in them. - RAS
+ *
+ */
+ static void
+ clock_parms(tickadj, tick)
+ U_LONG *tickadj;
+ U_LONG *tick;
+ {
+ *tick = 10000; /* microseconds */
+ *tickadj = 80; /* microseconds */
+ }
+ #else /* SYS_UNIXWARE1 */
#if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
#define K_TICKADJ_NAME "tickadj"
***************
*** 571,573 ****
--- 587,590 ----
*tick = (U_LONG)txc.tick;
}
#endif /* SYS_LINUX */
+ #endif /* SYS_UNIXWARE1 */
*** xntpd/ntpd.c.3.3p Wed Feb 16 22:09:35 1994
--- xntpd/ntpd.c Mon Apr 11 10:33:58 1994
***************
*** 14,20 ****
#include <sys/rtprio.h>
#endif
! #if defined(SYS_SVR4)
#include <termios.h>
#endif
--- 14,21 ----
#include <sys/rtprio.h>
#endif
! /* Shouldn't this test for HAVE_TERMIOS - RAS */
! #if defined(SYS_SVR4) || defined (SYS_UNIXWARE1)
#include <termios.h>
#endif


View File

@ -0,0 +1,78 @@

Received: from louie.udel.edu by huey.udel.edu id aa21593; 13 Apr 94 8:23 EDT
Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa20245;
13 Apr 94 8:15 EDT
Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
id m0pr3rH-0005s0C; Wed, 13 Apr 94 08:15 EDT
Message-Id: <m0pr3rH-0005s0C@jagubox.gsfc.nasa.gov>
From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
Subject: Minor change for ntp_loopfilter (and loop.c) in 3.3q
To: Mills@udel.edu
Date: Wed, 13 Apr 1994 08:15:55 -0400 (EDT)
Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
X-Mailer: ELM [version 2.4 PL23]
Content-Type: text
Content-Length: 1738
One of the changes between 3.3p and 3.3q was the format change of the syslog
message when the clock is reset when xntpd sees a "large" offset. This change
is nice, but it would be "better" is the notice also made mention of whether
the reset was a step or slew (as defined by SLEWALWAYS).
This patch adds that:
*** xntpd/Oloop.c Wed Apr 13 08:05:09 1994
--- xntpd/loop.c Wed Apr 13 08:06:32 1994
***************
*** 458,464 ****
lfptoa(fp_offset, 6));
return (0);
}
! syslog(LOG_NOTICE, "clock reset %s\n",
lfptoa(fp_offset, 6));
step_systime(fp_offset);
clock_adjust = 0;
--- 458,469 ----
lfptoa(fp_offset, 6));
return (0);
}
! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
! #ifdef SLEWALWAYS
! "slew",
! #else
! "step",
! #endif
lfptoa(fp_offset, 6));
step_systime(fp_offset);
clock_adjust = 0;
*** xntpd/Ontp_loopfilter.c Wed Apr 13 08:05:23 1994
--- xntpd/ntp_loopfilter.c Wed Apr 13 08:07:03 1994
***************
*** 458,464 ****
lfptoa(fp_offset, 6));
return (0);
}
! syslog(LOG_NOTICE, "clock reset %s\n",
lfptoa(fp_offset, 6));
step_systime(fp_offset);
clock_adjust = 0;
--- 458,469 ----
lfptoa(fp_offset, 6));
return (0);
}
! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
! #ifdef SLEWALWAYS
! "slew",
! #else
! "step",
! #endif
lfptoa(fp_offset, 6));
step_systime(fp_offset);
clock_adjust = 0;
--
#include <std/disclaimer.h>
Jim Jagielski | "Is this something you can share with
jim@jagubox.gsfc.nasa.gov | the rest of us Amazing Larry!!??"
NASA/GSFC, Code 734.4 | Pee Wee
Greenbelt, MD 20771 |


File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,92 @@

Received: from louie.udel.edu by huey.udel.edu id aa23994; 13 Apr 94 15:58 EDT
Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa07113;
13 Apr 94 15:44 EDT
Received: by adrastea.lcs.mit.edu; id AA04845; Wed, 13 Apr 1994 15:44:23 -0400
Date: Wed, 13 Apr 1994 15:44:23 -0400
From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
Message-Id: <9404131944.AA04845@adrastea.lcs.mit.edu>
To: Mills@udel.edu
Cc: Garrett Wollman <wollman@adrastea.lcs.mit.edu>,
Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Subject: Re: You xntp modifications...
In-Reply-To: <9404122159.aa18355@huey.udel.edu>
References: <9404122159.aa18355@huey.udel.edu>
<<On Tue, 12 Apr 94 21:59:57 EDT, Mills@udel.edu said:
> Note that we are two versions further along, what with the average of
> a patch per day, so it would be survivable if this issue could be
> cleared up ASAP.
This patch, applied relative to my previous patch, provides for both
behaviors.
*** xntpd/xntpd/ntp_control.c Wed Apr 13 12:37:51 1994
--- ntp_control.c Wed Apr 13 12:38:42 1994
***************
*** 264,271 ****
--- 264,283 ----
/*
* 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
***************
*** 426,433 ****
--- 438,447 ----
{
int i;
+ #ifdef HAVE_UNAME
uname(&utsname);
+ #endif /* HAVE_UNAME */
ctl_clr_stats();
ctl_auth_keyid = 0;
***************
*** 1262,1273 ****
--- 1276,1297 ----
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:
+ #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);
[no save]


View File

@ -0,0 +1,50 @@

Received: from louie.udel.edu by huey.udel.edu id aa13197; 16 Apr 94 22:05 EDT
Received: from motgate.mot.com by louie.udel.edu id aa18176; 16 Apr 94 21:57 EDT
Received: from pobox.mot.com ([129.188.137.100]) by motgate.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
id AA01015; Sat, 16 Apr 1994 20:57:21 -0500
Received: from merlin.dev.cdx.mot.com by pobox.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
id AA29067; Sat, 16 Apr 1994 20:57:19 -0500
Received: from ronald.dev.cdx.mot.com (ronald.dev.cdx.mot.com [134.33.39.18]) by merlin.dev.cdx.mot.com (8.6.5/8.6.5) with ESMTP id VAA06544; Sat, 16 Apr 1994 21:57:12 -0400
From: "Gregory M. Paris" <paris@merlin.dev.cdx.mot.com>
Received: from localhost (paris@localhost) by ronald.dev.cdx.mot.com (8.6.5/8.6.5) id VAA22231; Sat, 16 Apr 1994 21:57:11 -0400
Date: Sat, 16 Apr 1994 21:57:11 -0400
Message-Id: <199404170157.VAA22231@ronald.dev.cdx.mot.com>
To: mills@udel.edu
Subject: 3.3y patch
Dave,
I had the same problem compiling 3.3p as I got with 3.3y. The fix
was to move a #endif that seems to be out of place in xntpd/ntp_unixclock.c.
It now compiles fine on my HP-UX 9.03. Here's the patch.
Greg
--
Greg Paris <paris@merlin.dev.cdx.mot.com>
Motorola Inc, Information Systems Group, 20 Cabot Blvd, Mansfield, MA 02048-1193
"Your Plastic Pal who's fun to be with." TM Sirius Cybernetics
These posts are self-disclamatory.
##################################################
*** xntpd/ntp_unixclock.c.orig Mon Apr 11 22:19:21 1994
--- xntpd/ntp_unixclock.c Sat Apr 16 21:49:15 1994
***************
*** 386,391 ****
--- 386,392 ----
#undef K_TICK_NAME
#undef N_NAME
}
+ #endif /* SYS_UNIXWARE1 */
#endif /* HAVE_READKMEM */
#if defined(SOLARIS)&&defined(ADJTIME_IS_ACCURATE)
***************
*** 583,586 ****
*tick = (U_LONG)txc.tick;
}
#endif /* SYS_LINUX */
- #endif /* SYS_UNIXWARE1 */
--- 584,586 ----


View File

@ -0,0 +1,38 @@

Received: from louie.udel.edu by huey.udel.edu id aa00358; 19 Apr 94 17:48 EDT
Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa12986;
19 Apr 94 17:40 EDT
Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:39:48 +0100
To: Mills@udel.edu
cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
Subject: Re: Multicast NTP - take 1
In-reply-to: Your message of Tue, 19 Apr 1994 12:29:25 -0400. <9404191229.aa28742@huey.udel.edu>
Date: Tue, 19 Apr 1994 22:39:44 +0100
From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
Message-ID: <"swan.cl.cam.:138990:940419214000"@cl.cam.ac.uk>
Shucks !
I omitted the "-c" to diff ...
*** xntpd/refclock_msfees.c.dist Thu Jan 27 14:03:59 1994
--- xntpd/refclock_msfees.c Tue Apr 19 10:58:57 1994
***************
*** 139,145 ****
#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
#ifndef STREAM_PP1
! #define STREAM_PP1 "ppsclockd\0<-- patch space for module name1 -->"
#endif
#ifndef STREAM_PP2
#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
--- 139,145 ----
#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
#ifndef STREAM_PP1
! #define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
#endif
#ifndef STREAM_PP2
#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"


View File

@ -0,0 +1,48 @@

Received: from louie.udel.edu by huey.udel.edu id aa00412; 19 Apr 94 18:04 EDT
Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa13181;
19 Apr 94 17:44 EDT
Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:44:05 +0100
To: Mills@udel.edu
cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
Subject: Re: Cisco/Multicast/ntp3.3m
In-reply-to: Your message of Tue, 19 Apr 1994 12:24:31 -0400. <9404191224.aa28707@huey.udel.edu>
Date: Tue, 19 Apr 1994 22:43:58 +0100
From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
Message-ID: <"swan.cl.cam.:140740:940419214417"@cl.cam.ac.uk>
> Yes, I think you have caught all the gotchas.
I fear not :-((
> I take it you have the latest kernel mods.
Look for a call sign I assume ....
Do I take it that they are **REQUIRED** ? :-(((
Other problems .....
It appears that you have your own in.h in include/ntp_in.h
I suspect that that is why things are failing ...
Why not use the syatem's own in.h ??
To make it compile I added:
*** include/ntp_in.h.dist Thu Apr 14 16:20:29 1994
--- include/ntp_in.h Tue Apr 19 21:40:12 1994
***************
*** 19,24 ****
--- 19,27 ----
#ifndef _netinet_in_h
#define _netinet_in_h
+ #define _NETINET_IN_H_
+ #define _SYS_IN_INCLUDED
+ #define __IN_HEADER
/*
* Protocols


View File

@ -0,0 +1,49 @@

Received: from louie.udel.edu by huey.udel.edu id aa14816; 27 Jan 94 5:15 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa11733;
27 Jan 94 5:09 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA25056 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 11:09:06 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA09091 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 11:09:03 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199401271009.AA09091@faui43.informatik.uni-erlangen.de>
Subject: Re: Solaribum
To: Mills@udel.edu
Date: Thu, 27 Jan 94 11:08:55 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
Paul_Vixie@corpmis.sjc.hw.sony.com
In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
X-Mailer: ELM [version 2.3 PL11]
And another corer generator to be removed:
===================================================================
RCS file: /src/NTP/REPOSITORY/v3/xntpd/ntp_control.c,v
retrieving revision 3.22
diff -c -r3.22 xntpd/ntp_control.c
*** xntpd/ntp_control.c:3.22 1994/01/26 21:56:23
--- xntpd/ntp_control.c 1994/01/27 10:03:01
***************
*** 2132,2138 ****
for (i = 1; i <= CC_MAXCODE; i++)
if (wants[i])
ctl_putclock(i, &clock, 1);
! for (i = 0; !(clock.kv_list[i].flags & EOV); i++)
if (wants[i+CC_MAXCODE+1])
ctl_putdata(clock.kv_list[i].text,
strlen(clock.kv_list[i].text), 0);
--- 2132,2138 ----
for (i = 1; i <= CC_MAXCODE; i++)
if (wants[i])
ctl_putclock(i, &clock, 1);
! for (i = 0; clock.kv_list && !(clock.kv_list[i].flags & EOV); i++)
if (wants[i+CC_MAXCODE+1])
ctl_putdata(clock.kv_list[i].text,
strlen(clock.kv_list[i].text), 0);
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,550 @@

Received: from louie.udel.edu by huey.udel.edu id aa17107; 27 Jan 94 14:37 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa16998;
27 Jan 94 14:34 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA29914 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 20:34:08 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA23509 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 20:34:05 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199401271934.AA23509@faui43.informatik.uni-erlangen.de>
Subject: Re: Solaribum
To: Mills@udel.edu
Date: Thu, 27 Jan 94 20:33:59 MET
Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
Paul_Vixie@corpmis.sjc.hw.sony.com
In-Reply-To: <9401271111.aa16183@huey.udel.edu>; from "Mills@udel.edu" at Jan 27, 94 11:11 am
X-Mailer: ELM [version 2.3 PL11]
> Guys,
> Two masive patches collided in midair here, leaving broken parts scattered
> over three counties. The National Time Safety Board has investigated,
> but been unable, ...
Additional efforts of the european branch of the NTPSB have uncovered
that the collision was due to low visibility across the atlantic.
And I wanted to go on:
All measures have been taken to limit the effects of the crash to a
minimum and to resume normal aircraft operation as soon as possible.
All crew members and passengers are required to apply following patch
to xntp3.3y.tar.Z for increased comfort and safety. This patch should
enable us to resume normal operation again.
After applying the patches you may remove following debris:
include/ntp_machine.h.rej
xntpd/ntp_config.c.rej
xntpd/ntp_control.c.rej
Unfortunately I did a test compile and the results of that will
extend the ground stay of the 3.3y aircraft considerably.
(You may start thinking about bringing up 3.3xx - see below)
SunOS 4.x.x does NOT have the new highly portable "memmove()"
routine. The lack of this will mean that we will have to
#define memmove(a, b, c) memcpy(a, b, c)
or find something else. I'd like to leave this to Paul.
Also on Sunos 4.x there are implicit declarations of bzero due
the the FDSET macro from the system header files. So I am not
so sure whether strictly using mem* is the best or whether we should
add b* prototypes to l_stdlib.h. I think Paul has now something
to work on. Anyhow, the patches below will rectify some problems
but the resulting code still needs much polishing (providing memmove
where it is missing e.g. SunOS4.x).
In order to get a flying version fast (3.3xx) Dave could apply my
patch he is holding to 3.3x - that should then make a workable
version. 3.3y can then be cleaned up slowly (starting with the
patches below and then port it again to the rest of the systems).
Sorry about the bad news.
> I have one more patch from Frank which I will hold on to until the aircraft
> is recertified.
That one is still to be applied because without it, it is possible
to shoot down any plane around the NTP universe that is bearing
the 3.3x banner (but can be applied to 3.3x).
For the 3.3y construction crew:
diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
*** ../yy/include/ntp_machine.h Thu Jan 27 15:03:23 1994
--- ./include/ntp_machine.h Thu Jan 27 19:13:35 1994
***************
*** 121,139 ****
to the correct broadcast address - are these
implementations broken or did the spec change ?
- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
-
DEFINITIONS FOR SYSTEM && PROCESSOR
STR_SYSTEM - value of system variable
STR_PROCESSOR - value of processor variable
You could just put the defines on the DEFS line in machines/<os> file.
! I don't since there are lost of different types compiler that a systemm might
! have, some that can do proto typing and others that cannot on the saem system.
! I get a chanse to twiddle some of the configuration paramasters at compile
! time based on compler/machine combinatsions by using this include file.
! See convex, aix and sun configurations see how complex it gets.
!
*/
--- 121,141 ----
to the correct broadcast address - are these
implementations broken or did the spec change ?
DEFINITIONS FOR SYSTEM && PROCESSOR
STR_SYSTEM - value of system variable
STR_PROCESSOR - value of processor variable
You could just put the defines on the DEFS line in machines/<os> file.
! I don't since there are lots of different types of compilers that a system might
! have, some that can do proto typing and others that cannot on the same system.
! I get a chance to twiddle some of the configuration parameters at compile
! time based on compiler/machine combinations by using this include file.
! See convex, aix and sun configurations see how complex it get.
!
! Note that it _is_ considered reasonable to add some system-specific defines
! to the machine/<os> file if it would be too inconvenient to puzzle them out
! in this file.
!
*/
diff -c -r ../yy/parse/parse.c ./parse/parse.c
*** ../yy/parse/parse.c Thu Jan 27 00:25:18 1994
--- ./parse/parse.c Thu Jan 27 20:18:58 1994
***************
*** 29,40 ****
#include "sys/time.h"
#include "sys/errno.h"
- #include "ntp_fp.h"
- #include "ntp_unixtime.h"
- #include "ntp_calendar.h"
-
- #include "parse.h"
-
#if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
/*
* Sorry, but in SunOS 4.x kernels there are no
--- 29,34 ----
***************
*** 44,51 ****
--- 38,54 ----
#define _ntp_string_h
extern void bcopy();
extern void bzero();
+ #else
+ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
+ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
#endif
+ #include "ntp_fp.h"
+ #include "ntp_unixtime.h"
+ #include "ntp_calendar.h"
+
+ #include "parse.h"
+
#include "ntp_stdlib.h"
#ifdef PARSESTREAM
diff -c -r ../yy/xntpd/ntp_config.c ./xntpd/ntp_config.c
*** ../yy/xntpd/ntp_config.c Thu Jan 27 15:03:47 1994
--- ./xntpd/ntp_config.c Thu Jan 27 19:18:40 1994
***************
*** 1,4 ****
! /* ntp_config.c,v 3.1 1993/07/06 01:11:12 jbj Exp
* ntp_config.c - read and apply configuration information
*/
#define RESOLVE_INTERNAL /* gdt */
--- 1,4 ----
! /*
* ntp_config.c - read and apply configuration information
*/
#define RESOLVE_INTERNAL /* gdt */
***************
*** 375,388 ****
break;
}
! if (errflg || optind != argc) {
(void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
(void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
(void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
(void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
exit(2);
}
! optind = 0; /* reset optind to restart getopt_l */
if (debug) {
#ifdef NTP_POSIX_SOURCE
--- 375,388 ----
break;
}
! if (errflg || ntp_optind != argc) {
(void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
(void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
(void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
(void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
exit(2);
}
! ntp_optind = 0; /* reset ntp_optind to restart ntp_getopt */
if (debug) {
#ifdef NTP_POSIX_SOURCE
***************
*** 430,437 ****
char resolver_name[MAXFILENAME];
int have_keyfile;
char keyfile[MAXFILENAME];
! extern int optind;
! extern char *optarg;
extern char *Version;
extern U_LONG info_auth_keyid;
FILEGEN *filegen;
--- 430,437 ----
char resolver_name[MAXFILENAME];
int have_keyfile;
char keyfile[MAXFILENAME];
! extern int ntp_optind;
! extern char *ntp_optarg;
extern char *Version;
extern U_LONG info_auth_keyid;
FILEGEN *filegen;
***************
*** 461,467 ****
/*
* Decode argument list
*/
! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) {
switch (c) {
case 'a':
proto_config(PROTO_AUTHENTICATE, (LONG)1);
--- 461,467 ----
/*
* Decode argument list
*/
! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) {
switch (c) {
case 'a':
proto_config(PROTO_AUTHENTICATE, (LONG)1);
***************
*** 470,476 ****
proto_config(PROTO_BROADCLIENT, (LONG)1);
break;
case 'c':
! config_file = optarg;
break;
case 'd':
#ifdef DEBUG
--- 470,476 ----
proto_config(PROTO_BROADCLIENT, (LONG)1);
break;
case 'c':
! config_file = ntp_optarg;
break;
case 'd':
#ifdef DEBUG
***************
*** 484,498 ****
do {
l_fp tmp;
! if (!atolfp(optarg, &tmp)) {
syslog(LOG_ERR,
"command line encryption delay value %s undecodable",
! optarg);
errflg++;
} else if (tmp.l_ui != 0) {
syslog(LOG_ERR,
"command line encryption delay value %s is unlikely",
! optarg);
errflg++;
} else {
proto_config(PROTO_AUTHDELAY, tmp.l_f);
--- 484,498 ----
do {
l_fp tmp;
! if (!atolfp(ntp_optarg, &tmp)) {
syslog(LOG_ERR,
"command line encryption delay value %s undecodable",
! ntp_optarg);
errflg++;
} else if (tmp.l_ui != 0) {
syslog(LOG_ERR,
"command line encryption delay value %s is unlikely",
! ntp_optarg);
errflg++;
} else {
proto_config(PROTO_AUTHDELAY, tmp.l_f);
***************
*** 501,537 ****
break;
case 'f':
! stats_config(STATS_FREQ_FILE, optarg);
break;
case 'k':
! getauthkeys(optarg);
! if ((int)strlen(optarg) >= MAXFILENAME) {
syslog(LOG_ERR,
"key file name too LONG (>%d, sigh), no name resolution possible",
MAXFILENAME);
} else {
have_keyfile = 1;
! (void)strcpy(keyfile, optarg);
}
break;
case 'p':
! stats_config(STATS_PID_FILE, optarg);
break;
case 'r':
do {
l_fp tmp;
! if (!atolfp(optarg, &tmp)) {
syslog(LOG_ERR,
"command line broadcast delay value %s undecodable",
! optarg);
} else if (tmp.l_ui != 0) {
syslog(LOG_ERR,
"command line broadcast delay value %s is unlikely",
! optarg);
} else {
proto_config(PROTO_BROADDELAY, tmp.l_f);
}
--- 501,537 ----
break;
case 'f':
! stats_config(STATS_FREQ_FILE, ntp_optarg);
break;
case 'k':
! getauthkeys(ntp_optarg);
! if ((int)strlen(ntp_optarg) >= MAXFILENAME) {
syslog(LOG_ERR,
"key file name too LONG (>%d, sigh), no name resolution possible",
MAXFILENAME);
} else {
have_keyfile = 1;
! (void)strcpy(keyfile, ntp_optarg);
}
break;
case 'p':
! stats_config(STATS_PID_FILE, ntp_optarg);
break;
case 'r':
do {
l_fp tmp;
! if (!atolfp(ntp_optarg, &tmp)) {
syslog(LOG_ERR,
"command line broadcast delay value %s undecodable",
! ntp_optarg);
} else if (tmp.l_ui != 0) {
syslog(LOG_ERR,
"command line broadcast delay value %s is unlikely",
! ntp_optarg);
} else {
proto_config(PROTO_BROADDELAY, tmp.l_f);
}
***************
*** 539,556 ****
break;
case 's':
! stats_config(STATS_STATSDIR, optarg);
break;
case 't':
do {
int tkey;
! tkey = atoi(optarg);
if (tkey <= 0 || tkey > NTP_MAXKEY) {
syslog(LOG_ERR,
"command line trusted key %s is unlikely",
! optarg);
} else {
authtrust(tkey, (LONG)1);
}
--- 539,556 ----
break;
case 's':
! stats_config(STATS_STATSDIR, ntp_optarg);
break;
case 't':
do {
int tkey;
! tkey = atoi(ntp_optarg);
if (tkey <= 0 || tkey > NTP_MAXKEY) {
syslog(LOG_ERR,
"command line trusted key %s is unlikely",
! ntp_optarg);
} else {
authtrust(tkey, (LONG)1);
}
***************
*** 559,565 ****
case 'v':
case 'V':
! set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
break;
default:
--- 559,565 ----
case 'v':
case 'V':
! set_sys_var(ntp_optarg, strlen(ntp_optarg)+1, RW | ((c == 'V') ? DEF : 0));
break;
default:
diff -c -r ../yy/xntpd/ntp_control.c ./xntpd/ntp_control.c
*** ../yy/xntpd/ntp_control.c Thu Jan 27 15:03:48 1994
--- ./xntpd/ntp_control.c Thu Jan 27 19:29:06 1994
***************
*** 1848,1854 ****
ctl_sys_num_events = 0;
gotvar += count_var(ext_sys_var);
wants = (u_char *)emalloc(gotvar);
! bzero((char *)wants, gotvar);
gotvar = 0;
while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
if (v->flags & EOV) {
--- 1848,1854 ----
ctl_sys_num_events = 0;
gotvar += count_var(ext_sys_var);
wants = (u_char *)emalloc(gotvar);
! memset((char *)wants, 0, gotvar);
gotvar = 0;
while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
if (v->flags & EOV) {
***************
*** 1904,1910 ****
if (res_authokay)
peer->num_events = 0;
wants = (u_char *)emalloc(gotvar);
! bzero((char*)wants, gotvar);
gotvar = 0;
while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
if (v->flags & EOV) {
--- 1904,1910 ----
if (res_authokay)
peer->num_events = 0;
wants = (u_char *)emalloc(gotvar);
! memset((char*)wants, 0, gotvar);
gotvar = 0;
while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
if (v->flags & EOV) {
***************
*** 2106,2112 ****
rpkt.status = htons(ctlclkstatus(&clock));
gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
wants = (u_char *)emalloc(gotvar);
! bzero((char*)wants, gotvar);
gotvar = 0;
while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
if (v->flags & EOV) {
--- 2106,2112 ----
rpkt.status = htons(ctlclkstatus(&clock));
gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
wants = (u_char *)emalloc(gotvar);
! memset((char*)wants, 0, gotvar);
gotvar = 0;
while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
if (v->flags & EOV) {
***************
*** 2578,2584 ****
*kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
if (k)
{
! bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c);
free((char *)k);
}
--- 2578,2584 ----
*kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
if (k)
{
! memmove((char *)*kv, (char *)k, sizeof(struct ctl_var)*c);
free((char *)k);
}
***************
*** 2621,2627 ****
{
free(k->text);
k->text = (char *)emalloc(size);
! bcopy(data, k->text, size);
k->flags = def;
return;
}
--- 2621,2627 ----
{
free(k->text);
k->text = (char *)emalloc(size);
! memmove(k->text, data, size);
k->flags = def;
return;
}
***************
*** 2629,2635 ****
else
{
k->text = (char *)emalloc(size);
! bcopy(data, k->text, size);
k->flags = def;
return;
}
--- 2629,2635 ----
else
{
k->text = (char *)emalloc(size);
! memmove(k->text, data, size);
k->flags = def;
return;
}
***************
*** 2637,2643 ****
}
}
t = add_var(kv, size, def);
! bcopy(data, t, size);
}
void
--- 2637,2643 ----
}
}
t = add_var(kv, size, def);
! memmove(t, data, size);
}
void
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,274 @@

Received: from louie.udel.edu by huey.udel.edu id aa21105; 28 Jan 94 9:25 EST
Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa08838;
28 Jan 94 9:20 EST
Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
id AA29169 (5.65c-6/7.3v-FAU); Fri, 28 Jan 1994 15:19:56 +0100
Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
id AA11999 (5.65c-6/7.3m-FAU); Fri, 28 Jan 1994 15:19:51 +0100
From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
Message-Id: <199401281419.AA11999@faui43.informatik.uni-erlangen.de>
Subject: Re: Solaribum
To: Paul A Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com>
Date: Fri, 28 Jan 94 14:02:02 MET
Cc: Mills@udel.edu, Frank.Kardel@informatik.uni-erlangen.de,
Piete.Brooks@cl.cam.ac.uk, Paul_Vixie@corpmis.sjc.hw.sony.com
In-Reply-To: <9401272236.AA27835@morality.sjc.hw.sony.com>; from "Paul A Vixie" at Jan 27, 94 2:36 pm
X-Mailer: ELM [version 2.3 PL11]
> >memmove() and crumps in loading with an unknown external. If the missing
> >routine is not there in SunOS 4, why not conditionally compile one
> >and be done with it?
> as i said in earlier mail, there is already a macro for memmove, to define
> it in terms of bcopy, but it is only enabled on systems that don't have a
> native memmove. include/*.h tells the story.
Ok, in order to cope with the problems (non existent memmove() and
sys header files that use bops) I fixed SUNOS4 and ULTRIX to use the
b-ops (via the NTP_NEED_BOPS define). All other should to my knowledge
use the mem* stuff (I'd rather use either mem* or b* instead of mixtures
of both).
Now, the following patch should get 3.3y (and 3.3yy) to fly
(=compile) on suns. Functional test have not been done. ULTRIX
has not been tested.
> there are too many x's and y's now. i'm confused. i promise not to send
> any more patches until the dust clears..
With this patch we should get to 3.3yyy which should be the
base for all next efforts (-> and 3.3{x,xx,y,yy} can be deleted).
May the source be with us:
diff -c -r ../yy/include/l_stdlib.h ./include/l_stdlib.h
*** ../yy/include/l_stdlib.h Thu Jan 27 15:03:21 1994
--- ./include/l_stdlib.h Fri Jan 28 12:46:31 1994
***************
*** 47,54 ****
--- 47,60 ----
extern int rand P((void));
extern int setpgrp P((int, int));
extern void srand P((unsigned int));
+ extern void bcopy P((char *, char *, int));
#endif
+ #ifndef bzero /* XXX macro prototyping clash */
+ extern void bzero P((char *, int));
+ extern int bcmp P((char *, char *, int));
+ extern void bcopy P((char *, char *, int));
+ #endif
extern char *mktemp P((char *));
extern int tolower P((int));
***************
*** 92,102 ****
--- 98,110 ----
#ifdef _ntp_string_h
#ifdef NTP_POSIX_SOURCE /* these are builtins */
+ #ifndef NTP_NEED_BOPS /* but may be emulated by bops */
extern char *memcpy();
extern char *memset();
extern int memcmp();
#endif
#endif
+ #endif
#ifdef _sys_socket_h
extern int bind P((int, struct sockaddr *, int));
***************
*** 187,192 ****
--- 195,203 ----
#ifndef NTP_POSIX_SOURCE
extern int atoi P((char *));
+ extern void bzero P((char *, int));
+ extern int bcmp P((char *, char *, int));
+ extern void bcopy P((char *, char *, int));
extern int execve P((char *, char **,char **));
extern int fork P((void));
extern int getdtablesize P((void));
diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
*** ../yy/include/ntp_machine.h Fri Jan 28 13:32:33 1994
--- ./include/ntp_machine.h Fri Jan 28 12:25:29 1994
***************
*** 168,173 ****
--- 168,174 ----
* Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
*/
#if defined(SYS_SUNOS4)
+ #define NTP_NEED_BOPS
#define NO_SIGNED_CHAR_DECL
#define HAVE_LIBKVM
#define HAVE_MALLOC_H
***************
*** 266,271 ****
--- 267,273 ----
* Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
*/
#if defined(SYS_ULTRIX)
+ #define NTP_NEED_BOPS
#define S_CHAR_DEFINED
#define HAVE_READKMEM
#define HAVE_BSD_NICE
diff -c -r ../yy/include/ntp_string.h ./include/ntp_string.h
*** ../yy/include/ntp_string.h Thu Jan 27 15:03:24 1994
--- ./include/ntp_string.h Fri Jan 28 12:36:44 1994
***************
*** 5,11 ****
#ifndef _ntp_string_h
#define _ntp_string_h
! #ifdef NTP_POSIX_SOURCE
# if defined(HAVE_MEMORY_H)
# include <memory.h>
--- 5,11 ----
#ifndef _ntp_string_h
#define _ntp_string_h
! #if defined(NTP_POSIX_SOURCE)
# if defined(HAVE_MEMORY_H)
# include <memory.h>
***************
*** 13,29 ****
# include <string.h>
! #else /* NTP_POSIX_SOURCE */
# include <strings.h>
-
# define strchr(s,c) index(s,c)
# define strrchr(s,c) rindex(s,c)
# define memcmp(a,b,c) bcmp(a,b,c)
# define memmove(t,f,c) bcopy(f,t,c)
! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c)
void ntp_memset P((char *, int, int));
! #endif /* NTP_POSIX_SOURCE */
#endif /* _ntp_string_h */
--- 13,35 ----
# include <string.h>
! #else
# include <strings.h>
# define strchr(s,c) index(s,c)
# define strrchr(s,c) rindex(s,c)
+ # ifndef NTP_NEED_BOPS
+ # define NTP_NEED_BOPS
+ # endif
+ #endif /* NTP_POSIX_SOURCE */
+
+ #ifdef NTP_NEED_BOPS
+
# define memcmp(a,b,c) bcmp(a,b,c)
# define memmove(t,f,c) bcopy(f,t,c)
! # define memset(a,x,c) if (x == 0x00) bzero(a,c); else ntp_memset((char*)a,x,c)
void ntp_memset P((char *, int, int));
! #endif /* NTP_NEED_BOPS */
#endif /* _ntp_string_h */
diff -c -r ../yy/lib/machines.c ./lib/machines.c
*** ../yy/lib/machines.c Thu Jan 27 15:03:35 1994
--- ./lib/machines.c Fri Jan 28 13:55:26 1994
***************
*** 31,37 ****
}
#endif
! #if !defined(NTP_POSIX_SOURCE)
void
ntp_memset(a, x, c)
char *a;
--- 31,37 ----
}
#endif
! #if !defined(NTP_POSIX_SOURCE) || defined(NTP_NEED_BOPS)
void
ntp_memset(a, x, c)
char *a;
diff -c -r ../yy/parse/Makefile.tmpl ./parse/Makefile.tmpl
*** ../yy/parse/Makefile.tmpl Fri Nov 26 05:28:30 1993
--- ./parse/Makefile.tmpl Fri Jan 28 13:47:30 1994
***************
*** 92,98 ****
clean:
-@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
! lintlib.errs lint.errs genassym assym.s parsestreams parse
-@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
distclean: clean
--- 92,98 ----
clean:
-@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
! lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.*
-@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
distclean: clean
diff -c -r ../yy/parse/parse.c ./parse/parse.c
*** ../yy/parse/parse.c Fri Jan 28 13:32:34 1994
--- ./parse/parse.c Fri Jan 28 13:08:01 1994
***************
*** 29,47 ****
#include "sys/time.h"
#include "sys/errno.h"
#if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
/*
! * Sorry, but in SunOS 4.x kernels there are no
* mem* operations. I don't want them - bcopy, bzero
* are fine in the kernel
*/
! #define _ntp_string_h
! extern void bcopy();
! extern void bzero();
#else
#define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
#define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
#endif
#include "ntp_fp.h"
#include "ntp_unixtime.h"
--- 29,53 ----
#include "sys/time.h"
#include "sys/errno.h"
+ #include "ntp_machine.h"
+
#if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
/*
! * Sorry, but in SunOS 4.x AND Solaris 2.x kernels there are no
* mem* operations. I don't want them - bcopy, bzero
* are fine in the kernel
*/
! #ifndef NTP_NEED_BOPS
! #define NTP_NEED_BOPS
! #endif
#else
+ #ifndef NTP_NEED_BOPS
+ #ifndef bzero
#define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
#define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
#endif
+ #endif
+ #endif
#include "ntp_fp.h"
#include "ntp_unixtime.h"
--
Frank Kardel (kardel@informatik.uni-erlangen.de)
All SCSI disks will from now on be required to send an email
notice 24 hours prior to complete hardware failure!


View File

@ -0,0 +1,44 @@

Received: from louie.udel.edu by huey.udel.edu id aa21136; 28 Jan 94 9:30 EST
Received: from relay1.uu.net by louie.udel.edu id aa09355; 28 Jan 94 9:29 EST
Received: from outpost.wg.waii.com by relay1.UU.NET with SMTP
(5.61/UUNET-internet-primary) id AAwaur00219; Fri, 28 Jan 94 09:29:28 -0500
Received: from airgun.wg.waii.com by outpost.wg.waii.com with SMTP id AA18918
(5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:23 -0600
Received: from merlin.london.waii.com by airgun.wg.waii.com with SMTP id AA18376
(5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:16 -0600
Received: from phoenix.london.waii.com by merlin.london.waii.com with SMTP id AA21698
(5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 14:24:29 GMT
Received: by phoenix.london.waii.com (4.1/SMI-4.1)
id AA21825; Fri, 28 Jan 94 14:29:12 GMT
Date: Fri, 28 Jan 94 14:29:12 GMT
From: Marc Brett <ltso@london.waii.com>
Message-Id: <9401281429.AA21825@phoenix.london.waii.com>
To: mills@udel.edu
Subject: Bug in export version of xntp.3.3c
Dave,
The crippled DES routine fails to compile on my machine (SunOS 1.4.3, cc).
It complains about U_LONG being unrecognized. Luckily, the fix is a
one-liner.
*** authdes.c.export Tue Aug 24 22:26:45 1993
--- authdes.c Fri Jan 28 12:18:40 1994
***************
*** 15,20 ****
--- 15,21 ----
* to its exportable state, copy this file to authdes.c .
*/
#include <sys/types.h>
+ #include "ntp_stdlib.h"
/*
* This routine is normally called to compute the key schedule.
Regards,
Marc Brett marc.brett@london.waii.com
Western Geophysical Tel: +44 81 560 3160


View File

@ -0,0 +1,83 @@

Received: from louie.udel.edu by huey.udel.edu id aa04410; 31 Jan 94 4:58 EST
Received: from gw.home.vix.com by louie.udel.edu id aa00370; 31 Jan 94 4:52 EST
Received: by gw.home.vix.com id AA12643; Mon, 31 Jan 94 01:52:12 -0800
Message-Id: <9401310952.AA12643@gw.home.vix.com>
X-Btw: vix.com is also gw.home.vix.com and vixie.sf.ca.us
To: Mills@udel.edu
Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk
Subject: diffs to yyy to make ultrix/GOES happy
Date: Mon, 31 Jan 94 01:52:11 PST
From: Paul A Vixie <vixie@vix.com>
diff -r -c2 yyy.ref/adjtime/adjtimed.c xntp3.3yyy/adjtime/adjtimed.c
*** yyy.ref/adjtime/adjtimed.c Thu Jan 27 06:03:11 1994
--- xntp3.3yyy/adjtime/adjtimed.c Mon Jan 31 01:24:49 1994
***************
*** 82,86 ****
--- 82,90 ----
progname = argv[0];
+ #ifdef LOG_LOCAL6
openlog("adjtimed", LOG_PID, LOG_LOCAL6);
+ #else
+ openlog("adjtimed", LOG_PID);
+ #endif
while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
diff -r -c2 yyy.ref/include/ntp_machine.h xntp3.3yyy/include/ntp_machine.h
*** yyy.ref/include/ntp_machine.h Fri Jan 28 07:26:11 1994
--- xntp3.3yyy/include/ntp_machine.h Mon Jan 31 01:01:11 1994
***************
*** 42,47 ****
! WHICH TERMINAL MODEL TO USE - I would assume HAVE_POSIX_TTYS if
! NTP_POSIX_SOURCE was set but cann't. The
posix tty driver is too restrictive on most systems.
It defined if you define STREAMS.
--- 42,47 ----
! WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
! NTP_POSIX_SOURCE was set but can't. The
posix tty driver is too restrictive on most systems.
It defined if you define STREAMS.
***************
*** 50,54 ****
HAVE_BSD_TTYS - Use BSD stty.h
HAVE_TERMIOS - Use POSIX termios.h
- HAVE_POSIX_TTYS - "struct termios" has c_line defined
THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
--- 50,53 ----
***************
*** 268,272 ****
*/
#if defined(SYS_ULTRIX)
- #define NTP_NEED_BOPS
#define S_CHAR_DEFINED
#define HAVE_READKMEM
--- 267,270 ----
***************
*** 277,280 ****
--- 275,279 ----
#define STR_SYSTEM "UNIX/Ultrix"
#endif
+ #define HAVE_TERMIOS
#endif
***************
*** 565,568 ****
--- 564,573 ----
&& !defined(HAVE_NO_NICE)
ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
+ #endif
+
+ #if !defined(HAVE_SYSV_TTYS) \
+ && !defined(HAVE_BSD_TTYS) \
+ && !defined(HAVE_TERMIOS)
+ ERROR no_tty_type_defined
#endif


View File

@ -78,7 +78,7 @@ if [ -f /bin/uname -o -f /usr/bin/uname ]; then
3.2.*)
case "$4" in
v*)
(i386) >/dev/null 2>&1 && guess=ptx;;
(i386) >/dev/null 2>&1 && [ -f /usr/lib/libseq.a ] && guess=ptx;;
esac
esac
fi

View File

@ -3,20 +3,27 @@ Statistics processing scripts (README)
This directory contains a number of scripts for use with the filegen
facility. Those files ending in .awk are for the Unix awk utility, while
those ending in .sh are for the csh utility. Normally, the summary.sh
script is called from a cron job once per day. This script calls the
peer.sh script to process the peerstats file and append the summary
statistics to the peer_summary file. Then, it callse the loop.sh script
to process the loopstats file and append the summary statistics to the
loop_summary file. Finally, it calls the clock.sh script to process the
clockstats file and append the summary statistics to the clock_summary
file.
script is called from a cron job once per day. This script processes the
daily loopstats, peerstats and clockstats files produced by the daemon,
updates the loop_summary, peer_summary and clock_summary archive files,
and deletes the daily files.
Each of the three shell scripts peer.sh, loop.sh and clock.sh invoke
one or more awk scripts to actually produce the data. This may result
in multiple scans of the same input file. The input file is deleted after
processing. In fact, the shell scripts will process all input files
found of the correct type in chronological order, deleting each one as
it is scanned, except the current day file.
In the case of the Austron 2201A GPS receiver, the clockstats file
contains a wealth of additional monitoring data. These data are summarized
and writted to the clock_summary file, then a series of special files are
constructed for later processing by the S utility.
The summary.sh script invokes a number of awk scripts to actually produce
the data. This may result in multiple scans of the same input file.
The input file is deleted after processing. In fact, the shell scripts will
process all input files found of the correct type in chronological order,
deleting each one as it is scanned, except the current day file.
The summary.sh script can produce input files for the S utility, if it
is found on the search path. This utility makes PostScript graphs of the
loopstats data for each day, as well as various statistics produced by
the Austorn 220aA GPS receiver. The S utility is automatically run
as a background job. Its control files have the .S extension.
The psummary.awk script can be used to scan the peer_summary file and
construct an historical reprise of the daily summaries.
@ -29,4 +36,4 @@ David L. Mills
University of Delaware
mills@udel.edu
1 November 1993
Revised 12 April 1994

View File

@ -1,4 +1,5 @@
# program to delete duplicate lines in a file
#
# delete duplicate lines
#
{
if (old != $0)

View File

@ -0,0 +1,5 @@
ensemble <- scan(file1, list(day=0, sec=0, gps=0, gpsw=0, loran=0, loranw=0, ensemble=0, std=0))
str <- paste("eps/", file1, ".eps", sep="")
postscript(str, , , , 5, pointsize=18)
par(mgp=c(1, 0, 0), tck = 0.03, mar = c(2, 2, 1, 1))
plot(ensemble$sec, ensemble$ensemble, type="l", xlab=paste("MJD", ensemble$day, "Time (s)"), ylab="Ensemble Offset (ns)", ylim=c(-400, 400))

View File

@ -0,0 +1,15 @@
options(digits=4)
file2 <- "etf_summary"
etf <- scan(file1, list(day=0, sec=0, offset=0, stab=0))
r <- lsfit(etf$sec, etf$offset)
count<-length(etf$sec)
mean<-r$coef[[1]]
std<-sqrt(var(r$residuals))
slope<-r$coef[[2]] * 1000
cat("\n", file=file2 , append=TRUE, fill=FALSE, sep="")
cat(file1, "\n", file=file2, append=TRUE, fill=FALSE, sep="")
cat("etf1 ", count, ", T ", mean, " ns, R ", slope, " ps/s, std ", std, " us\n", file=file2, append=TRUE, fill=FALSE, sep="")
str <- paste("eps/", file1, ".eps", sep="")
postscript(str, , , , 5, pointsize=18)
par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1))
plot(etf$sec, etf$offset, type="l", xlab=paste("MJD", etf$day, "Time (s)"), ylab="External Offset (ns)", ylim=c(-400, 400))

View File

@ -0,0 +1,5 @@
itf <- scan(file1, list(day=0, sec=0, offset=0, stab=0))
str <- paste("eps/", file1, ".eps", sep="")
postscript(str, , , , 5, pointsize=18)
par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1))
plot(itf$sec, itf$offset, type="l", xlab=paste("MJD", itf$day, "Time (s)"), ylab="Internal Offset (ns)", ylim=c(-400, 400))

View File

@ -0,0 +1,7 @@
options(digits=4)
loop <- scan(file1, list(day=0, sec=0, offset=0, freq=0, tc=0))
loop$offset <- loop$offset * 1e6
str <- paste("eps/", file1, ".eps", sep="")
postscript(str, , , , 5, pointsize=18)
par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1))
plot(loop$sec, loop$offset, type="l", xlab=paste("MJD", loop$day, "Time (s)"), ylab="PLL Offset (us)", ylim=c(-400, 400))

View File

@ -35,15 +35,7 @@ BEGIN {
loop_time_rms = sqrt(loop_time_rms / loop_count - loop_time * loop_time)
loop_freq /= loop_count
loop_freq_rms = sqrt(loop_freq_rms / loop_count - loop_freq * loop_freq)
loop_tmax = loop_tmax - loop_time
loop_tmin = loop_time - loop_tmin
if (loop_tmin > loop_tmax)
loop_tmax = loop_tmin
loop_fmax = loop_fmax - loop_freq
loop_fmin = loop_time - loop_fmin
if (loop_fmin > loop_fmax)
loop_fmax = loop_fmin
printf "loop %d, %.0f+/-%.1f, rms %.1f, freq %.2f+/-%0.3f, rms %.3f\n", loop_count, loop_time * 1e6, loop_tmax * 1e6, loop_time_rms * 1e6, loop_freq, loop_fmax, loop_freq_rms
printf "loop %d, %.0f+/-%.1f, rms %.1f, freq %.2f+/-%0.3f, var %.3f\n", loop_count, (loop_tmax + loop_tmin) / 2 * 1e6, (loop_tmax - loop_tmin) / 2 * 1e6, loop_time_rms * 1e6, (loop_fmax + loop_fmin) / 2, (loop_fmax - loop_fmin) / 2, loop_freq_rms
}
}

View File

@ -1,5 +1,7 @@
# program to scan peer_summary file and produce summary of daily summaries
#
# usage: awk -f psummary.awk peer_summary
#
{
if (NF < 8 || $1 == "ident")
continue

View File

@ -0,0 +1,41 @@
# program to scan peer_summary file
#
{
if (NF < 8 || $1 == "ident")
continue
i = n
for (j = 0; j < n; j++) {
if ($1 == peer_ident[j])
i = j
}
if (i == n) {
peer_ident[i] = $1
n++
}
peer_count[i]++
if (($7 - $6 / 2) < 400) {
peer_count[i]++
peer_mean[i] += $3
peer_var[i] += $4 * $4
if ($5 > peer_max[i])
peer_max[i] = $5
if ($5 > 1)
peer_1[i]++
if ($5 > 5)
peer_2[i]++
if ($5 > 10)
peer_3[i]++
if ($5 > 50)
peer_4[i]++
}
} END {
printf " host cnt mean sd max >1 >5 >10 >50\n"
printf "=================================================================\n"
for (i = 0; i < n; i++) {
if (peer_count[i] <= 0)
continue
peer_mean[i] /= peer_count[i]
peer_var[i] = sqrt(peer_var[i] / peer_count[i])
printf "%15s%4d%10.3f%10.3f%10.3f%4d%4d%4d%4d\n", peer_ident[i], peer_count[i], peer_mean[i], peer_var[i], peer_max[i], peer_1[i], peer_2[i], peer_3[i], peer_4[i]
}
}

View File

@ -1,17 +1,88 @@
#!/bin/csh
#!/bin/sh
#
# Script to summarize ipeerstats, loopstats and clockstats files
#
# This script can be run from a cron job once per day, week or month. It
# runs the file-specific summary script and appends the summary data to
# designated files, which must be created first.
# designated files.
#
if ( -e peer_summary ) then
peer.sh >>peer_summary
endif
if ( -e loop_summary ) then
loop.sh >>loop_summary
endif
if ( -e clock_summary ) then
clock.sh >>clock_summary
endif
DATE=`date +19%y%m%d`
SIN=S.in
SOUT=S.out
LOOP=loop_summary
PEER=peer_summary
CLOCK=clock_summary
rm -f $SIN $SOUT
S=0
if [ -f `which S | cut -f1 -d" "` ]; then
S=1
fi
#
# Summarize loopstats files
#
for f in loopstats.????????; do
d=`echo $f | cut -f2 -d.`
if [ $DATE != $d ]; then
echo " " >>$LOOP
echo $f >>$LOOP
awk -f loop.awk $f >>$LOOP
if [ $S ]; then
echo "file1<-"\"${f}\" >>$SIN
echo "source("\""loop.S"\"")" >>$SIN
fi
rm -f $f
fi
done
#
# Summarize peerstats files
#
for f in peerstats.????????; do
d=`echo $f | cut -f2 -d.`
if [ $DATE != $d ]; then
echo " " >>$PEER
echo $f >>$PEER
awk -f peer.awk $f >>$PEER
rm -f $f
fi
done
#
# Summarize clockstats files
#
for f in clockstats.????????; do
d=`echo $f | cut -f2 -d.`
if [ $DATE != $d ]; then
echo " " >>$CLOCK
echo $f >>$CLOCK
awk -f clock.awk $f >>$CLOCK
if [ -f /dev/gps* ]; then
awk -f itf.awk $f >itf.$d
awk -f etf.awk $f >etf.$d
awk -f ensemble.awk $f >ensemble.$d
awk -f tdata.awk $f >tdata.$d
fi
rm -f $f
fi
done
#
# Process clockstat files with S and generate PostScript plots
#
for f in itf etf ensemble tdata; do
for d in ${f}.????????; do
if [ -f $d ]; then
if [ $S ]; then
echo "file1<-"\"${d}\" >>$SIN
echo "source("\"${f}.S\"")" >>$SIN
echo "unix("\""rm ${d}"\"")" >>$SIN
else
rm -f $d
fi
fi
done
done
if [ -f $SIN ]; then
S BATCH $SIN $SOUT
fi

View File

@ -0,0 +1,5 @@
tdata <- scan(file1, list(day=0, sec=0, m=0, w=0, x=0, y=0, z=0))
str <- paste("eps/", file1, ".eps", sep="")
postscript(str, , , , 5, pointsize=18)
par(mgp=c(1, 0, 0), tck=0.03, mar=c(2, 2, 1, 1))
plot(tdata$sec, tdata$m, type="l", xlab=paste("MJD", tdata$day, "Time (s)"), ylab="LORAN-M SNR (dB)")

View File

@ -72,36 +72,36 @@ main(argc, argv)
cost++;
break;
case 'e':
ntx.mode |= ADJ_ESTERROR;
ntx.modes |= MOD_ESTERROR;
ntx.esterror = atoi(ntp_optarg);
break;
case 'f':
ntx.mode |= ADJ_FREQUENCY;
ntx.frequency = (int) (atof(ntp_optarg)
* (1 << SHIFT_USEC));
if (ntx.frequency < (-100 << SHIFT_USEC)
|| ntx.frequency > ( 100 << SHIFT_USEC)) errflg++;
ntx.modes |= MOD_FREQUENCY;
ntx.freq = (int) (atof(ntp_optarg) *
(1 << SHIFT_USEC));
if (ntx.freq < (-100 << SHIFT_USEC)
|| ntx.freq > ( 100 << SHIFT_USEC)) errflg++;
break;
case 'm':
ntx.mode |= ADJ_MAXERROR;
ntx.modes |= MOD_MAXERROR;
ntx.maxerror = atoi(ntp_optarg);
break;
case 'o':
ntx.mode |= ADJ_OFFSET;
ntx.modes |= MOD_OFFSET;
ntx.offset = atoi(ntp_optarg);
break;
case 'r':
rawtime++;
break;
case 's':
ntx.mode |= ADJ_STATUS;
ntx.modes |= MOD_STATUS;
ntx.status = atoi(ntp_optarg);
if (ntx.status < 0 || ntx.status > 4) errflg++;
break;
case 't':
ntx.mode |= ADJ_TIMECONST;
ntx.time_constant = atoi(ntp_optarg);
if (ntx.time_constant < 0 || ntx.time_constant > MAXTC)
ntx.modes |= MOD_TIMECONST;
ntx.constant = atoi(ntp_optarg);
if (ntx.constant < 0 || ntx.constant > MAXTC)
errflg++;
break;
default:
@ -117,7 +117,7 @@ main(argc, argv)
-m maxerror max possible error (us)\n\
-o offset current offset (ms)\n\
-r print the unix and NTP time raw\n\
-s status Set the status (0 .. 4)\n\
-l leap Set the leap bits\n\
-t timeconstant log2 of PLL time constant (0 .. %d)\n",
progname, optargs, MAXTC);
exit(2);
@ -153,13 +153,13 @@ main(argc, argv)
times[c] = ntv.time.tv_usec;
}
if (pll_control >= 0) {
printf("[ usec %06d:", times[0]);
printf("[ us %06d:", times[0]);
for (c=1; c< sizeof times / sizeof times[0]; c++) printf(" %d", times[c] - times[c-1]);
printf(" ]\n");
}
}
(void)ntp_gettime(&ntv);
_ntx.mode = 0; /* Ensure nothing is set */
_ntx.modes = 0; /* Ensure nothing is set */
(void)ntp_adjtime(&_ntx);
if (pll_control < 0) {
printf("NTP user interface routines are not configured in this kernel.\n");
@ -177,9 +177,9 @@ main(argc, argv)
ts.l_uf += TS_ROUNDBIT; /* guaranteed not to overflow */
ts.l_ui += JAN_1970;
ts.l_uf &= TS_MASK;
printf(" time: %s, (.%06d)\n",
printf(" time %s, (.%06d),\n",
prettydate(&ts), ntv.time.tv_usec);
printf(" confidence interval: %ld usec, estimated error: %ld usec\n",
printf(" maximum error %ld us, estimated error %ld us.\n",
ntv.maxerror, ntv.esterror);
if (rawtime) printf(" ntptime=%x.%x unixtime=%x.%06d %s",
ts.l_ui, ts.l_uf,
@ -191,25 +191,26 @@ main(argc, argv)
">> ntp_adjtime() call fails");
else {
printf("ntp_adjtime() returns code %d\n", status);
ftemp = ntx.frequency;
ftemp = ntx.freq;
ftemp /= (1 << SHIFT_USEC);
printf(" mode: %02x, offset: %ld usec, frequency:%8.3f ppm,\n",
ntx.mode, ntx.offset, ftemp);
printf(" confidence interval: %ld usec, estimated error: %ld usec,\n",
printf(" modes %04x, offset %ld us, frequency %.3f ppm, interval %d s,\n",
ntx.modes, ntx.offset, ftemp, 1 << ntx.shift);
printf(" maximum error %ld us, estimated error %ld us,\n",
ntx.maxerror, ntx.esterror);
ftemp = ntx.tolerance;
ftemp /= (1 << SHIFT_USEC);
printf(" status: %d, time constant: %ld, precision: %ld usec, tolerance:%4.0f ppm\n",
ntx.status, ntx.time_constant, ntx.precision, ftemp);
printf(" status %04x, time constant %ld, precision %ld us, tolerance %.0f ppm,\n",
ntx.status, ntx.constant, ntx.precision, ftemp);
if (ntx.shift == 0)
return;
ftemp = ntx.ybar;
ftemp = ntx.ppsfreq;
ftemp /= (1 << SHIFT_USEC);
gtemp = ntx.disp;
gtemp = ntx.stabil;
gtemp /= (1 << SHIFT_USEC);
printf(" pps frequency%8.3f ppm, pps dispersion:%8.3f ppm, interval:%4d sec,\n intervals:%5ld, jitter exceeded:%4ld, dispersion exceeded:%4ld\n",
ftemp, gtemp, 1 << ntx.shift, ntx.calcnt, ntx.jitcnt,
ntx.discnt);
printf(" pps frequency %.3f ppm, stability %.3f ppm, jitter %ld us,\n",
ftemp, gtemp, ntx.jitter);
printf(" intervals %ld, jitter exceeded %ld, stability exceeded %ld, errors %ld.\n",
ntx.calcnt, ntx.jitcnt, ntx.stbcnt, ntx.errcnt);
}
/*

View File

View File

@ -45,8 +45,9 @@
* peer 128.100.1.1 [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ]
* server 128.100.2.2 [ version 3 ] [ key 0 ] [ minpoll 6 ] [ maxpoll 10 ]
* precision -7
* broadcast 128.100.224.255 [ version 3 ] [ key 0 ]
* broadcastclient yes|no
* broadcast 128.100.224.255 [ version 3 ] [ key 0 ] [ ttl 1 ]
* broadcastclient
* multicastclient [224.0.1.1]
* broadcastdelay 0.0102
* authenticate yes|no
* monitor yes|no
@ -58,7 +59,16 @@
* statsdir /var/NTP/
* filegen peerstats [ file peerstats ] [ type day ] [ link ]
* resolver /path/progname
* netlimit integer
* clientlimit [ n ]
* clientperiod [ 3600 ]
* trustedkey [ key ]
* requestkey [ key]
* controlkey [ key ]
* trap [ address ]
* fudge [ ... ]
* pidfile [ ]
* logfile [ ]
* setvar [ ]
*
* And then some. See the manual page.
*/
@ -85,24 +95,24 @@
#define CONFIG_CONTROLKEY 15
#define CONFIG_TRAP 16
#define CONFIG_FUDGE 17
#define CONFIG_MAXSKEW 18
#define CONFIG_RESOLVER 19
#define CONFIG_SELECT 20
#define CONFIG_STATSDIR 21
#define CONFIG_FILEGEN 22
#define CONFIG_STATISTICS 23
#define CONFIG_PPS 24
#define CONFIG_PIDFILE 25
#define CONFIG_LOGFILE 26
#define CONFIG_SETVAR 27
#define CONFIG_CLIENTLIMIT 28
#define CONFIG_CLIENTPERIOD 29
#define CONFIG_RESOLVER 18
#define CONFIG_STATSDIR 19
#define CONFIG_FILEGEN 20
#define CONFIG_STATISTICS 21
#define CONFIG_PPS 22
#define CONFIG_PIDFILE 23
#define CONFIG_LOGFILE 24
#define CONFIG_SETVAR 25
#define CONFIG_CLIENTLIMIT 26
#define CONFIG_CLIENTPERIOD 27
#define CONFIG_MULTICASTCLIENT 28
#define CONF_MOD_VERSION 1
#define CONF_MOD_KEY 2
#define CONF_MOD_MINPOLL 3
#define CONF_MOD_MAXPOLL 4
#define CONF_MOD_PREFER 5
#define CONF_MOD_TTL 6
#define CONF_PPS_DELAY 1
#define CONF_PPS_BAUD 2
@ -162,6 +172,7 @@ static struct keyword keywords[] = {
{ "driftfile", CONFIG_DRIFTFILE },
{ "broadcast", CONFIG_BROADCAST },
{ "broadcastclient", CONFIG_BROADCASTCLIENT },
{ "multicastclient", CONFIG_MULTICASTCLIENT },
{ "authenticate", CONFIG_AUTHENTICATE },
{ "keys", CONFIG_KEYS },
{ "monitor", CONFIG_MONITOR },
@ -174,9 +185,7 @@ static struct keyword keywords[] = {
{ "controlkey", CONFIG_CONTROLKEY },
{ "trap", CONFIG_TRAP },
{ "fudge", CONFIG_FUDGE },
{ "maxskew", CONFIG_MAXSKEW },
{ "resolver", CONFIG_RESOLVER },
{ "select", CONFIG_SELECT },
{ "statsdir", CONFIG_STATSDIR },
{ "filegen", CONFIG_FILEGEN },
{ "statistics", CONFIG_STATISTICS },
@ -197,6 +206,7 @@ static struct keyword mod_keywords[] = {
{ "minpoll", CONF_MOD_MINPOLL },
{ "maxpoll", CONF_MOD_MAXPOLL },
{ "prefer", CONF_MOD_PREFER },
{ "ttl", CONF_MOD_TTL },
{ "", CONFIG_UNKNOWN }
};
@ -325,12 +335,12 @@ extern int debug;
#endif
extern char *FindConfig();
char *progname;
static char *xntp_options = "abc:de:f:k:l:p:r:s:t:v:V:";
static char *xntp_options = "abc:de:f:k:l:mp:r:s:t:v:V:";
static int gettokens P((FILE *, char *, char **, int *));
static int matchkey P((char *, struct keyword *));
static int getnetnum P((char *, struct sockaddr_in *, int));
static void save_resolve P((char *, int, int, int, int, int, U_LONG));
static void save_resolve P((char *, int, int, int, int, int, int, U_LONG));
static void do_resolve P((char *, U_LONG, char *));
#ifdef RESOLVE_INTERNAL
static void do_resolve_internal P((void));
@ -417,6 +427,7 @@ getconfig(argc, argv)
int peerversion;
int minpoll;
int maxpoll;
int ttl;
U_LONG peerkey;
int peerflags;
int hmode;
@ -473,12 +484,15 @@ getconfig(argc, argv)
case 'a':
proto_config(PROTO_AUTHENTICATE, (LONG)1);
break;
case 'b':
proto_config(PROTO_BROADCLIENT, (LONG)1);
break;
case 'c':
config_file = ntp_optarg;
break;
case 'd':
#ifdef DEBUG
debug++;
@ -523,6 +537,10 @@ getconfig(argc, argv)
}
break;
case 'm':
proto_config(PROTO_MULTICAST_ADD, INADDR_NTP);
break;
case 'p':
stats_config(STATS_PID_FILE, ntp_optarg);
break;
@ -631,6 +649,7 @@ getconfig(argc, argv)
maxpoll = NTP_MAXPOLL;
peerkey = 0;
peerflags = 0;
ttl = 1;
for (i = 2; i < ntokens; i++)
switch (matchkey(tokens[i], mod_keywords)) {
case CONF_MOD_VERSION:
@ -696,6 +715,16 @@ getconfig(argc, argv)
peerflags |= FLAG_PREFER;
break;
case CONF_MOD_TTL:
if (i >= ntokens-1) {
syslog(LOG_ERR,
"ttl: argument required");
errflg = 1;
break;
}
ttl = atoi(tokens[++i]);
break;
case CONFIG_UNKNOWN:
errflg = 1;
break;
@ -707,14 +736,15 @@ getconfig(argc, argv)
if (errflg == 0) {
if (peer_config(&peeraddr,
(struct interface *)0, hmode, peerversion,
minpoll, maxpoll, peerkey, peerflags) == 0) {
minpoll, maxpoll, peerflags, ttl, peerkey)
== 0) {
syslog(LOG_ERR,
"configuration of %s failed",
ntoa(&peeraddr));
}
} else if (errflg == -1) {
save_resolve(tokens[1], hmode, peerversion,
minpoll, maxpoll, peerflags, peerkey);
minpoll, maxpoll, peerflags, ttl, peerkey);
}
break;
@ -771,23 +801,20 @@ getconfig(argc, argv)
} break;
case CONFIG_BROADCASTCLIENT:
errflg = 0;
if (ntokens >= 2) {
if (STREQ(tokens[1], "yes"))
proto_config(PROTO_BROADCLIENT, (LONG)1);
else if (STREQ(tokens[1], "no"))
proto_config(PROTO_BROADCLIENT, (LONG)0);
else
errflg++;
} else {
errflg++;
}
if (errflg)
syslog(LOG_ERR,
"should be `broadcastclient yes|no'");
proto_config(PROTO_BROADCLIENT, (U_LONG)1);
break;
case CONFIG_MULTICASTCLIENT:
if (ntokens > 1) {
for (i = 1; i < ntokens; i++) {
if (getnetnum(tokens[i], &peeraddr, 1));
proto_config(PROTO_MULTICAST_ADD,
peeraddr.sin_addr.s_addr);
}
} else
proto_config(PROTO_MULTICAST_ADD, INADDR_NTP);
break;
case CONFIG_AUTHENTICATE:
errflg = 0;
if (ntokens >= 2) {
@ -1263,26 +1290,6 @@ getconfig(argc, argv)
#endif
break;
case CONFIG_MAXSKEW:
if (ntokens >= 2) {
l_fp tmp;
u_fp utmp;
if (!atolfp(tokens[1], &tmp)) {
syslog(LOG_ERR,
"maxskew value %s undecodable",
tokens[1]);
} else if (tmp.l_ui != 0) {
syslog(LOG_ERR,
"maxskew value %s is unlikely",
tokens[1]);
} else {
utmp = LFPTOFP(&tmp);
proto_config(PROTO_MAXSKEW, (LONG)utmp);
}
}
break;
case CONFIG_RESOLVER:
if (ntokens >= 2) {
if (strlen(tokens[1]) >= (size_t)MAXFILENAME) {
@ -1299,18 +1306,6 @@ getconfig(argc, argv)
}
break;
case CONFIG_SELECT:
if (ntokens >= 2) {
i = atoi(tokens[1]);
if (i < SELECT_1 || i > SELECT_5)
syslog(LOG_ERR,
"invalid selection algorithm %s, line ignored",
tokens[1]);
else
proto_config(PROTO_SELECT, (LONG)i);
}
break;
case CONFIG_STATSDIR:
if (ntokens >= 2) {
stats_config(STATS_STATSDIR,tokens[1]);
@ -1708,13 +1703,14 @@ int sig;
* save_resolve - save configuration info into a file for later name resolution
*/
static void
save_resolve(name, mode, version, minpoll, maxpoll, flags, keyid)
save_resolve(name, mode, version, minpoll, maxpoll, flags, ttl, keyid)
char *name;
int mode;
int version;
int minpoll;
int maxpoll;
int flags;
int ttl;
U_LONG keyid;
{
if (res_fp == NULL) {
@ -1733,8 +1729,8 @@ save_resolve(name, mode, version, minpoll, maxpoll, flags, keyid)
}
#endif
(void) fprintf(res_fp, "%s %d %d %d %d %d %lu\n", name, mode,
version, minpoll, maxpoll, flags, keyid);
(void) fprintf(res_fp, "%s %d %d %d %d %d %d %lu\n", name, mode,
version, minpoll, maxpoll, flags, ttl, keyid);
}

View File

@ -48,6 +48,7 @@ struct conf_entry {
#define ce_minpoll ce_config.minpoll
#define ce_maxpoll ce_config.maxpoll
#define ce_flags ce_config.flags
#define ce_ttl ce_config.ttl
#define ce_keyid ce_config.keyid
/*
@ -102,8 +103,9 @@ static int resolve_value; /* next value of resolve timer */
#define TOK_MINPOLL 3
#define TOK_MAXPOLL 4
#define TOK_FLAGS 5
#define TOK_KEYID 6
#define NUMTOK 7
#define TOK_TTL 6
#define TOK_KEYID 7
#define NUMTOK 8
#define MAXLINESIZE 512
@ -128,7 +130,7 @@ extern int errno;
static RETSIGTYPE bong P((int));
static void checkparent P((void));
static void removeentry P((struct conf_entry *));
static void addentry P((char *, int, int, int, int, int, U_LONG));
static void addentry P((char *, int, int, int, int, int, int, U_LONG));
static int findhostaddr P((struct conf_entry *));
static void openntp P((void));
static int request P((struct conf_peer *));
@ -279,13 +281,14 @@ removeentry(entry)
* addentry - add an entry to the configuration list
*/
static void
addentry(name, mode, version, minpoll, maxpoll, flags, keyid)
addentry(name, mode, version, minpoll, maxpoll, flags, ttl, keyid)
char *name;
int mode;
int version;
int minpoll;
int maxpoll;
int flags;
int ttl;
U_LONG keyid;
{
register char *cp;
@ -304,6 +307,7 @@ addentry(name, mode, version, minpoll, maxpoll, flags, keyid)
ce->ce_minpoll = (u_char)minpoll;
ce->ce_maxpoll = (u_char)maxpoll;
ce->ce_flags = (u_char)flags;
ce->ce_ttl = (u_char)ttl;
ce->ce_keyid = htonl(keyid);
ce->ce_next = NULL;
@ -751,7 +755,8 @@ readconf(fp, name)
*/
addentry(token[TOK_HOSTNAME], (int)intval[TOK_HMODE],
(int)intval[TOK_VERSION], (int)intval[TOK_MINPOLL],
(int)intval[TOK_MAXPOLL], flags, intval[TOK_KEYID]);
(int)intval[TOK_MAXPOLL], flags, (int)intval[TOK_TTL],
intval[TOK_KEYID]);
}
}

View File

@ -10,6 +10,10 @@
#include <sys/ioctl.h>
#include <sys/time.h>
#ifdef MCAST
#include "ntp_in.h"
#endif /* MCAST */
#include "ntpd.h"
#include "ntp_select.h"
#include "ntp_io.h"
@ -53,7 +57,6 @@
/*
* Block the interrupt, for critical sections.
*/
#if defined(HAVE_SIGNALED_IO)
#define BLOCKIO() ((void) block_sigio())
#define UNBLOCKIO() ((void) unblock_sigio())
@ -228,6 +231,9 @@ create_sockets(port)
inter_list[0].sent = 0;
inter_list[0].notsent = 0;
inter_list[0].flags = INT_BROADCAST;
#ifdef MCAST
inter_list[0].flags |= INT_MULTICAST;
#endif /* MCAST */
#ifdef USE_STREAMS_DEVICE_FOR_IF_CONFIG
if ((vs = open("/dev/ip", O_RDONLY)) < 0) {
@ -394,7 +400,7 @@ create_sockets(port)
maxactivefd = 0;
FD_ZERO(&activefds);
for (i = 0; i < ninterfaces; i++) {
inter_list[i].fd = open_socket(&inter_list[i].sin,
inter_list[i].flags & INT_BROADCAST);
@ -458,23 +464,72 @@ io_setbclient()
}
#ifdef MCAST
/*
* io_multicast_add() - add multicast group address
*/
void
io_multicast_add(addr)
U_LONG addr;
{
int fd = inter_list[0].fd;
struct ip_mreq mreq;
if (!IN_CLASSD(addr))
return;
/*
* enable reception of multicast packets
*/
mreq.imr_multiaddr.s_addr = addr;
mreq.imr_interface.s_addr = INADDR_ANY;
if (setsockopt(fd, IPPROTO_IP, IP_ADD_MEMBERSHIP,
(char *)&mreq, sizeof(mreq)) == -1)
syslog(LOG_ERR, "setsockopt IP_ADD_MEMBERSHIP fails: %m");
}
#endif /* MCAST */
/*
* io_unsetbclient - close the broadcast client sockets
*/
void
io_unsetbclient()
{
int i;
int i;
for (i = 1; i < ninterfaces; i++) {
if (!(inter_list[i].flags & INT_BCASTOPEN))
continue;
close_socket(inter_list[i].bfd);
inter_list[i].flags &= ~INT_BCASTOPEN;
}
}
}
#ifdef MCAST
/*
* io_multicast_del() - delete multicast group address
*/
void
io_multicast_del(addr)
U_LONG addr;
{
int fd = inter_list[0].fd;
struct ip_mreq mreq;
if (!IN_CLASSD(addr))
return;
/*
* disable reception of multicast packets
*/
mreq.imr_multiaddr.s_addr = addr;
mreq.imr_interface.s_addr = INADDR_ANY;
if (setsockopt(fd, IPPROTO_IP, IP_DROP_MEMBERSHIP,
(char *)&mreq, sizeof(mreq)) == -1)
syslog(LOG_ERR, "setsockopt IP_DROP_MEMBERSHIP fails: %m");
}
#endif /* MCAST */
/*
* open_socket - open a socket, returning the file descriptor
@ -510,7 +565,8 @@ open_socket(addr, bcast)
*/
if (bind(fd, (struct sockaddr *)addr, sizeof(*addr)) < 0) {
char buff[160];
sprintf(buff, "bind() fd %d, family %d, port %d, addr %08x, bcast=%d fails: %%m",
sprintf(buff,
"bind() fd %d, family %d, port %d, addr %08x, bcast=%d fails: %%m",
fd,
addr->sin_family,
addr->sin_port,
@ -557,6 +613,19 @@ Need non blocking I/O
syslog(LOG_ERR, "setsockopt SO_REUSEADDR off fails: %m");
}
#ifdef MCAST
/* for the moment we use the bcast option to set multicast ttl */
if (bcast) {
unsigned char mttl = 127;
/* set the multicast ttl for outgoing packets */
if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL,
&mttl, sizeof(mttl)) == -1) {
syslog(LOG_ERR, "setsockopt IP_MULTICAST_TTL fails: %m");
}
}
#endif /* MCAST */
#ifdef SO_BROADCAST
/* if this interface can support broadcast, set SO_BROADCAST */
@ -566,7 +635,7 @@ Need non blocking I/O
syslog(LOG_ERR, "setsockopt(SO_BROADCAST): %m");
}
}
#endif
#endif /* SO_BROADCAST */
#ifdef DEBUG
if (debug > 1)
@ -608,7 +677,7 @@ struct interface *
findbcastinter(addr)
struct sockaddr_in *addr;
{
#ifdef SIOCGIFCONF
#ifdef SIOCGIFCONF
register int i;
register U_LONG netnum;
@ -622,7 +691,7 @@ findbcastinter(addr)
== (netnum & NSRCADR(&inter_list[i].mask)))
return &inter_list[i];
}
#endif
#endif /* SIOCGIFCONF */
return any_interface;
}
@ -744,7 +813,7 @@ sendpkt(dest, inter, pkt, len)
#ifdef DEBUG
if (debug)
printf("sendpkt(%s, %s, %d)\n", ntoa(dest),
printf("sendpkt(fd=%d %s, %s, %d)\n", inter->fd, ntoa(dest),
ntoa(&inter->sin), len);
#endif
@ -902,11 +971,16 @@ again:
}
if (FD_ISSET(fd, &fds)) {
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 (!(free_recvbufs && i == 0 &&
inter_list[i].flags & INT_MULTICAST)) {
#ifdef UDP_WILDCARD_DELIVERY
/*
* these guys manage to put properly addressed packets into the wildcard queue
@ -932,6 +1006,7 @@ again:
packets_dropped++;
continue;
}
}
rb = freelist;
freelist = rb->next;
@ -958,7 +1033,7 @@ again:
if (debug)
printf("input_handler: fd=%d length %d\n", fd, rb->recv_length);
#endif
/*
* Got one. Mark how and when it got here,
* put it on the full list and do bookkeeping.

View File

@ -92,17 +92,14 @@
#define RSH_DRIFT_TO_FRAC (CLOCK_DSCALE - 16)
#define RSH_DRIFT_TO_ADJ (RSH_DRIFT_TO_FRAC - CLOCK_ADJ)
#define RSH_FRAC_TO_FREQ (CLOCK_FREQ + CLOCK_ADJ - RSH_DRIFT_TO_FRAC)
#define PPS_MAXAGE 120 /* pps signal timeout (s) */
#define PPS_MAXUPDATE 600 /* pps update timeout (s) */
/*
* Imported from the ntp_proto module
* Program variables
*/
extern u_char sys_stratum;
extern s_fp sys_rootdelay;
extern u_fp sys_rootdispersion;
extern s_char sys_precision;
l_fp last_offset; /* last adjustment done */
static LONG clock_adjust; /* clock adjust register (fraction only) */
static LONG clock_adjust; /* clock adjust (fraction only) */
s_fp drift_comp; /* drift compensation register */
static s_fp max_comp; /* drift limit imposed by max host clock slew */
@ -111,11 +108,15 @@ static s_fp max_comp; /* drift limit imposed by max host clock slew */
static U_LONG tcadj_time; /* last time-constant adjust time */
U_LONG watchdog_timer; /* watchdog timer, in seconds */
static int first_adjustment; /* set to 1 if waiting for first adjustment */
static int first_adjustment; /* 1 if waiting for first adjustment */
static int tc_counter; /* time-constant hold counter */
int pll_control; /* set nonzero if pll implemented in kernel */
int pps_control; /* set nonzero if pps signal valid */
static l_fp pps_offset; /* filtered pps offset */
static u_fp pps_dispersion; /* pps dispersion */
static U_LONG pps_time; /* last pps sample time */
int pps_control; /* true if working pps signal */
int pll_control; /* true if working kernel pll */
static l_fp pps_delay; /* pps tuning offset */
U_LONG pps_update; /* last pps update time */
int fdpps = -1; /* pps file descriptor */
@ -151,8 +152,7 @@ static l_fp pps_delay; /* pps tuning offset */
( i == 300 ? B300 : 0 ))))))))
#define PPS_BAUD B38400 /* default serial port speed */
#define PPS_MAXAGE 120 /* seconds after which we disbelieve pps */
#define PPS_MAXUPDATE 600 /* seconds after which we disbelieve timecode */
timecode */
#define PPS_DEV "/dev/pps" /* pps port */
#define PPS_FAC 3 /* pps shift (log2 trimmed samples) */
#define PPS_TRIM 6 /* samples trimmed from median filter */
@ -163,18 +163,24 @@ static l_fp pps_delay; /* pps tuning offset */
static struct refclockio io; /* given to the I/O handler */
static int pps_baud; /* baud rate of PPS line */
#endif /* PPSCLK */
static l_fp pps_offset; /* filtered pps offset */
static u_fp pps_maxd; /* pps dispersion */
static U_LONG pps_time; /* last pps sample time */
static U_LONG nsamples; /* number of pps samples collected */
static LONG samples[NPPS]; /* median filter for pps samples */
#endif /* PPS || PPSCLK || PPSPPS */
/*
* Imported from the ntp_proto module
*/
extern u_char sys_stratum;
extern s_fp sys_rootdelay;
extern u_fp sys_rootdispersion;
extern s_char sys_precision;
/*
* Imported from ntp_io.c
*/
extern struct interface *loopback_interface;
#endif /* PPS || PPSCLK || PPSPPS */
/*
* Imported from ntpd module
*/
@ -189,9 +195,15 @@ extern U_LONG current_time; /* like it says, in seconds */
* sys_poll and sys_refskew are set here
*/
extern u_char sys_poll; /* log2 of system poll interval */
extern u_char sys_leap; /* system leap bits */
extern l_fp sys_refskew; /* accumulated skew since last update */
extern u_fp sys_maxd; /* max dispersion of survivor list */
/*
* Imported from leap module
*/
extern u_char leapbits; /* sanitized leap bits */
/*
* Function prototypes
*/
@ -203,10 +215,13 @@ static void pps_receive P((struct recvbuf *));
#endif /* PPS || PPSCLK || PPSPPS */
#if defined(KERNEL_PLL)
#define MOD_BITS (MOD_OFFSET | MOD_MAXERROR | MOD_ESTERROR | \
MOD_STATUS | MOD_TIMECONST)
extern int sigvec P((int, struct sigvec *, struct sigvec *));
extern int syscall P((int, void *, ...));
void pll_trap P((void));
static int pll_status; /* status bits for kernel pll */
static struct sigvec sigsys; /* current sigvec status */
static struct sigvec newsigsys; /* new sigvec status */
#endif /* KERNEL_PLL */
@ -398,7 +413,7 @@ local_clock(fp_offset, peer)
#ifdef DEBUG
if (debug > 1)
printf("local_clock(%s, %s)\n", lfptoa(fp_offset, 9),
printf("local_clock(%s, %s)\n", lfptoa(fp_offset, 6),
ntoa(&peer->srcadr));
#endif
@ -431,33 +446,26 @@ local_clock(fp_offset, peer)
last_offset = *fp_offset;
/*
* If the magnitude of the offset is greater than CLOCK.MAX, step
* the time and reset the registers.
* If the magnitude of the offset is greater than CLOCK.MAX,
* step the time and reset the registers.
*/
if (tmp_ui > CLOCK_MAX_I || (tmp_ui == CLOCK_MAX_I
&& (U_LONG)tmp_uf >= (U_LONG)CLOCK_MAX_F)) {
if (watchdog_timer < CLOCK_MINSTEP) {
/* Mustn't step yet, pretend we adjusted. */
#ifdef SLEWALWAYS
syslog(LOG_INFO,
"adjust: SLEW dropped (%s offset %s)\n",
ntoa(&peer->srcadr), lfptoa(fp_offset, 9));
#else
syslog(LOG_INFO,
"adjust: STEP dropped (%s offset %s)\n",
ntoa(&peer->srcadr), lfptoa(fp_offset, 9));
#endif
"clock correction %s too large (ignored)\n",
lfptoa(fp_offset, 6));
return (0);
}
syslog(LOG_NOTICE, "clock reset (%s) %s\n",
#ifdef SLEWALWAYS
syslog(LOG_NOTICE, " ** adjust: SLEW %s offset %s **\n",
ntoa(&peer->srcadr), lfptoa(fp_offset, 9));
"slew",
#else
syslog(LOG_NOTICE, " ** adjust: STEP %s offset %s **\n",
ntoa(&peer->srcadr), lfptoa(fp_offset, 9));
"step",
#endif
lfptoa(fp_offset, 6));
step_systime(fp_offset);
clock_adjust = 0;
watchdog_timer = 0;
first_adjustment = 1;
@ -479,21 +487,24 @@ local_clock(fp_offset, peer)
* The time constant update goes after adjust and skew updates,
* as in appendix G.
*/
#if defined(PPS) || defined(PPSCLK) || defined(PPSPPS)
/*
* If pps samples are valid, update offset, root delay and
* root dispersion. This may be a dramatic surprise to high-
* stratum clients, since all of a sudden this server looks
* like a stratum-1 clock.
* root dispersion. Also, set the system stratum to 1, even if
* the source of approximate time runs at a higher stratum. This
* may be a dramatic surprise to high-stratum clients, since all
* of a sudden this server looks like a stratum-1 clock.
*/
if (pps_control) {
last_offset = pps_offset;
sys_maxd = pps_maxd;
sys_maxd = pps_dispersion;
sys_stratum = 1;
sys_rootdelay = 0;
sys_rootdispersion = pps_maxd;
offset = LFPTOFP(&pps_offset);
if (offset < 0)
offset = -offset;
sys_rootdispersion = offset + pps_dispersion;
}
#endif /* PPS || PPSCLK || PPSPPS */
offset = last_offset.l_f;
/*
* The pll_control is active when the phase-lock code is
@ -504,42 +515,56 @@ local_clock(fp_offset, peer)
* know the scaling of the frequency variable (s_fp) is the
* same as the kernel variable (1 << SHIFT_USEC = 16).
*
* For kernels with the PPS discipline, the current offset and
* dispersion are set from kernel variables to maintain
* beauteous displays, but don't do much of anything.
*
* In the case of stock kernels the phase-lock loop is
* implemented the hard way and the clock_adjust and drift_comp
* computed as required.
*/
offset = last_offset.l_f;
if (pll_control) {
#if defined(KERNEL_PLL)
ntv.mode = ADJ_OFFSET | ADJ_TIMECONST | ADJ_MAXERROR |
ADJ_ESTERROR;
memset((char *)&ntv, 0, sizeof ntv);
ntv.modes = MOD_BITS;
if (offset >= 0) {
TSFTOTVU(offset, ntv.offset);
} else {
TSFTOTVU(-offset, ntv.offset);
ntv.offset = -ntv.offset;
}
ntv.maxerror = sys_rootdispersion + sys_rootdelay / 2;
ntv.esterror = sys_rootdispersion;
ntv.time_constant = time_constant;
ntv.shift = 0;
TSFTOTVU(sys_rootdispersion + sys_rootdelay / 2, ntv.maxerror);
TSFTOTVU(sys_rootdispersion, ntv.esterror);
ntv.status = pll_status;
if (pps_update)
ntv.status |= STA_PPSTIME;
if (sys_leap & LEAP_ADDSECOND &&
sys_leap & LEAP_DELSECOND)
ntv.status |= STA_UNSYNC;
else if (sys_leap & LEAP_ADDSECOND)
ntv.status |= STA_INS;
else if (sys_leap & LEAP_DELSECOND)
ntv.status |= STA_DEL;
ntv.constant = time_constant;
(void)ntp_adjtime(&ntv);
drift_comp = ntv.frequency;
if (ntv.shift != 0) {
char buf[128];
(void) sprintf(buf, "pps_freq=%s", fptoa(ntv.ybar, 3));
set_sys_var(buf, strlen(buf)+1, RO|DEF);
(void) sprintf(buf, "pps_disp=%s", fptoa(ntv.disp, 3));
set_sys_var(buf, strlen(buf)+1, RO|DEF);
(void) sprintf(buf, "pps_interval=%ld",1 << ntv.shift);
set_sys_var(buf, strlen(buf)+1, RO);
(void) sprintf(buf, "pps_intervals=%ld", ntv.calcnt);
set_sys_var(buf, strlen(buf)+1, RO);
(void) sprintf(buf, "pps_jitterexceeded=%ld", ntv.jitcnt);
set_sys_var(buf, strlen(buf)+1, RO);
(void) sprintf(buf, "pps_dispersionexceeded=%ld", ntv.discnt);
set_sys_var(buf, strlen(buf)+1, RO);
}
drift_comp = ntv.freq;
if (ntv.status & STA_PPSTIME && ntv.status & STA_PPSSIGNAL
&& ntv.shift) {
if (ntv.offset >= 0) {
TVUTOTSF(ntv.offset, offset);
} else {
TVUTOTSF(-ntv.offset, offset);
offset = -offset;
}
pps_offset.l_i = pps_offset.l_f = 0;
M_ADDF(pps_offset.l_i, pps_offset.l_f, offset);
TVUTOTSF(ntv.jitter, tmp);
pps_dispersion = (tmp >> 16) & 0xffff;
pps_time = current_time;
record_peer_stats(&loopback_interface->sin,
ctlsysstatus(), &pps_offset, 0, pps_dispersion);
} else
pps_time = 0;
#endif /* KERNEL_PLL */
} else {
if (offset < 0) {
@ -549,21 +574,14 @@ local_clock(fp_offset, peer)
}
/*
* Calculate the new frequency error. The factor given in the
* spec gives the adjustment per 2**CLOCK_ADJ seconds, but we
* want it as a (scaled) pure ratio, so we include that factor
* now and remove it later.
* Calculate the new frequency error. The factor given
* in the spec gives the adjustment per 2**CLOCK_ADJ
* seconds, but we want it as a (scaled) pure ratio, so
* we include that factor now and remove it later.
*/
if (first_adjustment) {
first_adjustment = 0;
} else {
/*
* Clamp the integration interval to maxpoll.
* The bitcounting in Section 5 gives (n+1)-6 for 2**n,
* but has a factor 2**6 missing from CLOCK_FREQ.
* We make 2**n give n instead. If watchdog_timer is
* zero, pretend it's one.
*/
tmp = peer->maxpoll;
tmp_uf = watchdog_timer;
if (tmp_uf == 0)
@ -574,10 +592,11 @@ local_clock(fp_offset, peer)
}
/*
* We apply the frequency scaling at the same time as
* the sample interval; this ensures a safe right-shift.
* (as long as it keeps below 31 bits, which current
* parameters should ensure.
* We apply the frequency scaling at the same
* time as the sample interval; this ensures a
* safe right-shift. (as long as it keeps below
* 31 bits, which current parameters should
* ensure.
*/
tmp = (RSH_FRAC_TO_FREQ - tmp) +
time_constant + time_constant;
@ -597,7 +616,9 @@ local_clock(fp_offset, peer)
/*
* Determine when to adjust the time constant and poll interval.
*/
if (current_time - tcadj_time >= (1 << sys_poll)) {
if (pps_control)
time_constant = 0;
else if (current_time - tcadj_time >= (1 << sys_poll) && !pps_control) {
tcadj_time = current_time;
tmp = offset;
if (tmp < 0)
@ -623,8 +644,8 @@ local_clock(fp_offset, peer)
#ifdef DEBUG
if (debug > 1)
printf("adj %s, drft %s, tau %3i\n",
mfptoa((clock_adjust<0?-1:0), clock_adjust, 9),
fptoa(drift_comp, 9), time_constant);
mfptoa((clock_adjust<0?-1:0), clock_adjust, 6),
fptoa(drift_comp, 6), time_constant);
#endif /* DEBUG */
(void) record_loop_stats(&last_offset, &drift_comp, time_constant);
@ -678,20 +699,20 @@ adj_host_clock()
}
}
#endif /* PPSPPS */
if (pps_time != 0 && current_time - pps_time > PPS_MAXAGE)
pps_time = 0;
if (pps_update != 0 && current_time - pps_update > PPS_MAXUPDATE)
pps_update = 0;
if (pps_time != 0 && pps_update != 0) {
#endif /* PPS || PPSCLK || PPSPPS */
if (pps_time && current_time - pps_time > PPS_MAXAGE)
pps_time = 0;
if (pps_update && current_time - pps_update > PPS_MAXUPDATE)
pps_update = 0;
if (pps_time && pps_update) {
if (!pps_control)
syslog(LOG_INFO, "pps synch");
syslog(LOG_INFO, "PPS synch");
pps_control = 1;
} else {
if (pps_control)
syslog(LOG_INFO, "pps synch lost");
syslog(LOG_INFO, "PPS synch lost");
pps_control = 0;
}
#endif /* PPS || PPSCLK || PPSPPS */
/*
* Resist the following code if the phase-lock loop has been
@ -738,24 +759,27 @@ loop_config(item, lfp_value, int_value)
tmp = LFPTOFP(lfp_value);
if (tmp >= max_comp || tmp <= -max_comp) {
syslog(LOG_ERR,
"loop_config: skew compensation %s too large",
"loop_config: frequency offset %s in ntp.conf file is too large",
fptoa(tmp, 5));
} else {
char var[40];
drift_comp = tmp;
#if defined(KERNEL_PLL)
/*
* If the phase-lock code is implemented in the kernel,
* give the time_constant and saved frequency offset
* to the kernel. If not, no harm is done.
* If the phase-lock code is implemented in the
* kernel, give the time_constant and saved
* frequency offset to the kernel. If not, no
* harm is done.
*/
pll_control = 1;
ntv.mode = ADJ_FREQUENCY | ADJ_STATUS | ADJ_TIMECONST;
ntv.status = TIME_BAD;
ntv.time_constant = time_constant;
ntv.frequency = drift_comp;
pll_status = STA_PLL | STA_PPSFREQ;
ntv.modes = MOD_BITS | MOD_FREQUENCY;
ntv.offset = 0;
ntv.freq = drift_comp;
ntv.maxerror = NTP_MAXDISPERSE;
ntv.esterror = NTP_MAXDISPERSE;
ntv.status = pll_status | STA_UNSYNC;
ntv.constant = time_constant;
newsigsys.sv_handler = pll_trap;
newsigsys.sv_mask = 0;
newsigsys.sv_flags = 0;
@ -766,17 +790,13 @@ loop_config(item, lfp_value, int_value)
if ((sigvec(SIGSYS, &sigsys, (struct sigvec *)NULL)))
syslog(LOG_ERR,
"sigvec() fails to restore SIGSYS trap: %m\n");
syslog(LOG_NOTICE,
"%susing kernel phase-lock loop",
(pll_control) ? "" : "Not ");
(void)sprintf(var, "kernel_pll=%s", pll_control ? "true" : "false");
set_sys_var(var, strlen(var)+1, RO);
#if DEBUG
if (debug)
printf("pll_control %d\n", pll_control);
#endif
if (pll_control)
syslog(LOG_NOTICE,
"using kernel phase-lock loop %04x",
ntv.status);
else
syslog(LOG_NOTICE,
"using xntpd phase-lock loop");
#endif /* KERNEL_PLL */
}
@ -834,7 +854,7 @@ loop_config(item, lfp_value, int_value)
* _trap - trap processor for undefined syscalls
*
* This nugget is called by the kernel when the SYS_ntp_adjtime()
* syscall bombs because the silly thing has not been implemented int
* syscall bombs because the silly thing has not been implemented in
* the kernel. In this case the phase-lock loop is emulated by
* the stock adjtime() syscall and a lot of indelicate abuse.
*/
@ -900,8 +920,9 @@ int pps_sample(tsr)
/*
* Note the seconds offset is already in the low-order timestamp
* doubleword, so all we have to do is sign-extend and invert it.
* The resulting offset is believed only if within CLOCK_MAX.
* doubleword, so all we have to do is sign-extend and invert
* it. The resulting offset is believed only if within
* CLOCK_MAX.
*/
ts = *tsr;
lftemp.l_i = lftemp.l_f = 0;
@ -957,21 +978,14 @@ int pps_sample(tsr)
}
lftemp.l_i = 0;
lftemp.l_f = sort[NPPS-1-PPS_TRIM] - sort[PPS_TRIM];
pps_maxd = LFPTOFP(&lftemp);
lftemp.l_i = 0;
lftemp.l_f = sort[NPPS-1] - sort[0];
utemp = LFPTOFP(&lftemp);
pps_dispersion = LFPTOFP(&lftemp);
#ifdef DEBUG
if (debug)
printf("pps_filter: %s %s %s\n", lfptoa(&pps_delay, 6),
lfptoa(&pps_offset, 6), lfptoa(&lftemp, 5));
#endif /* DEBUG */
/*
* Note the peerstats file will contain the gross dispersion in
* the delay field. Temporaty hack.
*/
record_peer_stats(&loopback_interface->sin, ctlsysstatus(),
&pps_offset, utemp, pps_maxd);
&pps_offset, 0, pps_dispersion);
return (0);
}
#endif /* PPS || PPSCLK || PPSPPS */

View File

@ -340,22 +340,24 @@ unpeer(peer_to_remove)
* peer_config - configure a new peer
*/
struct peer *
peer_config(srcadr, dstadr, hmode, version, minpoll, maxpoll, key, flags)
peer_config(srcadr, dstadr, hmode, version, minpoll, maxpoll, flags, ttl, key)
struct sockaddr_in *srcadr;
struct interface *dstadr;
int hmode;
int version;
int minpoll;
int maxpoll;
U_LONG key;
int flags;
int ttl;
U_LONG key;
{
register struct peer *peer;
#ifdef DEBUG
if (debug)
printf("peer_config: addr %s mode %d version %d minpoll %d maxpoll %d key %u\n",
ntoa(srcadr), hmode, version, minpoll, maxpoll, key);
printf("peer_config: addr %s mode %d version %d minpoll %d maxpoll %d flags %d ttl %d key %u\n",
ntoa(srcadr), hmode, version, minpoll, maxpoll, flags,
ttl, key);
#endif
/*
* See if we have this guy in the tables already. If
@ -387,6 +389,7 @@ peer_config(srcadr, dstadr, hmode, version, minpoll, maxpoll, key, flags)
peer->ppoll = peer->minpoll;
peer->flags = ((u_char)(flags|FLAG_CONFIG))
|(peer->flags & (FLAG_REFCLOCK|FLAG_DEFBDELAY));
peer->ttl = (u_char)ttl;
peer->keyid = key;
return peer;
}
@ -395,7 +398,8 @@ peer_config(srcadr, dstadr, hmode, version, minpoll, maxpoll, key, flags)
* If we're here this guy is unknown to us. Make a new peer
* structure for him.
*/
peer = newpeer(srcadr, dstadr, hmode, version, minpoll, maxpoll, key);
peer = newpeer(srcadr, dstadr, hmode, version, minpoll, maxpoll,
ttl, key);
if (peer != 0)
peer->flags |= (u_char)(flags|FLAG_CONFIG);
return peer;
@ -406,13 +410,14 @@ peer_config(srcadr, dstadr, hmode, version, minpoll, maxpoll, key, flags)
* newpeer - initialize a new peer association
*/
struct peer *
newpeer(srcadr, dstadr, hmode, version, minpoll, maxpoll, key)
newpeer(srcadr, dstadr, hmode, version, minpoll, maxpoll, ttl, key)
struct sockaddr_in *srcadr;
struct interface *dstadr;
int hmode;
int version;
int minpoll;
int maxpoll;
int ttl;
U_LONG key;
{
register struct peer *peer;
@ -454,13 +459,10 @@ newpeer(srcadr, dstadr, hmode, version, minpoll, maxpoll, key)
peer->maxpoll = (u_char)maxpoll;
peer->hpoll = peer->minpoll;
peer->ppoll = peer->minpoll;
peer->ttl = ttl;
peer->keyid = key;
if (hmode == MODE_BCLIENT) {
peer->estbdelay = sys_bdelay;
peer->flags |= FLAG_DEFBDELAY;
}
peer->estbdelay = sys_bdelay;
peer->flags |= FLAG_DEFBDELAY;
peer->leap = LEAP_NOTINSYNC;
peer->precision = DEFPRECISION;
peer->dispersion = NTP_MAXDISPERSE;

View File

@ -48,8 +48,7 @@ U_LONG sys_unknownversion; /* don't know version packets */
U_LONG sys_badlength; /* packets with bad length */
U_LONG sys_processed; /* packets processed */
U_LONG sys_badauth; /* packets dropped because of authorization */
U_LONG sys_wanderhold; /* sys_peer held to prevent wandering */
U_LONG sys_limitrejected; /* pkts rejected due toclient count per net */
U_LONG sys_limitrejected; /* pkts rejected due toclient count per net */
/*
* Imported from ntp_timer.c
@ -91,7 +90,8 @@ transmit(peer)
struct pkt xpkt; /* packet to send */
U_LONG peer_timer;
if (peer->hmode != MODE_BCLIENT) {
if ((peer->hmode != MODE_BROADCAST && peer->hmode != MODE_BCLIENT) ||
(peer->hmode == MODE_BROADCAST && sys_leap != LEAP_NOTINSYNC)) {
U_LONG xkeyid;
/*
@ -240,17 +240,14 @@ transmit(peer)
/*
* Finally, adjust the hpoll variable for special conditions.
*/
if (peer->flags & FLAG_SYSPEER && peer->hpoll > sys_poll) {
/* clamp it */
if (peer->hmode == MODE_BCLIENT)
peer->hpoll = peer->ppoll;
else if (peer->flags & FLAG_SYSPEER &&
peer->hpoll > sys_poll)
peer->hpoll = max(peer->minpoll, sys_poll);
}
if (peer->hmode == MODE_BROADCAST || peer->hmode == MODE_BCLIENT) {
/* clamp it */
peer->hpoll = peer->minpoll;
}
/*
* Arrange for our next time out. hpoll will be less than
* Arrange for our next timeout. hpoll will be less than
* maxpoll for sure.
*/
if (peer->event_timer.next != 0)
@ -263,37 +260,6 @@ transmit(peer)
TIMER_ENQUEUE(timerqueue, &peer->event_timer);
}
#if 0
static void
ct_die(after)
{
syslog(LOG_ERR, "timers garbled (%s)", after?"after":"before");
abort();
}
void
check_timers(after)
{
register int i;
register struct event *p, *q;
for (i = 0; i < TIMER_NSLOTS; i++) {
p = &timerqueue[i];
if (p->event_time != 0)
ct_die(after);
do {
q = p;
if ((p = p->next) == 0)
ct_die(after);
if (p->prev != q)
ct_die(after);
} while (p->event_time != 0);
if (p != &timerqueue[i])
ct_die(after);
}
}
#endif
/*
* receive - Receive Procedure. See section 3.4.2 in the specification.
*/
@ -533,6 +499,9 @@ receive(rbufp)
break;
case MODE_PASSIVE:
#ifdef MCAST
/* process the packet to determine the rt-delay */
#endif /* MCAST */
case MODE_SERVER:
/*
* These are obvious errors. Ignore.
@ -550,8 +519,10 @@ receive(rbufp)
/*
* Sort of a repeat of the above...
*/
/*
if ((restrict & RES_NOPEER) || !sys_bclient)
return;
*/
mymode = MODE_BCLIENT;
break;
}
@ -562,7 +533,7 @@ receive(rbufp)
*/
peer = newpeer(&rbufp->recv_srcadr, rbufp->dstadr, mymode,
PKT_VERSION(pkt->li_vn_mode), NTP_MINDPOLL,
NTP_MAXPOLL, hiskeyid);
NTP_MAXPOLL, 0, hiskeyid);
if (peer == 0) {
/*
* The only way this can happen is if the
@ -722,12 +693,11 @@ receive(rbufp)
* out to be bad.
*/
peer2 = newpeer(&rbufp->recv_srcadr,
rbufp->dstadr, MODE_PASSIVE,
PKT_VERSION(pkt->li_vn_mode),
NTP_MINDPOLL, NTP_MAXPOLL,
hiskeyid);
rbufp->dstadr, MODE_PASSIVE,
PKT_VERSION(pkt->li_vn_mode),
NTP_MINDPOLL, NTP_MAXPOLL, 0, hiskeyid);
if (process_packet(peer2, pkt, &rbufp->recv_time,
has_mac, trustable) == 0) {
has_mac, trustable) == 0) {
/*
* Strange situation. We've been receiving
* broadcasts from him which we liked, but
@ -785,20 +755,21 @@ process_packet(peer, pkt, recv_ts, has_mac, trustable)
sys_processed++;
peer->processed++;
peer->rec = *recv_ts;
p_dist = NTOHS_FP(pkt->rootdelay);
p_disp = NTOHS_FP(pkt->rootdispersion);
NTOHL_FP(&pkt->rec, &p_rec);
NTOHL_FP(&pkt->xmt, &p_xmt);
NTOHL_FP(&pkt->org, &p_org);
if (PKT_MODE(pkt->li_vn_mode) != MODE_BROADCAST)
NTOHL_FP(&pkt->org, &p_org);
else
p_org = peer->rec;
peer->rec = *recv_ts;
peer->flash = 0;
randomize = POLL_RANDOMCHANGE;
/*
* Test for old or duplicate packets (tests 1 through 3).
*/
if (L_ISHIS(&peer->org, &p_xmt)) /* count old packets */
peer->oldpkt++;
if (L_ISEQU(&peer->org, &p_xmt)) /* test 1 */
@ -812,6 +783,9 @@ process_packet(peer, pkt, recv_ts, has_mac, trustable)
if ((p_rec.l_ui == 0 && p_rec.l_uf == 0) ||
(p_org.l_ui == 0 && p_org.l_uf == 0))
peer->flash |= TEST3; /* unsynchronized */
} else {
if (p_org.l_ui == 0 && p_org.l_uf == 0)
peer->flash |= TEST3; /* unsynchronized */
}
peer->org = p_xmt; /* reuse byte-swapped pkt->xmt */
peer->ppoll = pkt->ppoll;
@ -917,39 +891,23 @@ process_packet(peer, pkt, recv_ts, has_mac, trustable)
ci.l_ui = t10_ui;
ci.l_uf = t10_uf;
ei = (FP_SECOND >> (-(int)sys_precision));
if (peer->hmode == MODE_BCLIENT) {
#ifdef notdef
if (PKT_MODE(pkt->li_vn_mode) == MODE_CLIENT) {
/*
* A client mode packet, used for delay computation.
* Give the data to the filter.
*/
bdelay_filter(peer, t23_ui, t23_uf, t10_ui, t10_uf);
}
#endif
M_ADDUF(ci.l_ui, ci.l_uf, peer->estbdelay>>1);
/*
* If broadcast mode, time of last reception has been fiddled
* to p_org, rather than originate timestamp. We use this to
* augment dispersion and previously calcuated estbdelay as
* the delay. We know NTP_SKEWFACTOR == 16, which accounts for
* the simplified ei calculation.
*/
if (PKT_MODE(pkt->li_vn_mode) == MODE_BROADCAST) {
M_ADDUF(ci.l_ui, ci.l_uf, peer->estbdelay >> 1);
di = MFPTOFP(0, peer->estbdelay);
ei += peer->rec.l_ui - p_org.l_ui;
} else {
M_ADD(ci.l_ui, ci.l_uf, t23_ui, t23_uf);
M_RSHIFT(ci.l_i, ci.l_uf);
/*
* Calculate di in t23 in full precision, then truncate
* to an s_fp.
*/
M_SUB(t23_ui, t23_uf, t10_ui, t10_uf);
di = MFPTOFP(t23_ui, t23_uf);
/*
* Calculate (t3 - t0) in t23 in full precision, convert
* to single, shift down by MAXSKEW and add to ei.
* We know NTP_SKEWFACTOR == 16
*/
#if 0
t23_ui = peer->rec.l_ui; /* peer->rec == t0 */
t23_uf = peer->rec.l_uf;
M_SUB(t23_ui, t23_uf, p_org.l_ui, p_org.l_uf); /*pkt->org==t3*/
ei += (MFPTOFP(t23_ui, t23_uf) >> NTP_SKEWFACTOR);
#endif
ei += peer->rec.l_ui - p_org.l_ui;
}
#ifdef DEBUG
@ -1073,9 +1031,7 @@ clock_update(peer)
if (d < 0)
d = -d;
sys_rootdelay = peer->rootdelay + d;
sys_maxd = peer->dispersion;
if (peer->flags & FLAG_PREFER)
sys_maxd += peer->selectdisp;
sys_maxd = peer->dispersion + peer->selectdisp;
d = peer->soffset;
if (d < 0)
d = -d;
@ -1171,7 +1127,7 @@ poll_update(peer, new_hpoll, randomize)
* Catch reference clocks here. The polling interval for a
* reference clock is fixed and needn't be maintained by us.
*/
if (peer->flags & FLAG_REFCLOCK)
if (peer->flags & FLAG_REFCLOCK || peer->hmode == MODE_BROADCAST)
return;
/*
@ -1193,7 +1149,9 @@ poll_update(peer, new_hpoll, randomize)
* less that peer.timer, update peer.timer.
*/
oldpoll = peer->hpoll;
if ((peer->flags & FLAG_SYSPEER) && new_hpoll > sys_poll)
if (peer->hmode == MODE_BCLIENT)
peer->hpoll = peer->ppoll;
else if ((peer->flags & FLAG_SYSPEER) && new_hpoll > sys_poll)
peer->hpoll = max(peer->minpoll, sys_poll);
else {
if (new_hpoll > peer->maxpoll)
@ -1208,10 +1166,10 @@ poll_update(peer, new_hpoll, randomize)
newpoll = max((u_char)min(peer->ppoll, peer->hpoll), peer->minpoll);
if (randomize == POLL_MAKERANDOM ||
(randomize == POLL_RANDOMCHANGE && newpoll != oldpoll))
new_timer = (1<<(newpoll - 1))
new_timer = (1 << (newpoll - 1))
+ ranp2(newpoll - 1) + current_time;
else
new_timer = (1<<newpoll) + current_time;
new_timer = (1 << newpoll) + current_time;
evp = &(peer->event_timer);
if (evp->next == 0 || evp->event_time > new_timer) {
TIMER_DEQUEUE(evp);
@ -1358,26 +1316,10 @@ clock_filter(peer, sample_offset, sample_delay, sample_error)
/*
* Find where he goes in, then shift everyone else down
*/
if (peer->hmode == MODE_BCLIENT) {
register s_fp *soffsetp;
/*
* Sort by offset. The most positive offset
* should correspond to the minimum delay.
*/
soffsetp = peer->filter_soffset;
for (i = 0; i < NTP_SHIFT-1; i++)
if (errorp[ord[i]] >= NTP_MAXDISPERSE
|| sample_soffset >= soffsetp[ord[i]])
break;
} else {
/*
* Sort by distance.
*/
for (i = 0; i < NTP_SHIFT-1; i++)
if (errorp[ord[i]] >= NTP_MAXDISPERSE
|| sample_distance <= distance[ord[i]])
break;
}
for (i = 0; i < NTP_SHIFT-1; i++)
if (errorp[ord[i]] >= NTP_MAXDISPERSE
|| sample_distance <= distance[ord[i]])
break;
for (j = NTP_SHIFT-1; j > i; j--)
ord[j] = ord[j-1];
@ -1692,7 +1634,7 @@ clock_select()
if (d < 0)
d = -d;
sdisp += d;
sdisp = ((sdisp>>1) + sdisp) >> 1;
sdisp = ((sdisp >> 1) + sdisp) >> 1;
}
peer_list[i]->selectdisp = sdisp;
if (sdisp > maxd) {
@ -1745,9 +1687,7 @@ clock_select()
for (i = 1; i < nlist; i++)
if (peer_list[i] == sys_peer)
break;
if (i < nlist)
sys_wanderhold++;
else
if (i >= nlist)
sys_peer = peer_list[0];
}
@ -2080,7 +2020,6 @@ init_proto()
sys_unknownversion = 0;
sys_processed = 0;
sys_badauth = 0;
sys_wanderhold = 0;
syslog(LOG_NOTICE, "default precision is initialized to 2**%d", sys_precision);
}
@ -2092,7 +2031,7 @@ init_proto()
void
proto_config(item, value)
int item;
LONG value;
U_LONG value;
{
/*
* Figure out what he wants to change, then do it
@ -2103,11 +2042,33 @@ proto_config(item, value)
* Turn on/off facility to listen to broadcasts
*/
sys_bclient = (int)value;
if (sys_bclient)
if (value)
io_setbclient();
else
io_unsetbclient();
break;
case PROTO_MULTICAST_ADD:
/*
* Add multicast group address
*/
if (!sys_bclient) {
sys_bclient = 1;
io_setbclient();
}
#ifdef MCAST
io_multicast_add(value);
#endif /* MCAST */
break;
case PROTO_MULTICAST_DEL:
/*
* Delete multicast group address
*/
#ifdef MCAST
io_multicast_del(value);
#endif /* MCAST */
break;
case PROTO_PRECISION:
/*
@ -2120,7 +2081,7 @@ proto_config(item, value)
/*
* Set default broadcast delay
*/
sys_bdelay = (((U_LONG)value) + 0x00000800) & 0xfffff000;
sys_bdelay = ((value) + 0x00000800) & 0xfffff000;
break;
case PROTO_AUTHENTICATE:
@ -2136,23 +2097,7 @@ proto_config(item, value)
* Provide an authentication delay value. Round it to
* the microsecond. This is crude.
*/
sys_authdelay = (((U_LONG)value) + 0x00000800) & 0xfffff000;
break;
case PROTO_MAXSKEW:
/*
* Set the maximum skew value
*/
syslog(LOG_ERR,
"proto_config: attempt to set maxskew (obsolete)");
break;
case PROTO_SELECT:
/*
* Set the selection algorithm.
*/
syslog(LOG_ERR,
"proto_config: attempt to set selection algorithm (obsolete)");
sys_authdelay = ((value) + 0x00000800) & 0xfffff000;
break;
default:
@ -2179,7 +2124,6 @@ proto_clr_stats()
sys_badlength = 0;
sys_processed = 0;
sys_badauth = 0;
sys_wanderhold = 0;
sys_stattime = current_time;
sys_limitrejected = 0;
}

View File

@ -93,17 +93,6 @@ refclock_newpeer(peer)
peer->stratum = STRATUM_REFCLOCK;
peer->ppoll = peer->minpoll;
peer->hpoll = peer->minpoll;
peer->maxpoll = peer->minpoll;
/*
* Check the flags. If the peer is configured in client mode
* but prefers the broadcast client filter algorithm, change
* him over.
*/
if (peer->hmode == MODE_CLIENT
&& refclock_conf[clktype]->clock_flags & REF_FLAG_BCLIENT)
peer->hmode = MODE_BCLIENT;
peer->event_timer.peer = peer;
peer->event_timer.event_handler = refclock_transmit;
@ -201,20 +190,14 @@ refclock_transmit(peer)
l_fp off;
if (peer->valid > 0) peer->valid--;
if (peer->hpoll > peer->minpoll) peer->hpoll--;
if (peer->valid > 0)
peer->valid--;
off.l_ui = off.l_uf = 0;
clock_filter(peer, &off, 0, NTP_MAXDISPERSE);
if (peer->flags & FLAG_SYSPEER)
clock_select();
} else {
if (peer->valid < NTP_SHIFT) {
peer->valid++;
} else {
if (peer->hpoll < peer->maxpoll)
peer->hpoll++;
}
}
clock_select();
} else if (peer->valid < NTP_SHIFT)
peer->valid++;
/*
* If he wants to be polled, do it.
@ -313,9 +296,6 @@ refclock_receive(peer, offset, delay, dispersion, reftime, rectime, leap)
case MODE_CLIENT:
peer->pmode = MODE_SERVER;
break;
case MODE_BCLIENT:
peer->pmode = MODE_BROADCAST;
break;
default:
syslog(LOG_ERR, "refclock_receive: internal error, mode = %d",
peer->hmode);

View File

@ -16,6 +16,12 @@
#include "ntp_if.h"
#include "ntp_stdlib.h"
#ifdef KERNEL_PLL
#include <sys/timex.h>
#define ntp_gettime(t) syscall(SYS_ntp_gettime, (t))
#define ntp_adjtime(t) syscall(SYS_ntp_adjtime, (t))
#endif /* KERNEL_PLL */
/*
* Structure to hold request procedure information
*/
@ -56,7 +62,7 @@ static void do_conf P((struct sockaddr_in *, struct interface *, struct req_pkt
static void do_unconf P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void set_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void clr_sys_flag P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void setclr_flags P((struct sockaddr_in *, struct interface *, struct req_pkt *, int));
static void setclr_flags P((struct sockaddr_in *, struct interface *, struct req_pkt *, U_LONG));
static void do_monitor P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void do_nomonitor P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void list_restrict P((struct sockaddr_in *, struct interface *, struct req_pkt *));
@ -83,13 +89,14 @@ static void set_request_keyid P((struct sockaddr_in *, struct interface *, struc
static void set_control_keyid P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void get_ctl_stats P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void get_leap_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#ifdef KERNEL_PLL
static void get_kernel_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#endif /* KERNEL_PLL */
#ifdef REFCLOCK
static void get_clock_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void set_clock_fudge P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#endif /* REFCLOCK */
static void set_maxskew P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void set_precision P((struct sockaddr_in *, struct interface *, struct req_pkt *));
static void set_select_code P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#ifdef REFCLOCK
static void get_clkbug_info P((struct sockaddr_in *, struct interface *, struct req_pkt *));
#endif /* REFCLOCK */
@ -134,9 +141,10 @@ static struct req_proc xntp_codes[] = {
{ REQ_CONTROL_KEY, AUTH, sizeof(U_LONG), set_control_keyid },
{ REQ_GET_CTLSTATS, NOAUTH, 0, get_ctl_stats },
{ REQ_GET_LEAPINFO, NOAUTH, 0, get_leap_info },
{ REQ_SET_MAXSKEW, AUTH, sizeof(u_fp), set_maxskew },
{ REQ_SET_PRECISION, AUTH, sizeof(LONG), set_precision },
{ REQ_SET_SELECT_CODE, AUTH, sizeof(U_LONG), set_select_code },
#ifdef KERNEL_PLL
{ REQ_GET_KERNEL, NOAUTH, 0, get_kernel_info },
#endif /* KERNEL_PLL */
#ifdef REFCLOCK
{ REQ_GET_CLOCKINFO, NOAUTH, sizeof(U_LONG), get_clock_info },
{ REQ_SET_CLKFUDGE, AUTH, sizeof(struct conf_fudge), set_clock_fudge },
@ -162,6 +170,10 @@ U_LONG numresppkts; /* number of resp packets sent with data */
U_LONG errorcounter[INFO_ERR_AUTH+1]; /* lazy way to count errors, indexed */
/* by the error code */
#ifdef KERNEL_PLL
extern int syscall P((int, void *, ...));
#endif /* KERNEL_PLL */
/*
* Imported from the I/O module
*/
@ -177,6 +189,11 @@ extern int debug;
*/
extern U_LONG current_time;
/*
* Imported from ntp_loopfilter.c
*/
extern int pll_control;
/*
* A hack. To keep the authentication module clear of xntp-ism's, we
* include a time reset variable for its stats here.
@ -657,6 +674,7 @@ peer_list_sum(srcadr, inter, inpkt)
ips->delay = HTONS_FP(pp->delay);
HTONL_FP(&pp->offset, &ips->offset);
ips->dispersion = HTONS_FP(pp->dispersion);
pp = pp->next;
ips = (struct info_peer_summary *)more_pkt();
}
@ -724,7 +742,9 @@ peer_info (srcadr, inter, inpkt)
ip->valid = pp->valid;
ip->reach = pp->reach;
ip->unreach = pp->unreach;
ip->trust = 0;
ip->flash = pp->flash;
ip->estbdelay = htonl(pp->estbdelay);
ip->ttl = pp->ttl;
ip->associd = htons(pp->associd);
ip->rootdelay = HTONS_FP(pp->rootdelay);
ip->rootdispersion = HTONS_FP(pp->rootdispersion);
@ -745,12 +765,10 @@ peer_info (srcadr, inter, inpkt)
if (ip->order[i] >= NTP_SHIFT)
ip->order[i] -= NTP_SHIFT;
}
ip->delay = HTONS_FP(pp->delay);
HTONL_FP(&pp->offset, &ip->offset);
ip->delay = HTONS_FP(pp->delay);
ip->dispersion = HTONS_FP(pp->dispersion);
for (i = 0; i < NTP_SHIFT; i++)
ip->bdelay[i] = 0;
ip->estbdelay = htonl(pp->estbdelay);
ip->selectdisp = HTONS_FP(pp->selectdisp);
ip = (struct info_peer *)more_pkt();
}
flush_pkt();
@ -882,12 +900,8 @@ sys_info(srcadr, inter, inpkt)
is->flags |= INFO_FLAG_BCLIENT;
if (sys_authenticate)
is->flags |= INFO_FLAG_AUTHENABLE;
is->selection = 0; /* Obsolete */
HTONL_UF(sys_bdelay, &is->bdelay);
HTONL_UF(sys_authdelay, &is->authdelay);
is->maxskew = 0;
(void) more_pkt();
flush_pkt();
}
@ -915,7 +929,6 @@ sys_stats(srcadr, inter, inpkt)
extern U_LONG sys_badlength;
extern U_LONG sys_processed;
extern U_LONG sys_badauth;
extern U_LONG sys_wanderhold;
extern U_LONG sys_limitrejected;
ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt,
@ -930,7 +943,6 @@ sys_stats(srcadr, inter, inpkt)
ss->badlength = htonl(sys_badlength);
ss->processed = htonl(sys_processed);
ss->badauth = htonl(sys_badauth);
ss->wanderhold = htonl(sys_wanderhold);
ss->limitrejected = htonl(sys_limitrejected);
(void) more_pkt();
flush_pkt();
@ -1168,7 +1180,7 @@ do_conf(srcadr, inter, inpkt)
/* XXX W2DO? minpoll/maxpoll arguments ??? */
if (peer_config(&peeraddr, (struct interface *)0,
cp->hmode, cp->version, cp->minpoll, cp->maxpoll,
cp->keyid, fl) == 0) {
fl, cp->ttl, cp->keyid) == 0) {
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
}
@ -1253,7 +1265,7 @@ set_sys_flag(srcadr, inter, inpkt)
struct interface *inter;
struct req_pkt *inpkt;
{
setclr_flags(srcadr, inter, inpkt, 1);
setclr_flags(srcadr, inter, inpkt, (U_LONG)1);
}
@ -1266,7 +1278,7 @@ clr_sys_flag(srcadr, inter, inpkt)
struct interface *inter;
struct req_pkt *inpkt;
{
setclr_flags(srcadr, inter, inpkt, 0);
setclr_flags(srcadr, inter, inpkt, (U_LONG)0);
}
@ -1278,7 +1290,7 @@ setclr_flags(srcadr, inter, inpkt, set)
struct sockaddr_in *srcadr;
struct interface *inter;
struct req_pkt *inpkt;
int set;
U_LONG set;
{
register U_LONG flags;
@ -1290,15 +1302,20 @@ setclr_flags(srcadr, inter, inpkt, set)
flags = ((struct conf_sys_flags *)inpkt->data)->flags;
if (flags
& ~(SYS_FLAG_BCLIENT|SYS_FLAG_AUTHENTICATE)) {
& ~(SYS_FLAG_BCLIENT | SYS_FLAG_MCLIENT | SYS_FLAG_AUTHENTICATE)) {
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
if (flags & SYS_FLAG_BCLIENT)
proto_config(PROTO_BROADCLIENT, (LONG)set);
proto_config(PROTO_BROADCLIENT, set);
if (flags & SYS_FLAG_MCLIENT)
if (set)
proto_config(PROTO_MULTICAST_ADD, INADDR_NTP);
else
proto_config(PROTO_MULTICAST_DEL, INADDR_NTP);
if (flags & SYS_FLAG_AUTHENTICATE)
proto_config(PROTO_AUTHENTICATE, (LONG)set);
proto_config(PROTO_AUTHENTICATE, set);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
@ -2084,6 +2101,57 @@ get_leap_info(srcadr, inter, inpkt)
}
#ifdef KERNEL_PLL
/*
* get_kernel_info - get kernel pll/pps information
*/
static void
get_kernel_info(srcadr, inter, inpkt)
struct sockaddr_in *srcadr;
struct interface *inter;
struct req_pkt *inpkt;
{
register struct info_kernel *ik;
struct timex ntx;
if (!pll_control)
return;
memset((char *)&ntx, 0, sizeof(ntx));
(void)ntp_adjtime(&ntx);
ik = (struct info_kernel *)prepare_pkt(srcadr, inter, inpkt,
sizeof(struct info_kernel));
/*
* pll variables
*/
ik->offset = htonl(ntx.offset);
ik->freq = htonl(ntx.freq);
ik->maxerror = htonl(ntx.maxerror);
ik->esterror = htonl(ntx.esterror);
ik->status = htons(ntx.status);
ik->constant = htonl(ntx.constant);
ik->precision = htonl(ntx.precision);
ik->tolerance = htonl(ntx.tolerance);
/*
* pps variables
*/
ik->ppsfreq = htonl(ntx.ppsfreq);
ik->jitter = htonl(ntx.jitter);
ik->shift = htons(ntx.shift);
ik->stabil = htonl(ntx.stabil);
ik->jitcnt = htonl(ntx.jitcnt);
ik->calcnt = htonl(ntx.calcnt);
ik->errcnt = htonl(ntx.errcnt);
ik->stbcnt = htonl(ntx.stbcnt);
(void) more_pkt();
flush_pkt();
}
#endif /* KERNEL_PLL */
#ifdef REFCLOCK
/*
* get_clock_info - get info about a clock
@ -2208,29 +2276,6 @@ set_clock_fudge(srcadr, inter, inpkt)
}
#endif
/*
* set_maxskew - set the system maxskew parameter
*/
static void
set_maxskew(srcadr, inter, inpkt)
struct sockaddr_in *srcadr;
struct interface *inter;
struct req_pkt *inpkt;
{
register u_fp maxskew;
if (INFO_NITEMS(inpkt->err_nitems) > 1) {
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
maxskew = NTOHS_FP(*(u_fp *)(inpkt->data));
proto_config(PROTO_MAXSKEW, (LONG)maxskew);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
/*
* set_precision - set the system precision
*/
@ -2254,31 +2299,6 @@ set_precision(srcadr, inter, inpkt)
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
/*
* set_select_code - set a select code to use
*/
static void
set_select_code(srcadr, inter, inpkt)
struct sockaddr_in *srcadr;
struct interface *inter;
struct req_pkt *inpkt;
{
register U_LONG select_code;
select_code = ntohl(*(U_LONG *)(inpkt->data));
if (INFO_NITEMS(inpkt->err_nitems) > 1 ||
select_code < SELECT_1 || select_code > SELECT_5) {
req_ack(srcadr, inter, inpkt, INFO_ERR_FMT);
return;
}
proto_config(PROTO_SELECT, (LONG)select_code);
req_ack(srcadr, inter, inpkt, INFO_OKAY);
}
#ifdef REFCLOCK
/*
* get_clkbug_info - get debugging info about a clock

View File

@ -251,10 +251,23 @@ clock_parms(tickadj, tick)
* Note that this version grovels about in /dev/kmem to determine
* these values. This probably should be elsewhere.
*/
/* Define the following to be what the tick and tickadj variables are
* called in your kernel.
#if defined(SYS_UNIXWARE1)
/*
* clock_parms - return the local clock tickadj and tick parameters
*
* The values set here were determined experimentally on a 486 system
* I'm not confident in them. - RAS
*
*/
static void
clock_parms(tickadj, tick)
U_LONG *tickadj;
U_LONG *tick;
{
*tick = 10000; /* microseconds */
*tickadj = 80; /* microseconds */
}
#else /* SYS_UNIXWARE1 */
#if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
#define K_TICKADJ_NAME "tickadj"
@ -373,6 +386,7 @@ clock_parms(tickadj, tick)
#undef K_TICK_NAME
#undef N_NAME
}
#endif /* SYS_UNIXWARE1 */
#endif /* HAVE_READKMEM */
#if defined(SOLARIS)&&defined(ADJTIME_IS_ACCURATE)
@ -421,7 +435,6 @@ clock_parms(tickadj, tick)
}
#endif /* sgi */
#ifdef NOKMEM
#ifndef HZ

View File

@ -14,7 +14,7 @@
#include <sys/rtprio.h>
#endif
#if defined(SYS_SVR4)
#if defined(SYS_SVR4) || defined (SYS_UNIXWARE1)
#include <termios.h>
#endif

View File

@ -603,7 +603,7 @@ chu_receive(rbufp)
* we want.
*/
#ifndef NO_CHU_DEBUG
#ifdef CHU_DEBUG
syslog(LOG_DEBUG, "CHU %s packet:", (chuc->chutype == CHU_YEAR)?
"year":"time");
for (i=0; i < NCHUCHARS; i++) {

View File

@ -418,7 +418,9 @@ struct peer *peer;
irig->hour = MULBY10(cp[4] - '0') + cp[5] - '0';
irig->minute = MULBY10(cp[7] - '0') + cp[8] - '0';
irig->second = MULBY10(cp[10] - '0') + cp[11] - '0';
if (cp[12] != ' ')
if (cp[12] = ' ')
irig->leap = 0;
else
irig->leap = LEAP_NOTINSYNC;
if (irig->day < 1 || irig->day > 366) {
irig->baddata++;

View File

@ -139,7 +139,7 @@
#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
#ifndef STREAM_PP1
#define STREAM_PP1 "ppsclockd\0<-- patch space for module name1 -->"
#define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
#endif
#ifndef STREAM_PP2
#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"

View File

@ -1,8 +1,8 @@
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
* /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
* /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
*
* refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
* refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
*
* generic reference clock driver for receivers
*
@ -30,6 +30,8 @@
* PPS - supply loopfilter with PPS samples (if configured)
* PPSPPS - notify loopfilter of PPS file descriptor
*
* FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work
* with FreeBSD.
* TTY defines:
* HAVE_BSD_TTYS - currently unsupported
* HAVE_SYSV_TTYS - will use termio.h
@ -82,6 +84,9 @@
#include <time.h>
#include <sys/errno.h>
#ifdef FREEBSD_CONRAD
#include <sys/ioctl.h>
#endif
extern int errno;
#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
@ -129,7 +134,7 @@ CURRENTLY NO BSD TTY SUPPORT
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp";
#endif
/**===========================================================================
@ -440,7 +445,12 @@ static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE };
#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
#define RAWDCF_FORMAT "RAW DCF77 Timecode"
#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
#ifdef FREEBSD_CONRAD
#define RAWDCF_CFLAG (CS8|CREAD|CLOCAL)
#else
#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL)
#endif
#define RAWDCF_IFLAG 0
#define RAWDCF_OFLAG 0
#define RAWDCF_LFLAG 0
@ -1482,11 +1492,22 @@ local_receive(rbufp)
struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
register int count;
register char *s;
#ifdef FREEBSD_CONRAD
struct timeval foo;
#endif
/*
* eat all characters, parsing then and feeding complete samples
*/
count = rbufp->recv_length;
s = rbufp->recv_buffer;
#ifdef FREEBSD_CONRAD
ioctl(parse->fd,TIOCTIMESTAMP,&foo);
TVTOTS(&foo, &rbufp->recv_time);
rbufp->recv_time.l_uf += TS_ROUNDBIT;
rbufp->recv_time.l_ui += JAN_1970;
rbufp->recv_time.l_uf &= TS_MASK;
#endif
while (count--)
{
@ -2271,7 +2292,10 @@ parse_start(sysunit, peer)
tm.c_iflag = clockinfo[type].cl_iflag;
tm.c_oflag = clockinfo[type].cl_oflag;
tm.c_lflag = clockinfo[type].cl_lflag;
#ifdef FREEBSD_CONRAD
tm.c_ispeed = 50;
tm.c_ospeed = 50;
#endif
if (TTY_SETATTR(fd232, &tm) == -1)
{
syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
@ -2314,6 +2338,21 @@ parse_start(sysunit, peer)
return 0; /* well, ok - special initialisation broke */
}
#ifdef FREEBSD_CONRAD
{
int i,j;
struct timeval tv;
ioctl(parse->fd,TIOCTIMESTAMP,&tv);
j = TIOCM_RTS;
i = ioctl(fd232, TIOCMBIC, &j);
if (i < 0) {
syslog(LOG_ERR,
"PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m",
CL_UNIT(parse->unit));
}
}
#endif
strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
@ -2824,7 +2863,7 @@ parse_control(unit, in, out)
sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
tt = add_var(&out->kv_list, 128, RO);
sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\"");
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
@ -3103,7 +3142,11 @@ parse_process(parse, parsetime)
L_ADD(&off, &offset);
rectime = off; /* this makes org time and xmt time somewhat artificial */
if (parse->flags & PARSE_STAT_FILTER)
L_SUB(&off, &parsetime->parse_stime.fp);
if ((parse->flags & PARSE_STAT_FILTER) &&
(off.l_i > -60) &&
(off.l_i < 60)) /* take usec error only if within +- 60 secs */
{
struct timeval usecerror;
/*
@ -3115,10 +3158,6 @@ parse_process(parse, parsetime)
sTVTOTS(&usecerror, &off);
L_ADD(&off, &offset);
}
else
{
L_SUB(&off, &parsetime->parse_stime.fp);
}
}
if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
@ -3409,6 +3448,12 @@ trimble_init(parse)
* History:
*
* refclock_parse.c,v
* Revision 3.53 1994/03/25 13:07:39 kardel
* fixed offset calculation for large (>4 Min) offsets
*
* Revision 3.52 1994/03/03 09:58:00 kardel
* stick -kv in cvs is no fun
*
* Revision 3.49 1994/02/20 13:26:00 kardel
* rcs id cleanup
*

View File

@ -66,10 +66,9 @@ static void ctlstats P((struct parse *, FILE *));
static void leapinfo P((struct parse *, FILE *));
static void clockstat P((struct parse *, FILE *));
static void fudge P((struct parse *, FILE *));
static void maxskew P((struct parse *, FILE *));
static void clkbug P((struct parse *, FILE *));
static void setprecision P((struct parse *, FILE *));
static void setselect P((struct parse *, FILE *));
static void kerninfo P((struct parse *, FILE *));
/*
* Commands we understand. Ntpdc imports this.
@ -77,37 +76,37 @@ static void setselect P((struct parse *, FILE *));
struct xcmd opcmds[] = {
{ "listpeers", peerlist, { NO, NO, NO, NO },
{ "", "", "", "" },
"print list of peers the server knows about" },
"display list of peers the server knows about" },
{ "peers", peers, { NO, NO, NO, NO },
{ "", "", "", "" },
"print peer summary information" },
"display peer summary information" },
{ "dmpeers", dmpeers, { NO, NO, NO, NO },
{ "", "", "", "" },
"print peer summary info the way Dave Mills likes it" },
"display peer summary info the way Dave Mills likes it" },
{ "showpeer", showpeer, { ADD, OPT|ADD, OPT|ADD, OPT|ADD },
{ "peer_address", "peer2_addr", "peer3_addr", "peer4_addr" },
"print detailed information for one or more peers" },
"display detailed information for one or more peers" },
{ "pstats", peerstats, { ADD, OPT|ADD, OPT|ADD, OPT|ADD },
{ "peer_address", "peer2_addr", "peer3_addr", "peer4_addr" },
"print statistical information for one or more peers" },
"display statistical information for one or more peers" },
{ "loopinfo", loopinfo, { OPT|STR, NO, NO, NO },
{ "oneline|multiline", "", "", "" },
"print loop filter information" },
"display loop filter information" },
{ "sysinfo", sysinfo, { NO, NO, NO, NO },
{ "", "", "", "" },
"print local server information" },
"display local server information" },
{ "sysstats", sysstats, { NO, NO, NO, NO },
{ "", "", "", "" },
"print local server statistics" },
"display local server statistics" },
{ "memstats", memstats, { NO, NO, NO, NO },
{ "", "", "", "" },
"print peer memory usage statistics" },
"display peer memory usage statistics" },
{ "iostats", iostats, { NO, NO, NO, NO },
{ "", "", "", "" },
"print I/O subsystem statistics" },
"display I/O subsystem statistics" },
{ "timerstats", timerstats, { NO, NO, NO, NO },
{ "", "", "", "" },
"print event timer subsystem statistics" },
"display event timer subsystem statistics" },
{ "addpeer", addpeer, { ADD, OPT|UINT, OPT|UINT, OPT|STR },
{ "addr", "keyid", "version", "minpoll|prefer" },
"configure a new peer association" },
@ -121,14 +120,14 @@ struct xcmd opcmds[] = {
{ "peer_address", "peer2_addr", "peer3_addr", "peer4_addr" },
"unconfigure existing peer assocations" },
{ "set", set, { STR, OPT|STR, OPT|STR, OPT|STR },
{ "bclient|auth", "...", "...", "..." },
"set a system flag (bclient, authenticate)" },
{ "bclient|mclient|auth", "...", "...", "..." },
"set a system flag (bclient, mclient, auth)" },
{ "clear", sys_clear, { STR, OPT|STR, OPT|STR, OPT|STR },
{ "bclient|auth", "...", "...", "..." },
"clear a system flag (bclient, authenticate)" },
{ "bclient|mclient|auth", "...", "...", "..." },
"clear a system flag (bclient, mclient, auth)" },
{ "reslist", reslist, { NO, NO, NO, NO },
{ "", "", "", "" },
"print the server's restrict list" },
"display the server's restrict list" },
{ "restrict", restrict, { ADD, ADD, STR, OPT|STR },
{ "address", "mask",
"ntpport|ignore|noserve|notrust|noquery|nomodify|nopeer",
@ -144,7 +143,7 @@ struct xcmd opcmds[] = {
"delete a restrict entry" },
{ "monlist", monlist, { NO, NO, NO, NO },
{ "", "", "", "" },
"print data the server's monitor routines have collected" },
"display data the server's monitor routines have collected" },
{ "monitor", monitor, { STR, NO, NO, NO },
{ "on|off", "", "", "" },
"turn the server's monitoring facility on or off" },
@ -171,10 +170,10 @@ struct xcmd opcmds[] = {
"remove one or more key ID's from the trusted list" },
{ "authinfo", authinfo, { NO, NO, NO, NO },
{ "", "", "", "" },
"obtain information concerning the state of the authentication code" },
"display the state of the authentication code" },
{ "traps", traps, { NO, NO, NO, NO },
{ "", "", "", "" },
"obtain information about traps set in server" },
"display the traps set in the server" },
{ "addtrap", addtrap, { ADD, OPT|UINT, OPT|ADD, NO },
{ "address", "port", "interface", "" },
"configure a trap in the server" },
@ -189,28 +188,26 @@ struct xcmd opcmds[] = {
"change the keyid the server uses to authenticate control messages" },
{ "ctlstats", ctlstats, { NO, NO, NO, NO },
{ "", "", "", "" },
"obtain packet count statistics from the control module" },
"display packet count statistics from the control module" },
{ "leapinfo", leapinfo, { NO, NO, NO, NO },
{ "", "", "", "" },
"obtain information about the current leap second state" },
"display the current leap second state" },
{ "clockstat", clockstat, { ADD, OPT|ADD, OPT|ADD, OPT|ADD },
{ "address", "address", "address", "address" },
"obtain status information about the specified clock" },
"display clock status information" },
{ "fudge", fudge, { ADD, STR, STR, NO },
{ "address", "time1|time2|val1|val2|flags", "value", "" },
"set/change one of a clock's fudge factors" },
{ "maxskew", maxskew, { STR, NO, NO, NO },
{ "maximum_skew", "", "", "" },
"set the server's maximum skew parameter" },
{ "clkbug", clkbug, { ADD, OPT|ADD, OPT|ADD, OPT|ADD },
{ "address", "address", "address", "address" },
"obtain debugging information from the specified clock" },
"display clock debugging information" },
{ "setprecision", setprecision, { INT, NO, NO, NO },
{ "sys_precision", "", "", "" },
"set the server's advertised precision" },
{ "setselect", setselect, { UINT, NO, NO, NO },
{ "select_algorithm_number", "", "", "" },
"change the selection weighting algorithm used by the server" },
{ "kerninfo", kerninfo, { NO, NO, NO, NO },
{ "", "", "", "" },
"display the kernel pll/pps variables" },
{ 0, 0, { NO, NO, NO, NO },
{ "", "", "", "" }, "" }
};
@ -374,9 +371,9 @@ dopeers(pcmd, fp, dmstyle)
return;
(void) fprintf(fp,
" remote local st poll reach delay offset disp\n");
" remote local st poll reach delay offset disp\n");
(void) fprintf(fp,
"======================================================================\n");
"=======================================================================\n");
while (items > 0) {
if (!dmstyle) {
if (plist->flags & INFO_FLAG_SYSPEER)
@ -407,13 +404,14 @@ dopeers(pcmd, fp, dmstyle)
ntp_poll = 1<<max(min3(plist->ppoll, plist->hpoll, NTP_MAXPOLL),
NTP_MINPOLL);
(void) fprintf(fp,
"%c%-15.15s %-15.15s %2d %4d %3o %7.7s %9.9s %6.6s\n",
"%c%-15.15s %-15.15s %2d %4d %3o %7.7s %9.9s %7.7s\n",
c, nntohost(plist->srcadr),
numtoa(plist->dstadr),
plist->stratum, ntp_poll, plist->reach,
fptoa(NTOHS_FP(plist->delay), 4),
fptoa(NTOHS_FP(plist->delay), 5),
lfptoa(&tempts, 6),
ufptoa(NTOHS_FP(plist->dispersion), 4));
ufptoa(NTOHS_FP(plist->dispersion), 5));
plist++;
items--;
}
@ -451,16 +449,19 @@ printpeer(pp, fp)
"leap %c%c, refid [%s], rootdistance %s, rootdispersion %s\n",
pp->leap & 0x2 ? '1' : '0',
pp->leap & 0x1 ? '1' : '0',
str, ufptoa(HTONS_FP(pp->rootdelay), 4),
ufptoa(HTONS_FP(pp->rootdispersion), 4));
str, ufptoa(HTONS_FP(pp->rootdelay), 5),
ufptoa(HTONS_FP(pp->rootdispersion), 5));
(void) fprintf(fp,
"ppoll %d, hpoll %d, keyid %u, version %d, association %u\n",
pp->ppoll, pp->hpoll, pp->keyid, pp->version, ntohs(pp->associd));
(void) fprintf(fp,
"valid %d, reach %03o, unreach %d, trust %03o\n",
pp->valid, pp->reach, pp->unreach, pp->trust);
"valid %d, reach %03o, unreach %d, flash %03o, ",
pp->valid, pp->reach, pp->unreach, pp->flash);
(void) fprintf(fp, "estbdelay %s, ttl %d\n",
mfptoa(0, ntohl(pp->estbdelay), 5), pp->ttl);
(void) fprintf(fp, "timer %ds, flags", ntohl(pp->timer));
if (pp->flags == 0) {
@ -508,7 +509,8 @@ printpeer(pp, fp)
(void) fprintf(fp, "filter delay: ");
for (i = 0; i < NTP_SHIFT; i++) {
(void) fprintf(fp, " %-8.8s", fptoa(HTONS_FP(pp->filtdelay[i]),4));
(void) fprintf(fp, " %-8.8s",
fptoa(HTONS_FP(pp->filtdelay[i]), 5));
if (i == (NTP_SHIFT>>1)-1)
(void) fprintf(fp, "\n ");
}
@ -517,7 +519,7 @@ printpeer(pp, fp)
(void) fprintf(fp, "filter offset:");
for (i = 0; i < NTP_SHIFT; i++) {
HTONL_FP(&pp->filtoffset[i], &tempts);
(void) fprintf(fp, " %-8.8s", lfptoa(&tempts, 5));
(void) fprintf(fp, " %-8.8s", lfptoa(&tempts, 6));
if (i == (NTP_SHIFT>>1)-1)
(void) fprintf(fp, "\n ");
}
@ -531,23 +533,13 @@ printpeer(pp, fp)
}
(void) fprintf(fp, "\n");
(void) fprintf(fp, "bdelay filter:");
for (i = 0; i < NTP_SHIFT; i++) {
(void) fprintf(fp, " %-8.8s",
mfptoa(0, ntohl(pp->bdelay[i]), 5));
if (i == (NTP_SHIFT>>1)-1)
(void) fprintf(fp, "\n ");
}
(void) fprintf(fp, "\n");
(void) fprintf(fp, "delay %s, estbdelay %s\n",
fptoa(HTONS_FP(pp->delay), 4),
mfptoa(0, ntohl(pp->estbdelay), 4));
HTONL_FP(&pp->offset, &tempts);
(void) fprintf(fp, "offset %s, dispersion %s\n",
lfptoa(&tempts, 6),
ufptoa(HTONS_FP(pp->dispersion), 4));
(void) fprintf(fp,
"offset %s, delay %s, dispersion %s, selectdisp %s\n",
lfptoa(&tempts, 6), fptoa(HTONS_FP(pp->delay), 5),
ufptoa(HTONS_FP(pp->dispersion), 5),
ufptoa(HTONS_FP(pp->selectdisp), 5));
}
@ -781,11 +773,10 @@ sysinfo(pcmd, fp)
is->leap & 0x1 ? '1' : '0');
(void) fprintf(fp, "stratum: %d\n", (int)is->stratum);
(void) fprintf(fp, "precision: %d\n", (int)is->precision);
(void) fprintf(fp, "select algorithm: %d\n", (int)is->selection);
(void) fprintf(fp, "sync distance: %s\n",
fptoa(NTOHS_FP(is->rootdelay), 4));
fptoa(NTOHS_FP(is->rootdelay), 5));
(void) fprintf(fp, "sync dispersion: %s\n",
ufptoa(NTOHS_FP(is->rootdispersion), 4));
ufptoa(NTOHS_FP(is->rootdispersion), 5));
if (is->stratum <= 1) {
junk[4] = 0;
memmove(junk, (char *)&is->refid, 4);
@ -799,7 +790,8 @@ sysinfo(pcmd, fp)
(void) fprintf(fp, "reference time: %s\n", prettydate(&tempts));
(void) fprintf(fp, "system flags: ");
if ((is->flags & (INFO_FLAG_BCLIENT|INFO_FLAG_AUTHENABLE)) == 0) {
if ((is->flags & (INFO_FLAG_BCLIENT | INFO_FLAG_MCLIENT |
INFO_FLAG_AUTHENABLE)) == 0) {
(void) fprintf(fp, "none\n");
} else {
res = 0;
@ -807,6 +799,10 @@ sysinfo(pcmd, fp)
(void) fprintf(fp, "bclient");
res = 1;
}
if (is->flags & INFO_FLAG_MCLIENT) {
(void) fprintf(fp, "mclient");
res = 1;
}
if (is->flags & INFO_FLAG_AUTHENABLE)
(void) fprintf(fp, "%sauthenticate",
res ? ", " : "");
@ -818,8 +814,6 @@ sysinfo(pcmd, fp)
HTONL_FP(&is->authdelay, &tempts);
(void) fprintf(fp, "encryption delay: %s\n", lfptoa(&tempts, 7));
(void) fprintf(fp, "maximum skew: %s\n",
ufptoa(NTOHS_FP(is->maxskew), 4));
}
@ -871,8 +865,6 @@ sysstats(pcmd, fp)
ntohl(ss->processed));
(void) fprintf(fp, "bad authentication: %d\n",
ntohl(ss->badauth));
(void) fprintf(fp, "wander hold downs: %d\n",
ntohl(ss->wanderhold));
if (itemsize != sizeof(struct info_sys_stats))
return;
@ -1214,6 +1206,8 @@ doset(pcmd, fp, req)
for (items = 0; items < pcmd->nargs; items++) {
if (STREQ(pcmd->argval[items].string, "bclient"))
sys.flags |= SYS_FLAG_BCLIENT;
else if (STREQ(pcmd->argval[items].string, "mclient"))
sys.flags |= SYS_FLAG_MCLIENT;
else if (STREQ(pcmd->argval[items].string, "auth"))
sys.flags |= SYS_FLAG_AUTHENTICATE;
else {
@ -2284,39 +2278,6 @@ fudge(pcmd, fp)
return;
}
/*
* maxskew - set the server's maximum skew parameter
*/
static void
maxskew(pcmd, fp)
struct parse *pcmd;
FILE *fp;
{
u_fp Xmaxskew;
l_fp tmp;
int items;
int itemsize;
char *dummy;
int res;
if (!atolfp(pcmd->argval[0].string, &tmp)) {
(void) fprintf(stderr, "What the heck does %s mean?\n",
pcmd->argval[0].string);
return;
}
Xmaxskew = HTONS_FP(LFPTOFP(&tmp));
res = doquery(IMPL_XNTPD, REQ_SET_MAXSKEW, 1, 1, sizeof(u_fp),
(char *)&Xmaxskew, &items, &itemsize, &dummy);
if (res == 0)
(void) fprintf(fp, "done!\n");
}
/*
* clkbug - get and print clock debugging information
*/
@ -2432,27 +2393,72 @@ setprecision(pcmd, fp)
}
/*
* setselect - change the server's selection algorithm
* kerninfo - display the kernel pll/pps variables
*/
static void
setselect(pcmd, fp)
kerninfo(pcmd, fp)
struct parse *pcmd;
FILE *fp;
{
U_LONG select_code;
struct info_kernel *ik;
int items;
int itemsize;
char *dummy;
int res;
select_code = htonl(pcmd->argval[0].uval);
res = doquery(IMPL_XNTPD, REQ_GET_KERNEL, 0, 0, 0, (char *)NULL,
&items, &itemsize, (char **)&ik);
if (res != 0 && items == 0)
return;
if (!check1item(items, fp))
return;
if (!checkitemsize(itemsize, sizeof(struct info_kernel)))
return;
res = doquery(IMPL_XNTPD, REQ_SET_SELECT_CODE, 1, 1, sizeof(U_LONG),
(char *)&select_code, &items, &itemsize, &dummy);
if (res == 0)
(void) fprintf(fp, "done!\n");
return;
/*
* pll variables
*/
(void)fprintf(fp, "pll offset: %d us\n",
ntohl(ik->offset));
(void)fprintf(fp, "pll frequency: %s ppm\n",
fptoa((s_fp)ntohl(ik->freq), 3));
(void)fprintf(fp, "maximum error: %d us\n",
ntohl(ik->maxerror));
(void)fprintf(fp, "estimated error: %d us\n",
ntohl(ik->esterror));
(void)fprintf(fp, "status: %04x\n",
ntohs(ik->status & 0xffff));
(void)fprintf(fp, "pll time constant: %d\n",
ntohl(ik->constant));
(void)fprintf(fp, "precision: %d us\n",
ntohl(ik->precision));
(void)fprintf(fp, "frequency tolerance: %s ppm\n",
fptoa((s_fp)ntohl(ik->tolerance), 0));
/*
* For backwards compatibility (ugh), we find the pps variables
* only if the shift member is nonzero.
*/
if (!ik->shift)
return;
/*
* pps variables
*/
(void)fprintf(fp, "pps frequency: %s ppm\n",
fptoa((s_fp)ntohl(ik->ppsfreq), 3));
(void)fprintf(fp, "pps stability: %s ppm\n",
fptoa((s_fp)ntohl(ik->stabil), 3));
(void)fprintf(fp, "pps jitter: %d us\n",
ntohl(ik->jitter));
(void)fprintf(fp, "calibration interval: %d s\n",
1 << ntohs(ik->shift));
(void)fprintf(fp, "calibration cycles: %d\n",
ntohl(ik->calcnt));
(void)fprintf(fp, "jitter exceeded: %d\n",
ntohl(ik->jitcnt));
(void)fprintf(fp, "stability exceeded: %d\n",
ntohl(ik->stbcnt));
(void)fprintf(fp, "calibration errors: %d\n",
ntohl(ik->errcnt));
}

View File

@ -46,6 +46,7 @@ struct conf_entry {
#define ce_minpoll ce_config.minpoll
#define ce_maxpoll ce_config.maxpoll
#define ce_flags ce_config.flags
#define ce_ttl ce_config.ttl
#define ce_keyid ce_config.keyid
/*
@ -100,8 +101,9 @@ int resolve_value; /* next value of resolve timer */
#define TOK_MINPOLL 3
#define TOK_MAXPOLL 4
#define TOK_FLAGS 5
#define TOK_KEYID 6
#define NUMTOK 7
#define TOK_TTL 6
#define TOK_KEYID 7
#define NUMTOK 8
#define MAXLINESIZE 512
@ -128,7 +130,7 @@ extern int errno;
static RETSIGTYPE bong P((int));
static void checkparent P((void));
static void removeentry P((struct conf_entry *));
static void addentry P((char *, int, int, int, int, int, U_LONG));
static void addentry P((char *, int, int, int, int, int, int, U_LONG));
static int findhostaddr P((struct conf_entry *));
static void openntp P((void));
static int request P((struct conf_peer *));
@ -338,13 +340,14 @@ removeentry(entry)
* addentry - add an entry to the configuration list
*/
static void
addentry(name, mode, version, minpoll, maxpoll, flags, keyid)
addentry(name, mode, version, minpoll, maxpoll, flags, ttl, keyid)
char *name;
int mode;
int version;
int minpoll;
int maxpoll;
int flags;
int ttl;
U_LONG keyid;
{
register char *cp;
@ -363,6 +366,7 @@ addentry(name, mode, version, minpoll, maxpoll, flags, keyid)
ce->ce_minpoll = (u_char)minpoll;
ce->ce_maxpoll = (u_char)maxpoll;
ce->ce_flags = (u_char)flags;
ce->ce_ttl = (u_char)ttl;
ce->ce_keyid = htonl(keyid);
ce->ce_next = NULL;
@ -802,9 +806,9 @@ readconf(fp, name)
* This is as good as we can check it. Add it in.
*/
addentry(token[TOK_HOSTNAME], (int)intval[TOK_HMODE],
(int)intval[TOK_VERSION],
(int)intval[TOK_MINPOLL], (int)intval[TOK_MAXPOLL],
flags, intval[TOK_KEYID]);
(int)intval[TOK_VERSION], (int)intval[TOK_MINPOLL],
(int)intval[TOK_MAXPOLL], flags, (int)intval[TOK_TTL],
intval[TOK_KEYID]);
}
}