1
0
mirror of https://git.FreeBSD.org/src.git synced 2024-12-28 11:57:28 +00:00
freebsd/usr.sbin/xntpd/patches/patch.3
1994-04-21 00:33:33 +00:00

3033 lines
77 KiB
Groff

diff -c TODO:1.1.1.3 TODO:3.5
*** TODO:1.1.1.3 Wed Jan 26 21:46:47 1994
--- TODO Wed Jan 26 21:46:48 1994
***************
*** 1,5 ****
#
! # TODO,v 3.4 1994/01/23 17:19:06 kardel Exp
#
This file contains problems known to the authors that still need to be done.
We would appreciate if you could spare some of your time to look through
--- 1,5 ----
#
! # TODO,v 3.5 1994/01/25 19:03:55 kardel Exp
#
This file contains problems known to the authors that still need to be done.
We would appreciate if you could spare some of your time to look through
diff -c doc/xntpd.8:1.1.1.11 doc/xntpd.8:3.21
*** doc/xntpd.8:1.1.1.11 Wed Jan 26 21:47:54 1994
--- doc/xntpd.8 Wed Jan 26 21:47:55 1994
***************
*** 74,79 ****
--- 74,85 ----
] [
.B -t
.I trustedkey
+ ] [
+ .B -v
+ .I variable
+ ] [
+ .B -V
+ .I variable
]
.SH DESCRIPTION
.I Xntpd
***************
*** 140,145 ****
--- 146,155 ----
specify a directory to be used for creating statistics files
.Ip -t 8
add a key number to the trusted key list
+ .Ip -v 8
+ add a system variable
+ .Ip -V 8
+ add a system variable listed by default
.SH "CONFIGURATION FILE OPTIONS"
.IR Xntpd 's
configuration file is relatively free format. Comments, which may be
***************
*** 494,499 ****
--- 504,534 ----
This command is obsolete and not available in this version of
.I xntpd.
.PP
+ .B setvar
+ .I variable
+ .I [default]
+ .PP
+ This command adds an additional system variable. These variables can be
+ used to distribute additional information such as the access policy. If
+ the variable of the from <name>=<value> is followed by the
+ .I default
+ keyword the variable will be listed as part of the default system
+ variables (ntpq rv command). These additional variables serve informational
+ purposes only. They are not related to the protocol other that they can be
+ listed. The known protocol variables will always overide any variables defined
+ via the
+ .I setvar
+ mechanism.
+ .PP
+ There are three special variables that contain the names of all variable of
+ the same group. The
+ .I sys_var_list
+ holds the names of all system variables. The
+ .I peer_var_list
+ holds the names of all peer variables and the
+ .I clock_var_list
+ hold the names of the reference clock variables.
+ .PP
.B resolver
.I /path/xntpres
.PP
***************
*** 1093,1101 ****
time.
On the availability of PPS information the
.I time2
! fudge factor show the difference betwteen the PPS time stamp and the reception
! time stamp of the serial signal. This parameter is read only attempts to
! set this parameter will be ignored.
The
.I flag0
enables input filtering. This a median filter with continuous sampling. The
--- 1128,1140 ----
time.
On the availability of PPS information the
.I time2
! fudge factor defines the skew between the PPS time stamp and the reception
! time stamp of the PPS signal. This parameter is usually 0 as usually
! the PPS signal is believed in time and OS delays should be corrected
! in the machine specific section of the kernel driver.
! .I time2
! needs only be set when the actial PPS signal is delayed for some
! reason.
The
.I flag0
enables input filtering. This a median filter with continuous sampling. The
***************
*** 1109,1121 ****
.I ntpq
timecode variable
.PP
! The timecode variable in the ntpq read clock variable command contains several
! fields. The first field is the local time in Unix format. The second field is
! the offset to UTC (format HHMM). The currently active receiver flags are listed
! next. Additional feature flags of the receiver are optionally listed in paranthesis.
! The actual time code is enclosed in angle brackets < >. A qualification of the
! decoded time code format is following the time code. The last piece of information
! is the overall running time and the accumulated times for the clock event states.
.PP
Unit encoding
.PP
--- 1148,1172 ----
.I ntpq
timecode variable
.PP
! The ntpq read clock variables command list several variables. These
! hold followinf information:
! .I refclock_time
! is the local time with the offset to UTC (format HHMM).
! The currently active receiver flags are listed in
! .I refclock_status.
! Additional feature flags of the receiver are optionally listed in paranthesis.
! The actual time code is listed in
! .I timecode.
! A qualification of the decoded time code format is following in
! .I refclock_format.
! The last piece of information is the overall running time and the accumulated
! times for the clock event states in
! .I refclock_states.
! When PPS information is present additional variable are available.
! .I refclock_ppstime
! lists then the PPS timestamp and
! .I refclock_ppsskew
! lists the difference between RS232 derived timestamp and the PPS timestamp.
.PP
Unit encoding
.PP
diff -c include/ntp_control.h:1.1.1.5 include/ntp_control.h:3.6
*** include/ntp_control.h:1.1.1.5 Wed Jan 26 21:48:21 1994
--- include/ntp_control.h Wed Jan 26 21:48:21 1994
***************
*** 163,171 ****
#define CS_SYSTEM 17
#define CS_KEYID 18
#define CS_REFSKEW 19
! #define CS_VERSION 20
! #define CS_MAXCODE CS_VERSION
/*
* Peer variables we understand
--- 163,171 ----
#define CS_SYSTEM 17
#define CS_KEYID 18
#define CS_REFSKEW 19
! #define CS_VARLIST 20
! #define CS_MAXCODE CS_VARLIST
/*
* Peer variables we understand
***************
*** 204,212 ****
#define CP_SENT 32
#define CP_FILTERROR 33
#define CP_FLASH 34
! #define CP_DISP 35
! #define CP_MAXCODE CP_DISP
/*
* Clock variables we understand
*/
--- 204,213 ----
#define CP_SENT 32
#define CP_FILTERROR 33
#define CP_FLASH 34
! #define CP_VARLIST 35
+ #define CP_MAXCODE CP_VARLIST
+
/*
* Clock variables we understand
*/
***************
*** 222,229 ****
#define CC_FUDGEVAL2 10
#define CC_FLAGS 11
#define CC_DEVICE 12
! #define CC_MAXCODE CC_DEVICE
/*
* Definition of the structure used internally to hold trap information.
--- 223,231 ----
#define CC_FUDGEVAL2 10
#define CC_FLAGS 11
#define CC_DEVICE 12
+ #define CC_VARLIST 13
! #define CC_MAXCODE CC_VARLIST
/*
* Definition of the structure used internally to hold trap information.
diff -c include/ntp_filegen.h:1.1.1.3 include/ntp_filegen.h:3.7
*** include/ntp_filegen.h:1.1.1.3 Wed Jan 26 21:48:22 1994
--- include/ntp_filegen.h Wed Jan 26 21:48:22 1994
***************
*** 1,5 ****
/*
! * ntp_filegen.h,v 3.6 1993/09/01 21:51:24 kardel Exp
*
* definitions for NTP file generations support
*
--- 1,5 ----
/*
! * ntp_filegen.h,v 3.7 1994/01/25 19:04:16 kardel Exp
*
* definitions for NTP file generations support
*
diff -c include/ntp_machine.h:1.1.1.9 include/ntp_machine.h:1.24
*** include/ntp_machine.h:1.1.1.9 Wed Jan 26 21:48:27 1994
--- include/ntp_machine.h Wed Jan 26 21:48:27 1994
***************
*** 123,134 ****
HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
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 get.
*/
--- 123,138 ----
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.
*/
***************
*** 152,157 ****
--- 156,164 ----
#endif
#endif /*_BSD */
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/AIX"
+ #endif
#endif /* RS6000 */
/*
***************
*** 166,171 ****
--- 173,181 ----
#define RETSIGTYPE void
#define NTP_SYSCALL_GET 132
#define NTP_SYSCALL_ADJ 147
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/SunOS 4.x"
+ #endif
#endif
/*
***************
*** 182,188 ****
--- 192,201 ----
#define NTP_POSIX_SOURCE
#define HAVE_ATT_SETPGRP
#define HAVE_ATT_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/SINIX-M"
#endif
+ #endif
/*
* SunOS 5.1 or SunOS 5.2 or Solaris 2.1 or Solaris 2.2
***************
*** 198,203 ****
--- 211,219 ----
#define HAVE_ATT_SETPGRP
#define HAVE_ATT_NICE
#define UDP_WILDCARD_DELIVERY
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Solaris 2.x"
+ #endif
#endif
/*
***************
*** 221,227 ****
--- 237,246 ----
#define NTP_POSIX_SOURCE
#define HAVE_ATT_SETPGRP
#endif
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/ConvexOS"
#endif
+ #endif
/*
* IRIX 4.X and IRIX 5.x
***************
*** 235,240 ****
--- 254,262 ----
#define HAVE_ATT_SETPGRP
#define HAVE_BSD_NICE
#define NTP_POSIX_SOURCE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/IRIX"
+ #endif
#endif
/*
***************
*** 247,253 ****
--- 269,278 ----
#define HAVE_BSD_NICE
#define RETSIGTYPE void
#define NTP_SYSCALLS_STD
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Ultrix"
#endif
+ #endif
/*
* AUX
***************
*** 272,277 ****
--- 297,305 ----
#define HAVE_BSD_TTYS
#define LOG_NTP LOG_LOCAL1
#define HAVE_SIGNALED_IO
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/AUX"
+ #endif
#endif
/*
***************
*** 283,289 ****
--- 311,320 ----
#define HAVE_BSD_NICE
#define HAVE_N_UN
#undef NTP_POSIX_SOURCE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Next"
#endif
+ #endif
/*
* HPUX
***************
*** 301,306 ****
--- 332,340 ----
#else
#define HAVE_READKMEM
#endif
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/HPUX"
+ #endif
#endif
/*
***************
*** 311,316 ****
--- 345,353 ----
#define HAVE_LIBKVM
#define NTP_POSIX_SOURCE
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/BSDI"
+ #endif
#define HAVE_BSD_TTYS
#endif
***************
*** 327,332 ****
--- 364,372 ----
* along with a standard name one day ! */
#define ntp_adjtime __adjtimex
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Linux"
+ #endif
#endif
/*
***************
*** 338,344 ****
--- 378,387 ----
#define HAVE_READKMEM
#define NTP_POSIX_SOURCE
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/*BSD"
#endif
+ #endif
/*
* DECOSF1
***************
*** 349,354 ****
--- 392,400 ----
#define NTP_POSIX_SOURCE
#define NTP_SYSCALLS_STD
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/DECOSF1"
+ #endif
#endif
/*
***************
*** 358,364 ****
--- 404,413 ----
#define HAVE_READKMEM
#define S_CHAR_DEFINED
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/I386"
#endif
+ #endif
/*
* Mips
***************
*** 366,371 ****
--- 415,423 ----
#if defined(SYS_MIPS)
#define NOKMEM
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Mips"
+ #endif
#endif
/*
***************
*** 373,379 ****
--- 425,434 ----
*/
#if defined(SYS_SEQUENT)
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Sequent Dynix 3"
#endif
+ #endif
/*
* PTX
***************
*** 407,412 ****
--- 462,470 ----
typedef unsigned short u_short;
typedef unsigned long u_long;
#endif
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Sequent PTX"
+ #endif
#endif
***************
*** 417,423 ****
--- 475,484 ----
#define NO_SIGNED_CHAR_DECL
#define HAVE_READKMEM
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/Sony"
#endif
+ #endif
/*
* VAX
***************
*** 426,431 ****
--- 487,495 ----
#define NO_SIGNED_CHAR_DECL
#define HAVE_READKMEM
#define HAVE_BSD_NICE
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/VAX"
+ #endif
#endif
/*
***************
*** 445,455 ****
#define LOCK_PROCESS
#define SYSV_TIMEOFDAY
#define SIZE_RETURNED_IN_BUFFER
! #endif
!
! #ifdef STREAM /* STREAM implies TERMIOS */
! #ifndef HAVE_TERMIOS
! #define HAVE_TERMIOS
#endif
#endif
--- 509,516 ----
#define LOCK_PROCESS
#define SYSV_TIMEOFDAY
#define SIZE_RETURNED_IN_BUFFER
! #ifndef STR_SYSTEM
! #define STR_SYSTEM "UNIX/SysVR4"
#endif
#endif
***************
*** 464,469 ****
--- 525,539 ----
#define NTP_SYSCALLS_STD
#define USE_PROTOTYPES
#define UDP_WILDCARD_DELIVERY
+ #ifndef STR_SYSTEM
+ #define STR_SYSTEM "UNIX/DOMAINOS"
+ #endif
+ #endif
+
+ #ifdef STREAM /* STREAM implies TERMIOS */
+ #ifndef HAVE_TERMIOS
+ #define HAVE_TERMIOS
+ #endif
#endif
#ifndef RETSIGTYPE
diff -c include/ntp_refclock.h:1.1.1.8 include/ntp_refclock.h:3.8
*** include/ntp_refclock.h:1.1.1.8 Wed Jan 26 21:48:28 1994
--- include/ntp_refclock.h Wed Jan 26 21:48:28 1994
***************
*** 75,84 ****
LONG fudgeval2;
u_char currentstatus;
u_char lastevent;
! u_char unused[1];
};
-
/*
* Reference clock I/O structure. Used to provide an interface between
* the reference clock drivers and the I/O module.
--- 75,84 ----
LONG fudgeval2;
u_char currentstatus;
u_char lastevent;
! u_char unused;
! struct ctl_var *kv_list; /* additional variables */
};
/*
* Reference clock I/O structure. Used to provide an interface between
* the reference clock drivers and the I/O module.
diff -c include/ntpd.h:1.1.1.6 include/ntpd.h:1.5
*** include/ntpd.h:1.1.1.6 Wed Jan 26 21:48:35 1994
--- include/ntpd.h Wed Jan 26 21:48:35 1994
***************
*** 1,4 ****
! /* ntpd.h,v 3.1 1993/07/06 01:07:03 jbj Exp
* ntpd.h - Prototypes for xntpd.
*/
--- 1,4 ----
! /*
* ntpd.h - Prototypes for xntpd.
*/
***************
*** 21,26 ****
--- 21,55 ----
extern void process_control P((struct recvbuf *, int));
extern void report_event P((int, struct peer *));
+ /* ntp_control.c */
+ /*
+ * Structure for translation tables between internal system
+ * variable indices and text format.
+ */
+ struct ctl_var {
+ u_short code;
+ u_short flags;
+ char *text;
+ };
+ /*
+ * Flag values
+ */
+ #define CAN_READ 0x01
+ #define CAN_WRITE 0x02
+
+ #define DEF 0x20
+ #define PADDING 0x40
+ #define EOV 0x80
+
+ #define RO (CAN_READ)
+ #define WO (CAN_WRITE)
+ #define RW (CAN_READ|CAN_WRITE)
+
+ extern char * add_var P((struct ctl_var **, unsigned long, int));
+ extern void free_varlist P((struct ctl_var *));
+ extern void set_var P((struct ctl_var **, char *, unsigned long, int));
+ extern void set_sys_var P((char *, unsigned long, int));
+
/* ntp_intres.c */
extern void ntp_intres P((void));
diff -c include/parse.h:1.1.1.6 include/parse.h:3.13
*** include/parse.h:1.1.1.6 Wed Jan 26 21:48:36 1994
--- include/parse.h Wed Jan 26 21:48:36 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp
*
! * parse.h,v 3.12 1994/01/23 17:23:05 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.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
***************
*** 15,21 ****
#ifndef __PARSE_H__
#define __PARSE_H__
#if !(defined(lint) || defined(__GNUC__))
! static char parsehrcsid[]="parse.h,v 3.12 1994/01/23 17:23:05 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.13 1994/01/25 19:04:21 kardel Exp FAU";
#endif
#include "ntp_types.h"
***************
*** 365,370 ****
--- 365,373 ----
* History:
*
* parse.h,v
+ * Revision 3.13 1994/01/25 19:04:21 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.12 1994/01/23 17:23:05 kardel
* 1994 reconcilation
*
diff -c include/parse_conf.h:1.1.1.5 include/parse_conf.h:3.5
*** include/parse_conf.h:1.1.1.5 Wed Jan 26 21:48:37 1994
--- include/parse_conf.h Wed Jan 26 21:48:37 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
*
! * parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
*
* Copyright (c) 1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
*
! * parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
*
* Copyright (c) 1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
***************
*** 15,21 ****
#ifndef __PARSE_CONF_H__
#define __PARSE_CONF_H__
#if !(defined(lint) || defined(__GNUC__))
! static char dcfhrcsid[]="parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp FAU";
#endif
/*
--- 15,21 ----
#ifndef __PARSE_CONF_H__
#define __PARSE_CONF_H__
#if !(defined(lint) || defined(__GNUC__))
! static char dcfhrcsid[]="parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp FAU";
#endif
/*
diff -c include/sys/parsestreams.h:1.1.1.6 include/sys/parsestreams.h:3.11
*** include/sys/parsestreams.h:1.1.1.6 Wed Jan 26 21:48:44 1994
--- include/sys/parsestreams.h Wed Jan 26 21:48:44 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
*
! * parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
*
! * parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
*
* Copyright (c) 1989,1990,1991,1992,1993,1994
* Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
***************
*** 13,19 ****
*/
#if !(defined(lint) || defined(__GNUC__))
! static char parse77hrcsid[]="parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp";
#endif
#undef PARSEKERNEL
--- 13,19 ----
*/
#if !(defined(lint) || defined(__GNUC__))
! static char parse77hrcsid[]="parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp";
#endif
#undef PARSEKERNEL
diff -c kernel/Makefile.tmpl:1.1.1.3 kernel/Makefile.tmpl:3.6
*** kernel/Makefile.tmpl:1.1.1.3 Wed Jan 26 21:48:49 1994
--- kernel/Makefile.tmpl Wed Jan 26 21:48:49 1994
***************
*** 1,7 ****
#
! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.5 1994/01/23 17:37:53 kardel Exp
#
- #
# parse routine that could be used in two places
#
COMPILER= cc
--- 1,6 ----
#
! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp
#
# parse routine that could be used in two places
#
COMPILER= cc
diff -c lib/systime.c:1.1.1.10 lib/systime.c:1.7
*** lib/systime.c:1.1.1.10 Wed Jan 26 21:50:00 1994
--- lib/systime.c Wed Jan 26 21:50:00 1994
***************
*** 238,273 ****
#endif
}
- sys_clock_offset.l_ui = offset_i;
- sys_clock_offset.l_uf = offset_f;
-
if (adjtime(&adjtv, &oadjtv) < 0) {
syslog(LOG_ERR, "Can't do time adjustment: %m");
rval = 0;
! } else
rval = 1;
#ifdef DEBUGRS6000
! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
! umfptoa(offset_i, offset_f, 9));
! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
! oadjtv.tv_usec);
#endif /* DEBUGRS6000 */
! if ((oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) && (max_no_complete > 0)) {
! sTVTOTS(&oadjtv, &oadjts);
! L_ADD(&sys_clock_offset, &oadjts);
! syslog(LOG_WARNING, "Previous time adjustment didn't complete");
#ifdef DEBUG
! if (debug > 4)
! syslog(LOG_DEBUG,
! "Previous adjtime() incomplete, residual = %s\n",
! tvtoa(&oadjtv));
#endif
! if (--max_no_complete == 0) syslog(LOG_WARNING,
! "*** No more 'Prev time adj didn't complete'");
}
return(rval);
}
--- 238,277 ----
#endif
}
if (adjtime(&adjtv, &oadjtv) < 0) {
syslog(LOG_ERR, "Can't do time adjustment: %m");
rval = 0;
! } else {
! sys_clock_offset.l_ui = offset_i;
! sys_clock_offset.l_uf = offset_f;
rval = 1;
#ifdef DEBUGRS6000
! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
! umfptoa(offset_i, offset_f, 9));
! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
! oadjtv.tv_usec);
#endif /* DEBUGRS6000 */
! if (oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) {
! sTVTOTS(&oadjtv, &oadjts);
! L_ADD(&sys_clock_offset, &oadjts);
! if (max_no_complete > 0) {
! syslog(LOG_WARNING,
! "Previous time adjustment didn't complete");
#ifdef DEBUG
! if (debug > 4)
! syslog(LOG_DEBUG,
! "Previous adjtime() incomplete, residual = %s\n",
! tvtoa(&oadjtv));
#endif
! if (--max_no_complete == 0)
! syslog(LOG_WARNING,
! "*** No more 'Prev time adj didn't complete'");
! }
! }
}
return(rval);
}
diff -c ntpq/ntpq.c:1.1.1.20 ntpq/ntpq.c:3.20
*** ntpq/ntpq.c:1.1.1.20 Wed Jan 26 21:50:59 1994
--- ntpq/ntpq.c Wed Jan 26 21:50:59 1994
***************
*** 2577,2582 ****
--- 2577,2583 ----
register char *cp;
register char *np;
register char *cpend;
+ int quoted = 0;
static char name[MAXVARLEN];
static char value[MAXVALLEN];
***************
*** 2623,2630 ****
while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
cp++;
np = value;
! while (cp < cpend && *cp != ',')
! *np++ = *cp++;
while (np > value && isspace(*(np-1)))
np--;
*np = '\0';
--- 2624,2634 ----
while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
cp++;
np = value;
! while (cp < cpend && ((*cp != ',') || quoted))
! {
! quoted ^= ((*np++ = *cp++) == '"');
! }
!
while (np > value && isspace(*(np-1)))
np--;
*np = '\0';
diff -c parse/Makefile.kernel:1.1.1.2 parse/Makefile.kernel:3.8
*** parse/Makefile.kernel:1.1.1.2 Wed Jan 26 21:51:11 1994
--- parse/Makefile.kernel Wed Jan 26 21:51:11 1994
***************
*** 30,46 ****
ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
@echo "--- Install 'parse' in /kernel/strmod for automatic loading"
! mparsestreams.o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
microtime.o
rm -f parsestreams.o
! @echo "--- You may load mparsestreams.o via 'modload mparsestreams.o' into the kernel"
! parsestreams.o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c $(DEFS) -I../include parsestreams.c
! ld -r -o $@ $@ ../lib/libntp.a libparse_kernel.a
! @echo "--- You may load parsestreams.o via 'modload parsestreams.o' into the kernel"
microtime.o: $(MICROTIME) assym.s
cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
--- 30,51 ----
ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
@echo "--- Install 'parse' in /kernel/strmod for automatic loading"
! mparsestreams.o: mparsestreams.o.$(KARCH)
! @echo "--- You may load mparsestreams.o.$(KARCH) via 'modload mparsestreams.o.$(KARCH)' into the kernel"
!
! mparsestreams.o.$(KARCH): parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
microtime.o
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
! ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a
! rm -f parsestreams.o
microtime.o: $(MICROTIME) assym.s
cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
diff -c parse/clk_dcf7000.c:1.1.1.7 parse/clk_dcf7000.c:3.10
*** parse/clk_dcf7000.c:1.1.1.7 Wed Jan 26 21:51:16 1994
--- parse/clk_dcf7000.c Wed Jan 26 21:51:17 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp
*
! * clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 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.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
*
diff -c parse/clk_meinberg.c:1.1.1.7 parse/clk_meinberg.c:3.11
*** parse/clk_meinberg.c:1.1.1.7 Wed Jan 26 21:51:17 1994
--- parse/clk_meinberg.c Wed Jan 26 21:51:18 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp
*
! * clk_meinberg.c,v 3.10 1994/01/23 17:21:54 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.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
*
***************
*** 414,419 ****
--- 414,422 ----
* History:
*
* clk_meinberg.c,v
+ * Revision 3.11 1994/01/25 19:05:10 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.10 1994/01/23 17:21:54 kardel
* 1994 reconcilation
*
diff -c parse/clk_rawdcf.c:1.1.1.7 parse/clk_rawdcf.c:3.9
*** parse/clk_rawdcf.c:1.1.1.7 Wed Jan 26 21:51:19 1994
--- parse/clk_rawdcf.c Wed Jan 26 21:51:19 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp
*
! * clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 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.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
*
***************
*** 529,534 ****
--- 529,537 ----
* History:
*
* clk_rawdcf.c,v
+ * Revision 3.9 1994/01/25 19:05:12 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.8 1994/01/22 11:24:11 kardel
* fixed PPS handling
*
diff -c parse/clk_schmid.c:1.1.1.7 parse/clk_schmid.c:3.10
*** parse/clk_schmid.c:1.1.1.7 Wed Jan 26 21:51:20 1994
--- parse/clk_schmid.c Wed Jan 26 21:51:20 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp
*
! * clk_schmid.c,v 3.9 1994/01/23 17:21:56 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.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
*
***************
*** 168,173 ****
--- 168,176 ----
* History:
*
* clk_schmid.c,v
+ * Revision 3.10 1994/01/25 19:05:15 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.9 1994/01/23 17:21:56 kardel
* 1994 reconcilation
*
diff -c parse/clk_trimble.c:1.1.1.2 parse/clk_trimble.c:3.7
*** parse/clk_trimble.c:1.1.1.2 Wed Jan 26 21:51:21 1994
--- parse/clk_trimble.c Wed Jan 26 21:51:21 1994
***************
*** 1,6 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
/*
! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.6 1993/10/30 09:44:45 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.7 1994/01/25 19:05:17 kardel Exp
*
* Trimble SV6 clock support
*/
***************
*** 106,111 ****
--- 106,114 ----
* History:
*
* clk_trimble.c,v
+ * Revision 3.7 1994/01/25 19:05:17 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.6 1993/10/30 09:44:45 kardel
* conditional compilation flag cleanup
*
diff -c parse/parse.c:1.1.1.7 parse/parse.c:3.19
*** parse/parse.c:1.1.1.7 Wed Jan 26 21:51:24 1994
--- parse/parse.c Wed Jan 26 21:51:24 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp
*
! * parse.c,v 3.18 1994/01/23 17:21:59 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.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
*
***************
*** 22,28 ****
*/
#if !(defined(lint) || defined(__GNUC__))
! static char rcsid[] = "parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp";
#endif
#include "sys/types.h"
--- 22,28 ----
*/
#if !(defined(lint) || defined(__GNUC__))
! static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp";
#endif
#include "sys/types.h"
***************
*** 1139,1144 ****
--- 1139,1147 ----
* History:
*
* parse.c,v
+ * Revision 3.19 1994/01/25 19:05:20 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.18 1994/01/23 17:21:59 kardel
* 1994 reconcilation
*
diff -c parse/parse_conf.c:1.1.1.7 parse/parse_conf.c:3.13
*** parse/parse_conf.c:1.1.1.7 Wed Jan 26 21:51:25 1994
--- parse/parse_conf.c Wed Jan 26 21:51:25 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp
*
! * parse_conf.c,v 3.12 1994/01/23 17:22:02 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.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
*
***************
*** 81,86 ****
--- 81,89 ----
* History:
*
* parse_conf.c,v
+ * Revision 3.13 1994/01/25 19:05:23 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.12 1994/01/23 17:22:02 kardel
* 1994 reconcilation
*
diff -c parse/parsesolaris.c:1.1.1.4 parse/parsesolaris.c:3.9
*** parse/parsesolaris.c:1.1.1.4 Wed Jan 26 21:51:26 1994
--- parse/parsesolaris.c Wed Jan 26 21:51:27 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp
*
! * parsesolaris.c,v 3.8 1994/01/23 17:22:04 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.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
***************
*** 19,25 ****
*/
#ifndef lint
! static char rcsid[] = "parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp";
#endif
/*
--- 19,25 ----
*/
#ifndef lint
! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
#endif
/*
***************
*** 139,145 ****
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.8";
char *s, *S, *t;
/*
--- 139,145 ----
/*ARGSUSED*/
int _init(void)
{
! static char revision[] = "3.9";
char *s, *S, *t;
/*
***************
*** 1179,1184 ****
--- 1179,1187 ----
* History:
*
* parsesolaris.c,v
+ * Revision 3.9 1994/01/25 19:05:26 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.8 1994/01/23 17:22:04 kardel
* 1994 reconcilation
*
diff -c parse/parsestreams.c:1.1.1.6 parse/parsestreams.c:3.12
*** parse/parsestreams.c:1.1.1.6 Wed Jan 26 21:51:28 1994
--- parse/parsestreams.c Wed Jan 26 21:51:28 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
*
! * parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
*
* STREAMS module for reference clocks
* (SunOS4.x)
--- 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)
***************
*** 16,22 ****
*/
#ifndef lint
! static char rcsid[] = "parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp";
#endif
#include "sys/types.h"
--- 16,22 ----
*/
#ifndef lint
! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp";
#endif
#include "sys/types.h"
***************
*** 195,201 ****
}
else
{
! static char revision[] = "3.11";
char *s, *S, *t;
strncpy(ifm->f_name, mname, FMNAMESZ);
--- 195,201 ----
}
else
{
! static char revision[] = "3.12";
char *s, *S, *t;
strncpy(ifm->f_name, mname, FMNAMESZ);
***************
*** 1258,1263 ****
--- 1258,1266 ----
* History:
*
* parsestreams.c,v
+ * Revision 3.12 1994/01/25 19:05:30 kardel
+ * 94/01/23 reconcilation
+ *
* Revision 3.11 1994/01/23 17:22:07 kardel
* 1994 reconcilation
*
diff -c parse/util/Makefile.tmpl:1.1.1.2 parse/util/Makefile.tmpl:3.12
*** parse/util/Makefile.tmpl:1.1.1.2 Wed Jan 26 21:51:31 1994
--- parse/util/Makefile.tmpl Wed Jan 26 21:51:31 1994
***************
*** 1,5 ****
#
! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.11 1993/11/17 13:34:12 kardel Exp
#
COMPILER= cc
DEFS=
--- 1,5 ----
#
! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.12 1994/01/25 19:05:39 kardel Exp
#
COMPILER= cc
DEFS=
diff -c parse/util/dcfd.c:1.1.1.4 parse/util/dcfd.c:3.15
*** parse/util/dcfd.c:1.1.1.4 Wed Jan 26 21:51:33 1994
--- parse/util/dcfd.c Wed Jan 26 21:51:33 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
*
! * dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
*
* DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
*
--- 1,7 ----
/*
! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
*
! * dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
*
* DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
*
***************
*** 733,740 ****
* assume that we convert timecode within the unix/UTC epoch -
* prolonges validity of 2 digit years
*/
! if (clock->year < 1900)
! clock->year += 100; /* XXX this will do it till <2092 */
/*
* must have been a really negative year code - drop it
--- 733,740 ----
* assume that we convert timecode within the unix/UTC epoch -
* prolonges validity of 2 digit years
*/
! if (clock->year < 1994)
! clock->year += 100; /* XXX this will do it till <2094 */
/*
* must have been a really negative year code - drop it
diff -c parse/util/testdcf.c:1.1.1.5 parse/util/testdcf.c:3.9
*** parse/util/testdcf.c:1.1.1.5 Wed Jan 26 21:51:35 1994
--- parse/util/testdcf.c Wed Jan 26 21:51:35 1994
***************
*** 1,7 ****
/*
! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp
*
! * testdcf.c,v 3.8 1994/01/23 17:22:20 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.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)
*
diff -c scripts/Guess.sh:1.1.1.6 scripts/Guess.sh:1.11
*** scripts/Guess.sh:1.1.1.6 Wed Jan 26 21:52:11 1994
--- scripts/Guess.sh Wed Jan 26 21:52:12 1994
***************
*** 19,25 ****
sinix-m)
guess=sinix-m
;;
! sunos) case "$3" in
4.1*) guess="sunos4" ;;
5.1) guess="sunos5.1" ;;
5.*) guess="sunos5.2" ;;
--- 19,26 ----
sinix-m)
guess=sinix-m
;;
! sunos|solaris)
! case "$3" in
4.1*) guess="sunos4" ;;
5.1) guess="sunos5.1" ;;
5.*) guess="sunos5.2" ;;
***************
*** 59,65 ****
guess="netbsd"
;;
# now the fun starts - there are vendors that
! # do not really identify their OS un uname.
# Fine - now I look at our version and hope
# that nobody else had this marvellous idea.
# I am not willing to mention the vendor explicitly
--- 60,66 ----
guess="netbsd"
;;
# now the fun starts - there are vendors that
! # do not really identify their OS in uname.
# Fine - now I look at our version and hope
# that nobody else had this marvellous idea.
# I am not willing to mention the vendor explicitly
diff -c xntpd/ntp_config.c:1.1.1.18 xntpd/ntp_config.c:3.21
*** xntpd/ntp_config.c:1.1.1.18 Wed Jan 26 21:52:59 1994
--- xntpd/ntp_config.c Wed Jan 26 21:53:00 1994
***************
*** 93,98 ****
--- 93,99 ----
#define CONFIG_PPS 24
#define CONFIG_PIDFILE 25
#define CONFIG_LOGFILE 26
+ #define CONFIG_SETVAR 27
#define CONF_MOD_VERSION 1
#define CONF_MOD_KEY 2
***************
*** 177,182 ****
--- 178,184 ----
{ "statistics", CONFIG_STATISTICS },
{ "pidfile", CONFIG_PIDFILE },
{ "logfile", CONFIG_LOGFILE },
+ { "setvar", CONFIG_SETVAR },
{ "", CONFIG_UNKNOWN }
};
***************
*** 316,322 ****
#endif
extern char *FindConfig();
char *progname;
! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:";
static int gettokens P((FILE *, char *, char **, int *));
static int matchkey P((char *, struct keyword *));
--- 318,324 ----
#endif
extern char *FindConfig();
char *progname;
! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:v:V:";
static int gettokens P((FILE *, char *, char **, int *));
static int matchkey P((char *, struct keyword *));
***************
*** 374,381 ****
}
if (errflg || optind != argc) {
! (void) fprintf(stderr,
! "usage: %s [ -bd ] [ -c config_file ]\n", progname);
exit(2);
}
optind = 0; /* reset optind to restart getopt_l */
--- 376,385 ----
}
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 */
***************
*** 428,433 ****
--- 432,438 ----
char keyfile[MAXFILENAME];
extern int optind;
extern char *optarg;
+ extern char *Version;
extern U_LONG info_auth_keyid;
FILEGEN *filegen;
***************
*** 443,448 ****
--- 448,459 ----
res_fp = NULL;
have_resolver = have_keyfile = 0;
+ /*
+ * install a non default variable with this daemon version
+ */
+ (void) sprintf(line, "daemon_version=\"%s\"", Version);
+ set_sys_var(line, strlen(line)+1, RO);
+
#ifdef RESOLVE_INTERNAL
resolve_internal = 1;
#endif
***************
*** 546,551 ****
--- 557,566 ----
} while (0);
break;
+ case 'v':
+ case 'V':
+ set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
+ break;
default:
errflg++;
***************
*** 1386,1392 ****
(u_char)peerkey, (u_char)peerflags);
}
break;
!
}
}
(void) fclose(fp);
--- 1401,1419 ----
(u_char)peerkey, (u_char)peerflags);
}
break;
!
! case CONFIG_SETVAR:
! if (ntokens < 2)
! {
! syslog(LOG_ERR,
! "no value for setvar command - line ignored");
! }
! else
! {
! set_sys_var(tokens[1], strlen(tokens[1])+1, RW |
! ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0));
! }
! break;
}
}
(void) fclose(fp);
***************
*** 1445,1450 ****
--- 1472,1478 ----
register char *cp;
register int eol;
register int ntok;
+ register int quoted = 0;
/*
* Find start of first token
***************
*** 1469,1476 ****
ntok = 0;
while (!eol) {
tokenlist[ntok++] = cp;
! while (!ISEOL(*cp) && !ISSPACE(*cp))
! cp++;
if (ISEOL(*cp)) {
*cp = '\0';
eol = 1;
--- 1497,1505 ----
ntok = 0;
while (!eol) {
tokenlist[ntok++] = cp;
! while (!ISEOL(*cp) && (!ISSPACE(*cp) || quoted))
! quoted ^= (*cp++ == '"');
!
if (ISEOL(*cp)) {
*cp = '\0';
eol = 1;
diff -c xntpd/ntp_control.c:1.1.1.15 xntpd/ntp_control.c:3.21
*** xntpd/ntp_control.c:1.1.1.15 Wed Jan 26 21:53:01 1994
--- xntpd/ntp_control.c Wed Jan 26 21:53:02 1994
***************
*** 1,4 ****
! /* ntp_control.c,v 3.1 1993/07/06 01:11:13 jbj Exp
* ntp_control.c - respond to control messages and send async traps
*/
#include <stdio.h>
--- 1,4 ----
! /*
* ntp_control.c - respond to control messages and send async traps
*/
#include <stdio.h>
***************
*** 61,66 ****
--- 61,67 ----
static void ctl_putclock P((int, struct refclockstat *, int));
#endif /* REFCLOCK */
static struct ctl_var *ctl_getitem P((struct ctl_var *, char **));
+ static unsigned long count_var P((struct ctl_var *));
static void control_unspec P((struct recvbuf *, int));
static void read_status P((struct recvbuf *, int));
static void read_variables P((struct recvbuf *, int));
***************
*** 83,113 ****
{ NO_REQUEST, 0 }
};
-
- /*
- * Structure for translation tables between internal system
- * variable indices and text format.
- */
- struct ctl_var {
- u_short code;
- u_short flags;
- char *text;
- };
-
/*
- * Flag values
- */
- #define CAN_READ 0x1
- #define CAN_WRITE 0x2
- #define PADDING 0x80
- #define EOV 0x40
-
- #define RO (CAN_READ)
- #define WO (CAN_WRITE)
- #define RW (CAN_READ|CAN_WRITE)
-
-
- /*
* System variable values. The array can be indexed by
* the variable index to find the textual name.
*/
--- 84,90 ----
***************
*** 132,141 ****
{ CS_SYSTEM, RO, "system" }, /* 17 */
{ CS_KEYID, RO, "keyid" }, /* 18 */
{ CS_REFSKEW, RO, "refskew" }, /* 19 */
! { CS_VERSION, RO, "daemon_version" }, /* 20 */
{ 0, EOV, "" }
};
/*
* System variables we print by default (in fuzzball order, more-or-less)
*/
--- 109,120 ----
{ CS_SYSTEM, RO, "system" }, /* 17 */
{ CS_KEYID, RO, "keyid" }, /* 18 */
{ CS_REFSKEW, RO, "refskew" }, /* 19 */
! { CS_VARLIST, RO, "sys_var_list" },/* 20 */
{ 0, EOV, "" }
};
+ static struct ctl_var *ext_sys_var = (struct ctl_var *)0;
+
/*
* System variables we print by default (in fuzzball order, more-or-less)
*/
***************
*** 153,159 ****
CS_OFFSET,
CS_DRIFT,
CS_COMPLIANCE,
- CS_VERSION,
0
};
--- 132,137 ----
***************
*** 197,202 ****
--- 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, "" }
};
***************
*** 255,260 ****
--- 234,240 ----
{ CC_FUDGEVAL2, RO, "fudgeval2" }, /* 10 */
{ CC_FLAGS, RO, "flags" }, /* 11 */
{ CC_DEVICE, RO, "device" }, /* 12 */
+ { CC_VARLIST, RO, "clock_var_list" },/* 13 */
{ 0, EOV, "" }
};
***************
*** 283,290 ****
--- 263,277 ----
/*
* 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
***************
*** 1221,1227 ****
ctl_putsys(varid)
int varid;
{
- extern char *Version;
l_fp tmp;
switch (varid) {
--- 1208,1213 ----
***************
*** 1280,1291 ****
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);
--- 1266,1277 ----
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);
***************
*** 1293,1301 ****
case CS_REFSKEW:
ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
break;
! case CS_VERSION:
! ctl_putstr(sys_var[CS_VERSION].text, Version,
! strlen(Version));
break;
}
}
--- 1279,1338 ----
case CS_REFSKEW:
ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
break;
! case CS_VARLIST:
! {
! char buf[CTL_MAX_DATA_LEN];
! register char *s, *ss, *t, *be;
! register int i;
! register struct ctl_var *k;
!
! s = buf;
! be = buf + sizeof(buf) - strlen(sys_var[CS_VARLIST].text) - 4;
! if (s > be)
! break; /* really long var name 8-( - Killer */
!
! strcpy(s, sys_var[CS_VARLIST].text);
! strcat(s, "=\"");
! s += strlen(s);
! t = s;
!
! for (k = sys_var; !(k->flags &EOV); k++)
! {
! i = strlen(k->text);
! if (s+i+1 >= be)
! break;
! if (s != t)
! *s++ = ',';
! strcpy(s, k->text);
! s += i;
! }
!
! for (k = ext_sys_var; k && !(k->flags &EOV); k++)
! {
! ss = k->text;
! if (!ss)
! continue;
!
! while (*ss && *ss != '=')
! ss++;
!
! i = ss - k->text;
! if (s+i+1 >= be)
! break;
! if (s != t)
! *s++ = ',';
! strncpy(s, k->text, i);
! s += i;
! }
!
! if (s+2 >= be)
! break;
!
! *s++ = '"';
! *s = '\0';
!
! ctl_putdata(buf, s - buf, 0);
! }
break;
}
}
***************
*** 1428,1433 ****
--- 1465,1507 ----
case CP_SENT:
ctl_putuint(peer_var[CP_SENT].text, peer->sent);
break;
+ case CP_VARLIST:
+ {
+ char buf[CTL_MAX_DATA_LEN];
+ register char *s, *t, *be;
+ register int i;
+ register struct ctl_var *k;
+
+ s = buf;
+ be = buf + sizeof(buf) - strlen(peer_var[CP_VARLIST].text) - 4;
+ if (s > be)
+ break; /* really long var name 8-( - Killer */
+
+ strcpy(s, peer_var[CP_VARLIST].text);
+ strcat(s, "=\"");
+ s += strlen(s);
+ t = s;
+
+ for (k = peer_var; !(k->flags &EOV); k++)
+ {
+ i = strlen(k->text);
+ if (s+i+1 >= be)
+ break;
+ if (s != t)
+ *s++ = ',';
+ strcpy(s, k->text);
+ s += i;
+ }
+
+ if (s+2 >= be)
+ break;
+
+ *s++ = '"';
+ *s = '\0';
+
+ ctl_putdata(buf, s - buf, 0);
+ }
+ break;
}
}
***************
*** 1501,1506 ****
--- 1575,1636 ----
strlen(clock->clockdesc));
}
break;
+ case CC_VARLIST:
+ {
+ char buf[CTL_MAX_DATA_LEN];
+ register char *s, *ss, *t, *be;
+ register int i;
+ register struct ctl_var *k;
+
+ s = buf;
+ be = buf + sizeof(buf) - strlen(clock_var[CC_VARLIST].text) - 4;
+ if (s > be)
+ break; /* really long var name 8-( - Killer */
+
+ strcpy(s, clock_var[CC_VARLIST].text);
+ strcat(s, "=\"");
+ s += strlen(s);
+ t = s;
+
+ for (k = clock_var; !(k->flags &EOV); k++)
+ {
+ i = strlen(k->text);
+ if (s+i+1 >= be)
+ break;
+ if (s != t)
+ *s++ = ',';
+ strcpy(s, k->text);
+ s += i;
+ }
+
+ for (k = clock->kv_list; k && !(k->flags &EOV); k++)
+ {
+ ss = k->text;
+ if (!ss)
+ continue;
+
+ while (*ss && *ss != '=')
+ ss++;
+
+ i = ss - k->text;
+ if (s+i+1 >= be)
+ break;
+ if (s != t)
+ *s++ = ',';
+ strncpy(s, k->text, i);
+ s += i;
+ *s = '\0';
+ }
+
+ if (s+2 >= be)
+ break;
+
+ *s++ = '"';
+ *s = '\0';
+
+ ctl_putdata(buf, s - buf, 0);
+ }
+ break;
}
}
#endif
***************
*** 1517,1522 ****
--- 1647,1653 ----
{
register struct ctl_var *v;
register char *cp, *tp;
+ static struct ctl_var eol = { 0, EOV, };
static char buf[128];
/*
***************
*** 1528,1533 ****
--- 1659,1667 ----
if (reqpt >= reqend)
return 0;
+
+ if (var_list == (struct ctl_var *)0)
+ return &eol;
/*
* Look for a first character match on the tag. If we find
***************
*** 1538,1548 ****
while (!(v->flags & EOV)) {
if (!(v->flags & PADDING) && *cp == *(v->text)) {
tp = v->text;
! while (*tp != '\0' && cp < reqend && *cp == *tp) {
cp++;
tp++;
}
! if (*tp == '\0') {
while (cp < reqend && isspace(*cp))
cp++;
if (cp == reqend || *cp == ',') {
--- 1672,1682 ----
while (!(v->flags & EOV)) {
if (!(v->flags & PADDING) && *cp == *(v->text)) {
tp = v->text;
! while (*tp != '\0' && *tp != '=' && cp < reqend && *cp == *tp) {
cp++;
tp++;
}
! if ((*tp == '\0') || (*tp == '=')) {
while (cp < reqend && isspace(*cp))
cp++;
if (cp == reqend || *cp == ',') {
***************
*** 1685,1692 ****
register struct ctl_var *v;
register int i;
char *valuep;
! u_char wants[(CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1)];
! int gotvar;
if (res_associd == 0) {
/*
--- 1819,1826 ----
register struct ctl_var *v;
register int i;
char *valuep;
! u_char *wants;
! int gotvar = (CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1);
if (res_associd == 0) {
/*
***************
*** 1696,1707 ****
rpkt.status = htons(ctlsysstatus());
if (res_authokay)
ctl_sys_num_events = 0;
! bzero((char *)wants, CS_MAXCODE+1);
gotvar = 0;
while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! return;
}
wants[v->code] = 1;
gotvar = 1;
--- 1830,1853 ----
rpkt.status = htons(ctlsysstatus());
if (res_authokay)
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) {
! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
! if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! free((char *)wants);
! return;
! }
! wants[CS_MAXCODE+1+v->code] = 1;
! gotvar = 1;
! continue;
! } else {
! break; /* shouldn't happen ! */
! }
}
wants[v->code] = 1;
gotvar = 1;
***************
*** 1710,1721 ****
for (i = 1; i <= CS_MAXCODE; i++)
if (wants[i])
ctl_putsys(i);
} else {
register u_char *cs;
for (cs = def_sys_var; *cs != 0; cs++)
! ctl_putsys((int)*cs);
}
} else {
register struct peer *peer;
--- 1856,1876 ----
for (i = 1; i <= CS_MAXCODE; i++)
if (wants[i])
ctl_putsys(i);
+ for (i = 0; ext_sys_var && !(ext_sys_var[i].flags & EOV); i++)
+ if (wants[i+CS_MAXCODE+1])
+ ctl_putdata(ext_sys_var[i].text,
+ strlen(ext_sys_var[i].text), 0);
} else {
register u_char *cs;
+ register struct ctl_var *kv;
for (cs = def_sys_var; *cs != 0; cs++)
! ctl_putsys((int)*cs);
! for (kv = ext_sys_var; kv && !(kv->flags & EOV); kv++)
! if (kv->flags & DEF)
! ctl_putdata(kv->text, strlen(kv->text), 0);
}
+ free((char *)wants);
} else {
register struct peer *peer;
***************
*** 1732,1742 ****
rpkt.status = htons(ctlpeerstatus(peer));
if (res_authokay)
peer->num_events = 0;
! bzero((char*)wants, CP_MAXCODE+1);
gotvar = 0;
while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
if (v->flags & EOV) {
ctl_error(CERR_UNKNOWNVAR);
return;
}
wants[v->code] = 1;
--- 1887,1899 ----
rpkt.status = htons(ctlpeerstatus(peer));
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) {
ctl_error(CERR_UNKNOWNVAR);
+ free((char *)wants);
return;
}
wants[v->code] = 1;
***************
*** 1752,1757 ****
--- 1909,1915 ----
for (cp = def_peer_var; *cp != 0; cp++)
ctl_putpeer((int)*cp, peer);
}
+ free((char *)wants);
}
ctl_flushpkt(0);
}
***************
*** 1768,1773 ****
--- 1926,1932 ----
int restrict;
{
register struct ctl_var *v;
+ register int ext_var;
char *valuep;
LONG val;
u_char leapind, leapwarn;
***************
*** 1795,1831 ****
* Look through the variables. Dump out at the first sign of trouble.
*/
while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! return;
}
if (!(v->flags & CAN_WRITE)) {
ctl_error(CERR_PERMISSION);
return;
}
! if (*valuep == '\0' || !atoint(valuep, &val)) {
ctl_error(CERR_BADFMT);
return;
}
! if ((val & ~LEAP_NOTINSYNC) != 0) {
ctl_error(CERR_BADVALUE);
return;
}
! /*
! * This one seems sane. Save it.
! */
! switch(v->code) {
! case CS_LEAP:
! case CS_LEAPIND:
! leapind = (u_char)val;
! break;
! case CS_LEAPWARNING:
! leapwarn = (u_char)val;
! break;
! default:
! ctl_error(CERR_UNSPEC); /* our fault, really */
! return;
}
}
--- 1954,2013 ----
* Look through the variables. Dump out at the first sign of trouble.
*/
while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
+ ext_var = 0;
if (v->flags & EOV) {
! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
! if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! return;
! }
! ext_var = 1;
! } else {
! break;
! }
}
if (!(v->flags & CAN_WRITE)) {
ctl_error(CERR_PERMISSION);
return;
}
! if (!ext_var && (*valuep == '\0' || !atoint(valuep, &val))) {
ctl_error(CERR_BADFMT);
return;
}
! if (!ext_var && (val & ~LEAP_NOTINSYNC) != 0) {
ctl_error(CERR_BADVALUE);
return;
}
! if (ext_var) {
! char *s = emalloc(strlen(v->text)+strlen(valuep)+2);
! char *t, *tt = s;
!
! t = v->text;
! while (*t && *t != '=')
! *tt++ = *t++;
!
! *tt++ = '=';
! strcat(tt, valuep);
!
! set_sys_var(s, strlen(s)+1, v->flags);
! free(s);
! } else {
! /*
! * This one seems sane. Save it.
! */
! switch(v->code) {
! case CS_LEAP:
! case CS_LEAPIND:
! leapind = (u_char)val;
! break;
! case CS_LEAPWARNING:
! leapwarn = (u_char)val;
! break;
! default:
! ctl_error(CERR_UNSPEC); /* our fault, really */
! return;
! }
}
}
***************
*** 1861,1867 ****
register int i;
register struct peer *peer;
char *valuep;
! u_char wants[CC_MAXCODE+1];
int gotvar;
struct refclockstat clock;
--- 2043,2049 ----
register int i;
register struct peer *peer;
char *valuep;
! u_char *wants;
int gotvar;
struct refclockstat clock;
***************
*** 1898,1915 ****
/*
* If we got here we have a peer which is a clock. Get his status.
*/
refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
/*
* Look for variables in the packet.
*/
rpkt.status = htons(ctlclkstatus(&clock));
gotvar = 0;
! bzero((char*)wants, CC_MAXCODE+1);
! while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! return;
}
wants[v->code] = 1;
gotvar = 1;
--- 2080,2112 ----
/*
* If we got here we have a peer which is a clock. Get his status.
*/
+ clock.kv_list = (struct ctl_var *)0;
+
refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
/*
* Look for variables in the packet.
*/
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) {
! if ((v = ctl_getitem(clock.kv_list, &valuep)) != 0) {
! if (v->flags & EOV) {
! ctl_error(CERR_UNKNOWNVAR);
! free((char*)wants);
! free_varlist(clock.kv_list);
! return;
! }
! wants[CC_MAXCODE+1+v->code] = 1;
! gotvar = 1;
! continue;
! } else {
! break; /* shouldn't happen ! */
! }
}
wants[v->code] = 1;
gotvar = 1;
***************
*** 1919,1930 ****
--- 2116,2139 ----
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);
} else {
register u_char *cc;
+ register struct ctl_var *kv;
for (cc = def_clock_var; *cc != 0; cc++)
ctl_putclock((int)*cc, &clock, 0);
+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
+ if (kv->flags & DEF)
+ ctl_putdata(kv->text, strlen(kv->text), 0);
}
+
+ free((char*)wants);
+ free_varlist(clock.kv_list);
+
ctl_flushpkt(0);
#endif
}
***************
*** 2237,2249 ****
*/
if (err == EVNT_CLOCKEXCPT) {
struct refclockstat clock;
! refclock_control(&peer->srcadr,
(struct refclockstat *)0,
&clock);
ctl_puthex("refclockstatus",
(U_LONG)ctlclkstatus(&clock));
for (i = 1; i <= CC_MAXCODE; i++)
ctl_putclock(i, &clock, 0);
}
#endif /*REFCLOCK*/
} else {
--- 2446,2468 ----
*/
if (err == EVNT_CLOCKEXCPT) {
struct refclockstat clock;
! struct ctl_var *kv;
!
! clock.kv_list = (struct ctl_var *)0;
!
! refclock_control(&peer->srcadr,
(struct refclockstat *)0,
&clock);
ctl_puthex("refclockstatus",
(U_LONG)ctlclkstatus(&clock));
+
for (i = 1; i <= CC_MAXCODE; i++)
ctl_putclock(i, &clock, 0);
+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
+ if (kv->flags & DEF)
+ ctl_putdata(kv->text, strlen(kv->text), 0);
+
+ free_varlist(clock.kv_list);
}
#endif /*REFCLOCK*/
} else {
***************
*** 2262,2274 ****
--- 2481,2504 ----
*/
if (err == EVNT_PEERCLOCK) {
struct refclockstat clock;
+ struct ctl_var *kv;
+
+ clock.kv_list = (struct ctl_var *)0;
+
refclock_control(&peer->srcadr,
(struct refclockstat *)0,
&clock);
+
ctl_puthex("refclockstatus",
(U_LONG)ctlclkstatus(&clock));
+
for (i = 1; i <= CC_MAXCODE; i++)
ctl_putclock(i, &clock, 0);
+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
+ if (kv->flags & DEF)
+ ctl_putdata(kv->text, strlen(kv->text), 0);
+
+ free_varlist(clock.kv_list);
}
#endif /*REFCLOCK*/
}
***************
*** 2303,2305 ****
--- 2533,2647 ----
numctlbadop = 0;
numasyncmsgs = 0;
}
+
+ static unsigned long
+ count_var(k)
+ struct ctl_var *k;
+ {
+ register unsigned long c;
+
+ c = 0;
+ while (k && !(k++->flags & EOV))
+ c++;
+
+ return c;
+ }
+
+ char *
+ add_var(kv, size, def)
+ struct ctl_var **kv;
+ unsigned long size;
+ int def;
+ {
+ register unsigned long c;
+ register struct ctl_var *k;
+
+ c = count_var(*kv);
+
+ k = *kv;
+ *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);
+ }
+
+ (*kv)[c].code = c;
+ (*kv)[c].text = (char *)emalloc(size);
+ (*kv)[c].flags = def;
+ (*kv)[c+1].code = 0;
+ (*kv)[c+1].text = (char *)0;
+ (*kv)[c+1].flags = EOV;
+ return (*kv)[c].text;
+ }
+
+ void
+ set_var(kv, data, size, def)
+ struct ctl_var **kv;
+ char *data;
+ unsigned long size;
+ int def;
+ {
+ register struct ctl_var *k;
+ register char *s, *t;
+
+ if (!data || !size)
+ return;
+
+ if ((k = *kv))
+ {
+ while (!(k->flags & EOV))
+ {
+ s = data;
+ t = k->text;
+ if (t)
+ {
+ while (*t != '=' && *s - *t == 0)
+ {
+ s++;
+ t++;
+ }
+ if (*s == *t && ((*t == '=') || !*t))
+ {
+ free(k->text);
+ k->text = (char *)emalloc(size);
+ bcopy(data, k->text, size);
+ k->flags = def;
+ return;
+ }
+ }
+ else
+ {
+ k->text = (char *)emalloc(size);
+ bcopy(data, k->text, size);
+ k->flags = def;
+ return;
+ }
+ k++;
+ }
+ }
+ t = add_var(kv, size, def);
+ bcopy(data, t, size);
+ }
+
+ void
+ set_sys_var(data, size, def)
+ char *data;
+ unsigned long size;
+ int def;
+ {
+ set_var(&ext_sys_var, data, size, def);
+ }
+
+ void
+ free_varlist(kv)
+ struct ctl_var *kv;
+ {
+ struct ctl_var *k;
+ if (kv)
+ {
+ for (k = kv; !(k->flags & EOV); k++)
+ free(k->text);
+ free((char *)kv);
+ }
+ }
diff -c xntpd/ntp_filegen.c:1.1.1.5 xntpd/ntp_filegen.c:3.12
*** xntpd/ntp_filegen.c:1.1.1.5 Wed Jan 26 21:53:04 1994
--- xntpd/ntp_filegen.c Wed Jan 26 21:53:04 1994
***************
*** 1,5 ****
/*
! * ntp_filegen.c,v 3.10 1993/12/03 03:55:35 pruy Exp
*
* implements file generations support for NTP
* logfiles and statistic files
--- 1,5 ----
/*
! * ntp_filegen.c,v 3.12 1994/01/25 19:06:11 kardel Exp
*
* implements file generations support for NTP
* logfiles and statistic files
diff -c xntpd/ntp_request.c:1.1.1.13 xntpd/ntp_request.c:3.13
*** xntpd/ntp_request.c:1.1.1.13 Wed Jan 26 21:53:18 1994
--- xntpd/ntp_request.c Wed Jan 26 21:53:18 1994
***************
*** 2111,2116 ****
--- 2111,2119 ----
req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
return;
}
+
+ clock.kv_list = (struct ctl_var *)0;
+
refclock_control(&addr, (struct refclockstat *)0, &clock);
ic->clockadr = addr.sin_addr.s_addr;
***************
*** 2128,2133 ****
--- 2131,2138 ----
ic->fudgeval1 = htonl(clock.fudgeval1);
ic->fudgeval2 = htonl(clock.fudgeval2);
+ free_varlist(clock.kv_list);
+
ic = (struct info_clock *)more_pkt();
}
flush_pkt();
diff -c xntpd/refclock_parse.c:1.1.1.9 xntpd/refclock_parse.c:3.45
*** xntpd/refclock_parse.c:1.1.1.9 Wed Jan 26 21:53:39 1994
--- xntpd/refclock_parse.c Wed Jan 26 21:53:39 1994
***************
*** 1,8 ****
#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
/*
! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp
*
! * refclock_parse.c,v 3.43 1994/01/23 16:28:39 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.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
*
***************
*** 129,135 ****
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp";
#endif
/**===========================================================================
--- 129,135 ----
#include "parse.h"
#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp";
#endif
/**===========================================================================
***************
*** 243,248 ****
--- 243,249 ----
* clock specific configuration
*/
l_fp basedelay; /* clock local phase offset */
+ l_fp ppsdelay; /* clock local pps phase offset */
/*
* clock state handling/reporting
***************
*** 295,300 ****
--- 296,302 ----
#define NO_END (void (*)())0
#define NO_DATA (void *)0
#define NO_FORMAT ""
+ #define NO_PPSDELAY 0
#define DCF_ID "DCF" /* generic DCF */
#define DCF_A_ID "DCFa" /* AM demodulation */
***************
*** 497,502 ****
--- 499,505 ----
void *cl_data; /* local data area for "poll" mechanism */
u_fp cl_rootdelay; /* rootdelay */
U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */
+ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */
char *cl_id; /* ID code (usually "DCF") */
char *cl_description; /* device name */
char *cl_format; /* fixed format */
***************
*** 516,521 ****
--- 519,525 ----
NO_DATA,
DCFPZF535_ROOTDELAY,
DCFPZF535_BASEDELAY,
+ NO_PPSDELAY,
DCF_P_ID,
DCFPZF535_DESCRIPTION,
NO_FORMAT,
***************
*** 534,539 ****
--- 538,544 ----
NO_DATA,
DCFPZF535OCXO_ROOTDELAY,
DCFPZF535OCXO_BASEDELAY,
+ NO_PPSDELAY,
DCF_P_ID,
DCFPZF535OCXO_DESCRIPTION,
NO_FORMAT,
***************
*** 552,557 ****
--- 557,563 ----
NO_DATA,
DCFUA31_ROOTDELAY,
DCFUA31_BASEDELAY,
+ NO_PPSDELAY,
DCF_A_ID,
DCFUA31_DESCRIPTION,
NO_FORMAT,
***************
*** 570,575 ****
--- 576,582 ----
NO_DATA,
DCF7000_ROOTDELAY,
DCF7000_BASEDELAY,
+ NO_PPSDELAY,
DCF_A_ID,
DCF7000_DESCRIPTION,
NO_FORMAT,
***************
*** 588,593 ****
--- 595,601 ----
WSDCF_DATA,
WSDCF_ROOTDELAY,
WSDCF_BASEDELAY,
+ NO_PPSDELAY,
DCF_A_ID,
WSDCF_DESCRIPTION,
WSDCF_FORMAT,
***************
*** 606,611 ****
--- 614,620 ----
NO_DATA,
RAWDCF_ROOTDELAY,
CONRAD_BASEDELAY,
+ NO_PPSDELAY,
DCF_A_ID,
CONRAD_DESCRIPTION,
RAWDCF_FORMAT,
***************
*** 624,629 ****
--- 633,639 ----
NO_DATA,
RAWDCF_ROOTDELAY,
TIMEBRICK_BASEDELAY,
+ NO_PPSDELAY,
DCF_A_ID,
TIMEBRICK_DESCRIPTION,
RAWDCF_FORMAT,
***************
*** 642,647 ****
--- 652,658 ----
GPS166_DATA,
GPS166_ROOTDELAY,
GPS166_BASEDELAY,
+ NO_PPSDELAY,
GPS166_ID,
GPS166_DESCRIPTION,
GPS166_FORMAT,
***************
*** 660,665 ****
--- 671,677 ----
TRIMBLESV6_DATA,
TRIMBLESV6_ROOTDELAY,
TRIMBLESV6_BASEDELAY,
+ NO_PPSDELAY,
TRIMBLESV6_ID,
TRIMBLESV6_DESCRIPTION,
TRIMBLESV6_FORMAT,
***************
*** 2198,2203 ****
--- 2210,2218 ----
parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
parse->basedelay.l_uf = parse->parse_type->cl_basedelay;
+ parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
+ parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay;
+
peer->rootdelay = parse->parse_type->cl_rootdelay;
peer->sstclktype = parse->parse_type->cl_type;
peer->precision = sys_precision;
***************
*** 2554,2559 ****
--- 2569,2575 ----
out->badformat = out->baddata = 0;
out->timereset = 0;
out->currentstatus = out->lastevent = CEVNT_NOMINAL;
+ out->kv_list = (struct ctl_var *)0;
}
if (unit >= MAXUNITS)
***************
*** 2579,2585 ****
if (in->haveflags & CLK_HAVETIME2)
{
! /* not USED */
}
if (in->haveflags & CLK_HAVEVAL1)
--- 2595,2601 ----
if (in->haveflags & CLK_HAVETIME2)
{
! parse->ppsdelay = in->fudgetime2;
}
if (in->haveflags & CLK_HAVEVAL1)
***************
*** 2619,2637 ****
if (out)
{
register unsigned LONG sum = 0;
! register char *t;
register struct tm *tm;
register short utcoff;
register char sign;
register int i;
time_t tim;
! out->haveflags = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
out->clockdesc = parse->parse_type->cl_description;
out->fudgetime1 = parse->basedelay;
! L_CLR(&out->fudgetime2);
out->fudgeval1 = (LONG)parse->peer->stratum;
--- 2635,2655 ----
if (out)
{
register unsigned LONG sum = 0;
! register char *t, *tt;
register struct tm *tm;
register short utcoff;
register char sign;
register int i;
time_t tim;
! outstatus[0] = '\0';
!
! out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
out->clockdesc = parse->parse_type->cl_description;
out->fudgetime1 = parse->basedelay;
! out->fudgetime2 = parse->ppsdelay;
out->fudgeval1 = (LONG)parse->peer->stratum;
***************
*** 2657,2667 ****
*/
off = parse->time.parse_stime.fp;
L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
! out->fudgetime2 = off;
! out->haveflags |= CLK_HAVETIME2;
}
}
/*
* all this for just finding out the +-xxxx part (there are always
* new and changing fields in the standards 8-().
--- 2675,2691 ----
*/
off = parse->time.parse_stime.fp;
L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
! tt = add_var(&out->kv_list, 40, RO);
! sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6));
}
}
+ if (PARSE_PPS(parse->time.parse_state))
+ {
+ tt = add_var(&out->kv_list, 80, RO|DEF);
+ sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp));
+ }
+
/*
* all this for just finding out the +-xxxx part (there are always
* new and changing fields in the standards 8-().
***************
*** 2686,2702 ****
sign = '+';
}
! tim = parse->time.parse_time.fp.l_ui - JAN_1970;
! strcpy(outstatus, ctime(&tim));
! t = strrchr(outstatus, '\n');
! if (!t)
{
! t = outstatus + strlen(outstatus);
! }
else
{
! sprintf(t, " %c%02d%02d", sign, utcoff / 60, utcoff % 60);
! t += strlen(t);
}
if (!PARSE_GETTIMECODE(parse, &tmpctl))
--- 2710,2729 ----
sign = '+';
}
! tt = add_var(&out->kv_list, 128, RO|DEF);
! sprintf(tt, "refclock_time=\"");
! tt += strlen(tt);
!
! if (parse->time.parse_time.fp.l_ui == 0)
{
! strcpy(tt, "<UNDEFINED>\"");
! }
else
{
! strcpy(tt, prettydate(&parse->time.parse_time.fp));
! t = tt + strlen(tt);
!
! sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60);
}
if (!PARSE_GETTIMECODE(parse, &tmpctl))
***************
*** 2705,2731 ****
}
else
{
/*
* copy PPS flags from last read transaction (informational only)
*/
tmpctl.parsegettc.parse_state |= parse->time.parse_state &
(PARSEB_PPS|PARSEB_S_PPS);
! if (t)
! {
! *t = ' ';
! (void) parsestate(tmpctl.parsegettc.parse_state, t+1);
! }
! else
! {
! strcat(outstatus, " ");
! (void) parsestate(tmpctl.parsegettc.parse_state, outstatus + strlen(outstatus));
! }
! strcat(outstatus," <");
if (tmpctl.parsegettc.parse_count)
! mkascii(outstatus+strlen(outstatus), sizeof(outstatus) - strlen(outstatus) - 1,
tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
! strcat(outstatus,">");
parse->badformat += tmpctl.parsegettc.parse_badformat;
}
--- 2732,2755 ----
}
else
{
+ tt = add_var(&out->kv_list, 128, RO|DEF);
+ sprintf(tt, "refclock_status=\"");
+ tt += strlen(tt);
+
/*
* copy PPS flags from last read transaction (informational only)
*/
tmpctl.parsegettc.parse_state |= parse->time.parse_state &
(PARSEB_PPS|PARSEB_S_PPS);
! (void) parsestate(tmpctl.parsegettc.parse_state, tt);
!
! strcat(tt, "\"");
!
if (tmpctl.parsegettc.parse_count)
! mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1,
tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
!
parse->badformat += tmpctl.parsegettc.parse_badformat;
}
***************
*** 2737,2752 ****
}
else
{
! strcat(outstatus," (");
! strncat(outstatus, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
! strcat(outstatus,")");
}
/*
* gather state statistics
*/
! t = outstatus + strlen(outstatus);
for (i = 0; i <= CEVNT_MAX; i++)
{
--- 2761,2780 ----
}
else
{
! tt = add_var(&out->kv_list, 80, RO|DEF);
! sprintf(tt, "refclock_format=\"");
!
! strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
! strcat(tt,"\"");
}
/*
* gather state statistics
*/
! tt = add_var(&out->kv_list, 200, RO|DEF);
! strcpy(tt, "refclock_states=\"");
! tt += strlen(tt);
for (i = 0; i <= CEVNT_MAX; i++)
{
***************
*** 2769,2787 ****
if (stime)
{
! sprintf(t, "%s%s%s: %s (%d.%02d%%)",
! sum ? "; " : " [",
(parse->status == i) ? "*" : "",
clockstatus(i),
l_mktime(stime),
percent / 100, percent % 100);
sum += stime;
! t += strlen(t);
}
}
! sprintf(t, "; running time: %s]", l_mktime(sum));
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
out->timereset = parse->timestarted;
--- 2797,2824 ----
if (stime)
{
! sprintf(tt, "%s%s%s: %s (%d.%02d%%)",
! sum ? "; " : "",
(parse->status == i) ? "*" : "",
clockstatus(i),
l_mktime(stime),
percent / 100, percent % 100);
sum += stime;
! tt += strlen(tt);
}
}
! sprintf(tt, "; running time: %s\"", l_mktime(sum));
!
! tt = add_var(&out->kv_list, 32, RO);
! sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id);
+ tt = add_var(&out->kv_list, 80, RO);
+ 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.45 1994/01/25 19:06:27 kardel Exp\"");
+
out->lencode = strlen(outstatus);
out->lastcode = outstatus;
out->timereset = parse->timestarted;
***************
*** 3086,3091 ****
--- 3123,3130 ----
*/
offset = parsetime->parse_ptime.fp;
+ L_ADD(&offset, &parse->ppsdelay);
+
if (PARSE_TIMECODE(parsetime->parse_state))
{
if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) &&
***************
*** 3353,3358 ****
--- 3392,3403 ----
* History:
*
* refclock_parse.c,v
+ * Revision 3.45 1994/01/25 19:06:27 kardel
+ * 94/01/23 reconcilation
+ *
+ * Revision 3.44 1994/01/25 17:32:23 kardel
+ * settable extended variables
+ *
* Revision 3.43 1994/01/23 16:28:39 kardel
* HAVE_TERMIOS introduced
*
diff -c -r1.1.1.8 lib/numtohost.c
*** lib/numtohost.c:1.1.1.8 1994/01/26 20:12:51
--- lib/numtohost.c 1994/01/26 21:17:01
***************
*** 1,6 ****
--- 1,7 ----
/* 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 "ntp_string.h"
#include <netdb.h>