Nuke timed(8) (and timedc(8)). It is no longer used for time setting.
authorSascha Wildner <saw@online.de>
Mon, 17 Jun 2019 17:28:18 +0000 (19:28 +0200)
committerSascha Wildner <saw@online.de>
Mon, 17 Jun 2019 17:28:18 +0000 (19:28 +0200)
Adjust date(1) too for the removal (based on what FreeBSD did).

44 files changed:
Makefile_upgrade.inc
UPDATING
bin/date/Makefile
bin/date/date.1
bin/date/date.c
bin/date/extern.h [deleted file]
bin/date/netdate.c [deleted file]
etc/defaults/rc.conf
etc/rc.d/Makefile
etc/rc.d/timed [deleted file]
lib/libc/rpc/rtime.3
lib/libc/sys/adjtime.2
lib/libc/sys/clock_gettime.2
lib/libc/sys/gettimeofday.2
share/man/man5/rc.conf.5
usr.bin/crunch/examples/really-big.conf
usr.sbin/Makefile
usr.sbin/rdate/rdate.8
usr.sbin/timed/Makefile [deleted file]
usr.sbin/timed/Makefile.inc [deleted file]
usr.sbin/timed/timed/CHANGES [deleted file]
usr.sbin/timed/timed/Makefile [deleted file]
usr.sbin/timed/timed/acksend.c [deleted file]
usr.sbin/timed/timed/byteorder.c [deleted file]
usr.sbin/timed/timed/candidate.c [deleted file]
usr.sbin/timed/timed/cksum.c [deleted file]
usr.sbin/timed/timed/correct.c [deleted file]
usr.sbin/timed/timed/extern.h [deleted file]
usr.sbin/timed/timed/globals.h [deleted file]
usr.sbin/timed/timed/master.c [deleted file]
usr.sbin/timed/timed/measure.c [deleted file]
usr.sbin/timed/timed/networkdelta.c [deleted file]
usr.sbin/timed/timed/pathnames.h [deleted file]
usr.sbin/timed/timed/readmsg.c [deleted file]
usr.sbin/timed/timed/slave.c [deleted file]
usr.sbin/timed/timed/timed.8 [deleted file]
usr.sbin/timed/timed/timed.c [deleted file]
usr.sbin/timed/timedc/Makefile [deleted file]
usr.sbin/timed/timedc/cmds.c [deleted file]
usr.sbin/timed/timedc/cmdtab.c [deleted file]
usr.sbin/timed/timedc/extern.h [deleted file]
usr.sbin/timed/timedc/timedc.8 [deleted file]
usr.sbin/timed/timedc/timedc.c [deleted file]
usr.sbin/timed/timedc/timedc.h [deleted file]

index bde6960..b0a8396 100644 (file)
@@ -3745,6 +3745,11 @@ TO_REMOVE+=/usr/share/man/man3/md5.3.gz
 TO_REMOVE+=/usr/share/man/man3/sha.3.gz
 TO_REMOVE+=/usr/share/man/man3/sha256.3.gz
 TO_REMOVE+=/usr/share/man/man3/sha512.3.gz
+TO_REMOVE+=/etc/rc.d/timed
+TO_REMOVE+=/usr/sbin/timed
+TO_REMOVE+=/usr/sbin/timedc
+TO_REMOVE+=/usr/share/man/man8/timed.8.gz
+TO_REMOVE+=/usr/share/man/man8/timedc.8.gz
 
 .if !defined(WANT_INSTALLER)
 TO_REMOVE+=/usr/sbin/dfuibe_installer
index d1a132c..e7206d6 100644 (file)
--- a/UPDATING
+++ b/UPDATING
 +         UPGRADING DRAGONFLY FROM 5.6 TO LATER VERSIONS                +
 +-----------------------------------------------------------------------+
 
+TIMED AND TIMEDC REMOVED
+------------------------
+
+timed(8) and timedc(8) have been removed because they are beyond
+obsolete for setting the time.
+
 LIBOPIE, LIBMD REMOVED
 ----------------------
 
index 45926e2..8f51898 100644 (file)
@@ -1,9 +1,8 @@
 #      @(#)Makefile    8.1 (Berkeley) 5/31/93
 # $FreeBSD: src/bin/date/Makefile,v 1.8 1999/08/27 23:13:58 peter Exp $
-# $DragonFly: src/bin/date/Makefile,v 1.7 2006/09/28 03:46:03 pavalos Exp $
 
 PROG=  date
-SRCS=  date.c netdate.c vary.c
+SRCS=  date.c vary.c
 
 DPADD= ${LIBUTIL}
 LDADD= -lutil
index 979b1f6..73c7f9b 100644 (file)
@@ -31,7 +31,7 @@
 .\"     @(#)date.1     8.3 (Berkeley) 4/28/95
 .\" $FreeBSD: src/bin/date/date.1,v 1.72 2005/02/13 22:25:09 ru Exp $
 .\"
-.Dd November 15, 2014
+.Dd June 17, 2019
 .Dt DATE 1
 .Os
 .Sh NAME
@@ -60,9 +60,6 @@
 .Op Fl jnu
 .Fl f Ar input_fmt new_date
 .Op Cm + Ns Ar output_fmt
-.Nm
-.Op Fl d Ar dst
-.Op Fl t Ar minutes_west
 .Sh DESCRIPTION
 When invoked without arguments, the
 .Nm
@@ -85,15 +82,6 @@ the time may not be changed by more than 1 second.
 .Pp
 The options are as follows:
 .Bl -tag -width Ds
-.It Fl d Ar dst
-Set the kernel's value for daylight saving time.
-If
-.Ar dst
-is non-zero, future calls
-to
-.Xr gettimeofday 2
-will return a non-zero for
-.Fa tz_dsttime .
 .It Fl f
 Use
 .Ar input_fmt
@@ -120,15 +108,7 @@ flag in addition to the
 .Cm +
 option to convert one date format to another.
 .It Fl n
-By default, if the
-.Xr timed 8
-daemon is running,
-.Nm
-sets the time on all of the machines in the local group.
-The
-.Fl n
-option suppresses this behavior and causes the time to be set only on the
-current machine.
+Obsolete flag, accepted and ignored for compatibility.
 .It Fl R
 Use RFC 2822 date and time output format. This is equivalent to use
 .Dq Li %a, %d %b %Y \&%T %z
@@ -149,14 +129,6 @@ is the number of seconds since the Epoch
 see
 .Xr time 3 ) ,
 and can be specified in decimal, octal, or hex.
-.It Fl t Ar minutes_west
-Set the system's value for minutes west of
-.Tn GMT .
-.Ar minutes_west
-specifies the number of minutes returned in
-.Fa tz_minuteswest
-by future calls to
-.Xr gettimeofday 2 .
 .It Fl u
 Display or set the date in
 .Tn UTC
@@ -395,34 +367,11 @@ Finally the command:
 can be used to parse the output from
 .Nm
 and express it in Epoch time.
-.Sh DIAGNOSTICS
-Occasionally, when
-.Xr timed 8
-synchronizes the time on many hosts, the setting of a new time value may
-require more than a few seconds.
-On these occasions,
-.Nm
-prints:
-.Ql Network time being set .
-The message
-.Ql Communication error with timed
-occurs when the communication
-between
-.Nm
-and
-.Xr timed 8
-fails.
 .Sh SEE ALSO
 .Xr gettimeofday 2 ,
 .Xr strftime 3 ,
 .Xr strptime 3 ,
-.Xr utmp 5 ,
-.Xr timed 8
-.Rs
-.%T "TSP: The Time Synchronization Protocol for UNIX 4.3BSD"
-.%A R. Gusella
-.%A S. Zatti
-.Re
+.Xr utmp 5
 .Sh STANDARDS
 The
 .Nm
index 7ab825e..89b73a2 100644 (file)
@@ -44,7 +44,6 @@
 #include <locale.h>
 #include <libutil.h>
 
-#include "extern.h"
 #include "vary.h"
 
 #ifndef        TM_YEAR_BASE
@@ -52,9 +51,8 @@
 #endif
 
 static time_t tval;
-int retval;
 
-static void setthetime(const char *, const char *, int, int);
+static void setthetime(const char *, const char *, int);
 static void badformat(void);
 static void usage(void);
 
@@ -63,14 +61,12 @@ static const char *rfc2822_format ="%a, %d %b %Y %T %z";
 int
 main(int argc, char **argv)
 {
-       struct timezone tz;
        int ch, rflag;
-       int jflag, nflag, Rflag;
+       int jflag, Rflag;
        const char *format;
        char buf[1024];
-       char *endptr, *fmt;
+       char *fmt;
        char *tmp;
-       int set_timezone;
        struct vary *v;
        const struct vary *badv;
        struct tm lt;
@@ -78,18 +74,10 @@ main(int argc, char **argv)
        v = NULL;
        fmt = NULL;
        setlocale(LC_TIME, "");
-       tz.tz_dsttime = tz.tz_minuteswest = 0;
        rflag = 0;
-       jflag = nflag = Rflag = 0;
-       set_timezone = 0;
-       while ((ch = getopt(argc, argv, "d:f:jnRr:t:uv:")) != -1)
+       jflag = Rflag = 0;
+       while ((ch = getopt(argc, argv, "f:jnRr:uv:")) != -1)
                switch(ch) {
-               case 'd':               /* daylight savings time */
-                       tz.tz_dsttime = strtol(optarg, &endptr, 10) ? 1 : 0;
-                       if (endptr == optarg || *endptr != '\0')
-                               usage();
-                       set_timezone = 1;
-                       break;
                case 'f':
                        fmt = optarg;
                        break;
@@ -97,7 +85,6 @@ main(int argc, char **argv)
                        jflag = 1;      /* don't set time */
                        break;
                case 'n':               /* don't set network */
-                       nflag = 1;
                        break;
                case 'R':
                        Rflag = 1;      /*RFC 2822 datetime format */
@@ -108,13 +95,6 @@ main(int argc, char **argv)
                        if (*tmp != 0)
                                usage();
                        break;
-               case 't':               /* minutes west of UTC */
-                                       /* error check; don't allow "PST" */
-                       tz.tz_minuteswest = strtol(optarg, &endptr, 10);
-                       if (endptr == optarg || *endptr != '\0')
-                               usage();
-                       set_timezone = 1;
-                       break;
                case 'u':               /* do everything in UTC */
                        if (setenv("TZ", "UTC0", 1) != 0)
                                err(1, "setenv: cannot set TZ=UTC0");
@@ -128,13 +108,6 @@ main(int argc, char **argv)
        argc -= optind;
        argv += optind;
 
-       /*
-        * If -d or -t, set the timezone or daylight savings time; this
-        * doesn't belong here; the kernel should not know about either.
-        */
-       if (set_timezone && settimeofday(NULL, &tz))
-               err(1, "settimeofday (timezone)");
-
        if (!rflag && time(&tval) == -1)
                err(1, "time");
 
@@ -150,7 +123,7 @@ main(int argc, char **argv)
        }
 
        if (*argv) {
-               setthetime(fmt, *argv, jflag, nflag);
+               setthetime(fmt, *argv, jflag);
                ++argv;
        } else if (fmt != NULL)
                usage();
@@ -180,13 +153,13 @@ main(int argc, char **argv)
        printf("%s\n", buf);
        if (fflush(stdout) != 0)
                err(1, "stdout");
-       exit(retval);
+       exit(EXIT_SUCCESS);
 }
 
 #define        ATOI2(s)        ((s) += 2, ((s)[-2] - '0') * 10 + ((s)[-1] - '0'))
 
 static void
-setthetime(const char *fmt, const char *p, int jflag, int nflag)
+setthetime(const char *fmt, const char *p, int jflag)
 {
        struct tm *lt;
        struct timeval tv;
@@ -279,15 +252,12 @@ setthetime(const char *fmt, const char *p, int jflag, int nflag)
                errx(1, "nonexistent time");
 
        if (!jflag) {
-               /* set the time */
-               if (nflag || netsettime(tval)) {
-                       logwtmp("|", "date", "");
-                       tv.tv_sec = tval;
-                       tv.tv_usec = 0;
-                       if (settimeofday(&tv, NULL))
-                               err(1, "settimeofday (timeval)");
-                       logwtmp("{", "date", "");
-               }
+               logwtmp("|", "date", "");
+               tv.tv_sec = tval;
+               tv.tv_usec = 0;
+               if (settimeofday(&tv, NULL))
+                       err(1, "settimeofday (timeval)");
+               logwtmp("{", "date", "");
 
                if ((p = getlogin()) == NULL)
                        p = "???";
@@ -306,8 +276,7 @@ static void
 usage(void)
 {
        fprintf(stderr, "%s\n%s\n",
-           "usage: date [-jnRu] [-d dst] [-r seconds] [-t west] "
-           "[-v[+|-]val[ymwdHMS]] ... ",
+           "usage: date [-jnRu] [-r seconds] [-v[+|-]val[ymwdHMS]] ... ",
            "            "
            "[-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format]");
        exit(1);
diff --git a/bin/date/extern.h b/bin/date/extern.h
deleted file mode 100644 (file)
index 589f239..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)extern.h    8.1 (Berkeley) 5/31/93
- * $FreeBSD: src/bin/date/extern.h,v 1.7 2004/04/06 20:06:45 markm Exp $ 
- * $DragonFly: src/bin/date/extern.h,v 1.4 2005/07/20 19:51:56 cpressey Exp $
- */
-
-int    netsettime(time_t);
diff --git a/bin/date/netdate.c b/bin/date/netdate.c
deleted file mode 100644 (file)
index 81bfc86..0000000
+++ /dev/null
@@ -1,178 +0,0 @@
-/*-
- * Copyright (c) 1990, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)netdate.c       8.1 (Berkeley) 5/31/93
- * $FreeBSD: src/bin/date/netdate.c,v 1.18 2004/04/06 20:06:45 markm Exp $
- * $DragonFly: src/bin/date/netdate.c,v 1.8 2008/11/10 14:56:33 swildner Exp $
- */
-
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <netdb.h>
-#define TSPTYPES
-#include <protocols/timed.h>
-
-#include <err.h>
-#include <errno.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "extern.h"
-
-#define        WAITACK         2       /* seconds */
-#define        WAITDATEACK     5       /* seconds */
-
-extern int retval;
-
-/*
- * Set the date in the machines controlled by timedaemons by communicating the
- * new date to the local timedaemon.  If the timedaemon is in the master state,
- * it performs the correction on all slaves.  If it is in the slave state, it
- * notifies the master that a correction is needed.
- * Returns 0 on success.  Returns > 0 on failure, setting retval to 2;
- */
-int
-netsettime(time_t tval)
-{
-       struct timeval tout;
-       struct servent *sp;
-       struct tsp msg;
-       struct sockaddr_in tmpsin, dest, from;
-       fd_set ready;
-       long waittime;
-       int s, port, timed_ack, found, errn;
-       socklen_t length;
-       char hostname[MAXHOSTNAMELEN];
-
-       if ((sp = getservbyname("timed", "udp")) == NULL) {
-               warnx("timed/udp: unknown service");
-               return (retval = 2);
-       }
-
-       dest.sin_port = sp->s_port;
-       dest.sin_family = AF_INET;
-       dest.sin_addr.s_addr = htonl((u_long)INADDR_ANY);
-       s = socket(AF_INET, SOCK_DGRAM, 0);
-       if (s < 0) {
-               if (errno != EPROTONOSUPPORT)
-                       warn("timed");
-               return (retval = 2);
-       }
-
-       memset(&tmpsin, 0, sizeof(tmpsin));
-       tmpsin.sin_family = AF_INET;
-       for (port = IPPORT_RESERVED - 1; port > IPPORT_RESERVED / 2; port--) {
-               tmpsin.sin_port = htons((u_short)port);
-               if (bind(s, (struct sockaddr *)&tmpsin, sizeof(tmpsin)) >= 0)
-                       break;
-               if (errno == EADDRINUSE)
-                       continue;
-               if (errno != EADDRNOTAVAIL)
-                       warn("bind");
-               goto bad;
-       }
-       if (port == IPPORT_RESERVED / 2) {
-               warnx("all ports in use");
-               goto bad;
-       }
-       msg.tsp_type = TSP_SETDATE;
-       msg.tsp_vers = TSPVERSION;
-       if (gethostname(hostname, sizeof(hostname))) {
-               warn("gethostname");
-               goto bad;
-       }
-       strncpy(msg.tsp_name, hostname, sizeof(msg.tsp_name) - 1);
-       msg.tsp_name[sizeof(msg.tsp_name) - 1] = '\0';
-       msg.tsp_seq = htons((u_short)0);
-       msg.tsp_time.tv_sec = htonl((u_long)tval);
-       msg.tsp_time.tv_usec = htonl((u_long)0);
-       length = sizeof(struct sockaddr_in);
-       if (connect(s, (struct sockaddr *)&dest, length) < 0) {
-               warn("connect");
-               goto bad;
-       }
-       if (send(s, (char *)&msg, sizeof(struct tsp), 0) < 0) {
-               if (errno != ECONNREFUSED)
-                       warn("send");
-               goto bad;
-       }
-
-       timed_ack = -1;
-       waittime = WAITACK;
-loop:
-       tout.tv_sec = waittime;
-       tout.tv_usec = 0;
-
-       FD_ZERO(&ready);
-       FD_SET(s, &ready);
-       found = select(FD_SETSIZE, &ready, NULL, NULL, &tout);
-
-       length = sizeof(errn);
-       if (!getsockopt(s,
-           SOL_SOCKET, SO_ERROR, (char *)&errn, &length) && errn) {
-               if (errn != ECONNREFUSED)
-                       warnc(errn, "send (delayed error)");
-               goto bad;
-       }
-
-       if (found > 0 && FD_ISSET(s, &ready)) {
-               length = sizeof(struct sockaddr_in);
-               if (recvfrom(s, &msg, sizeof(struct tsp), 0,
-                   (struct sockaddr *)&from, &length) < 0) {
-                       if (errno != ECONNREFUSED)
-                               warn("recvfrom");
-                       goto bad;
-               }
-               msg.tsp_seq = ntohs(msg.tsp_seq);
-               msg.tsp_time.tv_sec = ntohl(msg.tsp_time.tv_sec);
-               msg.tsp_time.tv_usec = ntohl(msg.tsp_time.tv_usec);
-               switch (msg.tsp_type) {
-               case TSP_ACK:
-                       timed_ack = TSP_ACK;
-                       waittime = WAITDATEACK;
-                       goto loop;
-               case TSP_DATEACK:
-                       close(s);
-                       return (0);
-               default:
-                       warnx("wrong ack received from timed: %s",
-                           tsptype[msg.tsp_type]);
-                       timed_ack = -1;
-                       break;
-               }
-       }
-       if (timed_ack == -1)
-               warnx("can't reach time daemon, time set locally");
-
-bad:
-       close(s);
-       return (retval = 2);
-}
index 022a808..40d7f71 100644 (file)
@@ -187,8 +187,6 @@ keyserv_enable="NO"         # Run the SecureRPC keyserver (or NO).
 keyserv_flags=""               # Flags to keyserv (if enabled).
 
 ### Network Time Services options: ###
-timed_enable="NO"              # Run the time daemon (or NO).
-timed_flags=""                 # Flags to timed (if enabled).
 dntpd_enable="NO"              # Run dntpd Network Time Protocol (or NO).
 dntpd_program="/usr/sbin/dntpd"        # path to dntpd, if you want a different one.
 dntpd_flags=""                 # Flags to dntpd (if enabled) also server name(s)
index 0ef98f5..621b21d 100644 (file)
@@ -23,7 +23,7 @@ FILES=        DAEMON LOGIN NETWORKING SERVERS \
        routing rpcbind rtadvd rtsold rwho sysdb savecore sdpd securelevel \
        sendmail sensorsd serial sppp sshd statd swap1 syscons \
        sysctl syslogd sysvipcd \
-       timed ttys udevd udevd_early \
+       ttys udevd udevd_early \
        varsym vfs_quota vinum virecover vkernel vknetd \
        watchdogd wpa_supplicant \
        ypbind yppasswdd ypserv ypset ypupdated ypxfrd
diff --git a/etc/rc.d/timed b/etc/rc.d/timed
deleted file mode 100644 (file)
index 9ba12dd..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-#!/bin/sh
-#
-# $NetBSD: timed,v 1.5 2002/03/22 04:34:00 thorpej Exp $
-# $FreeBSD: src/etc/rc.d/timed,v 1.2 2002/06/13 22:14:36 gordon Exp $
-# $DragonFly: src/etc/rc.d/timed,v 1.3 2005/11/19 21:47:32 swildner Exp $
-#
-
-# PROVIDE: timed
-# REQUIRE: DAEMON
-# BEFORE:  LOGIN
-
-. /etc/rc.subr
-
-name="timed"
-rcvar=`set_rcvar`
-command="/usr/sbin/${name}"
-
-load_rc_config $name
-run_rc_command "$1"
index 6715338..8558c85 100644 (file)
@@ -1,8 +1,7 @@
 .\" @(#)rtime.3n       2.1 88/08/08 4.0 RPCSRC; from 1.5 88/02/08 SMI
 .\" $FreeBSD: src/lib/libc/rpc/rtime.3,v 1.4.2.2 2001/12/14 18:33:57 ru Exp $
-.\" $DragonFly: src/lib/libc/rpc/rtime.3,v 1.2 2003/06/17 04:26:45 dillon Exp $
 .\"
-.Dd November 22, 1987
+.Dd June 17, 2019
 .Dt RTIME 3
 .Os
 .Sh NAME
@@ -46,5 +45,3 @@ however, the routine will instead use
 and block until a reply is received from the time server.
 .Sh RETURN VALUES
 .Rv -std rtime
-.Sh SEE ALSO
-.Xr timed 8
index 419bd51..bd9fdf7 100644 (file)
@@ -28,7 +28,7 @@
 .\"     @(#)adjtime.2  8.1 (Berkeley) 6/4/93
 .\" $FreeBSD: src/lib/libc/sys/adjtime.2,v 1.6.2.4 2001/12/14 18:34:00 ru Exp $
 .\"
-.Dd June 4, 1993
+.Dd June 17, 2019
 .Dt ADJTIME 2
 .Os
 .Sh NAME
@@ -92,14 +92,7 @@ The process's effective user ID is not that of the super-user.
 .El
 .Sh SEE ALSO
 .Xr date 1 ,
-.Xr gettimeofday 2 ,
-.Xr timed 8 ,
-.Xr timedc 8
-.Rs
-.%T "TSP: The Time Synchronization Protocol for UNIX 4.3BSD"
-.%A R. Gusella
-.%A S. Zatti
-.Re
+.Xr gettimeofday 2
 .Sh HISTORY
 The
 .Fn adjtime
index 5ac754c..bad53ba 100644 (file)
@@ -29,7 +29,7 @@
 .\"
 .\" $FreeBSD: head/lib/libc/sys/clock_gettime.2 292777 2015-12-27 15:37:07Z dchagin $
 .\"
-.Dd July 26, 2017
+.Dd June 17, 2019
 .Dt CLOCK_GETTIME 2
 .Os
 .Sh NAME
@@ -165,8 +165,7 @@ A user other than the super-user attempted to set the time.
 .Xr adjtime 2 ,
 .Xr clock_getcpuclockid 3 ,
 .Xr ctime 3 ,
-.Xr pthread_getcpuclockid 3 ,
-.Xr timed 8
+.Xr pthread_getcpuclockid 3
 .Sh STANDARDS
 The
 .Fn clock_gettime ,
index c65d752..daf943b 100644 (file)
@@ -28,7 +28,7 @@
 .\"     @(#)gettimeofday.2     8.2 (Berkeley) 5/26/95
 .\" $FreeBSD: src/lib/libc/sys/gettimeofday.2,v 1.9.2.9 2003/02/11 06:05:00 nsayer Exp $
 .\"
-.Dd March 26, 2016
+.Dd June 17, 2019
 .Dt GETTIMEOFDAY 2
 .Os
 .Sh NAME
@@ -125,8 +125,7 @@ A user other than the super-user attempted to set the time.
 .Xr date 1 ,
 .Xr adjtime 2 ,
 .Xr ctime 3 ,
-.Xr clocks 7 ,
-.Xr timed 8
+.Xr clocks 7
 .Sh HISTORY
 The
 .Fn gettimeofday
index 2886ad4..43cdff6 100644 (file)
@@ -24,7 +24,7 @@
 .\"
 .\" $FreeBSD: src/share/man/man5/rc.conf.5,v 1.197 2003/07/28 13:56:00 mbr Exp $
 .\"
-.Dd May 20, 2019
+.Dd June 17, 2019
 .Dt RC.CONF 5
 .Os
 .Sh NAME
@@ -1345,27 +1345,6 @@ This is mandatory when
 .Va pppoed_enable
 is set to
 .Dq Li YES .
-.It Va timed_enable
-.Pq Vt bool
-If set to
-.Dq Li YES ,
-run the
-.Xr timed 8
-service at boot time.
-This command is intended for networks of machines where a consistent
-.Dq "network time"
-for all hosts must be established.
-This is often useful in large NFS environments where time stamps on
-files are expected to be consistent network-wide.
-.It Va timed_flags
-.Pq Vt str
-If
-.Va timed_enable
-is set to
-.Dq Li YES ,
-these are the flags to pass to the
-.Xr timed 8
-service.
 .It Va dntpd_enable
 .Pq Vt bool
 If set to
@@ -2794,7 +2773,6 @@ By default no flags are passed.
 .Xr sysctl 8 ,
 .Xr syslogd 8 ,
 .Xr sysvipcd 8 ,
-.Xr timed 8 ,
 .Xr vinum 8 ,
 .Xr yp 8 ,
 .Xr ypbind 8 ,
index 2c0988d..ef5f49a 100644 (file)
@@ -88,10 +88,6 @@ special sendmail srcdir /usr/src/usr.sbin/sendmail/src
 ln sendmail newaliases
 ln sendmail mailq
 
-srcdirs /usr/src/usr.sbin/timed                # timed & timedc
-progs timed timedc
-special timed srcdir /usr/src/usr.sbin/timed/timed
-
 srcdirs /usr/src/usr.sbin/xntpd                # NTP subsystem
 # xntpd uses a gross hack to pass some information in the global
 # variable `progname' between the actual program (ntpdate in this
index dd5b805..f95a72f 100644 (file)
@@ -123,7 +123,6 @@ SUBDIR= 802_11 \
        tcpdmatch \
        tcpdrop \
        tcpdump \
-       timed \
        traceroute \
        traceroute6 \
        trpt \
index 5ecfbbb..046ccd2 100644 (file)
@@ -29,7 +29,7 @@
 .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd April 30, 1994
+.Dd June 17, 2019
 .Dt RDATE 8
 .Os
 .Sh NAME
@@ -112,5 +112,4 @@ adjustment, put the following line into root's crontab:
 .Xr date 1 ,
 .Xr adjtime 2 ,
 .Xr inetd 8 ,
-.Xr ntpd 8 Pq Pa net/openntpd ,
-.Xr timed 8
+.Xr ntpd 8 Pq Pa net/openntpd
diff --git a/usr.sbin/timed/Makefile b/usr.sbin/timed/Makefile
deleted file mode 100644 (file)
index a89ab16..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-#      @(#)Makefile    8.1 (Berkeley) 6/6/93
-
-SUBDIR=        timed timedc
-
-.include <bsd.subdir.mk>
diff --git a/usr.sbin/timed/Makefile.inc b/usr.sbin/timed/Makefile.inc
deleted file mode 100644 (file)
index 1f5b79a..0000000
+++ /dev/null
@@ -1,3 +0,0 @@
-WARNS?=        2
-
-.include "../Makefile.inc"
diff --git a/usr.sbin/timed/timed/CHANGES b/usr.sbin/timed/timed/CHANGES
deleted file mode 100644 (file)
index fc3c5b2..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-#      @(#)CHANGES     5.1 (Berkeley) 5/11/93
-# $FreeBSD: src/usr.sbin/timed/timed/CHANGES,v 1.1.1.1.14.1 2001/07/19 05:22:36 kris Exp $
-# $DragonFly: src/usr.sbin/timed/timed/CHANGES,v 1.2 2003/06/17 04:30:03 dillon Exp $
-
-This new version is almost identical to the timed and timedc code
-that has been shipped for years by a workstation vendor.
-
-Among the many changes:
-
-improve `timedc msite` to accept a list of hostnames.
-
-change slave-masters to answer the packets generated by `timedc msite`
-    with the name of the real master, not their own.  This makes it
-    possible to "chase the chain" of slave servers to the ultimate
-    master.
-
-much improve the log caused by `timedc trace on`:
-    -made `timed -t` work.
-    -suppression of repeated entries, which both slowed down the daemon
-       (sometimes catastrophically) and tended to make disks fill up
-       even more quickly.
-    -better time stamps on log entries
-    -more messages
-    -dump information about slaves, master, and so on each time
-       a message asking the log be turned on is received, and
-       when the log is turned off.
-    -fewer CPU cycles
-
-use a hash table to keep track of slaves, instead of the stupid linear
-    list.  This becomes handy with hundreds of slaves, instead of
-    the original design limit of "a room with a few VAX's."
-
-separate the main protocol timer from that used to look for other networks
-    to master.
-
-time stamp packets received by the daemon, so that time corrections
-    are not made (even more) inaccurate by waiting in the internal,
-    timed queue while the daemon is processing other messages.
-
-made -n and -i work with subnets not named in /etc/networks
-
-compute the median of the measured clocks, instead of the average
-    of "good" times.
-
-vastly improve the accuracy of the clock difference measure by 
-    `timedc clockdiff`.
-
-use adjtime() when possible, and directly set the clock only when
-    necessary.
-
-when the requested adjustment is small, perform only part of it, to
-    damp oscillations and improve the long term accuracy of the
-    adjustments.
-
-fix uncounted core-dumps on machines that do not allow dereferencing 0
-    in both the daemon and timedc.
-
-fix "master loop detection".
-
-fix several cases in which multi-homed masters could get into shouting 
-    matches, consuming all available network bandwidth and CPU cycles
-    (which ever runs out first), and convincing all bystanders to stop
-    advancing their own clocks.
-
-refuse to behave badly when other machines do.  Instead of arguing forever,
-    go off and sulk when other machines refuse to play by the rules.
-
-increase the maximum number of clients.
-
-add "-F host,host2,..." to "freerun" or "trust" only some hosts.  This
-    is handy both when only some machines should be trusted to let
-    root use the `date` command to change time in the network.
-
-    It is also handy when one machine has some other way of adjusting
-    its clock, whether NTP or a direct radio or atomic connection.
-    "-F localhost" causes `timed` to "trust" only itself.
-
-    It is also handy to build a hierarchy of timed masters crossing
-    networks.  The TSP protocol has no provision of "goodness of clock",
-    no natural way to completely heal network paritions.  Judicious
-    use of -F or -G can cause each gateway to trust only itself and
-    machines closer to a central machine with a radio or atomic clock.
-
-add #ifdef code that supports NIS "netgroups" of trusted hosts, which
-    can be easier to administer than -F.
-
-add #ifdef code to compute an aged total adjustment.  This can be used
-    in systems that can make long term changes in their system clock
-    frequency, e.g. "timetrim" in the Silicon Graphics kernel.
-
-
-Problems observed by others that are unresolved include:
-
-Practically any users can send to the master TSP messages and this
-       way corrupt the reliability of the system.  Authentication
-       of messages should be provided.  Unfortunately, that would
-       require changing the protocol with all of the implied
-       compatiblity problems.  Fortunately, the new -F and -G args
-       can be used to cause the daemon to ignore time changes from
-       untrusted machines.
-
-MAN.   The limit of 1013 on the number of slaves hosts should be doc'ed.
-
-       It should be dynamically allocated with no limit.  On a
-       large network, one host could possibly master over many
-       more than 30 hosts.   Given the timers in the code and
-       effectively in the protocol, and the time required by each
-       master to talk to each slave, it is not practical to have
-       more than 200-300 slaves.  The master cannot keep up because
-       the slave-chatting is single-threaded.  when the master
-       gets behind, slaves start demanding elections.  To
-       significantly increase the number of slaves would require
-       multi-treading things, and given that a network with more
-       than 300 directly addressable machines has worse problems
-       than keep the time of day right, not worth worrying about.
-
-UGLY,CODE. timedc/cmds.c has a lots of repeated code in it.
-
-****    The first thing is that each command is set up as if it
-       were an individual program taking argc and argv.  A more
-       conventional calling style should be used.  I don't think
-       any of the routines take more than a couple arguments.
-
-UGLY.  fxn definition syntax does't follow convention:
-       has type on same line.
-
-****   It needs to be fixed at least enough that tags
-       will work on it.  An entire cleanup might be nice later, but
-       is noncritical.
-
-LOBBY(mildly),CODE:    Would be very convenient if date(1) took a
-       +-<number> argument to set the time relatively.  With
-       the advent of timed it is now reasonable to synchronize
-       with WWV, which is nearly impossible to do "by hand"
-       with just an absolute date, and scripts are too slow.
-       format could be +-nn...nn.ss, where the '.' is required
-       to remove ambiguity.
-
-****   If you want to do it go ahead.  It sounds useful.  As far as
-       syntax goes, the normal format for the date should work just
-       fine for this.  If the date is preceded by a plus or minus,
-       the change is relative, otherwise it is absolute.
-
-
-Vernon Schryver.
-vjs@sgi.com
diff --git a/usr.sbin/timed/timed/Makefile b/usr.sbin/timed/timed/Makefile
deleted file mode 100644 (file)
index fe8a0ba..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#      @(#)Makefile    8.1 (Berkeley) 6/6/93
-# $FreeBSD: src/usr.sbin/timed/timed/Makefile,v 1.2.14.1 2001/04/25 12:11:05 ru Exp $
-# $DragonFly: src/usr.sbin/timed/timed/Makefile,v 1.4 2004/09/05 02:20:15 dillon Exp $
-#
-# optional flags are: MEASURE TESTING DEBUG
-
-PROG=  timed
-SRCS=  acksend.c candidate.c correct.c master.c networkdelta.c readmsg.c \
-       slave.c timed.c byteorder.c measure.c cksum.c
-DPADD= ${LIBUTIL}
-LDADD= -lutil
-MAN=   timed.8
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/timed/timed/acksend.c b/usr.sbin/timed/timed/acksend.c
deleted file mode 100644 (file)
index c10217a..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)acksend.c       8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/acksend.c,v 1.4 1999/08/28 01:20:16 peter Exp $
- */
-
-#include "globals.h"
-
-struct tsp *answer;
-
-extern u_short sequence;
-
-void
-xmit(int type, u_int seq, struct sockaddr_in *addr)
-{
-       static struct tsp msg;
-
-       msg.tsp_type = type;
-       msg.tsp_seq = seq;
-       msg.tsp_vers = TSPVERSION;
-       strlcpy(msg.tsp_name, hostname, sizeof(msg.tsp_name));
-       bytenetorder(&msg);
-       if (sendto(sock, (char *)&msg, sizeof(struct tsp), 0,
-                  (struct sockaddr*)addr, sizeof(struct sockaddr)) < 0) {
-               trace_sendto_err(addr->sin_addr);
-       }
-}
-
-
-/*
- * Acksend implements reliable datagram transmission by using sequence
- * numbers and retransmission when necessary.
- * If `name' is ANYADDR, this routine implements reliable broadcast.
- *
- * Because this function calls readmsg(), none of its args may be in
- *     a message provided by readmsg().
- */
-struct tsp *
-acksend(struct tsp *message,           /* this message */
-       struct sockaddr_in *addr,       /* to here */
-       char *name,
-       int ack,                        /* look for this ack */
-       struct netinfo *net,            /* receive from this network */
-       int bad)                        /* 1=losing patience */
-{
-       struct timeval twait;
-       int count;
-       long msec;
-
-       message->tsp_vers = TSPVERSION;
-       message->tsp_seq = sequence;
-       if (trace) {
-               fprintf(fd, "acksend: to %s: ",
-                       (name == ANYADDR ? "broadcast" : name));
-               print(message, addr);
-       }
-       bytenetorder(message);
-
-       msec = 200;
-       count = bad ? 1 : 5;    /* 5 packets in 6.4 seconds */
-       answer = NULL;
-       do {
-               if (!answer) {
-                       /* do not go crazy transmitting just because the
-                        * other guy cannot keep our sequence numbers
-                        * straight.
-                        */
-                       if (sendto(sock, (char *)message, sizeof(struct tsp),
-                                  0, (struct sockaddr*)addr,
-                                  sizeof(struct sockaddr)) < 0) {
-                               trace_sendto_err(addr->sin_addr);
-                               break;
-                       }
-               }
-
-               mstotvround(&twait, msec);
-               answer  = readmsg(ack, name, &twait, net);
-               if (answer != NULL) {
-                       if (answer->tsp_seq != sequence) {
-                               if (trace)
-                                       fprintf(fd,"acksend: seq # %u!=%u\n",
-                                               answer->tsp_seq, sequence);
-                               continue;
-                       }
-                       break;
-               }
-
-               msec *= 2;
-       } while (--count > 0);
-       sequence++;
-
-       return(answer);
-}
diff --git a/usr.sbin/timed/timed/byteorder.c b/usr.sbin/timed/timed/byteorder.c
deleted file mode 100644 (file)
index ea92a14..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)byteorder.c     8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/byteorder.c,v 1.4 1999/08/28 01:20:16 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timed/byteorder.c,v 1.3 2004/03/13 21:08:38 eirikn Exp $
- */
-
-#include "globals.h"
-
-/*
- * Two routines to do the necessary byte swapping for timed protocol
- * messages. Protocol is defined in /usr/include/protocols/timed.h
- */
-void
-bytenetorder(struct tsp *ptr)
-{
-
-       ptr->tsp_seq = htons((u_short)ptr->tsp_seq);
-       switch (ptr->tsp_type) {
-
-       case TSP_SETTIME:
-       case TSP_ADJTIME:
-       case TSP_SETDATE:
-       case TSP_SETDATEREQ:
-               ptr->tsp_time.tv_sec = htonl((u_long)ptr->tsp_time.tv_sec);
-               ptr->tsp_time.tv_usec = htonl((u_long)ptr->tsp_time.tv_usec);
-               break;
-
-       default:
-               break;          /* nothing more needed */
-       }
-}
-
-void
-bytehostorder(struct tsp *ptr)
-{
-
-       ptr->tsp_seq = ntohs((u_short)ptr->tsp_seq);
-       switch (ptr->tsp_type) {
-
-       case TSP_SETTIME:
-       case TSP_ADJTIME:
-       case TSP_SETDATE:
-       case TSP_SETDATEREQ:
-               ptr->tsp_time.tv_sec = ntohl((u_long)ptr->tsp_time.tv_sec);
-               ptr->tsp_time.tv_usec = ntohl((u_long)ptr->tsp_time.tv_usec);
-               break;
-
-       default:
-               break;          /* nothing more needed */
-       }
-}
diff --git a/usr.sbin/timed/timed/candidate.c b/usr.sbin/timed/timed/candidate.c
deleted file mode 100644 (file)
index 1732584..0000000
+++ /dev/null
@@ -1,158 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)candidate.c     8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/candidate.c,v 1.5 1999/08/28 01:20:16 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timed/candidate.c,v 1.5 2004/09/05 02:20:15 dillon Exp $
- */
-
-#include "globals.h"
-
-/*
- * `election' candidates a host as master: it is called by a slave
- * which runs with the -M option set when its election timeout expires.
- * Note the conservative approach: if a new timed comes up, or another
- * candidate sends an election request, the candidature is withdrawn.
- */
-int
-election(struct netinfo *net)
-{
-       struct tsp *resp, msg;
-       struct timeval then, wait;
-       struct tsp *answer;
-       struct hosttbl *htp;
-       char loop_lim = 0;
-
-/* This code can get totally confused if it gets slightly behind.  For
- *     example, if readmsg() has some QUIT messages waiting from the last
- *     round, we would send an ELECTION message, get the stale QUIT,
- *     and give up.  This results in network storms when several machines
- *     do it at once.
- */
-       wait.tv_sec = 0;
-       wait.tv_usec = 0;
-       while (0 != readmsg(TSP_REFUSE, ANYADDR, &wait, net)) {
-               if (trace)
-                       fprintf(fd, "election: discarded stale REFUSE\n");
-       }
-       while (0 != readmsg(TSP_QUIT, ANYADDR, &wait, net)) {
-               if (trace)
-                       fprintf(fd, "election: discarded stale QUIT\n");
-       }
-
-again:
-       syslog(LOG_INFO, "This machine is a candidate time master");
-       if (trace)
-               fprintf(fd, "This machine is a candidate time master\n");
-       msg.tsp_type = TSP_ELECTION;
-       msg.tsp_vers = TSPVERSION;
-       strlcpy(msg.tsp_name, hostname, sizeof(msg.tsp_name));
-       bytenetorder(&msg);
-       if (sendto(sock, (char *)&msg, sizeof(struct tsp), 0,
-                  (struct sockaddr*)&net->dest_addr,
-                  sizeof(struct sockaddr)) < 0) {
-               trace_sendto_err(net->dest_addr.sin_addr);
-               return(SLAVE);
-       }
-
-       gettimeofday(&then, 0);
-       then.tv_sec += 3;
-       for (;;) {
-               gettimeofday(&wait, 0);
-               timevalsub(&wait,&then,&wait);
-               resp = readmsg(TSP_ANY, ANYADDR, &wait, net);
-               if (!resp)
-                       return(MASTER);
-
-               switch (resp->tsp_type) {
-
-               case TSP_ACCEPT:
-                       addmach(resp->tsp_name, &from,fromnet);
-                       break;
-
-               case TSP_MASTERUP:
-               case TSP_MASTERREQ:
-                       /*
-                        * If another timedaemon is coming up at the same
-                        * time, give up, and let it be the master.
-                        */
-                       if (++loop_lim < 5
-                           && !good_host_name(resp->tsp_name)) {
-                               addmach(resp->tsp_name, &from,fromnet);
-                               suppress(&from, resp->tsp_name, net);
-                               goto again;
-                       }
-                       rmnetmachs(net);
-                       return(SLAVE);
-
-               case TSP_QUIT:
-               case TSP_REFUSE:
-                       /*
-                        * Collision: change value of election timer
-                        * using exponential backoff.
-                        *
-                        *  Fooey.
-                        * An exponential backoff on a delay starting at
-                        * 6 to 15 minutes for a process that takes
-                        * milliseconds is silly.  It is particularly
-                        * strange that the original code would increase
-                        * the backoff without bound.
-                        */
-                       rmnetmachs(net);
-                       return(SLAVE);
-
-               case TSP_ELECTION:
-                       /* no master for another round */
-                       htp = addmach(resp->tsp_name,&from,fromnet);
-                       msg.tsp_type = TSP_REFUSE;
-                       strlcpy(msg.tsp_name, hostname, sizeof(msg.tsp_name));
-                       answer = acksend(&msg, &htp->addr, htp->name,
-                                        TSP_ACK, 0, htp->noanswer);
-                       if (!answer) {
-                               syslog(LOG_ERR, "error in election from %s",
-                                      htp->name);
-                       }
-                       break;
-
-               case TSP_SLAVEUP:
-                       addmach(resp->tsp_name, &from,fromnet);
-                       break;
-
-               case TSP_SETDATE:
-               case TSP_SETDATEREQ:
-                       break;
-
-               default:
-                       if (trace) {
-                               fprintf(fd, "candidate: ");
-                               print(resp, &from);
-                       }
-                       break;
-               }
-       }
-}
diff --git a/usr.sbin/timed/timed/cksum.c b/usr.sbin/timed/timed/cksum.c
deleted file mode 100644 (file)
index 107857e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)cksum.c 8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/cksum.c,v 1.3 1999/08/28 01:20:17 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timed/cksum.c,v 1.4 2004/09/05 02:09:24 dillon Exp $
- */
-
-#include <sys/types.h>
-#include "extern.h"
-
-/*
- *                     I N _ C K S U M
- *
- * Checksum routine for Internet Protocol family headers (C Version)
- *
- * There is no profit in a specialized version of the checksum
- * function for any machine where int's are 32 bits and shorts are 16.
- *
- * All timed packets are smaller than 32K shorts, so there is no need to
- * worry about carries except at the end.
- */
-int
-in_cksum(u_short *addr, int len)
-{
-       int nleft = len;
-       u_short *w = addr;
-       u_short answer;
-       int sum = 0;
-
-       /*
-        *  Our algorithm is simple, using a 32 bit accumulator (sum),
-        *  we add sequential 16 bit words to it, and at the end, fold
-        *  back all the carry bits from the top 16 bits into the lower
-        *  16 bits.
-        */
-       while( nleft > 1 )  {
-               sum += *w++;
-               nleft -= 2;
-       }
-
-       /* mop up an odd byte, if necessary */
-       if( nleft == 1 )
-               sum += (*(u_char *)w) << 8;
-
-       /*
-        * add back carry outs from top 16 bits to low 16 bits
-        */
-       sum = (sum >> 16) + (sum & 0xffff);     /* add hi 16 to low 16 */
-       sum += (sum >> 16);                     /* add carry */
-       answer = ~sum;                          /* truncate to 16 bits */
-       return (answer);
-}
diff --git a/usr.sbin/timed/timed/correct.c b/usr.sbin/timed/timed/correct.c
deleted file mode 100644 (file)
index e53651d..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)correct.c       8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/correct.c,v 1.4 1999/08/28 01:20:17 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timed/correct.c,v 1.8 2004/09/05 02:20:15 dillon Exp $
- */
-
-#include "globals.h"
-#include <math.h>
-#include <sys/types.h>
-#include <sys/times.h>
-
-static void adjclock(struct timeval *);
-
-/*
- * sends to the slaves the corrections for their clocks after fixing our
- * own
- */
-void
-correct(long avdelta)
-{
-       struct hosttbl *htp;
-       int corr;
-       struct timeval adjlocal;
-       struct tsp to;
-       struct tsp *answer;
-
-       mstotvround(&adjlocal, avdelta);
-
-       for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-               if (htp->delta != HOSTDOWN)  {
-                       corr = avdelta - htp->delta;
-/* If the other machine is off in the weeds, set its time directly.
- *     If a slave gets the wrong day, the original code would simply
- *     fix the minutes.  If you fix a network partition, you can get
- *     into such situations.
- */
-                       if (htp->need_set
-                           || corr >= MAXADJ*1000
-                           || corr <= -MAXADJ*1000) {
-                               htp->need_set = 0;
-                               gettimeofday(&to.tsp_time,0);
-                               timevaladd(&to.tsp_time, &adjlocal);
-                               to.tsp_type = TSP_SETTIME;
-                       } else {
-                               mstotvround(&to.tsp_time, corr);
-                               to.tsp_type = TSP_ADJTIME;
-                       }
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-                       answer = acksend(&to, &htp->addr, htp->name,
-                                        TSP_ACK, 0, 0);
-                       if (!answer) {
-                               htp->delta = HOSTDOWN;
-                               syslog(LOG_WARNING,
-                                      "no reply to time correction from %s",
-                                      htp->name);
-                               if (++htp->noanswer >= LOSTHOST) {
-                                       if (trace) {
-                                               fprintf(fd,
-                                            "purging %s for not answering\n",
-                                                       htp->name);
-                                               fflush(fd);
-                                       }
-                                       htp = remmach(htp);
-                               }
-                       }
-               }
-       }
-
-       /*
-        * adjust our own clock now that we are not sending it out
-        */
-       adjclock(&adjlocal);
-}
-
-
-static void
-adjclock(struct timeval *corr)
-{
-       static int passes = 0;
-       static int smoother = 0;
-       long delta;                     /* adjustment in usec */
-       long ndelta;
-       struct timeval now;
-       struct timeval adj;
-
-       if (!timerisset(corr))
-               return;
-
-       adj = *corr;
-       if (adj.tv_sec < MAXADJ && adj.tv_sec > - MAXADJ) {
-               delta = adj.tv_sec*1000000 + adj.tv_usec;
-               /* If the correction is less than the minimum round
-                *      trip time for an ICMP packet, and thus
-                *      less than the likely error in the measurement,
-                *      do not do the entire correction.  Do half
-                *      or a quarter of it.
-                */
-
-               if (delta > -MIN_ROUND*1000
-                   && delta < MIN_ROUND*1000) {
-                       if (smoother <= 4)
-                               smoother++;
-                       ndelta = delta >> smoother;
-                       if (trace)
-                               fprintf(fd,
-                                       "trimming delta %ld usec to %ld\n",
-                                       delta, ndelta);
-                       adj.tv_usec = ndelta;
-                       adj.tv_sec = 0;
-               } else if (smoother > 0) {
-                       smoother--;
-               }
-               if (0 > adjtime(corr, 0)) {
-                       syslog(LOG_ERR, "adjtime: %m");
-               }
-               if (passes > 1
-                   && (delta < -BIG_ADJ || delta > BIG_ADJ)) {
-                       smoother = 0;
-                       passes = 0;
-                       syslog(LOG_WARNING,
-                              "large time adjustment of %+.3f sec",
-                              delta/1000000.0);
-               }
-       } else {
-               syslog(LOG_WARNING,
-                      "clock correction %ld sec too large to adjust",
-                      adj.tv_sec);
-               gettimeofday(&now, 0);
-               timevaladd(&now, corr);
-               if (settimeofday(&now, 0) < 0)
-                       syslog(LOG_ERR, "settimeofday: %m");
-       }
-}
-
-
-/* adjust the time in a message by the time it
- *     spent in the queue
- */
-void
-adj_msg_time(struct tsp *msg, struct timeval *now)
-{
-       msg->tsp_time.tv_sec += (now->tv_sec - from_when.tv_sec);
-       msg->tsp_time.tv_usec += (now->tv_usec - from_when.tv_usec);
-
-       while (msg->tsp_time.tv_usec < 0) {
-               msg->tsp_time.tv_sec--;
-               msg->tsp_time.tv_usec += 1000000;
-       }
-       while (msg->tsp_time.tv_usec >= 1000000) {
-               msg->tsp_time.tv_sec++;
-               msg->tsp_time.tv_usec -= 1000000;
-       }
-}
diff --git a/usr.sbin/timed/timed/extern.h b/usr.sbin/timed/timed/extern.h
deleted file mode 100644 (file)
index 42e70f0..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)extern.h    8.1 (Berkeley) 6/6/93
- */
-
-struct hosttbl;
-struct netinfo;
-struct sockaddr_in;
-struct timeval;
-struct tsp;
-
-struct hosttbl *addmach(char *, struct sockaddr_in *, struct netinfo *);
-struct hosttbl *findhost(char *);
-struct hosttbl *remmach(struct hosttbl *);
-
-struct tsp *readmsg(int,
-           char *, struct timeval *, struct netinfo *);
-struct tsp *acksend(struct tsp *,
-           struct sockaddr_in *, char *, int, struct netinfo *, int);
-
-void    addnetname(char *);
-void    adj_msg_time(struct tsp *, struct timeval *);
-void    bytehostorder(struct tsp *);
-void    bytenetorder(struct tsp *);
-void    byteorder(struct tsp *);
-long    casual(long, long);
-int     cksum(u_short *, int);
-void    correct(long);
-char   *date(void);
-void    doquit(struct tsp *);
-int     election(struct netinfo *);
-void    get_goodgroup(int);
-int     good_host_name(char *);
-void    ignoreack(void);
-int     in_cksum(u_short *, int);
-void    lookformaster(struct netinfo *);
-void    makeslave(struct netinfo *);
-void    master(void) __dead2;
-void    masterack(void);
-void    masterup(struct netinfo *);
-int     measure(u_long, u_long, char *, struct sockaddr_in *, int);
-void    msterup(struct netinfo *);
-void    mstotvround(struct timeval *, long);
-long    networkdelta(void);
-void    newslave(struct tsp *);
-void    print(struct tsp *, struct sockaddr_in *);
-void    prthp(clock_t);
-void    rmnetmachs(struct netinfo *);
-void    setstatus(void);
-void    slave(void) __dead2;
-void    slaveack(void);
-void    spreadtime(void);
-void    suppress(struct sockaddr_in *, char *, struct netinfo *);
-void    synch(long);
-void    timevaladd(struct timeval *, struct timeval *);
-void    timevalsub(struct timeval *, struct timeval *, struct timeval *);
-void    traceoff(char *);
-void    traceon(void);
-void    xmit(int, u_int, struct sockaddr_in *);
diff --git a/usr.sbin/timed/timed/globals.h b/usr.sbin/timed/timed/globals.h
deleted file mode 100644 (file)
index e54346a..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)globals.h   8.1 (Berkeley) 6/6/93
- *     $FreeBSD: src/usr.sbin/timed/timed/globals.h,v 1.5 2000/03/03 13:01:56 shin Exp $
- */
-
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <err.h>
-#include <errno.h>
-#include <limits.h>
-#include <netdb.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-#include <libutil.h>
-
-#include <protocols/timed.h>
-
-#define        SECHR   (60*60)
-#define        SECDAY  (24*SECHR)
-
-extern int sock;
-
-/* Best expected round trip for a measurement.
- * This is essentially the number of milliseconds per CPU tick (CLK_TCK?).
- * All delays shorter than this are usually reported as 0.
- */
-#define MIN_ROUND ((1000-1)/CLK_TCK)
-
-
-#define SAMPLEINTVL    240             /* synch() freq for master in sec */
-#define        MAXADJ          20              /* max adjtime() correction in sec */
-
-#define MAX_TRIM       3000000         /* max drift in nsec/sec, 0.3% */
-#define BIG_ADJ                (MAX_TRIM/1000*SAMPLEINTVL*2)   /* max good adj */
-
-#define MINTOUT                360             /* election delays, 6-15 minutes */
-#define MAXTOUT                900
-
-#define BAD_STATUS     (-1)
-#define GOOD           1
-#define UNREACHABLE    2
-#define NONSTDTIME     3
-#define HOSTDOWN       0x7fffffff
-
-#define OFF            0
-#define ON             1
-
-#define MAX_HOPCNT     10              /* max value for tsp_hpcnt */
-
-#define LOSTHOST       3               /* forget after this many failures */
-
-#define VALID_RANGE (MAXADJ*1000)      /* good times in milliseconds */
-#define GOOD_RANGE (MIN_ROUND*2)
-#define VGOOD_RANGE (MIN_ROUND-1)
-
-
-/*
- * Global and per-network states.
- */
-#define NOMASTER       0               /* no good master */
-#define SLAVE          1
-#define MASTER         2
-#define IGNORE         4
-#define ALL            (SLAVE|MASTER|IGNORE)
-#define SUBMASTER      (SLAVE|MASTER)
-
-#define NHOSTS         1013            /* max of hosts controlled by timed
-                                        * This must be a prime number.
-                                        */
-struct hosttbl {
-       struct  hosttbl *h_bak;         /* hash chain */
-       struct  hosttbl *h_fwd;
-       struct  hosttbl *l_bak;         /* "sequential" list */
-       struct  hosttbl *l_fwd;
-       struct  netinfo *ntp;
-       struct  sockaddr_in addr;
-       char    name[MAXHOSTNAMELEN];
-       u_char  head;                   /* 1=head of hash chain */
-       u_char  good;                   /* 0=trusted host, for averaging */
-       u_char  noanswer;               /* count of failures to answer */
-       u_char  need_set;               /* need a SETTIME */
-       u_short seq;
-       long    delta;
-};
-
-/* closed hash table with internal chaining */
-extern struct hosttbl hosttbl[NHOSTS+1];
-#define self hosttbl[0]
-#define hostname (self.name)
-
-
-struct netinfo {
-       struct  netinfo *next;
-       struct  in_addr net;
-       u_int32_t       mask;
-       struct  in_addr my_addr;
-       struct  sockaddr_in dest_addr;  /* broadcast addr or point-point */
-       long    status;
-       struct timeval slvwait;         /* delay before sending our time */
-       int     quit_count;             /* recent QUITs */
-};
-
-#include "extern.h"
-
-#define tvtomsround(tv) ((tv).tv_sec*1000 + ((tv).tv_usec + 500)/1000)
-
-extern struct netinfo *nettab;
-extern int status;
-extern int trace;
-extern int sock;
-extern struct sockaddr_in from;
-extern struct timeval from_when;       /* when the last msg arrived */
-extern u_short sequence;               /* TSP message sequence number */
-extern struct netinfo *fromnet, *slavenet;
-extern FILE *fd;
-extern long delay1, delay2;
-extern int nslavenets;                 /* nets were I could be a slave */
-extern int nmasternets;                        /* nets were I could be a master */
-extern int nignorednets;               /* ignored nets */
-extern int nnets;                      /* nets I am connected to */
-
-
-#define trace_msg(msg)         {if (trace) fprintf(fd, msg);}
-
-#define trace_sendto_err(addr) {                                       \
-       int st_errno = errno;                                           \
-       syslog(LOG_ERR, "%s %d: sendto %s: %m",                         \
-               __FILE__, __LINE__, inet_ntoa(addr));                   \
-       if (trace)                                                      \
-               fprintf(fd, "%s %d: sendto %s: %d", __FILE__, __LINE__, \
-                       inet_ntoa(addr), st_errno);                     \
-}
-
-
-# define max(a,b)      (a<b ? b : a)
-# define min(a,b)      (a>b ? b : a)
diff --git a/usr.sbin/timed/timed/master.c b/usr.sbin/timed/timed/master.c
deleted file mode 100644 (file)
index 8e3391a..0000000
+++ /dev/null
@@ -1,829 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)master.c        8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/master.c,v 1.6 1999/08/28 01:20:17 peter Exp $
- */
-
-#include "globals.h"
-#include <sys/file.h>
-#include <sys/types.h>
-#include <sys/times.h>
-#include <setjmp.h>
-#include <utmp.h>
-#include "pathnames.h"
-
-extern int measure_delta;
-extern jmp_buf jmpenv;
-extern int Mflag;
-extern int justquit;
-
-static int dictate;
-static int slvcount;                   /* slaves listening to our clock */
-
-static void mchgdate(struct tsp *);
-
-/*
- * The main function of `master' is to periodically compute the differences
- * (deltas) between its clock and the clocks of the slaves, to compute the
- * network average delta, and to send to the slaves the differences between
- * their individual deltas and the network delta.
- * While waiting, it receives messages from the slaves (i.e. requests for
- * master's name, remote requests to set the network time, ...), and
- * takes the appropriate action.
- */
-void
-master(void)
-{
-       struct hosttbl *htp;
-       long pollingtime;
-#define POLLRATE 4
-       int polls;
-       struct timeval wait, ntime;
-       time_t tsp_time_sec;
-       struct tsp *msg, *answer, to;
-       char newdate[32];
-       struct sockaddr_in taddr;
-       char tname[MAXHOSTNAMELEN];
-       struct netinfo *ntp;
-       int i;
-
-       syslog(LOG_NOTICE, "This machine is master");
-       if (trace)
-               fprintf(fd, "This machine is master\n");
-       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-               if (ntp->status == MASTER)
-                       masterup(ntp);
-       }
-       gettimeofday(&ntime, 0);
-       pollingtime = ntime.tv_sec+3;
-       if (justquit)
-               polls = 0;
-       else
-               polls = POLLRATE-1;
-
-/* Process all outstanding messages before spending the long time necessary
- *     to update all timers.
- */
-loop:
-       gettimeofday(&ntime, 0);
-       wait.tv_sec = pollingtime - ntime.tv_sec;
-       if (wait.tv_sec < 0)
-               wait.tv_sec = 0;
-       wait.tv_usec = 0;
-       msg = readmsg(TSP_ANY, ANYADDR, &wait, 0);
-       if (!msg) {
-               gettimeofday(&ntime, 0);
-               if (ntime.tv_sec >= pollingtime) {
-                       pollingtime = ntime.tv_sec + SAMPLEINTVL;
-                       get_goodgroup(0);
-
-/* If a bogus master told us to quit, we can have decided to ignore a
- * network.  Therefore, periodically try to take over everything.
- */
-                       polls = (polls + 1) % POLLRATE;
-                       if (0 == polls && nignorednets > 0) {
-                               trace_msg("Looking for nets to re-master\n");
-                               for (ntp = nettab; ntp; ntp = ntp->next) {
-                                       if (ntp->status == IGNORE
-                                           || ntp->status == NOMASTER) {
-                                               lookformaster(ntp);
-                                               if (ntp->status == MASTER) {
-                                                       masterup(ntp);
-                                                       polls = POLLRATE-1;
-                                               }
-                                       }
-                                       if (ntp->status == MASTER
-                                           && --ntp->quit_count < 0)
-                                               ntp->quit_count = 0;
-                               }
-                               if (polls != 0)
-                                       setstatus();
-                       }
-
-                       synch(0L);
-
-                       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                               to.tsp_type = TSP_LOOP;
-                               to.tsp_vers = TSPVERSION;
-                               to.tsp_seq = sequence++;
-                               to.tsp_hopcnt = MAX_HOPCNT;
-                               strlcpy(to.tsp_name, hostname, 
-                                       sizeof(to.tsp_name));
-                               bytenetorder(&to);
-                               if (sendto(sock, (char *)&to,
-                                          sizeof(struct tsp), 0,
-                                          (struct sockaddr*)&ntp->dest_addr,
-                                          sizeof(ntp->dest_addr)) < 0) {
-                                  trace_sendto_err(ntp->dest_addr.sin_addr);
-                               }
-                       }
-               }
-
-
-       } else {
-               switch (msg->tsp_type) {
-
-               case TSP_MASTERREQ:
-                       break;
-
-               case TSP_SLAVEUP:
-                       newslave(msg);
-                       break;
-
-               case TSP_SETDATE:
-                       /*
-                        * XXX check to see it is from ourself
-                        */
-                       tsp_time_sec = msg->tsp_time.tv_sec;
-                       strlcpy(newdate, ctime(&tsp_time_sec), sizeof(newdate));
-                       if (!good_host_name(msg->tsp_name)) {
-                               syslog(LOG_NOTICE,
-                                      "attempted date change by %s to %s",
-                                      msg->tsp_name, newdate);
-                               spreadtime();
-                               break;
-                       }
-
-                       mchgdate(msg);
-                       gettimeofday(&ntime, 0);
-                       pollingtime = ntime.tv_sec + SAMPLEINTVL;
-                       break;
-
-               case TSP_SETDATEREQ:
-                       if (!fromnet || fromnet->status != MASTER)
-                               break;
-                       tsp_time_sec = msg->tsp_time.tv_sec;
-                       strlcpy(newdate, ctime(&tsp_time_sec), sizeof(newdate));
-                       htp = findhost(msg->tsp_name);
-                       if (htp == NULL) {
-                               syslog(LOG_ERR,
-                                      "attempted SET DATEREQ by uncontrolled %s to %s",
-                                      msg->tsp_name, newdate);
-                               break;
-                       }
-                       if (htp->seq == msg->tsp_seq)
-                               break;
-                       htp->seq = msg->tsp_seq;
-                       if (!htp->good) {
-                               syslog(LOG_NOTICE,
-                               "attempted SET DATEREQ by untrusted %s to %s",
-                                      msg->tsp_name, newdate);
-                               spreadtime();
-                               break;
-                       }
-
-                       mchgdate(msg);
-                       gettimeofday(&ntime, 0);
-                       pollingtime = ntime.tv_sec + SAMPLEINTVL;
-                       break;
-
-               case TSP_MSITE:
-                       xmit(TSP_ACK, msg->tsp_seq, &from);
-                       break;
-
-               case TSP_MSITEREQ:
-                       break;
-
-               case TSP_TRACEON:
-                       traceon();
-                       break;
-
-               case TSP_TRACEOFF:
-                       traceoff("Tracing ended at %s\n");
-                       break;
-
-               case TSP_ELECTION:
-                       if (!fromnet)
-                               break;
-                       if (fromnet->status == MASTER) {
-                               pollingtime = 0;
-                               addmach(msg->tsp_name, &from,fromnet);
-                       }
-                       taddr = from;
-                       strlcpy(tname, msg->tsp_name, sizeof(tname));
-                       to.tsp_type = TSP_QUIT;
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-                       answer = acksend(&to, &taddr, tname,
-                                        TSP_ACK, 0, 1);
-                       if (answer == NULL) {
-                               syslog(LOG_ERR, "election error by %s",
-                                      tname);
-                       }
-                       break;
-
-               case TSP_CONFLICT:
-                       /*
-                        * After a network partition, there can be
-                        * more than one master: the first slave to
-                        * come up will notify here the situation.
-                        */
-                       if (!fromnet || fromnet->status != MASTER)
-                               break;
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-
-                       /* The other master often gets into the same state,
-                        * with boring results if we stay at it forever.
-                        */
-                       ntp = fromnet;  /* (acksend() can leave fromnet=0 */
-                       for (i = 0; i < 3; i++) {
-                               to.tsp_type = TSP_RESOLVE;
-                               strlcpy(to.tsp_name, hostname, 
-                                       sizeof(to.tsp_name));
-                               answer = acksend(&to, &ntp->dest_addr,
-                                                ANYADDR, TSP_MASTERACK,
-                                                ntp, 0);
-                               if (!answer)
-                                       break;
-                               htp = addmach(answer->tsp_name,&from,ntp);
-                               to.tsp_type = TSP_QUIT;
-                               msg = acksend(&to, &htp->addr, htp->name,
-                                             TSP_ACK, 0, htp->noanswer);
-                               if (msg == NULL) {
-                                       syslog(LOG_ERR,
-                                   "no response from %s to CONFLICT-QUIT",
-                                              htp->name);
-                               }
-                       }
-                       masterup(ntp);
-                       pollingtime = 0;
-                       break;
-
-               case TSP_RESOLVE:
-                       if (!fromnet || fromnet->status != MASTER)
-                               break;
-                       /*
-                        * do not want to call synch() while waiting
-                        * to be killed!
-                        */
-                       gettimeofday(&ntime, NULL);
-                       pollingtime = ntime.tv_sec + SAMPLEINTVL;
-                       break;
-
-               case TSP_QUIT:
-                       doquit(msg);            /* become a slave */
-                       break;
-
-               case TSP_LOOP:
-                       if (!fromnet || fromnet->status != MASTER
-                           || !strcmp(msg->tsp_name, hostname))
-                               break;
-                       /*
-                        * We should not have received this from a net
-                        * we are master on.  There must be two masters.
-                        */
-                       htp = addmach(msg->tsp_name, &from,fromnet);
-                       to.tsp_type = TSP_QUIT;
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-                       answer = acksend(&to, &htp->addr, htp->name,
-                                        TSP_ACK, 0, 1);
-                       if (!answer) {
-                               syslog(LOG_WARNING,
-                               "loop breakage: no reply from %s=%s to QUIT",
-                                   htp->name, inet_ntoa(htp->addr.sin_addr));
-                               remmach(htp);
-                       }
-
-               case TSP_TEST:
-                       if (trace) {
-                               fprintf(fd,
-               "\tnets = %d, masters = %d, slaves = %d, ignored = %d\n",
-               nnets, nmasternets, nslavenets, nignorednets);
-                               setstatus();
-                       }
-                       pollingtime = 0;
-                       polls = POLLRATE-1;
-                       break;
-
-               default:
-                       if (trace) {
-                               fprintf(fd, "garbage message: ");
-                               print(msg, &from);
-                       }
-                       break;
-               }
-       }
-       goto loop;
-}
-
-
-/*
- * change the system date on the master
- */
-static void
-mchgdate(struct tsp *msg)
-{
-       char tname[MAXHOSTNAMELEN];
-       char olddate[32];
-       struct timeval otime, ntime;
-
-       strlcpy(tname, msg->tsp_name, sizeof(tname));
-
-       xmit(TSP_DATEACK, msg->tsp_seq, &from);
-
-       strlcpy(olddate, date(), sizeof(olddate));
-
-       /* adjust time for residence on the queue */
-       gettimeofday(&otime, 0);
-       adj_msg_time(msg,&otime);
-
-       timevalsub(&ntime, &msg->tsp_time, &otime);
-       if (ntime.tv_sec < MAXADJ && ntime.tv_sec > -MAXADJ) {
-               /*
-                * do not change the clock if we can adjust it
-                */
-               dictate = 3;
-               synch(tvtomsround(ntime));
-       } else {
-               logwtmp("|", "date", "");
-               settimeofday(&msg->tsp_time, 0);
-               logwtmp("{", "date", "");
-               spreadtime();
-       }
-
-       syslog(LOG_NOTICE, "date changed by %s from %s",
-              tname, olddate);
-}
-
-
-/*
- * synchronize all of the slaves
- */
-void
-synch(long mydelta)
-{
-       struct hosttbl *htp;
-       int measure_status;
-       struct timeval check, stop, wait;
-
-       if (slvcount > 0) {
-               if (trace)
-                       fprintf(fd, "measurements starting at %s\n", date());
-               gettimeofday(&check, 0);
-               for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-                       if (htp->noanswer != 0) {
-                               measure_status = measure(500, 100,
-                                                        htp->name,
-                                                        &htp->addr,0);
-                       } else {
-                               measure_status = measure(3000, 100,
-                                                        htp->name,
-                                                        &htp->addr,0);
-                       }
-                       if (measure_status != GOOD) {
-                               /* The slave did not respond.  We have
-                                * just wasted lots of time on it.
-                                */
-                               htp->delta = HOSTDOWN;
-                               if (++htp->noanswer >= LOSTHOST) {
-                                       if (trace) {
-                                               fprintf(fd,
-                                       "purging %s for not answering ICMP\n",
-                                                       htp->name);
-                                               fflush(fd);
-                                       }
-                                       htp = remmach(htp);
-                               }
-                       } else {
-                               htp->delta = measure_delta;
-                       }
-                       gettimeofday(&stop, 0);
-                       timevalsub(&stop, &stop, &check);
-                       if (stop.tv_sec >= 1) {
-                               if (trace)
-                                       fflush(fd);
-                               /*
-                                * ack messages periodically
-                                */
-                               wait.tv_sec = 0;
-                               wait.tv_usec = 0;
-                               if (0 != readmsg(TSP_TRACEON,ANYADDR,
-                                                &wait,0))
-                                       traceon();
-                               gettimeofday(&check, 0);
-                       }
-               }
-               if (trace)
-                       fprintf(fd, "measurements finished at %s\n", date());
-       }
-       if (!(status & SLAVE)) {
-               if (!dictate) {
-                       mydelta = networkdelta();
-               } else {
-                       dictate--;
-               }
-       }
-       if (trace && (mydelta != 0 || (status & SLAVE)))
-               fprintf(fd,"local correction of %ld ms.\n", mydelta);
-       correct(mydelta);
-}
-
-/*
- * sends the time to each slave after the master
- * has received the command to set the network time
- */
-void
-spreadtime(void)
-{
-       struct hosttbl *htp;
-       struct tsp to;
-       struct tsp *answer;
-
-/* Do not listen to the consensus after forcing the time.  This is because
- *     the consensus takes a while to reach the time we are dictating.
- */
-       dictate = 2;
-       for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-               to.tsp_type = TSP_SETTIME;
-               strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-               gettimeofday(&to.tsp_time, 0);
-               answer = acksend(&to, &htp->addr, htp->name,
-                                TSP_ACK, 0, htp->noanswer);
-               if (answer == NULL) {
-                       /* We client does not respond, then we have
-                        * just wasted lots of time on it.
-                        */
-                       syslog(LOG_WARNING,
-                              "no reply to SETTIME from %s", htp->name);
-                       if (++htp->noanswer >= LOSTHOST) {
-                               if (trace) {
-                                       fprintf(fd,
-                                            "purging %s for not answering",
-                                               htp->name);
-                                       fflush(fd);
-                               }
-                               htp = remmach(htp);
-                       }
-               }
-       }
-}
-
-void
-prthp(clock_t delta)
-{
-       static time_t next_time;
-       time_t this_time;
-       struct tms tm;
-       struct hosttbl *htp;
-       int length, l;
-       int i;
-
-       if (!fd)                        /* quit if tracing already off */
-               return;
-
-       this_time = times(&tm);
-       if (this_time + (time_t)delta < next_time)
-               return;
-       next_time = this_time + CLK_TCK;
-
-       fprintf(fd, "host table: %d entries at %s\n", slvcount, date());
-       htp = self.l_fwd;
-       length = 1;
-       for (i = 1; i <= slvcount; i++, htp = htp->l_fwd) {
-               l = strlen(htp->name) + 1;
-               if (length+l >= 80) {
-                       fprintf(fd, "\n");
-                       length = 0;
-               }
-               length += l;
-               fprintf(fd, " %s", htp->name);
-       }
-       fprintf(fd, "\n");
-}
-
-
-static struct hosttbl *newhost_hash;
-static struct hosttbl *lasthfree = &hosttbl[0];
-
-
-struct hosttbl *                       /* answer or 0 */
-findhost(char *name)
-{
-       int i, j;
-       struct hosttbl *htp;
-       char *p;
-
-       j= 0;
-       for (p = name, i = 0; i < 8 && *p != '\0'; i++, p++)
-               j = (j << 2) ^ *p;
-       newhost_hash = &hosttbl[j % NHOSTS];
-
-       htp = newhost_hash;
-       if (htp->name[0] == '\0')
-               return(0);
-       do {
-               if (!strcmp(name, htp->name))
-                       return(htp);
-               htp = htp->h_fwd;
-       } while (htp != newhost_hash);
-       return(0);
-}
-
-/*
- * add a host to the list of controlled machines if not already there
- */
-struct hosttbl *
-addmach(char *name, struct sockaddr_in *addr, struct netinfo *ntp)
-{
-       struct hosttbl *ret, *p, *b, *f;
-
-       ret = findhost(name);
-       if (ret == NULL) {
-               if (slvcount >= NHOSTS) {
-                       if (trace) {
-                               fprintf(fd, "no more slots in host table\n");
-                               prthp(CLK_TCK);
-                       }
-                       syslog(LOG_ERR, "no more slots in host table");
-                       Mflag = 0;
-                       longjmp(jmpenv, 2); /* give up and be a slave */
-               }
-
-               /* if our home hash slot is occupied, find a free entry
-                * in the hash table
-                */
-               if (newhost_hash->name[0] != '\0') {
-                       do {
-                               ret = lasthfree;
-                               if (++lasthfree > &hosttbl[NHOSTS])
-                                       lasthfree = &hosttbl[1];
-                       } while (ret->name[0] != '\0');
-
-                       if (!newhost_hash->head) {
-                               /* Move an interloper using our home.  Use
-                                * scratch pointers in case the new head is
-                                * pointing to itself.
-                                */
-                               f = newhost_hash->h_fwd;
-                               b = newhost_hash->h_bak;
-                               f->h_bak = ret;
-                               b->h_fwd = ret;
-                               f = newhost_hash->l_fwd;
-                               b = newhost_hash->l_bak;
-                               f->l_bak = ret;
-                               b->l_fwd = ret;
-                               bcopy(newhost_hash,ret,sizeof(*ret));
-                               ret = newhost_hash;
-                               ret->head = 1;
-                               ret->h_fwd = ret;
-                               ret->h_bak = ret;
-                       } else {
-                               /* link to an existing chain in our home
-                                */
-                               ret->head = 0;
-                               p = newhost_hash->h_bak;
-                               ret->h_fwd = newhost_hash;
-                               ret->h_bak = p;
-                               p->h_fwd = ret;
-                               newhost_hash->h_bak = ret;
-                       }
-               } else {
-                       ret = newhost_hash;
-                       ret->head = 1;
-                       ret->h_fwd = ret;
-                       ret->h_bak = ret;
-               }
-               ret->addr = *addr;
-               ret->ntp = ntp;
-               strlcpy(ret->name, name, sizeof(ret->name));
-               ret->good = good_host_name(name);
-               ret->l_fwd = &self;
-               ret->l_bak = self.l_bak;
-               self.l_bak->l_fwd = ret;
-               self.l_bak = ret;
-               slvcount++;
-
-               ret->noanswer = 0;
-               ret->need_set = 1;
-
-       } else {
-               ret->noanswer = (ret->noanswer != 0);
-       }
-
-       /* need to clear sequence number anyhow */
-       ret->seq = 0;
-       return(ret);
-}
-
-/*
- * remove the machine with the given index in the host table.
- */
-struct hosttbl *
-remmach(struct hosttbl *htp)
-{
-       struct hosttbl *lprv, *hnxt, *f, *b;
-
-       if (trace)
-               fprintf(fd, "remove %s\n", htp->name);
-
-       /* get out of the lists */
-       htp->l_fwd->l_bak = lprv = htp->l_bak;
-       htp->l_bak->l_fwd = htp->l_fwd;
-       htp->h_fwd->h_bak = htp->h_bak;
-       htp->h_bak->h_fwd = hnxt = htp->h_fwd;
-
-       /* If we are in the home slot, pull up the chain */
-       if (htp->head && hnxt != htp) {
-               if (lprv == hnxt)
-                       lprv = htp;
-
-               /* Use scratch pointers in case the new head is pointing to
-                * itself.
-                */
-               f = hnxt->h_fwd;
-               b = hnxt->h_bak;
-               f->h_bak = htp;
-               b->h_fwd = htp;
-               f = hnxt->l_fwd;
-               b = hnxt->l_bak;
-               f->l_bak = htp;
-               b->l_fwd = htp;
-               hnxt->head = 1;
-               bcopy(hnxt, htp, sizeof(*htp));
-               lasthfree = hnxt;
-       } else {
-               lasthfree = htp;
-       }
-
-       lasthfree->name[0] = '\0';
-       lasthfree->h_fwd = 0;
-       lasthfree->l_fwd = 0;
-       slvcount--;
-
-       return lprv;
-}
-
-
-/*
- * Remove all the machines from the host table that exist on the given
- * network.  This is called when a master transitions to a slave on a
- * given network.
- */
-void
-rmnetmachs(struct netinfo *ntp)
-{
-       struct hosttbl *htp;
-
-       if (trace)
-               prthp(CLK_TCK);
-       for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-               if (ntp == htp->ntp)
-                       htp = remmach(htp);
-       }
-       if (trace)
-               prthp(CLK_TCK);
-}
-
-void
-masterup(struct netinfo *net)
-{
-
-       xmit(TSP_MASTERUP, 0, &net->dest_addr);
-
-       /*
-        * Do not tell new slaves our time for a while.  This ensures
-        * we do not tell them to start using our time, before we have
-        * found a good master.
-        */
-       gettimeofday(&net->slvwait, 0);
-}
-
-void
-newslave(struct tsp *msg)
-{
-       struct hosttbl *htp;
-       struct tsp *answer, to;
-       struct timeval now;
-
-       if (!fromnet || fromnet->status != MASTER)
-               return;
-
-       htp = addmach(msg->tsp_name, &from,fromnet);
-       htp->seq = msg->tsp_seq;
-       if (trace)
-               prthp(0);
-
-       /*
-        * If we are stable, send our time to the slave.
-        * Do not go crazy if the date has been changed.
-        */
-       gettimeofday(&now, 0);
-       if (now.tv_sec >= fromnet->slvwait.tv_sec+3
-           || now.tv_sec < fromnet->slvwait.tv_sec) {
-               to.tsp_type = TSP_SETTIME;
-               strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-               gettimeofday(&to.tsp_time, 0);
-               answer = acksend(&to, &htp->addr,
-                                htp->name, TSP_ACK,
-                                0, htp->noanswer);
-               if (answer) {
-                       htp->need_set = 0;
-               } else {
-                       syslog(LOG_WARNING,
-                              "no reply to initial SETTIME from %s",
-                              htp->name);
-                       htp->noanswer = LOSTHOST;
-               }
-       }
-}
-
-
-/*
- * react to a TSP_QUIT:
- */
-void
-doquit(struct tsp *msg)
-{
-
-       if (fromnet->status == MASTER) {
-               if (!good_host_name(msg->tsp_name)) {
-                       if (fromnet->quit_count <= 0) {
-                               syslog(LOG_NOTICE,"untrusted %s told us QUIT",
-                                      msg->tsp_name);
-                               suppress(&from, msg->tsp_name, fromnet);
-                               fromnet->quit_count = 1;
-                               return;
-                       }
-                       syslog(LOG_NOTICE, "untrusted %s told us QUIT twice",
-                              msg->tsp_name);
-                       fromnet->quit_count = 2;
-                       fromnet->status = NOMASTER;
-               } else {
-                       fromnet->status = SLAVE;
-               }
-               rmnetmachs(fromnet);
-               longjmp(jmpenv, 2);             /* give up and be a slave */
-
-       } else {
-               if (!good_host_name(msg->tsp_name)) {
-                       syslog(LOG_NOTICE, "untrusted %s told us QUIT",
-                              msg->tsp_name);
-                       fromnet->quit_count = 2;
-               }
-       }
-}
-
-void
-traceon(void)
-{
-
-       if (!fd) {
-               fd = fopen(_PATH_TIMEDLOG, "w");
-               if (!fd) {
-                       trace = 0;
-                       return;
-               }
-               fprintf(fd,"Tracing started at %s\n", date());
-       }
-       trace = 1;
-       get_goodgroup(1);
-       setstatus();
-       prthp(CLK_TCK);
-}
-
-
-void
-traceoff(char *msg)
-{
-
-       get_goodgroup(1);
-       setstatus();
-       prthp(CLK_TCK);
-       if (trace) {
-               fprintf(fd, msg, date());
-               fclose(fd);
-               fd = 0;
-       }
-#ifdef GPROF
-       moncontrol(0);
-       _mcleanup();
-       moncontrol(1);
-#endif
-       trace = OFF;
-}
-
diff --git a/usr.sbin/timed/timed/measure.c b/usr.sbin/timed/timed/measure.c
deleted file mode 100644 (file)
index 33c41af..0000000
+++ /dev/null
@@ -1,336 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)measure.c       8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/measure.c,v 1.6 1999/08/28 01:20:17 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timed/measure.c,v 1.7 2004/09/05 02:20:15 dillon Exp $
- */
-
-#include "globals.h"
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/ip_icmp.h>
-
-#define MSEC_DAY       (SECDAY*1000)
-
-#define PACKET_IN      1024
-
-#define MSGS           5               /* timestamps to average */
-#define TRIALS         10              /* max # of timestamps sent */
-
-extern int sock_raw;
-
-int measure_delta;
-
-static n_short seqno = 0;
-
-/*
- * Measures the differences between machines' clocks using
- * ICMP timestamp messages.
- */
-int                                    /* status val defined in globals.h */
-measure(u_long maxmsec,                        /* wait this many msec at most */
-       u_long wmsec,                   /* msec to wait for an answer */
-       char *hname, struct sockaddr_in *addr,
-       int printerr)                   /* print complaints on stderr */
-{
-       int length;
-       int measure_status;
-       int rcvcount, trials;
-       int cc, count;
-       fd_set ready;
-       long sendtime, recvtime, histime1, histime2;
-       long idelta, odelta, total;
-       long min_idelta, min_odelta;
-       struct timeval tdone, tcur, ttrans, twait, tout;
-       u_char packet[PACKET_IN], opacket[64];
-       struct icmp *icp = (struct icmp *)packet;
-       struct icmp *oicp = (struct icmp *)opacket;
-       struct ip *ip = (struct ip *)packet;
-
-       min_idelta = min_odelta = 0x7fffffff;
-       measure_status = HOSTDOWN;
-       measure_delta = HOSTDOWN;
-       errno = 0;
-       trials = 0;     /* avoid compiler warning due to goto quit below */
-
-       /* open raw socket used to measure time differences */
-       if (sock_raw < 0) {
-               sock_raw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
-               if (sock_raw < 0)  {
-                       syslog(LOG_ERR, "opening raw socket: %m");
-                       goto quit;
-               }
-       }
-
-
-       /*
-        * empty the icmp input queue
-        */
-       FD_ZERO(&ready);
-       for (;;) {
-               tout.tv_sec = tout.tv_usec = 0;
-               FD_SET(sock_raw, &ready);
-               if (select(sock_raw+1, &ready, 0,0, &tout)) {
-                       length = sizeof(struct sockaddr_in);
-                       cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
-                                     0,&length);
-                       if (cc < 0)
-                               goto quit;
-                       continue;
-               }
-               break;
-       }
-
-       /*
-        * Choose the smallest transmission time in each of the two
-        * directions. Use these two latter quantities to compute the delta
-        * between the two clocks.
-        */
-
-       oicp->icmp_type = ICMP_TSTAMP;
-       oicp->icmp_code = 0;
-       oicp->icmp_id = getpid();
-       oicp->icmp_rtime = 0;
-       oicp->icmp_ttime = 0;
-       oicp->icmp_seq = seqno;
-
-       FD_ZERO(&ready);
-
-       gettimeofday(&tdone, 0);
-       mstotvround(&tout, maxmsec);
-       timevaladd(&tdone, &tout);              /* when we give up */
-
-       mstotvround(&twait, wmsec);
-
-       rcvcount = 0;
-       trials = 0;
-       while (rcvcount < MSGS) {
-               gettimeofday(&tcur, 0);
-
-               /*
-                * keep sending until we have sent the max
-                */
-               if (trials < TRIALS) {
-                       trials++;
-                       oicp->icmp_otime = htonl((tcur.tv_sec % SECDAY) * 1000
-                                                + tcur.tv_usec / 1000);
-                       oicp->icmp_cksum = 0;
-                       oicp->icmp_cksum = in_cksum((u_short*)oicp,
-                                                   sizeof(*oicp));
-
-                       count = sendto(sock_raw, opacket, sizeof(*oicp), 0,
-                                      (struct sockaddr*)addr,
-                                      sizeof(struct sockaddr));
-                       if (count < 0) {
-                               if (measure_status == HOSTDOWN)
-                                       measure_status = UNREACHABLE;
-                               goto quit;
-                       }
-                       ++oicp->icmp_seq;
-
-                       ttrans = tcur;
-                       timevaladd(&ttrans, &twait);
-               } else {
-                       ttrans = tdone;
-               }
-
-               while (rcvcount < trials) {
-                       timevalsub(&tout, &ttrans, &tcur);
-                       if (tout.tv_sec < 0)
-                               tout.tv_sec = 0;
-
-                       FD_SET(sock_raw, &ready);
-                       count = select(sock_raw+1, &ready, NULL, NULL, &tout);
-                       gettimeofday(&tcur, NULL);
-                       if (count <= 0)
-                               break;
-
-                       length = sizeof(struct sockaddr_in);
-                       cc = recvfrom(sock_raw, (char *)packet, PACKET_IN, 0,
-                                     0,&length);
-                       if (cc < 0)
-                               goto quit;
-
-                       /*
-                        * got something.  See if it is ours
-                        */
-                       icp = (struct icmp *)(packet + (ip->ip_hl << 2));
-                       if (cc < (int)sizeof(*ip)
-                           || icp->icmp_type != ICMP_TSTAMPREPLY
-                           || icp->icmp_id != oicp->icmp_id
-                           || icp->icmp_seq < seqno
-                           || icp->icmp_seq >= oicp->icmp_seq)
-                               continue;
-
-
-                       sendtime = ntohl(icp->icmp_otime);
-                       recvtime = ((tcur.tv_sec % SECDAY) * 1000 +
-                                   tcur.tv_usec / 1000);
-
-                       total = recvtime-sendtime;
-                       if (total < 0)  /* do not hassle midnight */
-                               continue;
-
-                       rcvcount++;
-                       histime1 = ntohl(icp->icmp_rtime);
-                       histime2 = ntohl(icp->icmp_ttime);
-                       /*
-                        * a host using a time format different from
-                        * msec. since midnight UT (as per RFC792) should
-                        * set the high order bit of the 32-bit time
-                        * value it transmits.
-                        */
-                       if ((histime1 & 0x80000000) != 0) {
-                               measure_status = NONSTDTIME;
-                               goto quit;
-                       }
-                       measure_status = GOOD;
-
-                       idelta = recvtime-histime2;
-                       odelta = histime1-sendtime;
-
-                       /* do not be confused by midnight */
-                       if (idelta < -MSEC_DAY/2) idelta += MSEC_DAY;
-                       else if (idelta > MSEC_DAY/2) idelta -= MSEC_DAY;
-
-                       if (odelta < -MSEC_DAY/2) odelta += MSEC_DAY;
-                       else if (odelta > MSEC_DAY/2) odelta -= MSEC_DAY;
-
-                       /* save the quantization error so that we can get a
-                        * measurement finer than our system clock.
-                        */
-                       if (total < MIN_ROUND) {
-                               measure_delta = (odelta - idelta)/2;
-                               goto quit;
-                       }
-
-                       if (idelta < min_idelta)
-                               min_idelta = idelta;
-                       if (odelta < min_odelta)
-                               min_odelta = odelta;
-
-                       measure_delta = (min_odelta - min_idelta)/2;
-               }
-
-               if (tcur.tv_sec > tdone.tv_sec
-                   || (tcur.tv_sec == tdone.tv_sec
-                       && tcur.tv_usec >= tdone.tv_usec))
-                       break;
-       }
-
-quit:
-       seqno += TRIALS;                /* allocate our sequence numbers */
-
-       /*
-        * If no answer is received for TRIALS consecutive times,
-        * the machine is assumed to be down
-        */
-       if (measure_status == GOOD) {
-               if (trace) {
-                       fprintf(fd,
-                               "measured delta %4d, %d trials to %-15s %s\n",
-                               measure_delta, trials,
-                               inet_ntoa(addr->sin_addr), hname);
-               }
-       } else if (printerr) {
-               if (errno != 0)
-                       warn("measure %s", hname);
-       } else {
-               if (errno != 0) {
-                       syslog(LOG_ERR, "measure %s: %m", hname);
-               } else {
-                       syslog(LOG_ERR, "measure: %s did not respond", hname);
-               }
-               if (trace) {
-                       fprintf(fd,
-                               "measure: %s failed after %d trials\n",
-                               hname, trials);
-                       fflush(fd);
-               }
-       }
-
-       return(measure_status);
-}
-
-
-
-
-
-/*
- * round a number of milliseconds into a struct timeval
- */
-void
-mstotvround(struct timeval *res, long x)
-{
-
-       if (x < 0)
-               x = -((-x + 3)/5);
-       else
-               x = (x+3)/5;
-       x *= 5;
-
-       res->tv_sec = x/1000;
-       res->tv_usec = (x-res->tv_sec*1000)*1000;
-       if (res->tv_usec < 0) {
-               res->tv_usec += 1000000;
-               res->tv_sec--;
-       }
-}
-
-void
-timevaladd(struct timeval *tv1, struct timeval *tv2)
-{
-
-       tv1->tv_sec += tv2->tv_sec;
-       tv1->tv_usec += tv2->tv_usec;
-       if (tv1->tv_usec >= 1000000) {
-               tv1->tv_sec++;
-               tv1->tv_usec -= 1000000;
-       }
-       if (tv1->tv_usec < 0) {
-               tv1->tv_sec--;
-               tv1->tv_usec += 1000000;
-       }
-}
-
-void
-timevalsub(struct timeval *res, struct timeval *tv1, struct timeval *tv2)
-{
-
-       res->tv_sec = tv1->tv_sec - tv2->tv_sec;
-       res->tv_usec = tv1->tv_usec - tv2->tv_usec;
-       if (res->tv_usec >= 1000000) {
-               res->tv_sec++;
-               res->tv_usec -= 1000000;
-       }
-       if (res->tv_usec < 0) {
-               res->tv_sec--;
-               res->tv_usec += 1000000;
-       }
-}
diff --git a/usr.sbin/timed/timed/networkdelta.c b/usr.sbin/timed/timed/networkdelta.c
deleted file mode 100644 (file)
index 585b5e4..0000000
+++ /dev/null
@@ -1,255 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)networkdelta.c  8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/networkdelta.c,v 1.3.2.1 2000/07/01 01:28:10 ps Exp $
- * $DragonFly: src/usr.sbin/timed/timed/networkdelta.c,v 1.4 2004/03/13 21:08:38 eirikn Exp $
- */
-
-#include "globals.h"
-
-static long median(float, float *, long *, long *, unsigned int);
-
-/*
- * Compute a corrected date.
- *     Compute the median of the reasonable differences.  First compute
- *     the median of all authorized differences, and then compute the
- *     median of all differences that are reasonably close to the first
- *     median.
- *
- * This differs from the original BSD implementation, which looked for
- *     the largest group of machines with essentially the same date.
- *     That assumed that machines with bad clocks would be uniformly
- *     distributed.  Unfortunately, in real life networks, the distribution
- *     of machines is not uniform among models of machines, and the
- *     distribution of errors in clocks tends to be quite consistent
- *     for a given model.  In other words, all model VI Supre Servres
- *     from GoFast Inc. tend to have about the same error.
- *     The original BSD implementation would chose the clock of the
- *     most common model, and discard all others.
- *
- *     Therefore, get best we can do is to try to average over all
- *     of the machines in the network, while discarding "obviously"
- *     bad values.
- */
-long
-networkdelta(void)
-{
-       struct hosttbl *htp;
-       long med;
-       long lodelta, hidelta;
-       long logood, higood;
-       long x[NHOSTS];
-       long *xp;
-       int numdelta;
-       float eps;
-
-       /*
-        * compute the median of the good values
-        */
-       med = 0;
-       numdelta = 1;
-       xp = &x[0];
-       *xp = 0;                        /* account for ourself */
-       for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-               if (htp->good
-                   && htp->noanswer == 0
-                   && htp->delta != HOSTDOWN) {
-                       med += htp->delta;
-                       numdelta++;
-                       *++xp = htp->delta;
-               }
-       }
-
-       /*
-        * If we are the only trusted time keeper, then do not change our
-        * clock.  There may be another time keeping service active.
-        */
-       if (numdelta == 1)
-               return 0;
-
-       med /= numdelta;
-       eps = med - x[0];
-       if (trace)
-               fprintf(fd, "median of %d values starting at %ld is about ",
-                       numdelta, med);
-       med = median(med, &eps, &x[0], xp+1, VALID_RANGE);
-
-       /*
-        * compute the median of all values near the good median
-        */
-       hidelta = med + GOOD_RANGE;
-       lodelta = med - GOOD_RANGE;
-       higood = med + VGOOD_RANGE;
-       logood = med - VGOOD_RANGE;
-       xp = &x[0];
-       htp = &self;
-       do {
-               if (htp->noanswer == 0
-                   && htp->delta >= lodelta
-                   && htp->delta <= hidelta
-                   && (htp->good
-                       || (htp->delta >= logood
-                           && htp->delta <= higood))) {
-                       *xp++ = htp->delta;
-               }
-       } while (&self != (htp = htp->l_fwd));
-
-       if (xp == &x[0]) {
-               if (trace)
-                       fprintf(fd, "nothing close to median %ld\n", med);
-               return med;
-       }
-
-       if (xp == &x[1]) {
-               if (trace)
-                       fprintf(fd, "only value near median is %ld\n", x[0]);
-               return x[0];
-       }
-
-       if (trace)
-               fprintf(fd, "median of %td values starting at %ld is ",
-                       xp-&x[0], med);
-       return median(med, &eps, &x[0], xp, 1);
-}
-
-
-/*
- * compute the median of an array of signed integers, using the idea
- *     in <<Numerical Recipes>>.
- */
-static long
-median(float a,                                /* initial guess for the median */
-       float *eps_ptr,                 /* spacing near the median */
-       long *x, long *xlim,            /* the data */
-       unsigned int gnuf)              /* good enough estimate */
-{
-       long *xptr;
-       float ap = LONG_MAX;            /* bounds on the median */
-       float am = -LONG_MAX;
-       float aa;
-       int npts;                       /* # of points above & below guess */
-       float xp;                       /* closet point above the guess */
-       float xm;                       /* closet point below the guess */
-       float eps;
-       float dum, sum, sumx;
-       int pass;
-#define AMP    1.5                     /* smoothing constants */
-#define AFAC   1.5
-
-       eps = *eps_ptr;
-       if (eps < 1.0) {
-               eps = -eps;
-               if (eps < 1.0)
-                       eps = 1.0;
-       }
-
-       for (pass = 1; ; pass++) {      /* loop over the data */
-               sum = 0.0;
-               sumx = 0.0;
-               npts = 0;
-               xp = LONG_MAX;
-               xm = -LONG_MAX;
-
-               for (xptr = x; xptr != xlim; xptr++) {
-                       float xx = *xptr;
-
-                       dum = xx - a;
-                       if (dum != 0.0) {       /* avoid dividing by 0 */
-                               if (dum > 0.0) {
-                                       npts++;
-                                       if (xx < xp)
-                                               xp = xx;
-                               } else {
-                                       npts--;
-                                       if (xx > xm)
-                                               xm = xx;
-                                       dum = -dum;
-                               }
-                               dum = 1.0/(eps + dum);
-                               sum += dum;
-                               sumx += xx * dum;
-                       }
-               }
-
-               if (ap-am < gnuf || sum == 0) {
-                       if (trace)
-                               fprintf(fd,
-                                  "%ld in %d passes; early out balance=%d\n",
-                                       (long)a, pass, npts);
-                       return a;       /* guess was good enough */
-               }
-
-               aa = (sumx/sum-a)*AMP;
-               if (npts >= 2) {        /* guess was too low */
-                       am = a;
-                       aa = xp + max(0.0, aa);
-                       if (aa > ap)
-                               aa = (a + ap)/2;
-
-               } else if (npts <= -2) {  /* guess was two high */
-                       ap = a;
-                       aa = xm + min(0.0, aa);
-                       if (aa < am)
-                               aa = (a + am)/2;
-
-               } else {
-                       break;          /* got it */
-               }
-
-               if (a == aa) {
-                       if (trace)
-                               fprintf(fd,
-                                 "%ld in %d passes; force out balance=%d\n",
-                                       (long)a, pass, npts);
-                       return a;
-               }
-               eps = AFAC*abs(aa - a);
-               *eps_ptr = eps;
-               a = aa;
-       }
-
-       if (((x - xlim) % 2) != 0) {    /* even number of points? */
-               if (npts == 0)          /* yes, return an average */
-                       a = (xp+xm)/2;
-               else if (npts > 0)
-                       a =  (a+xp)/2;
-               else
-                       a = (xm+a)/2;
-
-       } else  if (npts != 0) {        /* odd number of points */
-               if (npts > 0)
-                       a = xp;
-               else
-                       a = xm;
-       }
-
-       if (trace)
-               fprintf(fd, "%ld in %d passes\n", (long)a, pass);
-       return a;
-}
diff --git a/usr.sbin/timed/timed/pathnames.h b/usr.sbin/timed/timed/pathnames.h
deleted file mode 100644 (file)
index 4521091..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)pathnames.h 8.1 (Berkeley) 6/6/93
- * $DragonFly: src/usr.sbin/timed/timed/pathnames.h,v 1.2 2004/09/05 02:16:48 dillon Exp $
- */
-
-#include <paths.h>
-
-#define        _PATH_MASTERLOG "/var/log/timed.masterlog"
-#define        _PATH_TIMEDLOG  "/var/log/timed.log"
diff --git a/usr.sbin/timed/timed/readmsg.c b/usr.sbin/timed/timed/readmsg.c
deleted file mode 100644 (file)
index efb1a3b..0000000
+++ /dev/null
@@ -1,499 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)readmsg.c       8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/readmsg.c,v 1.5.2.3 2001/08/31 08:02:05 kris Exp $
- */
-
-#include "globals.h"
-
-extern char *tsptype[];
-
-/*
- * LOOKAT checks if the message is of the requested type and comes from
- * the right machine, returning 1 in case of affirmative answer
- */
-#define LOOKAT(msg, mtype, mfrom, netp, froms) \
-       (((mtype) == TSP_ANY || (mtype) == (msg).tsp_type) &&           \
-        ((mfrom) == 0 || !strcmp((mfrom), (msg).tsp_name)) &&          \
-        ((netp) == 0 ||                                                \
-         ((netp)->mask & (froms).sin_addr.s_addr) == (netp)->net.s_addr))
-
-struct timeval rtime, rwait, rtout;
-struct tsp msgin;
-static struct tsplist {
-       struct tsp info;
-       struct timeval when;
-       struct sockaddr_in addr;
-       struct tsplist *p;
-} msgslist;
-struct sockaddr_in from;
-struct netinfo *fromnet;
-struct timeval from_when;
-
-/*
- * `readmsg' returns message `type' sent by `machfrom' if it finds it
- * either in the receive queue, or in a linked list of previously received
- * messages that it maintains.
- * Otherwise it waits to see if the appropriate message arrives within
- * `intvl' seconds. If not, it returns NULL.
- */
-
-struct tsp *
-readmsg(int type, char *machfrom, struct timeval *intvl,
-       struct netinfo *netfrom)
-{
-       int length;
-       fd_set ready;
-       static struct tsplist *head = &msgslist;
-       static struct tsplist *tail = &msgslist;
-       static int msgcnt = 0;
-       struct tsplist *prev;
-       struct netinfo *ntp;
-       struct tsplist *ptr;
-       ssize_t n;
-
-       if (trace) {
-               fprintf(fd, "readmsg: looking for %s from %s, %s\n",
-                       tsptype[type], machfrom == NULL ? "ANY" : machfrom,
-                       netfrom == NULL ? "ANYNET" : inet_ntoa(netfrom->net));
-               if (head->p != NULL) {
-                       length = 1;
-                       for (ptr = head->p; ptr != NULL; ptr = ptr->p) {
-                               /* do not repeat the hundreds of messages */
-                               if (++length > 3) {
-                                       if (ptr == tail) {
-                                               fprintf(fd,"\t ...%d skipped\n",
-                                                       length);
-                                       } else {
-                                               continue;
-                                       }
-                               }
-                               fprintf(fd, length > 1 ? "\t" : "queue:\t");
-                               print(&ptr->info, &ptr->addr);
-                       }
-               }
-       }
-
-       ptr = head->p;
-       prev = head;
-
-       /*
-        * Look for the requested message scanning through the
-        * linked list. If found, return it and free the space
-        */
-
-       while (ptr != NULL) {
-               if (LOOKAT(ptr->info, type, machfrom, netfrom, ptr->addr)) {
-again:
-                       msgin = ptr->info;
-                       from = ptr->addr;
-                       from_when = ptr->when;
-                       prev->p = ptr->p;
-                       if (ptr == tail)
-                               tail = prev;
-                       free((char *)ptr);
-                       fromnet = NULL;
-                       if (netfrom == NULL)
-                           for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                                   if ((ntp->mask & from.sin_addr.s_addr) ==
-                                       ntp->net.s_addr) {
-                                           fromnet = ntp;
-                                           break;
-                                   }
-                           }
-                       else
-                           fromnet = netfrom;
-                       if (trace) {
-                               fprintf(fd, "readmsg: found ");
-                               print(&msgin, &from);
-                       }
-
-/* The protocol can get far behind.  When it does, it gets
- *     hopelessly confused.  So delete duplicate messages.
- */
-                       for (ptr = prev; (ptr = ptr->p) != NULL; prev = ptr) {
-                               if (ptr->addr.sin_addr.s_addr
-                                       == from.sin_addr.s_addr
-                                   && ptr->info.tsp_type == msgin.tsp_type) {
-                                       if (trace)
-                                               fprintf(fd, "\tdup ");
-                                       goto again;
-                               }
-                       }
-                       msgcnt--;
-                       return(&msgin);
-               } else {
-                       prev = ptr;
-                       ptr = ptr->p;
-               }
-       }
-
-       /*
-        * If the message was not in the linked list, it may still be
-        * coming from the network. Set the timer and wait
-        * on a select to read the next incoming message: if it is the
-        * right one, return it, otherwise insert it in the linked list.
-        */
-
-       gettimeofday(&rtout, 0);
-       timevaladd(&rtout, intvl);
-       FD_ZERO(&ready);
-       for (;;) {
-               gettimeofday(&rtime, 0);
-               timevalsub(&rwait, &rtout, &rtime);
-               if (rwait.tv_sec < 0)
-                       rwait.tv_sec = rwait.tv_usec = 0;
-               else if (rwait.tv_sec == 0
-                        && rwait.tv_usec < 1000000/CLK_TCK)
-                       rwait.tv_usec = 1000000/CLK_TCK;
-
-               if (trace) {
-                       fprintf(fd, "readmsg: wait %ld.%6ld at %s\n",
-                               rwait.tv_sec, rwait.tv_usec, date());
-                       /* Notice a full disk, as we flush trace info.
-                        * It is better to flush periodically than at
-                        * every line because the tracing consists of bursts
-                        * of many lines.  Without care, tracing slows
-                        * down the code enough to break the protocol.
-                        */
-                       if (rwait.tv_sec != 0
-                           && EOF == fflush(fd))
-                               traceoff("Tracing ended for cause at %s\n");
-               }
-
-               FD_SET(sock, &ready);
-               if (!select(sock+1, &ready, NULL, NULL, &rwait)) {
-                       if (rwait.tv_sec == 0 && rwait.tv_usec == 0)
-                               return(0);
-                       continue;
-               }
-               length = sizeof(from);
-               if ((n = recvfrom(sock, (char *)&msgin, sizeof(struct tsp), 0,
-                            (struct sockaddr*)&from, &length)) < 0) {
-                       syslog(LOG_ERR, "recvfrom: %m");
-                       exit(1);
-               }
-               /*
-                * The 4.3BSD protocol spec had a 32-byte tsp_name field, and
-                * this is still OS-dependent.  Demand that the packet is at
-                * least long enough to hold a 4.3BSD packet.
-                */
-               if (n < (ssize_t)(sizeof(struct tsp) - MAXHOSTNAMELEN + 32)) {
-                       syslog(LOG_NOTICE,
-                           "short packet (%zd/%zu bytes) from %s",
-                             n, sizeof(struct tsp) - MAXHOSTNAMELEN + 32,
-                             inet_ntoa(from.sin_addr));
-                       continue;
-               }
-               gettimeofday(&from_when, NULL);
-               bytehostorder(&msgin);
-
-               if (msgin.tsp_vers > TSPVERSION) {
-                       if (trace) {
-                           fprintf(fd,"readmsg: version mismatch\n");
-                           /* should do a dump of the packet */
-                       }
-                       continue;
-               }
-
-               if (memchr(msgin.tsp_name,
-                   '\0', sizeof msgin.tsp_name) == NULL) {
-                       syslog(LOG_NOTICE, "hostname field not NUL terminated "
-                           "in packet from %s", inet_ntoa(from.sin_addr));
-                       continue;
-               }
-
-               fromnet = NULL;
-               for (ntp = nettab; ntp != NULL; ntp = ntp->next)
-                       if ((ntp->mask & from.sin_addr.s_addr) ==
-                           ntp->net.s_addr) {
-                               fromnet = ntp;
-                               break;
-                       }
-
-               /*
-                * drop packets from nets we are ignoring permanently
-                */
-               if (fromnet == NULL) {
-                       /*
-                        * The following messages may originate on
-                        * this host with an ignored network address
-                        */
-                       if (msgin.tsp_type != TSP_TRACEON &&
-                           msgin.tsp_type != TSP_SETDATE &&
-                           msgin.tsp_type != TSP_MSITE &&
-                           msgin.tsp_type != TSP_TEST &&
-                           msgin.tsp_type != TSP_TRACEOFF) {
-                               if (trace) {
-                                   fprintf(fd,"readmsg: discard null net ");
-                                   print(&msgin, &from);
-                               }
-                               continue;
-                       }
-               }
-
-               /*
-                * Throw away messages coming from this machine,
-                * unless they are of some particular type.
-                * This gets rid of broadcast messages and reduces
-                * master processing time.
-                */
-               if (!strcmp(msgin.tsp_name, hostname)
-                   && msgin.tsp_type != TSP_SETDATE
-                   && msgin.tsp_type != TSP_TEST
-                   && msgin.tsp_type != TSP_MSITE
-                   && msgin.tsp_type != TSP_TRACEON
-                   && msgin.tsp_type != TSP_TRACEOFF
-                   && msgin.tsp_type != TSP_LOOP) {
-                       if (trace) {
-                               fprintf(fd, "readmsg: discard own ");
-                               print(&msgin, &from);
-                       }
-                       continue;
-               }
-
-               /*
-                * Send acknowledgements here; this is faster and
-                * avoids deadlocks that would occur if acks were
-                * sent from a higher level routine.  Different
-                * acknowledgements are necessary, depending on
-                * status.
-                */
-               if (fromnet == NULL)    /* do not de-reference 0 */
-                       ignoreack();
-               else if (fromnet->status == MASTER)
-                       masterack();
-               else if (fromnet->status == SLAVE)
-                       slaveack();
-               else
-                       ignoreack();
-
-               if (LOOKAT(msgin, type, machfrom, netfrom, from)) {
-                       if (trace) {
-                               fprintf(fd, "readmsg: ");
-                               print(&msgin, &from);
-                       }
-                       return(&msgin);
-               } else if (++msgcnt > NHOSTS*3) {
-
-/* The protocol gets hopelessly confused if it gets too far
-*      behind.  However, it seems able to recover from all cases of lost
-*      packets.  Therefore, if we are swamped, throw everything away.
-*/
-                       if (trace)
-                               fprintf(fd,
-                                       "readmsg: discarding %d msgs\n",
-                                       msgcnt);
-                       msgcnt = 0;
-                       while ((ptr=head->p) != NULL) {
-                               head->p = ptr->p;
-                               free((char *)ptr);
-                       }
-                       tail = head;
-               } else {
-                       tail->p = (struct tsplist *)
-                                   malloc(sizeof(struct tsplist));
-                       tail = tail->p;
-                       tail->p = NULL;
-                       tail->info = msgin;
-                       tail->addr = from;
-                       /* timestamp msgs so SETTIMEs are correct */
-                       tail->when = from_when;
-               }
-       }
-}
-
-/*
- * Send the necessary acknowledgements:
- * only the type ACK is to be sent by a slave
- */
-void
-slaveack(void)
-{
-
-       switch(msgin.tsp_type) {
-
-       case TSP_ADJTIME:
-       case TSP_SETTIME:
-       case TSP_ACCEPT:
-       case TSP_REFUSE:
-       case TSP_TRACEON:
-       case TSP_TRACEOFF:
-       case TSP_QUIT:
-               if (trace) {
-                       fprintf(fd, "Slaveack: ");
-                       print(&msgin, &from);
-               }
-               xmit(TSP_ACK,msgin.tsp_seq, &from);
-               break;
-
-       default:
-               if (trace) {
-                       fprintf(fd, "Slaveack: no ack: ");
-                       print(&msgin, &from);
-               }
-               break;
-       }
-}
-
-/*
- * Certain packets may arrive from this machine on ignored networks.
- * These packets should be acknowledged.
- */
-void
-ignoreack(void)
-{
-
-       switch(msgin.tsp_type) {
-
-       case TSP_TRACEON:
-       case TSP_TRACEOFF:
-       case TSP_QUIT:
-               if (trace) {
-                       fprintf(fd, "Ignoreack: ");
-                       print(&msgin, &from);
-               }
-               xmit(TSP_ACK,msgin.tsp_seq, &from);
-               break;
-
-       default:
-               if (trace) {
-                       fprintf(fd, "Ignoreack: no ack: ");
-                       print(&msgin, &from);
-               }
-               break;
-       }
-}
-
-/*
- * `masterack' sends the necessary acknowledgments
- * to the messages received by a master
- */
-void
-masterack(void)
-{
-       struct tsp resp;
-
-       resp = msgin;
-       resp.tsp_vers = TSPVERSION;
-       strlcpy(resp.tsp_name, hostname, sizeof(resp.tsp_name));
-
-       switch(msgin.tsp_type) {
-
-       case TSP_QUIT:
-       case TSP_TRACEON:
-       case TSP_TRACEOFF:
-       case TSP_MSITEREQ:
-               if (trace) {
-                       fprintf(fd, "Masterack: ");
-                       print(&msgin, &from);
-               }
-               xmit(TSP_ACK,msgin.tsp_seq, &from);
-               break;
-
-       case TSP_RESOLVE:
-       case TSP_MASTERREQ:
-               if (trace) {
-                       fprintf(fd, "Masterack: ");
-                       print(&msgin, &from);
-               }
-               xmit(TSP_MASTERACK,msgin.tsp_seq, &from);
-               break;
-
-       default:
-               if (trace) {
-                       fprintf(fd,"Masterack: no ack: ");
-                       print(&msgin, &from);
-               }
-               break;
-       }
-}
-
-/*
- * Print a TSP message
- */
-void
-print(struct tsp *msg, struct sockaddr_in *addr)
-{
-       char tm[26];
-       time_t tsp_time_sec;
-
-       if (msg->tsp_type >= TSPTYPENUMBER) {
-               fprintf(fd, "bad type (%u) on packet from %s\n",
-                 msg->tsp_type, inet_ntoa(addr->sin_addr));
-               return;
-       }
-
-       switch (msg->tsp_type) {
-
-       case TSP_LOOP:
-               fprintf(fd, "%s %d %-6u #%d %-15s %s\n",
-                       tsptype[msg->tsp_type],
-                       msg->tsp_vers,
-                       msg->tsp_seq,
-                       msg->tsp_hopcnt,
-                       inet_ntoa(addr->sin_addr),
-                       msg->tsp_name);
-               break;
-
-       case TSP_SETTIME:
-       case TSP_SETDATE:
-       case TSP_SETDATEREQ:
-               tsp_time_sec = msg->tsp_time.tv_sec;
-               strlcpy(tm, ctime(&tsp_time_sec)+3+1, sizeof(tm));
-               fprintf(fd, "%s %d %-6u %s %-15s %s\n",
-                       tsptype[msg->tsp_type],
-                       msg->tsp_vers,
-                       msg->tsp_seq,
-                       tm,
-                       inet_ntoa(addr->sin_addr),
-                       msg->tsp_name);
-               break;
-
-       case TSP_ADJTIME:
-               fprintf(fd, "%s %d %-6u (%ld,%ld) %-15s %s\n",
-                       tsptype[msg->tsp_type],
-                       msg->tsp_vers,
-                       msg->tsp_seq,
-                       msg->tsp_time.tv_sec,
-                       msg->tsp_time.tv_usec,
-                       inet_ntoa(addr->sin_addr),
-                       msg->tsp_name);
-               break;
-
-       default:
-               fprintf(fd, "%s %d %-6u %-15s %s\n",
-                       tsptype[msg->tsp_type],
-                       msg->tsp_vers,
-                       msg->tsp_seq,
-                       inet_ntoa(addr->sin_addr),
-                       msg->tsp_name);
-               break;
-       }
-}
diff --git a/usr.sbin/timed/timed/slave.c b/usr.sbin/timed/timed/slave.c
deleted file mode 100644 (file)
index 5ac258f..0000000
+++ /dev/null
@@ -1,683 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)slave.c 8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/slave.c,v 1.7 1999/08/28 01:20:18 peter Exp $
- */
-
-#include "globals.h"
-#include <setjmp.h>
-#include "pathnames.h"
-
-extern jmp_buf jmpenv;
-extern int Mflag;
-extern int justquit;
-
-extern u_short sequence;
-
-static char master_name[MAXHOSTNAMELEN];
-static struct netinfo *old_slavenet;
-static int old_status;
-
-static void schgdate(struct tsp *, char *);
-static void setmaster(struct tsp *);
-static void answerdelay(void);
-
-void
-slave(void)
-{
-       int tries;
-       long electiontime, refusetime, looktime, looptime, adjusttime;
-       u_short seq;
-       long fastelection;
-#define FASTTOUT 3
-       struct in_addr cadr;
-       struct timeval otime;
-       struct sockaddr_in taddr;
-       char tname[MAXHOSTNAMELEN];
-       struct tsp *msg, to;
-       struct timeval ntime, wait;
-       time_t tsp_time_sec;
-       struct tsp *answer;
-       char olddate[32];
-       char newdate[32];
-       struct netinfo *ntp;
-       struct hosttbl *htp;
-
-
-       old_slavenet = NULL;
-       seq = 0;
-       refusetime = 0;
-       adjusttime = 0;
-
-       gettimeofday(&ntime, 0);
-       electiontime = ntime.tv_sec + delay2;
-       fastelection = ntime.tv_sec + FASTTOUT;
-       if (justquit)
-               looktime = electiontime;
-       else
-               looktime = fastelection;
-       looptime = fastelection;
-
-       if (slavenet)
-               xmit(TSP_SLAVEUP, 0, &slavenet->dest_addr);
-       if (status & MASTER) {
-               for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                       if (ntp->status == MASTER)
-                               masterup(ntp);
-               }
-       }
-
-loop:
-       get_goodgroup(0);
-       gettimeofday(&ntime, NULL);
-       if (ntime.tv_sec > electiontime) {
-               if (trace)
-                       fprintf(fd, "election timer expired\n");
-               longjmp(jmpenv, 1);
-       }
-
-       if (ntime.tv_sec >= looktime) {
-               if (trace)
-                       fprintf(fd, "Looking for nets to master\n");
-
-               if (Mflag && nignorednets > 0) {
-                       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                               if (ntp->status == IGNORE
-                                   || ntp->status == NOMASTER) {
-                                       lookformaster(ntp);
-                                       if (ntp->status == MASTER) {
-                                               masterup(ntp);
-                                       } else if (ntp->status == MASTER) {
-                                               ntp->status = NOMASTER;
-                                       }
-                               }
-                               if (ntp->status == MASTER
-                                   && --ntp->quit_count < 0)
-                                       ntp->quit_count = 0;
-                       }
-                       makeslave(slavenet);    /* prune extras */
-                       setstatus();
-               }
-               gettimeofday(&ntime, 0);
-               looktime = ntime.tv_sec + delay2;
-       }
-       if (ntime.tv_sec >= looptime) {
-               if (trace)
-                       fprintf(fd, "Looking for loops\n");
-               for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                   if (ntp->status == MASTER) {
-                       to.tsp_type = TSP_LOOP;
-                       to.tsp_vers = TSPVERSION;
-                       to.tsp_seq = sequence++;
-                       to.tsp_hopcnt = MAX_HOPCNT;
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-                       bytenetorder(&to);
-                       if (sendto(sock, (char *)&to, sizeof(struct tsp), 0,
-                                  (struct sockaddr*)&ntp->dest_addr,
-                                  sizeof(ntp->dest_addr)) < 0) {
-                               trace_sendto_err(ntp->dest_addr.sin_addr);
-                       }
-                   }
-               }
-               gettimeofday(&ntime, 0);
-               looptime = ntime.tv_sec + delay2;
-       }
-
-       wait.tv_sec = min(electiontime,min(looktime,looptime)) - ntime.tv_sec;
-       if (wait.tv_sec < 0)
-               wait.tv_sec = 0;
-       wait.tv_sec += FASTTOUT;
-       wait.tv_usec = 0;
-       msg = readmsg(TSP_ANY, ANYADDR, &wait, 0);
-
-       if (msg != NULL) {
-               /*
-                * filter stuff not for us
-                */
-               switch (msg->tsp_type) {
-               case TSP_SETDATE:
-               case TSP_TRACEOFF:
-               case TSP_TRACEON:
-                       /*
-                        * XXX check to see they are from ourself
-                        */
-                       break;
-
-               case TSP_TEST:
-               case TSP_MSITE:
-                       break;
-
-               case TSP_MASTERUP:
-                       if (!fromnet) {
-                               if (trace) {
-                                       fprintf(fd, "slave ignored: ");
-                                       print(msg, &from);
-                               }
-                               goto loop;
-                       }
-                       break;
-
-               default:
-                       if (!fromnet
-                           || fromnet->status == IGNORE
-                           || fromnet->status == NOMASTER) {
-                               if (trace) {
-                                       fprintf(fd, "slave ignored: ");
-                                       print(msg, &from);
-                               }
-                               goto loop;
-                       }
-                       break;
-               }
-
-
-               /*
-                * now process the message
-                */
-               switch (msg->tsp_type) {
-
-               case TSP_ADJTIME:
-                       if (fromnet != slavenet)
-                               break;
-                       if (!good_host_name(msg->tsp_name)) {
-                               syslog(LOG_NOTICE,
-                                  "attempted time adjustment by %s",
-                                      msg->tsp_name);
-                               suppress(&from, msg->tsp_name, fromnet);
-                               break;
-                       }
-                       /*
-                        * Speed up loop detection in case we have a loop.
-                        * Otherwise the clocks can race until the loop
-                        * is found.
-                        */
-                       gettimeofday(&otime, 0);
-                       if (adjusttime < otime.tv_sec)
-                               looptime -= (looptime-otime.tv_sec)/2 + 1;
-
-                       setmaster(msg);
-                       if (seq != msg->tsp_seq) {
-                               seq = msg->tsp_seq;
-                               synch(tvtomsround(msg->tsp_time));
-                       }
-                       gettimeofday(&ntime, 0);
-                       electiontime = ntime.tv_sec + delay2;
-                       fastelection = ntime.tv_sec + FASTTOUT;
-                       adjusttime = ntime.tv_sec + SAMPLEINTVL*2;
-                       break;
-
-               case TSP_SETTIME:
-                       if (fromnet != slavenet)
-                               break;
-                       if (seq == msg->tsp_seq)
-                               break;
-                       seq = msg->tsp_seq;
-
-                       /* adjust time for residence on the queue */
-                       gettimeofday(&otime, 0);
-                       adj_msg_time(msg,&otime);
-
-                       /*
-                        * the following line is necessary due to syslog
-                        * calling ctime() which clobbers the static buffer
-                        */
-                       strlcpy(olddate, date(), sizeof(olddate));
-                       tsp_time_sec = msg->tsp_time.tv_sec;
-                       strlcpy(newdate, ctime(&tsp_time_sec), sizeof(newdate));
-
-                       if (!good_host_name(msg->tsp_name)) {
-                               syslog(LOG_NOTICE,
-                           "attempted time setting by untrusted %s to %s",
-                                      msg->tsp_name, newdate);
-                               suppress(&from, msg->tsp_name, fromnet);
-                               break;
-                       }
-
-                       setmaster(msg);
-                       timevalsub(&ntime, &msg->tsp_time, &otime);
-                       if (ntime.tv_sec < MAXADJ && ntime.tv_sec > -MAXADJ) {
-                               /*
-                                * do not change the clock if we can adjust it
-                                */
-                               synch(tvtomsround(ntime));
-                       } else {
-                               logwtmp("|", "date", "");
-                               settimeofday(&msg->tsp_time, 0);
-                               logwtmp("{", "date", "");
-                               syslog(LOG_NOTICE,
-                                      "date changed by %s from %s",
-                                       msg->tsp_name, olddate);
-                               if (status & MASTER)
-                                       spreadtime();
-                       }
-                       gettimeofday(&ntime, 0);
-                       electiontime = ntime.tv_sec + delay2;
-                       fastelection = ntime.tv_sec + FASTTOUT;
-
-/* This patches a bad protocol bug.  Imagine a system with several networks,
- * where there are a pair of redundant gateways between a pair of networks,
- * each running timed.  Assume that we start with a third machine mastering
- * one of the networks, and one of the gateways mastering the other.
- * Imagine that the third machine goes away and the non-master gateway
- * decides to replace it.  If things are timed just 'right,' we will have
- * each gateway mastering one network for a little while.  If a SETTIME
- * message gets into the network at that time, perhaps from the newly
- * masterful gateway as it was taking control, the SETTIME will loop
- * forever.  Each time a gateway receives it on its slave side, it will
- * call spreadtime to forward it on its mastered network.  We are now in
- * a permanent loop, since the SETTIME msgs will keep any clock
- * in the network from advancing.  Normally, the 'LOOP' stuff will detect
- * and correct the situation.  However, with the clocks stopped, the
- * 'looptime' timer cannot expire.  While they are in this state, the
- * masters will try to saturate the network with SETTIME packets.
- */
-                       looptime = ntime.tv_sec + (looptime-otime.tv_sec)/2-1;
-                       break;
-
-               case TSP_MASTERUP:
-                       if (slavenet && fromnet != slavenet)
-                               break;
-                       if (!good_host_name(msg->tsp_name)) {
-                               suppress(&from, msg->tsp_name, fromnet);
-                               if (electiontime > fastelection)
-                                       electiontime = fastelection;
-                               break;
-                       }
-                       makeslave(fromnet);
-                       setmaster(msg);
-                       setstatus();
-                       answerdelay();
-                       xmit(TSP_SLAVEUP, 0, &from);
-                       gettimeofday(&ntime, 0);
-                       electiontime = ntime.tv_sec + delay2;
-                       fastelection = ntime.tv_sec + FASTTOUT;
-                       refusetime = 0;
-                       break;
-
-               case TSP_MASTERREQ:
-                       if (fromnet->status != SLAVE)
-                               break;
-                       gettimeofday(&ntime, 0);
-                       electiontime = ntime.tv_sec + delay2;
-                       break;
-
-               case TSP_SETDATE:
-                       tsp_time_sec = msg->tsp_time.tv_sec;
-                       strlcpy(newdate, ctime(&tsp_time_sec), sizeof(newdate));
-                       schgdate(msg, newdate);
-                       break;
-
-               case TSP_SETDATEREQ:
-                       if (fromnet->status != MASTER)
-                               break;
-                       tsp_time_sec = msg->tsp_time.tv_sec;
-                       strlcpy(newdate, ctime(&tsp_time_sec), sizeof(newdate));
-                       htp = findhost(msg->tsp_name);
-                       if (NULL == htp) {
-                               syslog(LOG_WARNING,
-                                      "DATEREQ from uncontrolled machine");
-                               break;
-                       }
-                       if (!htp->good) {
-                               syslog(LOG_WARNING,
-                               "attempted date change by untrusted %s to %s",
-                                      htp->name, newdate);
-                               spreadtime();
-                               break;
-                       }
-                       schgdate(msg, newdate);
-                       break;
-
-               case TSP_TRACEON:
-                       traceon();
-                       break;
-
-               case TSP_TRACEOFF:
-                       traceoff("Tracing ended at %s\n");
-                       break;
-
-               case TSP_SLAVEUP:
-                       newslave(msg);
-                       break;
-
-               case TSP_ELECTION:
-                       if (fromnet->status == SLAVE) {
-                               gettimeofday(&ntime, 0);
-                               electiontime = ntime.tv_sec + delay2;
-                               fastelection = ntime.tv_sec + FASTTOUT;
-                               seq = 0;
-                               if (!good_host_name(msg->tsp_name)) {
-                                       syslog(LOG_NOTICE,
-                                              "suppress election of %s",
-                                              msg->tsp_name);
-                                       to.tsp_type = TSP_QUIT;
-                                       electiontime = fastelection;
-                               } else if (cadr.s_addr != from.sin_addr.s_addr
-                                          && ntime.tv_sec < refusetime) {
-/* if the candidate has to repeat itself, the old code would refuse it
- * the second time.  That would prevent elections.
- */
-                                       to.tsp_type = TSP_REFUSE;
-                               } else {
-                                       cadr.s_addr = from.sin_addr.s_addr;
-                                       to.tsp_type = TSP_ACCEPT;
-                                       refusetime = ntime.tv_sec + 30;
-                               }
-                               taddr = from;
-                               strlcpy(tname, msg->tsp_name, sizeof(tname));
-                               strlcpy(to.tsp_name, hostname, 
-                                       sizeof(to.tsp_name));
-                               answerdelay();
-                               if (!acksend(&to, &taddr, tname,
-                                            TSP_ACK, 0, 0))
-                                       syslog(LOG_WARNING,
-                                            "no answer from candidate %s\n",
-                                              tname);
-
-                       } else {        /* fromnet->status == MASTER */
-                               htp = addmach(msg->tsp_name, &from,fromnet);
-                               to.tsp_type = TSP_QUIT;
-                               strlcpy(to.tsp_name, hostname, 
-                                       sizeof(to.tsp_name));
-                               if (!acksend(&to, &htp->addr, htp->name,
-                                            TSP_ACK, 0, htp->noanswer)) {
-                                       syslog(LOG_ERR,
-                                         "no reply from %s to ELECTION-QUIT",
-                                              htp->name);
-                                       remmach(htp);
-                               }
-                       }
-                       break;
-
-               case TSP_CONFLICT:
-                       if (fromnet->status != MASTER)
-                               break;
-                       /*
-                        * After a network partition, there can be
-                        * more than one master: the first slave to
-                        * come up will notify here the situation.
-                        */
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-
-                       /* The other master often gets into the same state,
-                        * with boring results.
-                        */
-                       ntp = fromnet;  /* (acksend() can leave fromnet=0 */
-                       for (tries = 0; tries < 3; tries++) {
-                               to.tsp_type = TSP_RESOLVE;
-                               answer = acksend(&to, &ntp->dest_addr,
-                                                ANYADDR, TSP_MASTERACK,
-                                                ntp, 0);
-                               if (answer == NULL)
-                                       break;
-                               htp = addmach(answer->tsp_name,&from,ntp);
-                               to.tsp_type = TSP_QUIT;
-                               answer = acksend(&to, &htp->addr, htp->name,
-                                                TSP_ACK, 0, htp->noanswer);
-                               if (!answer) {
-                                       syslog(LOG_WARNING,
-                                 "conflict error: no reply from %s to QUIT",
-                                               htp->name);
-                                       remmach(htp);
-                               }
-                       }
-                       masterup(ntp);
-                       break;
-
-               case TSP_MSITE:
-                       if (!slavenet)
-                               break;
-                       taddr = from;
-                       to.tsp_type = TSP_MSITEREQ;
-                       to.tsp_vers = TSPVERSION;
-                       to.tsp_seq = 0;
-                       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-                       answer = acksend(&to, &slavenet->dest_addr,
-                                        ANYADDR, TSP_ACK,
-                                        slavenet, 0);
-                       if (answer != NULL
-                           && good_host_name(answer->tsp_name)) {
-                               setmaster(answer);
-                               to.tsp_type = TSP_ACK;
-                               strlcpy(to.tsp_name, answer->tsp_name,
-                                       sizeof(to.tsp_name));
-                               bytenetorder(&to);
-                               if (sendto(sock, (char *)&to,
-                                          sizeof(struct tsp), 0,
-                                          (struct sockaddr*)&taddr,
-                                          sizeof(taddr)) < 0) {
-                                       trace_sendto_err(taddr.sin_addr);
-                               }
-                       }
-                       break;
-
-               case TSP_MSITEREQ:
-                       break;
-
-               case TSP_ACCEPT:
-               case TSP_REFUSE:
-               case TSP_RESOLVE:
-                       break;
-
-               case TSP_QUIT:
-                       doquit(msg);            /* become a slave */
-                       break;
-
-               case TSP_TEST:
-                       electiontime = 0;
-                       break;
-
-               case TSP_LOOP:
-                       /* looking for loops of masters */
-                       if (!(status & MASTER))
-                               break;
-                       if (fromnet->status == SLAVE) {
-                           if (!strcmp(msg->tsp_name, hostname)) {
-                               /*
-                                * Someone forwarded our message back to
-                                * us.  There must be a loop.  Tell the
-                                * master of this network to quit.
-                                *
-                                * The other master often gets into
-                                * the same state, with boring results.
-                                */
-                               ntp = fromnet;
-                               for (tries = 0; tries < 3; tries++) {
-                                   to.tsp_type = TSP_RESOLVE;
-                                   answer = acksend(&to, &ntp->dest_addr,
-                                                    ANYADDR, TSP_MASTERACK,
-                                                    ntp,0);
-                                   if (answer == NULL)
-                                       break;
-                                   taddr = from;
-                                   strlcpy(tname, answer->tsp_name,
-                                           sizeof(tname));
-                                   to.tsp_type = TSP_QUIT;
-                                   strlcpy(to.tsp_name, hostname,
-                                           sizeof(to.tsp_name));
-                                   if (!acksend(&to, &taddr, tname,
-                                                TSP_ACK, 0, 1)) {
-                                       syslog(LOG_ERR,
-                                       "no reply from %s to slave LOOP-QUIT",
-                                                tname);
-                                   } else {
-                                       electiontime = 0;
-                                   }
-                               }
-                               gettimeofday(&ntime, 0);
-                               looptime = ntime.tv_sec + FASTTOUT;
-                           } else {
-                               if (msg->tsp_hopcnt-- < 1)
-                                   break;
-                               bytenetorder(msg);
-                               for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                                   if (ntp->status == MASTER
-                                       && 0 > sendto(sock, (char *)msg,
-                                                     sizeof(struct tsp), 0,
-                                             (struct sockaddr*)&ntp->dest_addr,
-                                                     sizeof(ntp->dest_addr)))
-                                   trace_sendto_err(ntp->dest_addr.sin_addr);
-                               }
-                           }
-                       } else {        /* fromnet->status == MASTER */
-                           /*
-                            * We should not have received this from a net
-                            * we are master on.  There must be two masters,
-                            * unless the packet was really from us.
-                            */
-                           if (from.sin_addr.s_addr
-                               == fromnet->my_addr.s_addr) {
-                               if (trace)
-                                   fprintf(fd,"discarding forwarded LOOP\n");
-                               break;
-                           }
-
-                           /*
-                            * The other master often gets into the same
-                            * state, with boring results.
-                            */
-                           ntp = fromnet;
-                           for (tries = 0; tries < 3; tries++) {
-                               to.tsp_type = TSP_RESOLVE;
-                               answer = acksend(&to, &ntp->dest_addr,
-                                                ANYADDR, TSP_MASTERACK,
-                                               ntp,0);
-                               if (!answer)
-                                       break;
-                               htp = addmach(answer->tsp_name,
-                                             &from,ntp);
-                               to.tsp_type = TSP_QUIT;
-                               strlcpy(to.tsp_name, hostname,
-                                       sizeof(to.tsp_name));
-                               if (!acksend(&to,&htp->addr,htp->name,
-                                            TSP_ACK, 0, htp->noanswer)) {
-                                       syslog(LOG_ERR,
-                                   "no reply from %s to master LOOP-QUIT",
-                                              htp->name);
-                                       remmach(htp);
-                               }
-                           }
-                           gettimeofday(&ntime, 0);
-                           looptime = ntime.tv_sec + FASTTOUT;
-                       }
-                       break;
-               default:
-                       if (trace) {
-                               fprintf(fd, "garbage message: ");
-                               print(msg, &from);
-                       }
-                       break;
-               }
-       }
-       goto loop;
-}
-
-
-/*
- * tell the world who our master is
- */
-static void
-setmaster(struct tsp *msg)
-{
-
-       if (slavenet
-           && (slavenet != old_slavenet
-               || strcmp(msg->tsp_name, master_name)
-               || old_status != status)) {
-               strlcpy(master_name, msg->tsp_name, sizeof(master_name));
-               old_slavenet = slavenet;
-               old_status = status;
-
-               if (status & MASTER) {
-                       syslog(LOG_NOTICE, "submaster to %s", master_name);
-                       if (trace)
-                               fprintf(fd, "submaster to %s\n", master_name);
-
-               } else {
-                       syslog(LOG_NOTICE, "slave to %s", master_name);
-                       if (trace)
-                               fprintf(fd, "slave to %s\n", master_name);
-               }
-       }
-}
-
-
-
-/*
- * handle date change request on a slave
- */
-static void
-schgdate(struct tsp *msg, char *newdate)
-{
-       struct tsp to;
-       u_short seq;
-       struct sockaddr_in taddr;
-       struct timeval otime;
-
-       if (!slavenet)
-               return;                 /* no where to forward */
-
-       taddr = from;
-       seq = msg->tsp_seq;
-
-       syslog(LOG_INFO,
-              "forwarding date change by %s to %s",
-              msg->tsp_name, newdate);
-
-       /* adjust time for residence on the queue */
-       gettimeofday(&otime, 0);
-       adj_msg_time(msg, &otime);
-
-       to.tsp_type = TSP_SETDATEREQ;
-       to.tsp_time = msg->tsp_time;
-       strlcpy(to.tsp_name, hostname, sizeof(to.tsp_name));
-       if (!acksend(&to, &slavenet->dest_addr,
-                    ANYADDR, TSP_DATEACK,
-                    slavenet, 0))
-               return;                 /* no answer */
-
-       xmit(TSP_DATEACK, seq, &taddr);
-}
-
-
-/*
- * Used before answering a broadcast message to avoid network
- * contention and likely collisions.
- */
-static void
-answerdelay(void)
-{
-
-       struct timeval timeout;
-
-       timeout.tv_sec = 0;
-       timeout.tv_usec = delay1;
-
-       select(0, NULL, NULL, NULL, &timeout);
-}
diff --git a/usr.sbin/timed/timed/timed.8 b/usr.sbin/timed/timed/timed.8
deleted file mode 100644 (file)
index 74b0648..0000000
+++ /dev/null
@@ -1,266 +0,0 @@
-.\" Copyright (c) 1980, 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)timed.8    8.1 (Berkeley) 6/6/93
-.\" $FreeBSD: src/usr.sbin/timed/timed/timed.8,v 1.7.2.6 2003/03/11 22:31:34 trhodes Exp $
-.\" $DragonFly: src/usr.sbin/timed/timed/timed.8,v 1.3 2007/12/16 02:55:38 thomas Exp $
-.\"
-.Dd June 6, 1993
-.Dt TIMED 8
-.Os
-.Sh NAME
-.Nm timed
-.Nd time server daemon
-.Sh SYNOPSIS
-.Nm
-.Op Fl dtM
-.Op Fl i Ar network
-.Op Fl n Ar network
-.Op Fl F Ar host ...
-.Sh DESCRIPTION
-The
-.Nm
-utility is a time server daemon,
-it is invoked at boot time by setting the
-.Va timed_enable
-variable in
-.Xr rc.conf 5 .
-It synchronizes the host's time with the time of other
-machines, which are also running
-.Nm ,
-in a local area network.
-These time servers will slow down the clocks of some machines
-and speed up the clocks of others to bring them to the average network time.
-The average network time is computed from measurements of clock differences
-using the
-.Tn ICMP
-timestamp request message.
-.Pp
-The following options are available:
-.Bl -tag -width indent
-.It Fl d
-Enable debugging mode;
-do not detach from the terminal.
-.It Fl i Ar network
-Add
-.Ar network
-to the list of networks to ignore.
-All other networks
-to which the machine is directly connected
-are used by
-.Nm .
-This option may be specified multiple times
-to add more than one network to the list.
-.It Fl F Ar host ...
-Create a list of trusted hosts.
-The
-.Nm
-utility will only accept trusted hosts as masters.
-If it finds an untrusted host claiming to be master,
-.Nm
-will suppress incoming messages from that host
-and call for a new election.
-This option implies the
-.Fl M
-option.
-If this option is not specified,
-all hosts on the connected networks are treated as trustworthy.
-.It Fl M
-Allow this host to become a
-.Nm
-master if necessary.
-.It Fl n Ar network
-Add
-.Ar network
-to the list of allowed networks.
-All other networks
-to which the machine is directly connected
-are ignored by
-.Nm .
-This option may be specified multiple times
-to add more than one network to the list.
-.It Fl t
-Enable tracing of received messages
-and log to the file
-.It Pa /var/log/timed.log .
-Tracing can be turned on or off while
-.Nm
-is running with the
-.Xr timedc 8
-utility.
-.El
-.Pp
-The
-.Fl n
-and
-.Fl i
-are mutually exclusive
-and require as arguments real networks to which
-the host is connected
-(see
-.Xr networks 5 ) .
-If neither flag is specified,
-.Nm
-will listen on all connected networks.
-.Pp
-A
-.Nm
-running without the
-.Fl M
-nor
-.Fl F
-flags will always remain a slave.
-If the
-.Fl F
-flag is not used,
-.Nm
-will treat all machines as trustworthy.
-.Pp
-The
-.Nm
-utility is based on a master-slave
-scheme.
-When
-.Nm
-is started on a machine, it asks the master for the network time
-and sets the host's clock to that time.
-After that, it accepts synchronization messages periodically sent by
-the master and calls
-.Xr adjtime 2
-to perform the needed corrections on the host's clock.
-.Pp
-It also communicates with
-.Xr date 1
-in order to set the date globally,
-and with
-.Xr timedc 8 ,
-a
-.Nm
-control utility.
-If the machine running the master becomes unreachable,
-the slaves will elect a new master
-from among those slaves
-which are running with at least one of the
-.Fl M
-and
-.Fl F
-flags.
-.Pp
-At startup
-.Nm
-normally checks for a master time server on each network to which
-it is connected, except as modified by the
-.Fl n
-and
-.Fl i
-options described above.
-It will request synchronization service from the first master server
-located.
-If permitted by the
-.Fl M
-or
-.Fl F
-flags, it will provide synchronization service on any attached networks
-on which no trusted master server was detected.
-Such a server propagates the time computed by the top-level master.
-The
-.Nm
-utility will periodically check for the presence of a master
-on those networks for which it is operating as a slave.
-If it finds that there are no trusted masters on a network,
-it will begin the election process on that network.
-.Pp
-One way to synchronize a group of machines is to use an
-.Tn NTP
-daemon to
-synchronize the clock of one machine to a distant standard or a radio
-receiver and
-.Fl F Ar hostname
-to tell its timed daemon to trust only itself.
-.Pp
-Messages printed by the kernel on the system console occur with
-interrupts disabled.
-This means that the clock stops while they are printing.
-A machine with many disk or network hardware problems and consequent
-messages cannot keep good time by itself.  Each message typically causes
-the clock to lose a dozen milliseconds.  A time daemon can
-correct the result.
-.Pp
-Messages in the system log about machines that failed to respond
-usually indicate machines that crashed or were turned off.
-Complaints about machines that failed to respond to initial time
-settings are often associated with "multi-homed" machines
-that looked for time masters on more than one network and eventually
-chose to become a slave on the other network.
-.Sh WARNINGS
-Temporal chaos will result if two or more time daemons attempt
-to adjust the same clock.
-If both
-.Nm
-and another time daemon are run on the same machine,
-ensure that the
-.Fl F
-flag is used, so that
-.Nm
-never attempts to adjust the local clock.
-.Pp
-The protocol is based on
-.Tn UDP/IP
-broadcasts.  All machines within
-the range of a broadcast that are using the
-.Tn TSP
-protocol must cooperate.
-There cannot be more than a single administrative domain using the
-.Fl F
-flag among all machines reached by a broadcast packet.
-Failure to follow this rule is usually indicated by complaints concerning
-"untrusted" machines in the system log.
-.Sh FILES
-.Bl -tag -width /var/log/timed.masterlog -compact
-.It Pa /var/log/timed.log
-tracing file for timed
-.It Pa /var/log/timed.masterlog
-log file for master timed
-.El
-.Sh SEE ALSO
-.Xr date 1 ,
-.Xr adjtime 2 ,
-.Xr gettimeofday 2 ,
-.Xr icmp 4 ,
-.Xr networks 5 ,
-.Xr rc.conf 5 ,
-.Xr timedc 8
-.Rs
-.%T "TSP: The Time Synchronization Protocol for UNIX 4.3BSD"
-.%A R. Gusella
-.%A S. Zatti
-.Re
-.Sh HISTORY
-The
-.Nm
-utility appeared in
-.Bx 4.3 .
diff --git a/usr.sbin/timed/timed/timed.c b/usr.sbin/timed/timed/timed.c
deleted file mode 100644 (file)
index 1ef1663..0000000
+++ /dev/null
@@ -1,824 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) Copyright (c) 1985, 1993 The Regents of the University of California.  All rights reserved.
- * @(#)timed.c 8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timed/timed.c,v 1.9 1999/08/28 01:20:19 peter Exp $
- */
-
-#define TSPTYPES
-#include "globals.h"
-#include <net/if.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <setjmp.h>
-#include "pathnames.h"
-#include <math.h>
-#include <sys/types.h>
-#include <sys/times.h>
-
-int trace = 0;
-int sock, sock_raw = -1;
-int status = 0;
-u_short sequence;                      /* sequence number */
-long delay1;
-long delay2;
-
-int nslavenets;                                /* nets were I could be a slave */
-int nmasternets;                       /* nets were I could be a master */
-int nignorednets;                      /* ignored nets */
-int nnets;                             /* nets I am connected to */
-
-FILE *fd;                              /* trace file FD */
-
-jmp_buf jmpenv;
-
-struct netinfo *nettab = NULL;
-struct netinfo *slavenet;
-int Mflag;
-int justquit = 0;
-int debug;
-
-static struct nets {
-       char    *name;
-       long    net;
-       struct nets *next;
-} *nets = NULL;
-
-struct hosttbl hosttbl[NHOSTS+1];      /* known hosts */
-
-static struct goodhost {               /* hosts that we trust */
-       char    name[MAXHOSTNAMELEN];
-       struct goodhost *next;
-       char    perm;
-} *goodhosts;
-
-static char *goodgroup;                        /* net group of trusted hosts */
-static void checkignorednets(void);
-static void pickslavenet(struct netinfo *);
-static void add_good_host(char *, int);
-static void usage(void);
-
-/*
- * The timedaemons synchronize the clocks of hosts in a local area network.
- * One daemon runs as master, all the others as slaves. The master
- * performs the task of computing clock differences and sends correction
- * values to the slaves.
- * Slaves start an election to choose a new master when the latter disappears
- * because of a machine crash, network partition, or when killed.
- * A resolution protocol is used to kill all but one of the masters
- * that happen to exist in segments of a partitioned network when the
- * network partition is fixed.
- *
- * Authors: Riccardo Gusella & Stefano Zatti
- *
- * overhauled at Silicon Graphics
- */
-int
-main(int argc, char *argv[])
-{
-       int on;
-       int ret;
-       int nflag, iflag;
-       struct timeval ntime;
-       struct servent *srvp;
-       char buf[BUFSIZ], *cp, *cplim;
-       struct ifconf ifc;
-       struct ifreq ifreq, ifreqf, *ifr;
-       struct netinfo *ntp;
-       struct netinfo *ntip;
-       struct netinfo *savefromnet;
-       struct netent *nentp;
-       struct nets *nt;
-       struct sockaddr_in server;
-       u_short port;
-       char c;
-
-       on = 1;
-       nflag = OFF;
-       iflag = OFF;
-       ntip = NULL;
-
-       opterr = 0;
-       while ((c = getopt(argc, argv, "Mtdn:i:F:G:P:")) != -1) {
-               switch (c) {
-               case 'M':
-                       Mflag = 1;
-                       break;
-
-               case 't':
-                       trace = 1;
-                       break;
-
-               case 'n':
-                       if (iflag) {
-                               errx(1, "-i and -n make no sense together");
-                       } else {
-                               nflag = ON;
-                               addnetname(optarg);
-                       }
-                       break;
-
-               case 'i':
-                       if (nflag) {
-                               errx(1, "-i and -n make no sense together");
-                       } else {
-                               iflag = ON;
-                               addnetname(optarg);
-                       }
-                       break;
-
-               case 'F':
-                       add_good_host(optarg,1);
-                       while (optind < argc && argv[optind][0] != '-')
-                               add_good_host(argv[optind++], 1);
-                       break;
-
-               case 'd':
-                       debug = 1;
-                       break;
-               case 'G':
-                       if (goodgroup != NULL)
-                               errx(1, "only one net group");
-                       goodgroup = optarg;
-                       break;
-               default:
-                       usage();
-                       break;
-               }
-       }
-       if (optind < argc)
-               usage();
-
-       /* If we care about which machine is the master, then we must
-        *      be willing to be a master
-        */
-       if (NULL != goodgroup || NULL != goodhosts)
-               Mflag = 1;
-
-       if (gethostname(hostname, sizeof(hostname) - 1) < 0)
-               err(1, "gethostname");
-       self.l_bak = &self;
-       self.l_fwd = &self;
-       self.h_bak = &self;
-       self.h_fwd = &self;
-       self.head = 1;
-       self.good = 1;
-
-       if (goodhosts != NULL)          /* trust ourself */
-               add_good_host(hostname,1);
-
-       srvp = getservbyname("timed", "udp");
-       if (srvp == NULL)
-               errx(1, "unknown service 'timed/udp'");
-       port = srvp->s_port;
-       bzero(&server, sizeof(struct sockaddr_in));
-       server.sin_port = srvp->s_port;
-       server.sin_family = AF_INET;
-       sock = socket(AF_INET, SOCK_DGRAM, 0);
-       if (sock < 0)
-               err(1, "socket");
-       if (setsockopt(sock, SOL_SOCKET, SO_BROADCAST, (char *)&on,
-                                                       sizeof(on)) < 0)
-               err(1, "setsockopt");
-       if (bind(sock, (struct sockaddr*)&server, sizeof(server))) {
-               if (errno == EADDRINUSE)
-                       warnx("time daemon already running");
-               else
-                       warn("bind");
-               exit(1);
-       }
-
-       /* choose a unique seed for random number generation */
-       gettimeofday(&ntime, 0);
-       srandom(ntime.tv_sec + ntime.tv_usec);
-
-       sequence = random();     /* initial seq number */
-
-       /* rounds kernel variable time to multiple of 5 ms. */
-       ntime.tv_sec = 0;
-       ntime.tv_usec = -((ntime.tv_usec/1000) % 5) * 1000;
-       adjtime(&ntime, NULL);
-
-       for (nt = nets; nt; nt = nt->next) {
-               nentp = getnetbyname(nt->name);
-               if (nentp == NULL) {
-                       nt->net = inet_network(nt->name);
-                       if (nt->net != (long)INADDR_NONE)
-                               nentp = getnetbyaddr(nt->net, AF_INET);
-               }
-               if (nentp != NULL) {
-                       nt->net = nentp->n_net;
-               } else if (nt->net == (long)INADDR_NONE) {
-                       errx(1, "unknown net %s", nt->name);
-               } else if (nt->net == (long)INADDR_ANY) {
-                       errx(1, "bad net %s", nt->name);
-               } else {
-                       warnx("warning: %s unknown in /etc/networks",
-                               nt->name);
-               }
-
-               if (0 == (nt->net & 0xff000000))
-                   nt->net <<= 8;
-               if (0 == (nt->net & 0xff000000))
-                   nt->net <<= 8;
-               if (0 == (nt->net & 0xff000000))
-                   nt->net <<= 8;
-       }
-       ifc.ifc_len = sizeof(buf);
-       ifc.ifc_buf = buf;
-       if (ioctl(sock, SIOCGIFCONF, (char *)&ifc) < 0)
-               err(1, "get interface configuration");
-       ntp = NULL;
-
-#define size(p)        max((p).sa_len, sizeof(p))
-       cplim = buf + ifc.ifc_len; /*skip over if's with big ifr_addr's */
-       for (cp = buf; cp < cplim;
-                       cp += sizeof (ifr->ifr_name) + size(ifr->ifr_addr)) {
-               ifr = (struct ifreq *)cp;
-               if (ifr->ifr_addr.sa_family != AF_INET)
-                       continue;
-               if (!ntp)
-                       ntp = (struct netinfo*)malloc(sizeof(struct netinfo));
-               bzero(ntp,sizeof(*ntp));
-               ntp->my_addr=((struct sockaddr_in *)&ifr->ifr_addr)->sin_addr;
-               ntp->status = NOMASTER;
-               ifreq = *ifr;
-               ifreqf = *ifr;
-
-               if (ioctl(sock, SIOCGIFFLAGS, (char *)&ifreqf) < 0) {
-                       warn("get interface flags");
-                       continue;
-               }
-               if ((ifreqf.ifr_flags & IFF_UP) == 0)
-                       continue;
-               if ((ifreqf.ifr_flags & IFF_BROADCAST) == 0 &&
-                   (ifreqf.ifr_flags & IFF_POINTOPOINT) == 0) {
-                       continue;
-               }
-
-
-               if (ioctl(sock, SIOCGIFNETMASK, (char *)&ifreq) < 0) {
-                       warn("get netmask");
-                       continue;
-               }
-               ntp->mask = ((struct sockaddr_in *)
-                       &ifreq.ifr_addr)->sin_addr.s_addr;
-
-               if (ifreqf.ifr_flags & IFF_BROADCAST) {
-                       if (ioctl(sock, SIOCGIFBRDADDR, (char *)&ifreq) < 0) {
-                               warn("get broadaddr");
-                               continue;
-                       }
-                       ntp->dest_addr = *(struct sockaddr_in *)&ifreq.ifr_broadaddr;
-                       /* What if the broadcast address is all ones?
-                        * So we cannot just mask ntp->dest_addr.  */
-                       ntp->net = ntp->my_addr;
-                       ntp->net.s_addr &= ntp->mask;
-               } else {
-                       if (ioctl(sock, SIOCGIFDSTADDR,
-                                               (char *)&ifreq) < 0) {
-                               warn("get destaddr");
-                               continue;
-                       }
-                       ntp->dest_addr = *(struct sockaddr_in *)&ifreq.ifr_dstaddr;
-                       ntp->net = ntp->dest_addr.sin_addr;
-               }
-
-               ntp->dest_addr.sin_port = port;
-
-               for (nt = nets; nt; nt = nt->next) {
-                       if (ntp->net.s_addr == htonl(nt->net))
-                               break;
-               }
-               if ((nflag && !nt) || (iflag && nt))
-                       continue;
-
-               ntp->next = NULL;
-               if (nettab == NULL) {
-                       nettab = ntp;
-               } else {
-                       ntip->next = ntp;
-               }
-               ntip = ntp;
-               ntp = NULL;
-       }
-       if (ntp)
-               free((char *)ntp);
-       if (nettab == NULL)
-               errx(1, "no network usable");
-
-
-       /* microseconds to delay before responding to a broadcast */
-       delay1 = casual(1, 100*1000);
-
-       /* election timer delay in secs. */
-       delay2 = casual(MINTOUT, MAXTOUT);
-
-
-       if (!debug)
-               daemon(debug, 0);
-
-       if (trace)
-               traceon();
-       openlog("timed", LOG_CONS|LOG_PID, LOG_DAEMON);
-
-       /*
-        * keep returning here
-        */
-       ret = setjmp(jmpenv);
-       savefromnet = fromnet;
-       setstatus();
-
-       if (Mflag) {
-               switch (ret) {
-
-               case 0:
-                       checkignorednets();
-                       pickslavenet(0);
-                       break;
-               case 1:
-                       /* Just lost our master */
-                       if (slavenet != NULL)
-                               slavenet->status = election(slavenet);
-                       if (!slavenet || slavenet->status == MASTER) {
-                               checkignorednets();
-                               pickslavenet(0);
-                       } else {
-                               makeslave(slavenet);    /* prune extras */
-                       }
-                       break;
-
-               case 2:
-                       /* Just been told to quit */
-                       justquit = 1;
-                       pickslavenet(savefromnet);
-                       break;
-               }
-
-               setstatus();
-               if (!(status & MASTER) && sock_raw != -1) {
-                       /* sock_raw is not being used now */
-                       close(sock_raw);
-                       sock_raw = -1;
-               }
-
-               if (status == MASTER)
-                       master();
-               else
-                       slave();
-
-       } else {
-               if (sock_raw != -1) {
-                       close(sock_raw);
-                       sock_raw = -1;
-               }
-
-               if (ret) {
-                       /* we just lost our master or were told to quit */
-                       justquit = 1;
-               }
-               for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                       if (ntp->status == MASTER) {
-                               rmnetmachs(ntp);
-                               ntp->status = NOMASTER;
-                       }
-               }
-               checkignorednets();
-               pickslavenet(0);
-               setstatus();
-
-               slave();
-       }
-       /* NOTREACHED */
-       return(0);
-}
-
-static void
-usage(void)
-{
-
-#ifdef HAVENIS
-       fprintf(stderr, 
-"usage: timed [-dtM] [-i net|-n net] [-F host1 host2 ...] [-G netgp]\n");
-#else
-       fprintf(stderr,
-"usage: timed [-dtM] [-i net|-n net] [-F host1 host2 ...]\n");
-#endif /* HAVENIS */
-       exit(1);
-}
-
-/*
- * suppress an upstart, untrustworthy, self-appointed master
- */
-void
-suppress(struct sockaddr_in *addr, char *name, struct netinfo *net)
-{
-       struct sockaddr_in tgt;
-       char tname[MAXHOSTNAMELEN];
-       struct tsp msg;
-       static struct timeval wait;
-
-       if (trace)
-               fprintf(fd, "suppress: %s\n", name);
-       tgt = *addr;
-       strlcpy(tname, name, sizeof(tname));
-
-       while (0 != readmsg(TSP_ANY, ANYADDR, &wait, net)) {
-               if (trace)
-                       fprintf(fd, "suppress:\tdiscarded packet from %s\n",
-                                   name);
-       }
-
-       syslog(LOG_NOTICE, "suppressing false master %s", tname);
-       msg.tsp_type = TSP_QUIT;
-       strlcpy(msg.tsp_name, hostname, sizeof(msg.tsp_name));
-       acksend(&msg, &tgt, tname, TSP_ACK, 0, 1);
-}
-
-void
-lookformaster(struct netinfo *ntp)
-{
-       struct tsp resp, conflict, *answer;
-       struct timeval ntime;
-       char mastername[MAXHOSTNAMELEN];
-       struct sockaddr_in masteraddr;
-
-       get_goodgroup(0);
-       ntp->status = SLAVE;
-
-       /* look for master */
-       resp.tsp_type = TSP_MASTERREQ;
-       strlcpy(resp.tsp_name, hostname, sizeof(resp.tsp_name));
-       answer = acksend(&resp, &ntp->dest_addr, ANYADDR,
-                        TSP_MASTERACK, ntp, 0);
-       if (answer != NULL && !good_host_name(answer->tsp_name)) {
-               suppress(&from, answer->tsp_name, ntp);
-               ntp->status = NOMASTER;
-               answer = NULL;
-       }
-       if (answer == NULL) {
-               /*
-                * Various conditions can cause conflict: races between
-                * two just started timedaemons when no master is
-                * present, or timedaemons started during an election.
-                * A conservative approach is taken.  Give up and became a
-                * slave, postponing election of a master until first
-                * timer expires.
-                */
-               ntime.tv_sec = ntime.tv_usec = 0;
-               answer = readmsg(TSP_MASTERREQ, ANYADDR, &ntime, ntp);
-               if (answer != NULL) {
-                       if (!good_host_name(answer->tsp_name)) {
-                               suppress(&from, answer->tsp_name, ntp);
-                               ntp->status = NOMASTER;
-                       }
-                       return;
-               }
-
-               ntime.tv_sec = ntime.tv_usec = 0;
-               answer = readmsg(TSP_MASTERUP, ANYADDR, &ntime, ntp);
-               if (answer != NULL) {
-                       if (!good_host_name(answer->tsp_name)) {
-                               suppress(&from, answer->tsp_name, ntp);
-                               ntp->status = NOMASTER;
-                       }
-                       return;
-               }
-
-               ntime.tv_sec = ntime.tv_usec = 0;
-               answer = readmsg(TSP_ELECTION, ANYADDR, &ntime, ntp);
-               if (answer != NULL) {
-                       if (!good_host_name(answer->tsp_name)) {
-                               suppress(&from, answer->tsp_name, ntp);
-                               ntp->status = NOMASTER;
-                       }
-                       return;
-               }
-
-               if (Mflag)
-                       ntp->status = MASTER;
-               else
-                       ntp->status = NOMASTER;
-               return;
-       }
-
-       ntp->status = SLAVE;
-       strlcpy(mastername, answer->tsp_name, sizeof(mastername));
-       masteraddr = from;
-
-       /*
-        * If network has been partitioned, there might be other
-        * masters; tell the one we have just acknowledged that
-        * it has to gain control over the others.
-        */
-       ntime.tv_sec = 0;
-       ntime.tv_usec = 300000;
-       answer = readmsg(TSP_MASTERACK, ANYADDR, &ntime, ntp);
-       /*
-        * checking also not to send CONFLICT to ack'ed master
-        * due to duplicated MASTERACKs
-        */
-       if (answer != NULL &&
-           strcmp(answer->tsp_name, mastername) != 0) {
-               conflict.tsp_type = TSP_CONFLICT;
-               strlcpy(conflict.tsp_name, hostname, sizeof(conflict.tsp_name));
-               if (!acksend(&conflict, &masteraddr, mastername,
-                            TSP_ACK, 0, 0)) {
-                       syslog(LOG_ERR,
-                              "error on sending TSP_CONFLICT");
-               }
-       }
-}
-
-/*
- * based on the current network configuration, set the status, and count
- * networks;
- */
-void
-setstatus(void)
-{
-       struct netinfo *ntp;
-
-       status = 0;
-       nmasternets = nslavenets = nnets = nignorednets = 0;
-       if (trace)
-               fprintf(fd, "Net status:\n");
-       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-               switch ((int)ntp->status) {
-               case MASTER:
-                       nmasternets++;
-                       break;
-               case SLAVE:
-                       nslavenets++;
-                       break;
-               case NOMASTER:
-               case IGNORE:
-                       nignorednets++;
-                       break;
-               }
-               if (trace) {
-                       fprintf(fd, "\t%-16s", inet_ntoa(ntp->net));
-                       switch ((int)ntp->status) {
-                       case NOMASTER:
-                               fprintf(fd, "NOMASTER\n");
-                               break;
-                       case MASTER:
-                               fprintf(fd, "MASTER\n");
-                               break;
-                       case SLAVE:
-                               fprintf(fd, "SLAVE\n");
-                               break;
-                       case IGNORE:
-                               fprintf(fd, "IGNORE\n");
-                               break;
-                       default:
-                               fprintf(fd, "invalid state %d\n",
-                                       (int)ntp->status);
-                               break;
-                       }
-               }
-               nnets++;
-               status |= ntp->status;
-       }
-       status &= ~IGNORE;
-       if (trace)
-               fprintf(fd,
-                   "\tnets=%d masters=%d slaves=%d ignored=%d delay2=%ld\n",
-                   nnets, nmasternets, nslavenets, nignorednets, delay2);
-}
-
-void
-makeslave(struct netinfo *net)
-{
-       struct netinfo *ntp;
-
-       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-               if (ntp->status == SLAVE && ntp != net)
-                       ntp->status = IGNORE;
-       }
-       slavenet = net;
-}
-
-/*
- * Try to become master over ignored nets..
- */
-static void
-checkignorednets(void)
-{
-       struct netinfo *ntp;
-
-       for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-               if (!Mflag && ntp->status == SLAVE)
-                       break;
-
-               if (ntp->status == IGNORE || ntp->status == NOMASTER) {
-                       lookformaster(ntp);
-                       if (!Mflag && ntp->status == SLAVE)
-                               break;
-               }
-       }
-}
-
-/*
- * choose a good network on which to be a slave
- *     The ignored networks must have already been checked.
- *     Take a hint about for a good network.
- */
-static void
-pickslavenet(struct netinfo *ntp)
-{
-
-       if (slavenet != NULL && slavenet->status == SLAVE) {
-               makeslave(slavenet);            /* prune extras */
-               return;
-       }
-
-       if (ntp == NULL || ntp->status != SLAVE) {
-               for (ntp = nettab; ntp != NULL; ntp = ntp->next) {
-                       if (ntp->status == SLAVE)
-                               break;
-               }
-       }
-       makeslave(ntp);
-}
-
-/*
- * returns a random number in the range [inf, sup]
- */
-long
-casual(long inf, long sup)
-{
-       double value;
-
-       value = ((double)(random() & 0x7fffffff)) / (0x7fffffff*1.0);
-       return(inf + (sup - inf)*value);
-}
-
-char *
-date(void)
-{
-       struct  timeval tv;
-       time_t  tv_sec;
-
-       gettimeofday(&tv, NULL);
-       tv_sec = tv.tv_sec;
-       return (ctime(&tv_sec));
-}
-
-void
-addnetname(char *name)
-{
-       struct nets **netlist = &nets;
-
-       while (*netlist)
-               netlist = &((*netlist)->next);
-       *netlist = (struct nets *)malloc(sizeof **netlist);
-       if (*netlist == NULL)
-               errx(1, "malloc failed");
-       bzero((char *)*netlist, sizeof(**netlist));
-       (*netlist)->name = name;
-}
-
-/* note a host as trustworthy */
-static void
-add_good_host(char *name,
-             int perm)         /* 1=not part of the netgroup */
-{
-       struct goodhost *ghp;
-       struct hostent *hentp;
-
-       ghp = (struct goodhost*)malloc(sizeof(*ghp));
-       if (!ghp) {
-               syslog(LOG_ERR, "malloc failed");
-               exit(1);
-       }
-
-       bzero((char*)ghp, sizeof(*ghp));
-       strlcpy(&ghp->name[0], name, sizeof(ghp->name));
-       ghp->next = goodhosts;
-       ghp->perm = perm;
-       goodhosts = ghp;
-
-       hentp = gethostbyname(name);
-       if (NULL == hentp && perm)
-               warnx("unknown host %s", name);
-}
-
-
-/* update our image of the net-group of trustworthy hosts
- */
-void
-get_goodgroup(int force)
-{
-# define NG_DELAY (30*60*CLK_TCK)      /* 30 minutes */
-       static unsigned long last_update = -NG_DELAY;
-       unsigned long new_update;
-       struct goodhost *ghp, **ghpp;
-#ifdef HAVENIS
-       struct hosttbl *htp;
-       char *mach, *usr, *dom;
-#endif /* HAVENIS */
-       struct tms tm;
-
-
-       /* if no netgroup, then we are finished */
-       if (goodgroup == NULL || !Mflag)
-               return;
-
-       /* Do not chatter with the netgroup master too often.
-        */
-       new_update = times(&tm);
-       if (new_update < last_update + NG_DELAY
-           && !force)
-               return;
-       last_update = new_update;
-
-       /* forget the old temporary entries */
-       ghpp = &goodhosts;
-       while (NULL != (ghp = *ghpp)) {
-               if (!ghp->perm) {
-                       *ghpp = ghp->next;
-                       free((char*)ghp);
-               } else {
-                       ghpp = &ghp->next;
-               }
-       }
-
-#ifdef HAVENIS
-       /* quit now if we are not one of the trusted masters
-        */
-       if (!innetgr(goodgroup, &hostname[0], 0,0)) {
-               if (trace)
-                       fprintf(fd, "get_goodgroup: %s not in %s\n",
-                                     &hostname[0], goodgroup);
-               return;
-       }
-       if (trace)
-               fprintf(fd, "get_goodgroup: %s in %s\n",
-                                 &hostname[0], goodgroup);
-
-       /* mark the entire netgroup as trusted */
-       setnetgrent(goodgroup);
-       while (getnetgrent(&mach,&usr,&dom)) {
-               if (NULL != mach)
-                       add_good_host(mach,0);
-       }
-       endnetgrent();
-
-       /* update list of slaves */
-       for (htp = self.l_fwd; htp != &self; htp = htp->l_fwd) {
-               htp->good = good_host_name(&htp->name[0]);
-       }
-#endif /* HAVENIS */
-}
-
-
-/* see if a machine is trustworthy
- */
-int                                    /* 1=trust hp to change our date */
-good_host_name(char *name)
-{
-       struct goodhost *ghp = goodhosts;
-       char c;
-
-       if (!ghp || !Mflag)             /* trust everyone if no one named */
-               return 1;
-
-       c = *name;
-       do {
-               if (c == ghp->name[0]
-                   && !strcasecmp(name, ghp->name))
-                       return 1;       /* found him, so say so */
-       } while (NULL != (ghp = ghp->next));
-
-       if (!strcasecmp(name,hostname)) /* trust ourself */
-               return 1;
-
-       return 0;                       /* did not find him */
-}
diff --git a/usr.sbin/timed/timedc/Makefile b/usr.sbin/timed/timedc/Makefile
deleted file mode 100644 (file)
index 0f3c5f3..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#      @(#)Makefile    8.1 (Berkeley) 6/6/93
-# $FreeBSD: src/usr.sbin/timed/timedc/Makefile,v 1.3.6.1 2001/04/25 12:11:05 ru Exp $
-# $DragonFly: src/usr.sbin/timed/timedc/Makefile,v 1.2 2003/06/17 04:30:03 dillon Exp $
-
-PROG=  timedc
-SRCS=  cmds.c cmdtab.c timedc.c byteorder.c measure.c cksum.c
-MAN=   timedc.8
-BINMODE=4555
-.PATH: ${.CURDIR}/../timed
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/timed/timedc/cmds.c b/usr.sbin/timed/timedc/cmds.c
deleted file mode 100644 (file)
index 1e0fdcb..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)cmds.c  8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timedc/cmds.c,v 1.6.2.2 2001/08/31 08:02:06 kris Exp $
- */
-
-#include "timedc.h"
-#include <sys/file.h>
-
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-#include <netinet/ip_icmp.h>
-
-#include <err.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-
-#define TSPTYPES
-#include <protocols/timed.h>
-
-#ifdef sgi
-#include <bstring.h>
-#include <sys/clock.h>
-#else
-#define        SECHR   (60*60)
-#define        SECDAY  (24*SECHR)
-#endif /* sgi */
-
-# define DATE_PROTO "udp"
-# define DATE_PORT "time"
-
-
-int sock;
-int sock_raw;
-char myname[MAXHOSTNAMELEN];
-struct hostent *hp;
-struct sockaddr_in server;
-struct sockaddr_in dayaddr;
-extern int measure_delta;
-
-void bytenetorder(struct tsp *);
-void bytehostorder(struct tsp *);
-
-
-#define BU (2208988800UL)      /* seconds before UNIX epoch */
-
-
-/* compute the difference between our date and another machine
- */
-static int                             /* difference in days from our time */
-daydiff(char *hostname)
-{
-       int i;
-       int trials;
-       struct timeval tout, now;
-       fd_set ready;
-       struct sockaddr from;
-       int fromlen;
-       unsigned long sec;
-
-       /* wait 2 seconds between 10 tries */
-       tout.tv_sec = 2;
-       tout.tv_usec = 0;
-       for (trials = 0; trials < 10; trials++) {
-               /* ask for the time */
-               sec = 0;
-               if (sendto(sock, &sec, sizeof(sec), 0,
-                          (struct sockaddr*)&dayaddr, sizeof(dayaddr)) < 0) {
-                       warn("sendto(sock)");
-                       return 0;
-               }
-
-               for (;;) {
-                       FD_ZERO(&ready);
-                       FD_SET(sock, &ready);
-                       i = select(sock+1, &ready, NULL, NULL, &tout);
-                       if (i < 0) {
-                               if (errno == EINTR)
-                                       continue;
-                               warn("select(date read)");
-                               return 0;
-                       }
-                       if (0 == i)
-                               break;
-
-                       fromlen = sizeof(from);
-                       if (recvfrom(sock,&sec,sizeof(sec),0,
-                                    &from,&fromlen) < 0) {
-                               warn("recvfrom(date read)");
-                               return 0;
-                       }
-
-                       sec = ntohl(sec);
-                       if (sec < BU) {
-                               warnx("%s says it is before 1970: %lu",
-                                       hostname, sec);
-                               return 0;
-                       }
-                       sec -= BU;
-
-                       gettimeofday(&now, NULL);
-                       return (sec - now.tv_sec);
-               }
-       }
-
-       /* if we get here, we tried too many times */
-       warnx("%s will not tell us the date", hostname);
-       return 0;
-}
-
-
-/*
- * Clockdiff computes the difference between the time of the machine on
- * which it is called and the time of the machines given as argument.
- * The time differences measured by clockdiff are obtained using a sequence
- * of ICMP TSTAMP messages which are returned to the sender by the IP module
- * in the remote machine.
- * In order to compare clocks of machines in different time zones, the time
- * is transmitted (as a 32-bit value) in milliseconds since midnight UT.
- * If a hosts uses a different time format, it should set the high order
- * bit of the 32-bit quantity it transmits.
- * However, VMS apparently transmits the time in milliseconds since midnight
- * local time (rather than GMT) without setting the high order bit.
- * Furthermore, it does not understand daylight-saving time.  This makes
- * clockdiff behaving inconsistently with hosts running VMS.
- *
- * In order to reduce the sensitivity to the variance of message transmission
- * time, clockdiff sends a sequence of messages.  Yet, measures between
- * two `distant' hosts can be affected by a small error. The error can,
- * however, be reduced by increasing the number of messages sent in each
- * measurement.
- */
-void
-clockdiff(int argc, char *argv[])
-{
-       int measure_status;
-       extern int measure(u_long, u_long, char *, struct sockaddr_in*, int);
-       int avg_cnt;
-       long avg;
-       struct servent *sp;
-
-       if (argc < 2)  {
-               printf("usage: timedc clockdiff host ...\n");
-               return;
-       }
-
-       if (gethostname(myname, sizeof(myname) - 1) < 0)
-               err(1, "gethostname");
-
-       /* get the address for the date ready */
-       sp = getservbyname(DATE_PORT, DATE_PROTO);
-       if (!sp) {
-               warnx("%s/%s is an unknown service", DATE_PORT, DATE_PROTO);
-               dayaddr.sin_port = 0;
-       } else {
-               dayaddr.sin_port = sp->s_port;
-       }
-
-       while (argc > 1) {
-               argc--; argv++;
-               hp = gethostbyname(*argv);
-               if (hp == NULL) {
-                       warnx("%s: %s", *argv, hstrerror(h_errno));
-                       continue;
-               }
-
-               server.sin_family = hp->h_addrtype;
-               bcopy(hp->h_addr, &server.sin_addr.s_addr, hp->h_length);
-               for (avg_cnt = 0, avg = 0; avg_cnt < 16; avg_cnt++) {
-                       measure_status = measure(10000,100, *argv, &server, 1);
-                       if (measure_status != GOOD)
-                               break;
-                       avg += measure_delta;
-               }
-               if (measure_status == GOOD)
-                       measure_delta = avg/avg_cnt;
-
-               switch (measure_status) {
-               case HOSTDOWN:
-                       printf("%s is down\n", hp->h_name);
-                       continue;
-               case NONSTDTIME:
-                       printf("%s transmitts a non-standard time format\n",
-                              hp->h_name);
-                       continue;
-               case UNREACHABLE:
-                       printf("%s is unreachable\n", hp->h_name);
-                       continue;
-               }
-
-               /*
-                * Try to get the date only after using ICMP timestamps to
-                * get the time.  This is because the date protocol
-                * is optional.
-                */
-               if (dayaddr.sin_port != 0) {
-                       dayaddr.sin_family = hp->h_addrtype;
-                       bcopy(hp->h_addr, &dayaddr.sin_addr.s_addr,
-                             hp->h_length);
-                       avg = daydiff(*argv);
-                       if (avg > SECDAY) {
-                               printf("time on %s is %ld days ahead %s\n",
-                                      hp->h_name, avg/SECDAY, myname);
-                               continue;
-                       } else if (avg < -SECDAY) {
-                               printf("time on %s is %ld days behind %s\n",
-                                      hp->h_name, -avg/SECDAY, myname);
-                               continue;
-                       }
-               }
-
-               if (measure_delta > 0) {
-                       printf("time on %s is %d ms. ahead of time on %s\n",
-                              hp->h_name, measure_delta, myname);
-               } else if (measure_delta == 0) {
-                       printf("%s and %s have the same time\n",
-                              hp->h_name, myname);
-               } else {
-                       printf("time on %s is %d ms. behind time on %s\n",
-                              hp->h_name, -measure_delta, myname);
-               }
-       }
-       return;
-}
-
-
-/*
- * finds location of master timedaemon
- */
-void
-msite(int argc, char *argv[])
-{
-       int cc;
-       fd_set ready;
-       struct sockaddr_in dest;
-       int i, length;
-       struct sockaddr_in from;
-       struct timeval tout;
-       struct tsp msg;
-       struct servent *srvp;
-       char *tgtname;
-
-       if (argc < 1) {
-               printf("usage: timedc msite [host ...]\n");
-               return;
-       }
-
-       srvp = getservbyname("timed", "udp");
-       if (srvp == NULL) {
-               warnx("udp/timed: unknown service");
-               return;
-       }
-       dest.sin_port = srvp->s_port;
-       dest.sin_family = AF_INET;
-
-       if (gethostname(myname, sizeof(myname) - 1) < 0)
-               err(1, "gethostname");
-       i = 1;
-       do {
-               tgtname = (i >= argc) ? myname : argv[i];
-               hp = gethostbyname(tgtname);
-               if (hp == NULL) {
-                       warnx("%s: %s", tgtname, hstrerror(h_errno));
-                       continue;
-               }
-               bcopy(hp->h_addr, &dest.sin_addr.s_addr, hp->h_length);
-
-               strlcpy(msg.tsp_name, myname, sizeof(msg.tsp_name));
-               msg.tsp_type = TSP_MSITE;
-               msg.tsp_vers = TSPVERSION;
-               bytenetorder(&msg);
-               if (sendto(sock, &msg, sizeof(struct tsp), 0,
-                          (struct sockaddr*)&dest,
-                          sizeof(struct sockaddr)) < 0) {
-                       warn("sendto");
-                       continue;
-               }
-
-               tout.tv_sec = 15;
-               tout.tv_usec = 0;
-               FD_ZERO(&ready);
-               FD_SET(sock, &ready);
-               if (select(FD_SETSIZE, &ready, NULL, NULL, &tout)) {
-                       length = sizeof(from);
-                       cc = recvfrom(sock, &msg, sizeof(struct tsp), 0,
-                                     (struct sockaddr *)&from, &length);
-                       if (cc < 0) {
-                               warn("recvfrom");
-                               continue;
-                       }
-                       /*
-                        * The 4.3BSD protocol spec had a 32-byte tsp_name field, and
-                        * this is still OS-dependent.  Demand that the packet is at
-                        * least long enough to hold a 4.3BSD packet.
-                        */
-                       if (cc < (sizeof(struct tsp) - MAXHOSTNAMELEN + 32)) {
-                               fprintf(stderr, 
-                                  "short packet (%d/%zu bytes) from %s\n",
-                                  cc, sizeof(struct tsp) - MAXHOSTNAMELEN + 32,
-                                  inet_ntoa(from.sin_addr));
-                               continue;
-                       }
-                       bytehostorder(&msg);
-                       if (msg.tsp_type == TSP_ACK) {
-                               printf("master timedaemon at %s is %s\n",
-                                      tgtname, msg.tsp_name);
-                       } else {
-                               if (msg.tsp_type >= TSPTYPENUMBER)
-                                       printf("unknown ack received: %u\n",
-                                               msg.tsp_type);
-                               else    
-                                       printf("wrong ack received: %s\n",
-                                               tsptype[msg.tsp_type]);
-                       }
-               } else {
-                       printf("communication error with %s\n", tgtname);
-               }
-       } while (++i < argc);
-}
-
-/*
- * quits timedc
- */
-void
-quit(void)
-{
-
-       exit(0);
-}
-
-
-/*
- * Causes the election timer to expire on the selected hosts
- * It sends just one udp message per machine, relying on
- * reliability of communication channel.
- */
-void
-testing(int argc, char *argv[])
-{
-       struct servent *srvp;
-       struct sockaddr_in sin;
-       struct tsp msg;
-
-       if (argc < 2)  {
-               printf("usage: timedc election host1 [host2 ...]\n");
-               return;
-       }
-
-       srvp = getservbyname("timed", "udp");
-       if (srvp == NULL) {
-               warnx("udp/timed: unknown service");
-               return;
-       }
-
-       while (argc > 1) {
-               argc--; argv++;
-               hp = gethostbyname(*argv);
-               if (hp == NULL) {
-                       warnx("%s: %s", *argv, hstrerror(h_errno));
-                       argc--; argv++;
-                       continue;
-               }
-               sin.sin_port = srvp->s_port;
-               sin.sin_family = hp->h_addrtype;
-               bcopy(hp->h_addr, &sin.sin_addr.s_addr, hp->h_length);
-
-               msg.tsp_type = TSP_TEST;
-               msg.tsp_vers = TSPVERSION;
-               if (gethostname(myname, sizeof(myname) - 1) < 0)
-                       err(1, "gethostname");
-               strlcpy(msg.tsp_name, myname, sizeof(msg.tsp_name));
-               bytenetorder(&msg);
-               if (sendto(sock, &msg, sizeof(struct tsp), 0,
-                          (struct sockaddr*)&sin,
-                          sizeof(struct sockaddr)) < 0) {
-                       warn("sendto");
-               }
-       }
-}
-
-
-/*
- * Enables or disables tracing on local timedaemon
- */
-void
-tracing(int argc, char *argv[])
-{
-       int onflag;
-       int length;
-       int cc;
-       fd_set ready;
-       struct sockaddr_in dest;
-       struct sockaddr_in from;
-       struct timeval tout;
-       struct tsp msg;
-       struct servent *srvp;
-
-       if (argc != 2) {
-               printf("usage: timedc trace { on | off }\n");
-               return;
-       }
-
-       srvp = getservbyname("timed", "udp");
-       if (srvp == NULL) {
-               warnx("udp/timed: unknown service");
-               return;
-       }
-       dest.sin_port = srvp->s_port;
-       dest.sin_family = AF_INET;
-
-       if (gethostname(myname, sizeof(myname) - 1) < 0)
-               err(1, "gethostname");
-       hp = gethostbyname(myname);
-       bcopy(hp->h_addr, &dest.sin_addr.s_addr, hp->h_length);
-
-       if (strcmp(argv[1], "on") == 0) {
-               msg.tsp_type = TSP_TRACEON;
-               onflag = ON;
-       } else {
-               msg.tsp_type = TSP_TRACEOFF;
-               onflag = OFF;
-       }
-
-       strcpy(msg.tsp_name, myname);
-       msg.tsp_vers = TSPVERSION;
-       bytenetorder(&msg);
-       if (sendto(sock, &msg, sizeof(struct tsp), 0,
-                  (struct sockaddr*)&dest, sizeof(struct sockaddr)) < 0) {
-               warn("sendto");
-               return;
-       }
-
-       tout.tv_sec = 5;
-       tout.tv_usec = 0;
-       FD_ZERO(&ready);
-       FD_SET(sock, &ready);
-       if (select(FD_SETSIZE, &ready, NULL, NULL, &tout)) {
-               length = sizeof(from);
-               cc = recvfrom(sock, &msg, sizeof(struct tsp), 0,
-                             (struct sockaddr *)&from, &length);
-               if (cc < 0) {
-                       warn("recvfrom");
-                       return;
-               }
-               /*
-                * The 4.3BSD protocol spec had a 32-byte tsp_name field, and
-                * this is still OS-dependent.  Demand that the packet is at
-                * least long enough to hold a 4.3BSD packet.
-                */
-               if (cc < (sizeof(struct tsp) - MAXHOSTNAMELEN + 32)) {
-                       fprintf(stderr, "short packet (%d/%zu bytes) from %s\n",
-                           cc, sizeof(struct tsp) - MAXHOSTNAMELEN + 32,
-                           inet_ntoa(from.sin_addr));
-                       return;
-               }
-               bytehostorder(&msg);
-               if (msg.tsp_type == TSP_ACK)
-                       if (onflag)
-                               printf("timed tracing enabled\n");
-                       else
-                               printf("timed tracing disabled\n");
-               else {
-                       if (msg.tsp_type >= TSPTYPENUMBER)
-                               printf("unknown ack received: %u\n",
-                                       msg.tsp_type);
-                       else    
-                               printf("wrong ack received: %s\n",
-                                               tsptype[msg.tsp_type]);
-               }
-       } else
-               printf("communication error\n");
-}
-
-int
-priv_resources(void)
-{
-       int port;
-       struct sockaddr_in sin;
-
-       sock = socket(AF_INET, SOCK_DGRAM, 0);
-       if (sock < 0) {
-               warn("opening socket");
-               return(-1);
-       }
-
-       sin.sin_family = AF_INET;
-       sin.sin_addr.s_addr = 0;
-       for (port = IPPORT_RESERVED - 1; port > IPPORT_RESERVED / 2; port--) {
-               sin.sin_port = htons((u_short)port);
-               if (bind(sock, (struct sockaddr*)&sin, sizeof (sin)) >= 0)
-                       break;
-               if (errno != EADDRINUSE && errno != EADDRNOTAVAIL) {
-                       warn("bind");
-                       close(sock);
-                       return(-1);
-               }
-       }
-       if (port == IPPORT_RESERVED / 2) {
-               warnx("all reserved ports in use");
-               close(sock);
-               return(-1);
-       }
-
-       sock_raw = socket(AF_INET, SOCK_RAW, IPPROTO_ICMP);
-       if (sock_raw < 0)  {
-               warn("opening raw socket");
-               close(sock);
-               return(-1);
-       }
-       return(1);
-}
diff --git a/usr.sbin/timed/timedc/cmdtab.c b/usr.sbin/timed/timedc/cmdtab.c
deleted file mode 100644 (file)
index 9907a23..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- * Copyright (c) 1983, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#)cmdtab.c        8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timedc/cmdtab.c,v 1.3 1999/08/28 01:20:21 peter Exp $
- * $DragonFly: src/usr.sbin/timed/timedc/cmdtab.c,v 1.2 2003/06/17 04:30:03 dillon Exp $
- */
-
-#include "timedc.h"
-
-char   clockdiffhelp[] =       "measures clock differences between machines";
-char   helphelp[] =            "gets help on commands";
-char   msitehelp[] =           "finds location of master";
-char   quithelp[] =            "exits timedc";
-char   testinghelp[] =         "causes election timers to expire";
-char   tracinghelp[] =         "turns tracing on or off";
-
-struct cmd cmdtab[] = {
-       { "clockdiff",  clockdiffhelp,  clockdiff,      0 },
-       { "election",   testinghelp,    testing,        1 },
-       { "help",       helphelp,       help,           0 },
-       { "msite",      msitehelp,      msite,          0 },
-       { "quit",       quithelp,       quit,           0 },
-       { "trace",      tracinghelp,    tracing,        1 },
-       { "?",          helphelp,       help,           0 },
-};
-
-int    NCMDS = sizeof (cmdtab) / sizeof (cmdtab[0]);
diff --git a/usr.sbin/timed/timedc/extern.h b/usr.sbin/timed/timedc/extern.h
deleted file mode 100644 (file)
index 1a463c0..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*-
- * Copyright (c) 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)extern.h    8.1 (Berkeley) 6/6/93
- */
-
-#if __STDC__
-struct tsp;
-#endif
-
-extern struct cmd cmdtab[];
-
-void   bytehostorder(struct tsp *);
-void   bytenetorder(struct tsp *);
-void   clockdiff(int, char *[]);
-void   help(int, char *[]);
-void   intr(int) __dead2;
-void   makeargv(void);
-void   msite(int, char *[]);
-int    priv_resources(void);
-void   quit(void) __dead2;
-void   testing(int, char *[]);
-void   tracing(int, char *[]);
diff --git a/usr.sbin/timed/timedc/timedc.8 b/usr.sbin/timed/timedc/timedc.8
deleted file mode 100644 (file)
index c80432f..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-.\" Copyright (c) 1980, 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)timedc.8   8.1 (Berkeley) 6/6/93
-.\" $FreeBSD: src/usr.sbin/timed/timedc/timedc.8,v 1.6.2.6 2003/03/11 22:31:34 trhodes Exp $
-.\" $DragonFly: src/usr.sbin/timed/timedc/timedc.8,v 1.5 2007/05/19 17:32:13 swildner Exp $
-.\"
-.Dd June 6, 1993
-.Dt TIMEDC 8
-.Os
-.Sh NAME
-.Nm timedc
-.Nd timed control program
-.Sh SYNOPSIS
-.Nm
-.Op Ar command Op Ar argument ...
-.Sh DESCRIPTION
-The
-.Nm
-utility is used to control the operation of the
-.Xr timed 8
-program.
-It may be used to:
-.Bl -bullet
-.It
-Measure the differences between machines' clocks,
-.It
-Find the location where the master time server is running,
-.It
-Enable or disable tracing of messages received by
-.Xr timed 8 ,
-and
-.It
-Perform various debugging actions.
-.El
-.Pp
-Without any arguments,
-.Nm
-will prompt for commands from the standard input.
-If arguments are supplied,
-.Nm
-interprets the first argument as a command and the remaining
-arguments as parameters to the command.  The standard input
-may be redirected causing
-.Nm
-to read commands from a file.
-Commands may be abbreviated;
-recognized commands are:
-.Pp
-.Bl -tag -width Ds -compact
-.It Ic \&? Op Ar command ...
-.Pp
-.It Ic help Op Ar command ...
-Print a short description of each command specified in the argument list,
-or, if no arguments are given, a list of the recognized commands.
-.Pp
-.It Ic clockdiff Ar host ...
-Compute the differences between the clock of the host machine
-and the clocks of the machines given as arguments.
-.Pp
-.It Ic msite Op Ar host ...
-Show the master time server for specified host(s).
-.Pp
-.It Xo
-.Ic trace
-.Li \&{ Ar on Li \&|
-.Ar off \&}
-.Xc
-Enable or disable the tracing of incoming messages to
-.Xr timed 8
-in the file
-.Pa /var/log/timed.log .
-.Pp
-.It Ic election Ar host1 Op Ar host2 ...
-Asks the daemon
-on the target host to reset its "election" timers and to ensure that
-a time master has been elected.
-.Pp
-.It Ic quit
-Exit from
-.Nm .
-.El
-.Pp
-Other commands may be included for use in testing and debugging
-.Xr timed 8 ;
-the help command and
-the program source may be consulted for details.
-.Sh FILES
-.Bl -tag -width ".Pa /var/log/timed.masterlog" -compact
-.It Pa /var/log/timed.log
-tracing file for
-.Xr timed 8
-.It Pa /var/log/timed.masterlog
-log file for master
-.Xr timed 8
-.El
-.Sh DIAGNOSTICS
-.Bl -diag
-.It ?Ambiguous command
-abbreviation matches more than one command
-.It ?Invalid command
-no match found
-.It ?Privileged command
-command can be executed by root only
-.El
-.Sh SEE ALSO
-.Xr date 1 ,
-.Xr adjtime 2 ,
-.Xr icmp 4 ,
-.Xr timed 8
-.Rs
-.%T "TSP: The Time Synchronization Protocol for UNIX 4.3BSD"
-.%A R. Gusella
-.%A S. Zatti
-.Re
-.Sh HISTORY
-The
-.Nm
-utility appeared in
-.Bx 4.3 .
diff --git a/usr.sbin/timed/timedc/timedc.c b/usr.sbin/timed/timedc/timedc.c
deleted file mode 100644 (file)
index aefc8c9..0000000
+++ /dev/null
@@ -1,240 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * @(#) Copyright (c) 1985, 1993 The Regents of the University of California.  All rights reserved.
- * @(#)timedc.c        8.1 (Berkeley) 6/6/93
- * $FreeBSD: src/usr.sbin/timed/timedc/timedc.c,v 1.5 2003/10/11 07:35:35 tjr Exp $
- */
-
-#include "timedc.h"
-#include <ctype.h>
-#include <err.h>
-#include <setjmp.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <string.h>
-#include <syslog.h>
-#include <unistd.h>
-
-int trace = 0;
-FILE *fd = NULL;
-int    margc;
-int    fromatty;
-#define MAX_MARGV      20
-char   *margv[MAX_MARGV];
-char   cmdline[200];
-jmp_buf        toplevel;
-static struct cmd *getcmd(char *);
-
-int
-main(int argc, char **argv)
-{
-       struct cmd *c;
-
-       openlog("timedc", 0, LOG_AUTH);
-
-       /*
-        * security dictates!
-        */
-       if (priv_resources() < 0)
-               errx(1, "could not get privileged resources");
-       setuid(getuid());
-
-       if (--argc > 0) {
-               c = getcmd(*++argv);
-               if (c == (struct cmd *)-1) {
-                       printf("?Ambiguous command\n");
-                       exit(1);
-               }
-               if (c == NULL) {
-                       printf("?Invalid command\n");
-                       exit(1);
-               }
-               if (c->c_priv && getuid()) {
-                       printf("?Privileged command\n");
-                       exit(1);
-               }
-               (*c->c_handler)(argc, argv);
-               exit(0);
-       }
-
-       fromatty = isatty(fileno(stdin));
-       if (setjmp(toplevel))
-               putchar('\n');
-       signal(SIGINT, intr);
-       for (;;) {
-               if (fromatty) {
-                       printf("timedc> ");
-                       fflush(stdout);
-               }
-               if (fgets(cmdline, sizeof(cmdline), stdin) == 0)
-                       quit();
-               if (cmdline[0] == 0)
-                       break;
-               makeargv();
-               if (margv[0] == NULL)
-                       continue;
-               c = getcmd(margv[0]);
-               if (c == (struct cmd *)-1) {
-                       printf("?Ambiguous command\n");
-                       continue;
-               }
-               if (c == NULL) {
-                       printf("?Invalid command\n");
-                       continue;
-               }
-               if (c->c_priv && getuid()) {
-                       printf("?Privileged command\n");
-                       continue;
-               }
-               (*c->c_handler)(margc, margv);
-       }
-       return 0;
-}
-
-void
-intr(int signo)
-{
-       if (!fromatty)
-               exit(0);
-       longjmp(toplevel, 1);
-}
-
-static struct cmd *
-getcmd(char *name)
-{
-       char *p, *q;
-       struct cmd *c, *found;
-       int nmatches, longest;
-       extern int NCMDS;
-
-       longest = 0;
-       nmatches = 0;
-       found = NULL;
-       for (c = cmdtab; c < &cmdtab[NCMDS]; c++) {
-               p = c->c_name;
-               for (q = name; *q == *p++; q++)
-                       if (*q == 0)            /* exact match? */
-                               return(c);
-               if (!*q) {                      /* the name was a prefix */
-                       if (q - name > longest) {
-                               longest = q - name;
-                               nmatches = 1;
-                               found = c;
-                       } else if (q - name == longest)
-                               nmatches++;
-               }
-       }
-       if (nmatches > 1)
-               return((struct cmd *)-1);
-       return(found);
-}
-
-/*
- * Slice a string up into argc/argv.
- */
-void
-makeargv(void)
-{
-       char *cp;
-       char **argp = margv;
-
-       margc = 0;
-       for (cp = cmdline; margc < MAX_MARGV - 1 && *cp;) {
-               while (isspace(*cp))
-                       cp++;
-               if (*cp == '\0')
-                       break;
-               *argp++ = cp;
-               margc += 1;
-               while (*cp != '\0' && !isspace(*cp))
-                       cp++;
-               if (*cp == '\0')
-                       break;
-               *cp++ = '\0';
-       }
-       *argp++ = NULL;
-}
-
-#define HELPINDENT (sizeof("directory"))
-
-/*
- * Help command.
- */
-void
-help(int argc, char **argv)
-{
-       struct cmd *c;
-
-       if (argc == 1) {
-               int i, j, w;
-               int columns, width = 0, lines;
-               extern int NCMDS;
-
-               printf("Commands may be abbreviated.  Commands are:\n\n");
-               for (c = cmdtab; c < &cmdtab[NCMDS]; c++) {
-                       int len = strlen(c->c_name);
-
-                       if (len > width)
-                               width = len;
-               }
-               width = (width + 8) &~ 7;
-               columns = 80 / width;
-               if (columns == 0)
-                       columns = 1;
-               lines = (NCMDS + columns - 1) / columns;
-               for (i = 0; i < lines; i++) {
-                       for (j = 0; j < columns; j++) {
-                               c = cmdtab + j * lines + i;
-                               printf("%s", c->c_name);
-                               if (c + lines >= &cmdtab[NCMDS]) {
-                                       printf("\n");
-                                       break;
-                               }
-                               w = strlen(c->c_name);
-                               while (w < width) {
-                                       w = (w + 8) &~ 7;
-                                       putchar('\t');
-                               }
-                       }
-               }
-               return;
-       }
-       while (--argc > 0) {
-               char *arg;
-               arg = *++argv;
-               c = getcmd(arg);
-               if (c == (struct cmd *)-1)
-                       printf("?Ambiguous help command %s\n", arg);
-               else if (c == NULL)
-                       printf("?Invalid help command %s\n", arg);
-               else
-                       printf("%-*s\t%s\n", (int)HELPINDENT,
-                               c->c_name, c->c_help);
-       }
-}
diff --git a/usr.sbin/timed/timedc/timedc.h b/usr.sbin/timed/timedc/timedc.h
deleted file mode 100644 (file)
index ec51580..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/*-
- * Copyright (c) 1985, 1993
- *     The Regents of the University of California.  All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the University nor the names of its contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- *     @(#)timedc.h    8.1 (Berkeley) 6/6/93
- */
-
-#include <sys/param.h>
-#include <sys/time.h>
-#ifdef sgi
-#include <sys/uio.h>
-#endif
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <errno.h>
-#include <netdb.h>
-#include <stdio.h>
-
-#define ON             1
-#define OFF            0
-
-#define GOOD           1
-#define UNREACHABLE    2
-#define NONSTDTIME     3
-#define HOSTDOWN       0x7fffffff
-
-struct cmd {
-       char    *c_name;                /* command name */
-       char    *c_help;                /* help message */
-       void    (*c_handler)();         /* routine to do the work */
-       int     c_priv;                 /* privileged command */
-};
-
-#include "extern.h"