summaryrefslogtreecommitdiffstats
path: root/usr.sbin
diff options
context:
space:
mode:
Diffstat (limited to 'usr.sbin')
-rw-r--r--usr.sbin/adduser/userids1
-rw-r--r--usr.sbin/arp/arp4.4124
-rw-r--r--usr.sbin/bootparamd/bootparamd/bootparam_prot.h81
-rw-r--r--usr.sbin/bootparamd/bootparamd/bootparam_prot.x100
-rw-r--r--usr.sbin/bootparamd/bootparamd/bootparam_prot_xdr.c166
-rw-r--r--usr.sbin/bootpd/Announce63
-rw-r--r--usr.sbin/bootpd/Changes245
-rw-r--r--usr.sbin/bootpd/ConvOldTab.sh141
-rw-r--r--usr.sbin/bootpd/Installation29
-rw-r--r--usr.sbin/bootpd/Makefile.UNIX184
-rw-r--r--usr.sbin/bootpd/Problems47
-rw-r--r--usr.sbin/bootpd/README133
-rw-r--r--usr.sbin/bootpd/bootp.h147
-rw-r--r--usr.sbin/bootpd/bootpd.8305
-rw-r--r--usr.sbin/bootpd/bootpd.c1380
-rw-r--r--usr.sbin/bootpd/bootpd.h211
-rw-r--r--usr.sbin/bootpd/bootpef.852
-rw-r--r--usr.sbin/bootpd/bootpef.c347
-rw-r--r--usr.sbin/bootpd/bootpgw.c675
-rw-r--r--usr.sbin/bootpd/bootptab.5395
-rw-r--r--usr.sbin/bootpd/bootptab.cmu124
-rw-r--r--usr.sbin/bootpd/bootptab.mcs92
-rw-r--r--usr.sbin/bootpd/bootptest.874
-rw-r--r--usr.sbin/bootpd/bootptest.c500
-rw-r--r--usr.sbin/bootpd/bootptest.h30
-rw-r--r--usr.sbin/bootpd/bptypes.h23
-rw-r--r--usr.sbin/bootpd/dovend.c413
-rw-r--r--usr.sbin/bootpd/dovend.h13
-rw-r--r--usr.sbin/bootpd/dumptab.c382
-rw-r--r--usr.sbin/bootpd/getif.c145
-rw-r--r--usr.sbin/bootpd/getif.h7
-rw-r--r--usr.sbin/bootpd/hash.c425
-rw-r--r--usr.sbin/bootpd/hash.h158
-rw-r--r--usr.sbin/bootpd/hwaddr.h39
-rw-r--r--usr.sbin/bootpd/lookup.c126
-rw-r--r--usr.sbin/bootpd/lookup.h15
-rw-r--r--usr.sbin/bootpd/patchlevel.h3
-rw-r--r--usr.sbin/bootpd/print-bootp.c493
-rw-r--r--usr.sbin/bootpd/readfile.c2097
-rw-r--r--usr.sbin/bootpd/readfile.h19
-rw-r--r--usr.sbin/bootpd/report.c154
-rw-r--r--usr.sbin/bootpd/report.h13
-rw-r--r--usr.sbin/bootpd/syslog.conf63
-rw-r--r--usr.sbin/bootpd/trygetea.c46
-rw-r--r--usr.sbin/bootpd/trygetif.c68
-rw-r--r--usr.sbin/bootpd/trylook.c50
-rw-r--r--usr.sbin/bootpd/tzone.c44
-rw-r--r--usr.sbin/bootpd/tzone.h3
-rw-r--r--usr.sbin/cron/cron/bitstring.3168
-rw-r--r--usr.sbin/cron/cron/bitstring.h122
-rw-r--r--usr.sbin/cron/cron/putman.sh23
-rw-r--r--usr.sbin/crunch/crunchgen/crunched_skel.c107
-rw-r--r--usr.sbin/ncrcontrol/ncrcontrol.1286
-rw-r--r--usr.sbin/pkg_manage/pkg_del-inst.hlp18
-rw-r--r--usr.sbin/pkg_manage/pkg_view-inst.hlp12
-rw-r--r--usr.sbin/sliplogin/slip.hosts11
-rw-r--r--usr.sbin/sliplogin/slip.login12
-rw-r--r--usr.sbin/spkrtest/spkrtest.sh38
-rw-r--r--usr.sbin/tcpdump/tcpdump/bpf_image.c282
-rw-r--r--usr.sbin/tcpdump/tcpdump/etherent.c144
-rw-r--r--usr.sbin/tcpdump/tcpdump/etherent.h34
-rw-r--r--usr.sbin/tcpdump/tcpdump/etherproto.h70
-rw-r--r--usr.sbin/tcpdump/tcpdump/gencode.c1384
-rw-r--r--usr.sbin/tcpdump/tcpdump/gencode.h156
-rw-r--r--usr.sbin/tcpdump/tcpdump/inet.c172
-rw-r--r--usr.sbin/tcpdump/tcpdump/md.c35
-rw-r--r--usr.sbin/tcpdump/tcpdump/nametoaddr.c258
-rw-r--r--usr.sbin/tcpdump/tcpdump/nametoaddr.h43
-rw-r--r--usr.sbin/tcpdump/tcpdump/optimize.c1871
-rw-r--r--usr.sbin/tcpdump/tcpdump/os.c26
-rw-r--r--usr.sbin/tcpdump/tcpdump/pcap.c209
-rw-r--r--usr.sbin/tcpdump/tcpdump/savefile.c303
-rw-r--r--usr.sbin/tcpdump/tcpdump/savefile.h75
-rw-r--r--usr.sbin/tcpdump/tcpdump/tcpgram.y232
-rw-r--r--usr.sbin/update/Makefile6
-rw-r--r--usr.sbin/update/update.874
-rw-r--r--usr.sbin/update/update.c75
-rw-r--r--usr.sbin/xntpd/Config200
-rw-r--r--usr.sbin/xntpd/Config.local198
-rw-r--r--usr.sbin/xntpd/Config.local.dist198
-rw-r--r--usr.sbin/xntpd/Config.sed14
-rw-r--r--usr.sbin/xntpd/adjtime/Makefile.tmpl53
-rw-r--r--usr.sbin/xntpd/adjtime/README23
-rw-r--r--usr.sbin/xntpd/adjtime/adjtime.c101
-rw-r--r--usr.sbin/xntpd/adjtime/adjtime.h63
-rw-r--r--usr.sbin/xntpd/adjtime/adjtimed.c496
-rw-r--r--usr.sbin/xntpd/authstuff/Makefile.tmpl92
-rw-r--r--usr.sbin/xntpd/clockstuff/Makefile.tmpl60
-rw-r--r--usr.sbin/xntpd/compilers/README5
-rw-r--r--usr.sbin/xntpd/compilers/aux2.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/aux3.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/decosf1.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/domainos.cc1
-rw-r--r--usr.sbin/xntpd/compilers/hpux-adj.cc1
-rw-r--r--usr.sbin/xntpd/compilers/hpux-adj.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/hpux.cc1
-rw-r--r--usr.sbin/xntpd/compilers/hpux.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/hpux10+.cc1
-rw-r--r--usr.sbin/xntpd/compilers/irix4.cc2
-rw-r--r--usr.sbin/xntpd/compilers/linux.gcc2
-rw-r--r--usr.sbin/xntpd/compilers/mips.cc1
-rw-r--r--usr.sbin/xntpd/compilers/sinix-m.cc1
-rw-r--r--usr.sbin/xntpd/compilers/sinix-m.gcc2
-rw-r--r--usr.sbin/xntpd/compilers/sunos4.bsd.cc1
-rw-r--r--usr.sbin/xntpd/compilers/sunos4.bsd.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/sunos4.posix.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/sunos5.1.gcc2
-rw-r--r--usr.sbin/xntpd/compilers/sunos5.2.gcc2
-rw-r--r--usr.sbin/xntpd/compilers/ultrix.bsd.cc2
-rw-r--r--usr.sbin/xntpd/compilers/ultrix.bsd.gcc1
-rw-r--r--usr.sbin/xntpd/compilers/ultrix.posix.cc2
-rw-r--r--usr.sbin/xntpd/compilers/ultrix.posix.gcc1
-rw-r--r--usr.sbin/xntpd/gadget/README84
-rw-r--r--usr.sbin/xntpd/gadget/adt0127.lpr1427
-rw-r--r--usr.sbin/xntpd/gadget/art01.lpr890
-rw-r--r--usr.sbin/xntpd/gadget/art02.lpr893
-rw-r--r--usr.sbin/xntpd/gadget/dd0124.lpr813
-rw-r--r--usr.sbin/xntpd/gadget/gadget.lst332
-rw-r--r--usr.sbin/xntpd/gadget/gadget.s012277
-rw-r--r--usr.sbin/xntpd/gadget/gadget.s02288
-rw-r--r--usr.sbin/xntpd/gadget/gen0102.lpr1973
-rw-r--r--usr.sbin/xntpd/gadget/sm0228.lpr744
-rw-r--r--usr.sbin/xntpd/gadget/sst0126.lpr1118
-rw-r--r--usr.sbin/xntpd/hints/README12
-rw-r--r--usr.sbin/xntpd/hints/aux159
-rw-r--r--usr.sbin/xntpd/hints/bsdi61
-rw-r--r--usr.sbin/xntpd/hints/decosf140
-rw-r--r--usr.sbin/xntpd/hints/hpux92
-rw-r--r--usr.sbin/xntpd/hints/linux9
-rw-r--r--usr.sbin/xntpd/hints/notes-xntp-v3119
-rw-r--r--usr.sbin/xntpd/hints/parse105
-rw-r--r--usr.sbin/xntpd/hints/refclocks32
-rw-r--r--usr.sbin/xntpd/hints/rs600056
-rw-r--r--usr.sbin/xntpd/hints/sgi74
-rw-r--r--usr.sbin/xntpd/hints/solaris87
-rw-r--r--usr.sbin/xntpd/hints/sun417
-rw-r--r--usr.sbin/xntpd/hints/svr4-dell6
-rw-r--r--usr.sbin/xntpd/kernel/Makefile.tmpl59
-rw-r--r--usr.sbin/xntpd/kernel/README90
-rw-r--r--usr.sbin/xntpd/kernel/README.streams86
-rw-r--r--usr.sbin/xntpd/kernel/tty_chu.c276
-rw-r--r--usr.sbin/xntpd/kernel/tty_chu_STREAMS.c603
-rw-r--r--usr.sbin/xntpd/kernel/tty_clk.c317
-rw-r--r--usr.sbin/xntpd/kernel/tty_clk_STREAMS.c266
-rw-r--r--usr.sbin/xntpd/lib/Makefile.tmpl75
-rw-r--r--usr.sbin/xntpd/lib/authdes.c845
-rw-r--r--usr.sbin/xntpd/machines/README5
-rw-r--r--usr.sbin/xntpd/machines/aix3.210
-rw-r--r--usr.sbin/xntpd/machines/aux29
-rw-r--r--usr.sbin/xntpd/machines/aux39
-rw-r--r--usr.sbin/xntpd/machines/bsdi8
-rw-r--r--usr.sbin/xntpd/machines/convexos1010
-rw-r--r--usr.sbin/xntpd/machines/convexos99
-rw-r--r--usr.sbin/xntpd/machines/decosf19
-rw-r--r--usr.sbin/xntpd/machines/dell.svr49
-rw-r--r--usr.sbin/xntpd/machines/domainos7
-rw-r--r--usr.sbin/xntpd/machines/freebsd8
-rw-r--r--usr.sbin/xntpd/machines/hpux8
-rw-r--r--usr.sbin/xntpd/machines/hpux-adj8
-rw-r--r--usr.sbin/xntpd/machines/hpux10+8
-rw-r--r--usr.sbin/xntpd/machines/i3867
-rw-r--r--usr.sbin/xntpd/machines/i386svr49
-rw-r--r--usr.sbin/xntpd/machines/irix49
-rw-r--r--usr.sbin/xntpd/machines/irix59
-rw-r--r--usr.sbin/xntpd/machines/linux8
-rw-r--r--usr.sbin/xntpd/machines/mips9
-rw-r--r--usr.sbin/xntpd/machines/netbsd8
-rw-r--r--usr.sbin/xntpd/machines/next9
-rw-r--r--usr.sbin/xntpd/machines/ptx8
-rw-r--r--usr.sbin/xntpd/machines/sequent8
-rw-r--r--usr.sbin/xntpd/machines/sinix-m11
-rw-r--r--usr.sbin/xntpd/machines/sony6
-rw-r--r--usr.sbin/xntpd/machines/sunos4.bsd11
-rw-r--r--usr.sbin/xntpd/machines/sunos4.posix11
-rw-r--r--usr.sbin/xntpd/machines/sunos5.111
-rw-r--r--usr.sbin/xntpd/machines/sunos5.211
-rw-r--r--usr.sbin/xntpd/machines/svr410
-rw-r--r--usr.sbin/xntpd/machines/ultrix.bsd7
-rw-r--r--usr.sbin/xntpd/machines/ultrix.posix7
-rw-r--r--usr.sbin/xntpd/machines/univel10
-rw-r--r--usr.sbin/xntpd/machines/unixware110
-rw-r--r--usr.sbin/xntpd/machines/vax6
-rw-r--r--usr.sbin/xntpd/ntpdate/Makefile.tmpl70
-rw-r--r--usr.sbin/xntpd/ntpq/Makefile.tmpl68
-rw-r--r--usr.sbin/xntpd/ntptrace/Makefile.tmpl70
-rw-r--r--usr.sbin/xntpd/parse/Makefile.kernel76
-rw-r--r--usr.sbin/xntpd/parse/Makefile.tmpl111
-rw-r--r--usr.sbin/xntpd/patches/patch.1790
-rw-r--r--usr.sbin/xntpd/patches/patch.101925
-rw-r--r--usr.sbin/xntpd/patches/patch.11536
-rw-r--r--usr.sbin/xntpd/patches/patch.1266
-rw-r--r--usr.sbin/xntpd/patches/patch.1368
-rw-r--r--usr.sbin/xntpd/patches/patch.14116
-rw-r--r--usr.sbin/xntpd/patches/patch.1539
-rw-r--r--usr.sbin/xntpd/patches/patch.16267
-rw-r--r--usr.sbin/xntpd/patches/patch.1750
-rw-r--r--usr.sbin/xntpd/patches/patch.1899
-rw-r--r--usr.sbin/xntpd/patches/patch.19599
-rw-r--r--usr.sbin/xntpd/patches/patch.2129
-rw-r--r--usr.sbin/xntpd/patches/patch.201031
-rw-r--r--usr.sbin/xntpd/patches/patch.2154
-rw-r--r--usr.sbin/xntpd/patches/patch.22296
-rw-r--r--usr.sbin/xntpd/patches/patch.2380
-rw-r--r--usr.sbin/xntpd/patches/patch.24474
-rw-r--r--usr.sbin/xntpd/patches/patch.25474
-rw-r--r--usr.sbin/xntpd/patches/patch.2636
-rw-r--r--usr.sbin/xntpd/patches/patch.2786
-rw-r--r--usr.sbin/xntpd/patches/patch.28454
-rw-r--r--usr.sbin/xntpd/patches/patch.2952
-rw-r--r--usr.sbin/xntpd/patches/patch.33032
-rw-r--r--usr.sbin/xntpd/patches/patch.3073
-rw-r--r--usr.sbin/xntpd/patches/patch.3183
-rw-r--r--usr.sbin/xntpd/patches/patch.3289
-rw-r--r--usr.sbin/xntpd/patches/patch.3375
-rw-r--r--usr.sbin/xntpd/patches/patch.34303
-rw-r--r--usr.sbin/xntpd/patches/patch.35914
-rw-r--r--usr.sbin/xntpd/patches/patch.3642
-rw-r--r--usr.sbin/xntpd/patches/patch.37204
-rw-r--r--usr.sbin/xntpd/patches/patch.38226
-rw-r--r--usr.sbin/xntpd/patches/patch.3978
-rw-r--r--usr.sbin/xntpd/patches/patch.44719
-rw-r--r--usr.sbin/xntpd/patches/patch.4092
-rw-r--r--usr.sbin/xntpd/patches/patch.4150
-rw-r--r--usr.sbin/xntpd/patches/patch.4238
-rw-r--r--usr.sbin/xntpd/patches/patch.4348
-rw-r--r--usr.sbin/xntpd/patches/patch.549
-rw-r--r--usr.sbin/xntpd/patches/patch.6550
-rw-r--r--usr.sbin/xntpd/patches/patch.7274
-rw-r--r--usr.sbin/xntpd/patches/patch.844
-rw-r--r--usr.sbin/xntpd/patches/patch.983
-rw-r--r--usr.sbin/xntpd/scripts/hpadjtime.sh18
-rw-r--r--usr.sbin/xntpd/util/Makefile.tmpl62
-rw-r--r--usr.sbin/xntpd/xntpd/Makefile.tmpl168
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c593
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c999
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c718
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c1575
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c977
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c999
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c3617
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c645
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c998
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c709
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c1575
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c1342
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c999
-rw-r--r--usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c3605
-rw-r--r--usr.sbin/xntpd/xntpdc/Makefile.tmpl68
-rw-r--r--usr.sbin/xntpd/xntpres/Makefile.tmpl68
-rw-r--r--usr.sbin/xntpd/xntpres/README6
-rw-r--r--usr.sbin/xntpd/xntpres/xntpres.c850
-rw-r--r--usr.sbin/xten/Install.notes222
252 files changed, 0 insertions, 72856 deletions
diff --git a/usr.sbin/adduser/userids b/usr.sbin/adduser/userids
deleted file mode 100644
index 3cda32f..0000000
--- a/usr.sbin/adduser/userids
+++ /dev/null
@@ -1 +0,0 @@
-515
diff --git a/usr.sbin/arp/arp4.4 b/usr.sbin/arp/arp4.4
deleted file mode 100644
index 0cd7161..0000000
--- a/usr.sbin/arp/arp4.4
+++ /dev/null
@@ -1,124 +0,0 @@
-.\" Copyright (c) 1985, 1986, 1988, 1994
-.\" 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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.
-.\"
-.\" @(#)arp4.4 6.5 (Berkeley) 4/18/94
-.\"
-.Dd April 18, 1994
-.Dt ARP 4
-.Os BSD 4
-.Sh NAME
-.Nm arp
-.Nd Address Resolution Protocol
-.Sh SYNOPSIS
-.Em "pseudo-device ether"
-.Sh DESCRIPTION
-The Address Resolution Protocol (ARP) is a protocol used to dynamically
-map between Internet host addresses and 10Mb/s Ethernet addresses.
-It is used by all the 10Mb/s Ethernet interface drivers.
-It is not specific to Internet protocols or to 10Mb/s Ethernet,
-but this implementation currently supports only that combination.
-.Pp
-ARP caches Internet-Ethernet address mappings.
-When an interface requests a mapping for an address not in the cache,
-ARP queues the message which requires the mapping and broadcasts
-a message on the associated network requesting the address mapping.
-If a response is provided, the new mapping is cached and any pending
-message is transmitted.
-ARP will queue at most one packet while waiting for a response to a
-mapping request;
-only the most recently ``transmitted'' packet is kept.
-If the target host does not respond after several requests,
-the host is considered to be down for a short period (normally 20 seconds),
-allowing an error to be returned to transmission attempts during this
-interval.
-The error is
-.Li EHOSTDOWN
-for a non-responding destination host, and
-.Li EHOSTUNREACH
-for a non-responding router.
-.Pp
-The ARP cache is stored in the system routing table as
-dynamically-created host routes.
-The route to a directly-attached Ethernet network is installed as a
-.Dq cloning
-route (one with the
-.Li RTF_CLONING
-flag set),
-causing routes to individual hosts on that network to be created on
-demand.
-These routes time out periodically (normally 20 minutes after validated;
-entries are not validated when not in use).
-An entry for a host which is not responding is a
-.Dq reject
-route (one with the
-.Li RTF_REJECT
-flag set).
-.Pp
-ARP entries may be added, deleted or changed with the
-.Xr arp 8
-utility.
-Manually-added entries may be temporary or permanent,
-and may be
-.Dq published ,
-in which case the system will respond to ARP requests for that host
-as if it were the target of the request.
-.Pp
-In the past,
-ARP was used to negotiate the use of a trailer encapsulation.
-This is no longer supported.
-.Pp
-ARP watches passively for hosts impersonating the local host (i.e. a host
-which responds to an ARP mapping request for the local host's address).
-.Sh DIAGNOSTICS
-.Em "duplicate IP address %x!! sent from ethernet address: %x:%x:%x:%x:%x:%x."
-ARP has discovered another host on the local network which responds to
-mapping requests for its own Internet address with a different Ethernet
-address, generally indicating that two hosts are attempting to use the
-same Internet address.
-.Sh SEE ALSO
-.Xr inet 4 ,
-.Xr route 4 ,
-.Xr arp 8 ,
-.Xr ifconfig 8 ,
-.Xr route 8
-.sp
-.Rs
-.%A Plummer, D.
-.%B "An Ethernet Address Resolution Protocol"
-.%T RFC826
-.Re
-.Rs
-.%A Leffler, S.J.
-.%A Karels, M.J.
-.%B "Trailer Encapsulations
-.%T RFC893
-.Re
-
diff --git a/usr.sbin/bootparamd/bootparamd/bootparam_prot.h b/usr.sbin/bootparamd/bootparamd/bootparam_prot.h
deleted file mode 100644
index 66c7227..0000000
--- a/usr.sbin/bootparamd/bootparamd/bootparam_prot.h
+++ /dev/null
@@ -1,81 +0,0 @@
-#include <rpc/types.h>
-#include <sys/time.h>
-#include <sys/errno.h>
-#include <nfs/nfs.h>
-#define MAX_MACHINE_NAME 255
-#define MAX_PATH_LEN 1024
-#define MAX_FILEID 32
-#define IP_ADDR_TYPE 1
-
-typedef char *bp_machine_name_t;
-bool_t xdr_bp_machine_name_t();
-
-
-typedef char *bp_path_t;
-bool_t xdr_bp_path_t();
-
-
-typedef char *bp_fileid_t;
-bool_t xdr_bp_fileid_t();
-
-
-struct ip_addr_t {
- char net;
- char host;
- char lh;
- char impno;
-};
-typedef struct ip_addr_t ip_addr_t;
-bool_t xdr_ip_addr_t();
-
-
-struct bp_address {
- int address_type;
- union {
- ip_addr_t ip_addr;
- } bp_address_u;
-};
-typedef struct bp_address bp_address;
-bool_t xdr_bp_address();
-
-
-struct bp_whoami_arg {
- bp_address client_address;
-};
-typedef struct bp_whoami_arg bp_whoami_arg;
-bool_t xdr_bp_whoami_arg();
-
-
-struct bp_whoami_res {
- bp_machine_name_t client_name;
- bp_machine_name_t domain_name;
- bp_address router_address;
-};
-typedef struct bp_whoami_res bp_whoami_res;
-bool_t xdr_bp_whoami_res();
-
-
-struct bp_getfile_arg {
- bp_machine_name_t client_name;
- bp_fileid_t file_id;
-};
-typedef struct bp_getfile_arg bp_getfile_arg;
-bool_t xdr_bp_getfile_arg();
-
-
-struct bp_getfile_res {
- bp_machine_name_t server_name;
- bp_address server_address;
- bp_path_t server_path;
-};
-typedef struct bp_getfile_res bp_getfile_res;
-bool_t xdr_bp_getfile_res();
-
-
-#define BOOTPARAMPROG ((u_long)100026)
-#define BOOTPARAMVERS ((u_long)1)
-#define BOOTPARAMPROC_WHOAMI ((u_long)1)
-extern bp_whoami_res *bootparamproc_whoami_1();
-#define BOOTPARAMPROC_GETFILE ((u_long)2)
-extern bp_getfile_res *bootparamproc_getfile_1();
-
diff --git a/usr.sbin/bootparamd/bootparamd/bootparam_prot.x b/usr.sbin/bootparamd/bootparamd/bootparam_prot.x
deleted file mode 100644
index 6d3c3e7..0000000
--- a/usr.sbin/bootparamd/bootparamd/bootparam_prot.x
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
- * unrestricted use provided that this legend is included on all tape
- * media and as a part of the software program in whole or part. Users
- * may copy or modify Sun RPC without charge, but are not authorized
- * to license or distribute it to anyone else except as part of a product or
- * program developed by the user.
- *
- * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
- * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
- *
- * Sun RPC is provided with no support and without any obligation on the
- * part of Sun Microsystems, Inc. to assist in its use, correction,
- * modification or enhancement.
- *
- * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
- * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
- * OR ANY PART THEREOF.
- *
- * In no event will Sun Microsystems, Inc. be liable for any lost revenue
- * or profits or other special, indirect and consequential damages, even if
- * Sun has been advised of the possibility of such damages.
- *
- * Sun Microsystems, Inc.
- * 2550 Garcia Avenue
- * Mountain View, California 94043
- */
-
-/*
- * RPC for bootparms service.
- * There are two procedures:
- * WHOAMI takes a net address and returns a client name and also a
- * likely net address for routing
- * GETFILE takes a client name and file identifier and returns the
- * server name, server net address and pathname for the file.
- * file identifiers typically include root, swap, pub and dump
- */
-
-#ifdef RPC_HDR
-%#include <rpc/types.h>
-%#include <sys/time.h>
-%#include <sys/errno.h>
-%#include <nfs/nfs.h>
-#else
-%#ifndef lint
-%/*static char sccsid[] = "from: @(#)bootparam_prot.x 1.2 87/06/24 Copyr 1987 Sun Micro";*/
-%/*static char sccsid[] = "from: @(#)bootparam_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
-%static char rcsid[] = "$Id: bootparam_prot.x,v 1.1 1994/08/04 19:01:44 wollman Exp $";
-%#endif /* not lint */
-#endif
-
-const MAX_MACHINE_NAME = 255;
-const MAX_PATH_LEN = 1024;
-const MAX_FILEID = 32;
-const IP_ADDR_TYPE = 1;
-
-typedef string bp_machine_name_t<MAX_MACHINE_NAME>;
-typedef string bp_path_t<MAX_PATH_LEN>;
-typedef string bp_fileid_t<MAX_FILEID>;
-
-struct ip_addr_t {
- char net;
- char host;
- char lh;
- char impno;
-};
-
-union bp_address switch (int address_type) {
- case IP_ADDR_TYPE:
- ip_addr_t ip_addr;
-};
-
-struct bp_whoami_arg {
- bp_address client_address;
-};
-
-struct bp_whoami_res {
- bp_machine_name_t client_name;
- bp_machine_name_t domain_name;
- bp_address router_address;
-};
-
-struct bp_getfile_arg {
- bp_machine_name_t client_name;
- bp_fileid_t file_id;
-};
-
-struct bp_getfile_res {
- bp_machine_name_t server_name;
- bp_address server_address;
- bp_path_t server_path;
-};
-
-program BOOTPARAMPROG {
- version BOOTPARAMVERS {
- bp_whoami_res BOOTPARAMPROC_WHOAMI(bp_whoami_arg) = 1;
- bp_getfile_res BOOTPARAMPROC_GETFILE(bp_getfile_arg) = 2;
- } = 1;
-} = 100026;
diff --git a/usr.sbin/bootparamd/bootparamd/bootparam_prot_xdr.c b/usr.sbin/bootparamd/bootparamd/bootparam_prot_xdr.c
deleted file mode 100644
index 72fc2ee..0000000
--- a/usr.sbin/bootparamd/bootparamd/bootparam_prot_xdr.c
+++ /dev/null
@@ -1,166 +0,0 @@
-#include <rpc/rpc.h>
-#include "/a/wpaul/CVSWORK/src/usr.sbin/bootparamd/bootparamd/bootparam_prot.h"
-#ifndef lint
-/*static char sccsid[] = "from: @(#)bootparam_prot.x 1.2 87/06/24 Copyr 1987 Sun Micro";*/
-/*static char sccsid[] = "from: @(#)bootparam_prot.x 2.1 88/08/01 4.0 RPCSRC";*/
-static char rcsid[] = "$Id: bootparam_prot.x,v 1.1 1994/08/04 19:01:44 wollman Exp $";
-#endif /* not lint */
-
-
-bool_t
-xdr_bp_machine_name_t(xdrs, objp)
- XDR *xdrs;
- bp_machine_name_t *objp;
-{
- if (!xdr_string(xdrs, objp, MAX_MACHINE_NAME)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_path_t(xdrs, objp)
- XDR *xdrs;
- bp_path_t *objp;
-{
- if (!xdr_string(xdrs, objp, MAX_PATH_LEN)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_fileid_t(xdrs, objp)
- XDR *xdrs;
- bp_fileid_t *objp;
-{
- if (!xdr_string(xdrs, objp, MAX_FILEID)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_ip_addr_t(xdrs, objp)
- XDR *xdrs;
- ip_addr_t *objp;
-{
- if (!xdr_char(xdrs, &objp->net)) {
- return (FALSE);
- }
- if (!xdr_char(xdrs, &objp->host)) {
- return (FALSE);
- }
- if (!xdr_char(xdrs, &objp->lh)) {
- return (FALSE);
- }
- if (!xdr_char(xdrs, &objp->impno)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_address(xdrs, objp)
- XDR *xdrs;
- bp_address *objp;
-{
- if (!xdr_int(xdrs, &objp->address_type)) {
- return (FALSE);
- }
- switch (objp->address_type) {
- case IP_ADDR_TYPE:
- if (!xdr_ip_addr_t(xdrs, &objp->bp_address_u.ip_addr)) {
- return (FALSE);
- }
- break;
- default:
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_whoami_arg(xdrs, objp)
- XDR *xdrs;
- bp_whoami_arg *objp;
-{
- if (!xdr_bp_address(xdrs, &objp->client_address)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_whoami_res(xdrs, objp)
- XDR *xdrs;
- bp_whoami_res *objp;
-{
- if (!xdr_bp_machine_name_t(xdrs, &objp->client_name)) {
- return (FALSE);
- }
- if (!xdr_bp_machine_name_t(xdrs, &objp->domain_name)) {
- return (FALSE);
- }
- if (!xdr_bp_address(xdrs, &objp->router_address)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_getfile_arg(xdrs, objp)
- XDR *xdrs;
- bp_getfile_arg *objp;
-{
- if (!xdr_bp_machine_name_t(xdrs, &objp->client_name)) {
- return (FALSE);
- }
- if (!xdr_bp_fileid_t(xdrs, &objp->file_id)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
-
-
-bool_t
-xdr_bp_getfile_res(xdrs, objp)
- XDR *xdrs;
- bp_getfile_res *objp;
-{
- if (!xdr_bp_machine_name_t(xdrs, &objp->server_name)) {
- return (FALSE);
- }
- if (!xdr_bp_address(xdrs, &objp->server_address)) {
- return (FALSE);
- }
- if (!xdr_bp_path_t(xdrs, &objp->server_path)) {
- return (FALSE);
- }
- return (TRUE);
-}
-
-
diff --git a/usr.sbin/bootpd/Announce b/usr.sbin/bootpd/Announce
deleted file mode 100644
index e4ae04c..0000000
--- a/usr.sbin/bootpd/Announce
+++ /dev/null
@@ -1,63 +0,0 @@
-
-This is an enhanced version of the CMU BOOTP server which was derived
-from the original BOOTP server created by Bill Croft at Stanford.
-This version merges most of the enhancements and bug-fixes from the
-NetBSD, Columbia, and other versions.
-
-New features in version 2.4 include:
-
- Added a simple BOOTP gateway program: bootpgw
- Allow host name anywhere IP address is expected.
- Automatically lookup the IP address when the name of a
- bootptab entry is a valid hostname.
- (Dummy entries names should start with '.')
- Merged changes from NetBSD and Columbia versions.
- Merged changes for Solaris-2.X and SVR4 systems.
- Combined bootptest into the bootp release.
- Merged tag 18 support (:ef=...:) from Jason Zions.
- Use :ef=extension_file_name: and make the
- extension files for all clients using bootpef.
- Merged HP compatibility (:ra=...:) from David R Linn.
- Allows you to override the reply address.
- (i.e. send the reply to a broadcast address)
- Add /etc/ethers support for NetBSD.
- More systems support getether (Ultrix, OSF, NetBSD)
- Added RFC 1533 tags 40,41,42
- :yd=<NIS domain>:ys=<NIS server>:nt=<NTP server>:
- ConvOldTab.sh to convert old (1.1) bootptab to new format.
- Permits extended-length replies with more option data.
-
-Problems fixed in this version:
-
- Fixed references to free host structures.
- (used to cause core dump on Solaris)
- Remove change that added null terminator to string options.
- (this annoyed some clients...)
- Add missing symbols to dump routine, fix order.
- Works (again) with no -DSYSLOGD defined.
- Fixed several more NULL references in readfile.
- Added proper length checks to option insertions.
- Fixed bootptest IP address printing.
- Cleaned-up signed/unsigned and byteorder bugs.
- Added SVR4/Streams support to getif and getether
- Removed extra newlines in syslog messages.
- Specify facility code when calling syslog(3)
- When lookup_hwa fails, assume numeric HW address.
-
-Systems on which I have seen this code work:
- SunOS 4.X (Solaris 1.X)
- SunOS 5.X (Solaris 2.X)
- System V/386 Rel. 4.0
-
-Systems on which others say this code works:
- CDC EP/IX (1.4.3, 2.1.1)
- DEC Ultrix (4.2, 4.3)
- NetBSD (Current-8/94)
- OSF/1 (DEC Alpha CPU)
-
-Please direct questions, comments, and bug reports to:
- <bootp@andrew.cmu.edu>
-
-Gordon W. Ross Mercury Computer Systems
-gwr@mc.com 199 Riverneck Road
-508-256-1300 Chelmsford, MA 01824-2820
diff --git a/usr.sbin/bootpd/Changes b/usr.sbin/bootpd/Changes
deleted file mode 100644
index 0616548..0000000
--- a/usr.sbin/bootpd/Changes
+++ /dev/null
@@ -1,245 +0,0 @@
-Changes, most recent first
-Date, <email> Real Name
- what...
-
---> bootp-2.4.0
-
-08/20/94 gwr@mc.com (Gordon W. Ross)
- Fix code to build bootfile name based on combination of
- client requested name and bootfile specifications.
- Behave similarly with or without CHECK_FILE_ACCESS.
-
-07/30/94 Dirk Koeppen <dirk@incom.de>
- Add "min wait" option (mw) to cause bootpd to ignore
- requests from clients that have not waited long enough.
- Add code to honor client requests containing the DHCP
- option "Maximum Message Size" and use its value to
- determine the size of the reply message.
-
---> bootp-2.3.8
-
-06/25/94 Christos Zoulas <christos@deshaw.com>
- Add "-h" flag to override host name (affects default IP
- address provided in reply messages. (Also minor bug fix)
-
-05/27/94 gwr@mc.com (Gordon W. Ross)
- Add code to call "arp -s IPADDR HWADDR" on systems
- that do not provide an SIOCSARP ioctl (i.e. NetBSD)
-
---> bootp-2.3.7
-
-05/05/94 Walter Wong <wcw+@CMU.EDU>
- Reduce noize at debug level one, where log messages
- are generated only for hosts that are recognized
- and replied to by bootpd. (At request of HP folks.)
-
-04/30/94 gwr@mc.com (Gordon W. Ross)
- Use memxxx functions unless USE_BFUNCS is defined.
- Added -f <file> option to bootptest (requested file).
-
-04/29/94 tpaquett@ita.lgc.com (Trevor Paquette)
- Remove call to haddr_conv802() in sendreply().
- The setarp should get the non-transformed address.
-
-04/27/94 gwr@mc.com
- Improve logic for building bootfile pathname, so a path
- will be put in the reply if either the client or bootpd
- specifies a boot file. (Needed for NetBSD diskless boot)
-
-04/25/94 shamash@boxhill.com (Ari Shamash)
- Fix prs_inetaddr() so it allows '_' in hostnames.
-
-04/16/94 gwr@mc.com (Gordon W. Ross)
- Fix setarp for SVR4 (needs to use I_STR ioctl)
- Thanks to several people: (all sent the same fix)
- Barney Wolff <barney@databus.com>,
- bear@upsys.se (Bj|rn Sj|holm),
- Michael Kuschke <Michael.Kuschke@Materna.DE>,
-
-03/25/95 Ulrich Heuer </I=zhhi9/G=Ulrich/S=Heuer/@zhflur.ubs.ubs.ch>
- Make option string lengths not include a null terminator.
- The trailing null breaks some clients.
-
-03/15/94 "Edmund J. Sutcliffe" <ejs1@tower.york.ac.uk>
- Add support for the "EX" option: Execute a program
- before sending a BOOTREPLY to a client. Support for
- this option is conditional on YORK_EX_OPTION.
-
-03/10/94 Nigel Metheringham <nigelm@ohm.york.ac.uk>
- Make getether.c work on Linux.
-
-03/09/94 Koch@Math.Uni-Duisburg.DE (Peter Koch)
- Add missing MANDIR definition to Makefile.
-
-03/08/94 Jeroen.Scheerder@let.ruu.nl
- Fix args to report in getether code for Ultrix.
- Run install individually for each program.
-
---> bootp-2.3.6
-03/07/94 gwr@mc.com
- Cleanup for release (run gnu indent, tab-size=4)
-
-02/24/94 Jeroen.Scheerder@let.ruu.nl
- Allow underscore in host names - readfile.c:goodname()
- Add ConvOldTab.sh - converts 1.1 bootptab to new format.
-
-02/20/94 gwr@mc.com (Gordon W. Ross)
- Make readfile tolerant of hardware addresses that start
- with a letter. (If lookup_hwa() fails, assume numeric.)
- Fix whitespace skip before :vm= auto: and avoid lookup.
-
-02/12/94 walker@zk3.dec.com (Mary Walker)
- Added support for 64-bit longs (for the DEC Alpha)
- Allow ieee802 hardware address in bit-reversed oreder
-
-02/07/94 hl@tekla.fi (Harald Lundberg)
- Fix conflict with DUMP_FILE in syslog.h on OSF1
- Use int for (struct bootp).bp_xid (for DEC Alpha)
- Added Ultrix support to bootptest (getether)
-
-02/06/94 brezak@ch.hp.com (John Brezak)
- Add man-page and install targets to Makefile.NetBSD
- Add getether support for NetBSD
-
-02/05/94 gwr@mc.com (Gordon W. Ross)
- Added tags 40,41,42 (NIS domain, NIS server, NTP server)
- Add stub to getether for machines not yet supported.
-
---> bootp-2.3.5
-01/29/94 gwr@mc.com (Gordon W. Ross)
- Make bootpgw put a correct address in "giaddr" when
- the client request came via broadcast.
-
-01/22/94 gwr@mc.com (Gordon W. Ross)
- Fix syslog call (missing "facility" code)
- Add SVR4/Streams support to getif() and getether()
- Fix getif bug (matched when it should not)
- Macro-ize lots of similar cases in readfile.c
-
-12/27/93 brezak@ch.hp.com (John Brezak)
- Remove all newlines passed to syslog(3)
- Add /etc/ethers support for NetBSD.
-
-12/18/93 gwr@mc.com (Gordon W. Ross)
- Fix bootptest IP address printing.
- Fix byte-order bugs in bootpgw and bootptest.
- Clean-up signed/unsigned mismatches.
- Back out SLIP support changes for now
- (code fragment saved in ToDo).
-
---> bootp-2.3.4 (beta test release)
-12/12/93 gwr@mc.com (Gordon W. Ross)
- Fixed several more NULL references in readfile.
- Added proper length checks to option insertions.
-
---> bootp-2.3.3 (beta test release)
-12/09/93 gwr@mc.com (Gordon W. Ross)
- Added ASSERT checks to readfile.c:fill_defaults()
-
-12/08/93 brezak@ch.hp.com (John Brezak)
- New Makefile.NetBSD
- Added setsid() and #ifdef TIOCNOTTY
- (bootpd.c, bootpgw.c)
- Moved #include <net/if.h> out of #ifdef SUNOS
- Fixed several multiple declaration problems
-
-12/04/93 gwr@mc.com (Gordon W. Ross)
- Re-implemented Extension File support
- based on work by Jason Zions <jazz@hal.com>
- Added support for Reply-Address-Override to support
- HP clients (need reply sent to broadcast address)
- from David R. Linn <drl@vuse.vanderbilt.edu>
-
---> bootp-2.3.2 (beta test release)
-11/27/93 gwr@mc.com (Gordon W. Ross)
- Incorporated bootptest into the bootp release.
- Added ANSI function prototypes everywhere.
-
-11/17/93 dpm@depend.com (David P. Maynard)
- Added automatic SLIP address determination.
- (This is NOT dynamic IP address assignment.)
- Cleaned up some type warnings from gcc.
-
-11/11/93 gwr@mc.com (Gordon W. Ross)
- Works (again) with no -DSYSLOGD defined.
- Provide a default value for the subnet mask.
- More #ifdef's for SunOS specific code (lookup_hwa)
- Added a simple BOOTP gateway program: bootpgw
- Reorganized for more code sharing (with bootpgw)
-
---> bootp-2.3.1 (alpha test release)
-11/08/93 gwr@mc.com (Gordon W. Ross)
- Back-out changes to honor option structure in request
- (this needs to be a per-client option).
- Merged changes from NetBSD and Columbia versions.
- Allow host name anywhere IP address is expected.
- Add null terminators to option strings.
- Add missing symbols to dump routine, dump symbols
- in alphabetical order, one tag per line.
-
---> bootp-2.2.D (posted as patch 2)
-10/19/93 gwr@mc.com (Gordon W. Ross)
- Fix references to free memory (leads to core dumps).
-
---> bootp-2.2.C (posted as patch 1)
-10/14/93 gwr@mc.com (Gordon W. Ross)
- Fix data access alignment problems on SPARC/Solaris.
-
---> bootp-2.2.B (posted to usenet)
-10/11/93 gwr@mc.com (Gordon W. Ross)
- Allow extended-length BOOTP packets (more vendor options)
- Honor option format specified in client requests.
- Added Solaris-2.X changes from db@sunbim.be (Danny Backx).
-
-All history before this point may be inaccurate. Please send
-changes if any of the credits are incorrect. -gwr
-
---> bootp-2.2+NetBSD released
-08/27/93 brezak@ch.hp.com (John Brezak)
- Added RFC 1396 support (tags 14-17)
-
---> bootp-2.2+NetBSD (version?)
-??/??/93 mckim@lerc.nasa.gov (Jim McKim)
- Ported to NetBSD (see Makefile.NetBSD)
- Set server host name in responses.
- Check all interfaces in address match routine.
-
---> bootp-2.2+FdC released
-01/27/93 <fdc@watsun.cc.columbia.edu> Frank da Cruz
- Added RFC 1395 information: Merit dump file,
- client domain name, swap server address, root path.
-
---> bootp-2.2alpha released
-11/14/91 <walt+@cmu.edu> Walter L. Wimer
- Add "td" to TFTP directory for "secure" (chroot) TFTP.
- Add "sa" tag to set explicit server address.
- Automatically determine if child of inetd.
- Use RFC 1048 format when request has magic number zero.
- Fixed various bugs. Give bootptab a separate man page.
-
---> bootp-2.1 released
-01/09/89 <walt+@cmu.edu> Walter L. Wimer
- Check world read bit on TFTP boot file.
- Add support for rfc1085 "bootfile size" tag.
- Add generic tags. Fix byte order of rfc1048 data.
- Fix various crashing bugs.
-
---> bootp-2.0 released
-07/15/88 <walt+@cmu.edu> Walter L. Wimer
- Added vendor information to conform to RFC1048.
- Adopted termcap-like file format to support above.
- Added hash table lookup instead of linear search.
- Other cleanups.
-
---> bootp-1.3(?) released
-07/24/87 <ddp@andrew.cmu.edu> Drew D. Perkins
- Modified to use syslog instead of Kovar's
- routines. Add debugging dumps. Many other fixups.
-
---> bootp-1.2(?) released
-07/30/86 David Kovar at Carnegie Mellon University
- Modified to work at CMU.
-
---> bootp-1.1 released
-01/22/86 Bill Croft at Stanford University
- Original created.
diff --git a/usr.sbin/bootpd/ConvOldTab.sh b/usr.sbin/bootpd/ConvOldTab.sh
deleted file mode 100644
index 00683f0..0000000
--- a/usr.sbin/bootpd/ConvOldTab.sh
+++ /dev/null
@@ -1,141 +0,0 @@
-#!/bin/sh
-# convert_bootptab Jeroen.Scheerder@let.ruu.nl 02/25/94
-# This script can be used to convert bootptab files in old format
-# to new (termcap-like) bootptab files
-#
-# The old format - real entries are commented out by '###'
-#
-# Old-style bootp files consist of two sections.
-# The first section has two entries:
-# First, a line that specifies the home directory
-# (where boot file paths are relative to)
-
-###/tftpboot
-
-# The next non-empty non-comment line specifies the default bootfile
-
-###no-file
-
-# End of first section - indicated by '%%' at the start of the line
-
-###%%
-
-# The remainder of this file contains one line per client
-# interface with the information shown by the table headings
-# below. The host name is also tried as a suffix for the
-# bootfile when searching the home directory (that is,
-# bootfile.host)
-#
-# Note that htype is always 1, indicating the hardware type Ethernet.
-# Conversion therefore always yields ':ha=ether:'.
-#
-# host htype haddr iaddr bootfile
-#
-
-###somehost 1 00:0b:ad:01:de:ad 128.128.128.128 dummy
-
-# That's all for the description of the old format.
-# For the new-and-improved format, see bootptab(5).
-
-set -u$DX
-
-case $#
-in 2 ) OLDTAB=$1 ; NEWTAB=$2 ;;
- * ) echo "Usage: `basename $0` <Input> <Output>"
- exit 1
-esac
-
-if [ ! -r $OLDTAB ]
-then
- echo "`basename $0`: $OLDTAB does not exist or is unreadable."
- exit 1
-fi
-
-if touch $NEWTAB 2> /dev/null
-then
- :
-else
- echo "`basename $0`: cannot write to $NEWTAB."
- exit 1
-fi
-
-
-cat << END_OF_HEADER >> $NEWTAB
-# /etc/bootptab: database for bootp server (/etc/bootpd)
-# This file was generated automagically
-
-# Blank lines and lines beginning with '#' are ignored.
-#
-# Legend: (see bootptab.5)
-# first field -- hostname (not indented)
-# bf -- bootfile
-# bs -- bootfile size in 512-octet blocks
-# cs -- cookie servers
-# df -- dump file name
-# dn -- domain name
-# ds -- domain name servers
-# ef -- extension file
-# gw -- gateways
-# ha -- hardware address
-# hd -- home directory for bootfiles
-# hn -- host name set for client
-# ht -- hardware type
-# im -- impress servers
-# ip -- host IP address
-# lg -- log servers
-# lp -- LPR servers
-# ns -- IEN-116 name servers
-# ra -- reply address
-# rl -- resource location protocol servers
-# rp -- root path
-# sa -- boot server address
-# sm -- subnet mask
-# sw -- swap server
-# tc -- template host (points to similar host entry)
-# td -- TFTP directory
-# to -- time offset (seconds)
-# ts -- time servers
-# vm -- vendor magic number
-# Tn -- generic option tag n
-#
-# Be careful about including backslashes where they're needed. Weird (bad)
-# things can happen when a backslash is omitted where one is intended.
-# Also, note that generic option data must be either a string or a
-# sequence of bytes where each byte is a two-digit hex value.
-
-# First, we define a global entry which specifies the stuff every host uses.
-# (Host name lookups are relative to the domain: your.domain.name)
-
-END_OF_HEADER
-
-# Fix up HW addresses in aa:bb:cc:dd:ee:ff and aa-bb-cc-dd-ee-ff style first
-# Then awk our stuff together
-sed -e 's/[:-]//g' < $OLDTAB | \
-nawk 'BEGIN { PART = 0 ; FIELD=0 ; BOOTPATH="unset" ; BOOTFILE="unset" }
- /^%%/ {
- PART = 1
- printf ".default:\\\n\t:ht=ether:\\\n\t:hn:\\\n\t:dn=your.domain.name:\\\n\t:ds=your,dns,servers:\\\n\t:sm=255.255.0.0:\\\n\t:hd=%s:\\\n\t:rp=%s:\\\n\t:td=%s:\\\n\t:bf=%s:\\\n\t:to=auto:\n\n", BOOTPATH, BOOTPATH, BOOTPATH, BOOTFILE
- next
- }
- /^$/ { next }
- /^#/ { next }
- {
- if ( PART == 0 && FIELD < 2 )
- {
- if ( FIELD == 0 ) BOOTPATH=$1
- if ( FIELD == 1 ) BOOTFILE=$1
- FIELD++
- }
- }
- {
- if ( PART == 1 )
- {
- HOST=$1
- HA=$3
- IP=$4
- BF=$5
- printf "%s:\\\n\t:tc=.default:\\\n\t:ha=0x%s:\\\n\t:ip=%s:\\\n\t:bf=%s:\n", HOST, HA, IP, BF
- }
- }' >> $NEWTAB
-
-exit 0
diff --git a/usr.sbin/bootpd/Installation b/usr.sbin/bootpd/Installation
deleted file mode 100644
index 466cabc..0000000
--- a/usr.sbin/bootpd/Installation
+++ /dev/null
@@ -1,29 +0,0 @@
-
-Installation instructions for SunOS
-
-Compile the executable:
-For SunOS 4.X:
- make sunos4
-For SunOS 5.X: (Solaris)
- make sunos5
-
-Install the executables:
-
- make install
-
-Edit (or create) the bootptab:
-(See bootptab.sample and bootptab.5 manual entry)
- edit /etc/bootptab
-
-Edit /etc/services to add these two lines:
-bootps 67/udp bootp # BOOTP Server
-bootpc 68/udp # BOOTP Client
-
-Edit /etc/inetd.conf to add the line:
-bootp dgram udp wait root /usr/etc/bootpd bootpd -i
-
-If you compiled report.c with LOG_LOCAL2 (defined in the Makefile)
-then you may want to capture syslog messages from BOOTP by changing
-your syslog.conf file. (See the sample syslog.conf file here).
-Test the change with: logger -t test -p local2.info "message"
-
diff --git a/usr.sbin/bootpd/Makefile.UNIX b/usr.sbin/bootpd/Makefile.UNIX
deleted file mode 100644
index e333ce5..0000000
--- a/usr.sbin/bootpd/Makefile.UNIX
+++ /dev/null
@@ -1,184 +0,0 @@
-#
-# Makefile for the BOOTP programs:
-# bootpd - BOOTP server daemon
-# bootpef - BOOTP extension file builder
-# bootpgw - BOOTP gateway daemon
-# bootptest - BOOTP tester (client)
-#
-
-# OPTion DEFinitions:
-# Remove the -DVEND_CMU if you don't wish to support the "CMU vendor format"
-# in addition to the RFC1048 format. Leaving out DEBUG saves little.
-OPTDEFS= -DSYSLOG -DVEND_CMU -DDEBUG
-
-# Uncomment and edit this to choose the facility code used for syslog.
-# LOG_FACILITY= "-DLOG_BOOTP=LOG_LOCAL2"
-
-# SYStem DEFinitions:
-# Either uncomment some of the following, or do:
-# "make sunos4" (or "make sunos5", etc.)
-# SYSDEFS= -DSUNOS -DETC_ETHERS
-# SYSDEFS= -DSVR4
-# SYSLIBS= -lsocket -lnsl
-
-# Uncomment this if your system does not provide streror(3)
-# STRERROR=strerror.o
-
-# FILE DEFinitions:
-# The next few lines may be uncommented and changed to alter the default
-# filenames bootpd uses for its configuration and dump files.
-#CONFFILE= -DCONFIG_FILE=\"/usr/etc/bootptab\"
-#DUMPFILE= -DDUMPTAB_FILE=\"/usr/etc/bootpd.dump\"
-#FILEDEFS= $(CONFFILE) $(DUMPFILE)
-
-# MORE DEFinitions (whatever you might want to add)
-# One might define NDEBUG (to remove "assert()" checks).
-MOREDEFS=
-
-INSTALL=/usr/bin/install
-DESTDIR=
-BINDIR=/usr/etc
-MANDIR=/usr/local/man
-
-CFLAGS= $(OPTDEFS) $(SYSDEFS) $(FILEDEFS) $(MOREDEFS)
-PROGS= bootpd bootpef bootpgw bootptest
-TESTS= trylook trygetif trygetea
-
-all: $(PROGS)
-
-tests: $(TESTS)
-
-system: install
-
-install: $(PROGS)
- -for f in $(PROGS) ;\
- do \
- $(INSTALL) -c -s $$f $(DESTDIR)$(BINDIR) ;\
- done
-
-MAN5= bootptab.5
-MAN8= bootpd.8 bootpef.8 bootptest.8
-install.man: $(MAN5) $(MAN8)
- -for f in $(MAN5) ;\
- do \
- $(INSTALL) -c -m 644 $$f $(DESTDIR)$(MANDIR)/man5 ;\
- done
- -for f in $(MAN8) ;\
- do \
- $(INSTALL) -c -m 644 $$f $(DESTDIR)$(MANDIR)/man8 ;\
- done
-
-clean:
- -rm -f core *.o
- -rm -f $(PROGS) $(TESTS)
-
-distclean:
- -rm -f *.BAK *.CKP *~ .emacs*
-
-#
-# Handy targets for individual systems:
-#
-
-# DEC/OSF1 on the Alpha
-alpha:
- $(MAKE) SYSDEFS="-DETC_ETHERS -Dint32=int -D_SOCKADDR_LEN" \
- STRERROR=strerror.o
-
-# Control Data EP/IX 1.4.3 system, BSD 4.3 mode
-epix143:
- $(MAKE) CC="cc -systype bsd43" \
- SYSDEFS="-Dconst= -D_SIZE_T -DNO_UNISTD -DUSE_BFUNCS" \
- STRERROR=strerror.o
-
-# Control Data EP/IX 2.1.1 system, SVR4 mode
-epix211:
- $(MAKE) CC="cc -systype svr4" \
- SYSDEFS="-DSVR4" \
- SYSLIBS="-lsocket -lnsl"
-
-# Silicon Graphics IRIX (no <sys/sockio.h>, so not SVR4)
-irix:
- $(MAKE) SYSDEFS="-DSYSV -DIRIX"
-
-# SunOS 4.X
-sunos4:
- $(MAKE) SYSDEFS="-DSUNOS -DETC_ETHERS" \
- STRERROR=strerror.o
-
-# Solaris 2.X (i.e. SunOS 5.X)
-sunos5:
- $(MAKE) SYSDEFS="-DSVR4 -DETC_ETHERS" \
- SYSLIBS="-lsocket -lnsl"
-
-# UNIX System V Rel. 4 (also: IRIX 5.X, others)
-svr4:
- $(MAKE) SYSDEFS="-DSVR4" \
- SYSLIBS="-lsocket -lnsl"
-
-#
-# How to build each program:
-#
-
-OBJ_D= bootpd.o dovend.o readfile.o hash.o dumptab.o \
- lookup.o getif.o hwaddr.o tzone.o report.o $(STRERROR)
-bootpd: $(OBJ_D)
- $(CC) -o $@ $(OBJ_D) $(SYSLIBS)
-
-OBJ_EF= bootpef.o dovend.o readfile.o hash.o dumptab.o \
- lookup.o hwaddr.o tzone.o report.o $(STRERROR)
-bootpef: $(OBJ_EF)
- $(CC) -o $@ $(OBJ_EF) $(SYSLIBS)
-
-OBJ_GW= bootpgw.o getif.o hwaddr.o report.o $(STRERROR)
-bootpgw: $(OBJ_GW)
- $(CC) -o $@ $(OBJ_GW) $(SYSLIBS)
-
-OBJ_TEST= bootptest.o print-bootp.o getif.o getether.o \
- report.o $(STRERROR)
-bootptest: $(OBJ_TEST)
- $(CC) -o $@ $(OBJ_TEST) $(SYSLIBS)
-
-# This is just for testing the lookup functions.
-TRYLOOK= trylook.o lookup.o report.o $(STRERROR)
-trylook : $(TRYLOOK)
- $(CC) -o $@ $(TRYLOOK) $(SYSLIBS)
-
-# This is just for testing getif.
-TRYGETIF= trygetif.o getif.o report.o $(STRERROR)
-trygetif : $(TRYGETIF)
- $(CC) -o $@ $(TRYGETIF) $(SYSLIBS)
-
-# This is just for testing getether.
-TRYGETEA= trygetea.o getether.o report.o $(STRERROR)
-trygetea : $(TRYGETEA)
- $(CC) -o $@ $(TRYGETEA) $(SYSLIBS)
-
-# This rule just keeps the LOG_BOOTP define localized.
-report.o : report.c
- $(CC) $(CFLAGS) $(LOG_FACILITY) -c $<
-
-# Punt SunOS -target noise
-.c.o:
- $(CC) $(CFLAGS) -c $<
-
-#
-# Header file dependencies:
-#
-
-bootpd.o : bootp.h bptypes.h hash.h hwaddr.h bootpd.h dovend.h
-bootpd.o : readfile.h report.h tzone.h patchlevel.h getif.h
-bootpef.o : bootp.h bptypes.h hash.h hwaddr.h bootpd.h dovend.h
-bootpef.o : readfile.h report.h tzone.h patchlevel.h
-bootpgw.o : bootp.h bptypes.h getif.h hwaddr.h report.h patchlevel.h
-bootptest.o : bootp.h bptypes.h bootptest.h getif.h patchlevel.h
-dovend.o : bootp.h bptypes.h bootpd.h hash.h hwaddr.h report.h dovend.h
-dumptab.o : bootp.h bptypes.h hash.h hwaddr.h report.h patchlevel.h bootpd.h
-getif.o : getif.h report.h
-hash.o : hash.h
-hwaddr.o : bptypes.h hwaddr.h report.h
-lookup.o : bootp.h bptypes.h lookup.h report.h
-print-bootp.o : bootp.h bptypes.h bootptest.h
-readfile.o : bootp.h bptypes.h hash.h hwaddr.h lookup.h readfile.h
-readfile.o : report.h tzone.h bootpd.h
-report.o : report.h
-tzone.o : bptypes.h report.h tzone.h
diff --git a/usr.sbin/bootpd/Problems b/usr.sbin/bootpd/Problems
deleted file mode 100644
index 9478676..0000000
--- a/usr.sbin/bootpd/Problems
+++ /dev/null
@@ -1,47 +0,0 @@
-
-Common problems and ways to work around them:
-
-Bootpd complains that it "can not get IP addr for HOSTNAME"
-
- If the entry is a "dummy" (not a real host) used only for
- reference by other entries, put '.' in front of the name.
-
- If the entry is for a real client and the IP address for
- the client can not be found using gethostbyname(), specify
- the IP address for the client using numeric form.
-
-Bootpd takes a long time to finish parsing the bootptab file:
-
- Excessive startup time is usually caused by waiting for
- timeouts on failed DNS lookup operations. If this is the
- problem, find the client names for which DNS lookup fails
- and change the bootptab to specify the IP addresses for
- those clients using numeric form.
-
- When bootptab entries do not specify an ip address, bootpd
- attempts to lookup the tagname as a host name to find the
- IP address. To suppress this default action, either make
- the entry a "dummy" or specify its IP numeric address.
-
- If your DNS lookups work but are just slow, consider either
- running bootpd on the same machine as the DNS server or
- running a caching DNS server on the host running bootpd.
-
-My huge bootptab file causes startup time to be so long that clients
-give up waiting for a reply.
-
- Truly huge bootptab files make "inetd" mode impractical.
- Start bootpd in "standalone" mode when the server boots.
-
- Another possibility is to run one bootpd on each network
- segment so each one can have a smaller bootptab. Only one
- instance of bootpd may run on one server, so you would need
- to use a different server for each network segment.
-
-My bootp clients are given responses with a boot file name that is
-not a fully specified path.
-
- Make sure the TFTP directory or home directory tags are set:
- :td=/tftpboot: (or)
- :hd=/usr/boot: (for example)
-
diff --git a/usr.sbin/bootpd/README b/usr.sbin/bootpd/README
deleted file mode 100644
index c7755b7..0000000
--- a/usr.sbin/bootpd/README
+++ /dev/null
@@ -1,133 +0,0 @@
-
-This is an enhanced version of the CMU BOOTP server which was derived
-from the original BOOTP server created by Bill Croft at Stanford.
-This version merges all the enhancements and bug-fixes from the
-NetBSD, Columbia, and other versions.
-
-Please direct questions, comments, and bug reports to the list:
- <bootp@andrew.cmu.edu>
-
-You can subscribe to this mailing list by sending mail to:
- bootp-request@andrew.cmu.edu
-(The body of the message should contain: "Add <your-address>")
-
-[ From the NetBSD README file: ]
-
-BOOTPD is a useful adjunct to the nfs diskless boot EPROM code.
-
-The alternatives for initiating a boot of a kernel across a network
-are to use RARP protocol, or BOOTP protocol. BOOTP is more flexible;
-it allows additional items of information to be returned to the
-booting client; it also supports booting across gateways.
-
-[ From the CMU README file: ]
-
-Notes:
-1) BOOTP was originally designed and implemented by Bill Croft at Stanford.
- Much of the credit for the ideas and the code goes to him. We've added
- code to support the vendor specific area of the packet as specified in
- RFC1048. We've also improved the host lookup algorithm and added some
- extra logging.
-
-2) The server now uses syslog to do logging. Specifically it uses the 4.3bsd
- version. I've #ifdef'd all of these calls. If you are running 4.2 you
- should compile without the -DSYSLOG switch.
-
-3) You must update your /etc/services file to contain the following two lines:
- bootps 67/udp bootp # BOOTP Server
- bootpc 68/udp # BOOTP Client
-
-4) Edit the bootptab. It has some explanitory comments, and there
- is a manual entry describing its format (bootptab.5)
- If you have any questions, just let us know.
-
-Construction:
- [ See the file Installation which is more up-to-date. -gwr ]
-
- Make sure all of the files exist first. If anything is missing,
- please contact either Walt Wimer or Drew Perkins by E-mail or phone.
- Addresses and phone numbers are listed below.
-
- Type 'make'. The options at present are: -DSYSLOG which enables logging
- code, -DDEBUG which enables table dumping via signals, and -DVEND_CMU
- which enables the CMU extensions for CMU PC/IP.
-
- Edit the bootptab. The man page and the comments in the file should
- explain how to go about doing so. If you have any problems, let me know.
-
- Type 'make install'. This should put all of the files in the right place.
-
- Edit your /etc/rc.local or /etc/inetd.conf file to start up bootpd upon
- reboot. The following is a sample /etc/inetd.conf entry:
- # BOOTP server
- bootps dgram udp wait root /usr/etc/bootpd bootpd -i
-
-Care and feeding:
- If you change the interface cards on your host or add new hosts you will
- need to update /etc/bootptab. Just edit it as before. Once you write
- it back out, bootpd will notice that there is a new copy and will
- reread it the next time it gets a request.
-
- If your bootp clients don't get a response then several things might be
- wrong. Most often, the entry for that host is not in the database.
- Check the hardware address and then check the entry and make sure
- everything is right. Other problems include the server machine crashing,
- bad cables, and the like. If your network is very congested you should
- try making your bootp clients send additional requests before giving up.
-
-
-November 7, 1988
-
-
-Walter L. Wimer Drew D. Perkins
-ww0n@andrew.cmu.edu ddp@andrew.cmu.edu
-(412) 268-6252 (412) 268-8576
-
-4910 Forbes Ave
-Pittsburgh, PA 15213
-
-[ Contents description by file: ]
-
-Announce* Text of release announcements
-Changes Change history, reverse chronological
-Installation Instructions for building and installing
-Makefile* for "make"
-README This file
-ToDo Things not yet done
-bootp.h The protocol header file
-bootpd.8 Manual page for bootpd, boopgw
-bootpd.c BOOTP server main module
-bootpd.h header for above (and others)
-bootpef.8 Manual page for bootpef
-bootpef.c BOOTP extension file compiler
-bootpgw.c BOOTP gateway main module
-bootptab.5 A manual describing the bootptab format
-bootptab.cmu A sample database file for the server
-bootptab.mcs Another sample from <gwr@mc.com>
-bootptest.8 Manual page for bootptest
-bootptest.c BOOTP test program (fake client)
-bootptest.h header for above
-dovend.c Vendor Option builder (for bootpd, bootpef)
-dovend.h header for above
-dumptab.c Implements debugging dump for bootpd
-getether.c For bootptest (not used yet)
-getif.c Get network interface info.
-getif.h header for above
-hash.c The hash table module
-hash.h header for above
-hwaddr.c Hardware address support
-hwaddr.h header for above
-lookup.c Internet Protocol address lookup
-lookup.h header for above
-patchlevel.h Holds version numbers
-print-bootp.c Prints BOOTP packets (taken from BSD tcpdump)
-readfile.c The configuration file-reading routines
-readfile.h header for above
-report.c Does syslog-style messages
-report.h header for above
-strerror.c Library errno-to-string (for systems lacking it)
-syslog.conf Sample config file for syslogd(8)
-syslog.h For systems that lack syslog(3)
-try*.c Test programs (for debugging)
-tzone.c Get timezone offset
-tzone.h header for above
diff --git a/usr.sbin/bootpd/bootp.h b/usr.sbin/bootpd/bootp.h
deleted file mode 100644
index 990bf58..0000000
--- a/usr.sbin/bootpd/bootp.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-/*
- * Bootstrap Protocol (BOOTP). RFC951 and RFC1395.
- *
- * $Id: bootp.h,v 1.2 1994/08/22 22:14:40 gwr Exp $
- *
- *
- * This file specifies the "implementation-independent" BOOTP protocol
- * information which is common to both client and server.
- *
- */
-
-#include "bptypes.h" /* for int32, u_int32 */
-
-#define BP_CHADDR_LEN 16
-#define BP_SNAME_LEN 64
-#define BP_FILE_LEN 128
-#define BP_VEND_LEN 64
-#define BP_MINPKTSZ 300 /* to check sizeof(struct bootp) */
-
-struct bootp {
- unsigned char bp_op; /* packet opcode type */
- unsigned char bp_htype; /* hardware addr type */
- unsigned char bp_hlen; /* hardware addr length */
- unsigned char bp_hops; /* gateway hops */
- unsigned int32 bp_xid; /* transaction ID */
- unsigned short bp_secs; /* seconds since boot began */
- unsigned short bp_flags; /* RFC1532 broadcast, etc. */
- struct in_addr bp_ciaddr; /* client IP address */
- struct in_addr bp_yiaddr; /* 'your' IP address */
- struct in_addr bp_siaddr; /* server IP address */
- struct in_addr bp_giaddr; /* gateway IP address */
- unsigned char bp_chaddr[BP_CHADDR_LEN]; /* client hardware address */
- char bp_sname[BP_SNAME_LEN]; /* server host name */
- char bp_file[BP_FILE_LEN]; /* boot file name */
- unsigned char bp_vend[BP_VEND_LEN]; /* vendor-specific area */
- /* note that bp_vend can be longer, extending to end of packet. */
-};
-
-/*
- * UDP port numbers, server and client.
- */
-#define IPPORT_BOOTPS 67
-#define IPPORT_BOOTPC 68
-
-#define BOOTREPLY 2
-#define BOOTREQUEST 1
-
-/*
- * Hardware types from Assigned Numbers RFC.
- */
-#define HTYPE_ETHERNET 1
-#define HTYPE_EXP_ETHERNET 2
-#define HTYPE_AX25 3
-#define HTYPE_PRONET 4
-#define HTYPE_CHAOS 5
-#define HTYPE_IEEE802 6
-#define HTYPE_ARCNET 7
-
-/*
- * Vendor magic cookie (v_magic) for CMU
- */
-#define VM_CMU "CMU"
-
-/*
- * Vendor magic cookie (v_magic) for RFC1048
- */
-#define VM_RFC1048 { 99, 130, 83, 99 }
-
-
-
-/*
- * Tag values used to specify what information is being supplied in
- * the vendor (options) data area of the packet.
- */
-/* RFC 1048 */
-#define TAG_END ((unsigned char) 255)
-#define TAG_PAD ((unsigned char) 0)
-#define TAG_SUBNET_MASK ((unsigned char) 1)
-#define TAG_TIME_OFFSET ((unsigned char) 2)
-#define TAG_GATEWAY ((unsigned char) 3)
-#define TAG_TIME_SERVER ((unsigned char) 4)
-#define TAG_NAME_SERVER ((unsigned char) 5)
-#define TAG_DOMAIN_SERVER ((unsigned char) 6)
-#define TAG_LOG_SERVER ((unsigned char) 7)
-#define TAG_COOKIE_SERVER ((unsigned char) 8)
-#define TAG_LPR_SERVER ((unsigned char) 9)
-#define TAG_IMPRESS_SERVER ((unsigned char) 10)
-#define TAG_RLP_SERVER ((unsigned char) 11)
-#define TAG_HOST_NAME ((unsigned char) 12)
-#define TAG_BOOT_SIZE ((unsigned char) 13)
-/* RFC 1395 */
-#define TAG_DUMP_FILE ((unsigned char) 14)
-#define TAG_DOMAIN_NAME ((unsigned char) 15)
-#define TAG_SWAP_SERVER ((unsigned char) 16)
-#define TAG_ROOT_PATH ((unsigned char) 17)
-/* RFC 1497 */
-#define TAG_EXTEN_FILE ((unsigned char) 18)
-/* RFC 1533 */
-#define TAG_NIS_DOMAIN ((unsigned char) 40)
-#define TAG_NIS_SERVER ((unsigned char) 41)
-#define TAG_NTP_SERVER ((unsigned char) 42)
-/* DHCP maximum message size. */
-#define TAG_MAX_MSGSZ ((unsigned char) 57)
-
-/* XXX - Add new tags here */
-
-
-/*
- * "vendor" data permitted for CMU bootp clients.
- */
-
-struct cmu_vend {
- char v_magic[4]; /* magic number */
- unsigned int32 v_flags; /* flags/opcodes, etc. */
- struct in_addr v_smask; /* Subnet mask */
- struct in_addr v_dgate; /* Default gateway */
- struct in_addr v_dns1, v_dns2; /* Domain name servers */
- struct in_addr v_ins1, v_ins2; /* IEN-116 name servers */
- struct in_addr v_ts1, v_ts2; /* Time servers */
- int32 v_unused[6]; /* currently unused */
-};
-
-
-/* v_flags values */
-#define VF_SMASK 1 /* Subnet mask field contains valid data */
diff --git a/usr.sbin/bootpd/bootpd.8 b/usr.sbin/bootpd/bootpd.8
deleted file mode 100644
index da59c21..0000000
--- a/usr.sbin/bootpd/bootpd.8
+++ /dev/null
@@ -1,305 +0,0 @@
-.\" Copyright (c) 1988, 1989, 1991 Carnegie Mellon University
-.\"
-.\" $Header: /b/source/CVS/src/usr.sbin/bootpd/bootpd.8,v 1.2 1994/08/22 22:14:41 gwr Exp $
-.\"
-.TH BOOTPD 8 "November 06, 1993" "Carnegie Mellon University"
-.SH NAME
-bootpd, bootpgw \- Internet Boot Protocol server/gateway
-.SH SYNOPSIS
-.B bootpd
-[
-.B \-i
-.B \-s
-.B \-t
-timeout
-.B \-d
-level
-.B \-c
-chdir\-path
-]
-[
-.I bootptab
-[
-.I dumpfile
-] ]
-.br
-.B bootpgw
-[
-.B \-i
-.B \-s
-.B \-t
-timeout
-.B \-d
-level
-] server
-.SH DESCRIPTION
-.I Bootpd
-implements an Internet Bootstrap Protocol (BOOTP) server as defined in
-RFC951, RFC1532, and RFC1533.
-.I Bootpgw
-implements a simple BOOTP gateway which can be used to forward
-requests and responses between clients on one subnet and a
-BOOTP server (i.e.
-.IR bootpd )
-on another subnet. While either
-.I bootpd
-or
-.I bootpgw
-will forward BOOTREPLY packets, only
-.I bootpgw
-will forward BOOTREQUEST packets.
-.PP
-One host on each network segment is normally configured to run either
-.I bootpd
-or
-.I bootpgw
-from
-.I inetd
-by including one of the following lines in the file
-.IR /etc/inetd.conf :
-.IP
-bootps dgram udp wait root /etc/bootpd bootpd bootptab
-.br
-bootps dgram udp wait root /etc/bootpgw bootpgw server
-.PP
-This mode of operation is referred to as "inetd mode" and causes
-.I bootpd
-(or
-.IR bootpgw )
-to be started only when a boot request arrives. If it does not
-receive another packet within fifteen minutes of the last one
-it received, it will exit to conserve system resources. The
-.B \-t
-option controls this timeout (see OPTIONS).
-.PP
-It is also possible to run
-.I bootpd
-(or
-.IR bootpgw )
-in "standalone mode" (without
-.IR inetd )
-by simply invoking it from a shell like any other regular command.
-Standalone mode is particularly useful when
-.I bootpd
-is used with a large configuration database, where the start up
-delay might otherwise prevent timely response to client requests.
-(Automatic start up in standalone mode can be done by invoking
-.I bootpd
-from within
-.IR /etc/rc.local ,
-for example.)
-Standalone mode is less useful for
-.I bootgw
-which
-has very little start up delay because
-it does not read a configuration file.
-.PP
-Either program automatically detects whether it was invoked from inetd
-or from a shell and automatically selects the appropriate mode.
-The
-.B \-s
-or
-.B \-i
-option may be used to force standalone or inetd mode respectively
-(see OPTIONS).
-.SH OPTIONS
-.TP
-.BI \-t \ timeout
-Specifies the
-.I timeout
-value (in minutes) that a
-.I bootpd
-or
-.I bootpgw
-process will wait for a BOOTP packet before exiting.
-If no packets are recieved for
-.I timeout
-seconds, then the program will exit.
-A timeout value of zero means "run forever".
-In standalone mode, this option is forced to zero.
-.TP
-.BI \-d \ debug\-level
-Sets the
-.I debug\-level
-variable that controls the amount of debugging messages generated.
-For example, -d4 or -d 4 will set the debugging level to 4.
-For compatibility with older versions of
-.IR bootpd ,
-omitting the numeric parameter (i.e. just -d) will
-simply increment the debug level by one.
-.TP
-.BI \-c \ chdir\-path
-Sets the current directory used by
-.I bootpd
-while checking the existence and size of client boot files. This is
-useful when client boot files are specified as relative pathnames, and
-.I bootpd
-needs to use the same current directory as the TFTP server
-(typically /tftpboot). This option is not recoginzed by
-.IR bootpgw .
-.TP
-.B \-i
-Force inetd mode. This option is obsolete, but remains for
-compatibility with older versions of
-.IR bootpd .
-.TP
-.B \-s
-Force standalone mode. This option is obsolete, but remains for
-compatibility with older versions of
-.IR bootpd .
-.TP
-.I bootptab
-Specifies the name of the configuration file from which
-.I bootpd
-loads its database of known clients and client options
-.RI ( bootpd
-only).
-.TP
-.I dumpfile
-Specifies the name of the file that
-.I bootpd
-will dump its internal database into when it receives a
-SIGUSR1 signal
-.RI ( bootpd
-only). This option is only recognized if
-.I bootpd
-was compiled with the -DDEBUG flag.
-.TP
-.I server
-Specifies the name of a BOOTP server to which
-.I bootpgw
-will forward all BOOTREQUEST packets it receives
-.RI ( bootpgw
-only).
-.SH OPERATION
-.PP
-Both
-.I bootpd
-and
-.I bootpgw
-operate similarly in that both listen for any packets sent to the
-.I bootps
-port, and both simply forward any BOOTREPLY packets.
-They differ in their handling of BOOTREQUEST packets.
-.PP
-When
-.I bootpgw
-is started, it determines the address of a BOOTP server
-whose name is provided as a command line parameter. When
-.I bootpgw
-receives a BOOTREQUEST packet, it sets the "gateway address"
-and "hop count" fields in the packet and forwards the packet
-to the BOOTP server at the address determined earlier.
-Requests are forwarded only if they indicate that
-the client has been waiting for at least three seconds.
-.PP
-When
-.I bootpd
-is started it reads a configuration file, (normally
-.IR /etc/bootptab )
-that initializes the internal database of known clients and client
-options. This internal database is reloaded
-from the configuration file when
-.I bootpd
-receives a hangup signal (SIGHUP) or when it discovers that the
-configuration file has changed.
-.PP
-When
-.I bootpd
-receives a BOOTREQUEST packet, it
-.\" checks the modification time of the
-.\" configuration file and reloads the database if necessary. Then it
-looks for a database entry matching the client request.
-If the client is known,
-.I bootpd
-composes a BOOTREPLY packet using the database entry found above,
-and sends the reply to the client (possibly using a gateway).
-If the client is unknown, the request is discarded
-(with a notice if debug > 0).
-.PP
-If
-.I bootpd
-is compiled with the -DDEBUG option, receipt of a SIGUSR1 signal causes
-it to dump its internal database to the file
-.I /etc/bootpd.dump
-or the dumpfile specified as a command line parameter.
-.PP
-During initialization, both programs
-determine the UDP port numbers to be used by calling
-.I getservbyname
-(which nomally uses
-.IR /etc/services).
-Two service names (and port numbers) are used:
-.IP
-bootps \- BOOTP Server listening port
-.br
-bootpc \- BOOTP Client destination port
-.LP
-If the port numbers cannot
-be determined using
-.I getservbyname
-then the values default to boopts=67 and bootpc=68.
-.SH FILES
-.TP 20
-/etc/bootptab
-Database file read by
-.IR bootpd .
-.TP
-/etc/bootpd.dump
-Debugging dump file created by
-.IR bootpd .
-.TP
-/etc/services
-Internet service numbers.
-.TP
-/tftpboot
-Current directory typically used by the TFTP server and
-.IR bootpd .
-
-.SH BUGS
-Individual host entries must not exceed 1024 characters.
-
-.SH CREDITS
-.PP
-This distribution is currently maintained by
-Walter L. Wimer <walt+@cmu.edu>.
-.PP
-The original BOOTP server was created by
-Bill Croft at Stanford University in January 1986.
-.PP
-The current version of
-.I bootpd
-is primarily the work of David Kovar,
-Drew D. Perkins, and Walter L. Wimer,
-at Carnegie Mellon University.
-.TP
-Enhancements and bug\-fixes have been contributed by:
-(in alphabetical order)
-.br
-Danny Backx <db@sunbim.be>
-.br
-John Brezak <brezak@ch.hp.com>
-.br
-Frank da Cruz <fdc@cc.columbia.edu>
-.br
-David R. Linn <drl@vuse.vanderbilt.edu>
-.br
-Jim McKim <mckim@lerc.nasa.gov>
-.br
-Gordon W. Ross <gwr@mc.com>
-.br
-Jason Zions <jazz@hal.com>
-.SH "SEE ALSO"
-.LP
-bootptab(5), inetd(8), tftpd(8)
-.LP
-DARPA Internet Request For Comments:
-.TP 10
-RFC951
-Bootstrap Protocol
-.TP 10
-RFC1532
-Clarifications and Extensions for the Bootstrap Protocol
-.TP 10
-RFC1533
-DHCP Options and BOOTP Vendor Extensions
diff --git a/usr.sbin/bootpd/bootpd.c b/usr.sbin/bootpd/bootpd.c
deleted file mode 100644
index fc7a5dd..0000000
--- a/usr.sbin/bootpd/bootpd.c
+++ /dev/null
@@ -1,1380 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: bootpd.c,v 1.4 1994/08/24 18:14:44 gwr Exp $";
-#endif
-
-/*
- * BOOTP (bootstrap protocol) server daemon.
- *
- * Answers BOOTP request packets from booting client machines.
- * See [SRI-NIC]<RFC>RFC951.TXT for a description of the protocol.
- * See [SRI-NIC]<RFC>RFC1048.TXT for vendor-information extensions.
- * See RFC 1395 for option tags 14-17.
- * See accompanying man page -- bootpd.8
- *
- * HISTORY
- * See ./Changes
- *
- * BUGS
- * See ./ToDo
- */
-
-
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#ifndef NO_UNISTD
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <syslog.h>
-#include <assert.h>
-
-#ifdef NO_SETSID
-# include <fcntl.h> /* for O_RDONLY, etc */
-#endif
-
-#ifdef SVR4
-/* Using sigset() avoids the need to re-arm each time. */
-#define signal sigset
-#endif
-
-#ifndef USE_BFUNCS
-# include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-# define bcopy(a,b,c) memcpy(b,a,c)
-# define bzero(p,l) memset(p,0,l)
-# define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "hash.h"
-#include "hwaddr.h"
-#include "bootpd.h"
-#include "dovend.h"
-#include "getif.h"
-#include "readfile.h"
-#include "report.h"
-#include "tzone.h"
-#include "patchlevel.h"
-
-#ifndef CONFIG_FILE
-#define CONFIG_FILE "/etc/bootptab"
-#endif
-#ifndef DUMPTAB_FILE
-#define DUMPTAB_FILE "/tmp/bootpd.dump"
-#endif
-
-
-
-/*
- * Externals, forward declarations, and global variables
- */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern void dumptab P((char *));
-
-PRIVATE void catcher P((int));
-PRIVATE int chk_access P((char *, int32 *));
-#ifdef VEND_CMU
-PRIVATE void dovend_cmu P((struct bootp *, struct host *));
-#endif
-PRIVATE void dovend_rfc1048 P((struct bootp *, struct host *, int32));
-PRIVATE void handle_reply P((void));
-PRIVATE void handle_request P((void));
-PRIVATE void sendreply P((int forward, int32 dest_override));
-PRIVATE void usage P((void));
-
-#undef P
-
-/*
- * IP port numbers for client and server obtained from /etc/services
- */
-
-u_short bootps_port, bootpc_port;
-
-
-/*
- * Internet socket and interface config structures
- */
-
-struct sockaddr_in bind_addr; /* Listening */
-struct sockaddr_in recv_addr; /* Packet source */
-struct sockaddr_in send_addr; /* destination */
-
-
-/*
- * option defaults
- */
-int debug = 0; /* Debugging flag (level) */
-struct timeval actualtimeout =
-{ /* fifteen minutes */
- 15 * 60L, /* tv_sec */
- 0 /* tv_usec */
-};
-
-/*
- * General
- */
-
-int s; /* Socket file descriptor */
-char *pktbuf; /* Receive packet buffer */
-int pktlen;
-char *progname;
-char *chdir_path;
-char hostname[MAXHOSTNAMELEN]; /* System host name */
-struct in_addr my_ip_addr;
-
-/* Flags set by signal catcher. */
-PRIVATE int do_readtab = 0;
-PRIVATE int do_dumptab = 0;
-
-/*
- * Globals below are associated with the bootp database file (bootptab).
- */
-
-char *bootptab = CONFIG_FILE;
-char *bootpd_dump = DUMPTAB_FILE;
-
-
-
-/*
- * Initialization such as command-line processing is done and then the
- * main server loop is started.
- */
-
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct timeval *timeout;
- struct bootp *bp;
- struct servent *servp;
- struct hostent *hep;
- char *stmp;
- int n, ba_len, ra_len;
- int nfound, readfds;
- int standalone;
-
- progname = strrchr(argv[0], '/');
- if (progname) progname++;
- else progname = argv[0];
-
- /*
- * Initialize logging.
- */
- report_init(0); /* uses progname */
-
- /*
- * Log startup
- */
- report(LOG_INFO, "version %s.%d", VERSION, PATCHLEVEL);
-
- /* Debugging for compilers with struct padding. */
- assert(sizeof(struct bootp) == BP_MINPKTSZ);
-
- /* Get space for receiving packets and composing replies. */
- pktbuf = malloc(MAX_MSG_SIZE);
- if (!pktbuf) {
- report(LOG_ERR, "malloc failed");
- exit(1);
- }
- bp = (struct bootp *) pktbuf;
-
- /*
- * Check to see if a socket was passed to us from inetd.
- *
- * Use getsockname() to determine if descriptor 0 is indeed a socket
- * (and thus we are probably a child of inetd) or if it is instead
- * something else and we are running standalone.
- */
- s = 0;
- ba_len = sizeof(bind_addr);
- bzero((char *) &bind_addr, ba_len);
- errno = 0;
- standalone = TRUE;
- if (getsockname(s, (struct sockaddr *) &bind_addr, &ba_len) == 0) {
- /*
- * Descriptor 0 is a socket. Assume we are a child of inetd.
- */
- if (bind_addr.sin_family == AF_INET) {
- standalone = FALSE;
- bootps_port = ntohs(bind_addr.sin_port);
- } else {
- /* Some other type of socket? */
- report(LOG_ERR, "getsockname: not an INET socket");
- }
- }
-
- /*
- * Set defaults that might be changed by option switches.
- */
- stmp = NULL;
- timeout = &actualtimeout;
-
- /*
- * Read switches.
- */
- for (argc--, argv++; argc > 0; argc--, argv++) {
- if (argv[0][0] != '-')
- break;
- switch (argv[0][1]) {
-
- case 'c': /* chdir_path */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (stmp[0] != '/')) {
- fprintf(stderr,
- "bootpd: invalid chdir specification\n");
- break;
- }
- chdir_path = stmp;
- break;
-
- case 'd': /* debug level */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else if (argv[1] && argv[1][0] == '-') {
- /*
- * Backwards-compatible behavior:
- * no parameter, so just increment the debug flag.
- */
- debug++;
- break;
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid debug level\n", progname);
- break;
- }
- debug = n;
- break;
-
- case 'h': /* override hostname */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp) {
- fprintf(stderr,
- "bootpd: missing hostname\n");
- break;
- }
- strncpy(hostname, stmp, sizeof(hostname)-1);
- break;
-
- case 'i': /* inetd mode */
- standalone = FALSE;
- break;
-
- case 's': /* standalone mode */
- standalone = TRUE;
- break;
-
- case 't': /* timeout */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid timeout specification\n", progname);
- break;
- }
- actualtimeout.tv_sec = (int32) (60 * n);
- /*
- * If the actual timeout is zero, pass a NULL pointer
- * to select so it blocks indefinitely, otherwise,
- * point to the actual timeout value.
- */
- timeout = (n > 0) ? &actualtimeout : NULL;
- break;
-
- default:
- fprintf(stderr, "%s: unknown switch: -%c\n",
- progname, argv[0][1]);
- usage();
- break;
-
- } /* switch */
- } /* for args */
-
- /*
- * Override default file names if specified on the command line.
- */
- if (argc > 0)
- bootptab = argv[0];
-
- if (argc > 1)
- bootpd_dump = argv[1];
-
- /*
- * Get my hostname and IP address.
- */
- if (hostname[0] == '\0') {
- if (gethostname(hostname, sizeof(hostname)) == -1) {
- fprintf(stderr, "bootpd: can't get hostname\n");
- exit(1);
- }
- }
- hep = gethostbyname(hostname);
- if (!hep) {
- fprintf(stderr, "Can not get my IP address\n");
- exit(1);
- }
- bcopy(hep->h_addr, (char *)&my_ip_addr, sizeof(my_ip_addr));
-
- if (standalone) {
- /*
- * Go into background and disassociate from controlling terminal.
- */
- if (debug < 3) {
- if (fork())
- exit(0);
-#ifdef NO_SETSID
- setpgrp(0,0);
-#ifdef TIOCNOTTY
- n = open("/dev/tty", O_RDWR);
- if (n >= 0) {
- ioctl(n, TIOCNOTTY, (char *) 0);
- (void) close(n);
- }
-#endif /* TIOCNOTTY */
-#else /* SETSID */
- if (setsid() < 0)
- perror("setsid");
-#endif /* SETSID */
- } /* if debug < 3 */
-
- /*
- * Nuke any timeout value
- */
- timeout = NULL;
-
- } /* if standalone (1st) */
-
- /* Set the cwd (i.e. to /tftpboot) */
- if (chdir_path) {
- if (chdir(chdir_path) < 0)
- report(LOG_ERR, "%s: chdir failed", chdir_path);
- }
-
- /* Get the timezone. */
- tzone_init();
-
- /* Allocate hash tables. */
- rdtab_init();
-
- /*
- * Read the bootptab file.
- */
- readtab(1); /* force read */
-
- if (standalone) {
-
- /*
- * Create a socket.
- */
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- report(LOG_ERR, "socket: %s", get_network_errmsg());
- exit(1);
- }
-
- /*
- * Get server's listening port number
- */
- servp = getservbyname("bootps", "udp");
- if (servp) {
- bootps_port = ntohs((u_short) servp->s_port);
- } else {
- bootps_port = (u_short) IPPORT_BOOTPS;
- report(LOG_ERR,
- "udp/bootps: unknown service -- assuming port %d",
- bootps_port);
- }
-
- /*
- * Bind socket to BOOTPS port.
- */
- bind_addr.sin_family = AF_INET;
- bind_addr.sin_addr.s_addr = INADDR_ANY;
- bind_addr.sin_port = htons(bootps_port);
- if (bind(s, (struct sockaddr *) &bind_addr,
- sizeof(bind_addr)) < 0)
- {
- report(LOG_ERR, "bind: %s", get_network_errmsg());
- exit(1);
- }
- } /* if standalone (2nd)*/
-
- /*
- * Get destination port number so we can reply to client
- */
- servp = getservbyname("bootpc", "udp");
- if (servp) {
- bootpc_port = ntohs(servp->s_port);
- } else {
- report(LOG_ERR,
- "udp/bootpc: unknown service -- assuming port %d",
- IPPORT_BOOTPC);
- bootpc_port = (u_short) IPPORT_BOOTPC;
- }
-
- /*
- * Set up signals to read or dump the table.
- */
- if ((int) signal(SIGHUP, catcher) < 0) {
- report(LOG_ERR, "signal: %s", get_errmsg());
- exit(1);
- }
- if ((int) signal(SIGUSR1, catcher) < 0) {
- report(LOG_ERR, "signal: %s", get_errmsg());
- exit(1);
- }
-
- /*
- * Process incoming requests.
- */
- for (;;) {
- readfds = 1 << s;
- nfound = select(s + 1, (fd_set *)&readfds, NULL, NULL, timeout);
- if (nfound < 0) {
- if (errno != EINTR) {
- report(LOG_ERR, "select: %s", get_errmsg());
- }
- /*
- * Call readtab() or dumptab() here to avoid the
- * dangers of doing I/O from a signal handler.
- */
- if (do_readtab) {
- do_readtab = 0;
- readtab(1); /* force read */
- }
- if (do_dumptab) {
- do_dumptab = 0;
- dumptab(bootpd_dump);
- }
- continue;
- }
- if (!(readfds & (1 << s))) {
- if (debug > 1)
- report(LOG_INFO, "exiting after %ld minutes of inactivity",
- actualtimeout.tv_sec / 60);
- exit(0);
- }
- ra_len = sizeof(recv_addr);
- n = recvfrom(s, pktbuf, MAX_MSG_SIZE, 0,
- (struct sockaddr *) &recv_addr, &ra_len);
- if (n <= 0) {
- continue;
- }
- if (debug > 1) {
- report(LOG_INFO, "recvd pkt from IP addr %s",
- inet_ntoa(recv_addr.sin_addr));
- }
- if (n < sizeof(struct bootp)) {
- if (debug) {
- report(LOG_INFO, "received short packet");
- }
- continue;
- }
- pktlen = n;
-
- readtab(0); /* maybe re-read bootptab */
-
- switch (bp->bp_op) {
- case BOOTREQUEST:
- handle_request();
- break;
- case BOOTREPLY:
- handle_reply();
- break;
- }
- }
-}
-
-
-
-
-/*
- * Print "usage" message and exit
- */
-
-PRIVATE void
-usage()
-{
- fprintf(stderr,
- "usage: bootpd [-d level] [-i] [-s] [-t timeout] [configfile [dumpfile]]\n");
- fprintf(stderr, "\t -c n\tset current directory\n");
- fprintf(stderr, "\t -d n\tset debug level\n");
- fprintf(stderr, "\t -i\tforce inetd mode (run as child of inetd)\n");
- fprintf(stderr, "\t -s\tforce standalone mode (run without inetd)\n");
- fprintf(stderr, "\t -t n\tset inetd exit timeout to n minutes\n");
- exit(1);
-}
-
-/* Signal catchers */
-PRIVATE void
-catcher(sig)
- int sig;
-{
- if (sig == SIGHUP)
- do_readtab = 1;
- if (sig == SIGUSR1)
- do_dumptab = 1;
-#ifdef SYSV
- /* For older "System V" derivatives with no sigset(). */
- /* XXX - Should just do it the POSIX way (sigaction). */
- signal(sig, catcher);
-#endif
-}
-
-
-
-/*
- * Process BOOTREQUEST packet.
- *
- * Note: This version of the bootpd.c server never forwards
- * a request to another server. That is the job of a gateway
- * program such as the "bootpgw" program included here.
- *
- * (Also this version does not interpret the hostname field of
- * the request packet; it COULD do a name->address lookup and
- * forward the request there.)
- */
-PRIVATE void
-handle_request()
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct host *hp = NULL;
- struct host dummyhost;
- int32 bootsize = 0;
- unsigned hlen, hashcode;
- int32 dest;
- char realpath[1024];
- char *clntpath;
- char *homedir, *bootfile;
- int n;
-
- /* XXX - SLIP init: Set bp_ciaddr = recv_addr here? */
-
- /*
- * If the servername field is set, compare it against us.
- * If we're not being addressed, ignore this request.
- * If the server name field is null, throw in our name.
- */
- if (strlen(bp->bp_sname)) {
- if (strcmp(bp->bp_sname, hostname)) {
- if (debug)
- report(LOG_INFO, "\
-ignoring request for server %s from client at %s address %s",
- bp->bp_sname, netname(bp->bp_htype),
- haddrtoa(bp->bp_chaddr, bp->bp_hlen));
- /* XXX - Is it correct to ignore such a request? -gwr */
- return;
- }
- } else {
- strcpy(bp->bp_sname, hostname);
- }
-
- /* Convert the request into a reply. */
- bp->bp_op = BOOTREPLY;
- if (bp->bp_ciaddr.s_addr == 0) {
- /*
- * client doesnt know his IP address,
- * search by hardware address.
- */
- if (debug > 1) {
- report(LOG_INFO, "request from %s address %s",
- netname(bp->bp_htype),
- haddrtoa(bp->bp_chaddr, bp->bp_hlen));
- }
- hlen = haddrlength(bp->bp_htype);
- if (hlen != bp->bp_hlen) {
- report(LOG_NOTICE, "bad addr len from from %s address %s",
- netname(bp->bp_htype),
- haddrtoa(bp->bp_chaddr, hlen));
- }
- dummyhost.htype = bp->bp_htype;
- bcopy(bp->bp_chaddr, dummyhost.haddr, hlen);
- hashcode = hash_HashFunction(bp->bp_chaddr, hlen);
- hp = (struct host *) hash_Lookup(hwhashtable, hashcode, hwlookcmp,
- &dummyhost);
- if (hp == NULL &&
- bp->bp_htype == HTYPE_IEEE802)
- {
- /* Try again with address in "canonical" form. */
- haddr_conv802(bp->bp_chaddr, dummyhost.haddr, hlen);
- if (debug > 1) {
- report(LOG_INFO, "\
-HW addr type is IEEE 802. convert to %s and check again\n",
- haddrtoa(dummyhost.haddr, bp->bp_hlen));
- }
- hashcode = hash_HashFunction(dummyhost.haddr, hlen);
- hp = (struct host *) hash_Lookup(hwhashtable, hashcode,
- hwlookcmp, &dummyhost);
- }
- if (hp == NULL) {
- /*
- * XXX - Add dynamic IP address assignment?
- */
- if (debug > 1)
- report(LOG_INFO, "unknown client %s address %s",
- netname(bp->bp_htype),
- haddrtoa(bp->bp_chaddr, bp->bp_hlen));
- return; /* not found */
- }
- (bp->bp_yiaddr).s_addr = hp->iaddr.s_addr;
-
- } else {
-
- /*
- * search by IP address.
- */
- if (debug > 1) {
- report(LOG_INFO, "request from IP addr %s",
- inet_ntoa(bp->bp_ciaddr));
- }
- dummyhost.iaddr.s_addr = bp->bp_ciaddr.s_addr;
- hashcode = hash_HashFunction((u_char *) &(bp->bp_ciaddr.s_addr), 4);
- hp = (struct host *) hash_Lookup(iphashtable, hashcode, iplookcmp,
- &dummyhost);
- if (hp == NULL) {
- if (debug > 1) {
- report(LOG_NOTICE, "IP address not found: %s",
- inet_ntoa(bp->bp_ciaddr));
- }
- return;
- }
- }
-
- if (debug) {
- report(LOG_INFO, "found %s (%s)", inet_ntoa(hp->iaddr),
- hp->hostname->string);
- }
-
- /*
- * If there is a response delay threshold, ignore requests
- * with a timestamp lower than the threshold.
- */
- if (hp->flags.min_wait) {
- u_int32 t = (u_int32) ntohs(bp->bp_secs);
- if (t < hp->min_wait) {
- if (debug > 1)
- report(LOG_INFO,
- "ignoring request due to timestamp (%d < %d)",
- t, hp->min_wait);
- return;
- }
- }
-
-#ifdef YORK_EX_OPTION
- /*
- * The need for the "ex" tag arose out of the need to empty
- * shared networked drives on diskless PCs. This solution is
- * not very clean but it does work fairly well.
- * Written by Edmund J. Sutcliffe <edmund@york.ac.uk>
- *
- * XXX - This could compromise security if a non-trusted user
- * managed to write an entry in the bootptab with :ex=trojan:
- * so I would leave this turned off unless you need it. -gwr
- */
- /* Run a program, passing the client name as a parameter. */
- if (hp->flags.exec_file) {
- char tst[100];
- /* XXX - Check string lengths? -gwr */
- strcpy (tst, hp->exec_file->string);
- strcat (tst, " ");
- strcat (tst, hp->hostname->string);
- strcat (tst, " &");
- if (debug)
- report(LOG_INFO, "executing %s", tst);
- system(tst); /* Hope this finishes soon... */
- }
-#endif /* YORK_EX_OPTION */
-
- /*
- * If a specific TFTP server address was specified in the bootptab file,
- * fill it in, otherwise zero it.
- * XXX - Rather than zero it, should it be the bootpd address? -gwr
- */
- (bp->bp_siaddr).s_addr = (hp->flags.bootserver) ?
- hp->bootserver.s_addr : 0L;
-
-#ifdef STANFORD_PROM_COMPAT
- /*
- * Stanford bootp PROMs (for a Sun?) have no way to leave
- * the boot file name field blank (because the boot file
- * name is automatically generated from some index).
- * As a work-around, this little hack allows those PROMs to
- * specify "sunboot14" with the same effect as a NULL name.
- * (The user specifies boot device 14 or some such magic.)
- */
- if (strcmp(bp->bp_file, "sunboot14") == 0)
- bp->bp_file[0] = '\0'; /* treat it as unspecified */
-#endif
-
- /*
- * Fill in the client's proper bootfile.
- *
- * If the client specifies an absolute path, try that file with a
- * ".host" suffix and then without. If the file cannot be found, no
- * reply is made at all.
- *
- * If the client specifies a null or relative file, use the following
- * table to determine the appropriate action:
- *
- * Homedir Bootfile Client's file
- * specified? specified? specification Action
- * -------------------------------------------------------------------
- * No No Null Send null filename
- * No No Relative Discard request
- * No Yes Null Send if absolute else null
- * No Yes Relative Discard request *XXX
- * Yes No Null Send null filename
- * Yes No Relative Lookup with ".host"
- * Yes Yes Null Send home/boot or bootfile
- * Yes Yes Relative Lookup with ".host" *XXX
- *
- */
-
- /*
- * XXX - I don't like the policy of ignoring a client when the
- * boot file is not accessible. The TFTP server might not be
- * running on the same machine as the BOOTP server, in which
- * case checking accessibility of the boot file is pointless.
- *
- * Therefore, file accessibility is now demanded ONLY if you
- * define CHECK_FILE_ACCESS in the Makefile options. -gwr
- */
-
- /*
- * The "real" path is as seen by the BOOTP daemon on this
- * machine, while the client path is relative to the TFTP
- * daemon chroot directory (i.e. /tftpboot).
- */
- if (hp->flags.tftpdir) {
- strcpy(realpath, hp->tftpdir->string);
- clntpath = &realpath[strlen(realpath)];
- } else {
- realpath[0] = '\0';
- clntpath = realpath;
- }
-
- /*
- * Determine client's requested homedir and bootfile.
- */
- homedir = NULL;
- bootfile = NULL;
- if (bp->bp_file[0]) {
- homedir = bp->bp_file;
- bootfile = strrchr(homedir, '/');
- if (bootfile) {
- if (homedir == bootfile)
- homedir = NULL;
- *bootfile++ = '\0';
- } else {
- /* no "/" in the string */
- bootfile = homedir;
- homedir = NULL;
- }
- if (debug > 2) {
- report(LOG_INFO, "requested path=\"%s\" file=\"%s\"",
- (homedir) ? homedir : "",
- (bootfile) ? bootfile : "");
- }
- }
-
- /*
- * Specifications in bootptab override client requested values.
- */
- if (hp->flags.homedir)
- homedir = hp->homedir->string;
- if (hp->flags.bootfile)
- bootfile = hp->bootfile->string;
-
- /*
- * Construct bootfile path.
- */
- if (homedir) {
- if (homedir[0] != '/')
- strcat(clntpath, "/");
- strcat(clntpath, homedir);
- homedir = NULL;
- }
- if (bootfile) {
- if (bootfile[0] != '/')
- strcat(clntpath, "/");
- strcat(clntpath, bootfile);
- bootfile = NULL;
- }
-
- /*
- * First try to find the file with a ".host" suffix
- */
- n = strlen(clntpath);
- strcat(clntpath, ".");
- strcat(clntpath, hp->hostname->string);
- if (chk_access(realpath, &bootsize) < 0) {
- clntpath[n] = 0; /* Try it without the suffix */
- if (chk_access(realpath, &bootsize) < 0) {
- /* neither "file.host" nor "file" was found */
-#ifdef CHECK_FILE_ACCESS
-
- if (bp->bp_file[0]) {
- /*
- * Client wanted specific file
- * and we didn't have it.
- */
- report(LOG_NOTICE,
- "requested file not found: \"%s\"", clntpath);
- return;
- }
- /*
- * Client didn't ask for a specific file and we couldn't
- * access the default file, so just zero-out the bootfile
- * field in the packet and continue processing the reply.
- */
- bzero(bp->bp_file, sizeof(bp->bp_file));
- goto null_file_name;
-
-#else /* CHECK_FILE_ACCESS */
-
- /* Complain only if boot file size was needed. */
- if (hp->flags.bootsize_auto) {
- report(LOG_ERR, "can not determine size of file \"%s\"",
- clntpath);
- }
-
-#endif /* CHECK_FILE_ACCESS */
- }
- }
- strncpy(bp->bp_file, clntpath, BP_FILE_LEN);
- if (debug > 2)
- report(LOG_INFO, "bootfile=\"%s\"", clntpath);
-
-null_file_name:
-
-
- /*
- * Handle vendor options based on magic number.
- */
-
- if (debug > 1) {
- report(LOG_INFO, "vendor magic field is %d.%d.%d.%d",
- (int) ((bp->bp_vend)[0]),
- (int) ((bp->bp_vend)[1]),
- (int) ((bp->bp_vend)[2]),
- (int) ((bp->bp_vend)[3]));
- }
- /*
- * If this host isn't set for automatic vendor info then copy the
- * specific cookie into the bootp packet, thus forcing a certain
- * reply format. Only force reply format if user specified it.
- */
- if (hp->flags.vm_cookie) {
- /* Slam in the user specified magic number. */
- bcopy(hp->vm_cookie, bp->bp_vend, 4);
- }
- /*
- * Figure out the format for the vendor-specific info.
- * Note that bp->bp_vend may have been set above.
- */
- if (!bcmp(bp->bp_vend, vm_rfc1048, 4)) {
- /* RFC1048 conformant bootp client */
- dovend_rfc1048(bp, hp, bootsize);
- if (debug > 1) {
- report(LOG_INFO, "sending reply (with RFC1048 options)");
- }
- }
-#ifdef VEND_CMU
- else if (!bcmp(bp->bp_vend, vm_cmu, 4)) {
- dovend_cmu(bp, hp);
- if (debug > 1) {
- report(LOG_INFO, "sending reply (with CMU options)");
- }
- }
-#endif
- else {
- if (debug > 1) {
- report(LOG_INFO, "sending reply (with no options)");
- }
- }
-
- dest = (hp->flags.reply_addr) ?
- hp->reply_addr.s_addr : 0L;
-
- /* not forwarded */
- sendreply(0, dest);
-}
-
-
-/*
- * Process BOOTREPLY packet.
- */
-PRIVATE void
-handle_reply()
-{
- if (debug) {
- report(LOG_INFO, "processing boot reply");
- }
- /* forwarded, no destination override */
- sendreply(1, 0);
-}
-
-
-/*
- * Send a reply packet to the client. 'forward' flag is set if we are
- * not the originator of this reply packet.
- */
-PRIVATE void
-sendreply(forward, dst_override)
- int forward;
- int32 dst_override;
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct in_addr dst;
- u_short port = bootpc_port;
- unsigned char *ha;
- int len;
-
- /*
- * XXX - Should honor bp_flags "broadcast" bit here.
- * Temporary workaround: use the :ra=ADDR: option to
- * set the reply address to the broadcast address.
- */
-
- /*
- * If the destination address was specified explicitly
- * (i.e. the broadcast address for HP compatiblity)
- * then send the response to that address. Otherwise,
- * act in accordance with RFC951:
- * If the client IP address is specified, use that
- * else if gateway IP address is specified, use that
- * else make a temporary arp cache entry for the client's
- * NEW IP/hardware address and use that.
- */
- if (dst_override) {
- dst.s_addr = dst_override;
- if (debug > 1) {
- report(LOG_INFO, "reply address override: %s",
- inet_ntoa(dst));
- }
- } else if (bp->bp_ciaddr.s_addr) {
- dst = bp->bp_ciaddr;
- } else if (bp->bp_giaddr.s_addr && forward == 0) {
- dst = bp->bp_giaddr;
- port = bootps_port;
- if (debug > 1) {
- report(LOG_INFO, "sending reply to gateway %s",
- inet_ntoa(dst));
- }
- } else {
- dst = bp->bp_yiaddr;
- ha = bp->bp_chaddr;
- len = bp->bp_hlen;
- if (len > MAXHADDRLEN)
- len = MAXHADDRLEN;
-
- if (debug > 1)
- report(LOG_INFO, "setarp %s - %s",
- inet_ntoa(dst), haddrtoa(ha, len));
- setarp(s, &dst, ha, len);
- }
-
- if ((forward == 0) &&
- (bp->bp_siaddr.s_addr == 0))
- {
- struct ifreq *ifr;
- struct in_addr siaddr;
- /*
- * If we are originating this reply, we
- * need to find our own interface address to
- * put in the bp_siaddr field of the reply.
- * If this server is multi-homed, pick the
- * 'best' interface (the one on the same net
- * as the client). Of course, the client may
- * be on the other side of a BOOTP gateway...
- */
- ifr = getif(s, &dst);
- if (ifr) {
- struct sockaddr_in *sip;
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- siaddr = sip->sin_addr;
- } else {
- /* Just use my "official" IP address. */
- siaddr = my_ip_addr;
- }
-
- /* XXX - No need to set bp_giaddr here. */
-
- /* Finally, set the server address field. */
- bp->bp_siaddr = siaddr;
- }
- /* Set up socket address for send. */
- send_addr.sin_family = AF_INET;
- send_addr.sin_port = htons(port);
- send_addr.sin_addr = dst;
-
- /* Send reply with same size packet as request used. */
- if (sendto(s, pktbuf, pktlen, 0,
- (struct sockaddr *) &send_addr,
- sizeof(send_addr)) < 0)
- {
- report(LOG_ERR, "sendto: %s", get_network_errmsg());
- }
-} /* sendreply */
-
-
-/* nmatch() - now in getif.c */
-/* setarp() - now in hwaddr.c */
-
-
-/*
- * This call checks read access to a file. It returns 0 if the file given
- * by "path" exists and is publically readable. A value of -1 is returned if
- * access is not permitted or an error occurs. Successful calls also
- * return the file size in bytes using the long pointer "filesize".
- *
- * The read permission bit for "other" users is checked. This bit must be
- * set for tftpd(8) to allow clients to read the file.
- */
-
-PRIVATE int
-chk_access(path, filesize)
- char *path;
- int32 *filesize;
-{
- struct stat st;
-
- if ((stat(path, &st) == 0) && (st.st_mode & (S_IREAD >> 6))) {
- *filesize = (int32) st.st_size;
- return 0;
- } else {
- return -1;
- }
-}
-
-
-/*
- * Now in dumptab.c :
- * dumptab()
- * dump_host()
- * list_ipaddresses()
- */
-
-#ifdef VEND_CMU
-
-/*
- * Insert the CMU "vendor" data for the host pointed to by "hp" into the
- * bootp packet pointed to by "bp".
- */
-
-PRIVATE void
-dovend_cmu(bp, hp)
- struct bootp *bp;
- struct host *hp;
-{
- struct cmu_vend *vendp;
- struct in_addr_list *taddr;
-
- /*
- * Initialize the entire vendor field to zeroes.
- */
- bzero(bp->bp_vend, sizeof(bp->bp_vend));
-
- /*
- * Fill in vendor information. Subnet mask, default gateway,
- * domain name server, ien name server, time server
- */
- vendp = (struct cmu_vend *) bp->bp_vend;
- strcpy(vendp->v_magic, (char *)vm_cmu);
- if (hp->flags.subnet_mask) {
- (vendp->v_smask).s_addr = hp->subnet_mask.s_addr;
- (vendp->v_flags) |= VF_SMASK;
- if (hp->flags.gateway) {
- (vendp->v_dgate).s_addr = hp->gateway->addr->s_addr;
- }
- }
- if (hp->flags.domain_server) {
- taddr = hp->domain_server;
- if (taddr->addrcount > 0) {
- (vendp->v_dns1).s_addr = (taddr->addr)[0].s_addr;
- if (taddr->addrcount > 1) {
- (vendp->v_dns2).s_addr = (taddr->addr)[1].s_addr;
- }
- }
- }
- if (hp->flags.name_server) {
- taddr = hp->name_server;
- if (taddr->addrcount > 0) {
- (vendp->v_ins1).s_addr = (taddr->addr)[0].s_addr;
- if (taddr->addrcount > 1) {
- (vendp->v_ins2).s_addr = (taddr->addr)[1].s_addr;
- }
- }
- }
- if (hp->flags.time_server) {
- taddr = hp->time_server;
- if (taddr->addrcount > 0) {
- (vendp->v_ts1).s_addr = (taddr->addr)[0].s_addr;
- if (taddr->addrcount > 1) {
- (vendp->v_ts2).s_addr = (taddr->addr)[1].s_addr;
- }
- }
- }
- /* Log message now done by caller. */
-} /* dovend_cmu */
-
-#endif /* VEND_CMU */
-
-
-
-/*
- * Insert the RFC1048 vendor data for the host pointed to by "hp" into the
- * bootp packet pointed to by "bp".
- */
-#define NEED(LEN, MSG) do \
- if (bytesleft < (LEN)) { \
- report(LOG_NOTICE, noroom, \
- hp->hostname->string, MSG); \
- return; \
- } while (0)
-PRIVATE void
-dovend_rfc1048(bp, hp, bootsize)
- struct bootp *bp;
- struct host *hp;
- int32 bootsize;
-{
- int bytesleft, len;
- byte *vp;
- char *tmpstr;
-
- static char noroom[] = "%s: No room for \"%s\" option";
-
- vp = bp->bp_vend;
-
- if (hp->flags.msg_size) {
- pktlen = hp->msg_size;
- } else {
- /*
- * If the request was longer than the official length, build
- * a response of that same length where the additional length
- * is assumed to be part of the bp_vend (options) area.
- */
- if (pktlen > sizeof(*bp)) {
- if (debug > 1)
- report(LOG_INFO, "request message length=%d", pktlen);
- }
- /*
- * Check whether the request contains the option:
- * Maximum DHCP Message Size (RFC1533 sec. 9.8)
- * and if so, override the response length with its value.
- * This request must lie within the first BP_VEND_LEN
- * bytes of the option space.
- */
- {
- byte *p, *ep;
- byte tag, len;
- short msgsz = 0;
-
- p = vp + 4;
- ep = p + BP_VEND_LEN - 4;
- while (p < ep) {
- tag = *p++;
- /* Check for tags with no data first. */
- if (tag == TAG_PAD)
- continue;
- if (tag == TAG_END)
- break;
- /* Now scan the length byte. */
- len = *p++;
- switch (tag) {
- case TAG_MAX_MSGSZ:
- if (len == 2) {
- bcopy(p, (char*)&msgsz, 2);
- msgsz = ntohs(msgsz);
- }
- break;
- case TAG_SUBNET_MASK:
- /* XXX - Should preserve this if given... */
- break;
- } /* swtich */
- p += len;
- }
-
- if (msgsz > sizeof(*bp)) {
- if (debug > 1)
- report(LOG_INFO, "request has DHCP msglen=%d", msgsz);
- pktlen = msgsz;
- }
- }
- }
-
- if (pktlen < sizeof(*bp)) {
- report(LOG_ERR, "invalid response length=%d", pktlen);
- pktlen = sizeof(*bp);
- }
- bytesleft = ((byte*)bp + pktlen) - vp;
- if (pktlen > sizeof(*bp)) {
- if (debug > 1)
- report(LOG_INFO, "extended reply, length=%d, options=%d",
- pktlen, bytesleft);
- }
-
- /* Copy in the magic cookie */
- bcopy(vm_rfc1048, vp, 4);
- vp += 4;
- bytesleft -= 4;
-
- if (hp->flags.subnet_mask) {
- /* always enough room here. */
- *vp++ = TAG_SUBNET_MASK;/* -1 byte */
- *vp++ = 4; /* -1 byte */
- insert_u_long(hp->subnet_mask.s_addr, &vp); /* -4 bytes */
- bytesleft -= 6; /* Fix real count */
- if (hp->flags.gateway) {
- (void) insert_ip(TAG_GATEWAY,
- hp->gateway,
- &vp, &bytesleft);
- }
- }
- if (hp->flags.bootsize) {
- /* always enough room here */
- bootsize = (hp->flags.bootsize_auto) ?
- ((bootsize + 511) / 512) : (hp->bootsize); /* Round up */
- *vp++ = TAG_BOOT_SIZE;
- *vp++ = 2;
- *vp++ = (byte) ((bootsize >> 8) & 0xFF);
- *vp++ = (byte) (bootsize & 0xFF);
- bytesleft -= 4; /* Tag, length, and 16 bit blocksize */
- }
- /*
- * This one is special: Remaining options go in the ext file.
- * Only the subnet_mask, bootsize, and gateway should precede.
- */
- if (hp->flags.exten_file) {
- /*
- * Check for room for exten_file. Add 3 to account for
- * TAG_EXTEN_FILE, length, and TAG_END.
- */
- len = strlen(hp->exten_file->string);
- NEED((len + 3), "ef");
- *vp++ = TAG_EXTEN_FILE;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->exten_file->string, vp, len);
- vp += len;
- *vp++ = TAG_END;
- bytesleft -= len + 3;
- return; /* no more options here. */
- }
- /*
- * The remaining options are inserted by the following
- * function (which is shared with bootpef.c).
- * Keep back one byte for the TAG_END.
- */
- len = dovend_rfc1497(hp, vp, bytesleft - 1);
- vp += len;
- bytesleft -= len;
-
- /* There should be at least one byte left. */
- NEED(1, "(end)");
- *vp++ = TAG_END;
- bytesleft--;
-
- /* Log message done by caller. */
- if (bytesleft > 0) {
- /*
- * Zero out any remaining part of the vendor area.
- */
- bzero(vp, bytesleft);
- }
-} /* dovend_rfc1048 */
-#undef NEED
-
-
-/*
- * Now in readfile.c:
- * hwlookcmp()
- * iplookcmp()
- */
-
-/* haddrtoa() - now in hwaddr.c */
-/*
- * Now in dovend.c:
- * insert_ip()
- * insert_generic()
- * insert_u_long()
- */
-
-/* get_errmsg() - now in report.c */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/bootpd.h b/usr.sbin/bootpd/bootpd.h
deleted file mode 100644
index e5ce341..0000000
--- a/usr.sbin/bootpd/bootpd.h
+++ /dev/null
@@ -1,211 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-
-/*
- * bootpd.h -- common header file for all the modules of the bootpd program.
- */
-
-#include "bptypes.h"
-#include "hash.h"
-#include "hwaddr.h"
-
-#ifndef TRUE
-#define TRUE 1
-#endif
-#ifndef FALSE
-#define FALSE 0
-#endif
-
-#ifndef PRIVATE
-#define PRIVATE static
-#endif
-
-#ifndef SIGUSR1
-#define SIGUSR1 30 /* From 4.3 <signal.h> */
-#endif
-
-#define MAXSTRINGLEN 80 /* Max string length */
-
-/* Local definitions: */
-#define MAX_MSG_SIZE (3*512) /* Maximum packet size */
-
-
-/*
- * Return pointer to static string which gives full network error message.
- */
-#define get_network_errmsg get_errmsg
-
-
-/*
- * Data structure used to hold an arbitrary-lengthed list of IP addresses.
- * The list may be shared among multiple hosts by setting the linkcount
- * appropriately.
- */
-
-struct in_addr_list {
- unsigned int linkcount, addrcount;
- struct in_addr addr[1]; /* Dynamically extended */
-};
-
-
-/*
- * Data structures used to hold shared strings and shared binary data.
- * The linkcount must be set appropriately.
- */
-
-struct shared_string {
- unsigned int linkcount;
- char string[1]; /* Dynamically extended */
-};
-
-struct shared_bindata {
- unsigned int linkcount, length;
- byte data[1]; /* Dynamically extended */
-};
-
-
-/*
- * Flag structure which indicates which symbols have been defined for a
- * given host. This information is used to determine which data should or
- * should not be reported in the bootp packet vendor info field.
- */
-
-struct flag {
- unsigned bootfile :1,
- bootserver :1,
- bootsize :1,
- bootsize_auto :1,
- cookie_server :1,
- domain_server :1,
- gateway :1,
- generic :1,
- haddr :1,
- homedir :1,
- htype :1,
- impress_server :1,
- iaddr :1,
- log_server :1,
- lpr_server :1,
- name_server :1,
- name_switch :1,
- rlp_server :1,
- send_name :1,
- subnet_mask :1,
- tftpdir :1,
- time_offset :1,
- time_server :1,
- dump_file :1,
- domain_name :1,
- swap_server :1,
- root_path :1,
- exten_file :1,
- reply_addr :1,
- nis_domain :1,
- nis_server :1,
- ntp_server :1,
- exec_file :1,
- msg_size :1,
- min_wait :1,
- /* XXX - Add new tags here */
- vm_cookie :1;
-};
-
-
-
-/*
- * The flags structure contains TRUE flags for all the fields which
- * are considered valid, regardless of whether they were explicitly
- * specified or indirectly inferred from another entry.
- *
- * The gateway and the various server fields all point to a shared list of
- * IP addresses.
- *
- * The hostname, home directory, and bootfile are all shared strings.
- *
- * The generic data field is a shared binary data structure. It is used to
- * hold future RFC1048 vendor data until bootpd is updated to understand it.
- *
- * The vm_cookie field specifies the four-octet vendor magic cookie to use
- * if it is desired to always send the same response to a given host.
- *
- * Hopefully, the rest is self-explanatory.
- */
-
-struct host {
- unsigned linkcount; /* hash list inserts */
- struct flag flags; /* ALL valid fields */
- struct in_addr_list *cookie_server,
- *domain_server,
- *gateway,
- *impress_server,
- *log_server,
- *lpr_server,
- *name_server,
- *rlp_server,
- *time_server,
- *nis_server,
- *ntp_server;
- struct shared_string *bootfile,
- *hostname,
- *domain_name,
- *homedir,
- *tftpdir,
- *dump_file,
- *exten_file,
- *root_path,
- *nis_domain,
- *exec_file;
- struct shared_bindata *generic;
- byte vm_cookie[4],
- htype, /* RFC826 says this should be 16-bits but
- RFC951 only allocates 1 byte. . . */
- haddr[MAXHADDRLEN];
- int32 time_offset;
- unsigned int32 bootsize,
- msg_size,
- min_wait;
- struct in_addr bootserver,
- iaddr,
- swap_server,
- reply_addr,
- subnet_mask;
- /* XXX - Add new tags here (or above as appropriate) */
-};
-
-
-
-/*
- * Variables shared among modules.
- */
-
-extern int debug;
-extern char *bootptab;
-extern char *progname;
-
-extern u_char vm_cmu[4];
-extern u_char vm_rfc1048[4];
-
-extern hash_tbl *hwhashtable;
-extern hash_tbl *iphashtable;
-extern hash_tbl *nmhashtable;
-
diff --git a/usr.sbin/bootpd/bootpef.8 b/usr.sbin/bootpd/bootpef.8
deleted file mode 100644
index 0f0b1fc..0000000
--- a/usr.sbin/bootpd/bootpef.8
+++ /dev/null
@@ -1,52 +0,0 @@
-.\" bootpef.8
-.TH BOOTPEF 8 "4 Dec 1993" "MAINTENANCE COMMANDS"
-.SH NAME
-bootpef \- BOOTP Extension File compiler
-.SH SYNOPSIS
-.LP
-.B bootpef
-.RI [ "-c chdir" ]
-.RI [ "-d debug-level" ]
-.RI [ "-f config-file" ]
-.RI [ client-name " [...]]"
-.SH DESCRIPTION
-.B bootpef
-builds the
-.I Extension Path
-files described by RFC 1497 (tag 18).
-If any
-.I client-name
-arguments are specified, then
-.I bootpef
-compiles the extension files for only those clients.
-.SH OPTIONS
-.TP
-.BI \-c \ chdir\-path
-Sets the current directory used by
-.I bootpef
-while creating extension files. This is useful when the
-extension file names are specified as relative pathnames, and
-.I bootpef
-needs to use the same current directory as the TFTP server
-(typically /tftpboot).
-.TP
-.BI \-d \ debug\-level
-Sets the
-.I debug\-level
-variable that controls the amount of debugging messages generated.
-For example, -d4 or -d 4 will set the debugging level to 4.
-.TP
-.BI \-f \ config\-file
-Set the name of the config file that specifies the option
-data to be sent to each client.
-.SH "SEE ALSO"
-bootpd(8), tftpd(8)
-.SH REFERENCES
-.TP
-RFC951
-BOOTSTRAP PROTOCOL (BOOTP)
-.TP
-RFC1497
-BOOTP Vendor Information Extensions
-
-
diff --git a/usr.sbin/bootpd/bootpef.c b/usr.sbin/bootpd/bootpef.c
deleted file mode 100644
index 4b2e3f4..0000000
--- a/usr.sbin/bootpd/bootpef.c
+++ /dev/null
@@ -1,347 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: bootpef.c,v 1.2 1994/08/22 22:14:46 gwr Exp $";
-#endif
-
-
-/*
- * bootpef - BOOTP Extension File generator
- * Makes an "Extension File" for each host entry that
- * defines an and Extension File. (See RFC1497, tag 18.)
- *
- * HISTORY
- * See ./Changes
- *
- * BUGS
- * See ./ToDo
- */
-
-
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/time.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#ifndef NO_UNISTD
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <syslog.h>
-
-#ifndef USE_BFUNCS
-#include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#define bzero(p,l) memset(p,0,l)
-#define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "hash.h"
-#include "hwaddr.h"
-#include "bootpd.h"
-#include "dovend.h"
-#include "readfile.h"
-#include "report.h"
-#include "tzone.h"
-#include "patchlevel.h"
-
-#define BUFFERSIZE 0x4000
-
-#ifndef CONFIG_FILE
-#define CONFIG_FILE "/etc/bootptab"
-#endif
-
-
-
-/*
- * Externals, forward declarations, and global variables
- */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-static void dovend_rfc1048 P((struct bootp *, struct host *, int32));
-static void mktagfile P((struct host *));
-static void usage P((void));
-
-#undef P
-
-
-/*
- * General
- */
-
-char *progname;
-char *chdir_path;
-int debug = 0; /* Debugging flag (level) */
-byte *buffer;
-
-/*
- * Globals below are associated with the bootp database file (bootptab).
- */
-
-char *bootptab = CONFIG_FILE;
-
-
-/*
- * Print "usage" message and exit
- */
-static void
-usage()
-{
- fprintf(stderr,
- "usage: $s [ -c chdir ] [-d level] [-f configfile] [host...]\n");
- fprintf(stderr, "\t -c n\tset current directory\n");
- fprintf(stderr, "\t -d n\tset debug level\n");
- fprintf(stderr, "\t -f n\tconfig file name\n");
- exit(1);
-}
-
-
-/*
- * Initialization such as command-line processing is done and then the
- * main server loop is started.
- */
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct host *hp;
- char *stmp;
- int n;
-
- progname = strrchr(argv[0], '/');
- if (progname) progname++;
- else progname = argv[0];
-
- /* Get work space for making tag 18 files. */
- buffer = (byte *) malloc(BUFFERSIZE);
- if (!buffer) {
- report(LOG_ERR, "malloc failed");
- exit(1);
- }
- /*
- * Set defaults that might be changed by option switches.
- */
- stmp = NULL;
-
- /*
- * Read switches.
- */
- for (argc--, argv++; argc > 0; argc--, argv++) {
- if (argv[0][0] != '-')
- break;
- switch (argv[0][1]) {
-
- case 'c': /* chdir_path */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (stmp[0] != '/')) {
- fprintf(stderr,
- "bootpd: invalid chdir specification\n");
- break;
- }
- chdir_path = stmp;
- break;
-
- case 'd': /* debug */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else if (argv[1] && argv[1][0] == '-') {
- /*
- * Backwards-compatible behavior:
- * no parameter, so just increment the debug flag.
- */
- debug++;
- break;
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "bootpd: invalid debug level\n");
- break;
- }
- debug = n;
- break;
-
- case 'f': /* config file */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- bootptab = stmp;
- break;
-
- default:
- fprintf(stderr, "bootpd: unknown switch: -%c\n",
- argv[0][1]);
- usage();
- break;
- }
- }
-
- /* Get the timezone. */
- tzone_init();
-
- /* Allocate hash tables. */
- rdtab_init();
-
- /*
- * Read the bootptab file.
- */
- readtab(1); /* force read */
-
- /* Set the cwd (i.e. to /tftpboot) */
- if (chdir_path) {
- if (chdir(chdir_path) < 0)
- report(LOG_ERR, "%s: chdir failed", chdir_path);
- }
- /* If there are host names on the command line, do only those. */
- if (argc > 0) {
- unsigned int tlen, hashcode;
-
- while (argc) {
- tlen = strlen(argv[0]);
- hashcode = hash_HashFunction((u_char *)argv[0], tlen);
- hp = (struct host *) hash_Lookup(nmhashtable,
- hashcode,
- nmcmp, argv[0]);
- if (!hp) {
- printf("%s: no matching entry\n", argv[0]);
- exit(1);
- }
- if (!hp->flags.exten_file) {
- printf("%s: no extension file\n", argv[0]);
- exit(1);
- }
- mktagfile(hp);
- argv++;
- argc--;
- }
- exit(0);
- }
- /* No host names specified. Do them all. */
- hp = (struct host *) hash_FirstEntry(nmhashtable);
- while (hp != NULL) {
- mktagfile(hp);
- hp = (struct host *) hash_NextEntry(nmhashtable);
- }
-}
-
-
-
-/*
- * Make a "TAG 18" file for this host.
- * (Insert the RFC1497 options.)
- */
-
-static void
-mktagfile(hp)
- struct host *hp;
-{
- FILE *fp;
- int bytesleft, len;
- byte *vp;
- char *tmpstr;
-
- if (!hp->flags.exten_file)
- return;
-
- vp = buffer;
- bytesleft = BUFFERSIZE;
- bcopy(vm_rfc1048, vp, 4); /* Copy in the magic cookie */
- vp += 4;
- bytesleft -= 4;
-
- /*
- * The "extension file" options are appended by the following
- * function (which is shared with bootpd.c).
- */
- len = dovend_rfc1497(hp, vp, bytesleft);
- vp += len;
- bytesleft -= len;
-
- if (bytesleft < 1) {
- report(LOG_ERR, "%s: too much option data",
- hp->exten_file->string);
- return;
- }
- *vp++ = TAG_END;
- bytesleft--;
-
- /* Write the buffer to the extension file. */
- printf("Updating \"%s\"\n", hp->exten_file->string);
- if ((fp = fopen(hp->exten_file->string, "w")) == NULL) {
- report(LOG_ERR, "error opening \"%s\": %s",
- hp->exten_file->string, get_errmsg());
- return;
- }
- len = vp - buffer;
- if (len != fwrite(buffer, 1, len, fp)) {
- report(LOG_ERR, "write failed on \"%s\" : %s",
- hp->exten_file->string, get_errmsg());
- }
- fclose(fp);
-
-} /* dovend_rfc1048 */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/bootpgw.c b/usr.sbin/bootpd/bootpgw.c
deleted file mode 100644
index f157cca..0000000
--- a/usr.sbin/bootpd/bootpgw.c
+++ /dev/null
@@ -1,675 +0,0 @@
-/*
- * bootpgw.c - BOOTP GateWay
- * This program forwards BOOTP Request packets to a BOOTP server.
- */
-
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: bootpgw.c,v 1.2 1994/08/22 22:14:48 gwr Exp $";
-#endif
-
-/*
- * BOOTPGW is typically used to forward BOOTP client requests from
- * one subnet to a BOOTP server on a different subnet.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#ifndef NO_UNISTD
-#include <unistd.h>
-#endif
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <syslog.h>
-#include <assert.h>
-
-#ifdef NO_SETSID
-# include <fcntl.h> /* for O_RDONLY, etc */
-#endif
-
-#ifndef USE_BFUNCS
-# include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-# define bcopy(a,b,c) memcpy(b,a,c)
-# define bzero(p,l) memset(p,0,l)
-# define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "getif.h"
-#include "hwaddr.h"
-#include "report.h"
-#include "patchlevel.h"
-
-/* Local definitions: */
-#define MAX_MSG_SIZE (3*512) /* Maximum packet size */
-#define TRUE 1
-#define FALSE 0
-#define get_network_errmsg get_errmsg
-
-
-
-/*
- * Externals, forward declarations, and global variables
- */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-static void usage P((void));
-static void handle_reply P((void));
-static void handle_request P((void));
-
-#undef P
-
-/*
- * IP port numbers for client and server obtained from /etc/services
- */
-
-u_short bootps_port, bootpc_port;
-
-
-/*
- * Internet socket and interface config structures
- */
-
-struct sockaddr_in bind_addr; /* Listening */
-struct sockaddr_in recv_addr; /* Packet source */
-struct sockaddr_in send_addr; /* destination */
-
-
-/*
- * option defaults
- */
-int debug = 0; /* Debugging flag (level) */
-struct timeval actualtimeout =
-{ /* fifteen minutes */
- 15 * 60L, /* tv_sec */
- 0 /* tv_usec */
-};
-u_int maxhops = 4; /* Number of hops allowed for requests. */
-u_int minwait = 3; /* Number of seconds client must wait before
- its bootrequest packets are forwarded. */
-
-/*
- * General
- */
-
-int s; /* Socket file descriptor */
-char *pktbuf; /* Receive packet buffer */
-int pktlen;
-char *progname;
-char *servername;
-int32 server_ipa; /* Real server IP address, network order. */
-
-char myhostname[64];
-struct in_addr my_ip_addr;
-
-
-
-
-/*
- * Initialization such as command-line processing is done and then the
- * main server loop is started.
- */
-
-void
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct timeval *timeout;
- struct bootp *bp;
- struct servent *servp;
- struct hostent *hep;
- char *stmp;
- int n, ba_len, ra_len;
- int nfound, readfds;
- int standalone;
-
- progname = strrchr(argv[0], '/');
- if (progname) progname++;
- else progname = argv[0];
-
- /*
- * Initialize logging.
- */
- report_init(0); /* uses progname */
-
- /*
- * Log startup
- */
- report(LOG_INFO, "version %s.%d", VERSION, PATCHLEVEL);
-
- /* Debugging for compilers with struct padding. */
- assert(sizeof(struct bootp) == BP_MINPKTSZ);
-
- /* Get space for receiving packets and composing replies. */
- pktbuf = malloc(MAX_MSG_SIZE);
- if (!pktbuf) {
- report(LOG_ERR, "malloc failed");
- exit(1);
- }
- bp = (struct bootp *) pktbuf;
-
- /*
- * Check to see if a socket was passed to us from inetd.
- *
- * Use getsockname() to determine if descriptor 0 is indeed a socket
- * (and thus we are probably a child of inetd) or if it is instead
- * something else and we are running standalone.
- */
- s = 0;
- ba_len = sizeof(bind_addr);
- bzero((char *) &bind_addr, ba_len);
- errno = 0;
- standalone = TRUE;
- if (getsockname(s, (struct sockaddr *) &bind_addr, &ba_len) == 0) {
- /*
- * Descriptor 0 is a socket. Assume we are a child of inetd.
- */
- if (bind_addr.sin_family == AF_INET) {
- standalone = FALSE;
- bootps_port = ntohs(bind_addr.sin_port);
- } else {
- /* Some other type of socket? */
- report(LOG_INFO, "getsockname: not an INET socket");
- }
- }
- /*
- * Set defaults that might be changed by option switches.
- */
- stmp = NULL;
- timeout = &actualtimeout;
- gethostname(myhostname, sizeof(myhostname));
- hep = gethostbyname(myhostname);
- if (!hep) {
- printf("Can not get my IP address\n");
- exit(1);
- }
- bcopy(hep->h_addr, (char *)&my_ip_addr, sizeof(my_ip_addr));
-
- /*
- * Read switches.
- */
- for (argc--, argv++; argc > 0; argc--, argv++) {
- if (argv[0][0] != '-')
- break;
- switch (argv[0][1]) {
-
- case 'd': /* debug level */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else if (argv[1] && argv[1][0] == '-') {
- /*
- * Backwards-compatible behavior:
- * no parameter, so just increment the debug flag.
- */
- debug++;
- break;
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid debug level\n", progname);
- break;
- }
- debug = n;
- break;
-
- case 'h': /* hop count limit */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) ||
- (n < 0) || (n > 16))
- {
- fprintf(stderr,
- "bootpgw: invalid hop count limit\n");
- break;
- }
- maxhops = (u_int)n;
- break;
-
- case 'i': /* inetd mode */
- standalone = FALSE;
- break;
-
- case 's': /* standalone mode */
- standalone = TRUE;
- break;
-
- case 't': /* timeout */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) || (n < 0)) {
- fprintf(stderr,
- "%s: invalid timeout specification\n", progname);
- break;
- }
- actualtimeout.tv_sec = (int32) (60 * n);
- /*
- * If the actual timeout is zero, pass a NULL pointer
- * to select so it blocks indefinitely, otherwise,
- * point to the actual timeout value.
- */
- timeout = (n > 0) ? &actualtimeout : NULL;
- break;
-
- case 'w': /* wait time */
- if (argv[0][2]) {
- stmp = &(argv[0][2]);
- } else {
- argc--;
- argv++;
- stmp = argv[0];
- }
- if (!stmp || (sscanf(stmp, "%d", &n) != 1) ||
- (n < 0) || (n > 60))
- {
- fprintf(stderr,
- "bootpgw: invalid wait time\n");
- break;
- }
- minwait = (u_int)n;
- break;
-
- default:
- fprintf(stderr, "%s: unknown switch: -%c\n",
- progname, argv[0][1]);
- usage();
- break;
-
- } /* switch */
- } /* for args */
-
- /* Make sure server name argument is suplied. */
- servername = argv[0];
- if (!servername) {
- fprintf(stderr, "bootpgw: missing server name\n");
- usage();
- }
- /*
- * Get address of real bootp server.
- */
- if (isdigit(servername[0]))
- server_ipa = inet_addr(servername);
- else {
- hep = gethostbyname(servername);
- if (!hep) {
- fprintf(stderr, "bootpgw: can't get addr for %s\n", servername);
- exit(1);
- }
- bcopy(hep->h_addr, (char *)&server_ipa, sizeof(server_ipa));
- }
-
- if (standalone) {
- /*
- * Go into background and disassociate from controlling terminal.
- * XXX - This is not the POSIX way (Should use setsid). -gwr
- */
- if (debug < 3) {
- if (fork())
- exit(0);
-#ifdef NO_SETSID
- setpgrp(0,0);
-#ifdef TIOCNOTTY
- n = open("/dev/tty", O_RDWR);
- if (n >= 0) {
- ioctl(n, TIOCNOTTY, (char *) 0);
- (void) close(n);
- }
-#endif /* TIOCNOTTY */
-#else /* SETSID */
- if (setsid() < 0)
- perror("setsid");
-#endif /* SETSID */
- } /* if debug < 3 */
- /*
- * Nuke any timeout value
- */
- timeout = NULL;
-
- /*
- * Here, bootpd would do:
- * chdir
- * tzone_init
- * rdtab_init
- * readtab
- */
-
- /*
- * Create a socket.
- */
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- report(LOG_ERR, "socket: %s", get_network_errmsg());
- exit(1);
- }
- /*
- * Get server's listening port number
- */
- servp = getservbyname("bootps", "udp");
- if (servp) {
- bootps_port = ntohs((u_short) servp->s_port);
- } else {
- bootps_port = (u_short) IPPORT_BOOTPS;
- report(LOG_ERR,
- "udp/bootps: unknown service -- assuming port %d",
- bootps_port);
- }
-
- /*
- * Bind socket to BOOTPS port.
- */
- bind_addr.sin_family = AF_INET;
- bind_addr.sin_port = htons(bootps_port);
- bind_addr.sin_addr.s_addr = INADDR_ANY;
- if (bind(s, (struct sockaddr *) &bind_addr,
- sizeof(bind_addr)) < 0)
- {
- report(LOG_ERR, "bind: %s", get_network_errmsg());
- exit(1);
- }
- } /* if standalone */
- /*
- * Get destination port number so we can reply to client
- */
- servp = getservbyname("bootpc", "udp");
- if (servp) {
- bootpc_port = ntohs(servp->s_port);
- } else {
- report(LOG_ERR,
- "udp/bootpc: unknown service -- assuming port %d",
- IPPORT_BOOTPC);
- bootpc_port = (u_short) IPPORT_BOOTPC;
- }
-
- /* no signal catchers */
-
- /*
- * Process incoming requests.
- */
- for (;;) {
- readfds = 1 << s;
- nfound = select(s + 1, (fd_set *)&readfds, NULL, NULL, timeout);
- if (nfound < 0) {
- if (errno != EINTR) {
- report(LOG_ERR, "select: %s", get_errmsg());
- }
- continue;
- }
- if (!(readfds & (1 << s))) {
- report(LOG_INFO, "exiting after %ld minutes of inactivity",
- actualtimeout.tv_sec / 60);
- exit(0);
- }
- ra_len = sizeof(recv_addr);
- n = recvfrom(s, pktbuf, MAX_MSG_SIZE, 0,
- (struct sockaddr *) &recv_addr, &ra_len);
- if (n <= 0) {
- continue;
- }
- if (debug > 3) {
- report(LOG_INFO, "recvd pkt from IP addr %s",
- inet_ntoa(recv_addr.sin_addr));
- }
- if (n < sizeof(struct bootp)) {
- if (debug) {
- report(LOG_INFO, "received short packet");
- }
- continue;
- }
- pktlen = n;
-
- switch (bp->bp_op) {
- case BOOTREQUEST:
- handle_request();
- break;
- case BOOTREPLY:
- handle_reply();
- break;
- }
- }
-}
-
-
-
-
-/*
- * Print "usage" message and exit
- */
-
-static void
-usage()
-{
- fprintf(stderr,
- "usage: bootpgw [-d level] [-i] [-s] [-t timeout] server\n");
- fprintf(stderr, "\t -d n\tset debug level\n");
- fprintf(stderr, "\t -h n\tset max hop count\n");
- fprintf(stderr, "\t -i\tforce inetd mode (run as child of inetd)\n");
- fprintf(stderr, "\t -s\tforce standalone mode (run without inetd)\n");
- fprintf(stderr, "\t -t n\tset inetd exit timeout to n minutes\n");
- fprintf(stderr, "\t -w n\tset min wait time (secs)\n");
- exit(1);
-}
-
-
-
-/*
- * Process BOOTREQUEST packet.
- *
- * Note, this just forwards the request to a real server.
- */
-static void
-handle_request()
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct ifreq *ifr;
- u_short secs, hops;
-
- /* XXX - SLIP init: Set bp_ciaddr = recv_addr here? */
-
- if (debug) {
- report(LOG_INFO, "request from %s",
- inet_ntoa(recv_addr.sin_addr));
- }
- /* Has the client been waiting long enough? */
- secs = ntohs(bp->bp_secs);
- if (secs < minwait)
- return;
-
- /* Has this packet hopped too many times? */
- hops = ntohs(bp->bp_hops);
- if (++hops > maxhops) {
- report(LOG_NOTICE, "reqest from %s reached hop limit",
- inet_ntoa(recv_addr.sin_addr));
- return;
- }
- bp->bp_hops = htons(hops);
-
- /*
- * Here one might discard a request from the same subnet as the
- * real server, but we can assume that the real server will send
- * a reply to the client before it waits for minwait seconds.
- */
-
- /* If gateway address is not set, put in local interface addr. */
- if (bp->bp_giaddr.s_addr == 0) {
-#if 0 /* BUG */
- struct sockaddr_in *sip;
- /*
- * XXX - This picks the wrong interface when the receive addr
- * is the broadcast address. There is no portable way to
- * find out which interface a broadcast was received on. -gwr
- * (Thanks to <walker@zk3.dec.com> for finding this bug!)
- */
- ifr = getif(s, &recv_addr.sin_addr);
- if (!ifr) {
- report(LOG_NOTICE, "no interface for request from %s",
- inet_ntoa(recv_addr.sin_addr));
- return;
- }
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- bp->bp_giaddr = sip->sin_addr;
-#else /* BUG */
- /*
- * XXX - Just set "giaddr" to our "official" IP address.
- * RFC 1532 says giaddr MUST be set to the address of the
- * interface on which the request was received. Setting
- * it to our "default" IP address is not strictly correct,
- * but is good enough to allow the real BOOTP server to
- * get the reply back here. Then, before we forward the
- * reply to the client, the giaddr field is corrected.
- * (In case the client uses giaddr, which it should not.)
- * See handle_reply()
- */
- bp->bp_giaddr = my_ip_addr;
-#endif /* BUG */
-
- /*
- * XXX - DHCP says to insert a subnet mask option into the
- * options area of the request (if vendor magic == std).
- */
- }
- /* Set up socket address for send. */
- send_addr.sin_family = AF_INET;
- send_addr.sin_port = htons(bootps_port);
- send_addr.sin_addr.s_addr = server_ipa;
-
- /* Send reply with same size packet as request used. */
- if (sendto(s, pktbuf, pktlen, 0,
- (struct sockaddr *) &send_addr,
- sizeof(send_addr)) < 0)
- {
- report(LOG_ERR, "sendto: %s", get_network_errmsg());
- }
-}
-
-
-
-/*
- * Process BOOTREPLY packet.
- */
-static void
-handle_reply()
-{
- struct bootp *bp = (struct bootp *) pktbuf;
- struct ifreq *ifr;
- struct sockaddr_in *sip;
- u_char canon_haddr[MAXHADDRLEN];
- unsigned char *ha;
- int len;
-
- if (debug) {
- report(LOG_INFO, " reply for %s",
- inet_ntoa(bp->bp_yiaddr));
- }
- /* Make sure client is directly accessible. */
- ifr = getif(s, &(bp->bp_yiaddr));
- if (!ifr) {
- report(LOG_NOTICE, "no interface for reply to %s",
- inet_ntoa(bp->bp_yiaddr));
- return;
- }
-#if 1 /* Experimental (see BUG above) */
-/* #ifdef CATER_TO_OLD_CLIENTS ? */
- /*
- * The giaddr field has been set to our "default" IP address
- * which might not be on the same interface as the client.
- * In case the client looks at giaddr, (which it should not)
- * giaddr is now set to the address of the correct interface.
- */
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- bp->bp_giaddr = sip->sin_addr;
-#endif
-
- /* Set up socket address for send to client. */
- send_addr.sin_family = AF_INET;
- send_addr.sin_addr = bp->bp_yiaddr;
- send_addr.sin_port = htons(bootpc_port);
-
- /* Create an ARP cache entry for the client. */
- ha = bp->bp_chaddr;
- len = bp->bp_hlen;
- if (len > MAXHADDRLEN)
- len = MAXHADDRLEN;
- if (bp->bp_htype == HTYPE_IEEE802) {
- haddr_conv802(ha, canon_haddr, len);
- ha = canon_haddr;
- }
- if (debug > 1)
- report(LOG_INFO, "setarp %s - %s",
- inet_ntoa(bp->bp_yiaddr), haddrtoa(ha, len));
- setarp(s, &bp->bp_yiaddr, ha, len);
-
- /* Send reply with same size packet as request used. */
- if (sendto(s, pktbuf, pktlen, 0,
- (struct sockaddr *) &send_addr,
- sizeof(send_addr)) < 0)
- {
- report(LOG_ERR, "sendto: %s", get_network_errmsg());
- }
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/bootptab.5 b/usr.sbin/bootpd/bootptab.5
deleted file mode 100644
index 2cf1147..0000000
--- a/usr.sbin/bootpd/bootptab.5
+++ /dev/null
@@ -1,395 +0,0 @@
-.\" Copyright (c) 1988, 1989, 1991 Carnegie Mellon University
-.\"
-.\" $Header: /b/source/CVS/src/usr.sbin/bootpd/bootptab.5,v 1.2 1994/08/22 22:14:51 gwr Exp $
-.\"
-.TH BOOTPTAB 5 "October 31, 1991" "Carnegie Mellon University"
-.UC 6
-
-.SH NAME
-bootptab \- Internet Bootstrap Protocol server database
-.SH DESCRIPTION
-The
-.I bootptab
-file is the configuration database file for
-.IR bootpd ,
-the Internet Bootstrap Protocol server.
-It's format is similar to that of
-.IR termcap (5)
-in which two-character case-sensitive tag symbols are used to
-represent host parameters. These parameter declarations are separated by
-colons (:), with a general format of:
-.PP
-.I " hostname:tg=value. . . :tg=value. . . :tg=value. . . ."
-.PP
-where
-.I hostname
-is the actual name of a bootp client (or a "dummy entry"), and
-.I tg
-is a two-character tag symbol. Dummy entries have an invalid hostname
-(one with a "." as the first character) and are used to provide
-default values used by other entries via the
-.B tc=.dummy-entry
-mechanism. Most tags must be followed by an equals-sign
-and a value as above. Some may also appear in a boolean form with no
-value (i.e.
-.RI : tg :).
-The currently recognized tags are:
-.PP
-.br
- bf Bootfile
-.br
- bs Bootfile size in 512-octet blocks
-.br
- cs Cookie server address list
-.br
- df Merit dump file
-.br
- dn Domain name
-.br
- ds Domain name server address list
-.br
- ef Extension file
-.br
- gw Gateway address list
-.br
- ha Host hardware address
-.br
- hd Bootfile home directory
-.br
- hn Send client's hostname to client
-.br
- ht Host hardware type (see Assigned Numbers RFC)
-.br
- im Impress server address list
-.br
- ip Host IP address
-.br
- lg Log server address list
-.br
- lp LPR server address list
-.br
- ns IEN-116 name server address list
-.br
- nt NTP (time) Server (RFC 1129)
-.br
- ra Reply address override
-.br
- rl Resource location protocol server address list
-.br
- rp Root path to mount as root
-.br
- sa TFTP server address client should use
-.br
- sm Host subnet mask
-.br
- sw Swap server address
-.br
- tc Table continuation (points to similar "template" host entry)
-.br
- td TFTP root directory used by "secure" TFTP servers
-.br
- to Time offset in seconds from UTC
-.br
- ts Time server address list
-.br
- vm Vendor magic cookie selector
-.br
- yd YP (NIS) domain name
-.br
- ys YP (NIS) server address
-
-.PP
-There is also a generic tag,
-.RI T n ,
-where
-.I n
-is an RFC1084 vendor field tag number. Thus it is possible to immediately
-take advantage of future extensions to RFC1084 without being forced to modify
-.I bootpd
-first. Generic data may be represented as either a stream of hexadecimal
-numbers or as a quoted string of ASCII characters. The length of the generic
-data is automatically determined and inserted into the proper field(s) of the
-RFC1084-style bootp reply.
-.PP
-The following tags take a whitespace-separated list of IP addresses:
-.BR cs ,
-.BR ds ,
-.BR gw ,
-.BR im ,
-.BR lg ,
-.BR lp ,
-.BR ns ,
-.BR nt ,
-.BR ra ,
-.BR rl ,
-and
-.BR ts .
-The
-.BR ip ,
-.BR sa ,
-.BR sw ,
-.BR sm ,
-and
-.B ys
-tags each take a single IP address.
-All IP addresses are specified in standard Internet "dot" notation
-and may use decimal, octal, or hexadecimal numbers
-(octal numbers begin with 0, hexadecimal numbers begin with '0x' or '0X').
-Any IP addresses may alternatively be specified as a hostname, causing
-.I bootpd
-to lookup the IP address for that host name using gethostbyname(3).
-If the
-.B ip
-tag is not specified,
-.I bootpd
-will determine the IP address using the entry name as the host name.
-(Dummy entries use an invalid host name to avoid automatic IP lookup.)
-.PP
-The
-.B ht
-tag specifies the hardware type code as either an unsigned decimal, octal, or
-hexadecimal integer or one of the following symbolic names:
-.B ethernet
-or
-.B ether
-for 10Mb Ethernet,
-.B ethernet3
-or
-.B ether3
-for 3Mb experimental Ethernet,
-.BR ieee802 ,
-.BR tr ,
-or
-.B token-ring
-for IEEE 802 networks,
-.B pronet
-for Proteon ProNET Token Ring, or
-.BR chaos ,
-.BR arcnet ,
-or
-.B ax.25
-for Chaos, ARCNET, and AX.25 Amateur Radio networks, respectively.
-The
-.B ha
-tag takes a hardware address which may be specified as a host name
-or in numeric form. Note that the numeric form
-.I must
-be specified in hexadecimal; optional periods and/or a leading '0x' may be
-included for readability. The
-.B ha
-tag must be preceded by the
-.B ht
-tag (either explicitly or implicitly; see
-.B tc
-below).
-If the hardware address is not specified and the type is specified
-as either "ethernet" or "ieee802", then
-.I bootpd
-will try to determine the hardware address using ether_hton(3).
-.PP
-The hostname, home directory, and bootfile are ASCII strings which may be
-optionally surrounded by double quotes ("). The client's request and the
-values of the
-.B hd
-and
-.B bf
-symbols determine how the server fills in the bootfile field of the bootp
-reply packet.
-.PP
-If the client provides a file name it is left as is.
-Otherwise, if the
-.B bf
-option is specified its value is copied into the reply packet.
-If the
-.B hd
-option is specified as well, its value is prepended to the
-boot file copied into the reply packet.
-The existence of the boot file is checked only if the
-.BR bs =auto
-option is used (to determine the boot file size).
-A reply may be sent whether or not the boot file exists.
-.PP
-Some newer versions of
-.I tftpd
-provide a security feature to change their root directory using
-the
-.IR chroot (2)
-system call.
-The
-.B td
-tag may be used to inform
-.I bootpd
-of this special root directory used by
-.IR tftpd .
-(One may alternatively use the
-.I bootpd
-"-c chdir" option.)
-The
-.B hd
-tag is actually relative to the root directory specified by the
-.B td
-tag.
-For example, if the real absolute path to your BOOTP client bootfile is
-/tftpboot/bootfiles/bootimage, and
-.IR tftpd
-uses /tftpboot as its "secure" directory, then specify the following in
-.IR bootptab :
-.PP
-.br
- :td=/tftpboot:hd=/bootfiles:bf=bootimage:
-.PP
-If your bootfiles are located directly in /tftpboot, use:
-.PP
-.br
- :td=/tftpboot:hd=/:bf=bootimage:
-.PP
-The
-.B sa
-tag may be used to specify the IP address of the particular TFTP server
-you wish the client to use. In the absence of this tag,
-.I bootpd
-will tell the client to perform TFTP to the same machine
-.I bootpd
-is running on.
-.PP
-The time offset
-.B to
-may be either a signed decimal integer specifying the client's
-time zone offset in seconds from UTC, or the keyword
-.B auto
-which uses the server's time zone offset. Specifying the
-.B to
-symbol as a boolean has the same effect as specifying
-.B auto
-as its value.
-.PP
-The bootfile size
-.B bs
-may be either a decimal, octal, or hexadecimal integer specifying the size of
-the bootfile in 512-octet blocks, or the keyword
-.B auto
-which causes the server to automatically calculate the bootfile size at each
-request. As with the time offset, specifying the
-.B bs
-symbol as a boolean has the same effect as specifying
-.B auto
-as its value.
-.PP
-The vendor magic cookie selector (the
-.B vm
-tag) may take one of the following keywords:
-.B auto
-(indicating that vendor information is determined by the client's request),
-.B rfc1048
-or
-.B rfc1084
-(which always forces an RFC1084-style reply), or
-.B cmu
-(which always forces a CMU-style reply).
-.PP
-The
-.B hn
-tag is strictly a boolean tag; it does not take the usual equals-sign and
-value. It's presence indicates that the hostname should be sent to RFC1084
-clients.
-.I Bootpd
-attempts to send the entire hostname as it is specified in the configuration
-file; if this will not fit into the reply packet, the name is shortened to
-just the host field (up to the first period, if present) and then tried.
-In no case is an arbitrarily-truncated hostname sent (if nothing reasonable
-will fit, nothing is sent).
-.PP
-Often, many host entries share common values for certain tags (such as name
-servers, etc.). Rather than repeatedly specifying these tags, a full
-specification can be listed for one host entry and shared by others via the
-.B tc
-(table continuation) mechanism.
-Often, the template entry is a dummy host which doesn't actually exist and
-never sends bootp requests. This feature is similar to the
-.B tc
-feature of
-.IR termcap (5)
-for similar terminals. Note that
-.I bootpd
-allows the
-.B tc
-tag symbol to appear anywhere in the host entry, unlike
-.I termcap
-which requires it to be the last tag. Information explicitly specified for a
-host always overrides information implied by a
-.B tc
-tag symbol, regardless of its location within the entry. The
-value of the
-.B tc
-tag may be the hostname or IP address of any host entry
-previously listed in the configuration file.
-.PP
-Sometimes it is necessary to delete a specific tag after it has been inferred
-via
-.BR tc .
-This can be done using the construction
-.IB tag @
-which removes the effect of
-.I tag
-as in
-.IR termcap (5).
-For example, to completely undo an IEN-116 name server specification, use
-":ns@:" at an appropriate place in the configuration entry. After removal
-with
-.BR @ ,
-a tag is eligible to be set again through the
-.B tc
-mechanism.
-.PP
-Blank lines and lines beginning with "#" are ignored in the configuration
-file. Host entries are separated from one another by newlines; a single host
-entry may be extended over multiple lines if the lines end with a backslash
-(\\). It is also acceptable for lines to be longer than 80 characters. Tags
-may appear in any order, with the following exceptions: the hostname must be
-the very first field in an entry, and the hardware type must precede the
-hardware address.
-.PP
-An example
-.I /etc/bootptab
-file follows:
-.PP
-.nf
- # Sample bootptab file (domain=andrew.cmu.edu)
-
- .default:\\
- :hd=/usr/boot:bf=null:\\
- :ds=netserver, lancaster:\\
- :ns=pcs2, pcs1:\\
- :ts=pcs2, pcs1:\\
- :sm=255.255.255.0:\\
- :gw=gw.cs.cmu.edu:\\
- :hn:to=-18000:
-
- carnegie:ht=6:ha=7FF8100000AF:tc=.default:
- baldwin:ht=1:ha=0800200159C3:tc=.default:
- wylie:ht=1:ha=00DD00CADF00:tc=.default:
- arnold:ht=1:ha=0800200102AD:tc=.default:
- bairdford:ht=1:ha=08002B02A2F9:tc=.default:
- bakerstown:ht=1:ha=08002B0287C8:tc=.default:
-
- # Special domain name server and option tags for next host
- butlerjct:ha=08002001560D:ds=128.2.13.42:\\
- :T37=0x12345927AD3BCF:\\
- :T99="Special ASCII string":\\
- :tc=.default:
-
- gastonville:ht=6:ha=7FFF81000A47:tc=.default:
- hahntown:ht=6:ha=7FFF81000434:tc=.default:
- hickman:ht=6:ha=7FFF810001BA:tc=.default:
- lowber:ht=1:ha=00DD00CAF000:tc=.default:
- mtoliver:ht=1:ha=00DD00FE1600:tc=.default:
-
-.fi
-.SH FILES
-/etc/bootptab
-
-.SH "SEE ALSO"
-.br
-bootpd(8), tftpd(8),
-.br
-DARPA Internet Request For Comments RFC951, RFC1048, RFC1084, Assigned Numbers
diff --git a/usr.sbin/bootpd/bootptab.cmu b/usr.sbin/bootpd/bootptab.cmu
deleted file mode 100644
index 66212d4..0000000
--- a/usr.sbin/bootpd/bootptab.cmu
+++ /dev/null
@@ -1,124 +0,0 @@
-# /etc/bootptab: database for bootp server (/etc/bootpd)
-# (I've hacked on this but can't test it... -gwr)
-
-# Blank lines and lines beginning with '#' are ignored.
-#
-# Legend: (see bootptab.5)
-# first field -- hostname (not indented)
-# bf -- bootfile
-# bs -- bootfile size in 512-octet blocks
-# cs -- cookie servers
-# df -- dump file name
-# dn -- domain name
-# ds -- domain name servers
-# ef -- extension file
-# gw -- gateways
-# ha -- hardware address
-# hd -- home directory for bootfiles
-# hn -- host name set for client
-# ht -- hardware type
-# im -- impress servers
-# ip -- host IP address
-# lg -- log servers
-# lp -- LPR servers
-# ns -- IEN-116 name servers
-# ra -- reply address
-# rl -- resource location protocol servers
-# rp -- root path
-# sa -- boot server address
-# sm -- subnet mask
-# sw -- swap server
-# tc -- template host (points to similar host entry)
-# td -- TFTP directory
-# to -- time offset (seconds)
-# ts -- time servers
-# vm -- vendor magic number
-# Tn -- generic option tag n
-#
-# Be careful about including backslashes where they're needed. Weird (bad)
-# things can happen when a backslash is omitted where one is intended.
-# Also, note that generic option data must be either a string or a
-# sequence of bytes where each byte is a two-digit hex value.
-
-# First, we define a global entry which specifies the stuff every host uses.
-# (Host name lookups are relative to the domain: andrew.cmu.edu)
-.default:\
- :hn:dn=cmu.edu:\
- :hd=/usr/boot:\
- :ds=netserver, lancaster:\
- :ns=pcs2, pcs1:\
- :ts=pcs2, pcs1:\
- :sm=255.255.0.0:\
- :gw=gw.cs.cmu.edu:\
- to=auto:
-
-
-# Next, we can define different master entries for each subnet. . .
-.subnet13 :sm=255.255.255.0:gw=128.2.13.1 :tc=.default:
-.subnet19 :sm=255.255.255.0:gw=128.2.19.1 :tc=.default:
-.subnet232 :sm=255.255.255.0:gw=128.2.232.1 :tc=.default:
-
-#
-# We should be able to use as many levels of indirection as desired. Use
-# your imagination. . .
-#
-
-
-# Individual entries (could also have different servers for some/all of these
-# hosts, but we don't really use this feature at CMU):
-
-carnegie:tc=.subnet13:ht=ieee802:ha=7FF8100000AF:
-baldwin:tc=.subnet19:ha=0800200159C3:
-wylie:tc=.subnet232:ha=00DD00CADF00:
-arnold:tc=.subnet19:ha=0800200102AD:
-bairdford:tc=.subnet19:ha=08002B02A2F9:
-bakerstown:tc=.subnet19:ha=08002B0287C8:
-butlerjct:tc=.subnet232:ha=08002001560D:
-gastonville:tc=.subnet232:ht=ieee802:ha=7FFF81000A47:
-hahntown:tc=.subnet13:ht=ieee802:ha=7FFF81000434:
-hickman:tc=.subnet19:ht=ieee802:ha=7FFF810001BA:
-lowber:tc=.subnet13:ha=00DD00CAF000:
-mtoliver:tc=.subnet19:ha=00DD00FE1600:
-osborne:tc=.subnet232:ha=00DD00CAD600:
-russelton:tc=.subnet232:ha=080020017FC3:
-thornburg:tc=.subnet13:ha=080020012A33:
-
-
-# Hmmm. . . Let's throw in some whitespace for readability. . . .
-
-andrew: tc=.subnet19:ha=00DD00C88900:
-birdville: tc=.subnet19:ha=00DD00FE2D00:
-coudersport: tc=.subnet13:ha=00DD00CB1E00:
-bridgeville: tc=.subnet232:ha=080020011394:
-franklin: tc=.subnet19:ha=08002B02A5D5:
-hollidaysburg: tc=.subnet19:ht=ieee802:ha=7FFF810002C8:
-honesdale: tc=.subnet19:ha=08002B02F83F:
-huntingdon: tc=.subnet19:ha=08002B02E410:
-indiana: tc=.subnet13:ha=08002B029BEC:
-jimthorpe: tc=.subnet232:ha=08002B02FBBA:
-kittanning: tc=.subnet232:ha=08002B0273FC:
-lebanon: tc=.subnet232:ha=08002B037F67:
-lewisburg: tc=.subnet19:ha=50005A1A0DE4:
-middleburg: tc=.subnet232:ha=00DD00FE1200:
-aspinwall: tc=.subnet13:ha=08002B03C163:
-berlin: tc=.subnet13:ha=00DD000A4400:
-norristown: tc=.subnet13:ha=08002001455B:
-pottsville: tc=.subnet13:ha=00DD000A3700:
-ridgway: tc=.subnet19:ha=08002B029425:
-scranton: tc=.subnet232:ha=0800200113A1:
-chalfont: tc=.subnet13:ha=08002001124B:
-washington: tc=.subnet19:ha=00DD00656E00:
-wellsboro: tc=.subnet13:ha=00DD00CB1C00:
-bb1: tc=.subnet19:ha=00DD000A1F00:
-adamstown: tc=.subnet13:ha=08002B02D0E6:
-beta: tc=.subnet19:ha=02070100B197:
-carbondale: tc=.subnet232:ha=08002B022A73:
-clairton: tc=.subnet19:ha=080020010FD1:
-egypt: tc=.subnet13:ha=00DD00847B00:
-fairchance: tc=.subnet232:ha=00DD000AB100:
-fairhope: tc=.subnet232:ha=00DD00CB0800:
-galeton: tc=.subnet232:ha=08002001138C:
-imperial: tc=.subnet232:ha=08002001130C:
-kingston: tc=.subnet232:ha=080020011382:
-knox: tc=.subnet232:ha=50005A1A0D2A:
-lakecity: tc=.subnet13:ha=080020011380:
diff --git a/usr.sbin/bootpd/bootptab.mcs b/usr.sbin/bootpd/bootptab.mcs
deleted file mode 100644
index 6fa04d1..0000000
--- a/usr.sbin/bootpd/bootptab.mcs
+++ /dev/null
@@ -1,92 +0,0 @@
-# /etc/bootptab: database for bootp server (/etc/bootpd)
-# Last update: gwr, Sun Dec 12 19:00:00 EDT 1993
-# Blank lines and lines beginning with '#' are ignored.
-#
-# Legend: (see bootptab.5)
-# first field -- hostname (not indented)
-# bf -- bootfile
-# bs -- bootfile size in 512-octet blocks
-# cs -- cookie servers
-# df -- dump file name
-# dn -- domain name
-# ds -- domain name servers
-# ef -- extension file
-# gw -- gateways
-# ha -- hardware address
-# hd -- home directory for bootfiles
-# hn -- host name set for client
-# ht -- hardware type
-# im -- impress servers
-# ip -- host IP address
-# lg -- log servers
-# lp -- LPR servers
-# ns -- IEN-116 name servers
-# ra -- reply address
-# rl -- resource location protocol servers
-# rp -- root path
-# sa -- boot server address
-# sm -- subnet mask
-# sw -- swap server
-# tc -- template host (points to similar host entry)
-# td -- TFTP directory
-# to -- time offset (seconds)
-# ts -- time servers
-# vm -- vendor magic number
-# Tn -- generic option tag n
-#
-# Be careful about including backslashes where they're needed. Weird (bad)
-# things can happen when a backslash is omitted where one is intended.
-# Also, note that generic option data must be either a string or a
-# sequence of bytes where each byte is a two-digit hex value.
-
-# First, we define a global entry which specifies the stuff every host uses.
-
-# If you leave "td" empty, run bootpd with the "-c /tftpboot" switch
-# so path names (boot files) will be interpreted relative to the same
-# directory as tftpd will use when opening files.
-.default:\
- :hn:dn="mc.com":\
- :td=/tftpboot:\
- :ds=merlin, jericho:\
- :to=auto:
-
-# Next, we can define different master entries for each subnet. . .
-
-.subnet16:\
- :tc=.default:\
- :sm=255.255.255.0:\
- :gw=merlin:\
- :sa=merlin:
-
-.subnet17:\
- :tc=.default:\
- :sm=255.255.255.0:\
- :gw=merlin-gw:\
- :sa=merlin-gw:
-
-#
-# We should be able to use as many levels of indirection as desired. Use
-# your imagination. . .
-#
-
-# Individual entries (could also have different servers for some/all of these
-# hosts, but we don't really use this feature at CMU):
-
-# Emulex terminal server
-emulex: tc=.subnet16:ha=00.00.C9.00.42.E0:bf=P4KTL0E:
-
-# Lantronix eps1
-eps1: tc=.subnet16:ha=00.80.A3.04.1D.78:
-
-# Tadpole 885 board.
-tp885: tc=.subnet17:ha=08.00.4C.00.2F.74:bf=tp885sys2.cfe:
-
-# MVME147 VxWorks board.
-#mvme147:tc=.subnet17:ha=08.00.3e.20.da.47:bf=mv147vxw.st:
-
-# These are just for testing
-
-walnut:tc=.subnet16:ha=walnut:
-banana:tc=.subnet17:ha=banana:
-thor:tc=.subnet17:ha=thor:
-classic:tc=.subnet16:ha=classic:
diff --git a/usr.sbin/bootpd/bootptest.8 b/usr.sbin/bootpd/bootptest.8
deleted file mode 100644
index d076c8b..0000000
--- a/usr.sbin/bootpd/bootptest.8
+++ /dev/null
@@ -1,74 +0,0 @@
-.\" bootptest.8
-.TH BOOTPTEST 8 "10 June 1993" "MAINTENANCE COMMANDS"
-.SH NAME
-bootptest \- send BOOTP queries and print responses
-.SH SYNOPSIS
-.LP
-.B bootptest
-[
-.B \-f
-.I bootfile
-]
-[
-.B \-h
-]
-[
-.B \-m
-.I magic_number
-]
-.I server\-name
-.RI [ template-file ]
-.SH DESCRIPTION
-.B bootptest
-sends BOOTP requests to the host specified as
-.I server\-name
-at one\-second intervals until either a response is received,
-or until ten requests have gone unanswered.
-After a response is received,
-.B bootptest
-will wait one more second listening for additional responses.
-.SH OPTIONS
-.TP
-.B \-f
-.I bootfile
-Fill in the boot file field of the request with
-.IR bootfile .
-.TP
-.B \-h
-Use the hardware (Ethernet) address to identify the client.
-By default, the IP address is copied into the request
-indicating that this client already knows its IP address.
-.TP
-.B \-m
-.I magic_number
-Initialize the first word of the vendor options field with
-.IR magic_number .
-.LP
-A
-.I template-file
-may be specified, in which case
-.B bootptest
-uses the (binary) contents of this file to initialize the
-.I options
-area of the request packet.
-.SH CREDITS
-.LP
-The bootptest program is a combination of original and derived works.
-The main program module (bootptest.c) is original work by
-Gordon W. Ross <gwr@mc.com>.
-The packet printing module (print-bootp.c) is a slightly modified
-version of a file from the BSD tcpdump program.
-.LP
-This program includes software developed by the University of
-California, Lawrence Berkeley Laboratory and its contributors.
-(See the copyright notice in print-bootp.c)
-.SH "SEE ALSO"
-.LP
-bootpd(8)
-.SH REFERENCES
-.TP
-RFC951
-BOOTSTRAP PROTOCOL (BOOTP)
-.TP
-RFC1048
-BOOTP Vendor Information Extensions
diff --git a/usr.sbin/bootpd/bootptest.c b/usr.sbin/bootpd/bootptest.c
deleted file mode 100644
index bc235ac..0000000
--- a/usr.sbin/bootpd/bootptest.c
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * bootptest.c - Test out a bootp server.
- *
- * This simple program was put together from pieces taken from
- * various places, including the CMU BOOTP client and server.
- * The packet printing routine is from the Berkeley "tcpdump"
- * program with some enhancements I added. The print-bootp.c
- * file was shared with my copy of "tcpdump" and therefore uses
- * some unusual utility routines that would normally be provided
- * by various parts of the tcpdump program. Gordon W. Ross
- *
- * Boilerplate:
- *
- * This program includes software developed by the University of
- * California, Lawrence Berkeley Laboratory and its contributors.
- * (See the copyright notice in print-bootp.c)
- *
- * The remainder of this program is public domain. You may do
- * whatever you like with it except claim that you wrote it.
- *
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * HISTORY:
- *
- * 12/02/93 Released version 1.4 (with bootp-2.3.2)
- * 11/05/93 Released version 1.3
- * 10/14/93 Released version 1.2
- * 10/11/93 Released version 1.1
- * 09/28/93 Released version 1.0
- * 09/93 Original developed by Gordon W. Ross <gwr@mc.com>
- */
-
-char *usage = "bootptest [-h] server-name [vendor-data-template-file]";
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <sys/stat.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#include <stdlib.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <netdb.h>
-#include <assert.h>
-
-#include "bootp.h"
-#include "bootptest.h"
-#include "getif.h"
-#include "patchlevel.h"
-
-#define LOG_ERR 1
-#define BUFLEN 1024
-#define WAITSECS 1
-#define MAXWAIT 10
-
-int vflag = 1;
-int tflag = 0;
-int thiszone;
-char *progname;
-unsigned char *packetp;
-unsigned char *snapend;
-int snaplen;
-
-
-/*
- * IP port numbers for client and server obtained from /etc/services
- */
-
-u_short bootps_port, bootpc_port;
-
-
-/*
- * Internet socket and interface config structures
- */
-
-struct sockaddr_in sin_server; /* where to send requests */
-struct sockaddr_in sin_client; /* for bind and listen */
-struct sockaddr_in sin_from; /* Packet source */
-u_char eaddr[16]; /* Ethernet address */
-
-/*
- * General
- */
-
-int debug = 1; /* Debugging flag (level) */
-char hostname[64];
-char *sndbuf; /* Send packet buffer */
-char *rcvbuf; /* Receive packet buffer */
-
-/*
- * Vendor magic cookies for CMU and RFC1048
- */
-
-unsigned char vm_cmu[4] = VM_CMU;
-unsigned char vm_rfc1048[4] = VM_RFC1048;
-short secs; /* How long client has waited */
-
-char *get_errmsg();
-extern void bootp_print();
-
-/*
- * Initialization such as command-line processing is done, then
- * the receiver loop is started. Die when interrupted.
- */
-
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct bootp *bp;
- struct servent *sep;
- struct hostent *hep;
-
- char *servername = NULL;
- char *vendor_file = NULL;
- char *bp_file = NULL;
- int32 server_addr; /* inet addr, network order */
- int s; /* Socket file descriptor */
- int n, tolen, fromlen, recvcnt;
- int use_hwa = 0;
- int32 vend_magic;
- int32 xid;
-
- progname = strrchr(argv[0], '/');
- if (progname)
- progname++;
- else
- progname = argv[0];
- argc--;
- argv++;
-
- if (debug)
- printf("%s: version %s.%d\n", progname, VERSION, PATCHLEVEL);
-
- /*
- * Verify that "struct bootp" has the correct official size.
- * (Catch evil compilers that do struct padding.)
- */
- assert(sizeof(struct bootp) == BP_MINPKTSZ);
-
- sndbuf = malloc(BUFLEN);
- rcvbuf = malloc(BUFLEN);
- if (!sndbuf || !rcvbuf) {
- printf("malloc failed\n");
- exit(1);
- }
-
- /* default magic number */
- bcopy(vm_rfc1048, (char*)&vend_magic, 4);
-
- /* Handle option switches. */
- while (argc > 0) {
- if (argv[0][0] != '-')
- break;
- switch (argv[0][1]) {
-
- case 'f': /* File name to reqest. */
- if (argc < 2)
- goto error;
- argc--; argv++;
- bp_file = *argv;
- break;
-
- case 'h': /* Use hardware address. */
- use_hwa = 1;
- break;
-
- case 'm': /* Magic number value. */
- if (argc < 2)
- goto error;
- argc--; argv++;
- vend_magic = inet_addr(*argv);
- break;
-
- error:
- default:
- puts(usage);
- exit(1);
-
- }
- argc--;
- argv++;
- }
-
- /* Get server name (or address) for query. */
- if (argc > 0) {
- servername = *argv;
- argc--;
- argv++;
- }
- /* Get optional vendor-data-template-file. */
- if (argc > 0) {
- vendor_file = *argv;
- argc--;
- argv++;
- }
- if (!servername) {
- printf("missing server name.\n");
- puts(usage);
- exit(1);
- }
- /*
- * Create a socket.
- */
- if ((s = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- perror("socket");
- exit(1);
- }
- /*
- * Get server's listening port number
- */
- sep = getservbyname("bootps", "udp");
- if (sep) {
- bootps_port = ntohs((u_short) sep->s_port);
- } else {
- fprintf(stderr, "udp/bootps: unknown service -- using port %d\n",
- IPPORT_BOOTPS);
- bootps_port = (u_short) IPPORT_BOOTPS;
- }
-
- /*
- * Set up server socket address (for send)
- */
- if (servername) {
- if (isdigit(servername[0]))
- server_addr = inet_addr(servername);
- else {
- hep = gethostbyname(servername);
- if (!hep) {
- fprintf(stderr, "%s: unknown host\n", servername);
- exit(1);
- }
- bcopy(hep->h_addr, &server_addr, sizeof(server_addr));
- }
- } else {
- /* Get broadcast address */
- /* XXX - not yet */
- server_addr = INADDR_ANY;
- }
- sin_server.sin_family = AF_INET;
- sin_server.sin_port = htons(bootps_port);
- sin_server.sin_addr.s_addr = server_addr;
-
- /*
- * Get client's listening port number
- */
- sep = getservbyname("bootpc", "udp");
- if (sep) {
- bootpc_port = ntohs(sep->s_port);
- } else {
- fprintf(stderr, "udp/bootpc: unknown service -- using port %d\n",
- IPPORT_BOOTPC);
- bootpc_port = (u_short) IPPORT_BOOTPC;
- }
-
- /*
- * Set up client socket address (for listen)
- */
- sin_client.sin_family = AF_INET;
- sin_client.sin_port = htons(bootpc_port);
- sin_client.sin_addr.s_addr = INADDR_ANY;
-
- /*
- * Bind client socket to BOOTPC port.
- */
- if (bind(s, (struct sockaddr *) &sin_client, sizeof(sin_client)) < 0) {
- perror("bind BOOTPC port");
- if (errno == EACCES)
- fprintf(stderr, "You need to run this as root\n");
- exit(1);
- }
- /*
- * Build a request.
- */
- bp = (struct bootp *) sndbuf;
- bzero(bp, sizeof(*bp));
- bp->bp_op = BOOTREQUEST;
- xid = (int32) getpid();
- bp->bp_xid = (u_int32) htonl(xid);
- if (bp_file)
- strncpy(bp->bp_file, bp_file, BP_FILE_LEN);
-
- /*
- * Fill in the hardware address (or client IP address)
- */
- if (use_hwa) {
- struct ifreq *ifr;
-
- ifr = getif(s, &sin_server.sin_addr);
- if (!ifr) {
- printf("No interface for %s\n", servername);
- exit(1);
- }
- if (getether(ifr->ifr_name, eaddr)) {
- printf("Can not get ether addr for %s\n", ifr->ifr_name);
- exit(1);
- }
- /* Copy Ethernet address into request packet. */
- bp->bp_htype = 1;
- bp->bp_hlen = 6;
- bcopy(eaddr, bp->bp_chaddr, bp->bp_hlen);
- } else {
- /* Fill in the client IP address. */
- gethostname(hostname, sizeof(hostname));
- hep = gethostbyname(hostname);
- if (!hep) {
- printf("Can not get my IP address\n");
- exit(1);
- }
- bcopy(hep->h_addr, &bp->bp_ciaddr, hep->h_length);
- }
-
- /*
- * Copy in the default vendor data.
- */
- bcopy((char*)&vend_magic, bp->bp_vend, 4);
- if (vend_magic)
- bp->bp_vend[4] = TAG_END;
-
- /*
- * Read in the "options" part of the request.
- * This also determines the size of the packet.
- */
- snaplen = sizeof(*bp);
- if (vendor_file) {
- int fd = open(vendor_file, 0);
- if (fd < 0) {
- perror(vendor_file);
- exit(1);
- }
- /* Compute actual space for options. */
- n = BUFLEN - sizeof(*bp) + BP_VEND_LEN;
- n = read(fd, bp->bp_vend, n);
- close(fd);
- if (n < 0) {
- perror(vendor_file);
- exit(1);
- }
- printf("read %d bytes of vendor template\n", n);
- if (n > BP_VEND_LEN) {
- printf("warning: extended options in use (len > %d)\n",
- BP_VEND_LEN);
- snaplen += (n - BP_VEND_LEN);
- }
- }
- /*
- * Set globals needed by print_bootp
- * (called by send_request)
- */
- packetp = (unsigned char *) eaddr;
- snapend = (unsigned char *) sndbuf + snaplen;
-
- /* Send a request once per second while waiting for replies. */
- recvcnt = 0;
- bp->bp_secs = secs = 0;
- send_request(s);
- while (1) {
- struct timeval tv;
- int readfds;
-
- tv.tv_sec = WAITSECS;
- tv.tv_usec = 0L;
- readfds = (1 << s);
- n = select(s + 1, (fd_set *) & readfds, NULL, NULL, &tv);
- if (n < 0) {
- perror("select");
- break;
- }
- if (n == 0) {
- /*
- * We have not received a response in the last second.
- * If we have ever received any responses, exit now.
- * Otherwise, bump the "wait time" field and re-send.
- */
- if (recvcnt > 0)
- exit(0);
- secs += WAITSECS;
- if (secs > MAXWAIT)
- break;
- bp->bp_secs = htons(secs);
- send_request(s);
- continue;
- }
- fromlen = sizeof(sin_from);
- n = recvfrom(s, rcvbuf, BUFLEN, 0,
- (struct sockaddr *) &sin_from, &fromlen);
- if (n <= 0) {
- continue;
- }
- if (n < sizeof(struct bootp)) {
- printf("received short packet\n");
- continue;
- }
- recvcnt++;
-
- /* Print the received packet. */
- printf("Recvd from %s", inet_ntoa(sin_from.sin_addr));
- /* set globals needed by bootp_print() */
- snaplen = n;
- snapend = (unsigned char *) rcvbuf + snaplen;
- bootp_print(rcvbuf, n, sin_from.sin_port, 0);
- putchar('\n');
- /*
- * This no longer exits immediately after receiving
- * one response because it is useful to know if the
- * client might get multiple responses. This code
- * will now listen for one second after a response.
- */
- }
- fprintf(stderr, "no response from %s\n", servername);
- exit(1);
-}
-
-send_request(s)
- int s;
-{
- /* Print the request packet. */
- printf("Sending to %s", inet_ntoa(sin_server.sin_addr));
- bootp_print(sndbuf, snaplen, sin_from.sin_port, 0);
- putchar('\n');
-
- /* Send the request packet. */
- if (sendto(s, sndbuf, snaplen, 0,
- (struct sockaddr *) &sin_server,
- sizeof(sin_server)) < 0)
- {
- perror("sendto server");
- exit(1);
- }
-}
-
-/*
- * Print out a filename (or other ascii string).
- * Return true if truncated.
- */
-int
-printfn(s, ep)
- register u_char *s, *ep;
-{
- register u_char c;
-
- putchar('"');
- while (c = *s++) {
- if (s > ep) {
- putchar('"');
- return (1);
- }
- if (!isascii(c)) {
- c = toascii(c);
- putchar('M');
- putchar('-');
- }
- if (!isprint(c)) {
- c ^= 0x40; /* DEL to ?, others to alpha */
- putchar('^');
- }
- putchar(c);
- }
- putchar('"');
- return (0);
-}
-
-/*
- * Convert an IP addr to a string.
- * (like inet_ntoa, but ina is a pointer)
- */
-char *
-ipaddr_string(ina)
- struct in_addr *ina;
-{
- static char b[24];
- u_char *p;
-
- p = (u_char *) ina;
- sprintf(b, "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
- return (b);
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/bootptest.h b/usr.sbin/bootpd/bootptest.h
deleted file mode 100644
index 27f78ba..0000000
--- a/usr.sbin/bootpd/bootptest.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/* bootptest.h */
-/*
- * Hacks for sharing print-bootp.c between tcpdump and bootptest.
- */
-#define ESRC(p) (p)
-#define EDST(p) (p)
-
-#ifndef USE_BFUNCS
-/* Use mem/str functions */
-/* There are no overlapped copies, so memcpy is OK. */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#define bzero(p,l) memset(p,0,l)
-#define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-extern int vflag; /* verbose flag */
-
-/* global pointers to beginning and end of current packet (during printing) */
-extern unsigned char *packetp;
-extern unsigned char *snapend;
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern char *ipaddr_string P((struct in_addr *));
-
-#undef P
diff --git a/usr.sbin/bootpd/bptypes.h b/usr.sbin/bootpd/bptypes.h
deleted file mode 100644
index 537da4e..0000000
--- a/usr.sbin/bootpd/bptypes.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/* bptypes.h */
-
-#ifndef BPTYPES_H
-#define BPTYPES_H
-
-/*
- * 32 bit integers are different types on various architectures
- */
-
-#ifndef int32
-#define int32 long
-#endif
-typedef unsigned int32 u_int32;
-
-/*
- * Nice typedefs. . .
- */
-
-typedef int boolean;
-typedef unsigned char byte;
-
-
-#endif /* BPTYPES_H */
diff --git a/usr.sbin/bootpd/dovend.c b/usr.sbin/bootpd/dovend.c
deleted file mode 100644
index ba6ab28..0000000
--- a/usr.sbin/bootpd/dovend.c
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
- * dovend.c : Inserts all but the first few vendor options.
- */
-
-#include <sys/types.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <syslog.h>
-
-#ifndef USE_BFUNCS
-# include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-# define bcopy(a,b,c) memcpy(b,a,c)
-# define bzero(p,l) memset(p,0,l)
-# define bcmp(a,b,c) memcmp(a,b,c)
-# define index strchr
-#endif
-
-#include "bootp.h"
-#include "bootpd.h"
-#include "report.h"
-#include "dovend.h"
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-PRIVATE int insert_generic P((struct shared_bindata *, byte **, int *));
-
-/*
- * Insert the 2nd part of the options into an option buffer.
- * Return amount of space used.
- *
- * This inserts everything EXCEPT:
- * magic cookie, subnet mask, gateway, bootsize, extension file
- * Those are handled separately (in bootpd.c) to allow this function
- * to be shared between bootpd and bootpef.
- *
- * When an "extension file" is in use, the options inserted by
- * this function go into the exten_file, not the bootp response.
- */
-
-int
-dovend_rfc1497(hp, buf, len)
- struct host *hp;
- byte *buf;
- int len;
-{
- int bytesleft = len;
- byte *vp = buf;
- char *tmpstr;
-
- static char noroom[] = "%s: No room for \"%s\" option";
-#define NEED(LEN, MSG) do \
- if (bytesleft < (LEN)) { \
- report(LOG_NOTICE, noroom, \
- hp->hostname->string, MSG); \
- return (vp - buf); \
- } while (0)
-
- /*
- * Note that the following have already been inserted:
- * magic_cookie, subnet_mask, gateway, bootsize
- *
- * The remaining options are inserted in order of importance.
- * (Of course the importance of each is a matter of opinion.)
- * The option insertion order should probably be configurable.
- *
- * This is the order used in the NetBSD version. Can anyone
- * explain why the time_offset and swap_server are first?
- * Also, why is the hostname so far down the list? -gwr
- */
-
- if (hp->flags.time_offset) {
- NEED(6, "to");
- *vp++ = TAG_TIME_OFFSET;/* -1 byte */
- *vp++ = 4; /* -1 byte */
- insert_u_long(htonl(hp->time_offset), &vp); /* -4 bytes */
- bytesleft -= 6;
- }
- /*
- * swap server, root path, dump path
- */
- if (hp->flags.swap_server) {
- NEED(6, "sw");
- /* There is just one SWAP_SERVER, so it is not an iplist. */
- *vp++ = TAG_SWAP_SERVER;/* -1 byte */
- *vp++ = 4; /* -1 byte */
- insert_u_long(hp->swap_server.s_addr, &vp); /* -4 bytes */
- bytesleft -= 6; /* Fix real count */
- }
- if (hp->flags.root_path) {
- /*
- * Check for room for root_path. Add 2 to account for
- * TAG_ROOT_PATH and length.
- */
- len = strlen(hp->root_path->string);
- NEED((len + 2), "rp");
- *vp++ = TAG_ROOT_PATH;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->root_path->string, vp, len);
- vp += len;
- bytesleft -= len + 2;
- }
- if (hp->flags.dump_file) {
- /*
- * Check for room for dump_file. Add 2 to account for
- * TAG_DUMP_FILE and length.
- */
- len = strlen(hp->dump_file->string);
- NEED((len + 2), "df");
- *vp++ = TAG_DUMP_FILE;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->dump_file->string, vp, len);
- vp += len;
- bytesleft -= len + 2;
- }
- /*
- * DNS server and domain
- */
- if (hp->flags.domain_server) {
- if (insert_ip(TAG_DOMAIN_SERVER,
- hp->domain_server,
- &vp, &bytesleft))
- NEED(8, "ds");
- }
- if (hp->flags.domain_name) {
- /*
- * Check for room for domain_name. Add 2 to account for
- * TAG_DOMAIN_NAME and length.
- */
- len = strlen(hp->domain_name->string);
- NEED((len + 2), "dn");
- *vp++ = TAG_DOMAIN_NAME;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->domain_name->string, vp, len);
- vp += len;
- bytesleft -= len + 2;
- }
- /*
- * NIS (YP) server and domain
- */
- if (hp->flags.nis_server) {
- if (insert_ip(TAG_NIS_SERVER,
- hp->nis_server,
- &vp, &bytesleft))
- NEED(8, "ds");
- }
- if (hp->flags.nis_domain) {
- /*
- * Check for room for nis_domain. Add 2 to account for
- * TAG_NIS_DOMAIN and length.
- */
- len = strlen(hp->nis_domain->string);
- NEED((len + 2), "dn");
- *vp++ = TAG_NIS_DOMAIN;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->nis_domain->string, vp, len);
- vp += len;
- bytesleft -= len + 2;
- }
- /* IEN 116 name server */
- if (hp->flags.name_server) {
- if (insert_ip(TAG_NAME_SERVER,
- hp->name_server,
- &vp, &bytesleft))
- NEED(8, "ns");
- }
- if (hp->flags.rlp_server) {
- if (insert_ip(TAG_RLP_SERVER,
- hp->rlp_server,
- &vp, &bytesleft))
- NEED(8, "rl");
- }
- /* Time server (RFC 868) */
- if (hp->flags.time_server) {
- if (insert_ip(TAG_TIME_SERVER,
- hp->time_server,
- &vp, &bytesleft))
- NEED(8, "ts");
- }
- /* NTP (time) Server (RFC 1129) */
- if (hp->flags.ntp_server) {
- if (insert_ip(TAG_NTP_SERVER,
- hp->ntp_server,
- &vp, &bytesleft))
- NEED(8, "ts");
- }
- /*
- * I wonder: If the hostname were "promoted" into the BOOTP
- * response part, might these "extension" files possibly be
- * shared between several clients?
- *
- * Also, why not just use longer BOOTP packets with all the
- * additional length used as option data. This bootpd version
- * already supports that feature by replying with the same
- * packet length as the client request packet. -gwr
- */
- if (hp->flags.name_switch && hp->flags.send_name) {
- /*
- * Check for room for hostname. Add 2 to account for
- * TAG_HOST_NAME and length.
- */
- len = strlen(hp->hostname->string);
-#if 0
- /*
- * XXX - Too much magic. The user can always set the hostname
- * to the short version in the bootptab file. -gwr
- */
- if ((len + 2) > bytesleft) {
- /*
- * Not enough room for full (domain-qualified) hostname, try
- * stripping it down to just the first field (host).
- */
- tmpstr = hp->hostname->string;
- len = 0;
- while (*tmpstr && (*tmpstr != '.')) {
- tmpstr++;
- len++;
- }
- }
-#endif
- NEED((len + 2), "hn");
- *vp++ = TAG_HOST_NAME;
- *vp++ = (byte) (len & 0xFF);
- bcopy(hp->hostname->string, vp, len);
- vp += len;
- bytesleft -= len + 2;
- }
- /*
- * The rest of these are less important, so they go last.
- */
- if (hp->flags.lpr_server) {
- if (insert_ip(TAG_LPR_SERVER,
- hp->lpr_server,
- &vp, &bytesleft))
- NEED(8, "lp");
- }
- if (hp->flags.cookie_server) {
- if (insert_ip(TAG_COOKIE_SERVER,
- hp->cookie_server,
- &vp, &bytesleft))
- NEED(8, "cs");
- }
- if (hp->flags.log_server) {
- if (insert_ip(TAG_LOG_SERVER,
- hp->log_server,
- &vp, &bytesleft))
- NEED(8, "lg");
- }
- /*
- * XXX - Add new tags here (to insert options)
- */
- if (hp->flags.generic) {
- if (insert_generic(hp->generic, &vp, &bytesleft))
- NEED(64, "(generic)");
- }
- /*
- * The end marker is inserted by the caller.
- */
- return (vp - buf);
-#undef NEED
-} /* dovend_rfc1497 */
-
-
-
-/*
- * Insert a tag value, a length value, and a list of IP addresses into the
- * memory buffer indirectly pointed to by "dest". "tag" is the RFC1048 tag
- * number to use, "iplist" is a pointer to a list of IP addresses
- * (struct in_addr_list), and "bytesleft" points to an integer which
- * indicates the size of the "dest" buffer.
- *
- * Return zero if everything fits.
- *
- * This is used to fill the vendor-specific area of a bootp packet in
- * conformance to RFC1048.
- */
-
-int
-insert_ip(tag, iplist, dest, bytesleft)
- byte tag;
- struct in_addr_list *iplist;
- byte **dest;
- int *bytesleft;
-{
- struct in_addr *addrptr;
- unsigned addrcount = 1;
- byte *d;
-
- if (iplist == NULL)
- return (0);
-
- if (*bytesleft >= 6) {
- d = *dest; /* Save pointer for later */
- **dest = tag;
- (*dest) += 2;
- (*bytesleft) -= 2; /* Account for tag and length */
- addrptr = iplist->addr;
- addrcount = iplist->addrcount;
- while ((*bytesleft >= 4) && (addrcount > 0)) {
- insert_u_long(addrptr->s_addr, dest);
- addrptr++;
- addrcount--;
- (*bytesleft) -= 4; /* Four bytes per address */
- }
- d[1] = (byte) ((*dest - d - 2) & 0xFF);
- }
- return (addrcount);
-}
-
-
-
-/*
- * Insert generic data into a bootp packet. The data is assumed to already
- * be in RFC1048 format. It is inserted using a first-fit algorithm which
- * attempts to insert as many tags as possible. Tags and data which are
- * too large to fit are skipped; any remaining tags are tried until they
- * have all been exhausted.
- * Return zero if everything fits.
- */
-
-static int
-insert_generic(gendata, buff, bytesleft)
- struct shared_bindata *gendata;
- byte **buff;
- int *bytesleft;
-{
- byte *srcptr;
- int length, numbytes;
- int skipped = 0;
-
- if (gendata == NULL)
- return (0);
-
- srcptr = gendata->data;
- length = gendata->length;
- while ((length > 0) && (*bytesleft > 0)) {
- switch (*srcptr) {
- case TAG_END:
- length = 0; /* Force an exit on next iteration */
- break;
- case TAG_PAD:
- *(*buff)++ = *srcptr++;
- (*bytesleft)--;
- length--;
- break;
- default:
- numbytes = srcptr[1] + 2;
- if (*bytesleft < numbytes)
- skipped += numbytes;
- else {
- bcopy(srcptr, *buff, numbytes);
- (*buff) += numbytes;
- (*bytesleft) -= numbytes;
- }
- srcptr += numbytes;
- length -= numbytes;
- break;
- }
- } /* while */
- return (skipped);
-}
-
-/*
- * Insert the unsigned long "value" into memory starting at the byte
- * pointed to by the byte pointer (*dest). (*dest) is updated to
- * point to the next available byte.
- *
- * Since it is desirable to internally store network addresses in network
- * byte order (in struct in_addr's), this routine expects longs to be
- * passed in network byte order.
- *
- * However, due to the nature of the main algorithm, the long must be in
- * host byte order, thus necessitating the use of ntohl() first.
- */
-
-void
-insert_u_long(value, dest)
- u_int32 value;
- byte **dest;
-{
- byte *temp;
- int n;
-
- value = ntohl(value); /* Must use host byte order here */
- temp = (*dest += 4);
- for (n = 4; n > 0; n--) {
- *--temp = (byte) (value & 0xFF);
- value >>= 8;
- }
- /* Final result is network byte order */
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/dovend.h b/usr.sbin/bootpd/dovend.h
deleted file mode 100644
index b30c982..0000000
--- a/usr.sbin/bootpd/dovend.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* dovend.h */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern int dovend_rfc1497 P((struct host *hp, u_char *buf, int len));
-extern int insert_ip P((int, struct in_addr_list *, u_char **, int *));
-extern void insert_u_long P((u_int32, u_char **));
-
-#undef P
diff --git a/usr.sbin/bootpd/dumptab.c b/usr.sbin/bootpd/dumptab.c
deleted file mode 100644
index 8c049b9..0000000
--- a/usr.sbin/bootpd/dumptab.c
+++ /dev/null
@@ -1,382 +0,0 @@
-/*
- * dumptab.c - handles dumping the database
- */
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <syslog.h>
-#include <time.h>
-
-#ifndef USE_BFUNCS
-#include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#define bzero(p,l) memset(p,0,l)
-#define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "hash.h"
-#include "hwaddr.h"
-#include "report.h"
-#include "patchlevel.h"
-#include "bootpd.h"
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-static void dump_generic P((FILE *, struct shared_bindata *));
-static void dump_host P((FILE *, struct host *));
-static void list_ipaddresses P((FILE *, struct in_addr_list *));
-
-#undef P
-
-#ifndef DEBUG
-void
-dumptab(filename)
- char *filename;
-{
- report(LOG_INFO, "No dumptab support!");
-}
-
-#else /* DEBUG */
-
-/*
- * Dump the internal memory database to bootpd_dump.
- */
-
-void
-dumptab(filename)
- char *filename;
-{
- int n;
- struct host *hp;
- FILE *fp;
- long t;
- /* Print symbols in alphabetical order for reader's convenience. */
- static char legend[] = "#\n# Legend:\t(see bootptab.5)\n\
-#\tfirst field -- hostname (not indented)\n\
-#\tbf -- bootfile\n\
-#\tbs -- bootfile size in 512-octet blocks\n\
-#\tcs -- cookie servers\n\
-#\tdf -- dump file name\n\
-#\tdn -- domain name\n\
-#\tds -- domain name servers\n\
-#\tef -- extension file\n\
-#\tex -- exec file (YORK_EX_OPTION)\n\
-#\tgw -- gateways\n\
-#\tha -- hardware address\n\
-#\thd -- home directory for bootfiles\n\
-#\thn -- host name set for client\n\
-#\tht -- hardware type\n\
-#\tim -- impress servers\n\
-#\tip -- host IP address\n\
-#\tlg -- log servers\n\
-#\tlp -- LPR servers\n\
-#\tms -- message size\n\
-#\tmw -- min wait (secs)\n\
-#\tns -- IEN-116 name servers\n\
-#\tnt -- NTP servers (RFC 1129)\n\
-#\tra -- reply address override\n\
-#\trl -- resource location protocol servers\n\
-#\trp -- root path\n\
-#\tsa -- boot server address\n\
-#\tsm -- subnet mask\n\
-#\tsw -- swap server\n\
-#\ttc -- template host (points to similar host entry)\n\
-#\ttd -- TFTP directory\n\
-#\tto -- time offset (seconds)\n\
-#\tts -- time servers\n\
-#\tvm -- vendor magic number\n\
-#\tyd -- YP (NIS) domain\n\
-#\tys -- YP (NIS) servers\n\
-#\tTn -- generic option tag n\n\
-\n";
-
- /*
- * Open bootpd.dump file.
- */
- if ((fp = fopen(filename, "w")) == NULL) {
- report(LOG_ERR, "error opening \"%s\": %s",
- filename, get_errmsg());
- exit(1);
- }
- t = time(NULL);
- fprintf(fp, "\n# %s %s.%d\n", progname, VERSION, PATCHLEVEL);
- fprintf(fp, "# %s: dump of bootp server database.\n", filename);
- fprintf(fp, "# Dump taken %s", ctime(&t));
- fwrite(legend, 1, sizeof(legend) - 1, fp);
-
- n = 0;
- for (hp = (struct host *) hash_FirstEntry(nmhashtable); hp != NULL;
- hp = (struct host *) hash_NextEntry(nmhashtable)) {
- dump_host(fp, hp);
- fprintf(fp, "\n");
- n++;
- }
- fclose(fp);
-
- report(LOG_INFO, "dumped %d entries to \"%s\".", n, filename);
-}
-
-
-
-/*
- * Dump all the available information on the host pointed to by "hp".
- * The output is sent to the file pointed to by "fp".
- */
-
-static void
-dump_host(fp, hp)
- FILE *fp;
- struct host *hp;
-{
- /* Print symbols in alphabetical order for reader's convenience. */
- if (hp) {
- fprintf(fp, "%s:", (hp->hostname ?
- hp->hostname->string : "?"));
- if (hp->flags.bootfile) {
- fprintf(fp, "\\\n\t:bf=%s:", hp->bootfile->string);
- }
- if (hp->flags.bootsize) {
- fprintf(fp, "\\\n\t:bs=");
- if (hp->flags.bootsize_auto) {
- fprintf(fp, "auto:");
- } else {
- fprintf(fp, "%d:", hp->bootsize);
- }
- }
- if (hp->flags.cookie_server) {
- fprintf(fp, "\\\n\t:cs=");
- list_ipaddresses(fp, hp->cookie_server);
- fprintf(fp, ":");
- }
- if (hp->flags.dump_file) {
- fprintf(fp, "\\\n\t:df=%s:", hp->dump_file->string);
- }
- if (hp->flags.domain_name) {
- fprintf(fp, "\\\n\t:dn=%s:", hp->domain_name->string);
- }
- if (hp->flags.domain_server) {
- fprintf(fp, "\\\n\t:ds=");
- list_ipaddresses(fp, hp->domain_server);
- fprintf(fp, ":");
- }
- if (hp->flags.exten_file) {
- fprintf(fp, "\\\n\t:ef=%s:", hp->exten_file->string);
- }
- if (hp->flags.exec_file) {
- fprintf(fp, "\\\n\t:ex=%s:", hp->exec_file->string);
- }
- if (hp->flags.gateway) {
- fprintf(fp, "\\\n\t:gw=");
- list_ipaddresses(fp, hp->gateway);
- fprintf(fp, ":");
- }
- /* FdC: swap_server (see below) */
- if (hp->flags.homedir) {
- fprintf(fp, "\\\n\t:hd=%s:", hp->homedir->string);
- }
- /* FdC: dump_file (see above) */
- /* FdC: domain_name (see above) */
- /* FdC: root_path (see below) */
- if (hp->flags.name_switch && hp->flags.send_name) {
- fprintf(fp, "\\\n\t:hn:");
- }
- if (hp->flags.htype) {
- int hlen = haddrlength(hp->htype);
- fprintf(fp, "\\\n\t:ht=%u:", (unsigned) hp->htype);
- if (hp->flags.haddr) {
- fprintf(fp, "ha=\"%s\":",
- haddrtoa(hp->haddr, hlen));
- }
- }
- if (hp->flags.impress_server) {
- fprintf(fp, "\\\n\t:im=");
- list_ipaddresses(fp, hp->impress_server);
- fprintf(fp, ":");
- }
- /* NetBSD: swap_server (see below) */
- if (hp->flags.iaddr) {
- fprintf(fp, "\\\n\t:ip=%s:", inet_ntoa(hp->iaddr));
- }
- if (hp->flags.log_server) {
- fprintf(fp, "\\\n\t:lg=");
- list_ipaddresses(fp, hp->log_server);
- fprintf(fp, ":");
- }
- if (hp->flags.lpr_server) {
- fprintf(fp, "\\\n\t:lp=");
- list_ipaddresses(fp, hp->lpr_server);
- fprintf(fp, ":");
- }
- if (hp->flags.msg_size) {
- fprintf(fp, "\\\n\t:ms=%d:", hp->msg_size);
- }
- if (hp->flags.min_wait) {
- fprintf(fp, "\\\n\t:mw=%d:", hp->min_wait);
- }
- if (hp->flags.name_server) {
- fprintf(fp, "\\\n\t:ns=");
- list_ipaddresses(fp, hp->name_server);
- fprintf(fp, ":");
- }
- if (hp->flags.ntp_server) {
- fprintf(fp, "\\\n\t:nt=");
- list_ipaddresses(fp, hp->ntp_server);
- fprintf(fp, ":");
- }
- if (hp->flags.reply_addr) {
- fprintf(fp, "\\\n\t:ra=%s:", inet_ntoa(hp->reply_addr));
- }
- if (hp->flags.rlp_server) {
- fprintf(fp, "\\\n\t:rl=");
- list_ipaddresses(fp, hp->rlp_server);
- fprintf(fp, ":");
- }
- if (hp->flags.root_path) {
- fprintf(fp, "\\\n\t:rp=%s:", hp->root_path->string);
- }
- if (hp->flags.bootserver) {
- fprintf(fp, "\\\n\t:sa=%s:", inet_ntoa(hp->bootserver));
- }
- if (hp->flags.subnet_mask) {
- fprintf(fp, "\\\n\t:sm=%s:", inet_ntoa(hp->subnet_mask));
- }
- if (hp->flags.swap_server) {
- fprintf(fp, "\\\n\t:sw=%s:", inet_ntoa(hp->subnet_mask));
- }
- if (hp->flags.tftpdir) {
- fprintf(fp, "\\\n\t:td=%s:", hp->tftpdir->string);
- }
- /* NetBSD: rootpath (see above) */
- /* NetBSD: domainname (see above) */
- /* NetBSD: dumpfile (see above) */
- if (hp->flags.time_offset) {
- fprintf(fp, "\\\n\t:to=%ld:", hp->time_offset);
- }
- if (hp->flags.time_server) {
- fprintf(fp, "\\\n\t:ts=");
- list_ipaddresses(fp, hp->time_server);
- fprintf(fp, ":");
- }
- if (hp->flags.vm_cookie) {
- fprintf(fp, "\\\n\t:vm=");
- if (!bcmp(hp->vm_cookie, vm_rfc1048, 4)) {
- fprintf(fp, "rfc1048:");
- } else if (!bcmp(hp->vm_cookie, vm_cmu, 4)) {
- fprintf(fp, "cmu:");
- } else {
- fprintf(fp, "%d.%d.%d.%d:",
- (int) ((hp->vm_cookie)[0]),
- (int) ((hp->vm_cookie)[1]),
- (int) ((hp->vm_cookie)[2]),
- (int) ((hp->vm_cookie)[3]));
- }
- }
- if (hp->flags.nis_domain) {
- fprintf(fp, "\\\n\t:yd=%s:",
- hp->nis_domain->string);
- }
- if (hp->flags.nis_server) {
- fprintf(fp, "\\\n\t:ys=");
- list_ipaddresses(fp, hp->nis_server);
- fprintf(fp, ":");
- }
- /*
- * XXX - Add new tags here (or above,
- * so they print in alphabetical order).
- */
-
- if (hp->flags.generic) {
- dump_generic(fp, hp->generic);
- }
- }
-}
-
-
-static void
-dump_generic(fp, generic)
- FILE *fp;
- struct shared_bindata *generic;
-{
- u_char *bp = generic->data;
- u_char *ep = bp + generic->length;
- u_char tag;
- int len;
-
- while (bp < ep) {
- tag = *bp++;
- if (tag == TAG_PAD)
- continue;
- if (tag == TAG_END)
- return;
- len = *bp++;
- if (bp + len > ep) {
- fprintf(fp, " #junk in generic! :");
- return;
- }
- fprintf(fp, "\\\n\t:T%d=", tag);
- while (len) {
- fprintf(fp, "%02X", *bp);
- bp++;
- len--;
- if (len)
- fprintf(fp, ".");
- }
- fprintf(fp, ":");
- }
-}
-
-
-
-/*
- * Dump an entire struct in_addr_list of IP addresses to the indicated file.
- *
- * The addresses are printed in standard ASCII "dot" notation and separated
- * from one another by a single space. A single leading space is also
- * printed before the first adddress.
- *
- * Null lists produce no output (and no error).
- */
-
-static void
-list_ipaddresses(fp, ipptr)
- FILE *fp;
- struct in_addr_list *ipptr;
-{
- unsigned count;
- struct in_addr *addrptr;
-
- if (ipptr) {
- count = ipptr->addrcount;
- addrptr = ipptr->addr;
- while (count > 0) {
- fprintf(fp, "%s", inet_ntoa(*addrptr++));
- count--;
- if (count)
- fprintf(fp, ", ");
- }
- }
-}
-
-#endif /* DEBUG */
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/getif.c b/usr.sbin/bootpd/getif.c
deleted file mode 100644
index 6cc1649..0000000
--- a/usr.sbin/bootpd/getif.c
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * getif.c : get an interface structure
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-
-#if defined(SUNOS) || defined(SVR4)
-#include <sys/sockio.h>
-#endif
-#ifdef SVR4
-#include <sys/stropts.h>
-#endif
-
-#include <net/if.h> /* for struct ifreq */
-#include <netinet/in.h>
-
-#ifndef NO_UNISTD
-#include <unistd.h>
-#endif
-#include <syslog.h>
-#include <errno.h>
-#include <assert.h>
-
-#include "getif.h"
-#include "report.h"
-
-#ifdef __bsdi__
-#define BSD 43
-#endif
-
-static struct ifreq ifreq[10]; /* Holds interface configuration */
-static struct ifconf ifconf; /* points to ifreq */
-
-static int nmatch();
-
-/* Return a pointer to the interface struct for the passed address. */
-struct ifreq *
-getif(s, addrp)
- int s; /* socket file descriptor */
- struct in_addr *addrp; /* destination address on interface */
-{
- int maxmatch;
- int len, m, incr;
- struct ifreq *ifrq, *ifrmax;
- struct sockaddr_in *sip;
- char *p;
-
- /* If no address was supplied, just return NULL. */
- if (!addrp)
- return (struct ifreq *) 0;
-
- /* Get the interface config if not done already. */
- if (ifconf.ifc_len == 0) {
-#ifdef SVR4
- /*
- * SysVr4 returns garbage if you do this the obvious way!
- * This one took a while to figure out... -gwr
- */
- struct strioctl ioc;
- ioc.ic_cmd = SIOCGIFCONF;
- ioc.ic_timout = 0;
- ioc.ic_len = sizeof(ifreq);
- ioc.ic_dp = (char *) ifreq;
- m = ioctl(s, I_STR, (char *) &ioc);
- ifconf.ifc_len = ioc.ic_len;
- ifconf.ifc_req = ifreq;
-#else /* SVR4 */
- ifconf.ifc_len = sizeof(ifreq);
- ifconf.ifc_req = ifreq;
- m = ioctl(s, SIOCGIFCONF, (caddr_t) & ifconf);
-#endif /* SVR4 */
- if ((m < 0) || (ifconf.ifc_len <= 0)) {
- report(LOG_ERR, "ioctl SIOCGIFCONF");
- return (struct ifreq *) 0;
- }
- }
- maxmatch = 7; /* this many bits or less... */
- ifrmax = (struct ifreq *) 0;/* ... is not a valid match */
- p = (char *) ifreq;
- len = ifconf.ifc_len;
- while (len > 0) {
- ifrq = (struct ifreq *) p;
- sip = (struct sockaddr_in *) &ifrq->ifr_addr;
- m = nmatch(addrp, &(sip->sin_addr));
- if (m > maxmatch) {
- maxmatch = m;
- ifrmax = ifrq;
- }
- /* XXX - Could this be just #ifndef IFNAMSIZ instead? -gwr */
-#if (BSD - 0) < 43
- /* BSD not defined or earlier than 4.3 */
- incr = sizeof(*ifrq);
-#else /* NetBSD */
- incr = ifrq->ifr_addr.sa_len + IFNAMSIZ;
-#endif /* NetBSD */
-
- p += incr;
- len -= incr;
- }
-
- return ifrmax;
-}
-
-/*
- * Return the number of leading bits matching in the
- * internet addresses supplied.
- */
-static int
-nmatch(ca, cb)
- u_char *ca, *cb; /* ptrs to IP address, network order */
-{
- u_int m = 0; /* count of matching bits */
- u_int n = 4; /* bytes left, then bitmask */
-
- /* Count matching bytes. */
- while (n && (*ca == *cb)) {
- ca++;
- cb++;
- m += 8;
- n--;
- }
- /* Now count matching bits. */
- if (n) {
- n = 0x80;
- while (n && ((*ca & n) == (*cb & n))) {
- m++;
- n >>= 1;
- }
- }
- return (m);
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/getif.h b/usr.sbin/bootpd/getif.h
deleted file mode 100644
index c51dafd..0000000
--- a/usr.sbin/bootpd/getif.h
+++ /dev/null
@@ -1,7 +0,0 @@
-/* getif.h */
-
-#ifdef __STDC__
-extern struct ifreq *getif(int, struct in_addr *);
-#else
-extern struct ifreq *getif();
-#endif
diff --git a/usr.sbin/bootpd/hash.c b/usr.sbin/bootpd/hash.c
deleted file mode 100644
index c1d33bb..0000000
--- a/usr.sbin/bootpd/hash.c
+++ /dev/null
@@ -1,425 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: hash.c,v 1.2 1994/08/22 22:14:58 gwr Exp $";
-#endif
-
-
-/*
- * Generalized hash table ADT
- *
- * Provides multiple, dynamically-allocated, variable-sized hash tables on
- * various data and keys.
- *
- * This package attempts to follow some of the coding conventions suggested
- * by Bob Sidebotham and the AFS Clean Code Committee of the
- * Information Technology Center at Carnegie Mellon.
- */
-
-
-#include <sys/types.h>
-#include <stdlib.h>
-
-#ifndef USE_BFUNCS
-#include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#define bzero(p,l) memset(p,0,l)
-#define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "hash.h"
-
-#define TRUE 1
-#define FALSE 0
-#ifndef NULL
-#define NULL 0
-#endif
-
-/*
- * This can be changed to make internal routines visible to debuggers, etc.
- */
-#ifndef PRIVATE
-#define PRIVATE static
-#endif
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-PRIVATE void hashi_FreeMembers P((hash_member *, hash_freefp));
-
-#undef P
-
-
-
-/*
- * Hash table initialization routine.
- *
- * This routine creates and intializes a hash table of size "tablesize"
- * entries. Successful calls return a pointer to the hash table (which must
- * be passed to other hash routines to identify the hash table). Failed
- * calls return NULL.
- */
-
-hash_tbl *
-hash_Init(tablesize)
- unsigned tablesize;
-{
- register hash_tbl *hashtblptr;
- register unsigned totalsize;
-
- if (tablesize > 0) {
- totalsize = sizeof(hash_tbl)
- + sizeof(hash_member *) * (tablesize - 1);
- hashtblptr = (hash_tbl *) malloc(totalsize);
- if (hashtblptr) {
- bzero((char *) hashtblptr, totalsize);
- hashtblptr->size = tablesize; /* Success! */
- hashtblptr->bucketnum = 0;
- hashtblptr->member = (hashtblptr->table)[0];
- }
- } else {
- hashtblptr = NULL; /* Disallow zero-length tables */
- }
- return hashtblptr; /* NULL if failure */
-}
-
-
-
-/*
- * Frees an entire linked list of bucket members (used in the open
- * hashing scheme). Does nothing if the passed pointer is NULL.
- */
-
-PRIVATE void
-hashi_FreeMembers(bucketptr, free_data)
- hash_member *bucketptr;
- hash_freefp free_data;
-{
- hash_member *nextbucket;
- while (bucketptr) {
- nextbucket = bucketptr->next;
- (*free_data) (bucketptr->data);
- free((char *) bucketptr);
- bucketptr = nextbucket;
- }
-}
-
-
-
-
-/*
- * This routine re-initializes the hash table. It frees all the allocated
- * memory and resets all bucket pointers to NULL.
- */
-
-void
-hash_Reset(hashtable, free_data)
- hash_tbl *hashtable;
- hash_freefp free_data;
-{
- hash_member **bucketptr;
- unsigned i;
-
- bucketptr = hashtable->table;
- for (i = 0; i < hashtable->size; i++) {
- hashi_FreeMembers(*bucketptr, free_data);
- *bucketptr++ = NULL;
- }
- hashtable->bucketnum = 0;
- hashtable->member = (hashtable->table)[0];
-}
-
-
-
-/*
- * Generic hash function to calculate a hash code from the given string.
- *
- * For each byte of the string, this function left-shifts the value in an
- * accumulator and then adds the byte into the accumulator. The contents of
- * the accumulator is returned after the entire string has been processed.
- * It is assumed that this result will be used as the "hashcode" parameter in
- * calls to other functions in this package. These functions automatically
- * adjust the hashcode for the size of each hashtable.
- *
- * This algorithm probably works best when the hash table size is a prime
- * number.
- *
- * Hopefully, this function is better than the previous one which returned
- * the sum of the squares of all the bytes. I'm still open to other
- * suggestions for a default hash function. The programmer is more than
- * welcome to supply his/her own hash function as that is one of the design
- * features of this package.
- */
-
-unsigned
-hash_HashFunction(string, len)
- unsigned char *string;
- register unsigned len;
-{
- register unsigned accum;
-
- accum = 0;
- for (; len > 0; len--) {
- accum <<= 1;
- accum += (unsigned) (*string++ & 0xFF);
- }
- return accum;
-}
-
-
-
-/*
- * Returns TRUE if at least one entry for the given key exists; FALSE
- * otherwise.
- */
-
-int
-hash_Exists(hashtable, hashcode, compare, key)
- hash_tbl *hashtable;
- unsigned hashcode;
- hash_cmpfp compare;
- hash_datum *key;
-{
- register hash_member *memberptr;
-
- memberptr = (hashtable->table)[hashcode % (hashtable->size)];
- while (memberptr) {
- if ((*compare) (key, memberptr->data)) {
- return TRUE; /* Entry does exist */
- }
- memberptr = memberptr->next;
- }
- return FALSE; /* Entry does not exist */
-}
-
-
-
-/*
- * Insert the data item "element" into the hash table using "hashcode"
- * to determine the bucket number, and "compare" and "key" to determine
- * its uniqueness.
- *
- * If the insertion is successful 0 is returned. If a matching entry
- * already exists in the given bucket of the hash table, or some other error
- * occurs, -1 is returned and the insertion is not done.
- */
-
-int
-hash_Insert(hashtable, hashcode, compare, key, element)
- hash_tbl *hashtable;
- unsigned hashcode;
- hash_cmpfp compare;
- hash_datum *key, *element;
-{
- hash_member *temp;
-
- hashcode %= hashtable->size;
- if (hash_Exists(hashtable, hashcode, compare, key)) {
- return -1; /* At least one entry already exists */
- }
- temp = (hash_member *) malloc(sizeof(hash_member));
- if (!temp)
- return -1; /* malloc failed! */
-
- temp->data = element;
- temp->next = (hashtable->table)[hashcode];
- (hashtable->table)[hashcode] = temp;
- return 0; /* Success */
-}
-
-
-
-/*
- * Delete all data elements which match the given key. If at least one
- * element is found and the deletion is successful, 0 is returned.
- * If no matching elements can be found in the hash table, -1 is returned.
- */
-
-int
-hash_Delete(hashtable, hashcode, compare, key, free_data)
- hash_tbl *hashtable;
- unsigned hashcode;
- hash_cmpfp compare;
- hash_datum *key;
- hash_freefp free_data;
-{
- hash_member *memberptr, *tempptr;
- hash_member *previous = NULL;
- int retval;
-
- retval = -1;
- hashcode %= hashtable->size;
-
- /*
- * Delete the first member of the list if it matches. Since this moves
- * the second member into the first position we have to keep doing this
- * over and over until it no longer matches.
- */
- memberptr = (hashtable->table)[hashcode];
- while (memberptr && (*compare) (key, memberptr->data)) {
- (hashtable->table)[hashcode] = memberptr->next;
- /*
- * Stop hashi_FreeMembers() from deleting the whole list!
- */
- memberptr->next = NULL;
- hashi_FreeMembers(memberptr, free_data);
- memberptr = (hashtable->table)[hashcode];
- retval = 0;
- }
-
- /*
- * Now traverse the rest of the list
- */
- if (memberptr) {
- previous = memberptr;
- memberptr = memberptr->next;
- }
- while (memberptr) {
- if ((*compare) (key, memberptr->data)) {
- tempptr = memberptr;
- previous->next = memberptr = memberptr->next;
- /*
- * Put the brakes on hashi_FreeMembers(). . . .
- */
- tempptr->next = NULL;
- hashi_FreeMembers(tempptr, free_data);
- retval = 0;
- } else {
- previous = memberptr;
- memberptr = memberptr->next;
- }
- }
- return retval;
-}
-
-
-
-/*
- * Locate and return the data entry associated with the given key.
- *
- * If the data entry is found, a pointer to it is returned. Otherwise,
- * NULL is returned.
- */
-
-hash_datum *
-hash_Lookup(hashtable, hashcode, compare, key)
- hash_tbl *hashtable;
- unsigned hashcode;
- hash_cmpfp compare;
- hash_datum *key;
-{
- hash_member *memberptr;
-
- memberptr = (hashtable->table)[hashcode % (hashtable->size)];
- while (memberptr) {
- if ((*compare) (key, memberptr->data)) {
- return (memberptr->data);
- }
- memberptr = memberptr->next;
- }
- return NULL;
-}
-
-
-
-/*
- * Return the next available entry in the hashtable for a linear search
- */
-
-hash_datum *
-hash_NextEntry(hashtable)
- hash_tbl *hashtable;
-{
- register unsigned bucket;
- register hash_member *memberptr;
-
- /*
- * First try to pick up where we left off.
- */
- memberptr = hashtable->member;
- if (memberptr) {
- hashtable->member = memberptr->next; /* Set up for next call */
- return memberptr->data; /* Return the data */
- }
- /*
- * We hit the end of a chain, so look through the array of buckets
- * until we find a new chain (non-empty bucket) or run out of buckets.
- */
- bucket = hashtable->bucketnum + 1;
- while ((bucket < hashtable->size) &&
- !(memberptr = (hashtable->table)[bucket])) {
- bucket++;
- }
-
- /*
- * Check to see if we ran out of buckets.
- */
- if (bucket >= hashtable->size) {
- /*
- * Reset to top of table for next call.
- */
- hashtable->bucketnum = 0;
- hashtable->member = (hashtable->table)[0];
- /*
- * But return end-of-table indication to the caller this time.
- */
- return NULL;
- }
- /*
- * Must have found a non-empty bucket.
- */
- hashtable->bucketnum = bucket;
- hashtable->member = memberptr->next; /* Set up for next call */
- return memberptr->data; /* Return the data */
-}
-
-
-
-/*
- * Return the first entry in a hash table for a linear search
- */
-
-hash_datum *
-hash_FirstEntry(hashtable)
- hash_tbl *hashtable;
-{
- hashtable->bucketnum = 0;
- hashtable->member = (hashtable->table)[0];
- return hash_NextEntry(hashtable);
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/hash.h b/usr.sbin/bootpd/hash.h
deleted file mode 100644
index 51d0a5e..0000000
--- a/usr.sbin/bootpd/hash.h
+++ /dev/null
@@ -1,158 +0,0 @@
-#ifndef HASH_H
-#define HASH_H
-/* hash.h */
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-/*
- * Generalized hash table ADT
- *
- * Provides multiple, dynamically-allocated, variable-sized hash tables on
- * various data and keys.
- *
- * This package attempts to follow some of the coding conventions suggested
- * by Bob Sidebotham and the AFS Clean Code Committee.
- */
-
-
-/*
- * The user must supply the following:
- *
- * 1. A comparison function which is declared as:
- *
- * int compare(data1, data2)
- * hash_datum *data1, *data2;
- *
- * This function must compare the desired fields of data1 and
- * data2 and return TRUE (1) if the data should be considered
- * equivalent (i.e. have the same key value) or FALSE (0)
- * otherwise. This function is called through a pointer passed to
- * the various hashtable functions (thus pointers to different
- * functions may be passed to effect different tests on different
- * hash tables).
- *
- * Internally, all the functions of this package always call the
- * compare function with the "key" parameter as the first parameter,
- * and a full data element as the second parameter. Thus, the key
- * and element arguments to functions such as hash_Lookup() may
- * actually be of different types and the programmer may provide a
- * compare function which compares the two different object types
- * as desired.
- *
- * Example:
- *
- * int compare(key, element)
- * char *key;
- * struct some_complex_structure *element;
- * {
- * return !strcmp(key, element->name);
- * }
- *
- * key = "John C. Doe"
- * element = &some_complex_structure
- * hash_Lookup(table, hashcode, compare, key);
- *
- * 2. A hash function yielding an unsigned integer value to be used
- * as the hashcode (index into the hashtable). Thus, the user
- * may hash on whatever data is desired and may use several
- * different hash functions for various different hash tables.
- * The actual hash table index will be the passed hashcode modulo
- * the hash table size.
- *
- * A generalized hash function, hash_HashFunction(), is included
- * with this package to make things a little easier. It is not
- * guarenteed to use the best hash algorithm in existence. . . .
- */
-
-
-
-/*
- * Various hash table definitions
- */
-
-
-/*
- * Define "hash_datum" as a universal data type
- */
-#ifdef __STDC__
-typedef void hash_datum;
-#else
-typedef char hash_datum;
-#endif
-
-typedef struct hash_memberstruct hash_member;
-typedef struct hash_tblstruct hash_tbl;
-typedef struct hash_tblstruct_hdr hash_tblhdr;
-
-struct hash_memberstruct {
- hash_member *next;
- hash_datum *data;
-};
-
-struct hash_tblstruct_hdr {
- unsigned size, bucketnum;
- hash_member *member;
-};
-
-struct hash_tblstruct {
- unsigned size, bucketnum;
- hash_member *member; /* Used for linear dump */
- hash_member *table[1]; /* Dynamically extended */
-};
-
-/* ANSI function prototypes or empty arg list? */
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-typedef int (*hash_cmpfp) P((hash_datum *, hash_datum *));
-typedef void (*hash_freefp) P((hash_datum *));
-
-extern hash_tbl *hash_Init P((u_int tablesize));
-
-extern void hash_Reset P((hash_tbl *tbl, hash_freefp));
-
-extern unsigned hash_HashFunction P((u_char *str, u_int len));
-
-extern int hash_Exists P((hash_tbl *, u_int code,
- hash_cmpfp, hash_datum *key));
-
-extern int hash_Insert P((hash_tbl *, u_int code,
- hash_cmpfp, hash_datum *key,
- hash_datum *element));
-
-extern int hash_Delete P((hash_tbl *, u_int code,
- hash_cmpfp, hash_datum *key,
- hash_freefp));
-
-extern hash_datum *hash_Lookup P((hash_tbl *, u_int code,
- hash_cmpfp, hash_datum *key));
-
-extern hash_datum *hash_FirstEntry P((hash_tbl *));
-
-extern hash_datum *hash_NextEntry P((hash_tbl *));
-
-#undef P
-
-#endif /* HASH_H */
diff --git a/usr.sbin/bootpd/hwaddr.h b/usr.sbin/bootpd/hwaddr.h
deleted file mode 100644
index dea7158..0000000
--- a/usr.sbin/bootpd/hwaddr.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/* hwaddr.h */
-#ifndef HWADDR_H
-#define HWADDR_H
-
-#define MAXHADDRLEN 8 /* Max hw address length in bytes */
-
-/*
- * This structure holds information about a specific network type. The
- * length of the network hardware address is stored in "hlen".
- * The string pointed to by "name" is the cononical name of the network.
- */
-struct hwinfo {
- unsigned int hlen;
- char *name;
-};
-
-extern struct hwinfo hwinfolist[];
-extern int hwinfocnt;
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern void setarp P((int, struct in_addr *, u_char *, int));
-extern char *haddrtoa P((u_char *, int));
-extern void haddr_conv802 P((u_char *, u_char *, int));
-
-#undef P
-
-/*
- * Return the length in bytes of a hardware address of the given type.
- * Return the canonical name of the network of the given type.
- */
-#define haddrlength(type) ((hwinfolist[(int) (type)]).hlen)
-#define netname(type) ((hwinfolist[(int) (type)]).name)
-
-#endif /* HWADDR_H */
diff --git a/usr.sbin/bootpd/lookup.c b/usr.sbin/bootpd/lookup.c
deleted file mode 100644
index 2a30a59..0000000
--- a/usr.sbin/bootpd/lookup.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * lookup.c - Lookup IP address, HW address, netmask
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-
-#ifdef ETC_ETHERS
-#include <netinet/if_ether.h>
-extern int ether_hostton();
-#endif
-
-#include <netdb.h>
-#include <syslog.h>
-
-#ifndef USE_BFUNCS
-#include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#endif
-
-#include "bootp.h"
-#include "lookup.h"
-#include "report.h"
-
-/*
- * Lookup an Ethernet address and return it.
- * Return NULL if addr not found.
- */
-u_char *
-lookup_hwa(hostname, htype)
- char *hostname;
- int htype;
-{
- switch (htype) {
-
- /* XXX - How is this done on other systems? -gwr */
-#ifdef ETC_ETHERS
- case HTYPE_ETHERNET:
- case HTYPE_IEEE802:
- {
- static struct ether_addr ea;
- /* This does a lookup in /etc/ethers */
- if (ether_hostton(hostname, &ea)) {
- report(LOG_ERR, "no HW addr for host \"%s\"",
- hostname);
- return (u_char *) 0;
- }
- return (u_char *) & ea;
- }
-#endif /* ETC_ETHERS */
-
- default:
- report(LOG_ERR, "no lookup for HW addr type %d", htype);
- } /* switch */
-
- /* If the system can't do it, just return an error. */
- return (u_char *) 0;
-}
-
-
-/*
- * Lookup an IP address.
- * Return non-zero on failure.
- */
-int
-lookup_ipa(hostname, result)
- char *hostname;
- u_int32 *result;
-{
- struct hostent *hp;
- hp = gethostbyname(hostname);
- if (!hp)
- return -1;
- bcopy(hp->h_addr, result, sizeof(*result));
- return 0;
-}
-
-
-/*
- * Lookup a netmask
- * Return non-zero on failure.
- *
- * XXX - This is OK as a default, but to really make this automatic,
- * we would need to get the subnet mask from the ether interface.
- * If this is wrong, specify the correct value in the bootptab.
- */
-int
-lookup_netmask(addr, result)
- u_int32 addr; /* both in network order */
- u_int32 *result;
-{
- int32 m, a;
-
- a = ntohl(addr);
- m = 0;
-
- if (IN_CLASSA(a))
- m = IN_CLASSA_NET;
-
- if (IN_CLASSB(a))
- m = IN_CLASSB_NET;
-
- if (IN_CLASSC(a))
- m = IN_CLASSC_NET;
-
- if (!m)
- return -1;
- *result = htonl(m);
- return 0;
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/lookup.h b/usr.sbin/bootpd/lookup.h
deleted file mode 100644
index 04805d8..0000000
--- a/usr.sbin/bootpd/lookup.h
+++ /dev/null
@@ -1,15 +0,0 @@
-/* lookup.h */
-
-#include "bptypes.h" /* for int32, u_int32 */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern u_char *lookup_hwa P((char *hostname, int htype));
-extern int lookup_ipa P((char *hostname, u_int32 *addr));
-extern int lookup_netmask P((u_int32 addr, u_int32 *mask));
-
-#undef P
diff --git a/usr.sbin/bootpd/patchlevel.h b/usr.sbin/bootpd/patchlevel.h
deleted file mode 100644
index 782959e..0000000
--- a/usr.sbin/bootpd/patchlevel.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* patchlevel.h */
-#define VERSION "2.4"
-#define PATCHLEVEL 1
diff --git a/usr.sbin/bootpd/print-bootp.c b/usr.sbin/bootpd/print-bootp.c
deleted file mode 100644
index 1919e7f..0000000
--- a/usr.sbin/bootpd/print-bootp.c
+++ /dev/null
@@ -1,493 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Format and print bootp packets.
- *
- * This file was copied from tcpdump-2.1.1 and modified.
- * There is an e-mail list for tcpdump: <tcpdump@ee.lbl.gov>
- */
-#ifndef lint
-static char rcsid[] = "$Id: print-bootp.c,v 1.2 1994/08/22 22:15:01 gwr Exp $";
-/* 93/10/10 <gwr@mc.com> New data-driven option print routine. */
-#endif
-
-#include <stdio.h>
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <string.h>
-#include <ctype.h>
-
-#include "bootp.h"
-#include "bootptest.h"
-
-/* These decode the vendor data. */
-static void rfc1048_print();
-static void cmu_print();
-static void other_print();
-static void dump_hex();
-
-/*
- * Print bootp requests
- */
-void
-bootp_print(bp, length, sport, dport)
- struct bootp *bp;
- int length;
- u_short sport, dport;
-{
- static char tstr[] = " [|bootp]";
- static unsigned char vm_cmu[4] = VM_CMU;
- static unsigned char vm_rfc1048[4] = VM_RFC1048;
- u_char *ep;
- int vdlen;
-
-#define TCHECK(var, l) if ((u_char *)&(var) > ep - l) goto trunc
-
- /* Note funny sized packets */
- if (length != sizeof(struct bootp))
- (void) printf(" [len=%d]", length);
-
- /* 'ep' points to the end of avaible data. */
- ep = (u_char *) snapend;
-
- switch (bp->bp_op) {
-
- case BOOTREQUEST:
- /* Usually, a request goes from a client to a server */
- if (sport != IPPORT_BOOTPC || dport != IPPORT_BOOTPS)
- printf(" (request)");
- break;
-
- case BOOTREPLY:
- /* Usually, a reply goes from a server to a client */
- if (sport != IPPORT_BOOTPS || dport != IPPORT_BOOTPC)
- printf(" (reply)");
- break;
-
- default:
- printf(" bootp-#%d", bp->bp_op);
- }
-
- /* The usual hardware address type is 1 (10Mb Ethernet) */
- if (bp->bp_htype != 1)
- printf(" htype:%d", bp->bp_htype);
-
- /* The usual length for 10Mb Ethernet address is 6 bytes */
- if (bp->bp_hlen != 6)
- printf(" hlen:%d", bp->bp_hlen);
-
- /* Client's Hardware address */
- if (bp->bp_hlen) {
- register struct ether_header *eh;
- register char *e;
-
- TCHECK(bp->bp_chaddr[0], 6);
- eh = (struct ether_header *) packetp;
- if (bp->bp_op == BOOTREQUEST)
- e = (char *) ESRC(eh);
- else if (bp->bp_op == BOOTREPLY)
- e = (char *) EDST(eh);
- else
- e = 0;
- if (e == 0 || bcmp((char *) bp->bp_chaddr, e, 6))
- dump_hex(bp->bp_chaddr, bp->bp_hlen);
- }
- /* Only print interesting fields */
- if (bp->bp_hops)
- printf(" hops:%d", bp->bp_hops);
-
- if (bp->bp_xid)
- printf(" xid:%d", ntohl(bp->bp_xid));
-
- if (bp->bp_secs)
- printf(" secs:%d", ntohs(bp->bp_secs));
-
- /* Client's ip address */
- TCHECK(bp->bp_ciaddr, sizeof(bp->bp_ciaddr));
- if (bp->bp_ciaddr.s_addr)
- printf(" C:%s", ipaddr_string(&bp->bp_ciaddr));
-
- /* 'your' ip address (bootp client) */
- TCHECK(bp->bp_yiaddr, sizeof(bp->bp_yiaddr));
- if (bp->bp_yiaddr.s_addr)
- printf(" Y:%s", ipaddr_string(&bp->bp_yiaddr));
-
- /* Server's ip address */
- TCHECK(bp->bp_siaddr, sizeof(bp->bp_siaddr));
- if (bp->bp_siaddr.s_addr)
- printf(" S:%s", ipaddr_string(&bp->bp_siaddr));
-
- /* Gateway's ip address */
- TCHECK(bp->bp_giaddr, sizeof(bp->bp_giaddr));
- if (bp->bp_giaddr.s_addr)
- printf(" G:%s", ipaddr_string(&bp->bp_giaddr));
-
- TCHECK(bp->bp_sname[0], sizeof(bp->bp_sname));
- if (*bp->bp_sname) {
- printf(" sname:");
- if (printfn(bp->bp_sname, ep)) {
- fputs(tstr + 1, stdout);
- return;
- }
- }
- TCHECK(bp->bp_file[0], sizeof(bp->bp_file));
- if (*bp->bp_file) {
- printf(" file:");
- if (printfn(bp->bp_file, ep)) {
- fputs(tstr + 1, stdout);
- return;
- }
- }
- /* Don't try to decode the vendor buffer unless we're verbose */
- if (vflag <= 0)
- return;
-
- vdlen = sizeof(bp->bp_vend);
- /* Vendor data can extend to the end of the packet. */
- if (vdlen < (ep - bp->bp_vend))
- vdlen = (ep - bp->bp_vend);
-
- TCHECK(bp->bp_vend[0], vdlen);
- printf(" vend");
- if (!bcmp(bp->bp_vend, vm_rfc1048, sizeof(u_int32)))
- rfc1048_print(bp->bp_vend, vdlen);
- else if (!bcmp(bp->bp_vend, vm_cmu, sizeof(u_int32)))
- cmu_print(bp->bp_vend, vdlen);
- else
- other_print(bp->bp_vend, vdlen);
-
- return;
- trunc:
- fputs(tstr, stdout);
-#undef TCHECK
-}
-
-/*
- * Option description data follows.
- * These are decribed in: RFC-1048, RFC-1395, RFC-1497, RFC-1533
- *
- * The first char of each option string encodes the data format:
- * ?: unknown
- * a: ASCII
- * b: byte (8-bit)
- * i: inet address
- * l: int32
- * s: short (16-bit)
- */
-char *
-rfc1048_opts[] = {
- /* Originally from RFC-1048: */
- "?PAD", /* 0: Padding - special, no data. */
- "iSM", /* 1: subnet mask (RFC950)*/
- "lTZ", /* 2: time offset, seconds from UTC */
- "iGW", /* 3: gateways (or routers) */
- "iTS", /* 4: time servers (RFC868) */
- "iINS", /* 5: IEN name servers (IEN116) */
- "iDNS", /* 6: domain name servers (RFC1035)(1034?) */
- "iLOG", /* 7: MIT log servers */
- "iCS", /* 8: cookie servers (RFC865) */
- "iLPR", /* 9: lpr server (RFC1179) */
- "iIPS", /* 10: impress servers (Imagen) */
- "iRLP", /* 11: resource location servers (RFC887) */
- "aHN", /* 12: host name (ASCII) */
- "sBFS", /* 13: boot file size (in 512 byte blocks) */
-
- /* Added by RFC-1395: */
- "aDUMP", /* 14: Merit Dump File */
- "aDNAM", /* 15: Domain Name (for DNS) */
- "iSWAP", /* 16: Swap Server */
- "aROOT", /* 17: Root Path */
-
- /* Added by RFC-1497: */
- "aEXTF", /* 18: Extensions Path (more options) */
-
- /* Added by RFC-1533: (many, many options...) */
-#if 1 /* These might not be worth recognizing by name. */
-
- /* IP Layer Parameters, per-host (RFC-1533, sect. 4) */
- "bIP-forward", /* 19: IP Forwarding flag */
- "bIP-srcroute", /* 20: IP Source Routing Enable flag */
- "iIP-filters", /* 21: IP Policy Filter (addr pairs) */
- "sIP-maxudp", /* 22: IP Max-UDP reassembly size */
- "bIP-ttlive", /* 23: IP Time to Live */
- "lIP-pmtuage", /* 24: IP Path MTU aging timeout */
- "sIP-pmtutab", /* 25: IP Path MTU plateau table */
-
- /* IP parameters, per-interface (RFC-1533, sect. 5) */
- "sIP-mtu-sz", /* 26: IP MTU size */
- "bIP-mtu-sl", /* 27: IP MTU all subnets local */
- "bIP-bcast1", /* 28: IP Broadcast Addr ones flag */
- "bIP-mask-d", /* 29: IP do mask discovery */
- "bIP-mask-s", /* 30: IP do mask supplier */
- "bIP-rt-dsc", /* 31: IP do router discovery */
- "iIP-rt-sa", /* 32: IP router solicitation addr */
- "iIP-routes", /* 33: IP static routes (dst,router) */
-
- /* Link Layer parameters, per-interface (RFC-1533, sect. 6) */
- "bLL-trailer", /* 34: do tralier encapsulation */
- "lLL-arp-tmo", /* 35: ARP cache timeout */
- "bLL-ether2", /* 36: Ethernet version 2 (IEEE 802.3) */
-
- /* TCP parameters (RFC-1533, sect. 7) */
- "bTCP-def-ttl", /* 37: default time to live */
- "lTCP-KA-tmo", /* 38: keepalive time interval */
- "bTCP-KA-junk", /* 39: keepalive sends extra junk */
-
- /* Application and Service Parameters (RFC-1533, sect. 8) */
- "aNISDOM", /* 40: NIS Domain (Sun YP) */
- "iNISSRV", /* 41: NIS Servers */
- "iNTPSRV", /* 42: NTP (time) Servers (RFC 1129) */
- "?VSINFO", /* 43: Vendor Specific Info (encapsulated) */
- "iNBiosNS", /* 44: NetBIOS Name Server (RFC-1001,1..2) */
- "iNBiosDD", /* 45: NetBIOS Datagram Dist. Server. */
- "bNBiosNT", /* 46: NetBIOS Note Type */
- "?NBiosS", /* 47: NetBIOS Scope */
- "iXW-FS", /* 48: X Window System Font Servers */
- "iXW-DM", /* 49: X Window System Display Managers */
-
- /* DHCP extensions (RFC-1533, sect. 9) */
-#endif
-};
-#define KNOWN_OPTIONS (sizeof(rfc1048_opts) / sizeof(rfc1048_opts[0]))
-
-static void print_string();
-
-static void
-rfc1048_print(bp, length)
- register u_char *bp;
- int length;
-{
- u_char tag;
- u_char *ep;
- register int len, j;
- u_int32 ul;
- u_short us;
- struct in_addr ia;
- char *optstr;
-
- printf("-rfc1395");
-
- /* Step over magic cookie */
- bp += sizeof(int32);
- /* Setup end pointer */
- ep = bp + length;
- while (bp < ep) {
- tag = *bp++;
- /* Check for tags with no data first. */
- if (tag == TAG_PAD)
- continue;
- if (tag == TAG_END)
- return;
- if (tag < KNOWN_OPTIONS) {
- optstr = rfc1048_opts[tag];
- printf(" %s:", optstr + 1);
- } else {
- printf(" T%d:", tag);
- optstr = "?";
- }
- /* Now scan the length byte. */
- len = *bp++;
- if (bp + len > ep) {
- /* truncated option */
- printf(" |(%d>%d)", len, ep - bp);
- return;
- }
- /* Print the option value(s). */
- switch (optstr[0]) {
-
- case 'a': /* ASCII string */
- printfn(bp, bp + len);
- bp += len;
- len = 0;
- break;
-
- case 's': /* Word formats */
- while (len >= 2) {
- bcopy((char *) bp, (char *) &us, 2);
- printf("%d", ntohs(us));
- bp += 2;
- len -= 2;
- if (len) printf(",");
- }
- if (len) printf("(junk=%d)", len);
- break;
-
- case 'l': /* Long words */
- while (len >= 4) {
- bcopy((char *) bp, (char *) &ul, 4);
- printf("%d", ntohl(ul));
- bp += 4;
- len -= 4;
- if (len) printf(",");
- }
- if (len) printf("(junk=%d)", len);
- break;
-
- case 'i': /* INET addresses */
- while (len >= 4) {
- bcopy((char *) bp, (char *) &ia, 4);
- printf("%s", ipaddr_string(&ia));
- bp += 4;
- len -= 4;
- if (len) printf(",");
- }
- if (len) printf("(junk=%d)", len);
- break;
-
- case 'b':
- default:
- break;
-
- } /* switch */
-
- /* Print as characters, if appropriate. */
- if (len) {
- dump_hex(bp, len);
- if (isascii(*bp) && isprint(*bp)) {
- printf("(");
- printfn(bp, bp + len);
- printf(")");
- }
- bp += len;
- len = 0;
- }
- } /* while bp < ep */
-}
-
-static void
-cmu_print(bp, length)
- register u_char *bp;
- int length;
-{
- struct cmu_vend *v;
- u_char *ep;
-
- printf("-cmu");
-
- v = (struct cmu_vend *) bp;
- if (length < sizeof(*v)) {
- printf(" |L=%d", length);
- return;
- }
- /* Setup end pointer */
- ep = bp + length;
-
- /* Subnet mask */
- if (v->v_flags & VF_SMASK) {
- printf(" SM:%s", ipaddr_string(&v->v_smask));
- }
- /* Default gateway */
- if (v->v_dgate.s_addr)
- printf(" GW:%s", ipaddr_string(&v->v_dgate));
-
- /* Domain name servers */
- if (v->v_dns1.s_addr)
- printf(" DNS1:%s", ipaddr_string(&v->v_dns1));
- if (v->v_dns2.s_addr)
- printf(" DNS2:%s", ipaddr_string(&v->v_dns2));
-
- /* IEN-116 name servers */
- if (v->v_ins1.s_addr)
- printf(" INS1:%s", ipaddr_string(&v->v_ins1));
- if (v->v_ins2.s_addr)
- printf(" INS2:%s", ipaddr_string(&v->v_ins2));
-
- /* Time servers */
- if (v->v_ts1.s_addr)
- printf(" TS1:%s", ipaddr_string(&v->v_ts1));
- if (v->v_ts2.s_addr)
- printf(" TS2:%s", ipaddr_string(&v->v_ts2));
-
-}
-
-
-/*
- * Print out arbitrary, unknown vendor data.
- */
-
-static void
-other_print(bp, length)
- register u_char *bp;
- int length;
-{
- u_char *ep; /* end pointer */
- u_char *zp; /* points one past last non-zero byte */
- register int i, j;
-
- /* Setup end pointer */
- ep = bp + length;
-
- /* Find the last non-zero byte. */
- for (zp = ep; zp > bp; zp--) {
- if (zp[-1] != 0)
- break;
- }
-
- /* Print the all-zero case in a compact representation. */
- if (zp == bp) {
- printf("-all-zero");
- return;
- }
- printf("-unknown");
-
- /* Are there enough trailing zeros to make "00..." worthwhile? */
- if (zp + 2 > ep)
- zp = ep; /* print them all normally */
-
- /* Now just print all the non-zero data. */
- while (bp < zp) {
- printf(".%02X", *bp);
- bp++;
- }
-
- if (zp < ep)
- printf(".00...");
-
- return;
-}
-
-static void
-dump_hex(bp, len)
- u_char *bp;
- int len;
-{
- while (len > 0) {
- printf("%02X", *bp);
- bp++;
- len--;
- if (len) printf(".");
- }
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/readfile.c b/usr.sbin/bootpd/readfile.c
deleted file mode 100644
index 1f70b45..0000000
--- a/usr.sbin/bootpd/readfile.c
+++ /dev/null
@@ -1,2097 +0,0 @@
-/************************************************************************
- Copyright 1988, 1991 by Carnegie Mellon University
-
- All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its
-documentation for any purpose and without fee is hereby granted, provided
-that the above copyright notice appear in all copies and that both that
-copyright notice and this permission notice appear in supporting
-documentation, and that the name of Carnegie Mellon University not be used
-in advertising or publicity pertaining to distribution of the software
-without specific, written prior permission.
-
-CARNEGIE MELLON UNIVERSITY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
-SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS.
-IN NO EVENT SHALL CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
-DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
-PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
-ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-************************************************************************/
-
-#ifndef lint
-static char rcsid[] = "$Id: readfile.c,v 1.2 1994/08/22 22:15:04 gwr Exp $";
-#endif
-
-
-/*
- * bootpd configuration file reading code.
- *
- * The routines in this file deal with reading, interpreting, and storing
- * the information found in the bootpd configuration file (usually
- * /etc/bootptab).
- */
-
-
-#include <sys/errno.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/file.h>
-#include <sys/time.h>
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-#include <assert.h>
-#include <syslog.h>
-
-#ifndef USE_BFUNCS
-#include <memory.h>
-/* Yes, memcpy is OK here (no overlapped copies). */
-#define bcopy(a,b,c) memcpy(b,a,c)
-#define bzero(p,l) memset(p,0,l)
-#define bcmp(a,b,c) memcmp(a,b,c)
-#endif
-
-#include "bootp.h"
-#include "hash.h"
-#include "hwaddr.h"
-#include "lookup.h"
-#include "readfile.h"
-#include "report.h"
-#include "tzone.h"
-#include "bootpd.h"
-
-#define HASHTABLESIZE 257 /* Hash table size (prime) */
-
-/* Non-standard hardware address type (see bootp.h) */
-#define HTYPE_DIRECT 0
-
-/* Error codes returned by eval_symbol: */
-#define SUCCESS 0
-#define E_END_OF_ENTRY (-1)
-#define E_SYNTAX_ERROR (-2)
-#define E_UNKNOWN_SYMBOL (-3)
-#define E_BAD_IPADDR (-4)
-#define E_BAD_HWADDR (-5)
-#define E_BAD_LONGWORD (-6)
-#define E_BAD_HWATYPE (-7)
-#define E_BAD_PATHNAME (-8)
-#define E_BAD_VALUE (-9)
-
-/* Tag idendities. */
-#define SYM_NULL 0
-#define SYM_BOOTFILE 1
-#define SYM_COOKIE_SERVER 2
-#define SYM_DOMAIN_SERVER 3
-#define SYM_GATEWAY 4
-#define SYM_HWADDR 5
-#define SYM_HOMEDIR 6
-#define SYM_HTYPE 7
-#define SYM_IMPRESS_SERVER 8
-#define SYM_IPADDR 9
-#define SYM_LOG_SERVER 10
-#define SYM_LPR_SERVER 11
-#define SYM_NAME_SERVER 12
-#define SYM_RLP_SERVER 13
-#define SYM_SUBNET_MASK 14
-#define SYM_TIME_OFFSET 15
-#define SYM_TIME_SERVER 16
-#define SYM_VENDOR_MAGIC 17
-#define SYM_SIMILAR_ENTRY 18
-#define SYM_NAME_SWITCH 19
-#define SYM_BOOTSIZE 20
-#define SYM_BOOT_SERVER 22
-#define SYM_TFTPDIR 23
-#define SYM_DUMP_FILE 24
-#define SYM_DOMAIN_NAME 25
-#define SYM_SWAP_SERVER 26
-#define SYM_ROOT_PATH 27
-#define SYM_EXTEN_FILE 28
-#define SYM_REPLY_ADDR 29
-#define SYM_NIS_DOMAIN 30 /* RFC 1533 */
-#define SYM_NIS_SERVER 31 /* RFC 1533 */
-#define SYM_NTP_SERVER 32 /* RFC 1533 */
-#define SYM_EXEC_FILE 33 /* YORK_EX_OPTION */
-#define SYM_MSG_SIZE 34
-#define SYM_MIN_WAIT 35
-/* XXX - Add new tags here */
-
-#define OP_ADDITION 1 /* Operations on tags */
-#define OP_DELETION 2
-#define OP_BOOLEAN 3
-
-#define MAXINADDRS 16 /* Max size of an IP address list */
-#define MAXBUFLEN 256 /* Max temp buffer space */
-#define MAXENTRYLEN 2048 /* Max size of an entire entry */
-
-
-
-/*
- * Structure used to map a configuration-file symbol (such as "ds") to a
- * unique integer.
- */
-
-struct symbolmap {
- char *symbol;
- int symbolcode;
-};
-
-
-struct htypename {
- char *name;
- byte htype;
-};
-
-
-PRIVATE int nhosts; /* Number of hosts (/w hw or IP address) */
-PRIVATE int nentries; /* Total number of entries */
-PRIVATE int32 modtime = 0; /* Last modification time of bootptab */
-PRIVATE char *current_hostname; /* Name of the current entry. */
-PRIVATE char current_tagname[8];
-
-/*
- * List of symbolic names used in the bootptab file. The order and actual
- * values of the symbol codes (SYM_. . .) are unimportant, but they must
- * all be unique.
- */
-
-PRIVATE struct symbolmap symbol_list[] = {
- {"bf", SYM_BOOTFILE},
- {"bs", SYM_BOOTSIZE},
- {"cs", SYM_COOKIE_SERVER},
- {"df", SYM_DUMP_FILE},
- {"dn", SYM_DOMAIN_NAME},
- {"ds", SYM_DOMAIN_SERVER},
- {"ef", SYM_EXTEN_FILE},
- {"ex", SYM_EXEC_FILE}, /* YORK_EX_OPTION */
- {"gw", SYM_GATEWAY},
- {"ha", SYM_HWADDR},
- {"hd", SYM_HOMEDIR},
- {"hn", SYM_NAME_SWITCH},
- {"ht", SYM_HTYPE},
- {"im", SYM_IMPRESS_SERVER},
- {"ip", SYM_IPADDR},
- {"lg", SYM_LOG_SERVER},
- {"lp", SYM_LPR_SERVER},
- {"ms", SYM_MSG_SIZE},
- {"mw", SYM_MIN_WAIT},
- {"ns", SYM_NAME_SERVER},
- {"nt", SYM_NTP_SERVER},
- {"ra", SYM_REPLY_ADDR},
- {"rl", SYM_RLP_SERVER},
- {"rp", SYM_ROOT_PATH},
- {"sa", SYM_BOOT_SERVER},
- {"sm", SYM_SUBNET_MASK},
- {"sw", SYM_SWAP_SERVER},
- {"tc", SYM_SIMILAR_ENTRY},
- {"td", SYM_TFTPDIR},
- {"to", SYM_TIME_OFFSET},
- {"ts", SYM_TIME_SERVER},
- {"vm", SYM_VENDOR_MAGIC},
- {"yd", SYM_NIS_DOMAIN},
- {"ys", SYM_NIS_SERVER},
- /* XXX - Add new tags here */
-};
-
-
-/*
- * List of symbolic names for hardware types. Name translates into
- * hardware type code listed with it. Names must begin with a letter
- * and must be all lowercase. This is searched linearly, so put
- * commonly-used entries near the beginning.
- */
-
-PRIVATE struct htypename htnamemap[] = {
- {"ethernet", HTYPE_ETHERNET},
- {"ethernet3", HTYPE_EXP_ETHERNET},
- {"ether", HTYPE_ETHERNET},
- {"ether3", HTYPE_EXP_ETHERNET},
- {"ieee802", HTYPE_IEEE802},
- {"tr", HTYPE_IEEE802},
- {"token-ring", HTYPE_IEEE802},
- {"pronet", HTYPE_PRONET},
- {"chaos", HTYPE_CHAOS},
- {"arcnet", HTYPE_ARCNET},
- {"ax.25", HTYPE_AX25},
- {"direct", HTYPE_DIRECT},
- {"serial", HTYPE_DIRECT},
- {"slip", HTYPE_DIRECT},
- {"ppp", HTYPE_DIRECT}
-};
-
-
-
-/*
- * Externals and forward declarations.
- */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern boolean iplookcmp();
-boolean nmcmp P((hash_datum *, hash_datum *));
-
-PRIVATE void
- adjust P((char **));
-PRIVATE void
- del_string P((struct shared_string *));
-PRIVATE void
- del_bindata P((struct shared_bindata *));
-PRIVATE void
- del_iplist P((struct in_addr_list *));
-PRIVATE void
- eat_whitespace P((char **));
-PRIVATE int
- eval_symbol P((char **, struct host *));
-PRIVATE void
- fill_defaults P((struct host *, char **));
-PRIVATE void
- free_host P((hash_datum *));
-PRIVATE struct in_addr_list *
- get_addresses P((char **));
-PRIVATE struct shared_string *
- get_shared_string P((char **));
-PRIVATE char *
- get_string P((char **, char *, u_int *));
-PRIVATE u_int32
- get_u_long P((char **));
-PRIVATE boolean
- goodname P((char *));
-PRIVATE boolean
- hwinscmp P((hash_datum *, hash_datum *));
-PRIVATE int
- interp_byte P((char **, byte *));
-PRIVATE void
- makelower P((char *));
-PRIVATE boolean
- nullcmp P((hash_datum *, hash_datum *));
-PRIVATE int
- process_entry P((struct host *, char *));
-PRIVATE int
- process_generic P((char **, struct shared_bindata **, u_int));
-PRIVATE byte *
- prs_haddr P((char **, u_int));
-PRIVATE int
- prs_inetaddr P((char **, u_int32 *));
-PRIVATE void
- read_entry P((FILE *, char *, u_int *));
-PRIVATE char *
- smalloc P((u_int));
-
-#undef P
-
-
-/*
- * Vendor magic cookies for CMU and RFC1048
- */
-u_char vm_cmu[4] = VM_CMU;
-u_char vm_rfc1048[4] = VM_RFC1048;
-
-/*
- * Main hash tables
- */
-hash_tbl *hwhashtable;
-hash_tbl *iphashtable;
-hash_tbl *nmhashtable;
-
-/*
- * Allocate hash tables for hardware address, ip address, and hostname
- * (shared by bootpd and bootpef)
- */
-void
-rdtab_init()
-{
- hwhashtable = hash_Init(HASHTABLESIZE);
- iphashtable = hash_Init(HASHTABLESIZE);
- nmhashtable = hash_Init(HASHTABLESIZE);
- if (!(hwhashtable && iphashtable && nmhashtable)) {
- report(LOG_ERR, "Unable to allocate hash tables.");
- exit(1);
- }
-}
-
-
-/*
- * Read bootptab database file. Avoid rereading the file if the
- * write date hasn't changed since the last time we read it.
- */
-
-void
-readtab(force)
- int force;
-{
- struct host *hp;
- FILE *fp;
- struct stat st;
- unsigned hashcode, buflen;
- static char buffer[MAXENTRYLEN];
-
- /*
- * Check the last modification time.
- */
- if (stat(bootptab, &st) < 0) {
- report(LOG_ERR, "stat on \"%s\": %s",
- bootptab, get_errmsg());
- return;
- }
-#ifdef DEBUG
- if (debug > 3) {
- char timestr[28];
- strcpy(timestr, ctime(&(st.st_mtime)));
- /* zap the newline */
- timestr[24] = '\0';
- report(LOG_INFO, "bootptab mtime: %s",
- timestr);
- }
-#endif
- if ((force == 0) &&
- (st.st_mtime == modtime) &&
- st.st_nlink) {
- /*
- * hasn't been modified or deleted yet.
- */
- return;
- }
- if (debug)
- report(LOG_INFO, "reading %s\"%s\"",
- (modtime != 0L) ? "new " : "",
- bootptab);
-
- /*
- * Open bootptab file.
- */
- if ((fp = fopen(bootptab, "r")) == NULL) {
- report(LOG_ERR, "error opening \"%s\": %s", bootptab, get_errmsg());
- return;
- }
- /*
- * Record file modification time.
- */
- if (fstat(fileno(fp), &st) < 0) {
- report(LOG_ERR, "fstat: %s", get_errmsg());
- fclose(fp);
- return;
- }
- modtime = st.st_mtime;
-
- /*
- * Entirely erase all hash tables.
- */
- hash_Reset(hwhashtable, free_host);
- hash_Reset(iphashtable, free_host);
- hash_Reset(nmhashtable, free_host);
-
- nhosts = 0;
- nentries = 0;
- while (TRUE) {
- buflen = sizeof(buffer);
- read_entry(fp, buffer, &buflen);
- if (buflen == 0) { /* More entries? */
- break;
- }
- hp = (struct host *) smalloc(sizeof(struct host));
- bzero((char *) hp, sizeof(*hp));
- /* the link count it zero */
-
- /*
- * Get individual info
- */
- if (process_entry(hp, buffer) < 0) {
- hp->linkcount = 1;
- free_host((hash_datum *) hp);
- continue;
- }
- /*
- * If this is not a dummy entry, and the IP or HW
- * address is not yet set, try to get them here.
- * Dummy entries have . as first char of name.
- */
- if (goodname(hp->hostname->string)) {
- char *hn = hp->hostname->string;
- u_int32 value;
- if (hp->flags.iaddr == 0) {
- if (lookup_ipa(hn, &value)) {
- report(LOG_ERR, "can not get IP addr for %s", hn);
- report(LOG_ERR, "(dummy names should start with '.')");
- } else {
- hp->iaddr.s_addr = value;
- hp->flags.iaddr = TRUE;
- }
- }
- /* Set default subnet mask. */
- if (hp->flags.subnet_mask == 0) {
- if (lookup_netmask(hp->iaddr.s_addr, &value)) {
- report(LOG_ERR, "can not get netmask for %s", hn);
- } else {
- hp->subnet_mask.s_addr = value;
- hp->flags.subnet_mask = TRUE;
- }
- }
- }
- if (hp->flags.iaddr) {
- nhosts++;
- }
- /* Register by HW addr if known. */
- if (hp->flags.htype && hp->flags.haddr) {
- /* We will either insert it or free it. */
- hp->linkcount++;
- hashcode = hash_HashFunction(hp->haddr, haddrlength(hp->htype));
- if (hash_Insert(hwhashtable, hashcode, hwinscmp, hp, hp) < 0) {
- report(LOG_NOTICE, "duplicate %s address: %s",
- netname(hp->htype),
- haddrtoa(hp->haddr, hp->htype));
- free_host((hash_datum *) hp);
- continue;
- }
- }
- /* Register by IP addr if known. */
- if (hp->flags.iaddr) {
- hashcode = hash_HashFunction((u_char *) & (hp->iaddr.s_addr), 4);
- if (hash_Insert(iphashtable, hashcode, nullcmp, hp, hp) < 0) {
- report(LOG_ERR,
- "hash_Insert() failed on IP address insertion");
- } else {
- /* Just inserted the host struct in a new hash list. */
- hp->linkcount++;
- }
- }
- /* Register by Name (always known) */
- hashcode = hash_HashFunction((u_char *) hp->hostname->string,
- strlen(hp->hostname->string));
- if (hash_Insert(nmhashtable, hashcode, nullcmp,
- hp->hostname->string, hp) < 0) {
- report(LOG_ERR,
- "hash_Insert() failed on insertion of hostname: \"%s\"",
- hp->hostname->string);
- } else {
- /* Just inserted the host struct in a new hash list. */
- hp->linkcount++;
- }
-
- nentries++;
- }
-
- fclose(fp);
- if (debug)
- report(LOG_INFO, "read %d entries (%d hosts) from \"%s\"",
- nentries, nhosts, bootptab);
- return;
-}
-
-
-
-/*
- * Read an entire host entry from the file pointed to by "fp" and insert it
- * into the memory pointed to by "buffer". Leading whitespace and comments
- * starting with "#" are ignored (removed). Backslashes (\) always quote
- * the next character except that newlines preceeded by a backslash cause
- * line-continuation onto the next line. The entry is terminated by a
- * newline character which is not preceeded by a backslash. Sequences
- * surrounded by double quotes are taken literally (including newlines, but
- * not backslashes).
- *
- * The "bufsiz" parameter points to an unsigned int which specifies the
- * maximum permitted buffer size. Upon return, this value will be replaced
- * with the actual length of the entry (not including the null terminator).
- *
- * This code is a little scary. . . . I don't like using gotos in C
- * either, but I first wrote this as an FSM diagram and gotos seemed like
- * the easiest way to implement it. Maybe later I'll clean it up.
- */
-
-PRIVATE void
-read_entry(fp, buffer, bufsiz)
- FILE *fp;
- char *buffer;
- unsigned *bufsiz;
-{
- int c, length;
-
- length = 0;
-
- /*
- * Eat whitespace, blank lines, and comment lines.
- */
- top:
- c = fgetc(fp);
- if (c < 0) {
- goto done; /* Exit if end-of-file */
- }
- if (isspace(c)) {
- goto top; /* Skip over whitespace */
- }
- if (c == '#') {
- while (TRUE) { /* Eat comments after # */
- c = fgetc(fp);
- if (c < 0) {
- goto done; /* Exit if end-of-file */
- }
- if (c == '\n') {
- goto top; /* Try to read the next line */
- }
- }
- }
- ungetc(c, fp); /* Other character, push it back to reprocess it */
-
-
- /*
- * Now we're actually reading a data entry. Get each character and
- * assemble it into the data buffer, processing special characters like
- * double quotes (") and backslashes (\).
- */
-
- mainloop:
- c = fgetc(fp);
- switch (c) {
- case EOF:
- case '\n':
- goto done; /* Exit on EOF or newline */
- case '\\':
- c = fgetc(fp); /* Backslash, read a new character */
- if (c < 0) {
- goto done; /* Exit on EOF */
- }
- *buffer++ = c; /* Store the literal character */
- length++;
- if (length < *bufsiz - 1) {
- goto mainloop;
- } else {
- goto done;
- }
- case '"':
- *buffer++ = '"'; /* Store double-quote */
- length++;
- if (length >= *bufsiz - 1) {
- goto done;
- }
- while (TRUE) { /* Special quote processing loop */
- c = fgetc(fp);
- switch (c) {
- case EOF:
- goto done; /* Exit on EOF . . . */
- case '"':
- *buffer++ = '"';/* Store matching quote */
- length++;
- if (length < *bufsiz - 1) {
- goto mainloop; /* And continue main loop */
- } else {
- goto done;
- }
- case '\\':
- if ((c = fgetc(fp)) < 0) { /* Backslash */
- goto done; /* EOF. . . .*/
- } /* else fall through */
- default:
- *buffer++ = c; /* Other character, store it */
- length++;
- if (length >= *bufsiz - 1) {
- goto done;
- }
- }
- }
- case ':':
- *buffer++ = c; /* Store colons */
- length++;
- if (length >= *bufsiz - 1) {
- goto done;
- }
- do { /* But remove whitespace after them */
- c = fgetc(fp);
- if ((c < 0) || (c == '\n')) {
- goto done;
- }
- } while (isspace(c)); /* Skip whitespace */
-
- if (c == '\\') { /* Backslash quotes next character */
- c = fgetc(fp);
- if (c < 0) {
- goto done;
- }
- if (c == '\n') {
- goto top; /* Backslash-newline continuation */
- }
- }
- /* fall through if "other" character */
- default:
- *buffer++ = c; /* Store other characters */
- length++;
- if (length >= *bufsiz - 1) {
- goto done;
- }
- }
- goto mainloop; /* Keep going */
-
- done:
- *buffer = '\0'; /* Terminate string */
- *bufsiz = length; /* Tell the caller its length */
-}
-
-
-
-/*
- * Parse out all the various tags and parameters in the host entry pointed
- * to by "src". Stuff all the data into the appropriate fields of the
- * host structure pointed to by "host". If there is any problem with the
- * entry, an error message is reported via report(), no further processing
- * is done, and -1 is returned. Successful calls return 0.
- *
- * (Some errors probably shouldn't be so completely fatal. . . .)
- */
-
-PRIVATE int
-process_entry(host, src)
- struct host *host;
- char *src;
-{
- int retval;
- char *msg;
-
- if (!host || *src == '\0') {
- return -1;
- }
- host->hostname = get_shared_string(&src);
-#if 0
- /* Be more liberal for the benefit of dummy tag names. */
- if (!goodname(host->hostname->string)) {
- report(LOG_ERR, "bad hostname: \"%s\"", host->hostname->string);
- del_string(host->hostname);
- return -1;
- }
-#endif
- current_hostname = host->hostname->string;
- adjust(&src);
- while (TRUE) {
- retval = eval_symbol(&src, host);
- if (retval == SUCCESS) {
- adjust(&src);
- continue;
- }
- if (retval == E_END_OF_ENTRY) {
- /* The default subnet mask is set in readtab() */
- return 0;
- }
- /* Some kind of error. */
- switch (retval) {
- case E_SYNTAX_ERROR:
- msg = "bad syntax";
- break;
- case E_UNKNOWN_SYMBOL:
- msg = "unknown symbol";
- break;
- case E_BAD_IPADDR:
- msg = "bad INET address";
- break;
- case E_BAD_HWADDR:
- msg = "bad hardware address";
- break;
- case E_BAD_LONGWORD:
- msg = "bad longword value";
- break;
- case E_BAD_HWATYPE:
- msg = "bad HW address type";
- break;
- case E_BAD_PATHNAME:
- msg = "bad pathname (need leading '/')";
- case E_BAD_VALUE:
- msg = "bad value";
- default:
- msg = "unkown error";
- break;
- } /* switch */
- report(LOG_ERR, "in entry named \"%s\", symbol \"%s\": %s",
- current_hostname, current_tagname, msg);
- return -1;
- }
-}
-
-
-/*
- * Macros for use in the function below:
- */
-
-/* Parse one INET address stored directly in MEMBER. */
-#define PARSE_IA1(MEMBER) do \
-{ \
- if (optype == OP_BOOLEAN) \
- return E_SYNTAX_ERROR; \
- hp->flags.MEMBER = FALSE; \
- if (optype == OP_ADDITION) { \
- if (prs_inetaddr(symbol, &value) < 0) \
- return E_BAD_IPADDR; \
- hp->MEMBER.s_addr = value; \
- hp->flags.MEMBER = TRUE; \
- } \
-} while (0)
-
-/* Parse a list of INET addresses pointed to by MEMBER */
-#define PARSE_IAL(MEMBER) do \
-{ \
- if (optype == OP_BOOLEAN) \
- return E_SYNTAX_ERROR; \
- if (hp->flags.MEMBER) { \
- hp->flags.MEMBER = FALSE; \
- assert(hp->MEMBER); \
- del_iplist(hp->MEMBER); \
- hp->MEMBER = NULL; \
- } \
- if (optype == OP_ADDITION) { \
- hp->MEMBER = get_addresses(symbol); \
- if (hp->MEMBER == NULL) \
- return E_SYNTAX_ERROR; \
- hp->flags.MEMBER = TRUE; \
- } \
-} while (0)
-
-/* Parse a shared string pointed to by MEMBER */
-#define PARSE_STR(MEMBER) do \
-{ \
- if (optype == OP_BOOLEAN) \
- return E_SYNTAX_ERROR; \
- if (hp->flags.MEMBER) { \
- hp->flags.MEMBER = FALSE; \
- assert(hp->MEMBER); \
- del_string(hp->MEMBER); \
- hp->MEMBER = NULL; \
- } \
- if (optype == OP_ADDITION) { \
- hp->MEMBER = get_shared_string(symbol); \
- if (hp->MEMBER == NULL) \
- return E_SYNTAX_ERROR; \
- hp->flags.MEMBER = TRUE; \
- } \
-} while (0)
-
-/* Parse an integer value for MEMBER */
-#define PARSE_INT(MEMBER) do \
-{ \
- if (optype == OP_BOOLEAN) \
- return E_SYNTAX_ERROR; \
- hp->flags.MEMBER = FALSE; \
- if (optype == OP_ADDITION) { \
- value = get_u_long(symbol); \
- hp->MEMBER = value; \
- hp->flags.MEMBER = TRUE; \
- } \
-} while (0)
-
-/*
- * Evaluate the two-character tag symbol pointed to by "symbol" and place
- * the data in the structure pointed to by "hp". The pointer pointed to
- * by "symbol" is updated to point past the source string (but may not
- * point to the next tag entry).
- *
- * Obviously, this need a few more comments. . . .
- */
-PRIVATE int
-eval_symbol(symbol, hp)
- char **symbol;
- struct host *hp;
-{
- char tmpstr[MAXSTRINGLEN];
- byte *tmphaddr;
- struct shared_string *ss;
- struct symbolmap *symbolptr;
- u_int32 value;
- int32 timeoff;
- int i, numsymbols;
- unsigned len;
- int optype; /* Indicates boolean, addition, or deletion */
-
- eat_whitespace(symbol);
-
- /* Make sure this is set before returning. */
- current_tagname[0] = (*symbol)[0];
- current_tagname[1] = (*symbol)[1];
- current_tagname[2] = 0;
-
- if ((*symbol)[0] == '\0') {
- return E_END_OF_ENTRY;
- }
- if ((*symbol)[0] == ':') {
- return SUCCESS;
- }
- if ((*symbol)[0] == 'T') { /* generic symbol */
- (*symbol)++;
- value = get_u_long(symbol);
- sprintf(current_tagname, "T%d", value);
- eat_whitespace(symbol);
- if ((*symbol)[0] != '=') {
- return E_SYNTAX_ERROR;
- }
- (*symbol)++;
- if (!(hp->generic)) {
- hp->generic = (struct shared_bindata *)
- smalloc(sizeof(struct shared_bindata));
- }
- if (process_generic(symbol, &(hp->generic), (byte) (value & 0xFF)))
- return E_SYNTAX_ERROR;
- hp->flags.generic = TRUE;
- return SUCCESS;
- }
- /*
- * Determine the type of operation to be done on this symbol
- */
- switch ((*symbol)[2]) {
- case '=':
- optype = OP_ADDITION;
- break;
- case '@':
- optype = OP_DELETION;
- break;
- case ':':
- case '\0':
- optype = OP_BOOLEAN;
- break;
- default:
- return E_SYNTAX_ERROR;
- }
-
- symbolptr = symbol_list;
- numsymbols = sizeof(symbol_list) / sizeof(struct symbolmap);
- for (i = 0; i < numsymbols; i++) {
- if (((symbolptr->symbol)[0] == (*symbol)[0]) &&
- ((symbolptr->symbol)[1] == (*symbol)[1])) {
- break;
- }
- symbolptr++;
- }
- if (i >= numsymbols) {
- return E_UNKNOWN_SYMBOL;
- }
- /*
- * Skip past the = or @ character (to point to the data) if this
- * isn't a boolean operation. For boolean operations, just skip
- * over the two-character tag symbol (and nothing else. . . .).
- */
- (*symbol) += (optype == OP_BOOLEAN) ? 2 : 3;
-
- eat_whitespace(symbol);
-
- /* The cases below are in order by symbolcode value. */
- switch (symbolptr->symbolcode) {
-
- case SYM_BOOTFILE:
- PARSE_STR(bootfile);
- break;
-
- case SYM_COOKIE_SERVER:
- PARSE_IAL(cookie_server);
- break;
-
- case SYM_DOMAIN_SERVER:
- PARSE_IAL(domain_server);
- break;
-
- case SYM_GATEWAY:
- PARSE_IAL(gateway);
- break;
-
- case SYM_HWADDR:
- if (optype == OP_BOOLEAN)
- return E_SYNTAX_ERROR;
- hp->flags.haddr = FALSE;
- if (optype == OP_ADDITION) {
- /* Default the HW type to Ethernet */
- if (hp->flags.htype == 0) {
- hp->flags.htype = TRUE;
- hp->htype = HTYPE_ETHERNET;
- }
- tmphaddr = prs_haddr(symbol, hp->htype);
- if (!tmphaddr)
- return E_BAD_HWADDR;
- bcopy(tmphaddr, hp->haddr, haddrlength(hp->htype));
- hp->flags.haddr = TRUE;
- }
- break;
-
- case SYM_HOMEDIR:
- PARSE_STR(homedir);
- break;
-
- case SYM_HTYPE:
- if (optype == OP_BOOLEAN)
- return E_SYNTAX_ERROR;
- hp->flags.htype = FALSE;
- if (optype == OP_ADDITION) {
- value = 0L; /* Assume an illegal value */
- eat_whitespace(symbol);
- if (isdigit(**symbol)) {
- value = get_u_long(symbol);
- } else {
- len = sizeof(tmpstr);
- (void) get_string(symbol, tmpstr, &len);
- makelower(tmpstr);
- numsymbols = sizeof(htnamemap) /
- sizeof(struct htypename);
- for (i = 0; i < numsymbols; i++) {
- if (!strcmp(htnamemap[i].name, tmpstr)) {
- break;
- }
- }
- if (i < numsymbols) {
- value = htnamemap[i].htype;
- }
- }
- if (value >= hwinfocnt) {
- return E_BAD_HWATYPE;
- }
- hp->htype = (byte) (value & 0xFF);
- hp->flags.htype = TRUE;
- }
- break;
-
- case SYM_IMPRESS_SERVER:
- PARSE_IAL(impress_server);
- break;
-
- case SYM_IPADDR:
- PARSE_IA1(iaddr);
- break;
-
- case SYM_LOG_SERVER:
- PARSE_IAL(log_server);
- break;
-
- case SYM_LPR_SERVER:
- PARSE_IAL(lpr_server);
- break;
-
- case SYM_NAME_SERVER:
- PARSE_IAL(name_server);
- break;
-
- case SYM_RLP_SERVER:
- PARSE_IAL(rlp_server);
- break;
-
- case SYM_SUBNET_MASK:
- PARSE_IA1(subnet_mask);
- break;
-
- case SYM_TIME_OFFSET:
- if (optype == OP_BOOLEAN)
- return E_SYNTAX_ERROR;
- hp->flags.time_offset = FALSE;
- if (optype == OP_ADDITION) {
- len = sizeof(tmpstr);
- (void) get_string(symbol, tmpstr, &len);
- if (!strncmp(tmpstr, "auto", 4)) {
- hp->time_offset = secondswest;
- } else {
- if (sscanf(tmpstr, "%d", &timeoff) != 1)
- return E_BAD_LONGWORD;
- hp->time_offset = timeoff;
- }
- hp->flags.time_offset = TRUE;
- }
- break;
-
- case SYM_TIME_SERVER:
- PARSE_IAL(time_server);
- break;
-
- case SYM_VENDOR_MAGIC:
- if (optype == OP_BOOLEAN)
- return E_SYNTAX_ERROR;
- hp->flags.vm_cookie = FALSE;
- if (optype == OP_ADDITION) {
- if (strncmp(*symbol, "auto", 4)) {
- /* The string is not "auto" */
- if (!strncmp(*symbol, "rfc", 3)) {
- bcopy(vm_rfc1048, hp->vm_cookie, 4);
- } else if (!strncmp(*symbol, "cmu", 3)) {
- bcopy(vm_cmu, hp->vm_cookie, 4);
- } else {
- if (!isdigit(**symbol))
- return E_BAD_IPADDR;
- if (prs_inetaddr(symbol, &value) < 0)
- return E_BAD_IPADDR;
- bcopy(&value, hp->vm_cookie, 4);
- }
- hp->flags.vm_cookie = TRUE;
- }
- }
- break;
-
- case SYM_SIMILAR_ENTRY:
- switch (optype) {
- case OP_ADDITION:
- fill_defaults(hp, symbol);
- break;
- default:
- return E_SYNTAX_ERROR;
- }
- break;
-
- case SYM_NAME_SWITCH:
- switch (optype) {
- case OP_ADDITION:
- return E_SYNTAX_ERROR;
- case OP_DELETION:
- hp->flags.send_name = FALSE;
- hp->flags.name_switch = FALSE;
- break;
- case OP_BOOLEAN:
- hp->flags.send_name = TRUE;
- hp->flags.name_switch = TRUE;
- break;
- }
- break;
-
- case SYM_BOOTSIZE:
- switch (optype) {
- case OP_ADDITION:
- if (!strncmp(*symbol, "auto", 4)) {
- hp->flags.bootsize = TRUE;
- hp->flags.bootsize_auto = TRUE;
- } else {
- hp->bootsize = (unsigned int) get_u_long(symbol);
- hp->flags.bootsize = TRUE;
- hp->flags.bootsize_auto = FALSE;
- }
- break;
- case OP_DELETION:
- hp->flags.bootsize = FALSE;
- break;
- case OP_BOOLEAN:
- hp->flags.bootsize = TRUE;
- hp->flags.bootsize_auto = TRUE;
- break;
- }
- break;
-
- case SYM_BOOT_SERVER:
- PARSE_IA1(bootserver);
- break;
-
- case SYM_TFTPDIR:
- PARSE_STR(tftpdir);
- if ((hp->tftpdir != NULL) &&
- (hp->tftpdir->string[0] != '/'))
- return E_BAD_PATHNAME;
- break;
-
- case SYM_DUMP_FILE:
- PARSE_STR(dump_file);
- break;
-
- case SYM_DOMAIN_NAME:
- PARSE_STR(domain_name);
- break;
-
- case SYM_SWAP_SERVER:
- PARSE_IA1(swap_server);
- break;
-
- case SYM_ROOT_PATH:
- PARSE_STR(root_path);
- break;
-
- case SYM_EXTEN_FILE:
- PARSE_STR(exten_file);
- break;
-
- case SYM_REPLY_ADDR:
- PARSE_IA1(reply_addr);
- break;
-
- case SYM_NIS_DOMAIN:
- PARSE_STR(nis_domain);
- break;
-
- case SYM_NIS_SERVER:
- PARSE_IAL(nis_server);
- break;
-
- case SYM_NTP_SERVER:
- PARSE_IAL(ntp_server);
- break;
-
-#ifdef YORK_EX_OPTION
- case SYM_EXEC_FILE:
- PARSE_STR(exec_file);
- break;
-#endif
-
- case SYM_MSG_SIZE:
- PARSE_INT(msg_size);
- if (hp->msg_size < BP_MINPKTSZ ||
- hp->msg_size > MAX_MSG_SIZE)
- return E_BAD_VALUE;
- break;
-
- case SYM_MIN_WAIT:
- PARSE_INT(min_wait);
- if (hp->min_wait < 0)
- return E_BAD_VALUE;
- break;
-
- /* XXX - Add new tags here */
-
- default:
- return E_UNKNOWN_SYMBOL;
-
- } /* switch symbolcode */
-
- return SUCCESS;
-}
-#undef PARSE_IA1
-#undef PARSE_IAL
-#undef PARSE_STR
-
-
-
-
-/*
- * Read a string from the buffer indirectly pointed to through "src" and
- * move it into the buffer pointed to by "dest". A pointer to the maximum
- * allowable length of the string (including null-terminator) is passed as
- * "length". The actual length of the string which was read is returned in
- * the unsigned integer pointed to by "length". This value is the same as
- * that which would be returned by applying the strlen() function on the
- * destination string (i.e the terminating null is not counted as a
- * character). Trailing whitespace is removed from the string. For
- * convenience, the function returns the new value of "dest".
- *
- * The string is read until the maximum number of characters, an unquoted
- * colon (:), or a null character is read. The return string in "dest" is
- * null-terminated.
- */
-
-PRIVATE char *
-get_string(src, dest, length)
- char **src, *dest;
- unsigned *length;
-{
- int n, len, quoteflag;
-
- quoteflag = FALSE;
- n = 0;
- len = *length - 1;
- while ((n < len) && (**src)) {
- if (!quoteflag && (**src == ':')) {
- break;
- }
- if (**src == '"') {
- (*src)++;
- quoteflag = !quoteflag;
- continue;
- }
- if (**src == '\\') {
- (*src)++;
- if (!**src) {
- break;
- }
- }
- *dest++ = *(*src)++;
- n++;
- }
-
- /*
- * Remove that troublesome trailing whitespace. . .
- */
- while ((n > 0) && isspace(dest[-1])) {
- dest--;
- n--;
- }
-
- *dest = '\0';
- *length = n;
- return dest;
-}
-
-
-
-/*
- * Read the string indirectly pointed to by "src", update the caller's
- * pointer, and return a pointer to a malloc'ed shared_string structure
- * containing the string.
- *
- * The string is read using the same rules as get_string() above.
- */
-
-PRIVATE struct shared_string *
-get_shared_string(src)
- char **src;
-{
- char retstring[MAXSTRINGLEN];
- struct shared_string *s;
- unsigned length;
-
- length = sizeof(retstring);
- (void) get_string(src, retstring, &length);
-
- s = (struct shared_string *) smalloc(sizeof(struct shared_string)
- + length);
- s->linkcount = 1;
- strcpy(s->string, retstring);
-
- return s;
-}
-
-
-
-/*
- * Load RFC1048 generic information directly into a memory buffer.
- *
- * "src" indirectly points to the ASCII representation of the generic data.
- * "dest" points to a string structure which is updated to point to a new
- * string with the new data appended to the old string. The old string is
- * freed.
- *
- * The given tag value is inserted with the new data.
- *
- * The data may be represented as either a stream of hexadecimal numbers
- * representing bytes (any or all bytes may optionally start with '0x' and
- * be separated with periods ".") or as a quoted string of ASCII
- * characters (the quotes are required).
- */
-
-PRIVATE int
-process_generic(src, dest, tagvalue)
- char **src;
- struct shared_bindata **dest;
- u_int tagvalue;
-{
- byte tmpbuf[MAXBUFLEN];
- byte *str;
- struct shared_bindata *bdata;
- u_int newlength, oldlength;
-
- str = tmpbuf;
- *str++ = (tagvalue & 0xFF); /* Store tag value */
- str++; /* Skip over length field */
- if ((*src)[0] == '"') { /* ASCII data */
- newlength = sizeof(tmpbuf) - 2; /* Set maximum allowed length */
- (void) get_string(src, (char *) str, &newlength);
- newlength++; /* null terminator */
- } else { /* Numeric data */
- newlength = 0;
- while (newlength < sizeof(tmpbuf) - 2) {
- if (interp_byte(src, str++) < 0)
- break;
- newlength++;
- if (**src == '.') {
- (*src)++;
- }
- }
- }
- if ((*src)[0] != ':')
- return -1;
-
- tmpbuf[1] = (newlength & 0xFF);
- oldlength = ((*dest)->length);
- bdata = (struct shared_bindata *) smalloc(sizeof(struct shared_bindata)
- + oldlength + newlength + 1);
- if (oldlength > 0) {
- bcopy((*dest)->data, bdata->data, oldlength);
- }
- bcopy(tmpbuf, bdata->data + oldlength, newlength + 2);
- bdata->length = oldlength + newlength + 2;
- bdata->linkcount = 1;
- if (*dest) {
- del_bindata(*dest);
- }
- *dest = bdata;
- return 0;
-}
-
-
-
-/*
- * Verify that the given string makes sense as a hostname (according to
- * Appendix 1, page 29 of RFC882).
- *
- * Return TRUE for good names, FALSE otherwise.
- */
-
-PRIVATE boolean
-goodname(hostname)
- register char *hostname;
-{
- do {
- if (!isalpha(*hostname++)) { /* First character must be a letter */
- return FALSE;
- }
- while (isalnum(*hostname) ||
- (*hostname == '-') ||
- (*hostname == '_') )
- {
- hostname++; /* Alphanumeric or a hyphen */
- }
- if (!isalnum(hostname[-1])) { /* Last must be alphanumeric */
- return FALSE;
- }
- if (*hostname == '\0') {/* Done? */
- return TRUE;
- }
- } while (*hostname++ == '.'); /* Dot, loop for next label */
-
- return FALSE; /* If it's not a dot, lose */
-}
-
-
-
-/*
- * Null compare function -- always returns FALSE so an element is always
- * inserted into a hash table (i.e. there is never a collision with an
- * existing element).
- */
-
-PRIVATE boolean
-nullcmp(d1, d2)
- hash_datum *d1, *d2;
-{
- return FALSE;
-}
-
-
-/*
- * Function for comparing a string with the hostname field of a host
- * structure.
- */
-
-boolean
-nmcmp(d1, d2)
- hash_datum *d1, *d2;
-{
- char *name = (char *) d1; /* XXX - OK? */
- struct host *hp = (struct host *) d2;
-
- return !strcmp(name, hp->hostname->string);
-}
-
-
-/*
- * Compare function to determine whether two hardware addresses are
- * equivalent. Returns TRUE if "host1" and "host2" are equivalent, FALSE
- * otherwise.
- *
- * If the hardware addresses of "host1" and "host2" are identical, but
- * they are on different IP subnets, this function returns FALSE.
- *
- * This function is used when inserting elements into the hardware address
- * hash table.
- */
-
-PRIVATE boolean
-hwinscmp(d1, d2)
- hash_datum *d1, *d2;
-{
- struct host *host1 = (struct host *) d1;
- struct host *host2 = (struct host *) d2;
-
- if (host1->htype != host2->htype) {
- return FALSE;
- }
- if (bcmp(host1->haddr, host2->haddr, haddrlength(host1->htype))) {
- return FALSE;
- }
- /* XXX - Is the subnet_mask field set yet? */
- if ((host1->subnet_mask.s_addr) == (host2->subnet_mask.s_addr)) {
- if (((host1->iaddr.s_addr) & (host1->subnet_mask.s_addr)) !=
- ((host2->iaddr.s_addr) & (host2->subnet_mask.s_addr)))
- {
- return FALSE;
- }
- }
- return TRUE;
-}
-
-
-/*
- * Macros for use in the function below:
- */
-
-#define DUP_COPY(MEMBER) do \
-{ \
- if (!hp->flags.MEMBER) { \
- if ((hp->flags.MEMBER = hp2->flags.MEMBER) != 0) { \
- hp->MEMBER = hp2->MEMBER; \
- } \
- } \
-} while (0)
-
-#define DUP_LINK(MEMBER) do \
-{ \
- if (!hp->flags.MEMBER) { \
- if ((hp->flags.MEMBER = hp2->flags.MEMBER) != 0) { \
- assert(hp2->MEMBER); \
- hp->MEMBER = hp2->MEMBER; \
- (hp->MEMBER->linkcount)++; \
- } \
- } \
-} while (0)
-
-/*
- * Process the "similar entry" symbol.
- *
- * The host specified as the value of the "tc" symbol is used as a template
- * for the current host entry. Symbol values not explicitly set in the
- * current host entry are inferred from the template entry.
- */
-PRIVATE void
-fill_defaults(hp, src)
- struct host *hp;
- char **src;
-{
- unsigned int tlen, hashcode;
- struct host *hp2;
- char tstring[MAXSTRINGLEN];
-
- tlen = sizeof(tstring);
- (void) get_string(src, tstring, &tlen);
- hashcode = hash_HashFunction((u_char *) tstring, tlen);
- hp2 = (struct host *) hash_Lookup(nmhashtable, hashcode, nmcmp, tstring);
-
- if (hp2 == NULL) {
- report(LOG_ERR, "can't find tc=\"%s\"", tstring);
- return;
- }
- DUP_LINK(bootfile);
- DUP_LINK(cookie_server);
- DUP_LINK(domain_server);
- DUP_LINK(gateway);
- /* haddr not copied */
- DUP_LINK(homedir);
- DUP_COPY(htype);
-
- DUP_LINK(impress_server);
- /* iaddr not copied */
- DUP_LINK(log_server);
- DUP_LINK(lpr_server);
- DUP_LINK(name_server);
- DUP_LINK(rlp_server);
-
- DUP_COPY(subnet_mask);
- DUP_COPY(time_offset);
- DUP_LINK(time_server);
-
- if (!hp->flags.vm_cookie) {
- if ((hp->flags.vm_cookie = hp2->flags.vm_cookie)) {
- bcopy(hp2->vm_cookie, hp->vm_cookie, 4);
- }
- }
- if (!hp->flags.name_switch) {
- if ((hp->flags.name_switch = hp2->flags.name_switch)) {
- hp->flags.send_name = hp2->flags.send_name;
- }
- }
- if (!hp->flags.bootsize) {
- if ((hp->flags.bootsize = hp2->flags.bootsize)) {
- hp->flags.bootsize_auto = hp2->flags.bootsize_auto;
- hp->bootsize = hp2->bootsize;
- }
- }
- DUP_COPY(bootserver);
-
- DUP_LINK(tftpdir);
- DUP_LINK(dump_file);
- DUP_LINK(domain_name);
-
- DUP_COPY(swap_server);
- DUP_LINK(root_path);
- DUP_LINK(exten_file);
-
- DUP_COPY(reply_addr);
-
- DUP_LINK(nis_domain);
- DUP_LINK(nis_server);
- DUP_LINK(ntp_server);
-
-#ifdef YORK_EX_OPTION
- DUP_LINK(exec_file);
-#endif
-
- DUP_COPY(msg_size);
- DUP_COPY(min_wait);
-
- /* XXX - Add new tags here */
-
- DUP_LINK(generic);
-
-}
-#undef DUP_COPY
-#undef DUP_LINK
-
-
-
-/*
- * This function adjusts the caller's pointer to point just past the
- * first-encountered colon. If it runs into a null character, it leaves
- * the pointer pointing to it.
- */
-
-PRIVATE void
-adjust(s)
- char **s;
-{
- register char *t;
-
- t = *s;
- while (*t && (*t != ':')) {
- t++;
- }
- if (*t) {
- t++;
- }
- *s = t;
-}
-
-
-
-
-/*
- * This function adjusts the caller's pointer to point to the first
- * non-whitespace character. If it runs into a null character, it leaves
- * the pointer pointing to it.
- */
-
-PRIVATE void
-eat_whitespace(s)
- char **s;
-{
- register char *t;
-
- t = *s;
- while (*t && isspace(*t)) {
- t++;
- }
- *s = t;
-}
-
-
-
-/*
- * This function converts the given string to all lowercase.
- */
-
-PRIVATE void
-makelower(s)
- char *s;
-{
- while (*s) {
- if (isupper(*s)) {
- *s = tolower(*s);
- }
- s++;
- }
-}
-
-
-
-/*
- *
- * N O T E :
- *
- * In many of the functions which follow, a parameter such as "src" or
- * "symbol" is passed as a pointer to a pointer to something. This is
- * done for the purpose of letting the called function update the
- * caller's copy of the parameter (i.e. to effect call-by-reference
- * parameter passing). The value of the actual parameter is only used
- * to locate the real parameter of interest and then update this indirect
- * parameter.
- *
- * I'm sure somebody out there won't like this. . . .
- * (Yea, because it usually makes code slower... -gwr)
- *
- */
-
-
-
-/*
- * "src" points to a character pointer which points to an ASCII string of
- * whitespace-separated IP addresses. A pointer to an in_addr_list
- * structure containing the list of addresses is returned. NULL is
- * returned if no addresses were found at all. The pointer pointed to by
- * "src" is updated to point to the first non-address (illegal) character.
- */
-
-PRIVATE struct in_addr_list *
-get_addresses(src)
- char **src;
-{
- struct in_addr tmpaddrlist[MAXINADDRS];
- struct in_addr *address1, *address2;
- struct in_addr_list *result;
- unsigned addrcount, totalsize;
-
- address1 = tmpaddrlist;
- for (addrcount = 0; addrcount < MAXINADDRS; addrcount++) {
- while (isspace(**src) || (**src == ',')) {
- (*src)++;
- }
- if (!**src) { /* Quit if nothing more */
- break;
- }
- if (prs_inetaddr(src, &(address1->s_addr)) < 0) {
- break;
- }
- address1++; /* Point to next address slot */
- }
- if (addrcount < 1) {
- result = NULL;
- } else {
- totalsize = sizeof(struct in_addr_list)
- + (addrcount - 1) * sizeof(struct in_addr);
- result = (struct in_addr_list *) smalloc(totalsize);
- result->linkcount = 1;
- result->addrcount = addrcount;
- address1 = tmpaddrlist;
- address2 = result->addr;
- for (; addrcount > 0; addrcount--) {
- address2->s_addr = address1->s_addr;
- address1++;
- address2++;
- }
- }
- return result;
-}
-
-
-
-/*
- * prs_inetaddr(src, result)
- *
- * "src" is a value-result parameter; the pointer it points to is updated
- * to point to the next data position. "result" points to an unsigned long
- * in which an address is returned.
- *
- * This function parses the IP address string in ASCII "dot notation" pointed
- * to by (*src) and places the result (in network byte order) in the unsigned
- * long pointed to by "result". For malformed addresses, -1 is returned,
- * (*src) points to the first illegal character, and the unsigned long pointed
- * to by "result" is unchanged. Successful calls return 0.
- */
-
-PRIVATE int
-prs_inetaddr(src, result)
- char **src;
- u_int32 *result;
-{
- char tmpstr[MAXSTRINGLEN];
- register u_int32 value;
- u_int32 parts[4], *pp;
- int n;
- char *s, *t;
-
-#if 1 /* XXX - experimental */
- /* Leading alpha char causes IP addr lookup. */
- if (isalpha(**src)) {
- /* Lookup IP address. */
- s = *src;
- t = tmpstr;
- while ((isalnum(*s) || (*s == '.') ||
- (*s == '-') || (*s == '_') ) &&
- (t < &tmpstr[MAXSTRINGLEN - 1]) )
- *t++ = *s++;
- *t = '\0';
- *src = s;
-
- n = lookup_ipa(tmpstr, result);
- if (n < 0)
- report(LOG_ERR, "can not get IP addr for %s", tmpstr);
- return n;
- }
-#endif
-
- /*
- * Parse an address in Internet format:
- * a.b.c.d
- * a.b.c (with c treated as 16-bits)
- * a.b (with b treated as 24 bits)
- */
- pp = parts;
- loop:
- /* If it's not a digit, return error. */
- if (!isdigit(**src))
- return -1;
- *pp++ = get_u_long(src);
- if (**src == '.') {
- if (pp < (parts + 4)) {
- (*src)++;
- goto loop;
- }
- return (-1);
- }
-#if 0
- /* This is handled by the caller. */
- if (**src && !(isspace(**src) || (**src == ':'))) {
- return (-1);
- }
-#endif
-
- /*
- * Construct the address according to
- * the number of parts specified.
- */
- n = pp - parts;
- switch (n) {
- case 1: /* a -- 32 bits */
- value = parts[0];
- break;
- case 2: /* a.b -- 8.24 bits */
- value = (parts[0] << 24) | (parts[1] & 0xFFFFFF);
- break;
- case 3: /* a.b.c -- 8.8.16 bits */
- value = (parts[0] << 24) | ((parts[1] & 0xFF) << 16) |
- (parts[2] & 0xFFFF);
- break;
- case 4: /* a.b.c.d -- 8.8.8.8 bits */
- value = (parts[0] << 24) | ((parts[1] & 0xFF) << 16) |
- ((parts[2] & 0xFF) << 8) | (parts[3] & 0xFF);
- break;
- default:
- return (-1);
- }
- *result = htonl(value);
- return (0);
-}
-
-
-
-/*
- * "src" points to a pointer which in turn points to a hexadecimal ASCII
- * string. This string is interpreted as a hardware address and returned
- * as a pointer to the actual hardware address, represented as an array of
- * bytes.
- *
- * The ASCII string must have the proper number of digits for the specified
- * hardware type (e.g. twelve digits for a 48-bit Ethernet address).
- * Two-digit sequences (bytes) may be separated with periods (.) and/or
- * prefixed with '0x' for readability, but this is not required.
- *
- * For bad addresses, the pointer which "src" points to is updated to point
- * to the start of the first two-digit sequence which was bad, and the
- * function returns a NULL pointer.
- */
-
-PRIVATE byte *
-prs_haddr(src, htype)
- char **src;
- u_int htype;
-{
- static byte haddr[MAXHADDRLEN];
- byte *hap;
- char tmpstr[MAXSTRINGLEN];
- u_int tmplen;
- unsigned hal;
- char *p;
-
- hal = haddrlength(htype); /* Get length of this address type */
- if (hal <= 0) {
- report(LOG_ERR, "Invalid addr type for HW addr parse");
- return NULL;
- }
- tmplen = sizeof(tmpstr);
- get_string(src, tmpstr, &tmplen);
- p = tmpstr;
-
-#if 1 /* XXX - experimental */
- /* If it's a valid host name, try to lookup the HW address. */
- if (goodname(p)) {
- /* Lookup Hardware Address for hostname. */
- if ((hap = lookup_hwa(p, htype)) != NULL)
- return hap; /* success */
- report(LOG_ERR, "Add 0x prefix if hex value starts with A-F");
- /* OK, assume it must be numeric. */
- }
-#endif
-
- hap = haddr;
- while (hap < haddr + hal) {
- if (*p == '.')
- p++;
- if (interp_byte(&p, hap++) < 0) {
- return NULL;
- }
- }
- return haddr;
-}
-
-
-
-/*
- * "src" is a pointer to a character pointer which in turn points to a
- * hexadecimal ASCII representation of a byte. This byte is read, the
- * character pointer is updated, and the result is deposited into the
- * byte pointed to by "retbyte".
- *
- * The usual '0x' notation is allowed but not required. The number must be
- * a two digit hexadecimal number. If the number is invalid, "src" and
- * "retbyte" are left untouched and -1 is returned as the function value.
- * Successful calls return 0.
- */
-
-PRIVATE int
-interp_byte(src, retbyte)
- char **src;
- byte *retbyte;
-{
- int v;
-
- if ((*src)[0] == '0' &&
- ((*src)[1] == 'x' ||
- (*src)[1] == 'X')) {
- (*src) += 2; /* allow 0x for hex, but don't require it */
- }
- if (!isxdigit((*src)[0]) || !isxdigit((*src)[1])) {
- return -1;
- }
- if (sscanf(*src, "%2x", &v) != 1) {
- return -1;
- }
- (*src) += 2;
- *retbyte = (byte) (v & 0xFF);
- return 0;
-}
-
-
-
-/*
- * The parameter "src" points to a character pointer which points to an
- * ASCII string representation of an unsigned number. The number is
- * returned as an unsigned long and the character pointer is updated to
- * point to the first illegal character.
- */
-
-PRIVATE u_int32
-get_u_long(src)
- char **src;
-{
- register u_int32 value, base;
- char c;
-
- /*
- * Collect number up to first illegal character. Values are specified
- * as for C: 0x=hex, 0=octal, other=decimal.
- */
- value = 0;
- base = 10;
- if (**src == '0') {
- base = 8;
- (*src)++;
- }
- if (**src == 'x' || **src == 'X') {
- base = 16;
- (*src)++;
- }
- while ((c = **src)) {
- if (isdigit(c)) {
- value = (value * base) + (c - '0');
- (*src)++;
- continue;
- }
- if (base == 16 && isxdigit(c)) {
- value = (value << 4) + ((c & ~32) + 10 - 'A');
- (*src)++;
- continue;
- }
- break;
- }
- return value;
-}
-
-
-
-/*
- * Routines for deletion of data associated with the main data structure.
- */
-
-
-/*
- * Frees the entire host data structure given. Does nothing if the passed
- * pointer is NULL.
- */
-
-PRIVATE void
-free_host(hmp)
- hash_datum *hmp;
-{
- struct host *hostptr = (struct host *) hmp;
- if (hostptr == NULL)
- return;
- assert(hostptr->linkcount > 0);
- if (--(hostptr->linkcount))
- return; /* Still has references */
- del_iplist(hostptr->cookie_server);
- del_iplist(hostptr->domain_server);
- del_iplist(hostptr->gateway);
- del_iplist(hostptr->impress_server);
- del_iplist(hostptr->log_server);
- del_iplist(hostptr->lpr_server);
- del_iplist(hostptr->name_server);
- del_iplist(hostptr->rlp_server);
- del_iplist(hostptr->time_server);
- del_iplist(hostptr->nis_server);
- del_iplist(hostptr->ntp_server);
-
- /*
- * XXX - Add new tags here
- * (if the value is an IP list)
- */
-
- del_string(hostptr->hostname);
- del_string(hostptr->homedir);
- del_string(hostptr->bootfile);
- del_string(hostptr->tftpdir);
- del_string(hostptr->root_path);
- del_string(hostptr->domain_name);
- del_string(hostptr->dump_file);
- del_string(hostptr->exten_file);
- del_string(hostptr->nis_domain);
-
-#ifdef YORK_EX_OPTION
- del_string(hostptr->exec_file);
-#endif
-
- /*
- * XXX - Add new tags here
- * (if it is a shared string)
- */
-
- del_bindata(hostptr->generic);
- free((char *) hostptr);
-}
-
-
-
-/*
- * Decrements the linkcount on the given IP address data structure. If the
- * linkcount goes to zero, the memory associated with the data is freed.
- */
-
-PRIVATE void
-del_iplist(iplist)
- struct in_addr_list *iplist;
-{
- if (iplist) {
- if (!(--(iplist->linkcount))) {
- free((char *) iplist);
- }
- }
-}
-
-
-
-/*
- * Decrements the linkcount on a string data structure. If the count
- * goes to zero, the memory associated with the string is freed. Does
- * nothing if the passed pointer is NULL.
- */
-
-PRIVATE void
-del_string(stringptr)
- struct shared_string *stringptr;
-{
- if (stringptr) {
- if (!(--(stringptr->linkcount))) {
- free((char *) stringptr);
- }
- }
-}
-
-
-
-/*
- * Decrements the linkcount on a shared_bindata data structure. If the
- * count goes to zero, the memory associated with the data is freed. Does
- * nothing if the passed pointer is NULL.
- */
-
-PRIVATE void
-del_bindata(dataptr)
- struct shared_bindata *dataptr;
-{
- if (dataptr) {
- if (!(--(dataptr->linkcount))) {
- free((char *) dataptr);
- }
- }
-}
-
-
-
-
-/* smalloc() -- safe malloc()
- *
- * Always returns a valid pointer (if it returns at all). The allocated
- * memory is initialized to all zeros. If malloc() returns an error, a
- * message is printed using the report() function and the program aborts
- * with a status of 1.
- */
-
-PRIVATE char *
-smalloc(nbytes)
- unsigned nbytes;
-{
- char *retvalue;
-
- retvalue = malloc(nbytes);
- if (!retvalue) {
- report(LOG_ERR, "malloc() failure -- exiting");
- exit(1);
- }
- bzero(retvalue, nbytes);
- return retvalue;
-}
-
-
-/*
- * Compare function to determine whether two hardware addresses are
- * equivalent. Returns TRUE if "host1" and "host2" are equivalent, FALSE
- * otherwise.
- *
- * This function is used when retrieving elements from the hardware address
- * hash table.
- */
-
-boolean
-hwlookcmp(d1, d2)
- hash_datum *d1, *d2;
-{
- struct host *host1 = (struct host *) d1;
- struct host *host2 = (struct host *) d2;
-
- if (host1->htype != host2->htype) {
- return FALSE;
- }
- if (bcmp(host1->haddr, host2->haddr, haddrlength(host1->htype))) {
- return FALSE;
- }
- return TRUE;
-}
-
-
-/*
- * Compare function for doing IP address hash table lookup.
- */
-
-boolean
-iplookcmp(d1, d2)
- hash_datum *d1, *d2;
-{
- struct host *host1 = (struct host *) d1;
- struct host *host2 = (struct host *) d2;
-
- return (host1->iaddr.s_addr == host2->iaddr.s_addr);
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/readfile.h b/usr.sbin/bootpd/readfile.h
deleted file mode 100644
index 3913455..0000000
--- a/usr.sbin/bootpd/readfile.h
+++ /dev/null
@@ -1,19 +0,0 @@
-/* readfile.h */
-
-#include "bptypes.h"
-#include "hash.h"
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern boolean hwlookcmp P((hash_datum *, hash_datum *));
-extern boolean iplookcmp P((hash_datum *, hash_datum *));
-extern boolean nmcmp P((hash_datum *, hash_datum *));
-extern void readtab P((int));
-extern void rdtab_init P((void));
-
-#undef P
-
diff --git a/usr.sbin/bootpd/report.c b/usr.sbin/bootpd/report.c
deleted file mode 100644
index 4f7f036..0000000
--- a/usr.sbin/bootpd/report.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * report() - calls syslog
- */
-
-#ifdef __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#include <stdio.h>
-#include <syslog.h>
-
-#include "report.h"
-
-#ifndef LOG_NDELAY
-#define LOG_NDELAY 0
-#endif
-#ifndef LOG_DAEMON
-#define LOG_DAEMON 0
-#endif
-#ifndef LOG_BOOTP
-#define LOG_BOOTP LOG_DAEMON
-#endif
-
-extern int debug;
-extern char *progname;
-
-/*
- * This is initialized so you get stderr until you call
- * report_init()
- */
-static int stderr_only = 1;
-
-void
-report_init(nolog)
- int nolog;
-{
- stderr_only = nolog;
-#ifdef SYSLOG
- if (!stderr_only) {
- openlog(progname, LOG_PID | LOG_NDELAY, LOG_BOOTP);
- }
-#endif
-}
-
-/*
- * This routine reports errors and such via stderr and syslog() if
- * appopriate. It just helps avoid a lot of "#ifdef SYSLOG" constructs
- * from being scattered throughout the code.
- *
- * The syntax is identical to syslog(3), but %m is not considered special
- * for output to stderr (i.e. you'll see "%m" in the output. . .). Also,
- * control strings should normally end with \n since newlines aren't
- * automatically generated for stderr output (whereas syslog strips out all
- * newlines and adds its own at the end).
- */
-
-static char *levelnames[] = {
-#ifdef LOG_SALERT
- "level(0): ",
- "alert(1): ",
- "alert(2): ",
- "emerg(3): ",
- "error(4): ",
- "crit(5): ",
- "warn(6): ",
- "note(7): ",
- "info(8): ",
- "debug(9): ",
- "level(?): "
-#else
- "emerg(0): ",
- "alert(1): ",
- "crit(2): ",
- "error(3): ",
- "warn(4): ",
- "note(5): ",
- "info(6): ",
- "debug(7): ",
- "level(?): "
-#endif
-};
-static int numlevels = sizeof(levelnames) / sizeof(levelnames[0]);
-
-
-/*
- * Print a log message using syslog(3) and/or stderr.
- * The message passed in should not include a newline.
- */
-#ifdef __STDC__
-void
-report(int priority, char *fmt,...)
-#else
-/*VARARGS2*/
-void
-report(priority, fmt, va_alist)
- int priority;
- char *fmt;
- va_dcl
-#endif
-{
- va_list ap;
- static char buf[128];
-
- if ((priority < 0) || (priority >= numlevels)) {
- priority = numlevels - 1;
- }
-#ifdef __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- vsprintf(buf, fmt, ap);
- va_end(ap);
-
- /*
- * Print the message
- */
- if (stderr_only || (debug > 2)) {
- fprintf(stderr, "%s: %s %s\n",
- progname, levelnames[priority], buf);
- }
-#ifdef SYSLOG
- if (!stderr_only)
- syslog((priority | LOG_BOOTP), "%s", buf);
-#endif
-}
-
-
-
-/*
- * Return pointer to static string which gives full filesystem error message.
- */
-char *
-get_errmsg()
-{
- extern int errno;
- extern char *strerror();
-
- return strerror(errno);
-}
-
-/*
- * Local Variables:
- * tab-width: 4
- * c-indent-level: 4
- * c-argdecl-indent: 4
- * c-continued-statement-offset: 4
- * c-continued-brace-offset: -4
- * c-label-offset: -4
- * c-brace-offset: 0
- * End:
- */
diff --git a/usr.sbin/bootpd/report.h b/usr.sbin/bootpd/report.h
deleted file mode 100644
index 0bf63d6..0000000
--- a/usr.sbin/bootpd/report.h
+++ /dev/null
@@ -1,13 +0,0 @@
-/* report.h */
-
-#ifdef __STDC__
-#define P(args) args
-#else
-#define P(args) ()
-#endif
-
-extern void report_init P((int nolog));
-extern void report P((int, char *, ...));
-extern char *get_errmsg P((void));
-
-#undef P
diff --git a/usr.sbin/bootpd/syslog.conf b/usr.sbin/bootpd/syslog.conf
deleted file mode 100644
index 2c135af..0000000
--- a/usr.sbin/bootpd/syslog.conf
+++ /dev/null
@@ -1,63 +0,0 @@
-#
-# syslog configuration file for SunOS 4.X
-# (modified to do local2 separately)
-#
-# This file is processed by m4 so be careful to quote (`') names
-# that match m4 reserved words. Also, within ifdef's, arguments
-# containing commas must be quoted.
-#
-# Note: Have to exclude user from most lines so that user.alert
-# and user.emerg are not included, because old sendmails
-# will generate them for debugging information. If you
-# have no 4.2BSD based systems doing network logging, you
-# can remove all the special cases for "user" logging.
-
-#*.err;kern.debug;auth.notice;user.none /dev/console
-kern.debug;user,mail.crit;auth.notice /dev/console
-daemon,syslog,lpr,news,uucp,cron.err /dev/console
-
-#*.err;kern.debug;daemon,auth.notice;mail.crit;user.none /var/adm/messages
-kern.debug;user,mail.crit;auth.notice /var/adm/messages
-daemon.notice;syslog,news,uucp,cron.err /var/adm/messages
-
-lpr.debug /var/adm/lpd-errs
-
-*.alert;kern.err;daemon.err;user.none operator
-*.alert;user.none root
-
-*.emerg;user.none *
-
-# for loghost machines, to have authentication messages (su, login, etc.)
-# logged to a file, un-comment out the following line and adjust the file name
-# as appropriate.
-#
-# if a non-loghost machine chooses to have such messages
-# sent to the loghost machine, un-comment out the following line.
-#
-#auth.notice ifdef(`LOGHOST', /var/log/authlog, @loghost)
-
-mail.debug ifdef(`LOGHOST', /var/log/syslog, @loghost)
-
-# following line for compatibility with old sendmails. they will send
-# messages with no facility code, which will be turned into "user" messages
-# by the local syslog daemon. only the "loghost" machine needs the following
-# line, to cause these old sendmail log messages to be logged in the
-# mail syslog file.
-#
-ifdef(`LOGHOST',
-user.alert /var/log/syslog
-)
-#
-# non-loghost machines will use the following lines to cause "user"
-# log messages to be logged locally.
-#
-ifdef(`LOGHOST', ,
-user.err /dev/console
-user.err /var/adm/messages
-user.alert `root, operator'
-user.emerg *
-)
-
-# Local2: (bootpd, pppd)
-local2.debug /dev/console
-#local2.debug /var/log/local2
diff --git a/usr.sbin/bootpd/trygetea.c b/usr.sbin/bootpd/trygetea.c
deleted file mode 100644
index e9314ae..0000000
--- a/usr.sbin/bootpd/trygetea.c
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * trygetea.c - test program for getether.c
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#if defined(SUNOS) || defined(SVR4)
-#include <sys/sockio.h>
-#endif
-
-#include <net/if.h> /* for struct ifreq */
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#include <netdb.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-
-int debug = 0;
-char *progname;
-
-main(argc, argv)
- char **argv;
-{
- u_char ea[16]; /* Ethernet address */
- int i;
-
- progname = argv[0]; /* for report */
-
- if (argc < 2) {
- printf("need interface name\n");
- exit(1);
- }
- if ((i = getether(argv[1], ea)) < 0) {
- printf("Could not get Ethernet address (rc=%d)\n", i);
- exit(1);
- }
- printf("Ether-addr");
- for (i = 0; i < 6; i++)
- printf(":%x", ea[i] & 0xFF);
- printf("\n");
-
- exit(0);
-}
diff --git a/usr.sbin/bootpd/trygetif.c b/usr.sbin/bootpd/trygetif.c
deleted file mode 100644
index c6bb098..0000000
--- a/usr.sbin/bootpd/trygetif.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * trygetif.c - test program for getif.c
- */
-
-#include <sys/types.h>
-#include <sys/socket.h>
-
-#if defined(SUNOS) || defined(SVR4)
-#include <sys/sockio.h>
-#endif
-
-#include <net/if.h> /* for struct ifreq */
-#include <netinet/in.h>
-#include <arpa/inet.h> /* inet_ntoa */
-
-#include <netdb.h>
-#include <stdio.h>
-#include <ctype.h>
-#include <errno.h>
-
-#include "getif.h"
-
-int debug = 0;
-char *progname;
-
-main(argc, argv)
- char **argv;
-{
- struct hostent *hep;
- struct sockaddr ea; /* Ethernet address */
- struct sockaddr_in *sip; /* Interface address */
- struct ifreq *ifr;
- struct in_addr dst_addr;
- struct in_addr *dap;
- int i, s;
-
- progname = argv[0]; /* for report */
-
- dap = NULL;
- if (argc > 1) {
- dap = &dst_addr;
- if (isdigit(argv[1][0]))
- dst_addr.s_addr = inet_addr(argv[1]);
- else {
- hep = gethostbyname(argv[1]);
- if (!hep) {
- printf("gethostbyname(%s)\n", argv[1]);
- exit(1);
- }
- memcpy(&dst_addr, hep->h_addr, sizeof(dst_addr));
- }
- }
- s = socket(AF_INET, SOCK_DGRAM, 0);
- if (s < 0) {
- perror("socket open");
- exit(1);
- }
- ifr = getif(s, dap);
- if (!ifr) {
- printf("no interface for address\n");
- exit(1);
- }
- printf("Intf-name:%s\n", ifr->ifr_name);
- sip = (struct sockaddr_in *) &(ifr->ifr_addr);
- printf("Intf-addr:%s\n", inet_ntoa(sip->sin_addr));
-
- exit(0);
-}
diff --git a/usr.sbin/bootpd/trylook.c b/usr.sbin/bootpd/trylook.c
deleted file mode 100644
index 40652a2..0000000
--- a/usr.sbin/bootpd/trylook.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * trylook.c - test program for lookup.c
- */
-
-#include <sys/types.h>
-#include <netinet/in.h>
-#include <stdio.h>
-
-#include "report.h"
-#include "lookup.h"
-
-extern char *ether_ntoa();
-extern char *inet_ntoa();
-
-int debug = 0;
-char *progname;
-
-main(argc, argv)
- char **argv;
-{
- int i;
- struct in_addr in;
- char *a;
- u_char *hwa;
-
- progname = argv[0]; /* for report */
-
- for (i = 1; i < argc; i++) {
-
- /* Host name */
- printf("%s:", argv[i]);
-
- /* IP addr */
- if (lookup_ipa(argv[i], &in.s_addr))
- a = "?";
- else
- a = inet_ntoa(in);
- printf(" ipa=%s", a);
-
- /* Ether addr */
- hwa = lookup_hwa(argv[i], 1);
- if (!hwa)
- a = "?";
- else
- a = ether_ntoa(hwa);
- printf(" hwa=%s\n", a);
-
- }
- exit(0);
-}
diff --git a/usr.sbin/bootpd/tzone.c b/usr.sbin/bootpd/tzone.c
deleted file mode 100644
index 4adc4ae..0000000
--- a/usr.sbin/bootpd/tzone.c
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * tzone.c - get the timezone
- *
- * This is shared by bootpd and bootpef
- */
-
-#ifdef SVR4
-/* XXX - Is this really SunOS specific? -gwr */
-/* This is in <time.h> but only visible if (__STDC__ == 1). */
-extern long timezone;
-#else /* SVR4 */
-/* BSD or SunOS */
-# include <sys/time.h>
-# include <syslog.h>
-#endif /* SVR4 */
-
-#include "bptypes.h"
-#include "report.h"
-#include "tzone.h"
-
-/* This is what other modules use. */
-int32 secondswest;
-
-/*
- * Get our timezone offset so we can give it to clients if the
- * configuration file doesn't specify one.
- */
-void
-tzone_init()
-{
-#ifdef SVR4
- /* XXX - Is this really SunOS specific? -gwr */
- secondswest = timezone;
-#else /* SVR4 */
- struct timezone tzp; /* Time zone offset for clients */
- struct timeval tp; /* Time (extra baggage) */
- if (gettimeofday(&tp, &tzp) < 0) {
- secondswest = 0; /* Assume GMT for lack of anything better */
- report(LOG_ERR, "gettimeofday: %s", get_errmsg());
- } else {
- secondswest = 60L * tzp.tz_minuteswest; /* Convert to seconds */
- }
-#endif /* SVR4 */
-}
diff --git a/usr.sbin/bootpd/tzone.h b/usr.sbin/bootpd/tzone.h
deleted file mode 100644
index ddd67c4..0000000
--- a/usr.sbin/bootpd/tzone.h
+++ /dev/null
@@ -1,3 +0,0 @@
-/* tzone.h */
-extern int32 secondswest;
-extern void tzone_init();
diff --git a/usr.sbin/cron/cron/bitstring.3 b/usr.sbin/cron/cron/bitstring.3
deleted file mode 100644
index efe9ae3..0000000
--- a/usr.sbin/cron/cron/bitstring.3
+++ /dev/null
@@ -1,168 +0,0 @@
-.\" Copyright (c) 1989 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" This code is derived from software contributed to Berkeley by
-.\" Paul Vixie.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley. The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\" @(#)bitstring.3 5.1 (Berkeley) 12/13/89
-.\"
-.TH BITSTRING 3 "December 13, 1989"
-.UC 4
-.SH NAME
-bit_alloc, bit_clear, bit_decl, bit_ffs, bit_nclear, bit_nset,
-bit_set, bitstr_size, bit_test \- bit-string manipulation macros
-.SH SYNOPSIS
-.ft B
-.nf
-#include <bitstring.h>
-
-name = bit_alloc(nbits)
-bitstr_t *name;
-int nbits;
-
-bit_decl(name, nbits)
-bitstr_t name;
-int nbits;
-
-bit_clear(name, bit)
-bitstr_t name;
-int bit;
-
-bit_ffc(name, nbits, value)
-bitstr_t name;
-int nbits, *value;
-
-bit_ffs(name, nbits, value)
-bitstr_t name;
-int nbits, *value;
-
-bit_nclear(name, start, stop)
-bitstr_t name;
-int start, stop;
-
-bit_nset(name, start, stop)
-bitstr_t name;
-int start, stop;
-
-bit_set(name, bit)
-bitstr_t name;
-int bit;
-
-bitstr_size(nbits)
-int nbits;
-
-bit_test(name, bit)
-bitstr_t name;
-int bit;
-.fi
-.ft R
-.SH DESCRIPTION
-These macros operate on strings of bits.
-.PP
-.I Bit_alloc
-returns a pointer of type
-.I bitstr_t\ *
-to sufficient space to store
-.I nbits
-bits, or NULL if no space is available.
-.PP
-.I Bit_decl
-is a macro for allocating sufficient space to store
-.I nbits
-bits on the stack.
-.PP
-.I Bitstr_size
-returns the number of elements of type
-.I bitstr_t
-necessary to store
-.I nbits
-bits.
-This is useful for copying bit strings.
-.PP
-.I Bit_clear
-and
-.I bit_set
-clear or set the zero-based numbered bit
-.IR bit ,
-in the bit string
-.IR name .
-.PP
-.I Bit_nset
-and
-.I bit_nclear
-set or clear the zero-based numbered bits from
-.I start
-to
-.I stop
-in the bit string
-.IR name .
-.PP
-.I Bit_test
-evaluates to zero if the zero-based numbered bit
-.I bit
-of bit string
-.I name
-is set, and non-zero otherwise.
-.PP
-.I Bit_ffs
-sets
-.I *value
-to the zero-based number of the first bit set in the array of
-.I nbits
-bits referenced by
-.IR name .
-If no bits are set,
-.I *value
-is set to -1.
-.PP
-.I Bit_ffc
-sets
-.I *value
-to the zero-based number of the first bit not set in the array of
-.I nbits
-bits referenced by
-.IR name .
-If all bits are set,
-.I value
-is set to -1.
-.SH EXAMPLE
-.nf
-.in +5
-#include <limits.h>
-#include <bitstring.h>
-
-...
-#define LPR_BUSY_BIT 0
-#define LPR_FORMAT_BIT 1
-#define LPR_DOWNLOAD_BIT 2
-...
-#define LPR_AVAILABLE_BIT 9
-#define LPR_MAX_BITS 10
-
-make_lpr_available()
-{
- bitstr_t bit_decl(bitlist, LPR_MAX_BITS);
- ...
- bit_nclear(bitlist, 0, LPR_MAX_BITS - 1);
- ...
- if (!bit_test(bitlist, LPR_BUSY_BIT)) {
- bit_clear(bitlist, LPR_FORMAT_BIT);
- bit_clear(bitlist, LPR_DOWNLOAD_BIT);
- bit_set(bitlist, LPR_AVAILABLE_BIT);
- }
-}
-.fi
-.SH "SEE ALSO"
-malloc(3)
diff --git a/usr.sbin/cron/cron/bitstring.h b/usr.sbin/cron/cron/bitstring.h
deleted file mode 100644
index d054de3..0000000
--- a/usr.sbin/cron/cron/bitstring.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (c) 1989 The Regents of the University of California.
- * All rights reserved.
- *
- * This code is derived from software contributed to Berkeley by
- * Paul Vixie.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that the above copyright notice and this paragraph are
- * duplicated in all such forms and that any documentation,
- * advertising materials, and other materials related to such
- * distribution and use acknowledge that the software was developed
- * by the University of California, Berkeley. The name of the
- * University may not be used to endorse or promote products derived
- * from this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#)bitstring.h 5.2 (Berkeley) 4/4/90
- */
-
-typedef unsigned char bitstr_t;
-
-/* internal macros */
- /* byte of the bitstring bit is in */
-#define _bit_byte(bit) \
- ((bit) >> 3)
-
- /* mask for the bit within its byte */
-#define _bit_mask(bit) \
- (1 << ((bit)&0x7))
-
-/* external macros */
- /* bytes in a bitstring of nbits bits */
-#define bitstr_size(nbits) \
- ((((nbits) - 1) >> 3) + 1)
-
- /* allocate a bitstring */
-#define bit_alloc(nbits) \
- (bitstr_t *)malloc(1, \
- (unsigned int)bitstr_size(nbits) * sizeof(bitstr_t))
-
- /* allocate a bitstring on the stack */
-#define bit_decl(name, nbits) \
- (name)[bitstr_size(nbits)]
-
- /* is bit N of bitstring name set? */
-#define bit_test(name, bit) \
- ((name)[_bit_byte(bit)] & _bit_mask(bit))
-
- /* set bit N of bitstring name */
-#define bit_set(name, bit) \
- (name)[_bit_byte(bit)] |= _bit_mask(bit)
-
- /* clear bit N of bitstring name */
-#define bit_clear(name, bit) \
- (name)[_bit_byte(bit)] &= ~_bit_mask(bit)
-
- /* clear bits start ... stop in bitstring */
-#define bit_nclear(name, start, stop) { \
- register bitstr_t *_name = name; \
- register int _start = start, _stop = stop; \
- register int _startbyte = _bit_byte(_start); \
- register int _stopbyte = _bit_byte(_stop); \
- if (_startbyte == _stopbyte) { \
- _name[_startbyte] &= ((0xff >> (8 - (_start&0x7))) | \
- (0xff << ((_stop&0x7) + 1))); \
- } else { \
- _name[_startbyte] &= 0xff >> (8 - (_start&0x7)); \
- while (++_startbyte < _stopbyte) \
- _name[_startbyte] = 0; \
- _name[_stopbyte] &= 0xff << ((_stop&0x7) + 1); \
- } \
-}
-
- /* set bits start ... stop in bitstring */
-#define bit_nset(name, start, stop) { \
- register bitstr_t *_name = name; \
- register int _start = start, _stop = stop; \
- register int _startbyte = _bit_byte(_start); \
- register int _stopbyte = _bit_byte(_stop); \
- if (_startbyte == _stopbyte) { \
- _name[_startbyte] |= ((0xff << (_start&0x7)) & \
- (0xff >> (7 - (_stop&0x7)))); \
- } else { \
- _name[_startbyte] |= 0xff << ((_start)&0x7); \
- while (++_startbyte < _stopbyte) \
- _name[_startbyte] = 0xff; \
- _name[_stopbyte] |= 0xff >> (7 - (_stop&0x7)); \
- } \
-}
-
- /* find first bit clear in name */
-#define bit_ffc(name, nbits, value) { \
- register bitstr_t *_name = name; \
- register int _byte, _nbits = nbits; \
- register int _stopbyte = _bit_byte(_nbits), _value = -1; \
- for (_byte = 0; _byte <= _stopbyte; ++_byte) \
- if (_name[_byte] != 0xff) { \
- _value = _byte << 3; \
- for (_stopbyte = _name[_byte]; (_stopbyte&0x1); \
- ++_value, _stopbyte >>= 1); \
- break; \
- } \
- *(value) = _value; \
-}
-
- /* find first bit set in name */
-#define bit_ffs(name, nbits, value) { \
- register bitstr_t *_name = name; \
- register int _byte, _nbits = nbits; \
- register int _stopbyte = _bit_byte(_nbits), _value = -1; \
- for (_byte = 0; _byte <= _stopbyte; ++_byte) \
- if (_name[_byte]) { \
- _value = _byte << 3; \
- for (_stopbyte = _name[_byte]; !(_stopbyte&0x1); \
- ++_value, _stopbyte >>= 1); \
- break; \
- } \
- *(value) = _value; \
-}
diff --git a/usr.sbin/cron/cron/putman.sh b/usr.sbin/cron/cron/putman.sh
deleted file mode 100644
index 4aef625..0000000
--- a/usr.sbin/cron/cron/putman.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-
-# putman.sh - install a man page according to local custom
-# vixie 27dec93 [original]
-#
-# $Id:$
-
-PAGE=$1
-DIR=$2
-
-SECT=`expr $PAGE : '[a-z]*.\([0-9]\)'`
-
-[ -d $DIR/man$SECT ] && {
- set -x
- cp $PAGE $DIR/man$SECT/$PAGE
- set +x
-} || {
- set -x
- nroff -man $PAGE >$DIR/cat$SECT/`basename $PAGE .$SECT`.0
- set +x
-}
-
-exit 0
diff --git a/usr.sbin/crunch/crunchgen/crunched_skel.c b/usr.sbin/crunch/crunchgen/crunched_skel.c
deleted file mode 100644
index d605d6c..0000000
--- a/usr.sbin/crunch/crunchgen/crunched_skel.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/* File created via mkskel.sh */
-
-char *crunched_skel[] = {
- "/*",
- " * Copyright (c) 1994 University of Maryland",
- " * All Rights Reserved.",
- " *",
- " * Permission to use, copy, modify, distribute, and sell this software and its",
- " * documentation for any purpose is hereby granted without fee, provided that",
- " * the above copyright notice appear in all copies and that both that",
- " * copyright notice and this permission notice appear in supporting",
- " * documentation, and that the name of U.M. not be used in advertising or",
- " * publicity pertaining to distribution of the software without specific,",
- " * written prior permission. U.M. makes no representations about the",
- " * suitability of this software for any purpose. It is provided \"as is\"",
- " * without express or implied warranty.",
- " *",
- " * U.M. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL",
- " * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL U.M.",
- " * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES",
- " * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION",
- " * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN",
- " * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.",
- " *",
- " * Author: James da Silva, Systems Design and Analysis Group",
- " * Computer Science Department",
- " * University of Maryland at College Park",
- " */",
- "/*",
- " * crunched_main.c - main program for crunched binaries, it branches to a ",
- " * particular subprogram based on the value of argv[0]. Also included",
- " * is a little program invoked when the crunched binary is called via",
- " * its EXECNAME. This one prints out the list of compiled-in binaries,",
- " * or calls one of them based on argv[1]. This allows the testing of",
- " * the crunched binary without creating all the links.",
- " */",
- "#include <stdio.h>",
- "#include <string.h>",
- "",
- "struct stub {",
- " char *name;",
- " int (*f)();",
- "};",
- "",
- "extern struct stub entry_points[];",
- "",
- "int main(int argc, char **argv)",
- "{",
- " char *slash, *basename;",
- " struct stub *ep;",
- "",
- " if(argv[0] == NULL || *argv[0] == '\\0')",
- " crunched_usage();",
- "",
- " slash = strrchr(argv[0], '/');",
- " basename = slash? slash+1 : argv[0];",
- "",
- " for(ep=entry_points; ep->name != NULL; ep++)",
- " if(!strcmp(basename, ep->name)) break;",
- "",
- " if(ep->name)",
- " return ep->f(argc, argv);",
- " else {",
- " fprintf(stderr, \"%s: %s not compiled in\\n\", EXECNAME, basename);",
- " crunched_usage();",
- " }",
- "}",
- "",
- "",
- "int crunched_main(int argc, char **argv)",
- "{",
- " struct stub *ep;",
- " int columns, len;",
- "",
- " if(argc <= 1) ",
- " crunched_usage();",
- "",
- " return main(--argc, ++argv);",
- "}",
- "",
- "",
- "int crunched_usage()",
- "{",
- " int columns, len;",
- " struct stub *ep;",
- "",
- " fprintf(stderr, \"Usage: %s <prog> <args> ..., where <prog> is one of:\\n\",",
- " EXECNAME);",
- " columns = 0;",
- " for(ep=entry_points; ep->name != NULL; ep++) {",
- " len = strlen(ep->name) + 1;",
- " if(columns+len < 80)",
- " columns += len;",
- " else {",
- " fprintf(stderr, \"\\n\");",
- " columns = len;",
- " }",
- " fprintf(stderr, \" %s\", ep->name);",
- " }",
- " fprintf(stderr, \"\\n\");",
- " exit(1);",
- "}",
- "",
- "/* end of crunched_main.c */",
- "",
- 0
-};
diff --git a/usr.sbin/ncrcontrol/ncrcontrol.1 b/usr.sbin/ncrcontrol/ncrcontrol.1
deleted file mode 100644
index 11505f0..0000000
--- a/usr.sbin/ncrcontrol/ncrcontrol.1
+++ /dev/null
@@ -1,286 +0,0 @@
-.\" Copyright (c) 1994 Wolfgang Stanglmeier. 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. The name of the author may not be used to endorse or promote products
-.\" derived from this software without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
-.\"
-.\" $Id: ncrcontrol.8,v 1.1 94/10/09 21:25:51 wolf Exp $
-.\"
-.Dd September 16, 1994
-.Dt NCRCONTROL 8
-.Os FreeBSD
-.Sh NAME
-.Nm ncrcontrol
-.Nd manually configure the ncr810/825 PCI/SCSI device driver
-.Sh SYNOPSIS
-.\"--------------------------------------------------------
-.\" ncrcontrol [-Mcore] [-Nsystem] [-u unit] [-v] [-v] -i
-.\"--------------------------------------------------------
-.Nm ncrcontrol
-.Op Fl M Ar core
-.Op Fl N Ar system
-.Op Fl u Ar unit
-.Op Fl v
-.Op Fl v
-.Fl i
-.\"--------------------------------------------------------
-.\" ncrcontrol [-N system] [-u unit] [-p wait]
-.\"--------------------------------------------------------
-.Nm ncrcontrol
-.Op Fl N Ar system
-.Op Fl u Ar unit
-.Op Fl p Ar wait
-.\"------------------------------------------------------------
-.\" ncrcontrol [-Nsystem] [-u unit] [-t target] -s name=value
-.\"------------------------------------------------------------
-.Nm ncrcontrol
-.Op Fl N Ar system
-.Op Fl u Ar unit
-.Op Fl t Ar target
-.Fl s
-.Ar name=value
-.\"------------------------------------------------------------
-.\" ncrcontrol [-Mcore] [-Nsystem] [-u unit] [-t target] -d pattern
-.\"------------------------------------------------------------
-.Nm ncrcontrol
-.Op Fl M Ar core
-.Op Fl N Ar system
-.Op Fl u Ar unit
-.Op Fl t Ar target
-.Fl d
-.Ar debug
-.\"------------------------------------------------------------
-.\" ncrcontrol [-Nsystem] [-u unit] -w -k torture
-.\"------------------------------------------------------------
-.Nm ncrcontrol
-.Op Fl N Ar system
-.Op Fl u Ar unit
-.Fl w
-.Fl k
-.Ar torture
-.\"
-.\"=====================================================================
-.\"
-.Sh DESCRIPTION
-The
-.Nm ncrcontrol
-command symbolically displays the contents of the ncr810/ncr825
-pci/scsi driver control structure.
-There are a number of output formats,
-depending on the options for the information presented.
-It may be used to set some values, too.
-
-.\"--------------------------------------------------------
-.\" ncrcontrol [-Mcore] [-Nsystem] [-u unit] [-v] [-v] -i
-.\"--------------------------------------------------------
-The first form of the command displays an overview of the
-connected targets. The
-.Fl v
-requests a verbose output.
-
-.\"--------------------------------------------------------
-.\" ncrcontrol [-N system] [-u unit] [-p wait]
-.\"--------------------------------------------------------
-Using the second form, with a
-.Ar wait
-interval specified,
-.Nm ncrcontrol
-will continuously display the information regarding data
-traffic on the selected scsi bus.
-
-.\"------------------------------------------------------------
-.\" ncrcontrol [-Nsystem] [-u unit] [-t target] -s name=value
-.\"------------------------------------------------------------
-The third form sets a configuration value for one or all
-targets of a selected scsi bus.
-It normally is not needed, if the device driver options are
-correctly set in kernel configuration.
-
-.\"------------------------------------------------------------
-.\" ncrcontrol [-M core] [-N system] [-u unit] [-t target] -w -d pattern
-.\"------------------------------------------------------------
-The forth form presents the content of the drivers control
-structure. By the
-.Ar pattern
-certain parts of the output can be enabled/disabled.
-It's only used to debug the driver.
-
-.\"------------------------------------------------------------
-.\" ncrcontrol [-N system] [-u unit] -w -k torture
-.\"------------------------------------------------------------
-With the last form certain driver problems can be forced.
-THIS MAY CRASH YOUR SYSTEM.
-It's only used to debug the driver.
-
-.\"
-.\"=====================================================================
-.\"
-.Pp
-The options have the following meaning:
-.Bl -tag -width flag
-.\"------------------------------------------------------------
-.\" -d pattern
-.\"------------------------------------------------------------
-.It Fl d
-Show the content of the drivers control structure.
-The
-.Ar pattern
-selects the fields, which are displayed. With
-.Fl d?
-you can get a list of valid flags.
-
-.\"------------------------------------------------------------
-.\" -i
-.\"------------------------------------------------------------
-.It Fl i
-Show the configuration state of the connected targets.
-With the
-.Fl v
-option you can request a more verbose information.
-
-.\"------------------------------------------------------------
-.\" -k torture
-.\"------------------------------------------------------------
-.It Fl k
-Force certain driver problems to check the error recovery
-functions. This option should only be used by the developers.
-With
-.Fl k?
-you can get a list of possible tortures.
-This option requires the
-.Fl w
-option to be set.
-
-.\"------------------------------------------------------------
-.\" -M core
-.\"------------------------------------------------------------
-.It Fl M
-Extract values associated with the name list from the specified core
-instead of the default
-.Pa /dev/kmem .
-.\"------------------------------------------------------------
-.\" -N system
-.\"------------------------------------------------------------
-.It Fl N
-Extract the name list from the specified system instead of the default
-.Pa /386bsd .
-
-.\"------------------------------------------------------------
-.\" -p wait
-.\"------------------------------------------------------------
-When
-.Nm ncrcontrol
-is invoked with a
-.Ar wait
-interval argument, it displays a running count of statistics related to
-the transfers on the selected scsi bus.
-
-This display consists of the number of transfers and number of transferred
-byted for the controller and for each connected target.
-
-(NOT YET COMPLETE)
-
-.\"------------------------------------------------------------
-.\" -s field=value
-.\"------------------------------------------------------------
-.It Fl s
-Set a configuration value for one or more targets.
-One ore more targets can be selected by the
-.Fl t
-option. If no target is selected, then the field is set
-for all connect targets.
-
-(NOT YET COMPLETE)
-
-.\"------------------------------------------------------------
-.\" -t target
-.\"------------------------------------------------------------
-.It Fl t
-Select the target for the
-.Fl s
-option. This option may be given more than one time.
-
-.\"------------------------------------------------------------
-.\" -u unit
-.\"------------------------------------------------------------
-.It Fl u
-Select the controller unit.
-If this option is not given, then controller 0 is assumed.
-Most systems have only one controller.
-
-.\"------------------------------------------------------------
-.\" -v
-.\"------------------------------------------------------------
-.It Fl v
-Enable verbose output for the
-.Fl i
-option.
-
-.\"------------------------------------------------------------
-.\" -w
-.\"------------------------------------------------------------
-.It Fl w
-Wizard option.
-Enable the usage of the
-.Fl k
-option.
-
-.\"
-.\"=====================================================================
-.\"
-.Pp
-(NOT YET COMPLETE)
-
-.\"
-.\"=====================================================================
-.\"
-.Sh SEE ALSO
-.Xr scsi 5
-
-.\"
-.\"=====================================================================
-.\"
-.Sh HISTORY
-The
-.Nm ncrcontrol
-command was hacked for
-.Bx 386
-and ported to version 1.1 of
-.Bx Free
-by Wolfgang Stanglmeier <wolf@dentaro.GUN.de>.
-It was ported to
-.Bx Net
-by Charles M. Hannum <mycroft@gnu.ai.mit.edu>
-and to version 2.0 of
-.Bx Free
-by Stefan Esser <se@zpr.Uni-Koeln.DE>.
-
-.\"
-.\"=====================================================================
-.\"
-.Sh BUGS
-The
-.Nm ncrcontrol
-was hacked as a debugging tool for the ncr810 driver.
-It should be deleted sometimes.
-There should be a general tool to change device driver options
-on the fly.
-The statistical data should be gathered by the generic scsi driver.
diff --git a/usr.sbin/pkg_manage/pkg_del-inst.hlp b/usr.sbin/pkg_manage/pkg_del-inst.hlp
deleted file mode 100644
index 5d0b208..0000000
--- a/usr.sbin/pkg_manage/pkg_del-inst.hlp
+++ /dev/null
@@ -1,18 +0,0 @@
-
- *********************************************
- * Help for '2. DELETE an installed package' *
- *********************************************
-
-Choose a package from the list of installed packages to delete.
-Move the cursor to the package to be deleted and press enter.
-
-You may now select to either:
-
-1. Simulate delete Only display the commands that will
- be executed to delete the package,
- without actually executing them.
-2. Delete This will actually delete the
- package.
-3. Cancel Return to the package selection menu.
-
-(use arrow-keys or digit to choose option and press enter)
diff --git a/usr.sbin/pkg_manage/pkg_view-inst.hlp b/usr.sbin/pkg_manage/pkg_view-inst.hlp
deleted file mode 100644
index c74d400..0000000
--- a/usr.sbin/pkg_manage/pkg_view-inst.hlp
+++ /dev/null
@@ -1,12 +0,0 @@
-
- ********************************
- * Help for '1. View installed' *
- ********************************
-
-Choose a package from the list to see the description for the package.
-
-Move the cursor with the arrow-keys and PgUp and PgDn, press enter
-when the cursor highlights the right package.
-
-When viewing the description use PgUp and PgDn and arrow-keys to move
-through the text.
diff --git a/usr.sbin/sliplogin/slip.hosts b/usr.sbin/sliplogin/slip.hosts
deleted file mode 100644
index f6ebf40..0000000
--- a/usr.sbin/sliplogin/slip.hosts
+++ /dev/null
@@ -1,11 +0,0 @@
-# @(#)slip.hosts 8.1 (Berkeley) 6/6/93
-#
-# login local-addr remote-addr mask opt1 opt2
-# (normal,compress,noicmp)
-#
-Schez vangogh chez 0xffffff00 compress
-Sjun vangogh 128.32.130.36 0xffffff00 normal
-Sleconte vangogh leconte 0xffffff00 compress
-Sleeb vangogh leeb 0xffffff00 compress
-Smjk vangogh pissaro-sl 0xffffff00 compress
-Soxford vangogh oxford 0xffffff00 compress
diff --git a/usr.sbin/sliplogin/slip.login b/usr.sbin/sliplogin/slip.login
deleted file mode 100644
index 3c70095..0000000
--- a/usr.sbin/sliplogin/slip.login
+++ /dev/null
@@ -1,12 +0,0 @@
-#!/bin/sh -
-#
-# @(#)slip.login 8.1 (Berkeley) 6/6/93
-
-#
-# generic login file for a slip line. sliplogin invokes this with
-# the parameters:
-# 1 2 3 4 5 6 7-n
-# slipunit ttyspeed loginname local-addr remote-addr mask opt-args
-#
-/sbin/ifconfig sl$1 inet $4 $5 netmask $6
-exit
diff --git a/usr.sbin/spkrtest/spkrtest.sh b/usr.sbin/spkrtest/spkrtest.sh
deleted file mode 100644
index 319f352..0000000
--- a/usr.sbin/spkrtest/spkrtest.sh
+++ /dev/null
@@ -1,38 +0,0 @@
-:
-#
-# Test script for the speaker driver
-#
-# v1.0 by Eric S. Raymond (Feb 1990)
-# v1.1 rightstuff contributed by Eric S. Tiedemann (est@snark.thyrsus.com)
-#
-reveille="t255l8c.f.afc~c.f.afc~c.f.afc.f.a..f.~c.f.afc~c.f.afc~c.f.afc~c.f.."
-contact="<cd<a#~<a#>f"
-dance="t240<cfcfgagaa#b#>dc<a#a.~fg.gaa#.agagegc.~cfcfgagaa#b#>dc<a#a.~fg.gga.agfgfgf."
-loony="t255cf8f8edc<a>~cf8f8edd#e~ce8cdce8cd.<a>c8c8c#def8af8"
-sinister="mst200o2ola.l8bc.~a.~>l2d#"
-rightstuff="olcega.a8f>cd2bgc.c8dee2"
-toccata="msl16oldcd4mll8pcb-agf+4.g4p4<msl16dcd4mll8pa.a+f+4p16g4"
-startrek="l2b.f+.p16a.c+.p l4mn<b.>e8a2mspg+e8c+f+8b2"
-
-case $1 in
-reveille) echo $reveille >/dev/speaker;;
-contact) echo $contact >/dev/speaker;;
-dance) echo $dance >/dev/speaker;;
-loony) echo $loony >/dev/speaker;;
-sinister) echo $sinister >/dev/speaker;;
-rightstuff) echo $rightstuff >/dev/speaker;;
-toccata) echo $toccata >/dev/speaker;;
-startrek) echo $startrek >/dev/speaker;;
-*)
- echo "No such tune. Available tunes are:"
- echo
- echo "reveille -- Reveille"
- echo "contact -- Contact theme from Close Encounters"
- echo "dance -- Lord of the Dance (aka Simple Gifts)"
- echo "loony -- Loony Toons theme"
- echo "sinister -- standard villain's entrance music"
- echo "rightstuff -- a trope from \"The Right Stuff\" score by Bill Conti"
- echo "toccata -- opening bars of Bach's Toccata and Fugue in D Minor"
- echo "startrek -- opening bars of the theme from Star Trek Classic"
- ;;
-esac
diff --git a/usr.sbin/tcpdump/tcpdump/bpf_image.c b/usr.sbin/tcpdump/tcpdump/bpf_image.c
deleted file mode 100644
index d36eab2..0000000
--- a/usr.sbin/tcpdump/tcpdump/bpf_image.c
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: bpf_image.c,v 1.10 92/01/26 21:01:16 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <sys/time.h>
-#include <net/bpf.h>
-
-char *
-bpf_image(p, n)
- struct bpf_insn *p;
- int n;
-{
- int v;
- char *fmt, *op;
- static char image[256];
- char operand[64];
-
- v = p->k;
- switch (p->code) {
-
- default:
- op = "unimp";
- fmt = "0x%x";
- v = p->code;
- break;
-
- case BPF_RET|BPF_K:
- op = "ret";
- fmt = "#%d";
- break;
-
- case BPF_RET|BPF_A:
- op = "ret";
- fmt = "";
- break;
-
- case BPF_LD|BPF_W|BPF_ABS:
- op = "ld";
- fmt = "[%d]";
- break;
-
- case BPF_LD|BPF_H|BPF_ABS:
- op = "ldh";
- fmt = "[%d]";
- break;
-
- case BPF_LD|BPF_B|BPF_ABS:
- op = "ldb";
- fmt = "[%d]";
- break;
-
- case BPF_LD|BPF_W|BPF_LEN:
- op = "ld";
- fmt = "#pktlen";
- break;
-
- case BPF_LD|BPF_W|BPF_IND:
- op = "ld";
- fmt = "[x + %d]";
- break;
-
- case BPF_LD|BPF_H|BPF_IND:
- op = "ldh";
- fmt = "[x + %d]";
- break;
-
- case BPF_LD|BPF_B|BPF_IND:
- op = "ldb";
- fmt = "[x + %d]";
- break;
-
- case BPF_LD|BPF_IMM:
- op = "ld";
- fmt = "#0x%x";
- break;
-
- case BPF_LDX|BPF_IMM:
- op = "ldx";
- fmt = "#0x%x";
- break;
-
- case BPF_LDX|BPF_MSH|BPF_B:
- op = "ldxb";
- fmt = "4*([%d]&0xf)";
- break;
-
- case BPF_LD|BPF_MEM:
- op = "ld";
- fmt = "M[%d]";
- break;
-
- case BPF_LDX|BPF_MEM:
- op = "ldx";
- fmt = "M[%d]";
- break;
-
- case BPF_ST:
- op = "st";
- fmt = "M[%d]";
- break;
-
- case BPF_STX:
- op = "stx";
- fmt = "M[%d]";
- break;
-
- case BPF_JMP|BPF_JA:
- op = "ja";
- fmt = "%d";
- v = n + p->k;
- break;
-
- case BPF_JMP|BPF_JGT|BPF_K:
- op = "jgt";
- fmt = "#0x%x";
- break;
-
- case BPF_JMP|BPF_JGE|BPF_K:
- op = "jge";
- fmt = "#0x%x";
- break;
-
- case BPF_JMP|BPF_JEQ|BPF_K:
- op = "jeq";
- fmt = "#0x%x";
- break;
-
- case BPF_JMP|BPF_JSET|BPF_K:
- op = "jset";
- fmt = "#0x%x";
- break;
-
- case BPF_JMP|BPF_JGT|BPF_X:
- op = "jgt";
- fmt = "x";
- break;
-
- case BPF_JMP|BPF_JGE|BPF_X:
- op = "jge";
- fmt = "x";
- break;
-
- case BPF_JMP|BPF_JEQ|BPF_X:
- op = "jeq";
- fmt = "x";
- break;
-
- case BPF_JMP|BPF_JSET|BPF_X:
- op = "jset";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_ADD|BPF_X:
- op = "add";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_SUB|BPF_X:
- op = "sub";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_MUL|BPF_X:
- op = "mul";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_DIV|BPF_X:
- op = "div";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_AND|BPF_X:
- op = "and";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_OR|BPF_X:
- op = "or";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_LSH|BPF_X:
- op = "lsh";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_RSH|BPF_X:
- op = "rsh";
- fmt = "x";
- break;
-
- case BPF_ALU|BPF_ADD|BPF_K:
- op = "add";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_SUB|BPF_K:
- op = "sub";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_MUL|BPF_K:
- op = "mul";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_DIV|BPF_K:
- op = "div";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_AND|BPF_K:
- op = "and";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_OR|BPF_K:
- op = "or";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_LSH|BPF_K:
- op = "lsh";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_RSH|BPF_K:
- op = "rsh";
- fmt = "#%d";
- break;
-
- case BPF_ALU|BPF_NEG:
- op = "neg";
- fmt = "";
- break;
-
- case BPF_MISC|BPF_TAX:
- op = "tax";
- fmt = "";
- break;
-
- case BPF_MISC|BPF_TXA:
- op = "txa";
- fmt = "";
- break;
- }
- (void)sprintf(operand, fmt, v);
- (void)sprintf(image,
- (BPF_CLASS(p->code) == BPF_JMP &&
- BPF_OP(p->code) != BPF_JA) ?
- "(%03d) %-8s %-16s jt %d\tjf %d"
- : "(%03d) %-8s %s",
- n, op, operand, n + 1 + p->jt, n + 1 + p->jf);
- return image;
-}
diff --git a/usr.sbin/tcpdump/tcpdump/etherent.c b/usr.sbin/tcpdump/tcpdump/etherent.c
deleted file mode 100644
index 9d7ee80..0000000
--- a/usr.sbin/tcpdump/tcpdump/etherent.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: etherent.c,v 1.2 90/09/20 23:16:06 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include "interface.h"
-
-#ifndef ETHER_SERVICE
-
-#include "etherent.h"
-
-/* Hex digit to integer. */
-static inline int
-xdtoi(c)
-{
- if (isdigit(c))
- return c - '0';
- else if (islower(c))
- return c - 'a' + 10;
- else
- return c - 'A' + 10;
-}
-
-static inline int
-skip_space(f)
- FILE *f;
-{
- int c;
-
- do {
- c = getc(f);
- } while (isspace(c) && c != '\n');
-
- return c;
-}
-
-static inline int
-skip_line(f)
- FILE *f;
-{
- int c;
-
- do
- c = getc(f);
- while (c != '\n' && c != EOF);
-
- return c;
-}
-
-struct etherent *
-next_etherent(fp)
- FILE *fp;
-{
- register int c, d, i;
- char *bp;
- static struct etherent e;
- static int nline = 1;
- top:
- while (nline) {
- /* Find addr */
- c = skip_space(fp);
- if (c == '\n')
- continue;
- /* If this is a comment, or first thing on line
- cannot be etehrnet address, skip the line. */
- else if (!isxdigit(c))
- c = skip_line(fp);
- else {
- /* must be the start of an address */
- for (i = 0; i < 6; i += 1) {
- d = xdtoi(c);
- c = getc(fp);
- if (c != ':') {
- d <<= 4;
- d |= xdtoi(c);
- c = getc(fp);
- }
- e.addr[i] = d;
- if (c != ':')
- break;
- c = getc(fp);
- }
- nline = 0;
- }
- if (c == EOF)
- return 0;
- }
-
- /* If we started a new line, 'c' holds the char past the ether addr,
- which we assume is white space. If we are continuning a line,
- 'c' is garbage. In either case, we can throw it away. */
-
- c = skip_space(fp);
- if (c == '\n') {
- nline = 1;
- goto top;
- }
- else if (c == '#') {
- (void)skip_line(fp);
- nline = 1;
- goto top;
- }
- else if (c == EOF)
- return 0;
-
- /* Must be a name. */
- bp = e.name;
- /* Use 'd' to prevent buffer overflow. */
- d = sizeof(e.name) - 1;
- do {
- *bp++ = c;
- c = getc(fp);
- } while (!isspace(c) && c != EOF && --d > 0);
- *bp = '\0';
- if (c == '\n')
- nline = 1;
-
- return &e;
-}
-
-#endif
diff --git a/usr.sbin/tcpdump/tcpdump/etherent.h b/usr.sbin/tcpdump/tcpdump/etherent.h
deleted file mode 100644
index 83ebaab..0000000
--- a/usr.sbin/tcpdump/tcpdump/etherent.h
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: etherent.h,v 1.2 90/09/20 23:16:17 mccanne Exp $ (LBL)
- */
-
-/* File name of ethernet address data base. */
-
-#define ETHERS_FILE "/etc/ethers"
-
-struct etherent {
- u_char addr[6];
- char name[122];
-};
-
-struct etherent *next_etherent();
-
diff --git a/usr.sbin/tcpdump/tcpdump/etherproto.h b/usr.sbin/tcpdump/tcpdump/etherproto.h
deleted file mode 100644
index 5c0e245..0000000
--- a/usr.sbin/tcpdump/tcpdump/etherproto.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: etherproto.h,v 1.7 90/10/10 15:04:04 mccanne Exp $ (LBL)
- */
-
-/* Map between Ethernet protocol types and names */
-
-/* Add other Ethernet packet types here */
-#ifndef ETHERTYPE_SPRITE
-#define ETHERTYPE_SPRITE 0x0500
-#endif
-#ifndef ETHERTYPE_MOPDL
-#define ETHERTYPE_MOPDL 0x6001
-#endif
-#ifndef ETHERTYPE_MOPRC
-#define ETHERTYPE_MOPRC 0x6002
-#endif
-#ifndef ETHERTYPE_DN
-#define ETHERTYPE_DN 0x6003
-#endif
-#ifndef ETHERTYPE_LAT
-#define ETHERTYPE_LAT 0x6004
-#endif
-#ifndef ETHERTYPE_LANBRIDGE
-#define ETHERTYPE_LANBRIDGE 0x8038
-#endif
-#ifndef ETHERTYPE_VEXP
-#define ETHERTYPE_VEXP 0x805b
-#endif
-#ifndef ETHERTYPE_VPROD
-#define ETHERTYPE_VPROD 0x805c
-#endif
-#ifndef ETHERTYPE_LOOPBACK
-#define ETHERTYPE_LOOPBACK 0x9000
-#endif
-
-#ifndef ETHERTYPE_ATALK
-#define ETHERTYPE_ATALK 0x809b /* XXX */
-#endif
-#ifndef ETHERTYPE_AARP
-#define ETHERTYPE_AARP 0x80f3
-#endif
-#ifndef ETHERTYPE_NS
-#define ETHERTYPE_NS 0x0600
-#endif
-
-struct eproto {
- char *s;
- u_short p;
-};
-
-extern struct eproto eproto_db[];
diff --git a/usr.sbin/tcpdump/tcpdump/gencode.c b/usr.sbin/tcpdump/tcpdump/gencode.c
deleted file mode 100644
index 8cb48ea..0000000
--- a/usr.sbin/tcpdump/tcpdump/gencode.c
+++ /dev/null
@@ -1,1384 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: gencode.c,v 1.33 92/05/22 16:38:39 mccanne Exp $ (LBL)";
-#endif
-
-#ifdef __STDC__
-#include <stdlib.h>
-#endif
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-
-#include <sys/time.h>
-#include <net/bpf.h>
-
-#include "interface.h"
-#include "gencode.h"
-#include "nametoaddr.h"
-#include "extract.h"
-
-#define JMP(c) ((c)|BPF_JMP|BPF_K)
-
-extern struct bpf_insn *icode_to_fcode();
-extern u_long net_mask();
-static void init_linktype();
-
-static int alloc_reg();
-static void free_reg();
-
-static struct block *root;
-
-/*
- * We divy out chunks of memory rather than call malloc each time so
- * we don't have to worry about leaking memory. It's probably
- * not a big deal if all this memory was wasted but it this ever
- * goes into a library that would probably not be a good idea.
- */
-#define NCHUNKS 16
-#define CHUNK0SIZE 1024
-struct chunk {
- u_int n_left;
- void *m;
-};
-
-static struct chunk chunks[NCHUNKS];
-static int cur_chunk;
-
-static void *
-newchunk(n)
- u_int n;
-{
- struct chunk *cp;
- int k, size;
-
- /* XXX Round up to nearest long. */
- n = (n + sizeof(long) - 1) & ~(sizeof(long) - 1);
-
- cp = &chunks[cur_chunk];
- if (n > cp->n_left) {
- ++cp, k = ++cur_chunk;
- if (k >= NCHUNKS)
- error("out of memory");
- size = CHUNK0SIZE << k;
- cp->m = (void *)malloc(size);
- bzero((char *)cp->m, size);
- cp->n_left = size;
- if (n > size)
- error("out of memory");
- }
- cp->n_left -= n;
- return (void *)((char *)cp->m + cp->n_left);
-}
-
-static void
-freechunks()
-{
- int i;
-
- for (i = 0; i < NCHUNKS; ++i)
- if (chunks[i].m)
- free(chunks[i].m);
-}
-
-static inline struct block *
-new_block(code)
- int code;
-{
- struct block *p;
-
- p = (struct block *)newchunk(sizeof(*p));
- p->s.code = code;
- p->head = p;
-
- return p;
-}
-
-static inline struct slist *
-new_stmt(code)
- int code;
-{
- struct slist *p;
-
- p = (struct slist *)newchunk(sizeof(*p));
- p->s.code = code;
-
- return p;
-}
-
-static struct block *
-gen_retblk(v)
- int v;
-{
- struct block *b = new_block(BPF_RET|BPF_K);
-
- b->s.k = v;
- return b;
-}
-
-static inline void
-syntax()
-{
- error("syntax error in filter expression");
-}
-
-static u_long netmask;
-
-struct bpf_program *
-parse(buf, Oflag, linktype, mask)
- char *buf;
- int Oflag;
- int linktype;
- u_long mask;
-{
- extern int n_errors;
- static struct bpf_program F;
- struct bpf_insn *p;
- int len;
-
- netmask = mask;
-
- F.bf_insns = 0;
- F.bf_len = 0;
-
- lex_init(buf ? buf : "");
- init_linktype(linktype);
- yyparse();
-
- if (n_errors)
- syntax();
-
- if (root == 0)
- root = gen_retblk(snaplen);
-
- if (Oflag) {
- optimize(&root);
- if (root == 0 ||
- (root->s.code == (BPF_RET|BPF_K) && root->s.k == 0))
- error("expression rejects all packets");
- }
- p = icode_to_fcode(root, &len);
- F.bf_insns = p;
- F.bf_len = len;
-
- freechunks();
- return &F;
-}
-
-/*
- * Backpatch the blocks in 'list' to 'target'. The 'sense' field indicates
- * which of the jt and jf fields has been resolved and which is a pointer
- * back to another unresolved block (or nil). At least one of the fields
- * in each block is already resolved.
- */
-static void
-backpatch(list, target)
- struct block *list, *target;
-{
- struct block *next;
-
- while (list) {
- if (!list->sense) {
- next = JT(list);
- JT(list) = target;
- } else {
- next = JF(list);
- JF(list) = target;
- }
- list = next;
- }
-}
-
-/*
- * Merge the lists in b0 and b1, using the 'sense' field to indicate
- * which of jt and jf is the link.
- */
-static void
-merge(b0, b1)
- struct block *b0, *b1;
-{
- register struct block **p = &b0;
-
- /* Find end of list. */
- while (*p)
- p = !((*p)->sense) ? &JT(*p) : &JF(*p);
-
- /* Concatenate the lists. */
- *p = b1;
-}
-
-void
-finish_parse(p)
- struct block *p;
-{
- backpatch(p, gen_retblk(snaplen));
- p->sense = !p->sense;
- backpatch(p, gen_retblk(0));
- root = p->head;
-}
-
-void
-gen_and(b0, b1)
- struct block *b0, *b1;
-{
- backpatch(b0, b1->head);
- b0->sense = !b0->sense;
- b1->sense = !b1->sense;
- merge(b1, b0);
- b1->sense = !b1->sense;
- b1->head = b0->head;
-}
-
-void
-gen_or(b0, b1)
- struct block *b0, *b1;
-{
- b0->sense = !b0->sense;
- backpatch(b0, b1->head);
- b0->sense = !b0->sense;
- merge(b1, b0);
- b1->head = b0->head;
-}
-
-void
-gen_not(b)
- struct block *b;
-{
- b->sense = !b->sense;
-}
-
-static struct block *
-gen_cmp(offset, size, v)
- u_int offset, size;
- long v;
-{
- struct slist *s;
- struct block *b;
-
- s = new_stmt(BPF_LD|BPF_ABS|size);
- s->s.k = offset;
-
- b = new_block(JMP(BPF_JEQ));
- b->stmts = s;
- b->s.k = v;
-
- return b;
-}
-
-struct block *
-gen_mcmp(offset, size, v, mask)
- u_int offset, size;
- long v;
- u_long mask;
-{
- struct block *b = gen_cmp(offset, size, v);
- struct slist *s;
-
- if (mask != 0xffffffff) {
- s = new_stmt(BPF_ALU|BPF_AND|BPF_K);
- s->s.k = mask;
- b->stmts->next = s;
- }
- return b;
-}
-
-struct block *
-gen_bcmp(offset, size, v)
- u_int offset;
- u_int size;
- u_char *v;
-{
- struct block *b, *tmp;
- int k;
-
- b = 0;
- while (size >= 4) {
- k = size - 4;
- tmp = gen_cmp(offset + k, BPF_W, EXTRACT_LONG(&v[k]));
- if (b != 0)
- gen_and(b, tmp);
- b = tmp;
- size -= 4;
- }
- while (size >= 2) {
- k = size - 2;
- tmp = gen_cmp(offset + k, BPF_H, (long)EXTRACT_SHORT(&v[k]));
- if (b != 0)
- gen_and(b, tmp);
- b = tmp;
- size -= 2;
- }
- if (size > 0) {
- tmp = gen_cmp(offset, BPF_B, (long)v[0]);
- if (b != 0)
- gen_and(b, tmp);
- b = tmp;
- }
- return b;
-}
-
-/*
- * Various code contructs need to know the layout of the data link
- * layer. These variables give the necessary offsets. off_linktype
- * is set to -1 for no encapsulation, in which case, IP is assumed.
- */
-static u_int off_linktype;
-static u_int off_nl;
-static int linktype;
-
-static void
-init_linktype(type)
- int type;
-{
- linktype = type;
-
- switch (type) {
-
- case DLT_EN10MB:
- off_linktype = 12;
- off_nl = 14;
- return;
-
- case DLT_SLIP:
- /*
- * SLIP doesn't have a link level type. The 16 byte
- * header is hacked into our SLIP driver.
- */
- off_linktype = -1;
- off_nl = 16;
- return;
-
- case DLT_NULL:
- off_linktype = -1;
- off_nl = 0;
- return;
-
- case DLT_PPP:
- off_linktype = 2;
- off_nl = 4;
- return;
-
- case DLT_FDDI:
- off_linktype = 19;
- off_nl = 21;
- return;
-
- case DLT_IEEE802:
- off_linktype = 20;
- off_nl = 22;
- return;
- }
- error("unknown data link type 0x%x", linktype);
- /* NOTREACHED */
-}
-
-static struct block *
-gen_uncond(rsense)
- int rsense;
-{
- struct block *b;
- struct slist *s;
-
- s = new_stmt(BPF_LD|BPF_IMM);
- s->s.k = !rsense;
- b = new_block(JMP(BPF_JEQ));
- b->stmts = s;
-
- return b;
-}
-
-static inline struct block *
-gen_true()
-{
- return gen_uncond(1);
-}
-
-static inline struct block *
-gen_false()
-{
- return gen_uncond(0);
-}
-
-struct block *
-gen_linktype(proto)
- int proto;
-{
- switch (linktype) {
- case DLT_SLIP:
- if (proto == ETHERTYPE_IP)
- return gen_true();
- else
- return gen_false();
-
- case DLT_PPP:
- if (proto == ETHERTYPE_IP)
- proto = 0x0021; /* XXX - need ppp.h defs */
- break;
- }
- return gen_cmp(off_linktype, BPF_H, (long)proto);
-}
-
-static struct block *
-gen_hostop(addr, mask, dir, proto, src_off, dst_off)
- u_long addr;
- u_long mask;
- int dir, proto;
- u_int src_off, dst_off;
-{
- struct block *b0, *b1;
- u_int offset;
-
- switch (dir) {
-
- case Q_SRC:
- offset = src_off;
- break;
-
- case Q_DST:
- offset = dst_off;
- break;
-
- case Q_AND:
- b0 = gen_hostop(addr, mask, Q_SRC, proto, src_off, dst_off);
- b1 = gen_hostop(addr, mask, Q_DST, proto, src_off, dst_off);
- gen_and(b0, b1);
- return b1;
-
- case Q_OR:
- case Q_DEFAULT:
- b0 = gen_hostop(addr, mask, Q_SRC, proto, src_off, dst_off);
- b1 = gen_hostop(addr, mask, Q_DST, proto, src_off, dst_off);
- gen_or(b0, b1);
- return b1;
-
- default:
- abort();
- }
- b0 = gen_linktype(proto);
- b1 = gen_mcmp(offset, BPF_W, (long)addr, mask);
- gen_and(b0, b1);
- return b1;
-}
-
-static struct block *
-gen_ehostop(eaddr, dir)
- u_char *eaddr;
- int dir;
-{
- struct block *b0, *b1;
-
- switch (dir) {
- case Q_SRC:
- return gen_bcmp(6, 6, eaddr);
-
- case Q_DST:
- return gen_bcmp(0, 6, eaddr);
-
- case Q_AND:
- b0 = gen_ehostop(eaddr, Q_SRC);
- b1 = gen_ehostop(eaddr, Q_DST);
- gen_and(b0, b1);
- return b1;
-
- case Q_DEFAULT:
- case Q_OR:
- b0 = gen_ehostop(eaddr, Q_SRC);
- b1 = gen_ehostop(eaddr, Q_DST);
- gen_or(b0, b1);
- return b1;
- }
- abort();
- /* NOTREACHED */
-}
-
-static struct block *
-gen_host(addr, mask, proto, dir)
- u_long addr;
- u_long mask;
- int proto;
- int dir;
-{
- struct block *b0, *b1;
-
- switch (proto) {
-
- case Q_DEFAULT:
- b0 = gen_host(addr, mask, Q_IP, dir);
- b1 = gen_host(addr, mask, Q_ARP, dir);
- gen_or(b0, b1);
- b0 = gen_host(addr, mask, Q_RARP, dir);
- gen_or(b1, b0);
- return b0;
-
- case Q_IP:
- return gen_hostop(addr, mask, dir, ETHERTYPE_IP,
- off_nl + 12, off_nl + 16);
-
- case Q_RARP:
- return gen_hostop(addr, mask, dir, ETHERTYPE_REVARP,
- off_nl + 14, off_nl + 24);
-
- case Q_ARP:
- return gen_hostop(addr, mask, dir, ETHERTYPE_ARP,
- off_nl + 14, off_nl + 24);
-
- case Q_TCP:
- error("'tcp' modifier applied to host");
-
- case Q_UDP:
- error("'udp' modifier applied to host");
-
- case Q_ICMP:
- error("'icmp' modifier applied to host");
- }
- abort();
- /* NOTREACHED */
-}
-
-static struct block *
-gen_gateway(eaddr, alist, proto, dir)
- u_char *eaddr;
- u_long **alist;
- int proto;
- int dir;
-{
- struct block *b0, *b1, *tmp;
-
- if (dir != 0)
- error("direction applied to 'gateway'");
-
- switch (proto) {
- case Q_DEFAULT:
- case Q_IP:
- case Q_ARP:
- case Q_RARP:
- b0 = gen_ehostop(eaddr, Q_OR);
- b1 = gen_host(**alist++, 0xffffffffL, proto, Q_OR);
- while (*alist) {
- tmp = gen_host(**alist++, 0xffffffffL, proto, Q_OR);
- gen_or(b1, tmp);
- b1 = tmp;
- }
- gen_not(b1);
- gen_and(b0, b1);
- return b1;
- }
- error("illegal modifier of 'gateway'");
- /* NOTREACHED */
-}
-
-struct block *
-gen_proto_abbrev(proto)
- int proto;
-{
- struct block *b0, *b1;
-
- switch (proto) {
-
- case Q_TCP:
- b0 = gen_linktype(ETHERTYPE_IP);
- b1 = gen_cmp(off_nl + 9, BPF_B, (long)IPPROTO_TCP);
- gen_and(b0, b1);
- break;
-
- case Q_UDP:
- b0 = gen_linktype(ETHERTYPE_IP);
- b1 = gen_cmp(off_nl + 9, BPF_B, (long)IPPROTO_UDP);
- gen_and(b0, b1);
- break;
-
- case Q_ICMP:
- b0 = gen_linktype(ETHERTYPE_IP);
- b1 = gen_cmp(off_nl + 9, BPF_B, (long)IPPROTO_ICMP);
- gen_and(b0, b1);
- break;
-
- case Q_IP:
- b1 = gen_linktype(ETHERTYPE_IP);
- break;
-
- case Q_ARP:
- b1 = gen_linktype(ETHERTYPE_ARP);
- break;
-
- case Q_RARP:
- b1 = gen_linktype(ETHERTYPE_REVARP);
- break;
-
- case Q_LINK:
- error("link layer applied in wrong context");
-
- default:
- abort();
- }
- return b1;
-}
-
-static struct block *
-gen_ipfrag()
-{
- struct slist *s;
- struct block *b;
-
- /* not ip frag */
- s = new_stmt(BPF_LD|BPF_H|BPF_ABS);
- s->s.k = off_nl + 6;
- b = new_block(JMP(BPF_JSET));
- b->s.k = 0x1fff;
- b->stmts = s;
- gen_not(b);
-
- return b;
-}
-
-static struct block *
-gen_portatom(off, v)
- int off;
- long v;
-{
- struct slist *s;
- struct block *b;
-
- s = new_stmt(BPF_LDX|BPF_MSH|BPF_B);
- s->s.k = off_nl;
-
- s->next = new_stmt(BPF_LD|BPF_IND|BPF_H);
- s->next->s.k = off_nl + off;
-
- b = new_block(JMP(BPF_JEQ));
- b->stmts = s;
- b->s.k = v;
-
- return b;
-}
-
-struct block *
-gen_portop(port, proto, dir)
- int port;
- int proto;
- int dir;
-{
- struct block *b0, *b1, *tmp;
-
- /* ip proto 'proto' */
- tmp = gen_cmp(off_nl + 9, BPF_B, (long)proto);
- b0 = gen_ipfrag();
- gen_and(tmp, b0);
-
- switch (dir) {
- case Q_SRC:
- b1 = gen_portatom(0, (long)port);
- break;
-
- case Q_DST:
- b1 = gen_portatom(2, (long)port);
- break;
-
- case Q_OR:
- case Q_DEFAULT:
- tmp = gen_portatom(0, (long)port);
- b1 = gen_portatom(2, (long)port);
- gen_or(tmp, b1);
- break;
-
- case Q_AND:
- tmp = gen_portatom(0, (long)port);
- b1 = gen_portatom(2, (long)port);
- gen_and(tmp, b1);
- break;
-
- default:
- abort();
- }
- gen_and(b0, b1);
-
- return b1;
-}
-
-static struct block *
-gen_port(port, ip_proto, dir)
- int port;
- int ip_proto;
- int dir;
-{
- struct block *b0, *b1, *tmp;
-
- /* ether proto ip */
- b0 = gen_linktype(ETHERTYPE_IP);
-
- switch (ip_proto) {
- case IPPROTO_UDP:
- case IPPROTO_TCP:
- b1 = gen_portop(port, ip_proto, dir);
- break;
-
- case PROTO_UNDEF:
- tmp = gen_portop(port, IPPROTO_TCP, dir);
- b1 = gen_portop(port, IPPROTO_UDP, dir);
- gen_or(tmp, b1);
- break;
-
- default:
- abort();
- }
- gen_and(b0, b1);
- return b1;
-}
-
-int
-lookup_proto(name, proto)
- char *name;
- int proto;
-{
- int v;
-
- switch (proto) {
- case Q_DEFAULT:
- case Q_IP:
- v = s_nametoproto(name);
- if (v == PROTO_UNDEF)
- error("unknown ip proto '%s'", name);
- break;
-
- case Q_LINK:
- /* XXX should look up h/w protocol type based on linktype */
- v = s_nametoeproto(name);
- if (v == PROTO_UNDEF)
- error("unknown ether proto '%s'", name);
- break;
-
- default:
- v = PROTO_UNDEF;
- break;
- }
- return v;
-}
-
-struct block *
-gen_proto(v, proto, dir)
- int v;
- int proto;
- int dir;
-{
- struct block *b0, *b1;
-
- if (dir != Q_DEFAULT)
- error("direction applied to 'proto'");
-
- switch (proto) {
- case Q_DEFAULT:
- case Q_IP:
- b0 = gen_linktype(ETHERTYPE_IP);
- b1 = gen_cmp(off_nl + 9, BPF_B, (long)v);
- gen_and(b0, b1);
- return b1;
-
- case Q_ARP:
- error("arp does not encapsulate another protocol");
- /* NOTREACHED */
-
- case Q_RARP:
- error("rarp does not encapsulate another protocol");
- /* NOTREACHED */
-
- case Q_LINK:
- return gen_linktype(v);
-
- case Q_UDP:
- error("'udp proto' is bogus");
-
- case Q_TCP:
- error("'tcp proto' is bogus");
-
- case Q_ICMP:
- error("'icmp proto' is bogus");
- }
- abort();
- /* NOTREACHED */
-}
-
-struct block *
-gen_scode(name, q)
- char *name;
- struct qual q;
-{
- int proto = q.proto;
- int dir = q.dir;
- u_char *eaddr;
- u_long mask, addr, **alist;
- struct block *b, *tmp;
- int port, real_proto;
-
- switch (q.addr) {
-
- case Q_NET:
- addr = s_nametonetaddr(name);
- if (addr == 0)
- error("unknown network '%s'", name);
- mask = net_mask(&addr);
- return gen_host(addr, mask, proto, dir);
-
- case Q_DEFAULT:
- case Q_HOST:
- if (proto == Q_LINK) {
- /* XXX Should lookup hw addr based on link layer */
- eaddr = ETHER_hostton(name);
- if (eaddr == 0)
- error("unknown ether host '%s'", name);
- return gen_ehostop(eaddr, dir);
-
- } else {
- alist = s_nametoaddr(name);
- if (alist == 0 || *alist == 0)
- error("uknown host '%s'", name);
- b = gen_host(**alist++, 0xffffffffL, proto, dir);
- while (*alist) {
- tmp = gen_host(**alist++, 0xffffffffL,
- proto, dir);
- gen_or(b, tmp);
- b = tmp;
- }
- return b;
- }
-
- case Q_PORT:
- if (proto != Q_DEFAULT && proto != Q_UDP && proto != Q_TCP)
- error("illegal qualifier of 'port'");
- if (s_nametoport(name, &port, &real_proto) == 0)
- error("unknown port '%s'", name);
- if (proto == Q_UDP) {
- if (real_proto == IPPROTO_TCP)
- error("port '%s' is tcp", name);
- else
- /* override PROTO_UNDEF */
- real_proto = IPPROTO_UDP;
- }
- if (proto == Q_TCP) {
- if (real_proto == IPPROTO_UDP)
- error("port '%s' is udp", name);
- else
- /* override PROTO_UNDEF */
- real_proto = IPPROTO_TCP;
- }
- return gen_port(port, real_proto, dir);
-
- case Q_GATEWAY:
- eaddr = ETHER_hostton(name);
- if (eaddr == 0)
- error("unknown ether host: %s", name);
-
- alist = s_nametoaddr(name);
- if (alist == 0 || *alist == 0)
- error("uknown host '%s'", name);
- return gen_gateway(eaddr, alist, proto, dir);
-
- case Q_PROTO:
- real_proto = lookup_proto(name, proto);
- if (real_proto >= 0)
- return gen_proto(real_proto, proto, dir);
- else
- error("unknown protocol: %s", name);
-
- case Q_UNDEF:
- syntax();
- /* NOTREACHED */
- }
- abort();
- /* NOTREACHED */
-}
-
-struct block *
-gen_ncode(v, q)
- u_long v;
- struct qual q;
-{
- u_long mask;
- int proto = q.proto;
- int dir = q.dir;
-
- switch (q.addr) {
-
- case Q_DEFAULT:
- case Q_HOST:
- case Q_NET:
- mask = net_mask(&v);
- return gen_host(v, mask, proto, dir);
-
- case Q_PORT:
- if (proto == Q_UDP)
- proto = IPPROTO_UDP;
- else if (proto == Q_TCP)
- proto = IPPROTO_TCP;
- else if (proto == Q_DEFAULT)
- proto = PROTO_UNDEF;
- else
- error("illegal qualifier of 'port'");
-
- return gen_port((int)v, proto, dir);
-
- case Q_GATEWAY:
- error("'gateway' requires a name");
- /* NOTREACHED */
-
- case Q_PROTO:
- return gen_proto((int)v, proto, dir);
-
- case Q_UNDEF:
- syntax();
- /* NOTREACHED */
- }
- abort();
- /* NOTREACHED */
-}
-
-struct block *
-gen_ecode(eaddr, q)
- u_char *eaddr;
- struct qual q;
-{
- if ((q.addr == Q_HOST || q.addr == Q_DEFAULT) && q.proto == Q_LINK)
- return gen_ehostop(eaddr, (int)q.dir);
- else
- error("ethernet address used in non-ether expression");
- /* NOTREACHED */
-}
-
-void
-sappend(s0, s1)
- struct slist *s0, *s1;
-{
- /*
- * This is definitely not the best way to do this, but the
- * lists will rarely get long.
- */
- while (s0->next)
- s0 = s0->next;
- s0->next = s1;
-}
-
-struct slist *
-xfer_to_x(a)
- struct arth *a;
-{
- struct slist *s;
-
- s = new_stmt(BPF_LDX|BPF_MEM);
- s->s.k = a->regno;
- return s;
-}
-
-struct slist *
-xfer_to_a(a)
- struct arth *a;
-{
- struct slist *s;
-
- s = new_stmt(BPF_LD|BPF_MEM);
- s->s.k = a->regno;
- return s;
-}
-
-struct arth *
-gen_load(proto, index, size)
- int proto;
- struct arth *index;
- int size;
-{
- struct slist *s, *tmp;
- struct block *b;
- int regno = alloc_reg();
-
- free_reg(index->regno);
- switch (size) {
-
- default:
- error("data size must be 1, 2, or 4");
-
- case 1:
- size = BPF_B;
- break;
-
- case 2:
- size = BPF_H;
- break;
-
- case 4:
- size = BPF_W;
- break;
- }
- switch (proto) {
- default:
- error("unsupported index operation");
-
- case Q_LINK:
- s = xfer_to_x(index);
- tmp = new_stmt(BPF_LD|BPF_IND|size);
- sappend(s, tmp);
- sappend(index->s, s);
- break;
-
- case Q_IP:
- case Q_ARP:
- case Q_RARP:
- /* XXX Note that we assume a fixed link link header here. */
- s = xfer_to_x(index);
- tmp = new_stmt(BPF_LD|BPF_IND|size);
- tmp->s.k = off_nl;
- sappend(s, tmp);
- sappend(index->s, s);
-
- b = gen_proto_abbrev(proto);
- if (index->b)
- gen_and(index->b, b);
- index->b = b;
- break;
-
- case Q_TCP:
- case Q_UDP:
- case Q_ICMP:
- s = new_stmt(BPF_LDX|BPF_MSH|BPF_B);
- s->s.k = off_nl;
- sappend(s, xfer_to_a(index));
- sappend(s, new_stmt(BPF_ALU|BPF_ADD|BPF_X));
- sappend(s, new_stmt(BPF_MISC|BPF_TAX));
- sappend(s, tmp = new_stmt(BPF_LD|BPF_IND|size));
- tmp->s.k = off_nl;
- sappend(index->s, s);
-
- gen_and(gen_proto_abbrev(proto), b = gen_ipfrag());
- if (index->b)
- gen_and(index->b, b);
- index->b = b;
- break;
- }
- index->regno = regno;
- s = new_stmt(BPF_ST);
- s->s.k = regno;
- sappend(index->s, s);
-
- return index;
-}
-
-struct block *
-gen_relation(code, a0, a1, reversed)
- int code;
- struct arth *a0, *a1;
- int reversed;
-{
- struct slist *s0, *s1, *s2;
- struct block *b, *tmp;
-
- s0 = xfer_to_x(a1);
- s1 = xfer_to_a(a0);
- s2 = new_stmt(BPF_ALU|BPF_SUB|BPF_X);
- b = new_block(JMP(code));
- if (reversed)
- gen_not(b);
-
- sappend(s1, s2);
- sappend(s0, s1);
- sappend(a1->s, s0);
- sappend(a0->s, a1->s);
-
- b->stmts = a0->s;
-
- free_reg(a0->regno);
- free_reg(a1->regno);
-
- /* 'and' together protocol checks */
- if (a0->b) {
- if (a1->b) {
- gen_and(a0->b, tmp = a1->b);
- }
- else
- tmp = a0->b;
- } else
- tmp = a1->b;
-
- if (tmp)
- gen_and(tmp, b);
-
- return b;
-}
-
-struct arth *
-gen_loadlen()
-{
- int regno = alloc_reg();
- struct arth *a = (struct arth *)newchunk(sizeof(*a));
- struct slist *s;
-
- s = new_stmt(BPF_LD|BPF_LEN);
- s->next = new_stmt(BPF_ST);
- s->next->s.k = regno;
- a->s = s;
- a->regno = regno;
-
- return a;
-}
-
-struct arth *
-gen_loadi(val)
- int val;
-{
- struct arth *a;
- struct slist *s;
- int reg;
-
- a = (struct arth *)newchunk(sizeof(*a));
-
- reg = alloc_reg();
-
- s = new_stmt(BPF_LD|BPF_IMM);
- s->s.k = val;
- s->next = new_stmt(BPF_ST);
- s->next->s.k = reg;
- a->s = s;
- a->regno = reg;
-
- return a;
-}
-
-struct arth *
-gen_neg(a)
- struct arth *a;
-{
- struct slist *s;
-
- s = xfer_to_a(a);
- sappend(a->s, s);
- s = new_stmt(BPF_ALU|BPF_NEG);
- s->s.k = 0;
- sappend(a->s, s);
- s = new_stmt(BPF_ST);
- s->s.k = a->regno;
- sappend(a->s, s);
-
- return a;
-}
-
-struct arth *
-gen_arth(code, a0, a1)
- int code;
- struct arth *a0, *a1;
-{
- struct slist *s0, *s1, *s2;
-
- s0 = xfer_to_x(a1);
- s1 = xfer_to_a(a0);
- s2 = new_stmt(BPF_ALU|BPF_X|code);
-
- sappend(s1, s2);
- sappend(s0, s1);
- sappend(a1->s, s0);
- sappend(a0->s, a1->s);
-
- free_reg(a1->regno);
-
- s0 = new_stmt(BPF_ST);
- a0->regno = s0->s.k = alloc_reg();
- sappend(a0->s, s0);
-
- return a0;
-}
-
-/*
- * Here we handle simple allocation of the scratch registers.
- * If too many registers are alloc'd, the allocator punts.
- */
-static int regused[BPF_MEMWORDS];
-static int curreg;
-
-/*
- * Return the next free register.
- */
-static int
-alloc_reg()
-{
- int n = BPF_MEMWORDS;
-
- while (--n >= 0) {
- if (regused[curreg])
- curreg = (curreg + 1) % BPF_MEMWORDS;
- else {
- regused[curreg] = 1;
- return curreg;
- }
- }
- error("too many registers needed to evaluate expression");
- /* NOTREACHED */
-}
-
-/*
- * Return a register to the table so it can
- * be used later.
- */
-static void
-free_reg(n)
- int n;
-{
- regused[n] = 0;
-}
-
-static struct block *
-gen_len(jmp, n)
- int jmp;
- int n;
-{
- struct slist *s;
- struct block *b;
-
- s = new_stmt(BPF_LD|BPF_LEN);
- s->next = new_stmt(BPF_SUB|BPF_IMM);
- s->next->s.k = n;
- b = new_block(JMP(jmp));
- b->stmts = s;
-
- return b;
-}
-
-struct block *
-gen_greater(n)
- int n;
-{
- return gen_len(BPF_JGE, n);
-}
-
-struct block *
-gen_less(n)
- int n;
-{
- struct block *b;
-
- b = gen_len(BPF_JGT, n);
- gen_not(b);
-
- return b;
-}
-
-struct block *
-gen_byteop(op, idx, val)
- int op;
- int idx;
- int val;
-{
- struct block *b;
- struct slist *s;
-
- switch (op) {
- default:
- abort();
-
- case '=':
- return gen_cmp((u_int)idx, BPF_B, (long)val);
-
- case '<':
- b = gen_cmp((u_int)idx, BPF_B, (long)val);
- b->s.code = JMP(BPF_JGE);
- gen_not(b);
- return b;
-
- case '>':
- b = gen_cmp((u_int)idx, BPF_B, (long)val);
- b->s.code = JMP(BPF_JGT);
- return b;
-
- case '|':
- s = new_stmt(BPF_ALU|BPF_AND|BPF_K);
- break;
-
- case '&':
- s = new_stmt(BPF_ALU|BPF_AND|BPF_K);
- break;
- }
- s->s.k = val;
- b = new_block(JMP(BPF_JEQ));
- b->stmts = s;
- gen_not(b);
-
- return b;
-}
-
-struct block *
-gen_broadcast(proto)
- int proto;
-{
- u_long hostmask;
- struct block *b0, *b1, *b2;
- static u_char ebroadcast[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
-
- switch (proto) {
-
- case Q_DEFAULT:
- case Q_LINK:
- if (linktype == DLT_EN10MB)
- return gen_ehostop(ebroadcast, Q_DST);
- error("not a broadcast link");
- break;
-
- case Q_IP:
- b0 = gen_linktype(ETHERTYPE_IP);
- hostmask = ~netmask;
- b1 = gen_mcmp(off_nl + 16, BPF_W, (long)0, hostmask);
- b2 = gen_mcmp(off_nl + 16, BPF_W,
- (long)(~0 & hostmask), hostmask);
- gen_or(b1, b2);
- gen_and(b0, b2);
- return b2;
- }
- error("only ether/ip broadcast filters supported");
-}
-
-struct block *
-gen_multicast(proto)
- int proto;
-{
- register struct block *b0, *b1, *b2;
- register struct slist *s;
-
- switch (proto) {
-
- case Q_DEFAULT:
- case Q_LINK:
- if (linktype != DLT_EN10MB)
- break;
-
- /* ether[0] & 1 != 0 */
- s = new_stmt(BPF_LD|BPF_B|BPF_ABS);
- s->s.k = 0;
- b0 = new_block(JMP(BPF_JSET));
- b0->s.k = 1;
- b0->stmts = s;
- return b0;
-
- case Q_IP:
- b0 = gen_linktype(ETHERTYPE_IP);
- b1 = gen_cmp(off_nl + 16, BPF_B, (long)224);
- b1->s.code = JMP(BPF_JGE);
- gen_and(b0, b1);
- return b1;
- }
- error("only ether/ip multicast filters supported");
-}
diff --git a/usr.sbin/tcpdump/tcpdump/gencode.h b/usr.sbin/tcpdump/tcpdump/gencode.h
deleted file mode 100644
index b8f342d..0000000
--- a/usr.sbin/tcpdump/tcpdump/gencode.h
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: gencode.h,v 1.14 92/02/14 15:18:55 mccanne Exp $ (LBL)
- */
-
-/*
- * filter.h must be included before this file.
- */
-
-/* Address qualifers. */
-
-#define Q_HOST 1
-#define Q_NET 2
-#define Q_PORT 3
-#define Q_GATEWAY 4
-#define Q_PROTO 5
-
-/* Protocol qualifiers. */
-
-#define Q_LINK 1
-#define Q_IP 2
-#define Q_ARP 3
-#define Q_RARP 4
-#define Q_TCP 5
-#define Q_UDP 6
-#define Q_ICMP 7
-
-/* Directional qualifers. */
-
-#define Q_SRC 1
-#define Q_DST 2
-#define Q_OR 3
-#define Q_AND 4
-
-#define Q_DEFAULT 0
-#define Q_UNDEF 255
-
-struct stmt {
- int code;
- long k;
-};
-
-struct slist {
- struct stmt s;
- struct slist *next;
-};
-
-/*
- * A bit vector to represent definition sets. We assume TOT_REGISTERS
- * is smaller than 8*sizeof(atomset).
- */
-typedef u_long atomset;
-#define ATOMMASK(n) (1 << (n))
-#define ATOMELEM(d, n) (d & ATOMMASK(n))
-
-/*
- * An unbounded set.
- */
-typedef u_long *uset;
-
-/*
- * Total number of atomic entities, including accumulator (A) and index (X).
- * We treat all these guys similarly during flow analysis.
- */
-#define N_ATOMS (BPF_MEMWORDS+2)
-
-struct edge {
- int id;
- int code;
- uset edom;
- struct block *succ;
- struct block *pred;
- struct edge *next; /* link list of incoming edges for a node */
-};
-
-struct block {
- int id;
- struct slist *stmts; /* side effect stmts */
- struct stmt s; /* branch stmt */
- int mark;
- int level;
- int offset;
- int sense;
- struct edge et;
- struct edge ef;
- struct block *head;
- struct block *link; /* link field used by optimizer */
- uset dom;
- uset closure;
- struct edge *in_edges;
- atomset def, kill;
- atomset in_use;
- atomset out_use;
- long oval;
- long val[N_ATOMS];
-};
-
-struct arth {
- struct block *b; /* protocol checks */
- struct slist *s; /* stmt list */
- int regno; /* virtual register number of result */
-};
-
-extern struct arth *gen_loadi();
-extern struct arth *gen_load();
-extern struct arth *gen_loadlen();
-extern struct arth *gen_neg();
-extern struct arth *gen_arth();
-
-extern void gen_and();
-extern void gen_or();
-extern void gen_not();
-
-extern struct block *gen_scode();
-extern struct block *gen_ecode();
-extern struct block *gen_ncode();
-extern struct block *gen_proto_abbrev();
-extern struct block *gen_relation();
-extern struct block *gen_less();
-extern struct block *gen_greater();
-extern struct block *gen_byteop();
-extern struct block *gen_broadcast();
-extern struct block *gen_multicast();
-
-extern void optimize();
-
-extern void finish_parse();
-
-struct qual {
- unsigned char addr;
- unsigned char proto;
- unsigned char dir;
- unsigned char pad;
-};
-
-/* XXX */
-#define JT(b) ((b)->et.succ)
-#define JF(b) ((b)->ef.succ)
diff --git a/usr.sbin/tcpdump/tcpdump/inet.c b/usr.sbin/tcpdump/tcpdump/inet.c
deleted file mode 100644
index 550129e..0000000
--- a/usr.sbin/tcpdump/tcpdump/inet.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static char rcsid[] =
- "@(#)$Header: inet.c,v 1.12 92/01/29 12:46:18 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <strings.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-
-#include <net/if.h>
-#include <netinet/in.h>
-
-#include "interface.h"
-
-/* Not all systems have IFF_LOOPBACK */
-#ifdef IFF_LOOPBACK
-#define ISLOOPBACK(p) ((p)->ifr_flags & IFF_LOOPBACK)
-#else
-#define ISLOOPBACK(p) (strcmp((p)->ifr_name, "lo0") == 0)
-#endif
-
-/*
- * Return the name of a network interface attached to the system, or 0
- * if none can be found. The interface must be configured up; the
- * lowest unit number is preferred; loopback is ignored.
- */
-char *
-lookup_device()
-{
- struct ifreq ibuf[16], *ifrp, *ifend, *mp;
- struct ifconf ifc;
- int fd;
- int minunit, n;
- char *cp;
- static char device[sizeof(ifrp->ifr_name)];
-
- fd = socket(AF_INET, SOCK_DGRAM, 0);
- if (fd < 0) {
- perror("tcpdump: socket");
- exit(1);
- }
- ifc.ifc_len = sizeof ibuf;
- ifc.ifc_buf = (caddr_t)ibuf;
-
- if (ioctl(fd, SIOCGIFCONF, (char *)&ifc) < 0 ||
- ifc.ifc_len < sizeof(struct ifreq)) {
- perror("tcpdump: SIOCGIFCONF: ");
- exit(1);
- }
- ifrp = ibuf;
- ifend = (struct ifreq *)((char *)ibuf + ifc.ifc_len);
-
- mp = 0;
- minunit = 666;
- while (ifrp < ifend) {
- struct ifreq ifr;
- /*
- * Need a template to preserve address info that is
- * used below to locate the next entry. (Otherwise,
- * SIOCGIFFLAGS stomps over it because the requests
- * are returned in a union.)
- */
- bcopy(ifrp->ifr_name, ifr.ifr_name, sizeof(ifr.ifr_name));
- if (ioctl(fd, SIOCGIFFLAGS, (char *)&ifr) < 0) {
- fprintf(stderr, "tcpdump: SIOCGIFFLAGS: ");
- perror(ifrp->ifr_name);
- exit(1);
- }
- if ((ifr.ifr_flags & IFF_UP) && !ISLOOPBACK(&ifr)) {
- for (cp = ifrp->ifr_name; !isdigit(*cp); ++cp)
- ;
- n = atoi(cp);
- if (n < minunit) {
- minunit = n;
- mp = ifrp;
- }
- }
-#if BSD >= 199006
- n = ifrp->ifr_addr.sa_len + sizeof(ifrp->ifr_name);
- if (n < sizeof(*ifrp))
- ++ifrp;
- else
- ifrp = (struct ifreq *)((char *)ifrp + n);
-#else
- ++ifrp;
-#endif
- }
- close(fd);
- if (mp == 0)
- return (0);
-
- (void)strcpy(device, mp->ifr_name);
- return (device);
-}
-
-/*
- * Get the netmask of an IP address. This routine is used if
- * SIOCGIFNETMASK doesn't work.
- */
-static u_long
-ipaddrtonetmask(addr)
- u_long addr;
-{
- if (IN_CLASSA(addr))
- return (IN_CLASSA_NET);
- if (IN_CLASSB(addr))
- return (IN_CLASSB_NET);
- if (IN_CLASSC(addr))
- return (IN_CLASSC_NET);
- error("unknown IP address class: %08X", addr);
- /* NOTREACHED */
-}
-
-void
-lookup_net(device, netp, maskp)
- char *device;
- u_long *netp;
- u_long *maskp;
-{
- int fd;
- struct ifreq ifr;
- struct sockaddr_in *sin = (struct sockaddr_in *)&ifr.ifr_addr;
-
- /* Use data gram socket to get IP address. */
- if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
- perror("tcpdump: socket");
- exit(1);
- }
- (void)strncpy(ifr.ifr_name, device, sizeof ifr.ifr_name);
- if (ioctl(fd, SIOCGIFADDR, (char *)&ifr) < 0) {
- /*
- * This will fail if an IP address hasn't been assigned.
- */
- *netp = 0;
- *maskp = 0;
- return;
- }
- *netp = sin->sin_addr.s_addr;
- if (ioctl(fd, SIOCGIFNETMASK, (char *)&ifr) < 0)
- *maskp = 0;
- else
- *maskp = sin->sin_addr.s_addr;
- if (*maskp == 0)
- *maskp = ipaddrtonetmask(*netp);
- *netp &= *maskp;
- (void)close(fd);
-}
diff --git a/usr.sbin/tcpdump/tcpdump/md.c b/usr.sbin/tcpdump/tcpdump/md.c
deleted file mode 100644
index 6bb04b7..0000000
--- a/usr.sbin/tcpdump/tcpdump/md.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: md-vax.c,v 1.3 90/10/03 14:14:33 mccanne Locked $ (LBL)";
-#endif
-
-/* Vaxen appear to have clocks accurate to 1 us,
- but packetfilter is timestamping to 10 ms. */
-
-int
-clock_sigfigs()
-{
- return 2;
-}
-
diff --git a/usr.sbin/tcpdump/tcpdump/nametoaddr.c b/usr.sbin/tcpdump/tcpdump/nametoaddr.c
deleted file mode 100644
index 6f2330f..0000000
--- a/usr.sbin/tcpdump/tcpdump/nametoaddr.c
+++ /dev/null
@@ -1,258 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Name to id translation routines used by the scanner.
- * These functions are not time critical.
- */
-
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: nametoaddr.c,v 1.9 91/02/04 16:56:46 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-#include <errno.h>
-#include <arpa/inet.h>
-
-#ifdef ultrix
-#include <sys/time.h>
-#include <rpc/types.h>
-#include <nfs/nfs.h>
-#endif
-
-#include "interface.h"
-#include "etherent.h"
-#include "nametoaddr.h"
-
-/*
- * Convert host name to internet address.
- * Return 0 upon failure.
- */
-u_long **
-s_nametoaddr(name)
- char *name;
-{
-#ifndef h_addr
- static u_long *hlist[2];
-#endif
- u_long **p;
- struct hostent *hp;
-
- if (hp = gethostbyname(name)) {
-#ifndef h_addr
- hlist[0] = (u_long *)hp->h_addr;
- NTOHL(hp->h_addr);
- return hlist;
-#else
- for (p = (u_long **)hp->h_addr_list; *p; ++p)
- NTOHL(**p);
- return (u_long **)hp->h_addr_list;
-#endif
- }
- else
- return 0;
-}
-
-/*
- * Convert net name to internet address.
- * Return 0 upon failure.
- */
-u_long
-s_nametonetaddr(name)
- char *name;
-{
- struct netent *np;
-
- if (np = getnetbyname(name))
- return np->n_net;
- else
- return 0;
-}
-
-/*
- * Convert a port name to its port and protocol numbers.
- * We assume only TCP or UDP.
- * Return 0 upon failure.
- */
-s_nametoport(name, port, proto)
- char *name;
- int *port;
- int *proto;
-{
- struct servent *sp;
- char *other;
-
- sp = getservbyname(name, (char *)0);
- if (sp != 0) {
- NTOHS(sp->s_port);
- *port = sp->s_port;
- *proto = s_nametoproto(sp->s_proto);
- /*
- * We need to check /etc/services for ambiguous entries.
- * If we find the ambiguous entry, and it has the
- * same port number, change the proto to PROTO_UNDEF
- * so both TCP and UDP will be checked.
- */
- if (*proto == IPPROTO_TCP)
- other = "udp";
- else
- other = "tcp";
-
- sp = getservbyname(name, other);
- if (sp != 0) {
- NTOHS(sp->s_port);
- if (*port != sp->s_port)
- /* Can't handle ambigous names that refer
- to different port numbers. */
- warning("ambiguous port %s in /etc/services",
- name);
- *proto = PROTO_UNDEF;
- }
- return 1;
- }
-#ifdef ultrix
- /* Special hack in case NFS isn't in /etc/services */
- if (strcmp(name, "nfs") == 0) {
- *port = NFS_PORT;
- *proto = PROTO_UNDEF;
- return 1;
- }
-#endif
- return 0;
-}
-
-int
-s_nametoproto(str)
- char *str;
-{
- struct protoent *p;
-
- p = getprotobyname(str);
- if (p != 0)
- return p->p_proto;
- else
- return PROTO_UNDEF;
-}
-
-#include "etherproto.h"
-
-int
-s_nametoeproto(s)
- char *s;
-{
- struct eproto *p = eproto_db;
-
- while (p->s != 0) {
- if (strcmp(p->s, s) == 0)
- return p->p;
- p += 1;
- }
- return PROTO_UNDEF;
-}
-
-/* Hex digit to integer. */
-static inline int
-xdtoi(c)
-{
- if (isdigit(c))
- return c - '0';
- else if (islower(c))
- return c - 'a' + 10;
- else
- return c - 'A' + 10;
-}
-
-u_long
-atoin(s)
- char *s;
-{
- u_long addr = 0;
- u_int n;
-
- while (1) {
- n = 0;
- while (*s && *s != '.')
- n = n * 10 + *s++ - '0';
- addr <<= 8;
- addr |= n & 0xff;
- if (*s == '\0')
- return addr;
- ++s;
- }
- /* NOTREACHED */
-}
-
-
-/*
- * Convert 's' which has the form "xx:xx:xx:xx:xx:xx" into a new
- * ethernet address. Assumes 's' is well formed.
- */
-u_char *
-ETHER_aton(s)
- char *s;
-{
- register u_char *ep, *e;
- register u_int d;
-
- e = ep = (u_char *)malloc(6);
-
- while (*s) {
- if (*s == ':')
- s += 1;
- d = xdtoi(*s++);
- if (isxdigit(*s)) {
- d <<= 4;
- d |= xdtoi(*s++);
- }
- *ep++ = d;
- }
-
- return e;
-}
-
-#ifndef ETHER_SERVICE
-u_char *
-ETHER_hostton(name)
- char *name;
-{
- struct etherent *ep;
- FILE *fp;
- u_char *ap;
-
- fp = fopen(ETHERS_FILE, "r");
- if (fp != 0) {
- while (ep = next_etherent(fp)) {
- if (strcmp(ep->name, name) == 0) {
- ap = (u_char *)malloc(6);
- bcopy(ep->addr, ap, 6);
- return ap;
- }
- }
- }
- return (u_char *)0;
-}
-#endif
diff --git a/usr.sbin/tcpdump/tcpdump/nametoaddr.h b/usr.sbin/tcpdump/tcpdump/nametoaddr.h
deleted file mode 100644
index 23da3f2..0000000
--- a/usr.sbin/tcpdump/tcpdump/nametoaddr.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * @(#) $Header: nametoaddr.h,v 1.6 90/09/24 12:50:41 mccanne Exp $ (LBL)
- *
- * Address to name translation routines.
- */
-
-extern u_long **s_nametoaddr();
-extern u_long s_nametonetaddr();
-
-extern int s_nametoport();
-extern int s_nametoproto();
-extern int s_nametoeproto();
-
-extern u_char *ETHER_hostton();
-extern u_char *ETHER_aton();
-
-/*
- * If a protocol is unknown, PROTO_UNDEF is returned.
- * Also, s_nametoport() returns the protocol along with the port number.
- * If there are ambiguous entried in /etc/services (i.e. domain
- * can be either tcp or udp) PROTO_UNDEF is returned.
- */
-#define PROTO_UNDEF -1
-
diff --git a/usr.sbin/tcpdump/tcpdump/optimize.c b/usr.sbin/tcpdump/tcpdump/optimize.c
deleted file mode 100644
index 5064011..0000000
--- a/usr.sbin/tcpdump/tcpdump/optimize.c
+++ /dev/null
@@ -1,1871 +0,0 @@
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Optimization module for tcpdump intermediate representation.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: optimize.c,v 1.35 91/07/18 09:27:55 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-
-#include <sys/time.h>
-#include <net/bpf.h>
-
-#include "interface.h"
-#include "gencode.h"
-
-#define A_ATOM BPF_MEMWORDS
-#define X_ATOM (BPF_MEMWORDS+1)
-
-#define NOP -1
-
-/*
- * This define is used to represent *both* the accumulator and
- * x register in use-def computations.
- * Currently, the use-def code assumes only one definition per instruction.
- */
-#define AX_ATOM N_ATOMS
-
-/*
- * A flag to indicate that further optimization is needed.
- * Iterative passes are continued until a given pass yields no
- * branch movement.
- */
-static int done;
-
-/*
- * A block is marked if only if its mark equals the current mark.
- * Rather than traverse the code array, marking each item, 'cur_mark' is
- * incremented. This automatically makes each element unmarked.
- */
-static int cur_mark;
-#define isMarked(p) ((p)->mark == cur_mark)
-#define unMarkAll() cur_mark += 1
-#define Mark(p) ((p)->mark = cur_mark)
-
-static void opt_init();
-static void opt_cleanup();
-
-static void make_marks();
-static void mark_code();
-
-static void intern_blocks();
-
-static int eq_slist();
-
-static int n_blocks;
-struct block **blocks;
-static int n_edges;
-struct edge **edges;
-
-/*
- * A bit vector set representation of the dominators.
- * We round up the set size to the next power of two.
- */
-static int nodewords;
-static int edgewords;
-struct block **levels;
-u_long *space;
-#define BITS_PER_WORD (8*sizeof(u_long))
-/*
- * True if a is in uset {p}
- */
-#define SET_MEMBER(p, a) \
-((p)[(unsigned)(a) / BITS_PER_WORD] & (1 << ((unsigned)(a) % BITS_PER_WORD)))
-
-/*
- * Add 'a' to uset p.
- */
-#define SET_INSERT(p, a) \
-(p)[(unsigned)(a) / BITS_PER_WORD] |= (1 << ((unsigned)(a) % BITS_PER_WORD))
-
-/*
- * Delete 'a' from uset p.
- */
-#define SET_DELETE(p, a) \
-(p)[(unsigned)(a) / BITS_PER_WORD] &= ~(1 << ((unsigned)(a) % BITS_PER_WORD))
-
-/*
- * a := a intersect b
- */
-#define SET_INTERSECT(a, b, n)\
-{\
- register u_long *_x = a, *_y = b;\
- register int _n = n;\
- while (--_n >= 0) *_x++ &= *_y++;\
-}
-
-/*
- * a := a - b
- */
-#define SET_SUBTRACT(a, b, n)\
-{\
- register u_long *_x = a, *_y = b;\
- register int _n = n;\
- while (--_n >= 0) *_x++ &=~ *_y++;\
-}
-
-/*
- * a := a union b
- */
-#define SET_UNION(a, b, n)\
-{\
- register u_long *_x = a, *_y = b;\
- register int _n = n;\
- while (--_n >= 0) *_x++ |= *_y++;\
-}
-
-static uset all_dom_sets;
-static uset all_closure_sets;
-static uset all_edge_sets;
-
-#ifndef MAX
-#define MAX(a,b) ((a)>(b)?(a):(b))
-#endif
-
-static void
-find_levels_r(b)
- struct block *b;
-{
- int level;
-
- if (isMarked(b))
- return;
-
- Mark(b);
- b->link = 0;
-
- if (JT(b)) {
- find_levels_r(JT(b));
- find_levels_r(JF(b));
- level = MAX(JT(b)->level, JF(b)->level) + 1;
- } else
- level = 0;
- b->level = level;
- b->link = levels[level];
- levels[level] = b;
-}
-
-/*
- * Level graph. The levels go from 0 at the leaves to
- * N_LEVELS at the root. The levels[] array points to the
- * first node of the level list, whose elements are linked
- * with the 'link' field of the struct block.
- */
-static void
-find_levels(root)
- struct block *root;
-{
- bzero((char *)levels, n_blocks * sizeof(*levels));
- unMarkAll();
- find_levels_r(root);
-}
-
-/*
- * Find dominator relationships.
- * Assumes graph has been leveled.
- */
-static void
-find_dom(root)
- struct block *root;
-{
- int i;
- struct block *b;
- u_long *x;
-
- /*
- * Initialize sets to contain all nodes.
- */
- x = all_dom_sets;
- i = n_blocks * nodewords;
- while (--i >= 0)
- *x++ = ~0;
- /* Root starts off empty. */
- for (i = nodewords; --i >= 0;)
- root->dom[i] = 0;
-
- /* root->level is the highest level no found. */
- for (i = root->level; i >= 0; --i) {
- for (b = levels[i]; b; b = b->link) {
- SET_INSERT(b->dom, b->id);
- if (JT(b) == 0)
- continue;
- SET_INTERSECT(JT(b)->dom, b->dom, nodewords);
- SET_INTERSECT(JF(b)->dom, b->dom, nodewords);
- }
- }
-}
-
-static void
-propedom(ep)
- struct edge *ep;
-{
- SET_INSERT(ep->edom, ep->id);
- if (ep->succ) {
- SET_INTERSECT(ep->succ->et.edom, ep->edom, edgewords);
- SET_INTERSECT(ep->succ->ef.edom, ep->edom, edgewords);
- }
-}
-
-/*
- * Compute edge dominators.
- * Assumes graph has been leveled and predecessors estabished.
- */
-static void
-find_edom(root)
- struct block *root;
-{
- int i;
- uset x;
- struct block *b;
-
- x = all_edge_sets;
- for (i = n_edges * edgewords; --i >= 0; )
- x[i] = ~0;
-
- /* root->level is the highest level no found. */
- bzero(root->et.edom, edgewords * sizeof(*(uset)0));
- bzero(root->ef.edom, edgewords * sizeof(*(uset)0));
- for (i = root->level; i >= 0; --i) {
- for (b = levels[i]; b != 0; b = b->link) {
- propedom(&b->et);
- propedom(&b->ef);
- }
- }
-}
-
-/*
- * Find the backwards transitive closure of the flow graph. These sets
- * are backwards in the sense that we find the set of nodes that reach
- * a given node, not the set of nodes that can be reached by a node.
- *
- * Assumes graph has been leveled.
- */
-static void
-find_closure(root)
- struct block *root;
-{
- int i;
- struct block *b;
-
- /*
- * Initialize sets to contain no nodes.
- */
- bzero((char *)all_closure_sets,
- n_blocks * nodewords * sizeof(*all_closure_sets));
-
- /* root->level is the highest level no found. */
- for (i = root->level; i >= 0; --i) {
- for (b = levels[i]; b; b = b->link) {
- SET_INSERT(b->closure, b->id);
- if (JT(b) == 0)
- continue;
- SET_UNION(JT(b)->closure, b->closure, nodewords);
- SET_UNION(JF(b)->closure, b->closure, nodewords);
- }
- }
-}
-
-/*
- * Return the register number that is used by s. If A and X are both
- * used, return AX_ATOM. If no register is used, return -1.
- *
- * The implementation should probably change to an array access.
- */
-static int
-atomuse(s)
- struct stmt *s;
-{
- register int c = s->code;
-
- if (c == NOP)
- return -1;
-
- switch (BPF_CLASS(c)) {
-
- case BPF_RET:
- return (BPF_RVAL(c) == BPF_A) ? A_ATOM :
- (BPF_RVAL(c) == BPF_X) ? X_ATOM : -1;
-
- case BPF_LD:
- case BPF_LDX:
- return (BPF_MODE(c) == BPF_IND) ? X_ATOM :
- (BPF_MODE(c) == BPF_MEM) ? s->k : -1;
-
- case BPF_ST:
- return A_ATOM;
-
- case BPF_STX:
- return X_ATOM;
-
- case BPF_JMP:
- case BPF_ALU:
- if (BPF_SRC(c) == BPF_X)
- return AX_ATOM;
- return A_ATOM;
-
- case BPF_MISC:
- return BPF_MISCOP(c) == BPF_TXA ? X_ATOM : A_ATOM;
- }
- abort();
- /* NOTREACHED */
-}
-
-/*
- * Return the register number that is defined by 's'. We assume that
- * a single stmt cannot define more than one register. If no register
- * is defined, return -1.
- *
- * The implementation should probably change to an array access.
- */
-static int
-atomdef(s)
- struct stmt *s;
-{
- if (s->code == NOP)
- return -1;
-
- switch (BPF_CLASS(s->code)) {
-
- case BPF_LD:
- case BPF_ALU:
- return A_ATOM;
-
- case BPF_LDX:
- return X_ATOM;
-
- case BPF_ST:
- case BPF_STX:
- return s->k;
-
- case BPF_MISC:
- return BPF_MISCOP(s->code) == BPF_TAX ? X_ATOM : A_ATOM;
- }
- return -1;
-}
-
-static void
-compute_local_ud(b)
- struct block *b;
-{
- struct slist *s;
- atomset def = 0, use = 0, kill = 0;
- int atom;
-
- for (s = b->stmts; s; s = s->next) {
- if (s->s.code == NOP)
- continue;
- atom = atomuse(&s->s);
- if (atom >= 0) {
- if (atom == AX_ATOM) {
- if (!ATOMELEM(def, X_ATOM))
- use |= ATOMMASK(X_ATOM);
- if (!ATOMELEM(def, A_ATOM))
- use |= ATOMMASK(A_ATOM);
- }
- else if (atom < N_ATOMS) {
- if (!ATOMELEM(def, atom))
- use |= ATOMMASK(atom);
- }
- else
- abort();
- }
- atom = atomdef(&s->s);
- if (atom >= 0) {
- if (!ATOMELEM(atom, use))
- kill |= ATOMMASK(atom);
- def |= ATOMMASK(atom);
- }
- }
- if (!ATOMELEM(def, A_ATOM) && BPF_CLASS(b->s.code) == BPF_JMP)
- use |= ATOMMASK(A_ATOM);
-
- b->def = def;
- b->kill = kill;
- b->in_use = use;
-}
-
-/*
- * Assume graph is already leveled.
- */
-static void
-find_ud(root)
- struct block *root;
-{
- int i, maxlevel;
- struct block *p;
-
- /*
- * root->level is the highest level no found;
- * count down from there.
- */
- maxlevel = root->level;
- for (i = maxlevel; i >= 0; --i)
- for (p = levels[i]; p; p = p->link) {
- compute_local_ud(p);
- p->out_use = 0;
- }
-
- for (i = 1; i <= maxlevel; ++i) {
- for (p = levels[i]; p; p = p->link) {
- p->out_use |= JT(p)->in_use | JF(p)->in_use;
- p->in_use |= p->out_use &~ p->kill;
- }
- }
-}
-
-/*
- * These data structures are used in a Cocke and Shwarz style
- * value numbering scheme. Since the flowgraph is acyclic,
- * exit values can be propagated from a node's predecessors
- * provided it is uniquely defined.
- */
-struct valnode {
- int code;
- long v0, v1;
- long val;
- struct valnode *next;
-};
-
-#define MODULUS 213
-static struct valnode *hashtbl[MODULUS];
-static int curval;
-static int maxval;
-
-/* Integer constants mapped with the load immediate opcode. */
-#define K(i) F(BPF_LD|BPF_IMM|BPF_W, i, 0L)
-
-struct vmapinfo {
- int is_const;
- long const_val;
-};
-
-struct vmapinfo *vmap;
-struct valnode *vnode_base;
-struct valnode *next_vnode;
-
-static void
-init_val()
-{
- curval = 0;
- next_vnode = vnode_base;
- bzero((char *)vmap, maxval * sizeof(*vmap));
- bzero((char *)hashtbl, sizeof hashtbl);
-}
-
-/* Because we really don't have an IR, this stuff is a little messy. */
-static long
-F(code, v0, v1)
- int code;
- long v0, v1;
-{
- u_int hash;
- int val;
- struct valnode *p;
-
- hash = (u_int)code ^ (v0 << 4) ^ (v1 << 8);
- hash %= MODULUS;
-
- for (p = hashtbl[hash]; p; p = p->next)
- if (p->code == code && p->v0 == v0 && p->v1 == v1)
- return p->val;
-
- val = ++curval;
- if (BPF_MODE(code) == BPF_IMM &&
- (BPF_CLASS(code) == BPF_LD || BPF_CLASS(code) == BPF_LDX)) {
- vmap[val].const_val = v0;
- vmap[val].is_const = 1;
- }
- p = next_vnode++;
- p->val = val;
- p->code = code;
- p->v0 = v0;
- p->v1 = v1;
- p->next = hashtbl[hash];
- hashtbl[hash] = p;
-
- return val;
-}
-
-static inline void
-vstore(s, valp, newval, alter)
- struct stmt *s;
- long *valp;
- long newval;
- int alter;
-{
- if (alter && *valp == newval)
- s->code = NOP;
- else
- *valp = newval;
-}
-
-static void
-fold_op(s, v0, v1)
- struct stmt *s;
- long v0, v1;
-{
- long a, b;
-
- a = vmap[v0].const_val;
- b = vmap[v1].const_val;
-
- switch (BPF_OP(s->code)) {
- case BPF_ADD:
- a += b;
- break;
-
- case BPF_SUB:
- a -= b;
- break;
-
- case BPF_MUL:
- a *= b;
- break;
-
- case BPF_DIV:
- if (b == 0)
- error("division by zero");
- a /= b;
- break;
-
- case BPF_AND:
- a &= b;
- break;
-
- case BPF_OR:
- a |= b;
- break;
-
- case BPF_LSH:
- a <<= b;
- break;
-
- case BPF_RSH:
- a >>= b;
- break;
-
- case BPF_NEG:
- a = -a;
- break;
-
- default:
- abort();
- }
- s->k = a;
- s->code = BPF_LD|BPF_IMM;
- done = 0;
-}
-
-static inline struct slist *
-this_op(s)
- struct slist *s;
-{
- while (s != 0 && s->s.code == NOP)
- s = s->next;
- return s;
-}
-
-static void
-opt_not(b)
- struct block *b;
-{
- struct block *tmp = JT(b);
-
- JT(b) = JF(b);
- JF(b) = tmp;
-}
-
-static void
-opt_peep(b)
- struct block *b;
-{
- struct slist *s;
- struct slist *next, *last;
- int val;
- long v;
-
- s = b->stmts;
- if (s == 0)
- return;
-
- last = s;
- while (1) {
- s = this_op(s);
- if (s == 0)
- break;
- next = this_op(s->next);
- if (next == 0)
- break;
- last = next;
-
- /*
- * st M[k] --> st M[k]
- * ldx M[k] tax
- */
- if (s->s.code == BPF_ST &&
- next->s.code == (BPF_LDX|BPF_MEM) &&
- s->s.k == next->s.k) {
- done = 0;
- next->s.code = BPF_MISC|BPF_TAX;
- }
- /*
- * ld #k --> ldx #k
- * tax txa
- */
- if (s->s.code == (BPF_LD|BPF_IMM) &&
- next->s.code == (BPF_MISC|BPF_TAX)) {
- s->s.code = BPF_LDX|BPF_IMM;
- next->s.code = BPF_MISC|BPF_TXA;
- done = 0;
- }
- /*
- * This is an ugly special case, but it happens
- * when you say tcp[k] or udp[k] where k is a constant.
- */
- if (s->s.code == (BPF_LD|BPF_IMM)) {
- struct slist *add, *tax, *ild;
-
- /*
- * Check that X isn't used on exit from this
- * block (which the optimizer might cause).
- * We know the code generator won't generate
- * any local dependencies.
- */
- if (ATOMELEM(b->out_use, X_ATOM))
- break;
-
- if (next->s.code != (BPF_LDX|BPF_MSH|BPF_B))
- add = next;
- else
- add = this_op(next->next);
- if (add == 0 || add->s.code != (BPF_ALU|BPF_ADD|BPF_X))
- break;
-
- tax = this_op(add->next);
- if (tax == 0 || tax->s.code != (BPF_MISC|BPF_TAX))
- break;
-
- ild = this_op(tax->next);
- if (ild == 0 || BPF_CLASS(ild->s.code) != BPF_LD ||
- BPF_MODE(ild->s.code) != BPF_IND)
- break;
- /*
- * XXX We need to check that X is not
- * subsequently used. We know we can eliminate the
- * accumulator modifications since it is defined
- * by the last stmt of this sequence.
- *
- * We want to turn this sequence:
- *
- * (004) ldi #0x2 {s}
- * (005) ldxms [14] {next} -- optional
- * (006) addx {add}
- * (007) tax {tax}
- * (008) ild [x+0] {ild}
- *
- * into this sequence:
- *
- * (004) nop
- * (005) ldxms [14]
- * (006) nop
- * (007) nop
- * (008) ild [x+2]
- *
- */
- ild->s.k += s->s.k;
- s->s.code = NOP;
- add->s.code = NOP;
- tax->s.code = NOP;
- done = 0;
- }
- s = next;
- }
- /*
- * If we have a subtract to do a comparsion, and the X register
- * is a known constant, we can merge this value into the
- * comparison.
- */
- if (last->s.code == (BPF_ALU|BPF_SUB|BPF_X) &&
- !ATOMELEM(b->out_use, A_ATOM)) {
- val = b->val[X_ATOM];
- if (vmap[val].is_const) {
- b->s.k += vmap[val].const_val;
- last->s.code = NOP;
- done = 0;
- } else if (b->s.k == 0) {
- /*
- * sub x -> nop
- * j #0 j x
- */
- last->s.code = NOP;
- b->s.code = BPF_CLASS(b->s.code) | BPF_OP(b->s.code) |
- BPF_X;
- done = 0;
- }
- }
- /*
- * Likewise, a constant subtract can be simplified.
- */
- else if (last->s.code == (BPF_ALU|BPF_SUB|BPF_K) &&
- !ATOMELEM(b->out_use, A_ATOM)) {
- b->s.k += last->s.k;
- last->s.code = NOP;
- done = 0;
- }
- /*
- * and #k nop
- * jeq #0 -> jset #k
- */
- if (last->s.code == (BPF_ALU|BPF_AND|BPF_K) &&
- !ATOMELEM(b->out_use, A_ATOM) && b->s.k == 0) {
- b->s.k = last->s.k;
- b->s.code = BPF_JMP|BPF_K|BPF_JSET;
- last->s.code = NOP;
- done = 0;
- opt_not(b);
- }
- /*
- * If the accumulator is a known constant, we can compute the
- * comparison result.
- */
- val = b->val[A_ATOM];
- if (vmap[val].is_const && BPF_SRC(b->s.code) == BPF_K) {
- v = vmap[val].const_val;
- switch (BPF_OP(b->s.code)) {
-
- case BPF_JEQ:
- v = v == b->s.k;
- break;
-
- case BPF_JGT:
- v = v > b->s.k;
- break;
-
- case BPF_JGE:
- v = v >= b->s.k;
- break;
-
- case BPF_JSET:
- v &= b->s.k;
- break;
-
- default:
- abort();
- }
- if (JF(b) != JT(b))
- done = 0;
- if (v)
- JF(b) = JT(b);
- else
- JT(b) = JF(b);
- }
-}
-
-/*
- * Compute the symbolic value of expression of 's', and update
- * anything it defines in the value table 'val'. If 'alter' is true,
- * do various optimizations. This code would be cleaner if symblic
- * evaluation and code transformations weren't folded together.
- */
-static void
-opt_stmt(s, val, alter)
- struct stmt *s;
- long val[];
- int alter;
-{
- int op;
- long v;
-
- switch (s->code) {
-
- case BPF_LD|BPF_ABS|BPF_W:
- case BPF_LD|BPF_ABS|BPF_H:
- case BPF_LD|BPF_ABS|BPF_B:
- v = F(s->code, s->k, 0L);
- vstore(s, &val[A_ATOM], v, alter);
- break;
-
- case BPF_LD|BPF_IND|BPF_W:
- case BPF_LD|BPF_IND|BPF_H:
- case BPF_LD|BPF_IND|BPF_B:
- v = val[X_ATOM];
- if (alter && vmap[v].is_const) {
- s->code = BPF_LD|BPF_ABS|BPF_SIZE(s->code);
- s->k += vmap[v].const_val;
- v = F(s->code, s->k, 0L);
- done = 0;
- }
- else
- v = F(s->code, s->k, v);
- vstore(s, &val[A_ATOM], v, alter);
- break;
-
- case BPF_LD|BPF_LEN:
- v = F(s->code, 0L, 0L);
- vstore(s, &val[A_ATOM], v, alter);
- break;
-
- case BPF_LD|BPF_IMM:
- v = K(s->k);
- vstore(s, &val[A_ATOM], v, alter);
- break;
-
- case BPF_LDX|BPF_IMM:
- v = K(s->k);
- vstore(s, &val[X_ATOM], v, alter);
- break;
-
- case BPF_LDX|BPF_MSH|BPF_B:
- v = F(s->code, s->k, 0L);
- vstore(s, &val[X_ATOM], v, alter);
- break;
-
- case BPF_ALU|BPF_NEG:
- if (alter && vmap[val[A_ATOM]].is_const) {
- s->code = BPF_LD|BPF_IMM;
- s->k = -vmap[val[A_ATOM]].const_val;
- val[A_ATOM] = K(s->k);
- }
- else
- val[A_ATOM] = F(s->code, val[A_ATOM], 0L);
- break;
-
- case BPF_ALU|BPF_ADD|BPF_K:
- case BPF_ALU|BPF_SUB|BPF_K:
- case BPF_ALU|BPF_MUL|BPF_K:
- case BPF_ALU|BPF_DIV|BPF_K:
- case BPF_ALU|BPF_AND|BPF_K:
- case BPF_ALU|BPF_OR|BPF_K:
- case BPF_ALU|BPF_LSH|BPF_K:
- case BPF_ALU|BPF_RSH|BPF_K:
- op = BPF_OP(s->code);
- if (alter) {
- if (s->k == 0) {
- if (op == BPF_ADD || op == BPF_SUB ||
- op == BPF_LSH || op == BPF_RSH ||
- op == BPF_OR) {
- s->code = NOP;
- break;
- }
- if (op == BPF_MUL || op == BPF_AND) {
- s->code = BPF_LD|BPF_IMM;
- val[A_ATOM] = K(s->k);
- break;
- }
- }
- if (vmap[val[A_ATOM]].is_const) {
- fold_op(s, val[A_ATOM], K(s->k));
- val[A_ATOM] = K(s->k);
- break;
- }
- }
- val[A_ATOM] = F(s->code, val[A_ATOM], K(s->k));
- break;
-
- case BPF_ALU|BPF_ADD|BPF_X:
- case BPF_ALU|BPF_SUB|BPF_X:
- case BPF_ALU|BPF_MUL|BPF_X:
- case BPF_ALU|BPF_DIV|BPF_X:
- case BPF_ALU|BPF_AND|BPF_X:
- case BPF_ALU|BPF_OR|BPF_X:
- case BPF_ALU|BPF_LSH|BPF_X:
- case BPF_ALU|BPF_RSH|BPF_X:
- op = BPF_OP(s->code);
- if (alter && vmap[val[X_ATOM]].is_const) {
- if (vmap[val[A_ATOM]].is_const) {
- fold_op(s, val[A_ATOM], val[X_ATOM]);
- val[A_ATOM] = K(s->k);
- }
- else {
- s->code = BPF_ALU|BPF_K|op;
- s->k = vmap[val[X_ATOM]].const_val;
- done = 0;
- val[A_ATOM] =
- F(s->code, val[A_ATOM], K(s->k));
- }
- break;
- }
- /*
- * Check if we're doing something to an accumulator
- * that is 0, and simplify. This may not seem like
- * much of a simplification but it could open up further
- * optimizations.
- * XXX We could also check for mul by 1, and -1, etc.
- */
- if (alter && vmap[val[A_ATOM]].is_const
- && vmap[val[A_ATOM]].const_val == 0) {
- if (op == BPF_ADD || op == BPF_OR ||
- op == BPF_LSH || op == BPF_RSH || op == BPF_SUB) {
- s->code = BPF_MISC|BPF_TXA;
- vstore(s, &val[A_ATOM], val[X_ATOM], alter);
- break;
- }
- else if (op == BPF_MUL || op == BPF_DIV ||
- op == BPF_AND) {
- s->code = BPF_LD|BPF_IMM;
- s->k = 0;
- vstore(s, &val[A_ATOM], K(s->k), alter);
- break;
- }
- else if (op == BPF_NEG) {
- s->code = NOP;
- break;
- }
- }
- val[A_ATOM] = F(s->code, val[A_ATOM], val[X_ATOM]);
- break;
-
- case BPF_MISC|BPF_TXA:
- vstore(s, &val[A_ATOM], val[X_ATOM], alter);
- break;
-
- case BPF_LD|BPF_MEM:
- v = val[s->k];
- if (alter && vmap[v].is_const) {
- s->code = BPF_LD|BPF_IMM;
- s->k = vmap[v].const_val;
- done = 0;
- }
- vstore(s, &val[A_ATOM], v, alter);
- break;
-
- case BPF_MISC|BPF_TAX:
- vstore(s, &val[X_ATOM], val[A_ATOM], alter);
- break;
-
- case BPF_LDX|BPF_MEM:
- v = val[s->k];
- if (alter && vmap[v].is_const) {
- s->code = BPF_LDX|BPF_IMM;
- s->k = vmap[v].const_val;
- done = 0;
- }
- vstore(s, &val[X_ATOM], v, alter);
- break;
-
- case BPF_ST:
- vstore(s, &val[s->k], val[A_ATOM], alter);
- break;
-
- case BPF_STX:
- vstore(s, &val[s->k], val[X_ATOM], alter);
- break;
- }
-}
-
-static void
-deadstmt(s, last)
- register struct stmt *s;
- register struct stmt *last[];
-{
- register int atom;
-
- atom = atomuse(s);
- if (atom >= 0) {
- if (atom == AX_ATOM) {
- last[X_ATOM] = 0;
- last[A_ATOM] = 0;
- }
- else
- last[atom] = 0;
- }
- atom = atomdef(s);
- if (atom >= 0) {
- if (last[atom]) {
- done = 0;
- last[atom]->code = NOP;
- }
- last[atom] = s;
- }
-}
-
-static void
-opt_deadstores(b)
- register struct block *b;
-{
- register struct slist *s;
- register int atom;
- struct stmt *last[N_ATOMS];
-
- bzero((char *)last, sizeof last);
-
- for (s = b->stmts; s != 0; s = s->next)
- deadstmt(&s->s, last);
- deadstmt(&b->s, last);
-
- for (atom = 0; atom < N_ATOMS; ++atom)
- if (last[atom] && !ATOMELEM(b->out_use, atom)) {
- last[atom]->code = NOP;
- done = 0;
- }
-}
-
-static void
-opt_blk(b, do_stmts)
- struct block *b;
-{
- struct slist *s;
- struct edge *p;
- int i;
- long aval;
-
- /*
- * Initialize the atom values.
- * If we have no predecessors, everything is undefined.
- * Otherwise, we inherent our values from our predecessors.
- * If any register has an ambiguous value (i.e. control paths are
- * merging) give it the undefined value of 0.
- */
- p = b->in_edges;
- if (p == 0)
- bzero((char *)b->val, sizeof(b->val));
- else {
- bcopy((char *)p->pred->val, (char *)b->val, sizeof(b->val));
- while (p = p->next) {
- for (i = 0; i < N_ATOMS; ++i)
- if (b->val[i] != p->pred->val[i])
- b->val[i] = 0;
- }
- }
- aval = b->val[A_ATOM];
- for (s = b->stmts; s; s = s->next)
- opt_stmt(&s->s, b->val, do_stmts);
-
- /*
- * This is a special case: if we don't use anything from this
- * block, and we load the accumulator with value that is
- * already there, eliminate all the statements.
- */
- if (do_stmts && b->out_use == 0 && aval != 0 &&
- b->val[A_ATOM] == aval)
- b->stmts = 0;
- else {
- opt_peep(b);
- opt_deadstores(b);
- }
- /*
- * Set up values for branch optimizer.
- */
- if (BPF_SRC(b->s.code) == BPF_K)
- b->oval = K(b->s.k);
- else
- b->oval = b->val[X_ATOM];
- b->et.code = b->s.code;
- b->ef.code = -b->s.code;
-}
-
-/*
- * Return true if any register that is used on exit from 'succ', has
- * an exit value that is different from the corresponding exit value
- * from 'b'.
- */
-static int
-use_conflict(b, succ)
- struct block *b, *succ;
-{
- int atom;
- atomset use = succ->out_use;
-
- if (use == 0)
- return 0;
-
- for (atom = 0; atom < N_ATOMS; ++atom)
- if (ATOMELEM(use, atom))
- if (b->val[atom] != succ->val[atom])
- return 1;
- return 0;
-}
-
-struct block *
-fold_edge(child, ep)
- struct block *child;
- struct edge *ep;
-{
- int sense;
- int aval0, aval1, oval0, oval1;
- int code = ep->code;
-
- if (code < 0) {
- code = -code;
- sense = 0;
- } else
- sense = 1;
-
- if (child->s.code != code)
- return 0;
-
- aval0 = child->val[A_ATOM];
- oval0 = child->oval;
- aval1 = ep->pred->val[A_ATOM];
- oval1 = ep->pred->oval;
-
- if (aval0 != aval1)
- return 0;
-
- if (oval0 == oval1)
- /*
- * The operands are identical, so the
- * result is true if a true branch was
- * taken to get here, otherwise false.
- */
- return sense ? JT(child) : JF(child);
-
- if (sense && code == (BPF_JMP|BPF_JEQ|BPF_K))
- /*
- * At this point, we only know the comparison if we
- * came down the true branch, and it was an equility
- * comparison with a constant. We rely on the fact that
- * distinct constants have distinct value numbers.
- */
- return JF(child);
-
- return 0;
-}
-
-static void
-opt_j(ep)
- struct edge *ep;
-{
- register int i, k;
- register struct block *target;
-
- if (JT(ep->succ) == 0)
- return;
-
- if (JT(ep->succ) == JF(ep->succ)) {
- /*
- * Common branch targets can be eliminated, provided
- * there is no data dependency.
- */
- if (!use_conflict(ep->pred, ep->succ->et.succ)) {
- done = 0;
- ep->succ = JT(ep->succ);
- }
- }
- /*
- * For each edge dominator that matches the successor of this
- * edge, promote the edge succesor to the its grandchild.
- *
- * XXX We violate the set abstraction here in favor a reasonbly
- * efficient loop.
- */
- top:
- for (i = 0; i < edgewords; ++i) {
- register u_long x = ep->edom[i];
-
- while (x != 0) {
- k = ffs(x) - 1;
- x &=~ 1 << k;
- k += i * BITS_PER_WORD;
-
- target = fold_edge(ep->succ, edges[k]);
- /*
- * Check that there is no data dependency between
- * nodes that will be violated if we move the edge.
- */
- if (target != 0 && !use_conflict(ep->pred, target)) {
- done = 0;
- ep->succ = target;
- if (JT(target) != 0)
- /*
- * Start over unless we hit a leaf.
- */
- goto top;
- return;
- }
- }
- }
-}
-
-
-static void
-or_pullup(b)
- struct block *b;
-{
- int val, at_top;
- struct block *pull;
- struct block **diffp, **samep;
- struct edge *ep;
-
- ep = b->in_edges;
- if (ep == 0)
- return;
-
- /*
- * Make sure each predecessor loads the same value.
- * XXX why?
- */
- val = ep->pred->val[A_ATOM];
- for (ep = ep->next; ep != 0; ep = ep->next)
- if (val != ep->pred->val[A_ATOM])
- return;
-
- if (JT(b->in_edges->pred) == b)
- diffp = &JT(b->in_edges->pred);
- else
- diffp = &JF(b->in_edges->pred);
-
- at_top = 1;
- while (1) {
- if (*diffp == 0)
- return;
-
- if (JT(*diffp) != JT(b))
- return;
-
- if (!SET_MEMBER((*diffp)->dom, b->id))
- return;
-
- if ((*diffp)->val[A_ATOM] != val)
- break;
-
- diffp = &JF(*diffp);
- at_top = 0;
- }
- samep = &JF(*diffp);
- while (1) {
- if (*samep == 0)
- return;
-
- if (JT(*samep) != JT(b))
- return;
-
- if (!SET_MEMBER((*samep)->dom, b->id))
- return;
-
- if ((*samep)->val[A_ATOM] == val)
- break;
-
- /* XXX Need to check that there are no data dependencies
- between dp0 and dp1. Currently, the code generator
- will not produce such dependencies. */
- samep = &JF(*samep);
- }
-#ifdef notdef
- /* XXX This doesn't cover everything. */
- for (i = 0; i < N_ATOMS; ++i)
- if ((*samep)->val[i] != pred->val[i])
- return;
-#endif
- /* Pull up the node. */
- pull = *samep;
- *samep = JF(pull);
- JF(pull) = *diffp;
-
- /*
- * At the top of the chain, each predecessor needs to point at the
- * pulled up node. Inside the chain, there is only one predecessor
- * to worry about.
- */
- if (at_top) {
- for (ep = b->in_edges; ep != 0; ep = ep->next) {
- if (JT(ep->pred) == b)
- JT(ep->pred) = pull;
- else
- JF(ep->pred) = pull;
- }
- }
- else
- *diffp = pull;
-
- done = 0;
-}
-
-static void
-and_pullup(b)
- struct block *b;
-{
- int val, at_top;
- struct block *pull;
- struct block **diffp, **samep;
- struct edge *ep;
-
- ep = b->in_edges;
- if (ep == 0)
- return;
-
- /*
- * Make sure each predecessor loads the same value.
- */
- val = ep->pred->val[A_ATOM];
- for (ep = ep->next; ep != 0; ep = ep->next)
- if (val != ep->pred->val[A_ATOM])
- return;
-
- if (JT(b->in_edges->pred) == b)
- diffp = &JT(b->in_edges->pred);
- else
- diffp = &JF(b->in_edges->pred);
-
- at_top = 1;
- while (1) {
- if (*diffp == 0)
- return;
-
- if (JF(*diffp) != JF(b))
- return;
-
- if (!SET_MEMBER((*diffp)->dom, b->id))
- return;
-
- if ((*diffp)->val[A_ATOM] != val)
- break;
-
- diffp = &JT(*diffp);
- at_top = 0;
- }
- samep = &JT(*diffp);
- while (1) {
- if (*samep == 0)
- return;
-
- if (JF(*samep) != JF(b))
- return;
-
- if (!SET_MEMBER((*samep)->dom, b->id))
- return;
-
- if ((*samep)->val[A_ATOM] == val)
- break;
-
- /* XXX Need to check that there are no data dependencies
- between diffp and samep. Currently, the code generator
- will not produce such dependencies. */
- samep = &JT(*samep);
- }
-#ifdef notdef
- /* XXX This doesn't cover everything. */
- for (i = 0; i < N_ATOMS; ++i)
- if ((*samep)->val[i] != pred->val[i])
- return;
-#endif
- /* Pull up the node. */
- pull = *samep;
- *samep = JT(pull);
- JT(pull) = *diffp;
-
- /*
- * At the top of the chain, each predecessor needs to point at the
- * pulled up node. Inside the chain, there is only one predecessor
- * to worry about.
- */
- if (at_top) {
- for (ep = b->in_edges; ep != 0; ep = ep->next) {
- if (JT(ep->pred) == b)
- JT(ep->pred) = pull;
- else
- JF(ep->pred) = pull;
- }
- }
- else
- *diffp = pull;
-
- done = 0;
-}
-
-static void
-opt_blks(root, do_stmts)
- struct block *root;
-{
- int i, maxlevel;
- struct block *p;
-
- init_val();
- maxlevel = root->level;
- for (i = maxlevel; i >= 0; --i)
- for (p = levels[i]; p; p = p->link)
- opt_blk(p, do_stmts);
-
- if (do_stmts)
- /*
- * No point trying to move branches; it can't possibly
- * make a difference at this point.
- */
- return;
-
- for (i = 1; i <= maxlevel; ++i) {
- for (p = levels[i]; p; p = p->link) {
- opt_j(&p->et);
- opt_j(&p->ef);
- }
- }
- for (i = 1; i <= maxlevel; ++i) {
- for (p = levels[i]; p; p = p->link) {
- or_pullup(p);
- and_pullup(p);
- }
- }
-}
-
-static inline void
-link_inedge(parent, child)
- struct edge *parent;
- struct block *child;
-{
- parent->next = child->in_edges;
- child->in_edges = parent;
-}
-
-static void
-find_inedges(root)
- struct block *root;
-{
- int i;
- struct block *b;
- struct edge *ep;
-
- for (i = 0; i < n_blocks; ++i)
- blocks[i]->in_edges = 0;
-
- /*
- * Traverse the graph, adding each edge to the predecessor
- * list of its sucessors. Skip the leaves (i.e. level 0).
- */
- for (i = root->level; i > 0; --i) {
- for (b = levels[i]; b != 0; b = b->link) {
- link_inedge(&b->et, JT(b));
- link_inedge(&b->ef, JF(b));
- }
- }
-}
-
-static void
-opt_root(b)
- struct block **b;
-{
- struct slist *tmp, *s;
-
- s = (*b)->stmts;
- (*b)->stmts = 0;
- while (BPF_CLASS((*b)->s.code) == BPF_JMP && JT(*b) == JF(*b))
- *b = JT(*b);
-
- tmp = (*b)->stmts;
- if (tmp != 0)
- sappend(s, tmp);
- (*b)->stmts = s;
-}
-
-static void
-opt_loop(root, do_stmts)
- struct block *root;
- int do_stmts;
-{
- int passes = 0;
-#ifdef BDEBUG
- if (dflag > 1)
- opt_dump(root);
-#endif
- do {
- done = 1;
- find_levels(root);
- find_dom(root);
- find_closure(root);
- find_inedges(root);
- find_ud(root);
- find_edom(root);
- opt_blks(root, do_stmts);
-#ifdef BDEBUG
- if (dflag > 1)
- opt_dump(root);
-#endif
- } while (!done);
-}
-
-/*
- * Optimize the filter code in its dag representation.
- */
-void
-optimize(rootp)
- struct block **rootp;
-{
- struct block *root;
-
- root = *rootp;
-
- opt_init(root);
- opt_loop(root, 0);
- opt_loop(root, 1);
- intern_blocks(root);
- opt_root(rootp);
- opt_cleanup();
-}
-
-static void
-make_marks(p)
- struct block *p;
-{
- if (!isMarked(p)) {
- Mark(p);
- if (BPF_CLASS(p->s.code) != BPF_RET) {
- make_marks(JT(p));
- make_marks(JF(p));
- }
- }
-}
-
-/*
- * Mark code array such that isMarked(i) is true
- * only for nodes that are alive.
- */
-static void
-mark_code(p)
- struct block *p;
-{
- cur_mark += 1;
- make_marks(p);
-}
-
-/*
- * True iff the two stmt lists load the same value from the packet into
- * the accumulator.
- */
-static int
-eq_slist(x, y)
- struct slist *x, *y;
-{
- while (1) {
- while (x && x->s.code == NOP)
- x = x->next;
- while (y && y->s.code == NOP)
- y = y->next;
- if (x == 0)
- return y == 0;
- if (y == 0)
- return x == 0;
- if (x->s.code != y->s.code || x->s.k != y->s.k)
- return 0;
- x = x->next;
- y = y->next;
- }
-}
-
-static inline int
-eq_blk(b0, b1)
- struct block *b0, *b1;
-{
- if (b0->s.code == b1->s.code &&
- b0->s.k == b1->s.k &&
- b0->et.succ == b1->et.succ &&
- b0->ef.succ == b1->ef.succ)
- return eq_slist(b0->stmts, b1->stmts);
- return 0;
-}
-
-static void
-intern_blocks(root)
- struct block *root;
-{
- struct block *p;
- int i, j;
- int done;
- top:
- done = 1;
- for (i = 0; i < n_blocks; ++i)
- blocks[i]->link = 0;
-
- mark_code(root);
-
- for (i = n_blocks - 1; --i >= 0; ) {
- if (!isMarked(blocks[i]))
- continue;
- for (j = i + 1; j < n_blocks; ++j) {
- if (!isMarked(blocks[j]))
- continue;
- if (eq_blk(blocks[i], blocks[j])) {
- blocks[i]->link = blocks[j]->link ?
- blocks[j]->link : blocks[j];
- break;
- }
- }
- }
- for (i = 0; i < n_blocks; ++i) {
- p = blocks[i];
- if (JT(p) == 0)
- continue;
- if (JT(p)->link) {
- done = 0;
- JT(p) = JT(p)->link;
- }
- if (JF(p)->link) {
- done = 0;
- JF(p) = JF(p)->link;
- }
- }
- if (!done)
- goto top;
-}
-
-static void
-opt_cleanup()
-{
- free((void *)vnode_base);
- free((void *)vmap);
- free((void *)edges);
- free((void *)space);
- free((void *)levels);
- free((void *)blocks);
-}
-
-/*
- * Return the number of stmts in 's'.
- */
-static int
-slength(s)
- struct slist *s;
-{
- int n = 0;
-
- for (; s; s = s->next)
- if (s->s.code != NOP)
- ++n;
- return n;
-}
-
-/*
- * Return the number of nodes reachable by 'p'.
- * All nodes should be initially unmarked.
- */
-static int
-count_blocks(p)
- struct block *p;
-{
- if (p == 0 || isMarked(p))
- return 0;
- Mark(p);
- return count_blocks(JT(p)) + count_blocks(JF(p)) + 1;
-}
-
-/*
- * Do a depth first search on the flow graph, numbering the
- * the basic blocks, and entering them into the 'blocks' array.`
- */
-static void
-number_blks_r(p)
- struct block *p;
-{
- int n;
-
- if (p == 0 || isMarked(p))
- return;
-
- Mark(p);
- n = n_blocks++;
- p->id = n;
- blocks[n] = p;
-
- number_blks_r(JT(p));
- number_blks_r(JF(p));
-}
-
-/*
- * Return the number of stmts in the flowgraph reachable by 'p'.
- * The nodes should be unmarked before calling.
- */
-static int
-count_stmts(p)
- struct block *p;
-{
- int n;
-
- if (p == 0 || isMarked(p))
- return 0;
- Mark(p);
- n = count_stmts(JT(p)) + count_stmts(JF(p));
- return slength(p->stmts) + n + 1;
-}
-
-/*
- * Allocate memory. All allocation is done before optimization
- * is begun. A linear bound on the size of all data structures is computed
- * from the total number of blocks and/or statements.
- */
-static void
-opt_init(root)
- struct block *root;
-{
- u_long *p;
- int i, n, max_stmts;
-
- /*
- * First, count the blocks, so we can malloc an array to map
- * block number to block. Then, put the blocks into the array.
- */
- unMarkAll();
- n = count_blocks(root);
- blocks = (struct block **)malloc(n * sizeof(*blocks));
- unMarkAll();
- n_blocks = 0;
- number_blks_r(root);
-
- n_edges = 2 * n_blocks;
- edges = (struct edge **)malloc(n_edges * sizeof(*edges));
-
- /*
- * The number of levels is bounded by the number of nodes.
- */
- levels = (struct block **)malloc(n_blocks * sizeof(*levels));
-
- edgewords = n_edges / (8 * sizeof(u_long)) + 1;
- nodewords = n_blocks / (8 * sizeof(u_long)) + 1;
-
- /* XXX */
- space = (u_long *)malloc(2 * n_blocks * nodewords * sizeof(*space)
- + n_edges * edgewords * sizeof(*space));
- p = space;
- all_dom_sets = p;
- for (i = 0; i < n; ++i) {
- blocks[i]->dom = p;
- p += nodewords;
- }
- all_closure_sets = p;
- for (i = 0; i < n; ++i) {
- blocks[i]->closure = p;
- p += nodewords;
- }
- all_edge_sets = p;
- for (i = 0; i < n; ++i) {
- register struct block *b = blocks[i];
-
- b->et.edom = p;
- p += edgewords;
- b->ef.edom = p;
- p += edgewords;
- b->et.id = i;
- edges[i] = &b->et;
- b->ef.id = n_blocks + i;
- edges[n_blocks + i] = &b->ef;
- b->et.pred = b;
- b->ef.pred = b;
- }
- max_stmts = 0;
- for (i = 0; i < n; ++i)
- max_stmts += slength(blocks[i]->stmts) + 1;
- /*
- * We allocate at most 3 value numbers per statement,
- * so this is an upper bound on the number of valnodes
- * we'll need.
- */
- maxval = 3 * max_stmts;
- vmap = (struct vmapinfo *)malloc(maxval * sizeof(*vmap));
- vnode_base = (struct valnode *)malloc(maxval * sizeof(*vmap));
-}
-
-/*
- * Some pointers used to convert the basic block form of the code,
- * into the array form that BPF requires. 'fstart' will point to
- * the malloc'd array while 'ftail' is used during the recursive traversal.
- */
-static struct bpf_insn *fstart;
-static struct bpf_insn *ftail;
-
-#ifdef BDEBUG
-int bids[1000];
-#endif
-
-static void
-convert_code_r(p)
- struct block *p;
-{
- struct bpf_insn *dst;
- struct slist *src;
- int slen;
- u_int off;
-
- if (p == 0 || isMarked(p))
- return;
- Mark(p);
-
- convert_code_r(JF(p));
- convert_code_r(JT(p));
-
- slen = slength(p->stmts);
- dst = ftail -= slen + 1;
-
- p->offset = dst - fstart;
-
- for (src = p->stmts; src; src = src->next) {
- if (src->s.code == NOP)
- continue;
- dst->code = (u_short)src->s.code;
- dst->k = src->s.k;
- ++dst;
- }
-#ifdef BDEBUG
- bids[dst - fstart] = p->id + 1;
-#endif
- dst->code = (u_short)p->s.code;
- dst->k = p->s.k;
- if (JT(p)) {
- off = JT(p)->offset - (p->offset + slen) - 1;
- if (off >= 256)
- error("long jumps not supported");
- dst->jt = off;
- off = JF(p)->offset - (p->offset + slen) - 1;
- if (off >= 256)
- error("long jumps not supported");
- dst->jf = off;
- }
-}
-
-
-/*
- * Convert flowgraph intermediate representation to the
- * BPF array representation. Set *lenp to the number of instructions.
- */
-struct bpf_insn *
-icode_to_fcode(root, lenp)
- struct block *root;
- int *lenp;
-{
- int n;
- struct bpf_insn *fp;
-
- unMarkAll();
- n = *lenp = count_stmts(root);
-
- fp = (struct bpf_insn *)malloc(sizeof(*fp) * n);
- bzero((char *)fp, sizeof(*fp) * n);
- fstart = fp;
- ftail = fp + n;
-
- unMarkAll();
- convert_code_r(root);
-
- return fp;
-}
-
-#ifdef BDEBUG
-opt_dump(root)
- struct block *root;
-{
- struct bpf_program f;
-
- bzero(bids, sizeof bids);
- f.bf_insns = icode_to_fcode(root, &f.bf_len);
- bpf_dump(&f, 1);
- putchar('\n');
- free((char *)f.bf_insns);
-}
-#endif
diff --git a/usr.sbin/tcpdump/tcpdump/os.c b/usr.sbin/tcpdump/tcpdump/os.c
deleted file mode 100644
index 856fb5a..0000000
--- a/usr.sbin/tcpdump/tcpdump/os.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: os-bsd.c,v 1.2 90/09/21 02:12:17 mccanne Exp $ (LBL)";
-#endif
-
diff --git a/usr.sbin/tcpdump/tcpdump/pcap.c b/usr.sbin/tcpdump/tcpdump/pcap.c
deleted file mode 100644
index 04c9695..0000000
--- a/usr.sbin/tcpdump/tcpdump/pcap.c
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#)$Header: pcap-bpf.c,v 1.29 92/06/02 17:57:29 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <netdb.h>
-#include <ctype.h>
-#include <signal.h>
-#include <errno.h>
-#include <sys/param.h> /* optionally get BSD define */
-#include <sys/time.h>
-#include <sys/timeb.h>
-#include <sys/socket.h>
-#include <sys/file.h>
-#include <sys/ioctl.h>
-#include <net/bpf.h>
-#include <net/if.h>
-#include <string.h>
-
-#include "interface.h"
-
-extern int errno;
-
-static void
-bpf_stats(fd)
- int fd;
-{
- struct bpf_stat s;
-
- if (ioctl(fd, BIOCGSTATS, &s) < 0)
- return;
-
- (void)fflush(stdout);
- (void)fprintf(stderr, "%d packets received by filter\n", s.bs_recv);
- (void)fprintf(stderr, "%d packets dropped by kernel\n", s.bs_drop);
-}
-
-void
-readloop(cnt, if_fd, fp, printit)
- int cnt;
- int if_fd;
- struct bpf_program *fp;
- void (*printit)();
-{
- u_char *buf;
- u_int bufsize;
- int cc;
-
- if (ioctl(if_fd, BIOCGBLEN, (caddr_t)&bufsize) < 0) {
- perror("tcpdump: BIOCGBLEN");
- exit(1);
- }
- buf = (u_char *)malloc(bufsize);
-
- if (ioctl(if_fd, BIOCSETF, (caddr_t)fp) < 0) {
- perror("tcpdump: BIOCSETF");
- exit(1);
- }
- while (1) {
- register u_char *bp, *ep;
-
- if ((cc = read(if_fd, (char *)buf, (int)bufsize)) < 0) {
- /* Don't choke when we get ptraced */
- if (errno == EINTR)
- continue;
-#if defined(sun) && !defined(BSD)
- /*
- * Due to a SunOS bug, after 2^31 bytes, the kernel
- * file offset overflows and read fails with EINVAL.
- * The lseek() to 0 will fix things.
- */
- if (errno == EINVAL &&
- (long)(tell(if_fd) + bufsize) < 0) {
- (void)lseek(if_fd, 0, 0);
- continue;
- }
-#endif
- perror("tcpdump: read");
- exit(1);
- }
- /*
- * Loop through each packet.
- */
-#define bhp ((struct bpf_hdr *)bp)
- bp = buf;
- ep = bp + cc;
- while (bp < ep) {
- register int caplen, hdrlen;
- if (cnt >= 0 && --cnt < 0)
- goto out;
- (*printit)(bp + (hdrlen = bhp->bh_hdrlen),
- &bhp->bh_tstamp, bhp->bh_datalen,
- caplen = bhp->bh_caplen);
- bp += BPF_WORDALIGN(caplen + hdrlen);
- }
-#undef bhp
- }
- out:
- wrapup(if_fd);
-}
-
-wrapup(fd)
- int fd;
-{
- bpf_stats(fd);
- close(fd);
-}
-
-static inline int
-bpf_open()
-{
- int fd;
- int n = 0;
- char device[sizeof "/dev/bpf000"];
-
- /*
- * Go through all the minors and find one that isn't in use.
- */
- do {
- (void)sprintf(device, "/dev/bpf%d", n++);
- fd = open(device, O_RDONLY);
- } while (fd < 0 && errno == EBUSY);
-
- if (fd < 0) {
- (void) fprintf(stderr, "tcpdump: ");
- perror(device);
- exit(-1);
- }
- return fd;
-}
-
-int
-initdevice(device, pflag, linktype)
- char *device;
- int pflag;
- int *linktype;
-{
- struct timeval timeout;
- int if_fd;
- struct ifreq ifr;
- struct bpf_version bv;
-
- if_fd = bpf_open();
-
- if (ioctl(if_fd, BIOCVERSION, (caddr_t)&bv) < 0)
- warning("kernel bpf interpreter may be out of date");
- else if (bv.bv_major != BPF_MAJOR_VERSION ||
- bv.bv_minor < BPF_MINOR_VERSION)
- error("requires bpf language %d.%d or higher; kernel is %d.%d",
- BPF_MAJOR_VERSION, BPF_MINOR_VERSION,
- bv.bv_major, bv.bv_minor);
-
- (void)strncpy(ifr.ifr_name, device, sizeof(ifr.ifr_name));
- if (ioctl(if_fd, BIOCSETIF, (caddr_t)&ifr) < 0) {
- (void) fprintf(stderr, "tcpdump: BIOCSETIF: ");
- perror(device);
- exit(-1);
- }
- /* Get the data link layer type. */
- if (ioctl(if_fd, BIOCGDLT, (caddr_t)linktype) < 0) {
- perror("tcpdump: BIOCGDLT");
- exit(-1);
- }
- /* set timeout */
- timeout.tv_sec = 1;
- timeout.tv_usec = 0;
- if (ioctl(if_fd, BIOCSRTIMEOUT, (caddr_t)&timeout) < 0) {
- perror("tcpdump: BIOCSRTIMEOUT");
- exit(-1);
- }
- /* set promiscuous mode if requested, but only for broadcast nets */
- if (pflag == 0) {
- switch (*linktype) {
-
- case DLT_SLIP:
- case DLT_PPP:
- case DLT_NULL:
- break;
-
- default:
- if (ioctl(if_fd, BIOCPROMISC, (void *)0) < 0) {
- perror("tcpdump: BIOCPROMISC");
- exit(-1);
- }
- }
- }
- return(if_fd);
-}
diff --git a/usr.sbin/tcpdump/tcpdump/savefile.c b/usr.sbin/tcpdump/tcpdump/savefile.c
deleted file mode 100644
index 79bb9e8..0000000
--- a/usr.sbin/tcpdump/tcpdump/savefile.c
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
- * Copyright (c) 1990,1991 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#)$Header: savefile.c,v 1.27 92/01/26 21:29:26 mccanne Exp $ (LBL)";
-#endif
-
-/*
- * savefile.c - supports offline use of tcpdump
- * Extraction/creation by Jeffrey Mogul, DECWRL
- * Modified by Steve McCanne, LBL.
- *
- * Used to save the received packet headers, after filtering, to
- * a file, and then read them later.
- * The first record in the file contains saved values for the machine
- * dependent values so we can print the dump file on any architecture.
- */
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <net/bpf.h>
-
-#include "version.h"
-#include "savefile.h"
-
-#define TCPDUMP_MAGIC 0xa1b2c3d4
-
-/*
- * The first record in the file contains saved values for some
- * of the flags used in the printout phases of tcpdump.
- * Many fields here are longs so compilers won't insert unwanted
- * padding; these files need to be interchangeable across architectures.
- */
-struct file_header {
- u_long magic;
- u_short version_major;
- u_short version_minor;
- long thiszone; /* gmt to local correction */
- u_long sigfigs; /* accuracy of timestamps */
- u_long snaplen; /* max length saved portion of each pkt */
- u_long linktype;
-};
-
-int sf_swapped;
-
-FILE *sf_readfile;
-FILE *sf_writefile;
-
-static int
-sf_write_header(fp, linktype, thiszone, snaplen, precision)
- FILE *fp;
- int linktype;
- int thiszone;
- int snaplen;
- int precision;
-{
- struct file_header hdr;
-
- hdr.magic = TCPDUMP_MAGIC;
- hdr.version_major = VERSION_MAJOR;
- hdr.version_minor = VERSION_MINOR;
-
- hdr.thiszone = thiszone;
- hdr.snaplen = snaplen;
- hdr.sigfigs = precision;
- hdr.linktype = linktype;
-
- if (fwrite((char *)&hdr, sizeof(hdr), 1, fp) != 1)
- return -1;
-
- return 0;
-}
-
-static void
-swap_hdr(hp)
- struct file_header *hp;
-{
- hp->version_major = SWAPSHORT(hp->version_major);
- hp->version_minor = SWAPSHORT(hp->version_minor);
- hp->thiszone = SWAPLONG(hp->thiszone);
- hp->sigfigs = SWAPLONG(hp->sigfigs);
- hp->snaplen = SWAPLONG(hp->snaplen);
- hp->linktype = SWAPLONG(hp->linktype);
-}
-
-int
-sf_read_init(fname, linktypep, thiszonep, snaplenp, precision)
- char *fname;
- int *linktypep, *thiszonep, *snaplenp, *precision;
-{
- register FILE *fp;
- struct file_header hdr;
-
- if (fname[0] == '-' && fname[1] == '\0')
- fp = stdin;
- else {
- fp = fopen(fname, "r");
- if (fp == 0) {
- (void) fprintf(stderr, "tcpdump: fopen: ");
- perror(fname);
- exit(1);
- }
- }
- if (fread((char *)&hdr, sizeof(hdr), 1, fp) != 1) {
- (void) fprintf(stderr, "tcpdump: fread: ");
- perror(fname);
- exit(1);
- }
- if (hdr.magic != TCPDUMP_MAGIC) {
- if (SWAPLONG(hdr.magic) != TCPDUMP_MAGIC)
- return SFERR_BADF;
- sf_swapped = 1;
- swap_hdr(&hdr);
- }
- if (hdr.version_major < VERSION_MAJOR)
- return SFERR_BADVERSION;
-
- *thiszonep = hdr.thiszone;
- *snaplenp = hdr.snaplen;
- *linktypep = hdr.linktype;
- *precision = hdr.sigfigs;
-
- sf_readfile = fp;
-
- return 0;
-}
-
-/*
- * Print out packets stored in the file initilized by sf_read_init().
- * If cnt >= 0, return after 'cnt' packets, otherwise continue until eof.
- */
-int
-sf_read(filtp, cnt, snaplen, printit)
- struct bpf_program *filtp;
- int cnt, snaplen;
- void (*printit)();
-{
- struct packet_header h;
- u_char *buf;
- struct bpf_insn *fcode = filtp->bf_insns;
- int status = 0;
-
- buf = (u_char *)malloc(snaplen);
-
- while (status == 0) {
- status = sf_next_packet(&h, buf, snaplen);
-
- if (status)
- break;
- /*
- * XXX It's possible (and likely) for us to screw up the
- * network layer alignment when we pass down packets from
- * this point (ip_print deals by copying the ip header
- * to an aligned buffer). There doesn't seem to be a
- * clean way to fix this. We could compute an offset
- * from the link type (which would have to be passed in),
- * but that only works for fixed size headers.
- */
- if (bpf_filter(fcode, buf, h.len, h.caplen)) {
- if (cnt >= 0 && --cnt < 0)
- break;
- (*printit)(buf, &h.ts, h.len, h.caplen);
- }
- }
-
- if (status == SFERR_EOF)
- /* treat EOF's as okay status */
- status = 0;
-
- free((char *)buf);
- return status;
-}
-
-/*
- * Read sf_readfile and return the next packet. Return the header in hdr
- * and the contents in buf. Return 0 on success, SFERR_EOF if there were
- * no more packets, and SFERR_TRUNC if a partial packet was encountered.
- */
-int
-sf_next_packet(hdr, buf, buflen)
- struct packet_header *hdr;
- u_char *buf;
- int buflen;
-{
- FILE *fp = sf_readfile;
-
- /* read the stamp */
- if (fread((char *)hdr, sizeof(struct packet_header), 1, fp) != 1) {
- /* probably an EOF, though could be a truncated packet */
- return SFERR_EOF;
- }
-
- if (sf_swapped) {
- /* these were written in opposite byte order */
- hdr->caplen = SWAPLONG(hdr->caplen);
- hdr->len = SWAPLONG(hdr->len);
- hdr->ts.tv_sec = SWAPLONG(hdr->ts.tv_sec);
- hdr->ts.tv_usec = SWAPLONG(hdr->ts.tv_usec);
- }
-
- if (hdr->caplen > buflen)
- return SFERR_BADF;
-
- /* read the packet itself */
-
- if (fread((char *)buf, hdr->caplen, 1, fp) != 1)
- return SFERR_TRUNC;
-
- return 0;
-}
-
-/*
- * Initialize so that sf_write() will output to the file named 'fname'.
- */
-void
-sf_write_init(fname, linktype, thiszone, snaplen, precision)
- char *fname;
- int linktype;
- int thiszone;
- int snaplen;
- int precision;
-{
- if (fname[0] == '-' && fname[1] == '\0')
- sf_writefile = stdout;
- else {
- sf_writefile = fopen(fname, "w");
- if (sf_writefile == 0) {
- (void) fprintf(stderr, "tcpdump: fopen: ");
- perror(fname);
- exit(1);
- }
- }
- (void)sf_write_header(sf_writefile,
- linktype, thiszone, snaplen, precision);
-}
-
-/*
- * Output a packet to the intialized dump file.
- */
-void
-sf_write(sp, tvp, length, caplen)
- u_char *sp;
- struct timeval *tvp;
- int length;
- int caplen;
-{
- struct packet_header h;
-
- h.ts.tv_sec = tvp->tv_sec;
- h.ts.tv_usec = tvp->tv_usec;
- h.len = length;
- h.caplen = caplen;
-
- (void)fwrite((char *)&h, sizeof h, 1, sf_writefile);
- (void)fwrite((char *)sp, caplen, 1, sf_writefile);
-}
-
-void
-sf_err(code)
- int code;
-{
- switch (code) {
- case SFERR_BADVERSION:
- error("archaic file format");
- /* NOTREACHED */
-
- case SFERR_BADF:
- error("bad dump file format");
- /* NOTREACHED */
-
- case SFERR_TRUNC:
- error("truncated dump file");
- /* NOTREACHED */
-
- case SFERR_EOF:
- error("EOF reading dump file");
- /* NOTREACHED */
-
- default:
- error("unknown dump file error code in sf_err()");
- /* NOTREACHED */
- }
- abort();
-}
diff --git a/usr.sbin/tcpdump/tcpdump/savefile.h b/usr.sbin/tcpdump/tcpdump/savefile.h
deleted file mode 100644
index a5082f9..0000000
--- a/usr.sbin/tcpdump/tcpdump/savefile.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (c) 1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * $Header: savefile.h,v 1.10 90/12/17 13:48:58 mccanne Exp $
- *
- * Header for offline storage info.
- * Extraction/creation by Jeffrey Mogul, DECWRL.
- *
- * Used to save the received packet headers, after filtering, to
- * a file, and then read them later.
- */
-
-/*
- * Each packet in the dump file is prepended with this generic header.
- * This gets around the problem of different headers for different
- * packet interfaces.
- */
-struct packet_header {
- struct timeval ts; /* time stamp */
- u_long len; /* length this packet (off wire) */
- u_long caplen; /* length of portion present */
-};
-
-/* true if the contents of the savefile being read are byte-swapped */
-extern int sf_swapped;
-
-/* macros for when sf_swapped is true: */
-/*
- * We use the "receiver-makes-right" approach to byte order,
- * because time is at a premium when we are writing the file.
- * In other words, the file_header and packet_header records
- * are written in host byte order.
- * Note that the packets are always written in network byte order.
- *
- * ntoh[ls] aren't sufficient because we might need to swap on a big-endian
- * machine (if the file was written in little-end order).
- */
-#define SWAPLONG(y) \
-((((y)&0xff)<<24) | (((y)&0xff00)<<8) | (((y)&0xff0000)>>8) | (((y)>>24)&0xff))
-#define SWAPSHORT(y) \
- ( (((y)&0xff)<<8) | (((y)&0xff00)>>8) )
-
-
-extern FILE *sf_readfile; /* dump file being read from */
-extern FILE *sf_writefile; /* dump file being written to */
-
-int sf_read_init();
-int sf_read();
-int sf_next_packet();
-void sf_write_init();
-void sf_write();
-void sf_err();
-
-#define SFERR_TRUNC 1
-#define SFERR_BADVERSION 2
-#define SFERR_BADF 3
-#define SFERR_EOF 4 /* not really an error, just a status */
-
diff --git a/usr.sbin/tcpdump/tcpdump/tcpgram.y b/usr.sbin/tcpdump/tcpdump/tcpgram.y
deleted file mode 100644
index da235d0..0000000
--- a/usr.sbin/tcpdump/tcpdump/tcpgram.y
+++ /dev/null
@@ -1,232 +0,0 @@
-%{
-/*
- * Copyright (c) 1988-1990 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: (1) source code distributions
- * retain the above copyright notice and this paragraph in its entirety, (2)
- * distributions including binary code include the above copyright notice and
- * this paragraph in its entirety in the documentation or other materials
- * provided with the distribution, and (3) all advertising materials mentioning
- * features or use of this software display the following acknowledgement:
- * ``This product includes software developed by the University of California,
- * Lawrence Berkeley Laboratory and its contributors.'' 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 ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
- *
- * Grammar for tcpdump.
- */
-#ifndef lint
-static char rcsid[] =
- "@(#) $Header: tcpgram.y,v 1.29 92/03/17 13:45:08 mccanne Exp $ (LBL)";
-#endif
-
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <net/if.h>
-#include <netinet/in.h>
-#include <netinet/if_ether.h>
-
-#include "interface.h"
-
-#include <sys/time.h>
-#include <net/bpf.h>
-
-#include "gencode.h"
-
-#define QSET(q, p, d, a) (q).proto = (p),\
- (q).dir = (d),\
- (q).addr = (a)
-
-int n_errors = 0;
-
-static struct qual qerr = { Q_UNDEF, Q_UNDEF, Q_UNDEF, Q_UNDEF };
-
-static void
-yyerror()
-{
- ++n_errors;
-}
-
-%}
-
-%union {
- int i;
- u_long h;
- u_char *e;
- char *s;
- struct stmt *stmt;
- struct arth *a;
- struct {
- struct qual q;
- struct block *b;
- } blk;
- struct block *rblk;
-}
-
-%type <blk> expr id nid pid term rterm qid
-%type <blk> head
-%type <i> pqual dqual aqual ndaqual
-%type <a> arth narth
-%type <i> byteop pname pnum relop irelop
-%type <blk> and or paren not null prog
-%type <rblk> other
-
-%token DST SRC HOST GATEWAY
-%token NET PORT LESS GREATER PROTO BYTE
-%token ARP RARP IP TCP UDP ICMP
-%token TK_BROADCAST TK_MULTICAST
-%token NUM
-%token LINK
-%token GEQ LEQ NEQ
-%token ID EID HID
-%token LSH RSH
-%token LEN
-
-%type <s> ID
-%type <e> EID
-%type <h> HID
-%type <i> NUM
-
-%left OR AND
-%nonassoc '!'
-%left '|'
-%left '&'
-%left LSH RSH
-%left '+' '-'
-%left '*' '/'
-%nonassoc UMINUS
-%%
-prog: null expr
-{
- finish_parse($2.b);
-}
- | null
- ;
-null: /* null */ { $$.q = qerr; }
- ;
-expr: term
- | expr and term { gen_and($1.b, $3.b); $$ = $3; }
- | expr and id { gen_and($1.b, $3.b); $$ = $3; }
- | expr or term { gen_or($1.b, $3.b); $$ = $3; }
- | expr or id { gen_or($1.b, $3.b); $$ = $3; }
- ;
-and: AND { $$ = $<blk>0; }
- ;
-or: OR { $$ = $<blk>0; }
- ;
-id: nid
- | pnum { $$.b = gen_ncode((u_long)$1,
- $$.q = $<blk>0.q); }
- | paren pid ')' { $$ = $2; }
- ;
-nid: ID { $$.b = gen_scode($1, $$.q = $<blk>0.q); }
- | HID { $$.b = gen_ncode($1, $$.q = $<blk>0.q); }
- | EID { $$.b = gen_ecode($1, $$.q = $<blk>0.q); }
- | not id { gen_not($2.b); $$ = $2; }
- ;
-not: '!' { $$ = $<blk>0; }
- ;
-paren: '(' { $$ = $<blk>0; }
- ;
-pid: nid
- | qid and id { gen_and($1.b, $3.b); $$ = $3; }
- | qid or id { gen_or($1.b, $3.b); $$ = $3; }
- ;
-qid: pnum { $$.b = gen_ncode((u_long)$1,
- $$.q = $<blk>0.q); }
- | pid
- ;
-term: rterm
- | not term { gen_not($2.b); $$ = $2; }
- ;
-head: pqual dqual aqual { QSET($$.q, $1, $2, $3); }
- | pqual dqual { QSET($$.q, $1, $2, Q_DEFAULT); }
- | pqual aqual { QSET($$.q, $1, Q_DEFAULT, $2); }
- | pqual PROTO { QSET($$.q, $1, Q_DEFAULT, Q_PROTO); }
- | pqual ndaqual { QSET($$.q, $1, Q_DEFAULT, $2); }
- ;
-rterm: head id { $$ = $2; }
- | paren expr ')' { $$.b = $2.b; $$.q = $1.q; }
- | pname { $$.b = gen_proto_abbrev($1); $$.q = qerr; }
- | arth relop arth { $$.b = gen_relation($2, $1, $3, 0);
- $$.q = qerr; }
- | arth irelop arth { $$.b = gen_relation($2, $1, $3, 1);
- $$.q = qerr; }
- | other { $$.b = $1; $$.q = qerr; }
- ;
-/* protocol level qualifiers */
-pqual: pname
- | { $$ = Q_DEFAULT; }
- ;
-/* 'direction' qualifiers */
-dqual: SRC { $$ = Q_SRC; }
- | DST { $$ = Q_DST; }
- | SRC OR DST { $$ = Q_OR; }
- | DST OR SRC { $$ = Q_OR; }
- | SRC AND DST { $$ = Q_AND; }
- | DST AND SRC { $$ = Q_AND; }
- ;
-/* address type qualifiers */
-aqual: HOST { $$ = Q_HOST; }
- | NET { $$ = Q_NET; }
- | PORT { $$ = Q_PORT; }
- ;
-/* non-directional address type qualifiers */
-ndaqual: GATEWAY { $$ = Q_GATEWAY; }
- ;
-pname: LINK { $$ = Q_LINK; }
- | IP { $$ = Q_IP; }
- | ARP { $$ = Q_ARP; }
- | RARP { $$ = Q_RARP; }
- | TCP { $$ = Q_TCP; }
- | UDP { $$ = Q_UDP; }
- | ICMP { $$ = Q_ICMP; }
- ;
-other: pqual TK_BROADCAST { $$ = gen_broadcast($1); }
- | pqual TK_MULTICAST { $$ = gen_multicast($1); }
- | LESS NUM { $$ = gen_less($2); }
- | GREATER NUM { $$ = gen_greater($2); }
- | BYTE NUM byteop NUM { $$ = gen_byteop($3, $2, $4); }
- ;
-relop: '>' { $$ = BPF_JGT; }
- | GEQ { $$ = BPF_JGE; }
- | '=' { $$ = BPF_JEQ; }
- ;
-irelop: LEQ { $$ = BPF_JGT; }
- | '<' { $$ = BPF_JGE; }
- | NEQ { $$ = BPF_JEQ; }
- ;
-arth: pnum { $$ = gen_loadi($1); }
- | narth
- ;
-narth: pname '[' arth ']' { $$ = gen_load($1, $3, 1); }
- | pname '[' arth ':' NUM ']' { $$ = gen_load($1, $3, $5); }
- | arth '+' arth { $$ = gen_arth(BPF_ADD, $1, $3); }
- | arth '-' arth { $$ = gen_arth(BPF_SUB, $1, $3); }
- | arth '*' arth { $$ = gen_arth(BPF_MUL, $1, $3); }
- | arth '/' arth { $$ = gen_arth(BPF_DIV, $1, $3); }
- | arth '&' arth { $$ = gen_arth(BPF_AND, $1, $3); }
- | arth '|' arth { $$ = gen_arth(BPF_OR, $1, $3); }
- | arth LSH arth { $$ = gen_arth(BPF_LSH, $1, $3); }
- | arth RSH arth { $$ = gen_arth(BPF_RSH, $1, $3); }
- | '-' arth %prec UMINUS { $$ = gen_neg($2); }
- | paren narth ')' { $$ = $2; }
- | LEN { $$ = gen_loadlen(); }
- ;
-byteop: '&' { $$ = '&'; }
- | '|' { $$ = '|'; }
- | '<' { $$ = '<'; }
- | '>' { $$ = '>'; }
- | '=' { $$ = '='; }
- ;
-pnum: NUM
- | paren pnum ')' { $$ = $2; }
- ;
-%%
diff --git a/usr.sbin/update/Makefile b/usr.sbin/update/Makefile
deleted file mode 100644
index ea20d05..0000000
--- a/usr.sbin/update/Makefile
+++ /dev/null
@@ -1,6 +0,0 @@
-# @(#)Makefile 8.1 (Berkeley) 6/6/93
-
-PROG= update
-MAN8= update.0
-
-.include <bsd.prog.mk>
diff --git a/usr.sbin/update/update.8 b/usr.sbin/update/update.8
deleted file mode 100644
index 78665fa..0000000
--- a/usr.sbin/update/update.8
+++ /dev/null
@@ -1,74 +0,0 @@
-.\" Copyright (c) 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. All advertising materials mentioning features or use of this software
-.\" must display the following acknowledgement:
-.\" This product includes software developed by the University of
-.\" California, Berkeley and its contributors.
-.\" 4. 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.
-.\"
-.\" @(#)update.8 8.3 (Berkeley) 4/19/94
-.\"
-.Dd April 19, 1994
-.Dt UPDATE 8
-.Os
-.Sh NAME
-.Nm update
-.Nd flush internal filesystem caches to disk frequently
-.Sh SYNOPSIS
-.Nm update
-.Sh DESCRIPTION
-The
-.Nm update
-command helps protect the integrity of disk volumes
-by flushing
-volatile cached filesystem data
-to disk at thirty second intervals.
-.Nm Update
-uses the
-.Xr sync 2
-function call to do the task.
-.Pp
-.Nm Update
-is commonly invoked at startup time by
-.Xr rc 8
-when the system goes multi-user.
-.Sh SEE ALSO
-.Xr sync 2 ,
-.Xr fsck 8 ,
-.Xr init 8 ,
-.Xr rc 8 ,
-.Xr sync 8
-.Sh BUGS
-It is possible on some systems that a
-.Xr sync
-occurring simultaneously with a crash may cause
-file system damage. See
-.Xr fsck 8 .
-.Sh HISTORY
-An
-.Nm update
-command appeared in
-.At v6 .
diff --git a/usr.sbin/update/update.c b/usr.sbin/update/update.c
deleted file mode 100644
index ae83ad1..0000000
--- a/usr.sbin/update/update.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*-
- * Copyright (c) 1987, 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Berkeley and its contributors.
- * 4. 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.
- */
-
-#ifndef lint
-static char copyright[] =
-"@(#) Copyright (c) 1987, 1990, 1993\n\
- The Regents of the University of California. All rights reserved.\n";
-#endif /* not lint */
-
-#ifndef lint
-static char sccsid[] = "@(#)update.c 8.1 (Berkeley) 6/6/93";
-#endif /* not lint */
-
-#include <sys/time.h>
-#include <signal.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <unistd.h>
-
-main()
-{
- struct itimerval value;
- void mysync();
-
- daemon(0, 0);
-
- (void)signal(SIGALRM, mysync);
-
- value.it_interval.tv_sec = 30;
- value.it_interval.tv_usec = 0;
- value.it_value = value.it_interval;
- if (setitimer(ITIMER_REAL, &value, NULL)) {
- perror("update: setitimer");
- exit(1);
- }
- for (;;)
- sigpause(sigblock(0L));
- /* NOTREACHED */
-}
-
-void
-mysync()
-{
- (void)sync();
-}
diff --git a/usr.sbin/xntpd/Config b/usr.sbin/xntpd/Config
deleted file mode 100644
index c15ec05..0000000
--- a/usr.sbin/xntpd/Config
+++ /dev/null
@@ -1,200 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_FREEBSD -DSYS_386BSD
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lcrypt
-RESLIB=
-COPTS= -O2
-COMPILER= gcc
-LIBDEFS= -DXNTP_LITTLE_ENDIAN
-# This is the local configure file (distribution version).
-# You must modify it to fit your particular configuration
-# and name it Config.local
-# The following configuratiions can be auto-generated:
-#
-# make Config.local.green
-# make a Config.local that supports a local clock
-# (i.e. allow fallback to use of the CPU's own clock)
-# make Config.local.NO.clock
-# make a Config.local that supports no clocks
-#
-#
-# NOTE TO GREENHORNS
-#
-# For plug-'n-play and no radios or other complicated gadgetry,
-# use "make Config.local.green" as above.
-#
-# Following defines can be set in the DEFS_OPT= define:
-#
-# The flag -DDEBUG includes some debugging code. To use this, include
-# the define and start the daemon with one or more -d flags, depending
-# on your calibration of pearannoya. The daemon will not detach your
-# terminal in this case. Judicious use of grep will reduce the speaker
-# volume to bearable levels.
-#
-# To change the location of the configuration file, use a
-# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
-#
-# The -DSYSLOG_FILE defines allows logging messages that are normally
-# reported via syslof() in a file. The file name can be configured using
-# the configuration line "logfile <filename>" in CONFIG_FILE.
-#
-# There are three serial port system software interfaces, each of
-# which is peculiar to one or more Unix versions. Define
-# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM
-# for POSIX compatibility including System V Streams, and
-# HAVE_BSD_TTYS for 4.3bsd compatibility. Only one of these three
-# should be defined. If none are defined, HAVE_BSD_TTYS is assumed.
-# Usually these defines are already set correctly.
-#
-DEFS_OPT=-DDEBUG
-
-#
-# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that)
-# and one of the following:
-#
-# The flag -DREFCLOCK causes the basic reference clock support to be
-# compiled into the daemon. If you set this you may also want to
-# configure the particular clock drivers you want in the CLOCKDEFS= line
-# below. This flag affects xntpd only. This define is included by
-# default when using the "make makeconfig" script.
-#
-# The next two sets of defines are meaningful only when radio clock
-# drivers or special 1-pps signals are to be used. For systems without
-# these features, these delicious complexities can be avoided. Ordinarily,
-# the "make makeconfig" script figures out which ones to use, but your
-# mileage may vary.
-#
-# There are three ways to utilize external 1-pps signals. Define
-# -DPPS to include just the pps routine, such as used by the DCF77(PARSE)
-# clock driver. Define -DPPSCLK to include a serial device driver
-# which avoids much of the jitter due to upper level port
-# processing. This requires a dedicated serial port and either the
-# tty_clock line discipline or tty_clk_streams module, both of
-# which are in the ./kernel directory. Define -DPPSCD to include a
-# special driver which intercepts carrier-detect transitions
-# generated by the pps signal. This requires a nondedicated serial
-# port and the ppsclock streams module in the ./kernel directory.
-# Only one of these three flags should be defined.
-#
-# The flag KERNEL_PLL causes code to be compiled for a special feature of
-# the kernel that (a) implements the phase-lock loop and (b) provides
-# a user interface to learn time, maximum error and estimated error.
-# See the file README.kern in the doc directory for further info.
-# This code is activated only if the relevant kernel features have
-# been configured; it does not affect operation of unmodified kernels.
-# To compile it, however, requires a few header files from the
-# special distribution.
-#
-# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
-DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL
-
-#
-# Radio clock support definitions (these only make sense if -DREFCLOCK
-# used), which is normally the case. Note that a configuration can include
-# no clocks, more than one type of clock and even multiple clocks of the
-# same type.
-#
-# For most radio clocks operating with serial ports, accuracy can
-# be considerably improved through use of the tty_clk line
-# discipline or tty_clk_STREAMS streams module found in the
-# ./kernel directory. These gizmos capture a timestamp upon
-# occurrence of an intercept character and stuff it in the data
-# stream for the clock driver to munch. To select this mode,
-# postfix the driver name with the string CLK; that is, WWVB
-# becomes WWVBCLK. If more than one clock is in use, the CLK
-# postfix can be used with any or all of them.
-#
-# Alternatively, for the best accuracy, use the ppsclock streams
-# module in the ./ppsclock directory to steal the carrier-detect
-# transition and capture a precision timestamp. At present this
-# works only with SunOS 4.1.1 or later. To select this mode,
-# postfix the driver name with the string PPS; that is, AS2201
-# becomes AS2201PPS. If more than one clock is in use, the PPS
-# postfix should be used with only one of them. If any PPS
-# postfix is defined, the -DPPSPPS define should be used on the
-# DEFS above.
-#
-# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a
-# reference clock for those subnets without access to the real thing.
-# Works in all systems and requires no hardware support. This is defined
-# by default when using the "make makeconfig" script and greenhorn
-# configuraiton.
-#
-# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver
-# supports both the CLK and PPS modes. It should work in all systems
-# with a serial port.
-#
-# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It
-# should work in all systems with a serial port. The driver supports
-# both the CLK and PPS modes if the requisite kernel support is installed.
-#
-# Define -DCHU for a special CHU receiver using an ordinary shortwave
-# radio. This requires the chu_clk line discipline or chu_clk_STREAMS
-# module in the ./kernel directory. At present, this driver works only
-# on SunOS4.1.x; operation in other systems has not been confirmed.
-# Construction details for a suitable modem can be found in the ./gadget
-# directory. The driver supports # neither the CLK nor PPS modes.
-#
-# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance
-# this requires a special parsestreams STREAMS (SunOS 4.x) module in the
-# ./parse directory. Define -DPARSEPPS for PPS support via the
-# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above.
-# Define: -DCLOCK_MEINBERG for Meinberg clocks
-# -DCLOCK_SCHMID for Schmid receivers
-# -DCLOCK_DCF7000 for ELV DCF7000
-# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx)
-# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver
-#
-# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this
-# driver works only on SunOS4.1.x with CPU serial ports only. The PPS
-# mode is required.
-#
-# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should
-# work in all systems with a serial port. The driver does not support the
-# CLK mode, but does support the PPS mode. If the radio is connected to
-# more than one machine, the PPS mode is required.
-#
-# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This
-# driver is known to work with some other TrueTime products as well,
-# including the GPS-DC GPS receiver. It should work in all systems with
-# a serial port. The driver does not support the CLK mode, but does
-# support the PPS mode.
-#
-# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It
-# should work in all systems with a serial port. The driver does not
-# support the CLK mode, but does support the PPS mode.
-#
-# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This
-# requires the SunOS interface driver available from KSI. The driver
-# supports neither the CLK nor PPS modes.
-#
-# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for
-# the HP 5061B Cesium Clock. It should work in all systems with a serial
-# port. The driver does not support the CLK mode, but does support the
-# PPS mode.
-#
-# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works
-# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS
-# files on cl.cam.ac.uk still has support for CLK and CBREAK modes.
-#
-# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of
-# the Sun SPARCstations. This requires a modified BSD audio driver and
-# exclusive access to the audio port. A memo describing how it works and
-# how to install the driver is in the README.irig file in the ./doc
-# directory.
-#
-# Note: The following defines result in compilation of all the above radio
-# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and
-# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes
-# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile
-# under Ultrix 4.2a/3. If the MX4200 is removed, all the rest compile on a DEC
-# OSF/1 Alpha.
-#
-CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHU -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH
-
-#
-# Directory into which binaries should be installed (default /usr/local)
-#
-BINDIR= /usr/local/bin
diff --git a/usr.sbin/xntpd/Config.local b/usr.sbin/xntpd/Config.local
deleted file mode 100644
index 50bbe3a..0000000
--- a/usr.sbin/xntpd/Config.local
+++ /dev/null
@@ -1,198 +0,0 @@
-# This is the local configure file (distribution version).
-# You must modify it to fit your particular configuration
-# and name it Config.local
-# The following configuratiions can be auto-generated:
-#
-# make Config.local.green
-# make a Config.local that supports a local clock
-# (i.e. allow fallback to use of the CPU's own clock)
-# make Config.local.NO.clock
-# make a Config.local that supports no clocks
-#
-#
-# NOTE TO GREENHORNS
-#
-# For plug-'n-play and no radios or other complicated gadgetry,
-# use "make Config.local.green" as above.
-#
-# Following defines can be set in the DEFS_OPT= define:
-#
-# The flag -DDEBUG includes some debugging code. To use this, include
-# the define and start the daemon with one or more -d flags, depending
-# on your calibration of pearannoya. The daemon will not detach your
-# terminal in this case. Judicious use of grep will reduce the speaker
-# volume to bearable levels.
-#
-# To change the location of the configuration file, use a
-# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
-#
-# The -DSYSLOG_FILE defines allows logging messages that are normally
-# reported via syslog() in a file. The file name can be configured using
-# the configuration line "logfile <filename>" in CONFIG_FILE.
-#
-# There are three serial port system software interfaces, each of
-# which is peculiar to one or more Unix versions. Define
-# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM
-# for POSIX compatibility including System V Streams, and
-# HAVE_BSD_TTYS for 4.3bsd compatibility.
-# Use HAVE_TERMIOS for POSIX (termios.h) without System V Streams.
-# Only one of these three should be defined. If none are defined,
-# HAVE_BSD_TTYS is assumed.
-# Usually these defines are already set correctly.
-#
-DEFS_OPT=-DDEBUG
-
-#
-# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that)
-# and one of the following:
-#
-# The flag -DREFCLOCK causes the basic reference clock support to be
-# compiled into the daemon. If you set this you may also want to
-# configure the particular clock drivers you want in the CLOCKDEFS= line
-# below. This flag affects xntpd only. This define is included by
-# default when using the "make makeconfig" script.
-#
-# The next two sets of defines are meaningful only when radio clock
-# drivers or special 1-pps signals are to be used. For systems without
-# these features, these delicious complexities can be avoided. Ordinarily,
-# the "make makeconfig" script figures out which ones to use, but your
-# mileage may vary.
-#
-# There are three ways to utilize external 1-pps signals. Define
-# -DPPS to include just the pps routine, such as used by the DCF77(PARSE)
-# clock driver. Define -DPPSCLK to include a serial device driver
-# which avoids much of the jitter due to upper level port
-# processing. This requires a dedicated serial port and either the
-# tty_clock line discipline or tty_clk_streams module, both of
-# which are in the ./kernel directory. Define -DPPSCD to include a
-# special driver which intercepts carrier-detect transitions
-# generated by the pps signal. This requires a nondedicated serial
-# port and the ppsclock streams module in the ./kernel directory.
-# Only one of these three flags should be defined.
-#
-# The flag KERNEL_PLL causes code to be compiled for a special feature of
-# the kernel that (a) implements the phase-lock loop and (b) provides
-# a user interface to learn time, maximum error and estimated error.
-# See the file README.kern in the doc directory for further info.
-# This code is activated only if the relevant kernel features have
-# been configured; it does not affect operation of unmodified kernels.
-# To compile it, however, requires a few header files from the
-# special distribution.
-#
-# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
-DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK #TEST -DPPSPPS -DKERNEL_PLL
-
-#
-# Radio clock support definitions (these only make sense if -DREFCLOCK
-# used), which is normally the case. Note that a configuration can include
-# no clocks, more than one type of clock and even multiple clocks of the
-# same type.
-#
-# For most radio clocks operating with serial ports, accuracy can
-# be considerably improved through use of the tty_clk line
-# discipline or tty_clk_STREAMS streams module found in the
-# ./kernel directory. These gizmos capture a timestamp upon
-# occurrence of an intercept character and stuff it in the data
-# stream for the clock driver to munch. To select this mode,
-# postfix the driver name with the string CLK; that is, WWVB
-# becomes WWVBCLK. If more than one clock is in use, the CLK
-# postfix can be used with any or all of them.
-#
-# Alternatively, for the best accuracy, use the ppsclock streams
-# module in the ./ppsclock directory to steal the carrier-detect
-# transition and capture a precision timestamp. At present this
-# works only with SunOS 4.1.1 or later. To select this mode,
-# postfix the driver name with the string PPS; that is, AS2201
-# becomes AS2201PPS. If more than one clock is in use, the PPS
-# postfix should be used with only one of them. If any PPS
-# postfix is defined, the -DPPSPPS define should be used on the
-# DEFS above.
-#
-# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a
-# reference clock for those subnets without access to the real thing.
-# Works in all systems and requires no hardware support. This is defined
-# by default when using the "make makeconfig" script and greenhorn
-# configuraiton.
-#
-# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should
-# work in all systems with a serial port. The driver does not support the
-# CLK mode, but does support the PPS mode. If the radio is connected to
-# more than one machine, the PPS mode is required.
-#
-# Define -DCHU for a special CHU receiver using an ordinary shortwave
-# radio. This requires the chu_clk line discipline or chu_clk_STREAMS
-# module in the ./kernel directory. At present, this driver works only
-# on SunOS4.1.x; operation in other systems has not been confirmed.
-# Construction details for a suitable modem can be found in the ./gadget
-# directory. The driver supports # neither the CLK nor PPS modes.
-#
-# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This
-# driver is known to work with some other TrueTime products as well,
-# including the GPS-DC GPS receiver. It should work in all systems with
-# a serial port. The driver does not support the CLK mode, but does
-# support the PPS mode.
-#
-# Define -DGPSTM for a Kinemetrics/TrueTime GPS-TM/TMD receiver. It
-# should work in all systems with a serial port.
-#
-# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of
-# the Sun SPARCstations. This requires a modified BSD audio driver and
-# exclusive access to the audio port. A memo describing how it works and
-# how to install the driver is in the README.irig file in the ./doc
-# directory.
-#
-# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for
-# the HP 5061B Cesium Clock. It should work in all systems with a serial
-# port. The driver does not support the CLK mode, but does support the
-# PPS mode.
-#
-# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this
-# driver works only on SunOS4.1.x with CPU serial ports only. The PPS
-# mode is required.
-#
-# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works
-# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS
-# files on cl.cam.ac.uk still has support for CLK and CBREAK modes.
-#
-# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It
-# should work in all systems with a serial port. The driver does not
-# support the CLK mode, but does support the PPS mode.
-#
-# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance
-# this requires a special parsestreams STREAMS (SunOS 4.x) module in the
-# ./parse directory. Define -DPARSEPPS for PPS support via the
-# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above.
-# Define: -DCLOCK_MEINBERG for Meinberg clocks
-# -DCLOCK_SCHMID for Schmid receivers
-# -DCLOCK_DCF7000 for ELV DCF7000
-# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx)
-# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver
-#
-# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver
-# supports both the CLK and PPS modes. It should work in all systems
-# with a serial port.
-#
-# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This
-# requires the SunOS interface driver available from KSI. The driver
-# supports neither the CLK nor PPS modes.
-#
-# Define -DTRAK for a 8810 GPS Receiver with Buffered RS-232-C Interface
-# Module. The driver supports both the CLK and PPS modes. It should work
-# in all systems with a serial port.
-#
-# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It
-# should work in all systems with a serial port. The driver supports
-# both the CLK and PPS modes if the requisite kernel support is installed.
-#
-# Note: The following defines result in compilation of all the above radio
-# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and
-# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes
-# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile
-# under Ultrix 4.2a/3 and DEC # OSF/1 Alpha.
-#
-CLOCKDEFS= -DLOCAL_CLOCK #TEST -DAS2201PPS -DCHU -DATUM -DGOES -DGPSTM -DIRIG -DLEITCH -DMSFEES -DMX4200PPS -DOMEGA -DPST -DTPRO -TRAK -DWWVB -DPARSE -DPARSEPPS -DCLOCK_MEINBERG -DCLOCK_RAWDCF -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_TRIMSV6
-
-#
-# Directory into which binaries should be installed (default /usr/local)
-#
-BINDIR= /usr/local/bin
diff --git a/usr.sbin/xntpd/Config.local.dist b/usr.sbin/xntpd/Config.local.dist
deleted file mode 100644
index 2f73866..0000000
--- a/usr.sbin/xntpd/Config.local.dist
+++ /dev/null
@@ -1,198 +0,0 @@
-# This is the local configure file (distribution version).
-# You must modify it to fit your particular configuration
-# and name it Config.local
-# The following configuratiions can be auto-generated:
-#
-# make Config.local.green
-# make a Config.local that supports a local clock
-# (i.e. allow fallback to use of the CPU's own clock)
-# make Config.local.NO.clock
-# make a Config.local that supports no clocks
-#
-#
-# NOTE TO GREENHORNS
-#
-# For plug-'n-play and no radios or other complicated gadgetry,
-# use "make Config.local.green" as above.
-#
-# Following defines can be set in the DEFS_OPT= define:
-#
-# The flag -DDEBUG includes some debugging code. To use this, include
-# the define and start the daemon with one or more -d flags, depending
-# on your calibration of pearannoya. The daemon will not detach your
-# terminal in this case. Judicious use of grep will reduce the speaker
-# volume to bearable levels.
-#
-# To change the location of the configuration file, use a
-# -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
-#
-# The -DSYSLOG_FILE defines allows logging messages that are normally
-# reported via syslog() in a file. The file name can be configured using
-# the configuration line "logfile <filename>" in CONFIG_FILE.
-#
-# There are three serial port system software interfaces, each of
-# which is peculiar to one or more Unix versions. Define
-# -DHAVE_SYSV_TTYS for basic System V compatibility; define -DSTREAM
-# for POSIX compatibility including System V Streams, and
-# HAVE_BSD_TTYS for 4.3bsd compatibility.
-# Use HAVE_TERMIOS for POSIX (termios.h) without System V Streams.
-# Only one of these three should be defined. If none are defined,
-# HAVE_BSD_TTYS is assumed.
-# Usually these defines are already set correctly.
-#
-DEFS_OPT=-DDEBUG
-
-#
-# The DEFS_LOCAL define picks up all flags from DEFS_OPT (do not delete that)
-# and one of the following:
-#
-# The flag -DREFCLOCK causes the basic reference clock support to be
-# compiled into the daemon. If you set this you may also want to
-# configure the particular clock drivers you want in the CLOCKDEFS= line
-# below. This flag affects xntpd only. This define is included by
-# default when using the "make makeconfig" script.
-#
-# The next two sets of defines are meaningful only when radio clock
-# drivers or special 1-pps signals are to be used. For systems without
-# these features, these delicious complexities can be avoided. Ordinarily,
-# the "make makeconfig" script figures out which ones to use, but your
-# mileage may vary.
-#
-# There are three ways to utilize external 1-pps signals. Define
-# -DPPS to include just the pps routine, such as used by the DCF77(PARSE)
-# clock driver. Define -DPPSCLK to include a serial device driver
-# which avoids much of the jitter due to upper level port
-# processing. This requires a dedicated serial port and either the
-# tty_clock line discipline or tty_clk_streams module, both of
-# which are in the ./kernel directory. Define -DPPSCD to include a
-# special driver which intercepts carrier-detect transitions
-# generated by the pps signal. This requires a nondedicated serial
-# port and the ppsclock streams module in the ./kernel directory.
-# Only one of these three flags should be defined.
-#
-# The flag KERNEL_PLL causes code to be compiled for a special feature of
-# the kernel that (a) implements the phase-lock loop and (b) provides
-# a user interface to learn time, maximum error and estimated error.
-# See the file README.kern in the doc directory for further info.
-# This code is activated only if the relevant kernel features have
-# been configured; it does not affect operation of unmodified kernels.
-# To compile it, however, requires a few header files from the
-# special distribution.
-#
-# Note: following line must always start with DEFS_LOCAL= $(DEFS_OPT)
-DEFS_LOCAL= $(DEFS_OPT) #GREEN -DREFCLOCK #TEST -DPPSPPS -DKERNEL_PLL
-
-#
-# Radio clock support definitions (these only make sense if -DREFCLOCK
-# used), which is normally the case. Note that a configuration can include
-# no clocks, more than one type of clock and even multiple clocks of the
-# same type.
-#
-# For most radio clocks operating with serial ports, accuracy can
-# be considerably improved through use of the tty_clk line
-# discipline or tty_clk_STREAMS streams module found in the
-# ./kernel directory. These gizmos capture a timestamp upon
-# occurrence of an intercept character and stuff it in the data
-# stream for the clock driver to munch. To select this mode,
-# postfix the driver name with the string CLK; that is, WWVB
-# becomes WWVBCLK. If more than one clock is in use, the CLK
-# postfix can be used with any or all of them.
-#
-# Alternatively, for the best accuracy, use the ppsclock streams
-# module in the ./ppsclock directory to steal the carrier-detect
-# transition and capture a precision timestamp. At present this
-# works only with SunOS 4.1.1 or later. To select this mode,
-# postfix the driver name with the string PPS; that is, AS2201
-# becomes AS2201PPS. If more than one clock is in use, the PPS
-# postfix should be used with only one of them. If any PPS
-# postfix is defined, the -DPPSPPS define should be used on the
-# DEFS above.
-#
-# Define -DLOCAL_CLOCK for a local pseudo-clock to masquerade as a
-# reference clock for those subnets without access to the real thing.
-# Works in all systems and requires no hardware support. This is defined
-# by default when using the "make makeconfig" script and greenhorn
-# configuraiton.
-#
-# Define -DAS2201 for an Austron 2200A or 2201A GPS receiver. It should
-# work in all systems with a serial port. The driver does not support the
-# CLK mode, but does support the PPS mode. If the radio is connected to
-# more than one machine, the PPS mode is required.
-#
-# Define -DCHU for a special CHU receiver using an ordinary shortwave
-# radio. This requires the chu_clk line discipline or chu_clk_STREAMS
-# module in the ./kernel directory. At present, this driver works only
-# on SunOS4.1.x; operation in other systems has not been confirmed.
-# Construction details for a suitable modem can be found in the ./gadget
-# directory. The driver supports # neither the CLK nor PPS modes.
-#
-# Define -DGOES for a Kinemetrics/TrueTime 468-DC GOES receiver. This
-# driver is known to work with some other TrueTime products as well,
-# including the GPS-DC GPS receiver. It should work in all systems with
-# a serial port. The driver does not support the CLK mode, but does
-# support the PPS mode.
-#
-# Define -DGPSTM for a Kinemetrics/TrueTime GPS-TM/TMD receiver. It
-# should work in all systems with a serial port.
-#
-# Define -DIRIG for a IRIG-B timecode timecode using the audio codec of
-# the Sun SPARCstations. This requires a modified BSD audio driver and
-# exclusive access to the audio port. A memo describing how it works and
-# how to install the driver is in the README.irig file in the ./doc
-# directory.
-#
-# Define -DLEITCH for a Leitch CSD 5300 Master Clock System Driver for
-# the HP 5061B Cesium Clock. It should work in all systems with a serial
-# port. The driver does not support the CLK mode, but does support the
-# PPS mode.
-#
-# Define -DMX4200PPS for a Magnavox 4200 GPS receiver. At present, this
-# driver works only on SunOS4.1.x with CPU serial ports only. The PPS
-# mode is required.
-#
-# Define -DMSFEESPPS for an EES M201 MSF receiver. It currently only works
-# under SunOS 4.x with the PPSCD (ppsclock) STREAMS module, but the RCS
-# files on cl.cam.ac.uk still has support for CLK and CBREAK modes.
-#
-# Define -DOMEGA for a Kinemetrics/TrueTime OM-DC OMEGA receiver. It
-# should work in all systems with a serial port. The driver does not
-# support the CLK mode, but does support the PPS mode.
-#
-# Define -DPARSE for a DCF77/GPS(GENERIC) receiver. For best performance
-# this requires a special parsestreams STREAMS (SunOS 4.x) module in the
-# ./parse directory. Define -DPARSEPPS for PPS support via the
-# DCF77/GPS (GENERIC) receiver; also, define -DPPS in the DEFS above.
-# Define: -DCLOCK_MEINBERG for Meinberg clocks
-# -DCLOCK_SCHMID for Schmid receivers
-# -DCLOCK_DCF7000 for ELV DCF7000
-# -DCLOCK_RAWDCF for simple receivers (100/200ms pulses on Rx)
-# -DCLOCK_TRIMSV6 for Trimble SV6 GPS receiver
-#
-# Define -DPST for a PST/Traconex 1020 WWV/H receiver. The driver
-# supports both the CLK and PPS modes. It should work in all systems
-# with a serial port.
-#
-# Define -DTPRO for a KSI/Odetics TPRO-S IRIG-B timecode reader. This
-# requires the SunOS interface driver available from KSI. The driver
-# supports neither the CLK nor PPS modes.
-#
-# Define -DTRAK for a 8810 GPS Receiver with Buffered RS-232-C Interface
-# Module. The driver supports both the CLK and PPS modes. It should work
-# in all systems with a serial port.
-#
-# Define -DWWVB for a Spectracom 8170 or Netclock/2 WWVB receiver. It
-# should work in all systems with a serial port. The driver supports
-# both the CLK and PPS modes if the requisite kernel support is installed.
-#
-# Note: The following defines result in compilation of all the above radio
-# clocks. This works on a Sun 4.1.x system which has tty_clk, chu_clk and
-# ppsclock STREAMS modules installed. If the trailing CLK and PPS suffixes
-# are removed and the IRIG, PARSE* and CLOCK* deleted, all of the rest compile
-# under Ultrix 4.2a/3 and DEC # OSF/1 Alpha.
-#
-CLOCKDEFS= #GREEN -DLOCAL_CLOCK #TEST -DAS2201PPS -DCHU -DATUM -DGOES -DGPSTM -DIRIG -DLEITCH -DMSFEES -DMX4200PPS -DOMEGA -DPST -DTPRO -TRAK -DWWVB -DPARSE -DPARSEPPS -DCLOCK_MEINBERG -DCLOCK_RAWDCF -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_TRIMSV6
-
-#
-# Directory into which binaries should be installed (default /usr/local)
-#
-BINDIR= /usr/local/bin
diff --git a/usr.sbin/xntpd/Config.sed b/usr.sbin/xntpd/Config.sed
deleted file mode 100644
index fe5a9b7..0000000
--- a/usr.sbin/xntpd/Config.sed
+++ /dev/null
@@ -1,14 +0,0 @@
-s~^RANLIB=.*~RANLIB= ranlib~
-s~^DEFS_LOCAL=.*~DEFS_LOCAL=-DREFCLOCK~
-s~^DEFS=.*~DEFS= -DSYS_FREEBSD -DSYS_386BSD~
-s~^AUTHDEFS=.*~AUTHDEFS= -DDES -DMD5~
-s~^CLOCKDEFS=.*~CLOCKDEFS= -DLOCAL_CLOCK~
-s~^DAEMONLIBS=.*~DAEMONLIBS= -lcrypt~
-s~^RESLIB=.*~RESLIB=~
-s~^COPTS=.*~COPTS= -O2~
-s~^COMPILER=.*~COMPILER= gcc~
-s~^LIBDEFS=.*~LIBDEFS= -DXNTP_LITTLE_ENDIAN~
-s~^DEFS_OPT=.*~DEFS_OPT=-DDEBUG~
-s~^DEFS_LOCAL=.*~DEFS_LOCAL= $(DEFS_OPT) -DREFCLOCK -DPPSPPS -DKERNEL_PLL~
-s~^CLOCKDEFS=.*~CLOCKDEFS= -DLOCAL_CLOCK -DAS2201PPS -DCHU -DGOES -DIRIG -DMX4200PPS -DOMEGA -DPSTCLK -DTPRO -DWWVBCLK -DMSFEESPPS -DLEITCH~
-s~^BINDIR=.*~BINDIR= /usr/local/bin~
diff --git a/usr.sbin/xntpd/adjtime/Makefile.tmpl b/usr.sbin/xntpd/adjtime/Makefile.tmpl
deleted file mode 100644
index c2e8381..0000000
--- a/usr.sbin/xntpd/adjtime/Makefile.tmpl
+++ /dev/null
@@ -1,53 +0,0 @@
-#########################################################################
-## (c) Copyright 1988, Hewlett-Packard Co. All Rights Reserved. ##
-## ##
-## Author: Tai Jin, Hewlett-Packard Laboratories. ##
-#########################################################################
-
-## Makefile.tmpl,v 3.1 1993/07/06 01:04:40 jbj Exp
-
-#
-PROGRAM = adjtimed
-COMPILER= cc
-CC= $(COMPILER)
-BINDIR= /usr/local/etc
-COPTS= -O
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-INCL= -I../include
-LLIBS=
-INSTALL= install
-
-
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LDFLAGS=
-LIBS= $(LLIBS) -lc
-OBJ= adjtime.o adjtimed.o
-ALL= libadjtime.a adjtimed
-
-all: $(ALL)
-
-libadjtime.a: adjtime.o
- ar vr libadjtime.a $?
-
-adjtimed: adjtimed.o ../lib/libntp.a
- $(CC) $(LDFLAGS) -o adjtimed adjtimed.o ../lib/libntp.a $(LIBS)
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-clean:
- -@rm -f *.a *.o adjtimed
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-install: $(PROGRAM)
- cp $(PROGRAM) $(BINDIR)
diff --git a/usr.sbin/xntpd/adjtime/README b/usr.sbin/xntpd/adjtime/README
deleted file mode 100644
index fe8b7e5..0000000
--- a/usr.sbin/xntpd/adjtime/README
+++ /dev/null
@@ -1,23 +0,0 @@
-------------------------------------------------------------------------------
-The adjtimed daemon emulates the BSD adjtime(2) system call. The
-adjtime() routine communicates with this daemon via SYSV messages.
-
-The emulation uses an undocumented kernel variable (as of 6.0/2.0
-and later releases) and as such it cannot be guaranteed to work in
-future HP-UX releases. Perhaps HP-UX will have a real adjtime(2)
-system call in the future.
-
-Author: Tai Jin (tai@sde.hp.com)
-------------------------------------------------------------------------------
-
-IMPORTANT NOTE: This stuff must be compiled with no optimization !!
-
-NOTE: This code is known to work as of 8.0 on s300's, s700's and s800's.
- PLEASE do not modify it unless you have access to kernel sources
- and fully understand the implications of any changes you are making.
- One person already has trashed adjtimed by making it do "the right
- thing". This is not an exact replacement for BSD adjtime(2), don't
- try to make it into one.
-
- -- Ken
-
diff --git a/usr.sbin/xntpd/adjtime/adjtime.c b/usr.sbin/xntpd/adjtime/adjtime.c
deleted file mode 100644
index 5b0475e..0000000
--- a/usr.sbin/xntpd/adjtime/adjtime.c
+++ /dev/null
@@ -1,101 +0,0 @@
-/*************************************************************************/
-/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */
-/* Hewlett-Packard Laboratories. */
-/* */
-/* Permission is hereby granted for unlimited modification, use, and */
-/* distribution. This software is made available with no warranty of */
-/* any kind, express or implied. This copyright notice must remain */
-/* intact in all versions of this software. */
-/* */
-/* The author would appreciate it if any bug fixes and enhancements were */
-/* to be sent back to him for incorporation into future versions of this */
-/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */
-/*************************************************************************/
-
-#ifndef lint
-static char RCSid[] = "adjtime.c,v 3.1 1993/07/06 01:04:42 jbj Exp";
-#endif
-
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <time.h>
-#include <signal.h>
-#include "adjtime.h"
-
-#define abs(x) ((x) < 0 ? -(x) : (x))
-static LONG adjthresh = 400L;
-static LONG saveup;
-
-
-_clear_adjtime()
-{
- saveup = 0L;
-}
-
-
-adjtime(delta, olddelta)
- register struct timeval *delta;
- register struct timeval *olddelta;
-{
- struct timeval newdelta;
-
- /* If they are giving us seconds, ignore up to current threshold saved */
- if (delta->tv_sec) {
- saveup = 0L;
- return(_adjtime(delta, olddelta));
- }
-
- /* add in, needs check for overflow ? */
- saveup += delta->tv_usec;
-
- /* Broke the threshold, call adjtime() */
- if (abs(saveup) > adjthresh) {
- newdelta.tv_sec = 0L;
- newdelta.tv_usec = saveup;
- saveup = 0L;
- return(_adjtime(&newdelta, olddelta));
- }
-
- if (olddelta)
- olddelta->tv_sec = olddelta->tv_usec = 0L;
- return(0);
-}
-
-
-_adjtime(delta, olddelta)
- register struct timeval *delta;
- register struct timeval *olddelta;
-{
- register int mqid;
- MsgBuf msg;
- register MsgBuf *msgp = &msg;
-
- /*
- * get the key to the adjtime message queue
- * (note that we must get it every time because the queue might have been
- * removed and recreated)
- */
- if ((mqid = msgget(KEY, 0)) == -1)
- return (-1);
-
- msgp->msgb.mtype = CLIENT;
- msgp->msgb.tv = *delta;
-
- if (olddelta)
- msgp->msgb.code = DELTA2;
- else
- msgp->msgb.code = DELTA1;
-
- if (msgsnd(mqid, &msgp->msgp, MSGSIZE, 0) == -1)
- return (-1);
-
- if (olddelta) {
- if (msgrcv(mqid, &msgp->msgp, MSGSIZE, SERVER, 0) == -1)
- return (-1);
-
- *olddelta = msgp->msgb.tv;
- }
-
- return (0);
-}
diff --git a/usr.sbin/xntpd/adjtime/adjtime.h b/usr.sbin/xntpd/adjtime/adjtime.h
deleted file mode 100644
index f063a47..0000000
--- a/usr.sbin/xntpd/adjtime/adjtime.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*************************************************************************/
-/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */
-/* Hewlett-Packard Laboratories. */
-/* */
-/* Permission is hereby granted for unlimited modification, use, and */
-/* distribution. This software is made available with no warranty of */
-/* any kind, express or implied. This copyright notice must remain */
-/* intact in all versions of this software. */
-/* */
-/* The author would appreciate it if any bug fixes and enhancements were */
-/* to be sent back to him for incorporation into future versions of this */
-/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */
-/*************************************************************************/
-
-/* "adjtime.h,v 3.1 1993/07/06 01:04:43 jbj Exp" */
-/* adjtime.h,v
- * Revision 3.1 1993/07/06 01:04:43 jbj
- * XNTP release 3.1
- *
- *
- * Revision 1.5 90/02/07 15:34:18 15:34:18 src (Source Hacker)
- * CHANGED KEY !!!
- *
- * Revision 1.4 89/02/09 12:26:35 12:26:35 tai (Tai Jin (Guest))
- * *** empty log message ***
- *
- * Revision 1.4 89/02/09 12:26:35 12:26:35 tai (Tai Jin)
- * added comment
- *
- * Revision 1.3 88/08/30 01:08:29 01:08:29 tai (Tai Jin)
- * fix copyright notice again
- *
- * Revision 1.2 88/08/30 00:51:55 00:51:55 tai (Tai Jin)
- * fix copyright notice
- *
- * Revision 1.1 88/04/02 14:56:54 14:56:54 tai (Tai Jin)
- * Initial revision
- * */
-
-#include "ntp_types.h"
-
-#define KEY 659847L
-
-typedef union {
- struct msgbuf msgp;
- struct {
- LONG mtype;
- int code;
- struct timeval tv;
- } msgb;
-} MsgBuf;
-
-#define MSGSIZE (sizeof(int) + sizeof(struct timeval))
-/*
- * mtype values
- */
-#define CLIENT 1L
-#define SERVER 2L
-/*
- * code values
- */
-#define DELTA1 0
-#define DELTA2 1
diff --git a/usr.sbin/xntpd/adjtime/adjtimed.c b/usr.sbin/xntpd/adjtime/adjtimed.c
deleted file mode 100644
index 44e5444..0000000
--- a/usr.sbin/xntpd/adjtime/adjtimed.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/*************************************************************************/
-/* (c) Copyright Tai Jin, 1988. All Rights Reserved. */
-/* Hewlett-Packard Laboratories. */
-/* */
-/* Permission is hereby granted for unlimited modification, use, and */
-/* distribution. This software is made available with no warranty of */
-/* any kind, express or implied. This copyright notice must remain */
-/* intact in all versions of this software. */
-/* */
-/* The author would appreciate it if any bug fixes and enhancements were */
-/* to be sent back to him for incorporation into future versions of this */
-/* software. Please send changes to tai@iag.hp.com or ken@sdd.hp.com. */
-/*************************************************************************/
-
-#ifndef lint
-static char RCSid[] = "adjtimed.c,v 3.1 1993/07/06 01:04:45 jbj Exp";
-#endif
-
-/*
- * Adjust time daemon.
- * This deamon adjusts the rate of the system clock a la BSD's adjtime().
- * The adjtime() routine uses SYSV messages to communicate with this daemon.
- *
- * Caveat: This emulation uses an undocumented kernel variable. As such, it
- * cannot be guaranteed to work in future HP-UX releases. Perhaps a real
- * adjtime(2) will be supported in the future.
- */
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/msg.h>
-#include <sys/lock.h>
-#include <time.h>
-#include <signal.h>
-#include <nlist.h>
-#include <fcntl.h>
-#include <stdio.h>
-#include <errno.h>
-#include "ntp_syslog.h"
-#include "adjtime.h"
-
-double atof();
-extern int ntp_optind;
-extern char *ntp_optarg;
-
-int InitClockRate();
-int AdjustClockRate();
-#ifdef notdef
-LONG GetClockRate();
-#endif
-int SetClockRate();
-void ResetClockRate();
-void Cleanup();
-void Exit();
-
-#define MILLION 1000000L
-
-#define tvtod(tv) ((double)(LONG)tv.tv_sec + \
- ((double)tv.tv_usec / (double)MILLION))
-
-char *progname = NULL;
-int verbose = 0;
-int sysdebug = 0;
-static int mqid;
-static double oldrate = 0.0;
-static double RATE = 0.25;
-static double PERIOD = 6.666667;
-
-
-main(argc, argv)
- int argc;
- char **argv;
-{
- struct timeval remains;
- struct sigvec vec;
- MsgBuf msg;
- char ch;
- int nofork = 0;
- int fd;
-
- progname = argv[0];
-
-#ifdef LOG_LOCAL6
- openlog("adjtimed", LOG_PID, LOG_LOCAL6);
-#else
- openlog("adjtimed", LOG_PID);
-#endif
-
- while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
- switch (ch) {
- case 'k':
- case 'r':
- if ((mqid = msgget(KEY, 0)) != -1) {
- if (msgctl(mqid, IPC_RMID, (struct msqid_ds *)0) == -1) {
- syslog(LOG_ERR, "remove old message queue: %m");
- perror("adjtimed: remove old message queue");
- exit(1);
- }
- }
-
- if (ch == 'k')
- exit(0);
-
- break;
-
- case 'v':
- ++verbose, nofork = 1;
- break;
-
- case 'd':
- ++sysdebug;
- break;
-
- case 'f':
- nofork = 1;
- break;
-
- case 'p':
- if ((RATE = atof(ntp_optarg)) <= 0.0 || RATE >= 100.0) {
- fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr);
- exit(1);
- }
-
- RATE /= 100.0;
- PERIOD = 1.0 / RATE;
- break;
-
- default:
- puts("usage: adjtimed -hkrvdf -p rate");
- puts("-h\thelp");
- puts("-k\tkill existing adjtimed, if any");
- puts("-r\trestart (kills existing adjtimed, if any)");
- puts("-v\tdebug output (repeat for more output)");
- puts("-d\tsyslog output (repeat for more output)");
- puts("-f\tno fork");
- puts("-p rate\tpercent rate of change");
- syslog(LOG_ERR, "usage error");
- exit(1);
- } /* switch */
- } /* while */
-
- if (!nofork) {
- switch (fork()) {
- case 0:
- close(fileno(stdin));
- close(fileno(stdout));
- close(fileno(stderr));
-
-#ifdef TIOCNOTTY
- if ((fd = open("/dev/tty")) != -1) {
- ioctl(fd, TIOCNOTTY, 0);
- close(fd);
- }
-#else
- setpgrp();
-#endif
- break;
-
- case -1:
- syslog(LOG_ERR, "fork: %m");
- perror("adjtimed: fork");
- exit(1);
-
- default:
- exit(0);
- } /* switch */
- } /* if */
-
- if (nofork) {
- setvbuf(stdout, NULL, _IONBF, BUFSIZ);
- setvbuf(stderr, NULL, _IONBF, BUFSIZ);
- }
-
- syslog(LOG_INFO, "started (rate %.2f%%)", RATE * 100.0);
- if (verbose) printf("adjtimed: started (rate %.2f%%)\n", RATE * 100.0);
-
- if (InitClockRate() == -1)
- Exit(2);
-
- (void)signal(SIGHUP, SIG_IGN);
- (void)signal(SIGINT, SIG_IGN);
- (void)signal(SIGQUIT, SIG_IGN);
- (void)signal(SIGTERM, Cleanup);
-
- vec.sv_handler = ResetClockRate;
- vec.sv_flags = 0;
- vec.sv_mask = ~0;
- sigvector(SIGALRM, &vec, (struct sigvec *)0);
-
- if (msgget(KEY, IPC_CREAT|IPC_EXCL) == -1) {
- if (errno == EEXIST) {
- syslog(LOG_ERR, "message queue already exists, use -r to remove it");
- fputs("adjtimed: message queue already exists, use -r to remove it\n",
- stderr);
- Exit(1);
- }
-
- syslog(LOG_ERR, "create message queue: %m");
- perror("adjtimed: create message queue");
- Exit(1);
- }
-
- if ((mqid = msgget(KEY, 0)) == -1) {
- syslog(LOG_ERR, "get message queue id: %m");
- perror("adjtimed: get message queue id");
- Exit(1);
- }
-
- if (plock(PROCLOCK)) {
- syslog(LOG_ERR, "plock: %m");
- perror("adjtimed: plock");
- Cleanup();
- }
-
- for (;;) {
- if (msgrcv(mqid, &msg.msgp, MSGSIZE, CLIENT, 0) == -1) {
- if (errno == EINTR) continue;
- syslog(LOG_ERR, "read message: %m");
- perror("adjtimed: read message");
- Cleanup();
- }
-
- switch (msg.msgb.code) {
- case DELTA1:
- case DELTA2:
- AdjustClockRate(&msg.msgb.tv, &remains);
-
- if (msg.msgb.code == DELTA2) {
- msg.msgb.tv = remains;
- msg.msgb.mtype = SERVER;
-
- while (msgsnd(mqid, &msg.msgp, MSGSIZE, 0) == -1) {
- if (errno == EINTR) continue;
- syslog(LOG_ERR, "send message: %m");
- perror("adjtimed: send message");
- Cleanup();
- }
- }
-
- if (remains.tv_sec + remains.tv_usec != 0L) {
- if (verbose) {
- printf("adjtimed: previous correction remaining %.6fs\n",
- tvtod(remains));
- }
- if (sysdebug) {
- syslog(LOG_INFO, "previous correction remaining %.6fs",
- tvtod(remains));
- }
- }
- break;
-
- default:
- fprintf(stderr, "adjtimed: unknown message code %d\n", msg.msgb.code);
- syslog(LOG_ERR, "unknown message code %d", msg.msgb.code);
- } /* switch */
- } /* loop */
-} /* main */
-
-/*
- * Default clock rate (old_tick).
- */
-#define DEFAULT_RATE (MILLION / HZ)
-#define UNKNOWN_RATE 0L
-#define SLEW_RATE (MILLION / DEFAULT_RATE)
-#define MIN_DELTA SLEW_RATE
-/*
-#define RATE 0.005
-#define PERIOD (1.0 / RATE)
-*/
-static LONG default_rate = DEFAULT_RATE;
-static LONG slew_rate = SLEW_RATE;
-
-AdjustClockRate(delta, olddelta)
- register struct timeval *delta, *olddelta;
-{
- register LONG rate, dt;
- struct itimerval period, remains;
- static LONG leftover = 0;
-/*
- * rate of change
- */
- dt = (delta->tv_sec * MILLION) + delta->tv_usec + leftover;
-
- if (dt < MIN_DELTA && dt > -MIN_DELTA) {
- leftover += delta->tv_usec;
-
- if (olddelta) {
- getitimer(ITIMER_REAL, &remains);
- dt = ((remains.it_value.tv_sec * MILLION) + remains.it_value.tv_usec) *
- oldrate;
- olddelta->tv_sec = dt / MILLION;
- olddelta->tv_usec = dt - (olddelta->tv_sec * MILLION);
- }
-
- if (verbose > 2) printf("adjtimed: delta is too small: %dus\n", dt);
- if (sysdebug > 2) syslog(LOG_INFO, "delta is too small: %dus", dt);
- return (1);
- }
-
- leftover = dt % MIN_DELTA;
- dt -= leftover;
-
- if (verbose)
- printf("adjtimed: new correction %.6fs\n", (double)dt / (double)MILLION);
- if (sysdebug)
- syslog(LOG_INFO, "new correction %.6fs", (double)dt / (double)MILLION);
- if (verbose > 2) printf("adjtimed: leftover %dus\n", leftover);
- if (sysdebug > 2) syslog(LOG_INFO, "leftover %dus", leftover);
- rate = dt * RATE;
-
- if (rate < slew_rate && rate > -slew_rate) {
- rate = (rate < 0L ? -slew_rate : slew_rate);
- dt = abs(dt * (MILLION / slew_rate));
- period.it_value.tv_sec = dt / MILLION;
- } else {
- period.it_value.tv_sec = (LONG)PERIOD;
- }
-/*
- * The adjustment will always be a multiple of the minimum adjustment.
- * So the period will always be a whole second value.
- */
- period.it_value.tv_usec = 0;
-
- if (verbose > 1)
- printf("adjtimed: will be complete in %ds\n", period.it_value.tv_sec);
- if (sysdebug > 1)
- syslog(LOG_INFO, "will be complete in %ds", period.it_value.tv_sec);
-/*
- * adjust the clock rate
- */
- if (SetClockRate((rate / slew_rate) + default_rate) == -1) {
- syslog(LOG_ERR, "set clock rate: %m");
- perror("adjtimed: set clock rate");
- }
-/*
- * start the timer
- * (do this after changing the rate because the period has been rounded down)
- */
- period.it_interval.tv_sec = period.it_interval.tv_usec = 0L;
- setitimer(ITIMER_REAL, &period, &remains);
-/*
- * return old delta
- */
- if (olddelta) {
- dt = ((remains.it_value.tv_sec * MILLION) + remains.it_value.tv_usec) *
- oldrate;
- olddelta->tv_sec = dt / MILLION;
- olddelta->tv_usec = dt - (olddelta->tv_sec * MILLION);
- }
-
- oldrate = (double)rate / (double)MILLION;
-} /* AdjustClockRate */
-
-static struct nlist nl[] = {
-#ifdef hp9000s800
-#ifdef PRE7_0
- { "tick" },
-#else
- { "old_tick" },
-#endif
-#else
- { "_old_tick" },
-#endif
- { "" }
-};
-
-static int kmem;
-
-/*
- * The return value is the clock rate in old_tick units or -1 if error.
- */
-LONG
-GetClockRate()
-{
- LONG rate, mask;
-
- if (lseek(kmem, (LONG)nl[0].n_value, 0) == -1L)
- return (-1L);
-
- mask = sigblock(sigmask(SIGALRM));
-
- if (read(kmem, (caddr_t)&rate, sizeof(rate)) != sizeof(rate))
- rate = UNKNOWN_RATE;
-
- sigsetmask(mask);
- return (rate);
-} /* GetClockRate */
-
-/*
- * The argument is the new rate in old_tick units.
- */
-SetClockRate(rate)
- LONG rate;
-{
- LONG mask;
-
- if (lseek(kmem, (LONG)nl[0].n_value, 0) == -1L)
- return (-1);
-
- mask = sigblock(sigmask(SIGALRM));
-
- if (write(kmem, (caddr_t)&rate, sizeof(rate)) != sizeof(rate)) {
- sigsetmask(mask);
- return (-1);
- }
-
- sigsetmask(mask);
-
- if (rate != default_rate) {
- if (verbose > 3) {
- printf("adjtimed: clock rate (%lu) %ldus/s\n", rate,
- (rate - default_rate) * slew_rate);
- }
- if (sysdebug > 3) {
- syslog(LOG_INFO, "clock rate (%lu) %ldus/s", rate,
- (rate - default_rate) * slew_rate);
- }
- }
-
- return (0);
-} /* SetClockRate */
-
-InitClockRate()
-{
- if ((kmem = open("/dev/kmem", O_RDWR)) == -1) {
- syslog(LOG_ERR, "open(/dev/kmem): %m");
- perror("adjtimed: open(/dev/kmem)");
- return (-1);
- }
-
- nlist("/hp-ux", nl);
-
- if (nl[0].n_type == 0) {
- fputs("adjtimed: /hp-ux has no symbol table\n", stderr);
- syslog(LOG_ERR, "/hp-ux has no symbol table");
- return (-1);
- }
-/*
- * Set the default to the system's original value
- */
- default_rate = GetClockRate();
- if (default_rate == UNKNOWN_RATE) default_rate = DEFAULT_RATE;
- slew_rate = (MILLION / default_rate);
-
- return (0);
-} /* InitClockRate */
-
-/*
- * Reset the clock rate to the default value.
- */
-void
-ResetClockRate()
-{
- struct itimerval it;
-
- it.it_value.tv_sec = it.it_value.tv_usec = 0L;
- setitimer(ITIMER_REAL, &it, (struct itimerval *)0);
-
- if (verbose > 2) puts("adjtimed: resetting the clock");
- if (sysdebug > 2) syslog(LOG_INFO, "resetting the clock");
-
- if (GetClockRate() != default_rate) {
- if (SetClockRate(default_rate) == -1) {
- syslog(LOG_ERR, "set clock rate: %m");
- perror("adjtimed: set clock rate");
- }
- }
-
- oldrate = 0.0;
-} /* ResetClockRate */
-
-void
-Cleanup()
-{
- ResetClockRate();
-
- if (msgctl(mqid, IPC_RMID, (struct msqid_ds *)0) == -1) {
- if (errno != EINVAL) {
- syslog(LOG_ERR, "remove message queue: %m");
- perror("adjtimed: remove message queue");
- }
- }
-
- Exit(2);
-} /* Cleanup */
-
-void
-Exit(status)
- int status;
-{
- syslog(LOG_ERR, "terminated");
- closelog();
- if (kmem != -1) close(kmem);
- exit(status);
-} /* Exit */
diff --git a/usr.sbin/xntpd/authstuff/Makefile.tmpl b/usr.sbin/xntpd/authstuff/Makefile.tmpl
deleted file mode 100644
index ccafc5b..0000000
--- a/usr.sbin/xntpd/authstuff/Makefile.tmpl
+++ /dev/null
@@ -1,92 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= authcert authspeed md5
-#
-# authcert, authspeed - authentication utilities
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-COMPAT=
-RESLIB=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-MAKE= make
-#
-CRTOBJS= authcert.o
-SPDOBJS= authspeed.o
-PAROBJS= keyparity.o
-IFPOBJS= makeIPFP.o
-PC1OBJS= makePC1.o
-PC2OBJS= makePC2.o
-SPOBJS= makeSP.o
-RNDOBJS= mkrandkeys.o
-OIFOBJS= omakeIPFP.o
-UNXOBJS= unixcert.o
-MD5OBJS= md5driver.o
-
-SOURCE= authcert.c authspeed.c keyparity.c makeIPFP.c makePC1.c \
- makePC2.c makeSP.c mkrandkeys.c omakeIPFP.c unixcert.c md5driver.c
-
-all: $(PROGRAM)
-
-authcert: $(CRTOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB)
-
-authspeed: $(SPDOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
-
-keyparity: $(PAROBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB)
-
-makeIPFP: $(IFPOBJS)
- $(CC) $(COPTS) -o $@ $(IFPOBJS)
-
-makePC1: $(PC1OBJS)
- $(CC) $(COPTS) -o $@ $(PC1OBJS)
-
-makePC2: $(PC2OBJS)
- $(CC) $(COPTS) -o $@ $(PC2OBJS)
-
-makeSP: $(SPOBJS)
- $(CC) $(COPTS) -o $@ $(SPOBJS)
-
-mkrandkeys: $(RNDOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(RNDOBJS) $(LIB)
-
-omakeIPFP: $(OIFBJS)
- $(CC) $(COPTS) -o $@ $(OIFBJS)
-
-unixcert: $(UNXBJS)
- $(CC) $(COPTS) -o $@ $(UNXBJS)
-
-md5: $(MD5OBJS)
- $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB)
-
-tags:
- ctags *.c *.h
-
-install:
- # Don't install any of this shit
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak keyparity \
- makeIPFP makePC1 makePC2 makeSP mkrandkeys omakeIPFP unixcert \
- lint.errs md5cert
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
diff --git a/usr.sbin/xntpd/clockstuff/Makefile.tmpl b/usr.sbin/xntpd/clockstuff/Makefile.tmpl
deleted file mode 100644
index 9a0f9c1..0000000
--- a/usr.sbin/xntpd/clockstuff/Makefile.tmpl
+++ /dev/null
@@ -1,60 +0,0 @@
-#
-# Makefile.tmpl,v 3.1 1993/07/06 01:05:19 jbj Exp
-#
-PROGRAM= propdelay
-#
-# Makefile for clock miscellany
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-INSTALL= install
-#
-SOURCE= chutest.c propdelay.c
-OBJS= propdelay.o
-CHUOBJS= chutest.o
-CLKOBJS= clktest.o
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS)
- $(CC) $(COPTS) -o $@ $(OBJS) -lm $(COMPAT)
-
-chutest: $(CHUOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(CHUOBJS) $(LIB)
-
-clktest: $(CLKOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(CLKOBJS) $(LIB)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
-# $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak chutest clktest \
- lint.errs
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
diff --git a/usr.sbin/xntpd/compilers/README b/usr.sbin/xntpd/compilers/README
deleted file mode 100644
index 46794dc..0000000
--- a/usr.sbin/xntpd/compilers/README
+++ /dev/null
@@ -1,5 +0,0 @@
-README file for directory ./compilers of the NTP Version 3 distribution
-
-This directory contains configuration files for the various machines
-and compilers supported by the distribution. README and RELNOTES files in the
-parent directory for directions on how to use these files.
diff --git a/usr.sbin/xntpd/compilers/aux2.gcc b/usr.sbin/xntpd/compilers/aux2.gcc
deleted file mode 100644
index 53672c4..0000000
--- a/usr.sbin/xntpd/compilers/aux2.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=gcc -O -pipe -finline-functions -fomit-frame-pointer -D_POSIX_SOURCE
diff --git a/usr.sbin/xntpd/compilers/aux3.gcc b/usr.sbin/xntpd/compilers/aux3.gcc
deleted file mode 100644
index 53672c4..0000000
--- a/usr.sbin/xntpd/compilers/aux3.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=gcc -O -pipe -finline-functions -fomit-frame-pointer -D_POSIX_SOURCE
diff --git a/usr.sbin/xntpd/compilers/decosf1.gcc b/usr.sbin/xntpd/compilers/decosf1.gcc
deleted file mode 100644
index d071385..0000000
--- a/usr.sbin/xntpd/compilers/decosf1.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= gcc -Wall -O2 -finline-functions
diff --git a/usr.sbin/xntpd/compilers/domainos.cc b/usr.sbin/xntpd/compilers/domainos.cc
deleted file mode 100644
index eb4dd62..0000000
--- a/usr.sbin/xntpd/compilers/domainos.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= cc
diff --git a/usr.sbin/xntpd/compilers/hpux-adj.cc b/usr.sbin/xntpd/compilers/hpux-adj.cc
deleted file mode 100644
index cf058ef..0000000
--- a/usr.sbin/xntpd/compilers/hpux-adj.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=cc +O1
diff --git a/usr.sbin/xntpd/compilers/hpux-adj.gcc b/usr.sbin/xntpd/compilers/hpux-adj.gcc
deleted file mode 100644
index e085a80..0000000
--- a/usr.sbin/xntpd/compilers/hpux-adj.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=gcc -O2
diff --git a/usr.sbin/xntpd/compilers/hpux.cc b/usr.sbin/xntpd/compilers/hpux.cc
deleted file mode 100644
index cf058ef..0000000
--- a/usr.sbin/xntpd/compilers/hpux.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=cc +O1
diff --git a/usr.sbin/xntpd/compilers/hpux.gcc b/usr.sbin/xntpd/compilers/hpux.gcc
deleted file mode 100644
index e085a80..0000000
--- a/usr.sbin/xntpd/compilers/hpux.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=gcc -O2
diff --git a/usr.sbin/xntpd/compilers/hpux10+.cc b/usr.sbin/xntpd/compilers/hpux10+.cc
deleted file mode 100644
index cf058ef..0000000
--- a/usr.sbin/xntpd/compilers/hpux10+.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER=cc +O1
diff --git a/usr.sbin/xntpd/compilers/irix4.cc b/usr.sbin/xntpd/compilers/irix4.cc
deleted file mode 100644
index c5ae3af..0000000
--- a/usr.sbin/xntpd/compilers/irix4.cc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= cc -cckr
-COPTS= -O2
diff --git a/usr.sbin/xntpd/compilers/linux.gcc b/usr.sbin/xntpd/compilers/linux.gcc
deleted file mode 100644
index 1051fcb..0000000
--- a/usr.sbin/xntpd/compilers/linux.gcc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= gcc -DUSE_PROTOTYPES -Wall
-COPTS= -O2 -finline-functions -fomit-frame-pointer
diff --git a/usr.sbin/xntpd/compilers/mips.cc b/usr.sbin/xntpd/compilers/mips.cc
deleted file mode 100644
index dcd8697..0000000
--- a/usr.sbin/xntpd/compilers/mips.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= cc -systype bsd43
diff --git a/usr.sbin/xntpd/compilers/sinix-m.cc b/usr.sbin/xntpd/compilers/sinix-m.cc
deleted file mode 100644
index e4712dc..0000000
--- a/usr.sbin/xntpd/compilers/sinix-m.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= /usr/ucb/cc
diff --git a/usr.sbin/xntpd/compilers/sinix-m.gcc b/usr.sbin/xntpd/compilers/sinix-m.gcc
deleted file mode 100644
index fe6af58..0000000
--- a/usr.sbin/xntpd/compilers/sinix-m.gcc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= gcc -traditional
-
diff --git a/usr.sbin/xntpd/compilers/sunos4.bsd.cc b/usr.sbin/xntpd/compilers/sunos4.bsd.cc
deleted file mode 100644
index eb4dd62..0000000
--- a/usr.sbin/xntpd/compilers/sunos4.bsd.cc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= cc
diff --git a/usr.sbin/xntpd/compilers/sunos4.bsd.gcc b/usr.sbin/xntpd/compilers/sunos4.bsd.gcc
deleted file mode 100644
index 09e841a..0000000
--- a/usr.sbin/xntpd/compilers/sunos4.bsd.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= gcc -DUSE_PROTOTYPES -Wall -O2 -finline-functions -fdelayed-branch -fomit-frame-pointer
diff --git a/usr.sbin/xntpd/compilers/sunos4.posix.gcc b/usr.sbin/xntpd/compilers/sunos4.posix.gcc
deleted file mode 100644
index 09e841a..0000000
--- a/usr.sbin/xntpd/compilers/sunos4.posix.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= gcc -DUSE_PROTOTYPES -Wall -O2 -finline-functions -fdelayed-branch -fomit-frame-pointer
diff --git a/usr.sbin/xntpd/compilers/sunos5.1.gcc b/usr.sbin/xntpd/compilers/sunos5.1.gcc
deleted file mode 100644
index fe6af58..0000000
--- a/usr.sbin/xntpd/compilers/sunos5.1.gcc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= gcc -traditional
-
diff --git a/usr.sbin/xntpd/compilers/sunos5.2.gcc b/usr.sbin/xntpd/compilers/sunos5.2.gcc
deleted file mode 100644
index fe6af58..0000000
--- a/usr.sbin/xntpd/compilers/sunos5.2.gcc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= gcc -traditional
-
diff --git a/usr.sbin/xntpd/compilers/ultrix.bsd.cc b/usr.sbin/xntpd/compilers/ultrix.bsd.cc
deleted file mode 100644
index 06f6883..0000000
--- a/usr.sbin/xntpd/compilers/ultrix.bsd.cc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= cc -Olimit 800
-
diff --git a/usr.sbin/xntpd/compilers/ultrix.bsd.gcc b/usr.sbin/xntpd/compilers/ultrix.bsd.gcc
deleted file mode 100644
index 5ed9d55..0000000
--- a/usr.sbin/xntpd/compilers/ultrix.bsd.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= gcc -Wall -O2 -finline-functions -fdelayed-branch
diff --git a/usr.sbin/xntpd/compilers/ultrix.posix.cc b/usr.sbin/xntpd/compilers/ultrix.posix.cc
deleted file mode 100644
index 06f6883..0000000
--- a/usr.sbin/xntpd/compilers/ultrix.posix.cc
+++ /dev/null
@@ -1,2 +0,0 @@
-COMPILER= cc -Olimit 800
-
diff --git a/usr.sbin/xntpd/compilers/ultrix.posix.gcc b/usr.sbin/xntpd/compilers/ultrix.posix.gcc
deleted file mode 100644
index 5ed9d55..0000000
--- a/usr.sbin/xntpd/compilers/ultrix.posix.gcc
+++ /dev/null
@@ -1 +0,0 @@
-COMPILER= gcc -Wall -O2 -finline-functions -fdelayed-branch
diff --git a/usr.sbin/xntpd/gadget/README b/usr.sbin/xntpd/gadget/README
deleted file mode 100644
index 35bbc18..0000000
--- a/usr.sbin/xntpd/gadget/README
+++ /dev/null
@@ -1,84 +0,0 @@
-Gadget Box
-
-The gadget box is a 5"x3"x2" aluminum minibox containing level-converter
-and modem circuitry and intended for use with host time servers
-supporting the Network Time Protocol. It includes two subcircuits. One
-of these converts a TTL positive edge into a fixed-width pulse at EIA
-levels and is for use with a timecode receiver or oscillator including a
-TTL one-pulse-per-second (1-pps) output. The other converts the timecode
-modulation broadcast by Canadian time/frequency standard station CHU
-into a 300-bps serial character stream at EIA levels and is for use with
-the clk_chu.c or clk_chu_STREAMS.c modules in the xntp3 distribution.
-
-This archive contains complete construction details for the gadget box,
-including schematic, parts list and artwork for a two-sided, printed-
-circuit board. All files are in PostScript, with the exception of this
-file and an information file, which are in ASCII. The artwork is in the
-1:1 scale and is suitable for direct printing on photographic resist for
-each side of the board. While a plated-through-holes process is most
-convenient, it is possible to bridge the two sides using soldered wires
-where necessary.
-
-Following is a brief functional description of the device. See the
-schematic diagram gadget.s01 for reference. The audio output of a
-shortwave radio tuned to CHU at 3330, 7335 or 14670 kHz is connected to
-J2. A level of at least 30 mV peak-peak is required, such as provided by
-the recorder output on many receivers. The input level is adjusted by
-potentiometer R8 so that the timecode modulation broadcast at 31-39
-seconds past the minute reliably lights green LED1, but the signals
-broadcast during other seconds of the minute do not.
-
-Opamp U4A provides low-impedance drive for the bridged-tee bandpass
-filter U4B. The filter has a bandpass of about 600 Hz at the 6-dB points
-and a center frequency of about 2150 Hz. It is designed to avoid
-aliasing effects with receivers of relatively wide bandpass
-characteristics. The modem itself is implemented by U2 and its
-associated circuitry. Resistors R4 and R1 are a 40-dB pad which matches
-the filter output to the modem input. U2 is a TTL/EIA level converter
-with integral power supply for bipolar signals. The modem output is
-available at pin 3 (receive data) of DB25 connector J1.
-
-The TTL 1-pps signal is connected via J3 to a retriggerable one-shot
-U3A, which generates a TTL pulse of width determined by potentiometer
-R7. The pulse width is determined by the bit rate of the attached serial
-port. In the common case the width is one bit-time, such as 26 us for
-38.4 kbps, for example. This appears to the port as a single start bit
-of zero followed by eight bits of ones and a stop bit of one. The second
-one-shot U3B generates a 200-ms pulse suitable for driving the amber
-LED3 as a visual monitor. The output of U3A is converted to EIA levels
-by U1 and appears at pin 12 (secondary receive data) of J1.
-
-If only the 1-pps circuit is required, U2 and U4 can be deleted and the
-gadget box powered from the EIA modem-control signal at pin 20 (terminal
-ready) of J1, assuming this signal is placed in the on (positive
-voltage) condition by the computer program. J1 is wired to keep most
-finicky UARTs and terminal-driver programs happy. If the CHU circuit is
-required, an external 12-volt AC transformer or 9-12-volt DC supply
-connected to J4 is required. Red LED2 indicates power is supplied to the
-box.
-
-Following is a list of files included in this archive. All files are in
-PostScript, except this one (README) and the information file
-(gadget.lst), which are in ASCII. The files gadget.s01, gadget.s02 and
-gadget.lst were generated using the Schema schematic-capture program
-from Omation. The printed-circuit files *.lpr were generated using
-Schema-PCB, also from Omation.
-
-Files
-----------------------------------------
-README this file
-gadget.s01 circuit schematic
-gadget.s02 minibox assembly drawing
-gadget.lst net list, pin list, parts list, etc.
-gen0102.lpr pcb x-ray diagram
-art01.lpr pcb artword side 1
-art02.lpr pcb artwork side 2
-adt0127.lpr pcb assembly drawing
-dd0124.lpr pcb drill drawing
-sm0228.lpr pcb solder mask (side 2)
-sst0126.lpr pcb silkscreen mask (side 1)
-
-Dave Mills
-University of Delaware
-6 July 1992
-Revised 21 August 1992
diff --git a/usr.sbin/xntpd/gadget/adt0127.lpr b/usr.sbin/xntpd/gadget/adt0127.lpr
deleted file mode 100644
index f0359e8..0000000
--- a/usr.sbin/xntpd/gadget/adt0127.lpr
+++ /dev/null
@@ -1,1427 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:35:14 1992) show
-gsave
-Init
-8000 10500 Clipto
-4025 2626 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 0 [ -1350 4900 ] PLine
--1350 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 0 ] PLine
-1350 0 [ -1350 0 ] PLine
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-10 SetLine
-400 5100 [ 1350 5100 ] PLine
-10 SetLine
-1350 5100 [ 1300 5150 ] PLine
-10 SetLine
-1350 5100 [ 1300 5050 ] PLine
-10 SetLine
--1525 4900 [ -1375 4900 ] PLine
-10 SetLine
--1350 5100 [ -375 5100 ] PLine
-10 SetLine
--1350 5100 [ -1300 5150 ] PLine
-10 SetLine
--1350 5100 [ -1300 5050 ] PLine
-10 SetLine
--1542 0 [ -1367 0 ] PLine
-10 SetLine
--1500 0 [ -1500 1965 ] PLine
-10 SetLine
--1500 0 [ -1450 50 ] PLine
-10 SetLine
--1500 0 [ -1550 50 ] PLine
-10 SetLine
--1500 4900 [ -1450 4850 ] PLine
-10 SetLine
--1500 4900 [ -1550 4850 ] PLine
-10 SetLine
-1350 5150 [ 1350 4925 ] PLine
-10 SetLine
--1350 5150 [ -1350 4925 ] PLine
-10 SetLine
--1500 4900 [ -1500 2750 ] PLine
-10 SetLine
--1050 1400 [ -1050 1200 ] PLine
--1050 1200 [ -1150 1200 ] PLine
--1150 1200 [ -1150 1400 ] PLine
--1150 1400 [ -1050 1400 ] PLine
-10 SetLine
--50 3300 [ -100 3300 ] PLine
-10 SetLine
-250 3235 [ -50 3235 ] PLine
--50 3235 [ -50 3365 ] PLine
--50 3365 [ 250 3365 ] PLine
-250 3365 [ 250 3235 ] PLine
-10 SetLine
-300 3300 [ 250 3300 ] PLine
-10 SetLine
-250 3100 [ 300 3100 ] PLine
-10 SetLine
--50 3165 [ 250 3165 ] PLine
-250 3165 [ 250 3035 ] PLine
-250 3035 [ -50 3035 ] PLine
--50 3035 [ -50 3165 ] PLine
-10 SetLine
--100 3100 [ -50 3100 ] PLine
-10 SetLine
--50 3500 [ -100 3500 ] PLine
-10 SetLine
-250 3435 [ -50 3435 ] PLine
--50 3435 [ -50 3565 ] PLine
--50 3565 [ 250 3565 ] PLine
-250 3565 [ 250 3435 ] PLine
-10 SetLine
-300 3500 [ 250 3500 ] PLine
-10 SetLine
--1150 3700 [ -1200 3700 ] PLine
-10 SetLine
--450 3575 [ -1150 3575 ] PLine
--1150 3575 [ -1150 3825 ] PLine
--1150 3825 [ -450 3825 ] PLine
--450 3825 [ -450 3575 ] PLine
-10 SetLine
--400 3700 [ -450 3700 ] PLine
-10 SetLine
--850 1300 [ -900 1300 ] PLine
-10 SetLine
--150 1175 [ -850 1175 ] PLine
--850 1175 [ -850 1425 ] PLine
--850 1425 [ -150 1425 ] PLine
--150 1425 [ -150 1175 ] PLine
-10 SetLine
--100 1300 [ -150 1300 ] PLine
-10 SetLine
-550 2800 [ 600 2800 ] PLine
-10 SetLine
--150 2925 [ 550 2925 ] PLine
-550 2925 [ 550 2675 ] PLine
-550 2675 [ -150 2675 ] PLine
--150 2675 [ -150 2925 ] PLine
-10 SetLine
--200 2800 [ -150 2800 ] PLine
-10 SetLine
--450 2800 [ -400 2800 ] PLine
-10 SetLine
--1150 2925 [ -450 2925 ] PLine
--450 2925 [ -450 2675 ] PLine
--450 2675 [ -1150 2675 ] PLine
--1150 2675 [ -1150 2925 ] PLine
-10 SetLine
--1200 2800 [ -1150 2800 ] PLine
-10 SetLine
-0 2150 [ 0 2100 ] PLine
-10 SetLine
-65 2450 [ 65 2150 ] PLine
-65 2150 [ -65 2150 ] PLine
--65 2150 [ -65 2450 ] PLine
--65 2450 [ 65 2450 ] PLine
-10 SetLine
-0 2500 [ 0 2450 ] PLine
-10 SetLine
--1200 3050 [ -1200 3000 ] PLine
-10 SetLine
--1135 3350 [ -1135 3050 ] PLine
--1135 3050 [ -1265 3050 ] PLine
--1265 3050 [ -1265 3350 ] PLine
--1265 3350 [ -1135 3350 ] PLine
-10 SetLine
--1200 3400 [ -1200 3350 ] PLine
-10 SetLine
--950 2250 [ -1150 2250 ] PLine
--1150 2250 [ -1150 2350 ] PLine
--1150 2350 [ -950 2350 ] PLine
--950 2350 [ -950 2250 ] PLine
-10 SetLine
--1150 2550 [ -950 2550 ] PLine
--950 2550 [ -950 2450 ] PLine
--950 2450 [ -1150 2450 ] PLine
--1150 2450 [ -1150 2550 ] PLine
-10 SetLine
-850 2850 [ 1050 2850 ] PLine
-1050 2850 [ 1050 2750 ] PLine
-1050 2750 [ 850 2750 ] PLine
-850 2750 [ 850 2850 ] PLine
-10 SetLine
-500 1900 [ 450 1900 ] PLine
-10 SetLine
-1200 1775 [ 500 1775 ] PLine
-500 1775 [ 500 2025 ] PLine
-500 2025 [ 1200 2025 ] PLine
-1200 2025 [ 1200 1775 ] PLine
-10 SetLine
-1250 1900 [ 1200 1900 ] PLine
-10 SetLine
--1150 900 [ -1200 900 ] PLine
-10 SetLine
--150 725 [ -1150 725 ] PLine
--1150 725 [ -1150 1075 ] PLine
--1150 1075 [ -150 1075 ] PLine
--150 1075 [ -150 725 ] PLine
-10 SetLine
--100 900 [ -150 900 ] PLine
-10 SetLine
--1050 4000 [ -1100 4000 ] PLine
-10 SetLine
--750 3935 [ -1050 3935 ] PLine
--1050 3935 [ -1050 4065 ] PLine
--1050 4065 [ -750 4065 ] PLine
--750 4065 [ -750 3935 ] PLine
-10 SetLine
--700 4000 [ -750 4000 ] PLine
-10 SetLine
-750 3000 [ 700 3000 ] PLine
-10 SetLine
-1050 2935 [ 750 2935 ] PLine
-750 2935 [ 750 3065 ] PLine
-750 3065 [ 1050 3065 ] PLine
-1050 3065 [ 1050 2935 ] PLine
-10 SetLine
-1100 3000 [ 1050 3000 ] PLine
-10 SetLine
--250 3750 [ -50 3750 ] PLine
--50 3750 [ -50 3650 ] PLine
--50 3650 [ -250 3650 ] PLine
--250 3650 [ -250 3750 ] PLine
-10 SetLine
-200 900 [ 150 900 ] PLine
-10 SetLine
-270 950 [ 270 850 ] PLine
-10 SetLine
-200 850 [ 200 950 ] PLine
-200 950 [ 500 950 ] PLine
-500 950 [ 500 850 ] PLine
-500 850 [ 200 850 ] PLine
-10 SetLine
-500 900 [ 550 900 ] PLine
-10 SetLine
-250 850 [ 250 950 ] PLine
-10 SetLine
-260 850 [ 260 950 ] PLine
-10 SetLine
-600 3700 [ 650 3700 ] PLine
-10 SetLine
-530 3650 [ 530 3750 ] PLine
-10 SetLine
-600 3750 [ 600 3650 ] PLine
-600 3650 [ 300 3650 ] PLine
-300 3650 [ 300 3750 ] PLine
-300 3750 [ 600 3750 ] PLine
-10 SetLine
-300 3700 [ 250 3700 ] PLine
-10 SetLine
-550 3750 [ 550 3650 ] PLine
-10 SetLine
-540 3750 [ 540 3650 ] PLine
-10 SetLine
--750 550 100 PCircle
-10 SetLine
-0 550 100 PCircle
-10 SetLine
-750 550 100 PCircle
-10 SetLine
-768 5000 [ 768 5248 ] PLine
-768 5248 [ -768 5248 ] PLine
--768 5248 [ -768 5000 ] PLine
-10 SetLine
-1058 4900 [ -1058 4900 ] PLine
-10 SetLine
-1058 5000 [ 1058 4408 ] PLine
-1058 4408 [ -1058 4408 ] PLine
--1058 4408 [ -1058 5000 ] PLine
--1058 5000 [ 1058 5000 ] PLine
-10 SetLine
-1058 5000 [ -1058 5000 ] PLine
-10 SetLine
-768 4900 [ 768 4408 ] PLine
-10 SetLine
--768 4900 [ -768 4408 ] PLine
-10 SetLine
-900 200 [ 1100 200 ] PLine
-1100 200 [ 1100 100 ] PLine
-1100 100 [ 900 100 ] PLine
-900 100 [ 900 200 ] PLine
-10 SetLine
--100 200 [ 100 200 ] PLine
-100 200 [ 100 100 ] PLine
-100 100 [ -100 100 ] PLine
--100 100 [ -100 200 ] PLine
-10 SetLine
--1100 200 [ -900 200 ] PLine
--900 200 [ -900 100 ] PLine
--900 100 [ -1100 100 ] PLine
--1100 100 [ -1100 200 ] PLine
-10 SetLine
-916 3493 [ 900 3456 ] PLine
-900 3456 [ 939 3442 ] PLine
-939 3442 [ 953 3477 ] PLine
-10 SetLine
-988 3612 140 PCircle
-10 SetLine
--1000 1529 [ -1039 1490 ] PLine
-10 SetLine
--1000 1490 [ -1000 1910 ] PLine
--1000 1910 [ -1300 1910 ] PLine
--1300 1910 [ -1300 1490 ] PLine
--1300 1490 [ -1000 1490 ] PLine
-10 SetLine
-200 1730 [ 200 1670 ] PLine
-200 1670 [ 0 1670 ] PLine
-0 1670 [ 0 1730 ] PLine
-0 1730 [ 200 1730 ] PLine
-10 SetLine
-200 1700 [ 260 1700 ] PLine
-10 SetLine
-0 1700 [ -50 1700 ] PLine
-10 SetLine
-300 1270 [ 300 1330 ] PLine
-300 1330 [ 500 1330 ] PLine
-500 1330 [ 500 1270 ] PLine
-500 1270 [ 300 1270 ] PLine
-10 SetLine
-300 1300 [ 240 1300 ] PLine
-10 SetLine
-500 1300 [ 550 1300 ] PLine
-10 SetLine
--600 2270 [ -600 2330 ] PLine
--600 2330 [ -400 2330 ] PLine
--400 2330 [ -400 2270 ] PLine
--400 2270 [ -600 2270 ] PLine
-10 SetLine
--600 2300 [ -660 2300 ] PLine
-10 SetLine
--400 2300 [ -350 2300 ] PLine
-10 SetLine
--800 4230 [ -800 4170 ] PLine
--800 4170 [ -1000 4170 ] PLine
--1000 4170 [ -1000 4230 ] PLine
--1000 4230 [ -800 4230 ] PLine
-10 SetLine
--800 4200 [ -740 4200 ] PLine
-10 SetLine
--1000 4200 [ -1050 4200 ] PLine
-10 SetLine
-1000 3230 [ 1000 3170 ] PLine
-1000 3170 [ 800 3170 ] PLine
-800 3170 [ 800 3230 ] PLine
-800 3230 [ 1000 3230 ] PLine
-10 SetLine
-1000 3200 [ 1060 3200 ] PLine
-10 SetLine
-800 3200 [ 750 3200 ] PLine
-10 SetLine
--600 2470 [ -600 2530 ] PLine
--600 2530 [ -400 2530 ] PLine
--400 2530 [ -400 2470 ] PLine
--400 2470 [ -600 2470 ] PLine
-10 SetLine
--600 2500 [ -660 2500 ] PLine
-10 SetLine
--400 2500 [ -350 2500 ] PLine
-10 SetLine
--600 2070 [ -600 2130 ] PLine
--600 2130 [ -400 2130 ] PLine
--400 2130 [ -400 2070 ] PLine
--400 2070 [ -600 2070 ] PLine
-10 SetLine
--600 2100 [ -660 2100 ] PLine
-10 SetLine
--400 2100 [ -350 2100 ] PLine
-10 SetLine
--900 2130 [ -900 2070 ] PLine
--900 2070 [ -1100 2070 ] PLine
--1100 2070 [ -1100 2130 ] PLine
--1100 2130 [ -900 2130 ] PLine
-10 SetLine
--900 2100 [ -840 2100 ] PLine
-10 SetLine
--1100 2100 [ -1150 2100 ] PLine
-10 SetLine
-500 1130 [ 500 1070 ] PLine
-500 1070 [ 300 1070 ] PLine
-300 1070 [ 300 1130 ] PLine
-300 1130 [ 500 1130 ] PLine
-10 SetLine
-500 1100 [ 560 1100 ] PLine
-10 SetLine
-300 1100 [ 250 1100 ] PLine
-10 SetLine
-1000 2521 [ 1039 2560 ] PLine
-10 SetLine
-1000 2560 [ 1000 2140 ] PLine
-1000 2140 [ 1300 2140 ] PLine
-1300 2140 [ 1300 2560 ] PLine
-1300 2560 [ 1000 2560 ] PLine
-10 SetLine
-0 1870 [ 0 1930 ] PLine
-0 1930 [ 200 1930 ] PLine
-200 1930 [ 200 1870 ] PLine
-200 1870 [ 0 1870 ] PLine
-10 SetLine
-0 1900 [ -60 1900 ] PLine
-10 SetLine
-200 1900 [ 250 1900 ] PLine
-10 SetLine
-100 1470 [ 100 1530 ] PLine
-100 1530 [ 300 1530 ] PLine
-300 1530 [ 300 1470 ] PLine
-300 1470 [ 100 1470 ] PLine
-10 SetLine
-100 1500 [ 40 1500 ] PLine
-10 SetLine
-300 1500 [ 350 1500 ] PLine
-10 SetLine
--950 1650 [ -250 1650 ] PLine
--250 1650 [ -250 1850 ] PLine
--250 1850 [ -950 1850 ] PLine
--950 1850 [ -950 1775 ] PLine
--950 1775 [ -900 1775 ] PLine
--900 1775 [ -900 1725 ] PLine
--900 1725 [ -950 1725 ] PLine
--950 1725 [ -950 1650 ] PLine
-10 SetLine
-150 2250 [ 950 2250 ] PLine
-950 2250 [ 950 2450 ] PLine
-950 2450 [ 150 2450 ] PLine
-150 2450 [ 150 2375 ] PLine
-150 2375 [ 200 2375 ] PLine
-200 2375 [ 200 2325 ] PLine
-200 2325 [ 150 2325 ] PLine
-150 2325 [ 150 2250 ] PLine
-10 SetLine
-150 3950 [ 1150 3950 ] PLine
-1150 3950 [ 1150 4150 ] PLine
-1150 4150 [ 150 4150 ] PLine
-150 4150 [ 150 4075 ] PLine
-150 4075 [ 200 4075 ] PLine
-200 4075 [ 200 4025 ] PLine
-200 4025 [ 150 4025 ] PLine
-150 4025 [ 150 3950 ] PLine
-10 SetLine
--1050 3150 [ -250 3150 ] PLine
--250 3150 [ -250 3350 ] PLine
--250 3350 [ -1050 3350 ] PLine
--1050 3350 [ -1050 3275 ] PLine
--1050 3275 [ -1000 3275 ] PLine
--1000 3275 [ -1000 3225 ] PLine
--1000 3225 [ -1050 3225 ] PLine
--1050 3225 [ -1050 3150 ] PLine
-10 SetLine
-800 1075 [ 800 1675 ] PLine
-800 1675 [ 1200 1675 ] PLine
-1200 1675 [ 1200 1075 ] PLine
-1200 1075 [ 800 1075 ] PLine
-10 SetLine
-875 1075 [ 875 825 ] PLine
-875 825 [ 925 825 ] PLine
-925 825 [ 925 1075 ] PLine
-10 SetLine
-1075 1075 [ 1075 825 ] PLine
-1075 825 [ 1125 825 ] PLine
-1125 825 [ 1125 1075 ] PLine
-10 SetLine
-975 1075 [ 975 825 ] PLine
-975 825 [ 1025 825 ] PLine
-1025 825 [ 1025 1075 ] PLine
-10 SetLine
-996 1549 75 PCircle
-10 SetLine
-800 1425 [ 1200 1425 ] PLine
-10 SetLine
--100 4200 [ -25 4200 ] PLine
-10 SetLine
--100 3900 [ -100 4300 ] PLine
--100 4300 [ -500 4300 ] PLine
--500 4300 [ -500 3900 ] PLine
--500 3900 [ -100 3900 ] PLine
-10 SetLine
--100 4000 [ -25 4000 ] PLine
-10 SetLine
--1100 450 100 PCircle
-10 SetLine
-1100 450 100 PCircle
-10 SetLine
-1000 3430 [ 1000 3370 ] PLine
-1000 3370 [ 800 3370 ] PLine
-800 3370 [ 800 3430 ] PLine
-800 3430 [ 1000 3430 ] PLine
-10 SetLine
-1000 3400 [ 1060 3400 ] PLine
-10 SetLine
-800 3400 [ 750 3400 ] PLine
-10 SetText2
-0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char
-10 SetText2
-0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char
-0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char
-10 SetText2
-0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char
-10 SetText2
-0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -1075 1225 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char
-0 -1075 1277 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1075 1331 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char
-0 -1075 1387 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char
-10 SetText2
-0 75 3275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 127 3275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 181 3275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 237 3275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 289 3275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 75 3075 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 127 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 181 3075 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 237 3075 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 289 3075 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 75 3475 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 127 3475 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 181 3475 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 237 3475 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 289 3475 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 -825 3750 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 3750 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -715 3750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 -663 3750 [ [ 0 78 40 -21 ] ] Char
-0 -602 3750 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -546 3750 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -490 3750 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -436 3750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 -575 1350 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -521 1350 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -465 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 -413 1350 [ [ 0 78 40 -21 ] ] Char
-0 -352 1350 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -296 1350 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -240 1350 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -186 1350 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 125 2850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 179 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 235 2850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 287 2850 [ [ 0 78 40 -21 ] ] Char
-0 348 2850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 404 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 460 2850 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 514 2850 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 -825 2850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -715 2850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 -663 2850 [ [ 0 78 40 -21 ] ] Char
-0 -602 2850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -546 2850 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -490 2850 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -436 2850 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 0 2250 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char
-0 0 2302 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 0 2356 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char
-0 0 2412 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char
-0 0 2464 [ [ -65 0 0 0 ] [ -65 0 -65 29 ] [ -34 0 -34 18 ] [ 0 0 0 29 ] ] Char
-10 SetText2
-0 -1175 3200 [ [ -65 0 0 0 ] [ -65 0 -65 15 -62 22 -56 27 -50 29 -40 31 -25 31 -15 29 -9 27 -3 22 0 15 0 0 ] ] Char
-0 -1175 3252 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1175 3306 [ [ -65 18 0 0 ] [ -65 18 0 36 ] [ -21 6 -21 29 ] ] Char
-0 -1175 3362 [ [ -65 0 0 0 ] [ -65 0 -65 20 -62 27 -59 29 -53 31 -43 31 -37 29 -34 27 -31 20 -31 0 ] ] Char
-0 -1175 3414 [ [ -65 0 0 0 ] [ -65 0 -65 29 ] [ -34 0 -34 18 ] [ 0 0 0 29 ] ] Char
-10 SetText2
-0 -1100 2275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -1048 2275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -994 2275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -938 2275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-10 SetText2
-0 -1100 2475 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -1048 2475 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -994 2475 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -938 2475 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-10 SetText2
-0 900 2775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 952 2775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 1006 2775 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 1062 2775 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-10 SetText2
-0 800 1950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 854 1950 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 910 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 962 1950 [ [ 0 78 40 -21 ] ] Char
-0 1023 1950 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1079 1950 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 1135 1950 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 1189 1950 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 -675 1000 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -621 1000 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -565 1000 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 -513 1000 [ [ 0 78 40 -21 ] ] Char
-0 -452 1000 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -396 1000 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -340 1000 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-0 -290 1000 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 -925 3975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -873 3975 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -819 3975 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -763 3975 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 -711 3975 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 875 2975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 927 2975 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 981 2975 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 1037 2975 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 1089 2975 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 -200 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -148 3675 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -94 3675 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -38 3675 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-10 SetText2
-0 325 875 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 377 875 [ [ 0 65 0 0 ] ] Char
-0 397 875 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 453 875 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 505 875 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 450 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 502 3675 [ [ 0 65 0 0 ] ] Char
-0 522 3675 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 578 3675 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 630 3675 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 -775 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -723 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 -671 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 -619 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-10 SetText2
-0 -50 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 2 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 54 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 106 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-10 SetText2
-0 700 575 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 752 575 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 804 575 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 856 575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-10 SetText2
-0 -1175 4550 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1121 4550 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 -1065 4550 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 -1013 4550 [ [ 0 78 40 -21 ] ] Char
-0 -952 4550 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -900 4550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 -848 4550 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 -796 4550 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -742 4550 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 -690 4550 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char
-10 SetText2
-0 1125 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 1177 25 [ [ 0 65 0 0 27 0 ] ] Char
-0 1224 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1274 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-10 SetText2
-0 125 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 177 25 [ [ 0 65 0 0 27 0 ] ] Char
-0 224 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 274 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-10 SetText2
-0 -875 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -823 25 [ [ 0 65 0 0 27 0 ] ] Char
-0 -776 25 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -726 25 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-10 SetText2
-0 1075 3325 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 1127 3325 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 1179 3325 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 1231 3325 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-0 1281 3325 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 1333 3325 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 -1075 1575 [ [ 0 -65 0 0 ] [ 0 -65 -15 -65 -22 -62 -27 -56 -29 -50 -31 -40 -31 -25 -29 -15 -27 -9 -22 -3 -15 0 0 0 ] ] Char
-0 -1127 1575 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -43 -29 -37 -27 -34 -20 -31 0 -31 ] ] Char
-0 -1179 1575 [ [ -13 -65 -9 -62 -4 -56 -2 -50 0 -40 0 -25 -2 -15 -4 -9 -9 -3 -13 0 -22 0 -27 -3 -31 -9 -34 -15 -36 -25 -36 -40 -34 -50 -31 -56 -27 -62 -22 -65 -13 -65 ] ] Char
-0 -1235 1575 [ [ -15 -65 -15 0 ] [ 0 -65 -31 -65 ] ] Char
-10 SetText2
-0 25 1650 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 77 1650 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 129 1650 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 179 1650 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 350 1250 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 402 1250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 454 1250 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 504 1250 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -550 2250 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -498 2250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -446 2250 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -396 2250 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -925 4150 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -873 4150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -821 4150 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -771 4150 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 850 3150 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 902 3150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 954 3150 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1004 3150 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -550 2450 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -498 2450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -446 2450 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -396 2450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -550 2050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -498 2050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -446 2050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -396 2050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -1025 2050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -973 2050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -921 2050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -871 2050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 350 1050 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 402 1050 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 454 1050 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 504 1050 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 1200 2225 [ [ 0 -65 0 0 ] [ 0 -65 -15 -65 -22 -62 -27 -56 -29 -50 -31 -40 -31 -25 -29 -15 -27 -9 -22 -3 -15 0 0 0 ] ] Char
-0 1148 2225 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -43 -29 -37 -27 -34 -20 -31 0 -31 ] ] Char
-0 1096 2225 [ [ -13 -65 -9 -62 -4 -56 -2 -50 0 -40 0 -25 -2 -15 -4 -9 -9 -3 -13 0 -22 0 -27 -3 -31 -9 -34 -15 -36 -25 -36 -40 -34 -50 -31 -56 -27 -62 -22 -65 -13 -65 ] ] Char
-0 1040 2225 [ [ -15 -65 -15 0 ] [ 0 -65 -31 -65 ] ] Char
-10 SetText2
-0 50 1850 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 102 1850 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 154 1850 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 204 1850 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 150 1450 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 202 1450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 254 1450 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 304 1450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -675 1850 [ [ 0 65 0 0 27 0 ] ] Char
-0 -628 1850 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -572 1850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -520 1850 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 -468 1850 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 450 2450 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-0 502 2450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-0 556 2450 [ [ 0 65 0 0 27 0 ] ] Char
-0 603 2450 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-0 655 2450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 686 2450 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 738 2450 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 500 4175 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 556 4175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 610 4175 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 641 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-0 695 4175 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 749 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-0 803 4175 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-0 857 4175 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -675 3350 [ [ 0 65 0 0 ] ] Char
-0 -655 3350 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -601 3350 [ [ 0 65 0 0 27 0 ] ] Char
-0 -554 3350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 -502 3350 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-0 -450 3350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 950 1600 [ [ 0 65 0 0 27 0 ] ] Char
-0 997 1600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1053 1600 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-0 1105 1600 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-0 1157 1600 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 1209 1600 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -350 4225 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -298 4225 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -246 4225 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char
-0 -194 4225 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -138 4225 [ [ 0 65 0 0 27 0 ] ] Char
-10 SetText2
-0 -1225 500 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -1169 500 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char
-0 -1117 500 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 -1065 500 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 -1009 500 [ [ 0 65 0 0 27 0 ] ] Char
-0 -962 500 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -912 500 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 -860 500 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 1125 500 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1181 500 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char
-0 1233 500 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 1285 500 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 1341 500 [ [ 0 65 0 0 27 0 ] ] Char
-0 1388 500 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1438 500 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 1490 500 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 800 3350 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 852 3350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 904 3350 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 954 3350 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-0 -248 4725 [ [ 0 65 0 0 ] ] Char
-0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -300 5075 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-0 -248 5075 [ [ 2 6 0 3 2 0 4 3 2 6 ] ] Char
-0 -223 5075 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-0 -171 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 -119 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 -15 5075 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-0 46 5075 [ [ 40 78 0 -21 ] ] Char
-0 107 5075 [ [ 0 28 40 28 ] ] Char
-0 220 5075 [ [ 2 6 0 3 2 0 4 3 2 6 ] ] Char
-0 245 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 297 5075 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-0 349 5075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1475 2025 [ [ -65 22 -21 0 -21 34 ] [ -65 22 0 22 ] ] Char
-0 -1475 2079 [ [ -6 2 -3 0 0 2 -3 4 -6 2 ] ] Char
-0 -1475 2104 [ [ -43 29 -34 27 -28 22 -25 15 -25 13 -28 6 -34 2 -43 0 -46 0 -56 2 -62 6 -65 13 -65 15 -62 22 -56 27 -43 29 -28 29 -12 27 -3 22 0 15 0 11 -3 4 -9 2 ] ] Char
-0 -1475 2154 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char
-0 -1475 2206 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char
-0 -1475 2310 [ [ -56 20 0 20 ] [ -28 0 -28 40 ] ] Char
-0 -1475 2371 [ [ -78 40 21 0 ] ] Char
-0 -1475 2432 [ [ -28 0 -28 40 ] ] Char
-0 -1475 2545 [ [ -6 2 -3 0 0 2 -3 4 -6 2 ] ] Char
-0 -1475 2570 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char
-0 -1475 2622 [ [ -65 13 -62 6 -53 2 -37 0 -28 0 -12 2 -3 6 0 13 0 18 -3 25 -12 29 -28 31 -37 31 -53 29 -62 25 -65 18 -65 13 ] ] Char
-0 -1475 2674 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/art01.lpr b/usr.sbin/xntpd/gadget/art01.lpr
deleted file mode 100644
index d770fed..0000000
--- a/usr.sbin/xntpd/gadget/art01.lpr
+++ /dev/null
@@ -1,890 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:34:56 1992) show
-gsave
-Init
-8000 10500 Clipto
-4000 2800 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-0 0 60 /PRndPad SetFlash
--1100 1450 Flash
--1100 1150 Flash
-300 3300 Flash
--100 3300 Flash
--100 3100 Flash
-300 3100 Flash
-300 3500 Flash
--100 3500 Flash
--400 3700 Flash
--1200 3700 Flash
--100 1300 Flash
--900 1300 Flash
--200 2800 Flash
-600 2800 Flash
--1200 2800 Flash
--400 2800 Flash
-0 2500 Flash
-0 2100 Flash
--1200 3400 Flash
--1200 3000 Flash
--900 2300 Flash
--1200 2300 Flash
--1200 2500 Flash
--900 2500 Flash
-800 2800 Flash
-1100 2800 Flash
-1250 1900 Flash
-450 1900 Flash
--100 900 Flash
--1200 900 Flash
--700 4000 Flash
--1100 4000 Flash
-1100 3000 Flash
-700 3000 Flash
--300 3700 Flash
-0 3700 Flash
-0 0 60 /PSqrPad SetFlash
-100 900 Flash
-0 0 60 /PRndPad SetFlash
-600 900 Flash
-0 0 60 /PSqrPad SetFlash
-700 3700 Flash
-0 0 60 /PRndPad SetFlash
-200 3700 Flash
-0 0 70 /PRndPad SetFlash
--750 550 Flash
--750 450 Flash
-0 550 Flash
-0 450 Flash
-750 550 Flash
-750 450 Flash
--648 4479 Flash
--540 4479 Flash
--432 4479 Flash
--324 4479 Flash
--216 4479 Flash
--108 4479 Flash
-0 4479 Flash
-108 4479 Flash
-216 4479 Flash
-324 4479 Flash
-432 4479 Flash
-540 4479 Flash
-648 4479 Flash
--594 4593 Flash
--486 4593 Flash
--378 4593 Flash
--270 4593 Flash
--162 4593 Flash
--54 4593 Flash
-54 4593 Flash
-162 4593 Flash
-270 4593 Flash
-378 4593 Flash
-486 4593 Flash
-594 4593 Flash
-0 0 177 /PRndPad SetFlash
-940 4536 Flash
--940 4536 Flash
-0 0 60 /PSqrPad SetFlash
-950 150 Flash
-0 0 60 /PRndPad SetFlash
-1050 150 Flash
-0 0 60 /PSqrPad SetFlash
--50 150 Flash
-0 0 60 /PRndPad SetFlash
-50 150 Flash
-0 0 60 /PSqrPad SetFlash
--1050 150 Flash
-0 0 60 /PRndPad SetFlash
--950 150 Flash
-0 0 50 /PRndPad SetFlash
-950 3524 Flash
-1026 3612 Flash
-950 3700 Flash
-0 0 60 /PSqrPad SetFlash
--1200 1600 Flash
-0 0 60 /PRndPad SetFlash
--1100 1700 Flash
--1200 1800 Flash
-300 1700 Flash
--100 1700 Flash
-200 1300 Flash
-600 1300 Flash
--700 2300 Flash
--300 2300 Flash
--700 4200 Flash
--1100 4200 Flash
-1100 3200 Flash
-700 3200 Flash
--700 2500 Flash
--300 2500 Flash
--700 2100 Flash
--300 2100 Flash
--800 2100 Flash
--1200 2100 Flash
-600 1100 Flash
-200 1100 Flash
-0 0 60 /PSqrPad SetFlash
-1200 2450 Flash
-0 0 60 /PRndPad SetFlash
-1100 2350 Flash
-1200 2250 Flash
--100 1900 Flash
-300 1900 Flash
-0 1500 Flash
-400 1500 Flash
-0 0 60 /PSqrPad SetFlash
--900 1600 Flash
-0 0 60 /PRndPad SetFlash
--800 1600 Flash
--700 1600 Flash
--600 1600 Flash
--500 1600 Flash
--400 1600 Flash
--300 1600 Flash
--300 1900 Flash
--400 1900 Flash
--500 1900 Flash
--600 1900 Flash
--700 1900 Flash
--800 1900 Flash
--900 1900 Flash
-0 0 60 /PSqrPad SetFlash
-200 2200 Flash
-0 0 60 /PRndPad SetFlash
-300 2200 Flash
-400 2200 Flash
-500 2200 Flash
-600 2200 Flash
-700 2200 Flash
-800 2200 Flash
-900 2200 Flash
-900 2500 Flash
-800 2500 Flash
-700 2500 Flash
-600 2500 Flash
-500 2500 Flash
-400 2500 Flash
-300 2500 Flash
-200 2500 Flash
-0 0 60 /PSqrPad SetFlash
-200 3900 Flash
-0 0 60 /PRndPad SetFlash
-300 3900 Flash
-400 3900 Flash
-500 3900 Flash
-600 3900 Flash
-700 3900 Flash
-800 3900 Flash
-900 3900 Flash
-1000 3900 Flash
-1100 3900 Flash
-1100 4200 Flash
-1000 4200 Flash
-900 4200 Flash
-800 4200 Flash
-700 4200 Flash
-600 4200 Flash
-500 4200 Flash
-400 4200 Flash
-300 4200 Flash
-200 4200 Flash
-0 0 60 /PSqrPad SetFlash
--1000 3100 Flash
-0 0 60 /PRndPad SetFlash
--900 3100 Flash
--800 3100 Flash
--700 3100 Flash
--600 3100 Flash
--500 3100 Flash
--400 3100 Flash
--300 3100 Flash
--300 3400 Flash
--400 3400 Flash
--500 3400 Flash
--600 3400 Flash
--700 3400 Flash
--800 3400 Flash
--900 3400 Flash
--1000 3400 Flash
-0 0 70 /PRndPad SetFlash
-900 800 Flash
-1100 800 Flash
-1000 800 Flash
-0 0 177 /PRndPad SetFlash
-1000 1550 Flash
-0 0 60 /PRndPad SetFlash
-0 4000 Flash
-0 4200 Flash
-0 0 250 /PRndPad SetFlash
--1100 450 Flash
-1100 450 Flash
-0 0 60 /PRndPad SetFlash
-1100 3400 Flash
-700 3400 Flash
-10 SetText2
-0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-0 -248 4725 [ [ 0 65 0 0 ] ] Char
-0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-12 SetLine
--100 900 [ -100 800 ] PLine
--100 800 [ 100 800 ] PLine
-100 900 [ 100 800 ] PLine
-100 800 [ 900 800 ] PLine
-300 1100 [ 600 1100 ] PLine
--1100 1150 [ -700 1150 ] PLine
--700 1150 [ -700 1600 ] PLine
-175 3300 [ -100 3300 ] PLine
-700 3000 [ 300 3000 ] PLine
-300 3000 [ 300 3100 ] PLine
-300 2500 [ 300 2650 ] PLine
-300 2650 [ 800 2650 ] PLine
-800 2800 [ 800 2650 ] PLine
-800 2650 [ 1000 2650 ] PLine
-400 2500 [ 400 2600 ] PLine
-400 2600 [ 1100 2600 ] PLine
-1100 2600 [ 1100 2800 ] PLine
--900 2300 [ -700 2100 ] PLine
--700 2100 [ -450 2100 ] PLine
-500 2500 [ 550 2550 ] PLine
-550 2550 [ 750 2550 ] PLine
-750 2550 [ 800 2500 ] PLine
--650 2600 [ -100 2600 ] PLine
--100 2250 [ 450 2250 ] PLine
-450 2250 [ 500 2200 ] PLine
--1200 2300 [ -1050 2300 ] PLine
--1050 2300 [ -1050 2100 ] PLine
--1050 2100 [ -800 2100 ] PLine
--900 2500 [ -700 2300 ] PLine
--700 2300 [ -700 2200 ] PLine
--700 2200 [ -300 2200 ] PLine
--300 2200 [ -300 2100 ] PLine
-1250 1900 [ 1250 1800 ] PLine
-1250 1800 [ 800 1800 ] PLine
-300 1900 [ 300 1800 ] PLine
-300 1800 [ 800 1800 ] PLine
-700 1900 [ 450 1900 ] PLine
-300 1700 [ 600 1700 ] PLine
-500 1600 [ -100 1600 ] PLine
--100 1600 [ -100 1700 ] PLine
-1000 3900 [ 1050 3950 ] PLine
-1050 3950 [ 1050 4050 ] PLine
-1050 4050 [ 50 4050 ] PLine
-50 4050 [ 0 4000 ] PLine
-0 4100 [ 900 4100 ] PLine
-800 3000 [ 1100 3000 ] PLine
-0 3700 [ 0 3850 ] PLine
-0 3850 [ 450 3850 ] PLine
-450 3850 [ 500 3900 ] PLine
--400 3400 [ -400 3600 ] PLine
--400 3600 [ 300 3600 ] PLine
-300 3600 [ 300 3700 ] PLine
-300 3700 [ 600 3700 ] PLine
-450 2700 [ -400 2700 ] PLine
--400 2300 [ -300 2300 ] PLine
--700 4200 [ -650 4250 ] PLine
--650 4250 [ 550 4250 ] PLine
-550 4250 [ 600 4200 ] PLine
-350 3800 [ 1100 3800 ] PLine
-1100 3800 [ 1100 3900 ] PLine
--800 3100 [ -800 2800 ] PLine
--800 2800 [ -400 2800 ] PLine
--850 3700 [ -400 3700 ] PLine
-400 1300 [ 600 1300 ] PLine
--1100 4200 [ -1050 4150 ] PLine
--1050 4150 [ 650 4150 ] PLine
-650 4150 [ 700 4200 ] PLine
--300 3400 [ -250 3350 ] PLine
--250 3350 [ 1200 3350 ] PLine
-1200 3350 [ 1200 4200 ] PLine
-1200 4200 [ 1100 4200 ] PLine
--700 3100 [ -700 2875 ] PLine
--700 2875 [ -200 2875 ] PLine
--200 2875 [ -200 2800 ] PLine
--600 3100 [ -600 2950 ] PLine
--600 2950 [ 600 2950 ] PLine
-600 2950 [ 600 2800 ] PLine
--750 550 [ -750 1050 ] PLine
--750 1050 [ -1050 1050 ] PLine
-950 3200 [ 700 3200 ] PLine
-850 1200 [ -600 1200 ] PLine
--550 3900 [ -350 3900 ] PLine
-540 4479 [ 540 4300 ] PLine
-540 4300 [ -800 4300 ] PLine
-432 4479 [ 432 4350 ] PLine
-432 4350 [ -750 4350 ] PLine
-400 3400 [ 700 3400 ] PLine
-50 SetLine
--1000 3400 [ -1000 3250 ] PLine
--1000 3250 [ -200 3250 ] PLine
--200 3250 [ -200 3100 ] PLine
--200 3100 [ -100 3100 ] PLine
-0 2500 [ 0 2350 ] PLine
-0 2350 [ 200 2350 ] PLine
-200 2350 [ 200 2500 ] PLine
-0 2350 [ -200 2350 ] PLine
--1000 3400 [ -1200 3400 ] PLine
-200 2350 [ 1100 2350 ] PLine
-1100 2350 [ 1100 2450 ] PLine
-1100 2450 [ 1200 2450 ] PLine
--600 1600 [ -600 1750 ] PLine
--600 1750 [ -200 1750 ] PLine
--1200 3700 [ -1000 3700 ] PLine
--1000 3700 [ -1000 3400 ] PLine
-1100 3200 [ 1250 3200 ] PLine
-1250 3200 [ 1250 2450 ] PLine
-1250 2450 [ 1200 2450 ] PLine
-900 4200 [ 900 4300 ] PLine
-900 4300 [ 1250 4300 ] PLine
-1250 4300 [ 1250 3200 ] PLine
--700 4000 [ -1000 4000 ] PLine
--1000 4000 [ -1000 3700 ] PLine
-900 4200 [ 800 4200 ] PLine
-200 1400 [ 1100 1400 ] PLine
-1100 1400 [ 1100 800 ] PLine
--50 450 [ -50 150 ] PLine
-950 150 [ 1100 450 ] PLine
-1100 450 [ 1000 800 ] PLine
--250 450 [ -250 1000 ] PLine
--250 1000 [ 200 1000 ] PLine
-200 1000 [ 200 1100 ] PLine
-0 450 [ -750 450 ] PLine
--750 450 [ -1100 450 ] PLine
-0 4475 [ 0 4400 ] PLine
-0 4400 [ -648 4400 ] PLine
--648 4400 [ -648 4479 ] PLine
-75 4000 [ 300 4000 ] PLine
-300 4000 [ 300 3900 ] PLine
-1100 450 [ 750 450 ] PLine
-750 450 [ 0 450 ] PLine
-900 2200 [ 900 2000 ] PLine
-900 2000 [ 75 2000 ] PLine
-75 2000 [ 75 2200 ] PLine
-75 2200 [ 200 2200 ] PLine
-300 4000 [ 1000 4000 ] PLine
--1100 450 [ -1050 150 ] PLine
--600 1900 [ -600 2000 ] PLine
--600 2000 [ 75 2000 ] PLine
-75 2100 [ 0 2100 ] PLine
-0 0 55 /PRndPad SetFlash
--200 2350 Flash
--200 1750 Flash
-200 1400 Flash
-0 0 55 /PRndPad SetFlash
-300 1100 Flash
-0 0 55 /PRndPad SetFlash
-175 3300 Flash
-0 0 55 /PRndPad SetFlash
-1000 2650 Flash
-0 0 55 /PRndPad SetFlash
--450 2100 Flash
-0 0 55 /PRndPad SetFlash
--650 2600 Flash
--100 2600 Flash
--100 2250 Flash
-0 0 55 /PRndPad SetFlash
-800 1800 Flash
-0 0 55 /PRndPad SetFlash
-700 1900 Flash
-0 0 55 /PRndPad SetFlash
-600 1700 Flash
-0 0 55 /PRndPad SetFlash
-500 1600 Flash
-0 0 55 /PRndPad SetFlash
-0 4100 Flash
-900 4100 Flash
-0 0 55 /PRndPad SetFlash
-800 3000 Flash
-0 0 55 /PRndPad SetFlash
-600 3700 Flash
-0 0 55 /PRndPad SetFlash
-450 2700 Flash
--400 2700 Flash
--400 2300 Flash
-0 0 55 /PRndPad SetFlash
-350 3800 Flash
-0 0 55 /PRndPad SetFlash
--850 3700 Flash
-0 0 55 /PRndPad SetFlash
-400 1300 Flash
-0 0 55 /PRndPad SetFlash
--1050 1050 Flash
-0 0 55 /PRndPad SetFlash
-0 4475 Flash
-75 4000 Flash
-1000 4000 Flash
-0 0 55 /PRndPad SetFlash
-950 3200 Flash
-0 0 55 /PRndPad SetFlash
-850 1200 Flash
--600 1200 Flash
-0 0 55 /PRndPad SetFlash
--550 3900 Flash
--350 3900 Flash
-0 0 55 /PRndPad SetFlash
--800 4300 Flash
-0 0 55 /PRndPad SetFlash
--750 4350 Flash
-0 0 55 /PRndPad SetFlash
-400 3400 Flash
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/art02.lpr b/usr.sbin/xntpd/gadget/art02.lpr
deleted file mode 100644
index 1b336f3..0000000
--- a/usr.sbin/xntpd/gadget/art02.lpr
+++ /dev/null
@@ -1,893 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:35:02 1992) show
-gsave
-Init
-8000 10500 Clipto
-4000 2800 translate
--1 1 scale
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-0 0 60 /PRndPad SetFlash
--1100 1450 Flash
--1100 1150 Flash
-300 3300 Flash
--100 3300 Flash
--100 3100 Flash
-300 3100 Flash
-300 3500 Flash
--100 3500 Flash
--400 3700 Flash
--1200 3700 Flash
--100 1300 Flash
--900 1300 Flash
--200 2800 Flash
-600 2800 Flash
--1200 2800 Flash
--400 2800 Flash
-0 2500 Flash
-0 2100 Flash
--1200 3400 Flash
--1200 3000 Flash
--900 2300 Flash
--1200 2300 Flash
--1200 2500 Flash
--900 2500 Flash
-800 2800 Flash
-1100 2800 Flash
-1250 1900 Flash
-450 1900 Flash
--100 900 Flash
--1200 900 Flash
--700 4000 Flash
--1100 4000 Flash
-1100 3000 Flash
-700 3000 Flash
--300 3700 Flash
-0 3700 Flash
-0 0 60 /PSqrPad SetFlash
-100 900 Flash
-0 0 60 /PRndPad SetFlash
-600 900 Flash
-0 0 60 /PSqrPad SetFlash
-700 3700 Flash
-0 0 60 /PRndPad SetFlash
-200 3700 Flash
-0 0 70 /PRndPad SetFlash
--750 550 Flash
--750 450 Flash
-0 550 Flash
-0 450 Flash
-750 550 Flash
-750 450 Flash
--648 4479 Flash
--540 4479 Flash
--432 4479 Flash
--324 4479 Flash
--216 4479 Flash
--108 4479 Flash
-0 4479 Flash
-108 4479 Flash
-216 4479 Flash
-324 4479 Flash
-432 4479 Flash
-540 4479 Flash
-648 4479 Flash
--594 4593 Flash
--486 4593 Flash
--378 4593 Flash
--270 4593 Flash
--162 4593 Flash
--54 4593 Flash
-54 4593 Flash
-162 4593 Flash
-270 4593 Flash
-378 4593 Flash
-486 4593 Flash
-594 4593 Flash
-0 0 177 /PRndPad SetFlash
-940 4536 Flash
--940 4536 Flash
-0 0 60 /PSqrPad SetFlash
-950 150 Flash
-0 0 60 /PRndPad SetFlash
-1050 150 Flash
-0 0 60 /PSqrPad SetFlash
--50 150 Flash
-0 0 60 /PRndPad SetFlash
-50 150 Flash
-0 0 60 /PSqrPad SetFlash
--1050 150 Flash
-0 0 60 /PRndPad SetFlash
--950 150 Flash
-0 0 50 /PRndPad SetFlash
-950 3524 Flash
-1026 3612 Flash
-950 3700 Flash
-0 0 60 /PSqrPad SetFlash
--1200 1600 Flash
-0 0 60 /PRndPad SetFlash
--1100 1700 Flash
--1200 1800 Flash
-300 1700 Flash
--100 1700 Flash
-200 1300 Flash
-600 1300 Flash
--700 2300 Flash
--300 2300 Flash
--700 4200 Flash
--1100 4200 Flash
-1100 3200 Flash
-700 3200 Flash
--700 2500 Flash
--300 2500 Flash
--700 2100 Flash
--300 2100 Flash
--800 2100 Flash
--1200 2100 Flash
-600 1100 Flash
-200 1100 Flash
-0 0 60 /PSqrPad SetFlash
-1200 2450 Flash
-0 0 60 /PRndPad SetFlash
-1100 2350 Flash
-1200 2250 Flash
--100 1900 Flash
-300 1900 Flash
-0 1500 Flash
-400 1500 Flash
-0 0 60 /PSqrPad SetFlash
--900 1600 Flash
-0 0 60 /PRndPad SetFlash
--800 1600 Flash
--700 1600 Flash
--600 1600 Flash
--500 1600 Flash
--400 1600 Flash
--300 1600 Flash
--300 1900 Flash
--400 1900 Flash
--500 1900 Flash
--600 1900 Flash
--700 1900 Flash
--800 1900 Flash
--900 1900 Flash
-0 0 60 /PSqrPad SetFlash
-200 2200 Flash
-0 0 60 /PRndPad SetFlash
-300 2200 Flash
-400 2200 Flash
-500 2200 Flash
-600 2200 Flash
-700 2200 Flash
-800 2200 Flash
-900 2200 Flash
-900 2500 Flash
-800 2500 Flash
-700 2500 Flash
-600 2500 Flash
-500 2500 Flash
-400 2500 Flash
-300 2500 Flash
-200 2500 Flash
-0 0 60 /PSqrPad SetFlash
-200 3900 Flash
-0 0 60 /PRndPad SetFlash
-300 3900 Flash
-400 3900 Flash
-500 3900 Flash
-600 3900 Flash
-700 3900 Flash
-800 3900 Flash
-900 3900 Flash
-1000 3900 Flash
-1100 3900 Flash
-1100 4200 Flash
-1000 4200 Flash
-900 4200 Flash
-800 4200 Flash
-700 4200 Flash
-600 4200 Flash
-500 4200 Flash
-400 4200 Flash
-300 4200 Flash
-200 4200 Flash
-0 0 60 /PSqrPad SetFlash
--1000 3100 Flash
-0 0 60 /PRndPad SetFlash
--900 3100 Flash
--800 3100 Flash
--700 3100 Flash
--600 3100 Flash
--500 3100 Flash
--400 3100 Flash
--300 3100 Flash
--300 3400 Flash
--400 3400 Flash
--500 3400 Flash
--600 3400 Flash
--700 3400 Flash
--800 3400 Flash
--900 3400 Flash
--1000 3400 Flash
-0 0 70 /PRndPad SetFlash
-900 800 Flash
-1100 800 Flash
-1000 800 Flash
-0 0 177 /PRndPad SetFlash
-1000 1550 Flash
-0 0 60 /PRndPad SetFlash
-0 4000 Flash
-0 4200 Flash
-0 0 250 /PRndPad SetFlash
--1100 450 Flash
-1100 450 Flash
-0 0 60 /PRndPad SetFlash
-1100 3400 Flash
-700 3400 Flash
-10 SetText2
-0 300 4725 [ [ -31 56 -27 62 -20 65 -11 65 -4 62 0 56 0 50 -2 43 -4 40 -9 37 -22 31 -27 28 -29 25 -31 18 -31 9 -27 3 -20 0 -11 0 -4 3 0 9 ] ] Char
-0 248 4725 [ [ 0 65 0 0 ] ] Char
-0 228 4725 [ [ 0 65 0 0 ] [ 0 65 -15 65 -22 62 -27 56 -29 50 -31 40 -31 25 -29 15 -27 9 -22 3 -15 0 0 0 ] ] Char
-0 176 4725 [ [ 0 65 0 0 ] [ 0 65 -29 65 ] [ 0 34 -18 34 ] [ 0 0 -29 0 ] ] Char
-0 74 4725 [ [ -2 50 -2 53 -4 59 -6 62 -11 65 -20 65 -25 62 -27 59 -29 53 -29 46 -27 40 -22 31 0 0 -31 0 ] ] Char
-12 SetLine
-700 3700 [ 750 3650 ] PLine
-750 3650 [ 750 800 ] PLine
-750 800 [ 900 800 ] PLine
-0 550 [ 300 550 ] PLine
-300 550 [ 300 1100 ] PLine
-300 2200 [ 250 2150 ] PLine
-250 2150 [ 250 1600 ] PLine
-250 1600 [ 300 1550 ] PLine
-300 1550 [ 300 1100 ] PLine
--700 2500 [ -550 2500 ] PLine
--550 2500 [ -550 1700 ] PLine
--550 1700 [ -700 1700 ] PLine
--700 1700 [ -700 1600 ] PLine
-300 3500 [ 175 3500 ] PLine
-175 3500 [ 175 3100 ] PLine
-175 3100 [ 300 3100 ] PLine
-300 4200 [ 250 4150 ] PLine
-250 4150 [ 250 3800 ] PLine
-250 3800 [ 300 3750 ] PLine
-300 3750 [ 300 3500 ] PLine
--300 2500 [ -250 2550 ] PLine
--250 2550 [ -250 3300 ] PLine
--250 3300 [ -100 3300 ] PLine
-300 4200 [ 400 4200 ] PLine
--900 1600 [ -800 1600 ] PLine
--800 1600 [ -800 1500 ] PLine
--800 1500 [ -500 1500 ] PLine
--500 1500 [ -500 1600 ] PLine
-1000 2650 [ 1000 2250 ] PLine
-1000 2250 [ 1200 2250 ] PLine
-400 1500 [ 400 2200 ] PLine
-400 2200 [ 400 2300 ] PLine
-400 2300 [ 700 2300 ] PLine
-700 2300 [ 700 2500 ] PLine
--450 2100 [ -450 1650 ] PLine
--450 1650 [ -400 1600 ] PLine
--500 3400 [ -500 3150 ] PLine
--500 3150 [ -650 3150 ] PLine
--650 3150 [ -650 2600 ] PLine
--100 2600 [ -100 2250 ] PLine
--1200 2500 [ -1200 2300 ] PLine
--300 2100 [ -250 2050 ] PLine
--250 2050 [ -250 1650 ] PLine
--250 1650 [ -300 1600 ] PLine
-800 1800 [ 800 2200 ] PLine
-600 900 [ 600 550 ] PLine
-600 550 [ 750 550 ] PLine
-700 2200 [ 700 1900 ] PLine
-600 1700 [ 600 2200 ] PLine
-1050 150 [ 1050 250 ] PLine
-1050 250 [ 500 250 ] PLine
-500 250 [ 500 1600 ] PLine
-0 4200 [ 0 4100 ] PLine
-900 4100 [ 900 3900 ] PLine
-800 3900 [ 800 3000 ] PLine
-600 3700 [ 600 3900 ] PLine
-600 4200 [ 600 4075 ] PLine
-600 4075 [ 450 4075 ] PLine
-450 4075 [ 450 2700 ] PLine
--400 2700 [ -400 2300 ] PLine
-300 3300 [ 350 3350 ] PLine
-350 3350 [ 350 3800 ] PLine
--1200 2800 [ -1000 2800 ] PLine
--1000 2800 [ -1000 3100 ] PLine
--900 3100 [ -850 3150 ] PLine
--850 3150 [ -850 3700 ] PLine
-50 150 [ 400 150 ] PLine
-400 150 [ 400 1300 ] PLine
--500 3100 [ -500 3000 ] PLine
--500 3000 [ -350 3000 ] PLine
--350 3000 [ -350 1300 ] PLine
--350 1300 [ -100 1300 ] PLine
-200 3700 [ 150 3750 ] PLine
-150 3750 [ 150 4425 ] PLine
-150 4425 [ 108 4479 ] PLine
-108 4479 [ 54 4593 ] PLine
--108 4479 [ 50 4600 ] PLine
-50 4600 [ 54 4593 ] PLine
--324 4479 [ -216 4479 ] PLine
--1100 1700 [ -1100 1450 ] PLine
--1050 1050 [ -1050 1800 ] PLine
--1050 1800 [ -1200 1800 ] PLine
-950 3524 [ 950 3200 ] PLine
-950 3700 [ 850 3700 ] PLine
-850 3700 [ 850 1200 ] PLine
--600 1200 [ -600 150 ] PLine
--600 150 [ -950 150 ] PLine
--540 4479 [ -550 4479 ] PLine
--550 4479 [ -550 3900 ] PLine
--350 3900 [ -350 3150 ] PLine
--350 3150 [ -300 3100 ] PLine
--432 4479 [ -450 4479 ] PLine
--450 4479 [ -450 3150 ] PLine
--450 3150 [ -382 3100 ] PLine
--382 3100 [ -400 3100 ] PLine
--800 4300 [ -800 3400 ] PLine
--750 4350 [ -750 3450 ] PLine
--750 3450 [ -700 3400 ] PLine
-400 3900 [ 400 3400 ] PLine
-1100 3400 [ 1100 3600 ] PLine
-1100 3600 [ 1026 3600 ] PLine
-1026 3600 [ 1026 3612 ] PLine
-50 SetLine
--100 3100 [ 0 3100 ] PLine
-0 3100 [ 0 2500 ] PLine
--200 2350 [ -200 1900 ] PLine
--200 1900 [ -100 1900 ] PLine
--200 1900 [ -200 1500 ] PLine
--200 1500 [ 0 1500 ] PLine
-0 1500 [ 200 1500 ] PLine
-200 1500 [ 200 1300 ] PLine
-800 4200 [ 800 4050 ] PLine
-800 4050 [ 700 4050 ] PLine
-700 4050 [ 700 3900 ] PLine
--750 450 [ -900 450 ] PLine
--900 450 [ -900 1300 ] PLine
--1200 1600 [ -1275 1600 ] PLine
--1275 1600 [ -1275 900 ] PLine
--900 900 [ -1275 900 ] PLine
--600 1900 [ -600 1750 ] PLine
--600 1750 [ -975 1750 ] PLine
--975 1750 [ -975 1300 ] PLine
--975 1300 [ -900 1300 ] PLine
--1200 2100 [ -1275 2100 ] PLine
--1275 2100 [ -1275 1600 ] PLine
--1200 3000 [ -1275 3000 ] PLine
--1275 3000 [ -1275 2100 ] PLine
--900 3400 [ -900 3525 ] PLine
--900 3525 [ -1275 3525 ] PLine
--1100 4000 [ -1275 4000 ] PLine
--1275 4000 [ -1275 3000 ] PLine
-75 3500 [ 75 2100 ] PLine
-75 2100 [ 0 2100 ] PLine
-75 2200 [ 200 2200 ] PLine
-0 4479 [ 0 4400 ] PLine
-0 4400 [ 75 4400 ] PLine
-75 4400 [ 75 3500 ] PLine
--300 3700 [ -300 3500 ] PLine
--300 3500 [ 75 3500 ] PLine
-900 2500 [ 900 2200 ] PLine
-1000 4000 [ 1000 4200 ] PLine
-0 0 55 /PRndPad SetFlash
--200 2350 Flash
--200 1750 Flash
-200 1400 Flash
-0 0 55 /PRndPad SetFlash
-300 1100 Flash
-0 0 55 /PRndPad SetFlash
-175 3300 Flash
-0 0 55 /PRndPad SetFlash
-1000 2650 Flash
-0 0 55 /PRndPad SetFlash
--450 2100 Flash
-0 0 55 /PRndPad SetFlash
--650 2600 Flash
--100 2600 Flash
--100 2250 Flash
-0 0 55 /PRndPad SetFlash
-800 1800 Flash
-0 0 55 /PRndPad SetFlash
-700 1900 Flash
-0 0 55 /PRndPad SetFlash
-600 1700 Flash
-0 0 55 /PRndPad SetFlash
-500 1600 Flash
-0 0 55 /PRndPad SetFlash
-0 4100 Flash
-900 4100 Flash
-0 0 55 /PRndPad SetFlash
-800 3000 Flash
-0 0 55 /PRndPad SetFlash
-600 3700 Flash
-0 0 55 /PRndPad SetFlash
-450 2700 Flash
--400 2700 Flash
--400 2300 Flash
-0 0 55 /PRndPad SetFlash
-350 3800 Flash
-0 0 55 /PRndPad SetFlash
--850 3700 Flash
-0 0 55 /PRndPad SetFlash
-400 1300 Flash
-0 0 55 /PRndPad SetFlash
--1050 1050 Flash
-0 0 55 /PRndPad SetFlash
-0 4475 Flash
-75 4000 Flash
-1000 4000 Flash
-0 0 55 /PRndPad SetFlash
-950 3200 Flash
-0 0 55 /PRndPad SetFlash
-850 1200 Flash
--600 1200 Flash
-0 0 55 /PRndPad SetFlash
--550 3900 Flash
--350 3900 Flash
-0 0 55 /PRndPad SetFlash
--800 4300 Flash
-0 0 55 /PRndPad SetFlash
--750 4350 Flash
-0 0 55 /PRndPad SetFlash
-400 3400 Flash
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/dd0124.lpr b/usr.sbin/xntpd/gadget/dd0124.lpr
deleted file mode 100644
index f6474d4..0000000
--- a/usr.sbin/xntpd/gadget/dd0124.lpr
+++ /dev/null
@@ -1,813 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:35:28 1992) show
-gsave
-Init
-8000 10500 Clipto
-4002 3763 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 0 [ -1350 4900 ] PLine
--1350 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 0 ] PLine
-1350 0 [ -1350 0 ] PLine
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-10 80 /M4 SetMkr
--1100 1450 Marker
--1100 1150 Marker
-300 3300 Marker
--100 3300 Marker
--100 3100 Marker
-300 3100 Marker
-300 3500 Marker
--100 3500 Marker
--400 3700 Marker
--1200 3700 Marker
--100 1300 Marker
--900 1300 Marker
--200 2800 Marker
-600 2800 Marker
--1200 2800 Marker
--400 2800 Marker
-0 2500 Marker
-0 2100 Marker
--1200 3400 Marker
--1200 3000 Marker
--900 2300 Marker
--1200 2300 Marker
--1200 2500 Marker
--900 2500 Marker
-800 2800 Marker
-1100 2800 Marker
-1250 1900 Marker
-450 1900 Marker
--100 900 Marker
--1200 900 Marker
--700 4000 Marker
--1100 4000 Marker
-1100 3000 Marker
-700 3000 Marker
--300 3700 Marker
-0 3700 Marker
-10 80 /M7 SetMkr
-100 900 Marker
-1 113 913 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char
-600 900 Marker
-1 613 913 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char
-700 3700 Marker
-1 713 3713 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char
-200 3700 Marker
-1 213 3713 [ [ 25 52 0 0 ] [ 0 52 25 52 ] [ 0 0 25 0 ] ] Char
-10 80 /M4 SetMkr
--750 550 Marker
--750 450 Marker
-0 550 Marker
-0 450 Marker
-750 550 Marker
-750 450 Marker
--648 4479 Marker
--540 4479 Marker
--432 4479 Marker
--324 4479 Marker
--216 4479 Marker
--108 4479 Marker
-0 4479 Marker
-108 4479 Marker
-216 4479 Marker
-324 4479 Marker
-432 4479 Marker
-540 4479 Marker
-648 4479 Marker
--594 4593 Marker
--486 4593 Marker
--378 4593 Marker
--270 4593 Marker
--162 4593 Marker
--54 4593 Marker
-54 4593 Marker
-162 4593 Marker
-270 4593 Marker
-378 4593 Marker
-486 4593 Marker
-594 4593 Marker
-10 80 /M7 SetMkr
-940 4536 Marker
-1 953 4549 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char
--940 4536 Marker
-1 -927 4549 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char
-10 80 /M4 SetMkr
-950 150 Marker
-1050 150 Marker
--50 150 Marker
-50 150 Marker
--1050 150 Marker
--950 150 Marker
-10 80 /M7 SetMkr
-950 3524 Marker
-1 963 3537 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char
-1026 3612 Marker
-1 1039 3625 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char
-950 3700 Marker
-1 963 3713 [ [ 0 52 25 0 ] [ 25 52 0 0 ] ] Char
-10 80 /M7 SetMkr
--1200 1600 Marker
-1 -1187 1613 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
--1100 1700 Marker
-1 -1087 1713 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
--1200 1800 Marker
-1 -1187 1813 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
-10 80 /M4 SetMkr
-300 1700 Marker
--100 1700 Marker
-200 1300 Marker
-600 1300 Marker
--700 2300 Marker
--300 2300 Marker
--700 4200 Marker
--1100 4200 Marker
-1100 3200 Marker
-700 3200 Marker
--700 2500 Marker
--300 2500 Marker
--700 2100 Marker
--300 2100 Marker
--800 2100 Marker
--1200 2100 Marker
-600 1100 Marker
-200 1100 Marker
-10 80 /M7 SetMkr
-1200 2450 Marker
-1 1213 2463 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
-1100 2350 Marker
-1 1113 2363 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
-1200 2250 Marker
-1 1213 2263 [ [ 0 52 9 0 ] [ 18 52 9 0 ] [ 18 52 27 0 ] [ 36 52 27 0 ] ] Char
-10 80 /M4 SetMkr
--100 1900 Marker
-300 1900 Marker
-0 1500 Marker
-400 1500 Marker
--900 1600 Marker
--800 1600 Marker
--700 1600 Marker
--600 1600 Marker
--500 1600 Marker
--400 1600 Marker
--300 1600 Marker
--300 1900 Marker
--400 1900 Marker
--500 1900 Marker
--600 1900 Marker
--700 1900 Marker
--800 1900 Marker
--900 1900 Marker
-200 2200 Marker
-300 2200 Marker
-400 2200 Marker
-500 2200 Marker
-600 2200 Marker
-700 2200 Marker
-800 2200 Marker
-900 2200 Marker
-900 2500 Marker
-800 2500 Marker
-700 2500 Marker
-600 2500 Marker
-500 2500 Marker
-400 2500 Marker
-300 2500 Marker
-200 2500 Marker
-200 3900 Marker
-300 3900 Marker
-400 3900 Marker
-500 3900 Marker
-600 3900 Marker
-700 3900 Marker
-800 3900 Marker
-900 3900 Marker
-1000 3900 Marker
-1100 3900 Marker
-1100 4200 Marker
-1000 4200 Marker
-900 4200 Marker
-800 4200 Marker
-700 4200 Marker
-600 4200 Marker
-500 4200 Marker
-400 4200 Marker
-300 4200 Marker
-200 4200 Marker
--1000 3100 Marker
--900 3100 Marker
--800 3100 Marker
--700 3100 Marker
--600 3100 Marker
--500 3100 Marker
--400 3100 Marker
--300 3100 Marker
--300 3400 Marker
--400 3400 Marker
--500 3400 Marker
--600 3400 Marker
--700 3400 Marker
--800 3400 Marker
--900 3400 Marker
--1000 3400 Marker
-900 800 Marker
-1100 800 Marker
-1000 800 Marker
-10 80 /M7 SetMkr
-1000 1550 Marker
-1 1013 1563 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char
-10 80 /M4 SetMkr
-0 4000 Marker
-0 4200 Marker
-10 80 /M7 SetMkr
--1100 450 Marker
-1 -1087 463 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char
-1100 450 Marker
-1 1113 463 [ [ 0 52 14 27 14 0 ] [ 29 52 14 27 ] ] Char
-10 80 /M4 SetMkr
-1100 3400 Marker
-700 3400 Marker
-10 80 /M4 SetMkr
--200 2350 Marker
--200 1750 Marker
-200 1400 Marker
-10 80 /M4 SetMkr
-300 1100 Marker
-10 80 /M4 SetMkr
-175 3300 Marker
-10 80 /M4 SetMkr
-1000 2650 Marker
-10 80 /M4 SetMkr
--450 2100 Marker
-10 80 /M4 SetMkr
--650 2600 Marker
--100 2600 Marker
--100 2250 Marker
-10 80 /M4 SetMkr
-800 1800 Marker
-10 80 /M4 SetMkr
-700 1900 Marker
-10 80 /M4 SetMkr
-600 1700 Marker
-10 80 /M4 SetMkr
-500 1600 Marker
-10 80 /M4 SetMkr
-0 4100 Marker
-900 4100 Marker
-10 80 /M4 SetMkr
-800 3000 Marker
-10 80 /M4 SetMkr
-600 3700 Marker
-10 80 /M4 SetMkr
-450 2700 Marker
--400 2700 Marker
--400 2300 Marker
-10 80 /M4 SetMkr
-350 3800 Marker
-10 80 /M4 SetMkr
--850 3700 Marker
-10 80 /M4 SetMkr
-400 1300 Marker
-10 80 /M4 SetMkr
--1050 1050 Marker
-10 80 /M4 SetMkr
-0 4475 Marker
-75 4000 Marker
-1000 4000 Marker
-10 80 /M4 SetMkr
-950 3200 Marker
-10 80 /M4 SetMkr
-850 1200 Marker
--600 1200 Marker
-10 80 /M4 SetMkr
--550 3900 Marker
--350 3900 Marker
-10 80 /M4 SetMkr
--800 4300 Marker
-10 80 /M4 SetMkr
--750 4350 Marker
-10 80 /M4 SetMkr
-400 3400 Marker
-10 SetLine
--1355 -485 [ -275 -485 ] PLine
--1355 -725 [ -275 -725 ] PLine
--1355 -965 [ -275 -965 ] PLine
--1355 -1205 [ -275 -1205 ] PLine
--1355 -1445 [ -275 -1445 ] PLine
--1355 -1685 [ -275 -1685 ] PLine
--1355 -1925 [ -275 -1925 ] PLine
--1355 -485 [ -1355 -1925 ] PLine
--995 -485 [ -995 -1925 ] PLine
--635 -485 [ -635 -1925 ] PLine
--275 -485 [ -275 -1925 ] PLine
-10 SetText2
-0 -1295 -665 [ [ 38 67 32 75 24 78 13 78 5 75 0 67 0 60 2 52 5 48 10 45 27 37 32 33 35 30 38 22 38 11 32 3 24 0 13 0 5 3 0 11 ] ] Char
-0 -1233 -665 [ [ 0 78 0 0 ] ] Char
-0 -1209 -665 [ [ 38 78 0 0 ] [ 0 78 38 78 ] [ 0 0 38 0 ] ] Char
-0 -1147 -665 [ [ 0 78 0 0 ] [ 0 78 35 78 ] [ 0 41 21 41 ] [ 0 0 35 0 ] ] Char
-10 SetText2
-0 -873 -665 [ [ 16 78 10 75 5 67 2 60 0 48 0 30 2 18 5 11 10 3 16 0 27 0 32 3 38 11 40 18 43 30 43 48 40 60 38 67 32 75 27 78 16 78 ] [ 24 15 40 -7 ] ] Char
-0 -805 -665 [ [ 19 78 19 0 ] [ 0 78 38 78 ] ] Char
-0 -743 -665 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char
-10 SetText2
-0 -575 -665 [ [ 38 67 32 75 24 78 13 78 5 75 0 67 0 60 2 52 5 48 10 45 27 37 32 33 35 30 38 22 38 11 32 3 24 0 13 0 5 3 0 11 ] ] Char
-0 -513 -665 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char
-0 -445 -665 [ [ 0 78 0 0 ] [ 0 78 21 0 ] [ 43 78 21 0 ] [ 43 78 43 0 ] ] Char
-10 SetText2
-0 -1233 -905 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-0 -1171 -905 [ [ 38 78 10 0 ] [ 0 78 38 78 ] ] Char
-10 SetText2
-0 -873 -905 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char
-0 -811 -905 [ [ 16 78 8 75 2 63 0 45 0 33 2 15 8 3 16 0 21 0 30 3 35 15 38 33 38 45 35 63 30 75 21 78 16 78 ] ] Char
-0 -749 -905 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char
-10 120 /M4 SetMkr
--455 -845 Marker
-10 SetText2
-0 -1233 -1145 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char
-0 -1168 -1145 [ [ 0 63 5 67 13 78 13 0 ] ] Char
-10 SetText2
-0 -749 -1145 [ [ 32 67 30 75 21 78 16 78 8 75 2 63 0 45 0 26 2 11 8 3 16 0 19 0 27 3 32 11 35 22 35 26 32 37 27 45 19 48 16 48 8 45 2 37 0 26 ] ] Char
-10 SetText2
-0 -515 -1145 [ [ 0 78 13 0 ] [ 27 78 13 0 ] [ 27 78 40 0 ] [ 54 78 40 0 ] ] Char
-10 SetText2
-0 -1233 -1385 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-0 -1171 -1385 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char
-10 SetText2
-0 -749 -1385 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-10 SetText2
-0 -515 -1385 [ [ 0 78 38 0 ] [ 38 78 0 0 ] ] Char
-10 SetText2
-0 -1295 -1625 [ [ 0 63 5 67 13 78 13 0 ] ] Char
-0 -1257 -1625 [ [ 2 60 2 63 5 71 8 75 13 78 24 78 30 75 32 71 35 63 35 56 32 48 27 37 0 0 38 0 ] ] Char
-0 -1195 -1625 [ [ 16 78 8 75 2 63 0 45 0 33 2 15 8 3 16 0 21 0 30 3 35 15 38 33 38 45 35 63 30 75 21 78 16 78 ] ] Char
-10 SetText2
-0 -749 -1625 [ [ 35 78 8 78 5 45 8 48 16 52 24 52 32 48 38 41 40 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-10 SetText2
-0 -515 -1625 [ [ 0 78 21 41 21 0 ] [ 43 78 21 41 ] ] Char
-10 SetText2
-0 -1233 -1865 [ [ 5 78 35 78 19 48 27 48 32 45 35 41 38 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-0 -1171 -1865 [ [ 35 78 8 78 5 45 8 48 16 52 24 52 32 48 38 41 40 30 38 22 35 11 30 3 21 0 13 0 5 3 2 7 0 15 ] ] Char
-10 SetText2
-0 -749 -1865 [ [ 27 78 0 26 40 26 ] [ 27 78 27 0 ] ] Char
-10 SetText2
-0 -515 -1865 [ [ 38 78 0 0 ] [ 0 78 38 78 ] [ 0 0 38 0 ] ] Char
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/gadget.lst b/usr.sbin/xntpd/gadget/gadget.lst
deleted file mode 100644
index a10aff3..0000000
--- a/usr.sbin/xntpd/gadget/gadget.lst
+++ /dev/null
@@ -1,332 +0,0 @@
-
-
-
----------------------------------------------------------------------------
- DESIGN RULE CHECK Tue Sep 15 01:23:56 1992 PAGE 1
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-
-FLOATING INPUTS:
- NONE FOUND
-
-NETS WITH NO DRIVING SOURCE:
- NONE FOUND
-
-NETS WITH MULTIPLE DRIVING SOURCES:
- NONE FOUND
-
-NETS WITH MORE THAN ONE LABEL:
- NONE FOUND
-
-NETS WITH A SINGLE PIN:
- NONE FOUND
-
-REFERENCE DESIGNATORS USED TWO OR MORE TIMES:
- NONE FOUND
-
-
-
----------------------------------------------------------------------------
- REPORT REF. DES. Tue Sep 15 01:23:56 1992 PAGE 1
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-C1 DCAP A/01
-C10 DCAP A/01
-C11 DCAP A/01
-C12 DCAPE A/01
-C13 DCAP A/01
-C14 DCAP A/01
-C15 DCAP A/01
-C16 DCAPE A/01
-C17 DCAPE A/01
-C18 DCAPE A/01
-C2 DCAP A/01
-C3 DCAPE A/01
-C4 DCAP A/01
-C5 DCAP A/01
-C6 DCAP A/01
-C7 DCAP A/01
-C8 DCAP A/01
-C9 DCAPE A/01
-D1 DDIODE A/01
-D2 DDIODE A/01
-J1 DB25 A/01
-J2 DBNC A/01
-J3 DBNC A/01
-J4 DBNC A/01
-LED1 DLED A/01
-LED2 DLED A/01
-LED3 DLED A/01
-Q1 DPNP A/01
-R1 DRES A/01
-R10 DRES A/01
-R11 DRES A/01
-R12 DRES A/01
-R13 DRES A/01
-R14 DRES A/01
-R2 DRES A/01
-R3 DRES A/01
-R4 DRES A/01
-R5 DRES A/01
-R6 DRES A/01
-R7 DPOT A/01
-R8 DPOT A/01
-R9 DRES A/01
-U1 ICL232 A/01
-U2 MC145443 A/01
-U3A 74LS123 A/01
-U3B 74LS123 B/01
-U4A LM324 A/01
-U4B LM324 B/01
-
-
-
----------------------------------------------------------------------------
- REPORT REF. DES. Tue Sep 15 01:23:57 1992 PAGE 2
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-U5 LM7805 A/01
-X1 DXTAL A/01
-
-
-
----------------------------------------------------------------------------
- REPORT LABEL Tue Sep 15 01:23:57 1992 PAGE 1
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-+12 01
-+5 01
-AGND 01
-CGND 01
-GND 01
-VCC 01
-
-
-
----------------------------------------------------------------------------
- WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 1
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-1 +12 C18-T D1-C D2-C
- U5-1
-
-2 +5 C1-T C13-T C2-T
- C3-B C7-T R11-T
- R12-L R2-T R7-1
- R7-2 R9-L U1-16
- U2-13 U2-14 U2-6
- U3A-16 U3B-16 U5-3
-
-3 01007018 J2-1 R8-1
-
-4 01007039 J3-1 R13-T U3A-2
-
-5 01011019 C15-L R8-2
-
-6 01013019 C15-R R3-T U4A-3
-
-7 01013024 C5-T C6-B C7-B
- C8-B R3-B U2-18
- U2-19
-
-8 01015020 U4A-1 U4A-2 U4B-5
-
-9 01017033 C14-T R7-3 U3A-15
-
-10 01019043 R11-B U3A-3 U3B-11
-
-11 01020035 C14-B U3A-14
-
-12 01022016 C11-L R6-L U4B-6
-
-13 01022039 U3A-13 U3B-10
-
-14 01022040 U1-11 U3A-4
-
-15 01024023 C10-L C11-R R5-T
-
-16 01027016 C10-R R4-L R6-R
- U4B-7
-
-17 01029043 C17-T R9-R U3B-7
-
-18 01030057 D2-A J4-1
-
-19 01031045 C17-B U3B-6
-
-20 01033049 R10-L U3B-5
-
-21 01036049 LED3-A R10-R
-
-
-
-
----------------------------------------------------------------------------
- WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 2
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-22 01037023 U2-9 X1-L
-
-23 01038014 Q1-E R2-B
-
-24 01038017 LED1-A Q1-C
-
-25 01040015 Q1-B R14-L
-
-26 01041023 U2-8 X1-R
-
-27 01042022 C8-T U2-7
-
-28 01045015 C4-B U2-4
-
-29 01045018 R14-R U2-3
-
-30 01045020 U1-10 U2-5
-
-31 01046010 R1-L R4-R U2-16
-
-32 01046025 C6-T U2-10
-
-33 01047042 C9-T U1-1
-
-34 01047044 C9-B U1-3
-
-35 01048033 J1-2 U1-8
-
-36 01049034 J1-11 U1-13
-
-37 01051047 C3-T U1-2
-
-38 01052057 LED2-A R12-R
-
-39 01054021 R1-R U2-15
-
-40 01054025 U1-9 U2-11
-
-41 01054047 C16-T U1-6
-
-42 01055053 D1-A J1-20 J1-6
- J1-8
-
-43 01057040 J1-12 U1-14
-
-44 01057041 J1-3 U1-7
-
-45 01057042 C12-T U1-4
-
-46 01057044 C12-B U1-5
-
-
-
-
----------------------------------------------------------------------------
- WIRE LIST Tue Sep 15 01:23:57 1992 PAGE 3
- 1-PPS/RS232 CONVERTER 100-0001-001 REV 1A 26 JUNE 1992
----------------------------------------------------------------------------
-
-
-47 01068042 J1-4 J1-5
-
-48 AGND C4-T C5-B LED1-C
- R5-B R8-3 U2-2
- U4A-11 U4B-11
-
-49 CGND J2-2 J3-2 J4-2
-
-50 GND C1-B C13-B C16-B
- C18-B C2-B J1-1
- J1-7 LED2-C LED3-C
- R13-B U1-15 U2-12
- U3A-1 U3A-8 U3B-8
- U3B-9 U5-2
-
-51 VCC U4A-4 U4B-4
-
-
-
-
----------------------------------------------------------------------------------------------------------------
-BILL OF MATERIALS XYZ COMPUTER CORP. LORAN 150-0001-001 REV 1A Tue Sep 15 01:23:57 1992 PAGE 1
----------------------------------------------------------------------------------------------------------------
-
-
- ITEM QUAN. PART NUMBER DESCRIPTION REF. DES.
-
- 1 7 CAPACITOR,100N, C1,C13,C2,C5,C6
- C7,C8
-
- 2 1 CAPACITOR,100U C18
-
- 3 5 CAPACITOR,10N, C10,C11,C14,C15
- C4
-
- 4 5 CAPACITOR,22U C12,C16,C17,C3
- C9
-
- 5 1 CRYSTAL, 3.59MHZ X1
-
- 6 2 DIODE, 1N4002 D1,D2
-
- 7 1 LIGHT EMITTING DIODE, AMBER LED3
-
- 8 1 LIGHT EMITTING DIODE, GRN LED1
-
- 9 1 LIGHT EMITTING DIODE, RED LED2
-
- 10 1 PNP TRANSISTOR, 2N2907 Q1
-
- 11 1 POTENTIOMETER, 10K R8
-
- 12 1 POTENTIOMETER, 20K R7
-
- 13 2 RESISTOR,100K, R13,R3
-
- 14 1 RESISTOR,10K, R1
-
- 15 1 RESISTOR,1MEG, R4
-
- 16 2 RESISTOR,3.3K, R11,R14
-
- 17 3 RESISTOR,330, R10,R12,R2
-
- 18 1 RESISTOR,33K, R9
-
- 19 1 RESISTOR,680, R5
-
- 20 1 RESISTOR,68K, R6
-
- 21 3 010-0002-001 CONNECTOR, BNC CHASSIS J2,J3,J4
-
- 22 1 010-DB25-001 DB25 - 25-PIN CONNECTOR J1
-
- 23 2 300-0123-001 74LS123 - LS TTL RETRIG MONOSTABLE MULTIVIBRATORS U3A,U3B
-
-
-
----------------------------------------------------------------------------------------------------------------
-BILL OF MATERIALS XYZ COMPUTER CORP. LORAN 150-0001-001 REV 1A Tue Sep 15 01:23:57 1992 PAGE 2
----------------------------------------------------------------------------------------------------------------
-
-
- ITEM QUAN. PART NUMBER DESCRIPTION REF. DES.
-
- 24 2 302-0324-001 LM324A - LOW POWER QUAD OP-AMP U4A,U4B
-
- 25 1 302-7805-001 LM7805C - VOLTAGE REGULATOR, +5VDC U5
-
- 26 1 306-5443-001 MC145443 - 300-BPS MODEM U2
-
- 27 1 310-0232-001 ICL232 - POWERED RS232 TRANSMITTER/RECEIVER U1
-
diff --git a/usr.sbin/xntpd/gadget/gadget.s01 b/usr.sbin/xntpd/gadget/gadget.s01
deleted file mode 100644
index 314f7ba..0000000
--- a/usr.sbin/xntpd/gadget/gadget.s01
+++ /dev/null
@@ -1,2277 +0,0 @@
-%!PS-Adobe-23.0 EPSF-1.2
-%%Creator: SCHEMA
-%%BoundingBox: 0 0 1343.0 1023.0
-/scl 511804.0 0.072 mul 65536.0 div def
-scl scl scale
-
-% Landscape Orientation
-/xoff 256.0 65536.0 mul 511804.0 div def
-/yoff 1343.0 -256.0 65536.0 mul 511804.0 div sub def
-xoff yoff translate
--90 rotate
-
-0 setgray
-
-/a { 1 setlinewidth newpath arcn stroke } def
-/fa { 3 setlinewidth newpath arcn stroke } def
-/c { 1 setlinewidth newpath 0 360 arc stroke } def
-/fc { 1 setlinewidth newpath 0 360 arc fill } def
-/l { 1 setlinewidth newpath moveto lineto stroke } def
-/t { 3 setlinewidth newpath moveto lineto stroke } def
-/ds { [4 4] 0 setdash 1 setlinewidth
- newpath moveto lineto stroke [] 0 setdash } def
-/dt { [2 2] 0 setdash 1 setlinewidth
- newpath moveto lineto stroke [] 0 setdash } def
-
-8 7 8 1015 t
-1328 7 912 7 t
-1336 1015 8 1015 t
-1336 7 1336 1015 t
-912 7 8 7 t
-1336 7 1328 7 t
-
-/reencsmalldict 12 dict def %% Schema font definitions
-/ReEncodeSmall
- { reencsmalldict begin
- /newcodesandnames exch def
- /newfontname exch def
- /basefontname exch def
- /basefontdict basefontname findfont def
- /newfont basefontdict maxlength dict def
- basefontdict
- { exch dup /FID ne
- { dup /Encoding eq
- { exch dup length array copy newfont 3 1 roll put }
- { exch newfont 3 1 roll put }
- ifelse
- }
- { pop pop }
- ifelse
- } forall
- newfont /FontName newfontname put
- newcodesandnames aload pop
- newcodesandnames length 2 idiv
- { newfont /Encoding get 3 1 roll put }
- repeat
- newfontname newfont definefont pop
- end
- } def
-/schfontvec [ 8#200 /Ccedilla 8#201 /udieresis 8#202 /eacute 8#203 /acircumflex
-8#204 /adieresis 8#205 /agrave 8#207 /ccedilla 8#210 /ecircumflex
-8#211 /edieresis 8#212 /egrave 8#213 /idieresis 8#214 /icircumflex
-8#215 /igrave 8#216 /Adieresis 8#220 /Eacute 8#223 /ocircumflex
-8#224 /odieresis 8#225 /ograve 8#226 /ucircumflex 8#227 /ugrave
-8#230 /ydieresis 8#231 /Odieresis 8#232 /Udieresis 8#240 /aacute 8#241 /iacute
-8#242 /oacute 8#243 /uacute 8#244 /ntilde 8#245 /Ntilde ] def
-/schsymbvec [ 8#341 /beta 8#346 /mu 8#352 /Omega ] def
-/Courier-Bold /Schfont schfontvec ReEncodeSmall
-/Symbol /Schsymb schsymbvec ReEncodeSmall
-
-
-/htdict 4 dict def %% HTEXT - variable spacing horizontal text routine
-/ht
- { htdict begin
- /textstring exch def
- /xskip exch def
- 0 text_height neg rmoveto
- /Schfont findfont text_height scalefont setfont
- textstring
- {
- /charcode exch def
- /thechar ( ) dup 0 charcode put def
- gsave
- charcode 8#245 gt
- { /Schsymb findfont text_height scalefont setfont
- thechar show
- /Schfont findfont text_height scalefont setfont }
- { thechar show }
- ifelse
- grestore
- currentpoint moveto
- xskip 0 rmoveto
- } forall
- end
- } def
-
-/text_height 12 def
-/text_width 6 def
-1304 27 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-1272 27 moveto 9 (OF) ht
-/text_height 12 def
-/text_width 6 def
-1248 27 moveto 9 (1) ht
-/text_height 12 def
-/text_width 6 def
-1192 27 moveto 9 (SHEET) ht
-1176 31 1176 7 l
-1336 55 992 55 l
-1336 31 992 31 l
-992 7 992 87 t
-1336 87 992 87 t
-/text_height 20 def
-/text_width 9 def
-1032 87 moveto 13 (1-PPS/RS232 Converter) ht
-/text_height 12 def
-/text_width 6 def
-1040 27 moveto 9 (26 June 1992) ht
-1176 55 1176 31 l
-/text_height 12 def
-/text_width 6 def
-1032 51 moveto 9 (100-0001-001) ht
-/text_height 12 def
-/text_width 6 def
-1216 51 moveto 9 (REV) ht
-/text_height 12 def
-/text_width 6 def
-1264 51 moveto 9 (1A) ht
-584 54 568 54 l
-576 54 576 63 l
-581 51 571 51 l
-578 48 574 48 l
-/b { newpath 0.5 0 360 arc fill } def
-576 45 b
-760 54 744 54 l
-752 54 752 63 l
-757 51 747 51 l
-754 48 750 48 l
-752 45 b
-752 103 752 95 l
-752 103 2 fc
-288 487 288 455 l
-320 487 288 487 l
-288 487 2 fc
-248 383 248 367 l
-456 103 8 c
-456 71 456 95 l
-/text_height 12 def
-/text_width 6 def
-441 129 moveto 9 (J4) ht
-456 105 b
-457 105 b
-455 104 b
-456 104 b
-457 104 b
-458 104 b
-455 103 b
-456 103 b
-457 103 b
-458 103 b
-456 102 b
-457 102 b
-480 103 456 103 l
-583 81 569 81 l
-576 59 18 111 69 a
-576 81 576 95 l
-576 63 576 77 l
-/text_height 12 def
-/text_width 6 def
-589 81 moveto 9 (100U) ht
-/text_height 12 def
-/text_width 6 def
-590 94 moveto 9 (C18) ht
-/text_height 12 def
-/text_width 6 def
-561 96 moveto 9 (+) ht
-/text_height 12 def
-/text_width 6 def
-765 94 moveto 9 (C1) ht
-/text_height 12 def
-/text_width 6 def
-765 81 moveto 9 (100N) ht
-759 81 745 81 l
-752 59 18 111 69 a
-752 81 752 95 l
-752 63 752 77 l
-509 109 b
-509 108 b
-510 108 b
-515 108 b
-509 107 b
-510 107 b
-511 107 b
-515 107 b
-509 106 b
-510 106 b
-511 106 b
-512 106 b
-515 106 b
-509 105 b
-510 105 b
-511 105 b
-512 105 b
-513 105 b
-515 105 b
-509 104 b
-510 104 b
-511 104 b
-512 104 b
-513 104 b
-514 104 b
-515 104 b
-509 103 b
-510 103 b
-511 103 b
-512 103 b
-513 103 b
-514 103 b
-515 103 b
-509 102 b
-510 102 b
-511 102 b
-512 102 b
-513 102 b
-514 102 b
-515 102 b
-509 101 b
-510 101 b
-511 101 b
-512 101 b
-513 101 b
-515 101 b
-509 100 b
-510 100 b
-511 100 b
-512 100 b
-515 100 b
-509 99 b
-510 99 b
-511 99 b
-515 99 b
-509 98 b
-510 98 b
-515 98 b
-509 97 b
-516 103 b
-510 103 496 103 l
-528 103 517 103 l
-/text_height 12 def
-/text_width 6 def
-496 99 moveto 9 (1N4002) ht
-/text_height 12 def
-/text_width 6 def
-497 124 moveto 9 (D2) ht
-576 103 576 95 l
-560 103 528 103 l
-560 103 2 fc
-592 103 576 103 l
-576 103 560 103 l
-576 103 2 fc
-496 103 480 103 l
-240 695 240 671 l
-328 671 240 671 l
-328 703 328 671 l
-240 711 208 711 l
-208 711 208 687 l
-384 703 328 703 l
-136 735 112 735 l
-392 767 352 767 l
-384 687 352 687 l
-408 647 408 631 l
-208 676 208 687 l
-/text_height 12 def
-/text_width 6 def
-218 677 moveto 9 (R3) ht
-/text_height 12 def
-/text_width 6 def
-218 664 moveto 9 (100K) ht
-213 673 208 675 l
-213 657 204 653 l
-213 657 204 661 l
-213 665 204 669 l
-213 665 204 661 l
-208 649 208 651 l
-208 652 204 653 l
-208 639 208 650 l
-213 673 204 669 l
-208 675 208 677 l
-208 650 208 652 l
-208 711 2 fc
-328 703 2 fc
-352 687 352 647 l
-352 767 352 687 l
-352 687 2 fc
-432 647 408 647 l
-408 647 384 647 l
-408 647 2 fc
-904 751 872 751 l
-904 735 872 735 l
-968 687 872 687 l
-968 703 968 687 l
-/text_height 12 def
-/text_width 6 def
-616 695 moveto 9 (X1) ht
-/text_height 12 def
-/text_width 6 def
-616 683 moveto 9 (3.59MHZ) ht
-628 645 628 665 l
-637 645 637 665 l
-634 667 631 667 l
-634 643 634 667 l
-634 643 631 643 l
-631 643 631 667 l
-628 655 600 655 l
-664 655 637 655 l
-920 607 904 607 l
-920 655 920 647 l
-744 575 744 559 l
-752 623 744 623 l
-744 623 744 607 l
-752 671 696 671 l
-752 655 664 655 l
-600 655 600 639 l
-752 639 600 639 l
-680 575 680 559 l
-680 671 680 607 l
-752 703 728 703 l
-712 815 712 751 l
-752 751 712 751 l
-728 783 728 719 l
-752 719 728 719 l
-696 671 680 671 l
-888 863 736 863 l
-688 863 480 863 l
-/text_height 12 def
-/text_width 6 def
-590 855 moveto 9 (+5) ht
-744 559 2 fc
-904 607 2 fc
-920 655 872 655 l
-920 655 2 fc
-920 703 888 703 l
-888 703 872 703 l
-888 703 2 fc
-728 815 712 815 l
-712 815 696 815 l
-712 815 2 fc
-888 863 888 703 l
-904 607 904 559 l
-904 735 904 607 l
-904 751 904 735 l
-904 735 2 fc
-248 399 128 399 l
-128 399 2 fc
-136 342 120 342 l
-128 342 128 351 l
-133 339 123 339 l
-130 336 126 336 l
-128 333 b
-256 358 240 358 l
-248 358 248 367 l
-253 355 243 355 l
-250 352 246 352 l
-248 349 b
-560 175 560 103 l
-464 327 464 295 l
-496 327 464 327 l
-880 94 864 94 l
-872 94 872 103 l
-877 91 867 91 l
-874 88 870 88 l
-872 85 b
-872 103 864 103 l
-424 223 424 207 l
-416 327 400 327 l
-400 327 400 303 l
-400 255 400 167 l
-480 167 400 167 l
-432 198 416 198 l
-424 198 424 207 l
-429 195 419 195 l
-426 192 422 192 l
-424 189 b
-464 327 2 fc
-480 767 440 767 l
-480 767 480 695 l
-480 863 480 767 l
-480 767 2 fc
-480 695 480 647 l
-480 647 464 647 l
-480 695 2 fc
-88 735 8 c
-88 703 88 727 l
-/text_height 12 def
-/text_width 6 def
-73 761 moveto 9 (J2) ht
-88 737 b
-89 737 b
-87 736 b
-88 736 b
-89 736 b
-90 736 b
-87 735 b
-88 735 b
-89 735 b
-90 735 b
-88 734 b
-89 734 b
-112 735 88 735 l
-/text_height 12 def
-/text_width 6 def
-333 486 moveto 9 (C14) ht
-/text_height 12 def
-/text_width 6 def
-333 473 moveto 9 (10N) ht
-327 473 313 473 l
-320 451 18 111 69 a
-320 473 320 487 l
-320 455 320 469 l
-698 863 688 863 l
-736 863 726 863 l
-/text_height 12 def
-/text_width 6 def
-691 883 moveto 9 (1MEG) ht
-/text_height 12 def
-/text_width 6 def
-691 895 moveto 9 (R4) ht
-702 868 700 863 l
-706 859 702 868 l
-710 868 706 859 l
-714 859 710 868 l
-718 868 714 859 l
-722 859 718 868 l
-724 863 722 859 l
-726 863 724 863 l
-700 863 699 863 l
-930 703 920 703 l
-968 703 958 703 l
-/text_height 12 def
-/text_width 6 def
-923 723 moveto 9 (10K) ht
-/text_height 12 def
-/text_width 6 def
-923 735 moveto 9 (R1) ht
-934 708 932 703 l
-938 699 934 708 l
-942 708 938 699 l
-946 699 942 708 l
-950 708 946 699 l
-954 699 950 708 l
-956 703 954 699 l
-958 703 956 703 l
-932 703 931 703 l
-784 103 768 103 l
-768 103 752 103 l
-288 487 272 487 l
-480 695 472 695 l
-920 607 920 599 l
-920 615 920 607 l
-920 607 2 fc
-792 399 776 399 l
-792 383 360 383 l
-728 703 728 367 l
-792 367 728 367 l
-400 292 400 303 l
-/text_height 12 def
-/text_width 6 def
-410 293 moveto 9 (R11) ht
-/text_height 12 def
-/text_width 6 def
-410 280 moveto 9 (3.3K) ht
-405 289 400 291 l
-405 273 396 269 l
-405 273 396 277 l
-405 281 396 285 l
-405 281 396 277 l
-400 265 400 267 l
-400 268 396 269 l
-400 255 400 266 l
-405 289 396 285 l
-400 291 400 293 l
-400 266 400 268 l
-128 388 128 399 l
-/text_height 12 def
-/text_width 6 def
-138 389 moveto 9 (R13) ht
-/text_height 12 def
-/text_width 6 def
-138 376 moveto 9 (100K) ht
-133 385 128 387 l
-133 369 124 365 l
-133 369 124 373 l
-133 377 124 381 l
-133 377 124 373 l
-128 361 128 363 l
-128 364 124 365 l
-128 351 128 362 l
-133 385 124 381 l
-128 387 128 389 l
-128 362 128 364 l
-88 399 8 c
-88 367 88 391 l
-/text_height 12 def
-/text_width 6 def
-73 425 moveto 9 (J3) ht
-88 401 b
-89 401 b
-87 400 b
-88 400 b
-89 400 b
-90 400 b
-87 399 b
-88 399 b
-89 399 b
-90 399 b
-88 398 b
-89 398 b
-112 399 88 399 l
-128 399 112 399 l
-376 399 360 399 l
-376 399 376 239 l
-424 239 376 239 l
-608 836 608 847 l
-/text_height 12 def
-/text_width 6 def
-618 837 moveto 9 (R2) ht
-/text_height 12 def
-/text_width 6 def
-618 824 moveto 9 (330) ht
-613 833 608 835 l
-613 817 604 813 l
-613 817 604 821 l
-613 825 604 829 l
-613 825 604 821 l
-608 809 608 811 l
-608 812 604 813 l
-608 799 608 810 l
-613 833 604 829 l
-608 835 608 837 l
-608 810 608 812 l
-224 487 208 487 l
-400 327 360 327 l
-224 487 2 fc
-400 327 2 fc
-/text_height 12 def
-/text_width 6 def
-190 495 moveto 9 (+5) ht
-/text_height 12 def
-/text_width 6 def
-342 335 moveto 9 (+5) ht
-944 655 920 655 l
-680 559 208 559 l
-744 559 680 559 l
-208 639 208 559 l
-680 559 2 fc
-/text_height 12 def
-/text_width 6 def
-947 663 moveto 9 (+5) ht
-768 127 768 103 l
-768 103 2 fc
-
-/vtdict 4 dict def %% VTEXT - variable spacing verticle text routine
-/vt
- { vtdict begin
- /thestring exch def
- /yskip exch def
- 0 text_height neg rmoveto
- /Schfont findfont text_height scalefont setfont
- thestring
- {
- /charcode exch def
- /thechar ( ) dup 0 charcode put def
- gsave
- charcode 8#245 gt
- { /Schsymb findfont text_height scalefont setfont
- thechar show
- /Schfont findfont text_height scalefont setfont }
- { thechar show }
- ifelse
- grestore
- currentpoint moveto
- 0 yskip neg rmoveto
- } forall
- end
- } def
-
-/text_height 12 def
-/text_width 6 def
-765 153 moveto 11 (+5) vt
-234 487 224 487 l
-272 487 262 487 l
-238 492 b
-238 491 b
-237 490 b
-239 490 b
-237 489 b
-239 489 b
-236 488 b
-240 488 b
-235 487 b
-236 487 b
-240 487 b
-241 486 b
-241 485 b
-246 492 b
-246 491 b
-245 490 b
-247 490 b
-245 489 b
-247 489 b
-244 488 b
-248 488 b
-244 487 b
-248 487 b
-243 486 b
-243 485 b
-242 484 b
-242 483 b
-254 492 b
-254 491 b
-253 490 b
-255 490 b
-253 489 b
-255 489 b
-252 488 b
-252 487 b
-249 486 b
-251 486 b
-249 485 b
-251 485 b
-250 484 b
-250 483 b
-256 488 b
-256 487 b
-260 487 b
-261 487 b
-257 486 b
-259 486 b
-257 485 b
-259 485 b
-258 484 b
-258 483 b
-248 463 248 479 l
-248 481 b
-247 480 b
-248 480 b
-249 480 b
-246 479 b
-247 479 b
-248 479 b
-249 479 b
-250 479 b
-245 478 b
-246 478 b
-247 478 b
-248 478 b
-249 478 b
-250 478 b
-244 477 b
-245 477 b
-246 477 b
-247 477 b
-248 477 b
-249 477 b
-250 477 b
-251 478 b
-251 477 b
-252 477 b
-/text_height 12 def
-/text_width 6 def
-233 508 moveto 9 (R7) ht
-/text_height 12 def
-/text_width 6 def
-225 488 moveto 9 (1) ht
-/text_height 12 def
-/text_width 6 def
-238 478 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-263 488 moveto 9 (3) ht
-/text_height 12 def
-/text_width 6 def
-257 475 moveto 9 (20K) ht
-752 103 736 103 l
-672 54 656 54 l
-664 54 664 63 l
-669 51 659 51 l
-666 48 662 48 l
-664 45 b
-/text_height 12 def
-/text_width 6 def
-272 811 moveto 9 (2000+-500 Hz) ht
-/text_height 12 def
-/text_width 6 def
-256 827 moveto 9 (bandpass filter) ht
-/text_height 12 def
-/text_width 6 def
-272 515 moveto 9 (\(for 38.4 baud\)) ht
-/text_height 12 def
-/text_width 6 def
-280 531 moveto 9 (26-us one-shot) ht
-/text_height 12 def
-/text_width 6 def
-448 363 moveto 9 (200-ms one shot) ht
-224 487 224 463 l
-248 463 224 463 l
-304 327 304 167 l
-400 167 304 167 l
-400 167 2 fc
-/text_height 12 def
-/text_width 6 def
-384 99 moveto 9 (\(6-12V\)) ht
-/text_height 12 def
-/text_width 6 def
-32 731 moveto 9 (\(BNC\)) ht
-/text_height 12 def
-/text_width 6 def
-32 747 moveto 9 (audio) ht
-/text_height 12 def
-/text_width 6 def
-40 411 moveto 9 (1pps) ht
-/text_height 12 def
-/text_width 6 def
-32 395 moveto 9 (\(BNC\)) ht
-/text_height 12 def
-/text_width 6 def
-400 115 moveto 9 (power) ht
-767 337 753 337 l
-760 315 18 111 69 a
-760 337 760 351 l
-760 319 760 333 l
-/text_height 12 def
-/text_width 6 def
-773 337 moveto 9 (22U) ht
-/text_height 12 def
-/text_width 6 def
-774 350 moveto 9 (C9) ht
-/text_height 12 def
-/text_width 6 def
-745 352 moveto 9 (+) ht
-935 337 921 337 l
-928 315 18 111 69 a
-928 337 928 351 l
-928 319 928 333 l
-/text_height 12 def
-/text_width 6 def
-941 337 moveto 9 (22U) ht
-/text_height 12 def
-/text_width 6 def
-942 350 moveto 9 (C12) ht
-/text_height 12 def
-/text_width 6 def
-913 352 moveto 9 (+) ht
-880 257 880 271 l
-880 239 880 253 l
-/text_height 12 def
-/text_width 6 def
-893 257 moveto 9 (22U) ht
-/text_height 12 def
-/text_width 6 def
-894 270 moveto 9 (C16) ht
-873 259 b
-874 259 b
-875 258 b
-876 258 b
-877 258 b
-878 257 b
-879 257 b
-873 254 b
-874 254 b
-875 254 b
-876 254 b
-877 254 b
-878 254 b
-879 254 b
-886 259 b
-883 258 b
-884 258 b
-885 258 b
-880 257 b
-881 257 b
-882 257 b
-880 254 b
-881 254 b
-882 254 b
-883 254 b
-884 254 b
-885 254 b
-886 254 b
-887 259 b
-887 254 b
-/text_height 12 def
-/text_width 6 def
-865 255 moveto 9 (+) ht
-831 257 817 257 l
-824 235 18 111 69 a
-824 257 824 271 l
-824 239 824 253 l
-/text_height 12 def
-/text_width 6 def
-837 257 moveto 9 (22U) ht
-/text_height 12 def
-/text_width 6 def
-838 270 moveto 9 (C3) ht
-/text_height 12 def
-/text_width 6 def
-809 272 moveto 9 (+) ht
-888 230 872 230 l
-880 230 880 239 l
-885 227 875 227 l
-882 224 878 224 l
-880 221 b
-792 351 760 351 l
-792 319 760 319 l
-928 351 912 351 l
-928 319 912 319 l
-832 271 824 271 l
-880 271 872 271 l
-/text_height 12 def
-/text_width 6 def
-821 240 moveto 11 (+5) vt
-/text_height 12 def
-/text_width 6 def
-624 307 moveto 9 (EIA level converter) ht
-936 399 912 399 l
-872 671 872 655 l
-872 655 2 fc
-/text_height 12 def
-/text_width 6 def
-752 835 moveto 9 (300-baud modem) ht
-88 359 88 367 l
-81 357 b
-80 356 b
-79 355 b
-78 354 b
-77 353 b
-76 352 b
-75 351 b
-82 358 b
-88 357 b
-87 356 b
-86 355 b
-85 354 b
-84 353 b
-83 352 b
-82 351 b
-89 358 b
-95 357 b
-94 356 b
-93 355 b
-92 354 b
-91 353 b
-90 352 b
-89 351 b
-96 358 b
-96 358 82 358 l
-88 695 88 703 l
-81 693 b
-80 692 b
-79 691 b
-78 690 b
-77 689 b
-76 688 b
-75 687 b
-82 694 b
-88 693 b
-87 692 b
-86 691 b
-85 690 b
-84 689 b
-83 688 b
-82 687 b
-89 694 b
-95 693 b
-94 692 b
-93 691 b
-92 690 b
-91 689 b
-90 688 b
-89 687 b
-96 694 b
-96 694 82 694 l
-456 63 456 71 l
-449 61 b
-448 60 b
-447 59 b
-446 58 b
-445 57 b
-444 56 b
-443 55 b
-450 62 b
-456 61 b
-455 60 b
-454 59 b
-453 58 b
-452 57 b
-451 56 b
-450 55 b
-457 62 b
-463 61 b
-462 60 b
-461 59 b
-460 58 b
-459 57 b
-458 56 b
-457 55 b
-464 62 b
-464 62 450 62 l
-696 807 696 815 l
-688 806 b
-689 806 b
-690 806 b
-691 806 b
-692 806 b
-693 806 b
-694 806 b
-689 805 b
-690 804 b
-691 803 b
-692 802 b
-693 801 b
-694 800 b
-696 807 b
-695 806 b
-696 806 b
-697 806 b
-698 806 b
-699 806 b
-700 806 b
-701 806 b
-701 803 b
-700 802 b
-699 801 b
-698 800 b
-695 799 b
-697 799 b
-696 798 b
-702 806 b
-703 806 b
-704 806 b
-703 805 b
-702 804 b
-920 559 920 567 l
-912 558 b
-913 558 b
-914 558 b
-915 558 b
-916 558 b
-917 558 b
-918 558 b
-913 557 b
-914 556 b
-915 555 b
-916 554 b
-917 553 b
-918 552 b
-920 559 b
-919 558 b
-920 558 b
-921 558 b
-922 558 b
-923 558 b
-924 558 b
-925 558 b
-925 555 b
-924 554 b
-923 553 b
-922 552 b
-919 551 b
-921 551 b
-920 550 b
-926 558 b
-927 558 b
-928 558 b
-927 557 b
-926 556 b
-136 679 136 687 l
-128 678 b
-129 678 b
-130 678 b
-131 678 b
-132 678 b
-133 678 b
-134 678 b
-129 677 b
-130 676 b
-131 675 b
-132 674 b
-133 673 b
-134 672 b
-136 679 b
-135 678 b
-136 678 b
-137 678 b
-138 678 b
-139 678 b
-140 678 b
-141 678 b
-141 675 b
-140 674 b
-139 673 b
-138 672 b
-135 671 b
-137 671 b
-136 670 b
-142 678 b
-143 678 b
-144 678 b
-143 677 b
-142 676 b
-408 575 408 583 l
-400 574 b
-401 574 b
-402 574 b
-403 574 b
-404 574 b
-405 574 b
-406 574 b
-401 573 b
-402 572 b
-403 571 b
-404 570 b
-405 569 b
-406 568 b
-408 575 b
-407 574 b
-408 574 b
-409 574 b
-410 574 b
-411 574 b
-412 574 b
-413 574 b
-413 571 b
-412 570 b
-411 569 b
-410 568 b
-407 567 b
-409 567 b
-408 566 b
-414 574 b
-415 574 b
-416 574 b
-415 573 b
-414 572 b
-794 103 784 103 l
-832 103 822 103 l
-/text_height 12 def
-/text_width 6 def
-787 123 moveto 9 (330) ht
-/text_height 12 def
-/text_width 6 def
-787 135 moveto 9 (R12) ht
-798 108 796 103 l
-802 99 798 108 l
-806 108 802 99 l
-810 99 806 108 l
-814 108 810 99 l
-818 99 814 108 l
-820 103 818 99 l
-822 103 820 103 l
-796 103 795 103 l
-/text_height 12 def
-/text_width 6 def
-528 118 moveto 9 (+12) ht
-712 119 616 119 l
-712 87 712 119 l
-616 87 616 119 l
-712 87 616 87 l
-616 103 592 103 l
-664 63 664 87 l
-/text_height 12 def
-/text_width 6 def
-652 101 moveto 9 (GND) ht
-/text_height 12 def
-/text_width 6 def
-619 111 moveto 9 (IN) ht
-/text_height 12 def
-/text_width 6 def
-685 111 moveto 9 (OUT) ht
-/text_height 12 def
-/text_width 6 def
-602 118 moveto 9 (1) ht
-/text_height 12 def
-/text_width 6 def
-640 136 moveto 9 (LM7805) ht
-/text_height 12 def
-/text_width 6 def
-640 149 moveto 9 (U5) ht
-/text_height 12 def
-/text_width 6 def
-667 83 moveto 9 (2) ht
-736 103 712 103 l
-/text_height 12 def
-/text_width 6 def
-720 118 moveto 9 (3) ht
-862 180 b
-867 180 b
-862 179 b
-866 179 b
-867 179 b
-862 178 b
-865 178 b
-866 178 b
-867 178 b
-862 177 b
-864 177 b
-865 177 b
-866 177 b
-867 177 b
-862 176 b
-863 176 b
-864 176 b
-865 176 b
-866 176 b
-867 176 b
-861 175 b
-862 175 b
-863 175 b
-864 175 b
-865 175 b
-866 175 b
-867 175 b
-862 174 b
-863 174 b
-864 174 b
-865 174 b
-866 174 b
-867 174 b
-862 173 b
-864 173 b
-865 173 b
-866 173 b
-867 173 b
-862 172 b
-865 172 b
-866 172 b
-867 172 b
-862 171 b
-866 171 b
-867 171 b
-862 170 b
-867 170 b
-868 181 b
-868 180 b
-868 179 b
-868 178 b
-868 177 b
-868 176 b
-868 175 b
-868 174 b
-868 173 b
-868 172 b
-868 171 b
-868 170 b
-868 169 b
-862 175 848 175 l
-880 175 867 175 l
-/text_height 12 def
-/text_width 6 def
-850 196 moveto 9 (D1) ht
-/text_height 12 def
-/text_width 6 def
-849 171 moveto 9 (1N4002) ht
-848 175 560 175 l
-810 383 792 383 l
-813 383 3 c
-810 367 792 367 l
-813 367 3 c
-816 415 792 415 l
-816 399 792 399 l
-891 399 3 c
-912 399 894 399 l
-912 383 888 383 l
-912 367 888 367 l
-891 415 3 c
-912 415 894 415 l
-/text_height 12 def
-/text_width 6 def
-903 430 moveto 16 (2 4) vt
-/text_height 12 def
-/text_width 6 def
-796 430 moveto 16 (1 11) vt
-/text_height 12 def
-/text_width 6 def
-870 424 moveto 16 (12122 2) vt
-912 351 888 351 l
-912 319 888 319 l
-816 351 792 351 l
-816 319 792 319 l
-/text_height 12 def
-/text_width 6 def
-804 430 moveto 16 (38101 3) vt
-888 431 816 431 l
-/text_height 12 def
-/text_width 6 def
-879 424 moveto 16 (OOOO+ -) vt
-/text_height 12 def
-/text_width 6 def
-895 430 moveto 16 (19174 5) vt
-/text_height 12 def
-/text_width 6 def
-836 288 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-875 288 moveto 9 (6) ht
-888 295 816 295 l
-832 271 832 295 l
-872 271 872 295 l
-816 295 816 431 l
-888 295 888 431 l
-/text_height 12 def
-/text_width 6 def
-820 447 moveto 9 (ICL232) ht
-/text_height 12 def
-/text_width 6 def
-831 460 moveto 9 (U1) ht
-/text_height 12 def
-/text_width 6 def
-820 424 moveto 16 (RRTTC C) vt
-/text_height 12 def
-/text_width 6 def
-829 424 moveto 16 (12121 1) vt
-/text_height 12 def
-/text_width 6 def
-837 424 moveto 16 (IIII+ -) vt
-/text_height 12 def
-/text_width 6 def
-861 424 moveto 16 (RRTTC C) vt
-/text_height 12 def
-/text_width 6 def
-827 313 moveto 9 (V+) ht
-/text_height 12 def
-/text_width 6 def
-865 313 moveto 9 (V-) ht
-992 471 792 471 l
-776 487 776 399 l
-792 471 792 415 l
-936 503 936 399 l
-776 655 752 655 l
-776 703 752 703 l
-776 671 752 671 l
-848 607 776 607 l
-872 735 848 735 l
-872 719 848 719 l
-/text_height 12 def
-/text_width 6 def
-780 776 moveto 16 (DLCCR CXXF) vt
-776 623 752 623 l
-776 639 752 639 l
-776 767 752 767 l
-/text_height 12 def
-/text_width 6 def
-764 782 moveto 16 (12345 7890) vt
-776 719 752 719 l
-770 751 752 751 l
-773 751 3 c
-/text_height 12 def
-/text_width 6 def
-756 782 moveto 16 ( 1) vt
-770 735 752 735 l
-773 735 3 c
-872 751 848 751 l
-872 703 848 703 l
-872 687 848 687 l
-872 671 848 671 l
-872 655 848 655 l
-872 623 848 623 l
-/text_height 12 def
-/text_width 6 def
-852 782 moveto 16 (21111111 1) vt
-/text_height 12 def
-/text_width 6 def
-860 782 moveto 16 (09876543 1) vt
-872 767 848 767 l
-/text_height 12 def
-/text_width 6 def
-821 776 moveto 16 (TUETRRSO T) vt
-/text_height 12 def
-/text_width 6 def
-797 776 moveto 16 (I TD A) vt
-/text_height 12 def
-/text_width 6 def
-788 776 moveto 16 (SBDDX DIOB) vt
-/text_height 12 def
-/text_width 6 def
-812 664 moveto 9 (M) ht
-848 783 776 783 l
-776 607 776 783 l
-848 607 848 783 l
-/text_height 12 def
-/text_width 6 def
-779 799 moveto 9 (MC145443) ht
-/text_height 12 def
-/text_width 6 def
-790 812 moveto 9 (U2) ht
-/text_height 12 def
-/text_width 6 def
-839 776 moveto 16 (AGLA12TE D) vt
-/text_height 12 def
-/text_width 6 def
-830 776 moveto 16 (LAXXXXQD X) vt
-904 559 744 559 l
-880 623 872 623 l
-880 623 880 503 l
-936 503 880 503 l
-1040 726 1024 726 l
-1032 726 1032 735 l
-1037 723 1027 723 l
-1034 720 1030 720 l
-1032 717 b
-1096 726 1080 726 l
-1088 726 1088 735 l
-1093 723 1083 723 l
-1090 720 1086 720 l
-1088 717 b
-1088 767 1032 767 l
-1088 799 1088 767 l
-/text_height 12 def
-/text_width 6 def
-1085 825 moveto 11 (+5) vt
-1088 767 2 fc
-/text_height 12 def
-/text_width 6 def
-1024 715 moveto 9 (U2) ht
-/text_height 12 def
-/text_width 6 def
-1080 715 moveto 9 (U4) ht
-1096 351 1096 335 l
-1096 319 1032 319 l
-1096 287 1032 287 l
-1032 319 1032 287 l
-1032 287 2 fc
-1032 287 1032 175 l
-/text_height 12 def
-/text_width 6 def
-1072 363 moveto 9 (RS) ht
-/text_height 12 def
-/text_width 6 def
-1072 347 moveto 9 (CS) ht
-/text_height 12 def
-/text_width 6 def
-1040 451 moveto 9 (\(DB25 female DCE\)) ht
-1096 303 1064 303 l
-1008 487 776 487 l
-1072 270 1056 270 l
-1064 270 1064 279 l
-1069 267 1059 267 l
-1066 264 1062 264 l
-1064 261 b
-1064 303 1064 279 l
-1064 303 2 fc
-1184 175 1032 175 l
-1032 175 880 175 l
-1032 175 2 fc
-1096 399 1064 399 l
-1064 399 1064 303 l
-/text_height 12 def
-/text_width 6 def
-1112 467 moveto 9 (modem) ht
-/text_height 12 def
-/text_width 6 def
-1074 415 moveto 9 (FG) ht
-/text_height 12 def
-/text_width 6 def
-1074 398 moveto 9 (TD) ht
-/text_height 12 def
-/text_width 6 def
-1074 383 moveto 9 (RD) ht
-/text_height 12 def
-/text_width 6 def
-1073 334 moveto 9 (MR) ht
-/text_height 12 def
-/text_width 6 def
-1073 318 moveto 9 (CG) ht
-/text_height 12 def
-/text_width 6 def
-1073 302 moveto 9 (CD) ht
-/text_height 12 def
-/text_width 6 def
-1069 254 moveto 9 (STD) ht
-1114 367 1096 367 l
-1117 367 3 c
-1114 351 1096 351 l
-1117 351 3 c
-1114 335 1096 335 l
-1117 335 3 c
-1114 319 1096 319 l
-1117 319 3 c
-1114 303 1096 303 l
-1117 303 3 c
-1114 287 1096 287 l
-1117 287 3 c
-1114 239 1096 239 l
-1117 239 3 c
-1114 223 1096 223 l
-1117 223 3 c
-1114 271 1096 271 l
-1117 271 3 c
-1131 375 3 c
-1152 375 1134 375 l
-1131 359 3 c
-1152 359 1134 359 l
-1131 343 3 c
-1152 343 1134 343 l
-1131 327 3 c
-1152 327 1134 327 l
-1131 311 3 c
-1152 311 1134 311 l
-1131 295 3 c
-1152 295 1134 295 l
-1131 263 3 c
-1152 263 1134 263 l
-1131 247 3 c
-1152 247 1134 247 l
-1131 231 3 c
-1152 231 1134 231 l
-1131 215 3 c
-1152 215 1134 215 l
-/text_height 12 def
-/text_width 6 def
-1097 270 moveto 16 (1111) vt
-/text_height 12 def
-/text_width 6 def
-1136 405 moveto 16 (111111222222) vt
-/text_height 12 def
-/text_width 6 def
-1144 405 moveto 16 (456789012345) vt
-/text_height 12 def
-/text_width 6 def
-1105 414 moveto 16 (1234567890123) vt
-1131 391 3 c
-1152 391 1134 391 l
-1114 255 1096 255 l
-1117 255 3 c
-1114 207 1096 207 l
-1117 207 3 c
-1114 383 1096 383 l
-1117 383 3 c
-1114 399 1096 399 l
-1117 399 3 c
-1131 279 3 c
-1152 279 1134 279 l
-/text_height 12 def
-/text_width 6 def
-1118 420 moveto 9 (DB25) ht
-/text_height 12 def
-/text_width 6 def
-1118 432 moveto 9 (J1) ht
-/text_height 12 def
-/text_width 6 def
-1069 238 moveto 9 (SRD) ht
-1184 295 1152 295 l
-/text_height 12 def
-/text_width 6 def
-1160 315 moveto 9 (TR) ht
-1184 295 1184 175 l
-190 704 190 718 l
-213 711 18 201 159 a
-190 711 176 711 l
-208 711 195 711 l
-/text_height 12 def
-/text_width 6 def
-179 734 moveto 9 (C15) ht
-/text_height 12 def
-/text_width 6 def
-173 704 moveto 9 (10N) ht
-366 640 366 654 l
-389 647 18 201 159 a
-366 647 352 647 l
-384 647 371 647 l
-/text_height 12 def
-/text_width 6 def
-355 670 moveto 9 (C11) ht
-/text_height 12 def
-/text_width 6 def
-349 640 moveto 9 (10N) ht
-446 640 446 654 l
-469 647 18 201 159 a
-446 647 432 647 l
-464 647 451 647 l
-/text_height 12 def
-/text_width 6 def
-435 670 moveto 9 (C10) ht
-/text_height 12 def
-/text_width 6 def
-429 640 moveto 9 (10N) ht
-/text_height 12 def
-/text_width 6 def
-693 606 moveto 9 (C8) ht
-/text_height 12 def
-/text_width 6 def
-693 593 moveto 9 (100N) ht
-687 593 673 593 l
-680 571 18 111 69 a
-680 593 680 607 l
-680 575 680 589 l
-/text_height 12 def
-/text_width 6 def
-933 598 moveto 9 (C5) ht
-/text_height 12 def
-/text_width 6 def
-933 585 moveto 9 (100N) ht
-927 585 913 585 l
-920 563 18 111 69 a
-920 585 920 599 l
-920 567 920 581 l
-/text_height 12 def
-/text_width 6 def
-933 646 moveto 9 (C7) ht
-/text_height 12 def
-/text_width 6 def
-933 633 moveto 9 (100N) ht
-927 633 913 633 l
-920 611 18 111 69 a
-920 633 920 647 l
-920 615 920 629 l
-/text_height 12 def
-/text_width 6 def
-741 814 moveto 9 (C4) ht
-/text_height 12 def
-/text_width 6 def
-741 801 moveto 9 (10N) ht
-735 801 721 801 l
-728 779 18 111 69 a
-728 801 728 815 l
-728 783 728 797 l
-/text_height 12 def
-/text_width 6 def
-757 606 moveto 9 (C6) ht
-/text_height 12 def
-/text_width 6 def
-757 593 moveto 9 (100N) ht
-751 593 737 593 l
-744 571 18 111 69 a
-744 593 744 607 l
-744 575 744 589 l
-/text_height 12 def
-/text_width 6 def
-1045 766 moveto 9 (C13) ht
-/text_height 12 def
-/text_width 6 def
-1045 753 moveto 9 (100N) ht
-1039 753 1025 753 l
-1032 731 18 111 69 a
-1032 753 1032 767 l
-1032 735 1032 749 l
-/text_height 12 def
-/text_width 6 def
-1101 766 moveto 9 (C2) ht
-/text_height 12 def
-/text_width 6 def
-1101 753 moveto 9 (100N) ht
-1095 753 1081 753 l
-1088 731 18 111 69 a
-1088 753 1088 767 l
-1088 735 1088 749 l
-546 239 536 239 l
-584 239 574 239 l
-/text_height 12 def
-/text_width 6 def
-539 259 moveto 9 (330) ht
-/text_height 12 def
-/text_width 6 def
-539 271 moveto 9 (R10) ht
-550 244 548 239 l
-554 235 550 244 l
-558 244 554 235 l
-562 235 558 244 l
-566 244 562 235 l
-570 235 566 244 l
-572 239 570 235 l
-574 239 572 239 l
-548 239 547 239 l
-845 109 b
-845 108 b
-846 108 b
-851 108 b
-845 107 b
-846 107 b
-847 107 b
-851 107 b
-845 106 b
-846 106 b
-847 106 b
-848 106 b
-851 106 b
-845 105 b
-846 105 b
-847 105 b
-848 105 b
-849 105 b
-851 105 b
-845 104 b
-846 104 b
-847 104 b
-848 104 b
-849 104 b
-850 104 b
-851 104 b
-845 103 b
-846 103 b
-847 103 b
-848 103 b
-849 103 b
-850 103 b
-851 103 b
-845 102 b
-846 102 b
-847 102 b
-848 102 b
-849 102 b
-850 102 b
-851 102 b
-845 101 b
-846 101 b
-847 101 b
-848 101 b
-849 101 b
-851 101 b
-845 100 b
-846 100 b
-847 100 b
-848 100 b
-851 100 b
-845 99 b
-846 99 b
-847 99 b
-851 99 b
-845 98 b
-846 98 b
-851 98 b
-845 97 b
-852 103 b
-846 103 832 103 l
-864 103 853 103 l
-/text_height 12 def
-/text_width 6 def
-832 131 moveto 9 (LED2) ht
-859 116 b
-857 115 b
-858 115 b
-857 114 b
-858 114 b
-856 113 b
-855 112 b
-855 111 b
-856 111 b
-857 111 b
-858 111 b
-859 111 b
-860 111 b
-860 110 b
-859 109 b
-858 108 b
-857 107 b
-/text_height 12 def
-/text_width 6 def
-833 97 moveto 9 (RED) ht
-/text_height 12 def
-/text_width 6 def
-584 219 moveto 9 (1 pps) ht
-/text_height 12 def
-/text_width 6 def
-832 83 moveto 9 (power) ht
-328 703 304 703 l
-264 679 264 727 l
-264 711 240 711 l
-264 695 240 695 l
-/text_height 12 def
-/text_width 6 def
-267 719 moveto 9 (+) ht
-/text_height 12 def
-/text_width 6 def
-267 703 moveto 9 (-) ht
-/text_height 12 def
-/text_width 6 def
-250 726 moveto 9 (3) ht
-/text_height 12 def
-/text_width 6 def
-250 710 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-312 718 moveto 9 (1) ht
-/text_height 12 def
-/text_width 6 def
-264 744 moveto 9 (LM324) ht
-/text_height 12 def
-/text_width 6 def
-264 757 moveto 9 (U4A) ht
-304 703 264 727 l
-304 703 264 679 l
-472 695 448 695 l
-408 671 408 719 l
-/text_height 12 def
-/text_width 6 def
-411 711 moveto 9 (+) ht
-/text_height 12 def
-/text_width 6 def
-411 695 moveto 9 (-) ht
-/text_height 12 def
-/text_width 6 def
-408 736 moveto 9 (LM324) ht
-/text_height 12 def
-/text_width 6 def
-408 749 moveto 9 (U4B) ht
-408 703 384 703 l
-408 687 384 687 l
-/text_height 12 def
-/text_width 6 def
-394 718 moveto 9 (5) ht
-/text_height 12 def
-/text_width 6 def
-394 702 moveto 9 (6) ht
-/text_height 12 def
-/text_width 6 def
-456 710 moveto 9 (7) ht
-448 695 408 719 l
-448 695 408 671 l
-336 431 272 431 l
-272 351 272 431 l
-336 351 272 351 l
-336 351 336 431 l
-272 399 248 399 l
-266 383 248 383 l
-269 383 3 c
-360 399 336 399 l
-288 431 288 455 l
-320 431 320 455 l
-304 345 304 327 l
-304 348 3 c
-/text_height 12 def
-/text_width 6 def
-275 407 moveto 16 (BA) vt
-/text_height 12 def
-/text_width 6 def
-277 433 moveto 9 (R/C) ht
-/text_height 12 def
-/text_width 6 def
-313 433 moveto 9 (CE) ht
-/text_height 12 def
-/text_width 6 def
-297 366 moveto 9 (CL) ht
-/text_height 12 def
-/text_width 6 def
-258 414 moveto 16 (21) vt
-/text_height 12 def
-/text_width 6 def
-344 414 moveto 9 (13) ht
-/text_height 12 def
-/text_width 6 def
-344 398 moveto 9 (4) ht
-/text_height 12 def
-/text_width 6 def
-307 347 moveto 9 (3) ht
-/text_height 12 def
-/text_width 6 def
-344 448 moveto 9 (74LS123) ht
-/text_height 12 def
-/text_width 6 def
-344 461 moveto 9 (U3A) ht
-/text_height 12 def
-/text_width 6 def
-292 457 moveto 11 (15) vt
-/text_height 12 def
-/text_width 6 def
-324 457 moveto 11 (14) vt
-/text_height 12 def
-/text_width 6 def
-327 407 moveto 16 (QQ) vt
-/text_height 12 def
-/text_width 6 def
-326 403 moveto 9 (_) ht
-339 383 3 c
-360 383 342 383 l
-512 271 448 271 l
-448 191 448 271 l
-512 191 448 191 l
-512 191 512 271 l
-464 271 464 295 l
-496 271 496 295 l
-/text_height 12 def
-/text_width 6 def
-451 247 moveto 16 (BA) vt
-/text_height 12 def
-/text_width 6 def
-453 273 moveto 9 (R/C) ht
-/text_height 12 def
-/text_width 6 def
-489 273 moveto 9 (CE) ht
-/text_height 12 def
-/text_width 6 def
-473 206 moveto 9 (CL) ht
-480 185 480 167 l
-480 188 3 c
-536 239 512 239 l
-448 239 424 239 l
-442 223 424 223 l
-445 223 3 c
-/text_height 12 def
-/text_width 6 def
-425 254 moveto 9 (10) ht
-/text_height 12 def
-/text_width 6 def
-434 238 moveto 9 (9) ht
-/text_height 12 def
-/text_width 6 def
-520 238 moveto 9 (12) ht
-/text_height 12 def
-/text_width 6 def
-520 254 moveto 9 (5) ht
-/text_height 12 def
-/text_width 6 def
-483 198 moveto 11 ( 11) vt
-/text_height 12 def
-/text_width 6 def
-467 291 moveto 9 (7) ht
-/text_height 12 def
-/text_width 6 def
-499 291 moveto 9 (6) ht
-/text_height 12 def
-/text_width 6 def
-520 288 moveto 9 (74LS123) ht
-/text_height 12 def
-/text_width 6 def
-520 301 moveto 9 (U3B) ht
-/text_height 12 def
-/text_width 6 def
-503 247 moveto 16 (QQ) vt
-/text_height 12 def
-/text_width 6 def
-502 243 moveto 9 (_) ht
-515 223 3 c
-536 223 518 223 l
-136 724 b
-136 723 b
-137 723 b
-138 722 b
-138 720 b
-136 719 b
-137 719 b
-134 718 b
-135 718 b
-132 717 b
-133 717 b
-134 716 b
-135 716 b
-136 715 b
-137 715 b
-138 714 b
-138 712 b
-136 711 b
-137 711 b
-134 710 b
-135 710 b
-132 709 b
-133 709 b
-134 708 b
-135 708 b
-136 707 b
-137 707 b
-138 706 b
-138 704 b
-136 703 b
-137 703 b
-134 702 b
-135 702 b
-132 701 b
-133 701 b
-134 700 b
-135 700 b
-136 699 b
-139 722 b
-140 721 b
-141 721 b
-139 720 b
-139 714 b
-140 713 b
-141 713 b
-139 712 b
-139 706 b
-140 705 b
-141 705 b
-139 704 b
-136 724 136 735 l
-136 687 136 698 l
-176 711 152 711 l
-147 715 b
-146 714 b
-147 714 b
-145 713 b
-146 713 b
-147 713 b
-144 712 b
-145 712 b
-146 712 b
-147 712 b
-143 711 b
-144 711 b
-145 711 b
-146 711 b
-147 711 b
-148 711 b
-149 711 b
-144 710 b
-145 710 b
-146 710 b
-147 710 b
-145 709 b
-146 709 b
-147 709 b
-146 708 b
-147 708 b
-147 707 b
-150 711 b
-151 711 b
-152 711 b
-153 711 b
-/text_height 12 def
-/text_width 6 def
-148 708 moveto 9 (10K) ht
-/text_height 12 def
-/text_width 6 def
-128 736 moveto 9 (1) ht
-/text_height 12 def
-/text_width 6 def
-126 702 moveto 9 (3) ht
-/text_height 12 def
-/text_width 6 def
-150 726 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-144 738 moveto 9 (R8) ht
-608 751 608 762 l
-640 775 616 775 l
-616 767 616 783 l
-608 788 608 799 l
-614 768 b
-613 767 b
-612 766 b
-611 765 b
-610 764 b
-609 763 b
-608 762 b
-616 770 b
-615 769 b
-608 788 b
-609 787 b
-610 786 b
-613 786 b
-611 785 b
-612 785 b
-613 785 b
-611 784 b
-612 784 b
-613 784 b
-610 783 b
-611 783 b
-612 783 b
-613 783 b
-614 783 b
-613 782 b
-614 782 b
-615 781 b
-616 780 b
-613 775 16 c
-/text_height 12 def
-/text_width 6 def
-632 795 moveto 9 (2N2907) ht
-/text_height 12 def
-/text_width 6 def
-632 808 moveto 9 (Q1) ht
-608 711 608 719 l
-600 710 b
-601 710 b
-602 710 b
-603 710 b
-604 710 b
-605 710 b
-606 710 b
-601 709 b
-602 708 b
-603 707 b
-604 706 b
-605 705 b
-606 704 b
-608 711 b
-607 710 b
-608 710 b
-609 710 b
-610 710 b
-611 710 b
-612 710 b
-613 710 b
-613 707 b
-612 706 b
-611 705 b
-610 704 b
-607 703 b
-609 703 b
-608 702 b
-614 710 b
-615 710 b
-616 710 b
-615 709 b
-614 708 b
-/text_height 12 def
-/text_width 6 def
-624 723 moveto 9 (car det) ht
-664 775 664 735 l
-664 775 640 775 l
-1096 367 912 367 l
-1008 487 1008 383 l
-1096 383 1008 383 l
-992 471 992 239 l
-1096 239 992 239 l
-976 383 912 383 l
-976 383 976 223 l
-1096 223 976 223 l
-602 738 b
-603 738 b
-604 738 b
-605 738 b
-606 738 b
-607 738 b
-608 738 b
-603 737 b
-604 737 b
-605 737 b
-606 737 b
-607 737 b
-608 737 b
-604 736 b
-605 736 b
-606 736 b
-607 736 b
-608 736 b
-605 735 b
-606 735 b
-607 735 b
-608 735 b
-606 734 b
-607 734 b
-608 734 b
-607 733 b
-608 733 b
-603 732 b
-604 732 b
-605 732 b
-606 732 b
-607 732 b
-608 732 b
-608 731 b
-609 738 b
-610 738 b
-611 738 b
-612 738 b
-613 738 b
-614 738 b
-609 737 b
-610 737 b
-611 737 b
-612 737 b
-613 737 b
-609 736 b
-610 736 b
-611 736 b
-612 736 b
-609 735 b
-610 735 b
-611 735 b
-609 734 b
-610 734 b
-609 733 b
-609 732 b
-610 732 b
-611 732 b
-612 732 b
-613 732 b
-608 738 608 751 l
-608 719 608 731 l
-593 738 b
-592 737 b
-591 736 b
-591 735 b
-592 735 b
-593 735 b
-594 735 b
-595 735 b
-595 734 b
-593 733 b
-594 733 b
-593 732 b
-594 732 b
-592 731 b
-/text_height 12 def
-/text_width 6 def
-619 737 moveto 9 (GRN) ht
-/text_height 12 def
-/text_width 6 def
-619 750 moveto 9 (LED1) ht
-682 735 672 735 l
-720 735 710 735 l
-/text_height 12 def
-/text_width 6 def
-675 755 moveto 9 (3.3K) ht
-/text_height 12 def
-/text_width 6 def
-675 767 moveto 9 (R14) ht
-686 740 684 735 l
-690 731 686 740 l
-694 740 690 731 l
-698 731 694 740 l
-702 740 698 731 l
-706 731 702 740 l
-708 735 706 731 l
-710 735 708 735 l
-684 735 683 735 l
-672 735 664 735 l
-752 735 720 735 l
-597 245 b
-597 244 b
-598 244 b
-603 244 b
-597 243 b
-598 243 b
-599 243 b
-603 243 b
-597 242 b
-598 242 b
-599 242 b
-600 242 b
-603 242 b
-597 241 b
-598 241 b
-599 241 b
-600 241 b
-601 241 b
-603 241 b
-597 240 b
-598 240 b
-599 240 b
-600 240 b
-601 240 b
-602 240 b
-603 240 b
-597 239 b
-598 239 b
-599 239 b
-600 239 b
-601 239 b
-602 239 b
-603 239 b
-597 238 b
-598 238 b
-599 238 b
-600 238 b
-601 238 b
-602 238 b
-603 238 b
-597 237 b
-598 237 b
-599 237 b
-600 237 b
-601 237 b
-603 237 b
-597 236 b
-598 236 b
-599 236 b
-600 236 b
-603 236 b
-597 235 b
-598 235 b
-599 235 b
-603 235 b
-597 234 b
-598 234 b
-603 234 b
-597 233 b
-604 239 b
-598 239 584 239 l
-616 239 605 239 l
-/text_height 12 def
-/text_width 6 def
-584 267 moveto 9 (LED3) ht
-611 252 b
-609 251 b
-610 251 b
-609 250 b
-610 250 b
-608 249 b
-607 248 b
-607 247 b
-608 247 b
-609 247 b
-610 247 b
-611 247 b
-612 247 b
-612 246 b
-611 245 b
-610 244 b
-609 243 b
-/text_height 12 def
-/text_width 6 def
-585 233 moveto 9 (AMBER) ht
-648 230 632 230 l
-640 230 640 239 l
-645 227 635 227 l
-642 224 638 224 l
-640 221 b
-640 239 616 239 l
-402 767 392 767 l
-440 767 430 767 l
-/text_height 12 def
-/text_width 6 def
-395 787 moveto 9 (68K) ht
-/text_height 12 def
-/text_width 6 def
-395 799 moveto 9 (R6) ht
-406 772 404 767 l
-410 763 406 772 l
-414 772 410 763 l
-418 763 414 772 l
-422 772 418 763 l
-426 763 422 772 l
-428 767 426 763 l
-430 767 428 767 l
-404 767 403 767 l
-408 620 408 631 l
-/text_height 12 def
-/text_width 6 def
-418 621 moveto 9 (R5) ht
-/text_height 12 def
-/text_width 6 def
-418 608 moveto 9 (680) ht
-413 617 408 619 l
-413 601 404 597 l
-413 601 404 605 l
-413 609 404 613 l
-413 609 404 605 l
-408 593 408 595 l
-408 596 404 597 l
-408 583 408 594 l
-413 617 404 613 l
-408 619 408 621 l
-408 594 408 596 l
-426 327 416 327 l
-464 327 454 327 l
-/text_height 12 def
-/text_width 6 def
-419 347 moveto 9 (33K) ht
-/text_height 12 def
-/text_width 6 def
-419 359 moveto 9 (R9) ht
-430 332 428 327 l
-434 323 430 332 l
-438 332 434 323 l
-442 323 438 332 l
-446 332 442 323 l
-450 323 446 332 l
-452 327 450 323 l
-454 327 452 327 l
-428 327 427 327 l
-503 313 489 313 l
-496 291 18 111 69 a
-496 313 496 327 l
-496 295 496 309 l
-/text_height 12 def
-/text_width 6 def
-509 313 moveto 9 (22U) ht
-/text_height 12 def
-/text_width 6 def
-510 326 moveto 9 (C17) ht
-/text_height 12 def
-/text_width 6 def
-481 328 moveto 9 (+) ht
-
-showpage
diff --git a/usr.sbin/xntpd/gadget/gadget.s02 b/usr.sbin/xntpd/gadget/gadget.s02
deleted file mode 100644
index 6af4a6e..0000000
--- a/usr.sbin/xntpd/gadget/gadget.s02
+++ /dev/null
@@ -1,288 +0,0 @@
-%!PS-Adobe-23.0 EPSF-1.2
-%%Creator: SCHEMA
-%%BoundingBox: 0 0 1343.0 1023.0
-/scl 511804.0 0.072 mul 65536.0 div def
-scl scl scale
-
-% Landscape Orientation
-/xoff 256.0 65536.0 mul 511804.0 div def
-/yoff 1343.0 -256.0 65536.0 mul 511804.0 div sub def
-xoff yoff translate
--90 rotate
-
-0 setgray
-
-/a { 1 setlinewidth newpath arcn stroke } def
-/fa { 3 setlinewidth newpath arcn stroke } def
-/c { 1 setlinewidth newpath 0 360 arc stroke } def
-/fc { 1 setlinewidth newpath 0 360 arc fill } def
-/l { 1 setlinewidth newpath moveto lineto stroke } def
-/t { 3 setlinewidth newpath moveto lineto stroke } def
-/ds { [4 4] 0 setdash 1 setlinewidth
- newpath moveto lineto stroke [] 0 setdash } def
-/dt { [2 2] 0 setdash 1 setlinewidth
- newpath moveto lineto stroke [] 0 setdash } def
-
-8 7 8 1015 t
-1328 7 912 7 t
-1336 1015 8 1015 t
-1336 7 1336 1015 t
-912 7 8 7 t
-1336 7 1328 7 t
-
-/reencsmalldict 12 dict def %% Schema font definitions
-/ReEncodeSmall
- { reencsmalldict begin
- /newcodesandnames exch def
- /newfontname exch def
- /basefontname exch def
- /basefontdict basefontname findfont def
- /newfont basefontdict maxlength dict def
- basefontdict
- { exch dup /FID ne
- { dup /Encoding eq
- { exch dup length array copy newfont 3 1 roll put }
- { exch newfont 3 1 roll put }
- ifelse
- }
- { pop pop }
- ifelse
- } forall
- newfont /FontName newfontname put
- newcodesandnames aload pop
- newcodesandnames length 2 idiv
- { newfont /Encoding get 3 1 roll put }
- repeat
- newfontname newfont definefont pop
- end
- } def
-/schfontvec [ 8#200 /Ccedilla 8#201 /udieresis 8#202 /eacute 8#203 /acircumflex
-8#204 /adieresis 8#205 /agrave 8#207 /ccedilla 8#210 /ecircumflex
-8#211 /edieresis 8#212 /egrave 8#213 /idieresis 8#214 /icircumflex
-8#215 /igrave 8#216 /Adieresis 8#220 /Eacute 8#223 /ocircumflex
-8#224 /odieresis 8#225 /ograve 8#226 /ucircumflex 8#227 /ugrave
-8#230 /ydieresis 8#231 /Odieresis 8#232 /Udieresis 8#240 /aacute 8#241 /iacute
-8#242 /oacute 8#243 /uacute 8#244 /ntilde 8#245 /Ntilde ] def
-/schsymbvec [ 8#341 /beta 8#346 /mu 8#352 /Omega ] def
-/Courier-Bold /Schfont schfontvec ReEncodeSmall
-/Symbol /Schsymb schsymbvec ReEncodeSmall
-
-
-/htdict 4 dict def %% HTEXT - variable spacing horizontal text routine
-/ht
- { htdict begin
- /textstring exch def
- /xskip exch def
- 0 text_height neg rmoveto
- /Schfont findfont text_height scalefont setfont
- textstring
- {
- /charcode exch def
- /thechar ( ) dup 0 charcode put def
- gsave
- charcode 8#245 gt
- { /Schsymb findfont text_height scalefont setfont
- thechar show
- /Schfont findfont text_height scalefont setfont }
- { thechar show }
- ifelse
- grestore
- currentpoint moveto
- xskip 0 rmoveto
- } forall
- end
- } def
-
-/text_height 12 def
-/text_width 6 def
-1304 27 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-1272 27 moveto 9 (OF) ht
-/text_height 12 def
-/text_width 6 def
-1192 27 moveto 9 (SHEET) ht
-1176 31 1176 7 l
-1336 55 992 55 l
-1336 31 992 31 l
-992 7 992 87 t
-1336 87 992 87 t
-/text_height 20 def
-/text_width 9 def
-1032 87 moveto 13 (1-PPS/RS232 Converter) ht
-/text_height 12 def
-/text_width 6 def
-1040 27 moveto 9 (26 June 1992) ht
-1176 55 1176 31 l
-/text_height 12 def
-/text_width 6 def
-1032 51 moveto 9 (100-0001-001) ht
-/text_height 12 def
-/text_width 6 def
-1216 51 moveto 9 (REV) ht
-/text_height 12 def
-/text_width 6 def
-1264 51 moveto 9 (1A) ht
-640 303 240 303 l
-240 463 240 303 l
-640 463 240 463 l
-640 463 640 303 l
-240 783 240 543 l
-640 543 240 543 l
-640 783 640 543 l
-640 783 240 783 l
-1040 463 800 463 l
-800 463 800 303 l
-1040 463 1040 303 l
-1040 303 800 303 l
-632 327 248 327 l
-632 335 632 327 l
-248 335 248 327 l
-632 335 248 335 l
-656 367 640 367 l
-656 367 656 351 l
-656 351 640 351 l
-640 367 624 367 l
-624 367 624 351 l
-640 351 624 351 l
-248 335 240 335 l
-224 367 224 335 l
-240 335 224 335 l
-624 359 616 359 l
-616 359 616 335 l
-288 367 288 335 l
-288 367 224 367 l
-624 327 624 303 l
-592 327 592 303 l
-844 419 20 c
-996 419 20 c
-1032 335 808 335 ds
-1032 327 1032 335 ds
-808 327 808 335 ds
-1032 327 808 327 ds
-816 303 816 327 ds
-848 303 848 327 ds
-1024 303 1024 327 ds
-992 303 992 327 ds
-632 775 248 775 l
-632 775 632 551 l
-632 551 248 551 l
-248 775 248 551 l
-288 751 248 751 l
-288 575 248 575 l
-288 751 288 575 l
-600 751 16 c
-/text_height 20 def
-/text_width 9 def
-344 223 moveto 13 (Assembly Drawing) ht
-/text_height 12 def
-/text_width 6 def
-896 283 moveto 9 (End View) ht
-/text_height 12 def
-/text_width 6 def
-280 163 moveto 9 (Material: 2" x 3" x 5" aluminum minibox) ht
-600 575 16 c
-842 357 10 c
-1002 357 10 c
-920 418 20 c
-921 358 10 c
-/text_height 12 def
-/text_width 6 def
-976 395 moveto 9 (POWER) ht
-/text_height 12 def
-/text_width 6 def
-824 395 moveto 9 (AUDIO) ht
-/text_height 12 def
-/text_width 6 def
-912 395 moveto 9 (PPS) ht
-384 735 224 735 ds
-384 591 224 591 ds
-600 751 520 751 ds
-600 575 520 575 ds
-272 399 200 399 l
-272 439 200 439 l
-272 439 272 399 l
-200 439 200 399 l
-280 423 272 423 l
-272 759 200 759 l
-288 599 224 599 l
-272 607 272 567 l
-288 727 224 727 l
-272 719 200 719 l
-272 759 272 719 l
-200 759 200 719 l
-656 575 624 575 l
-656 591 656 575 l
-656 591 624 591 l
-624 591 624 575 l
-656 751 624 751 l
-656 751 656 735 l
-656 735 624 735 l
-624 751 624 735 l
-656 655 624 655 l
-656 671 656 655 l
-624 671 624 655 l
-656 671 624 671 l
-280 423 280 415 l
-280 415 272 415 l
-280 591 272 591 l
-280 591 280 583 l
-280 583 272 583 l
-272 663 272 655 l
-272 743 272 735 l
-280 735 272 735 l
-280 743 280 735 l
-280 743 272 743 l
-273 683 201 683 l
-201 682 201 642 l
-272 683 272 643 l
-273 643 201 643 l
-281 667 273 667 l
-280 658 272 658 l
-280 666 280 658 l
-232 607 232 567 l
-272 607 232 607 l
-272 567 232 567 l
-232 439 232 399 l
-/text_height 12 def
-/text_width 6 def
-672 587 moveto 9 (LED1 \(green\)) ht
-/text_height 12 def
-/text_width 6 def
-136 355 moveto 9 (J1 \(DB25\)) ht
-/text_height 12 def
-/text_width 6 def
-120 747 moveto 9 (J2 \(BNC\)) ht
-/text_height 12 def
-/text_width 6 def
-120 675 moveto 9 (J3 \(BNC\)) ht
-/text_height 12 def
-/text_width 6 def
-128 611 moveto 9 (J4 \(power\)) ht
-224 727 224 599 l
-/text_height 12 def
-/text_width 6 def
-352 283 moveto 9 (Side View \(cover removed\)) ht
-/text_height 12 def
-/text_width 6 def
-344 523 moveto 9 (Top View \(cover removed\)) ht
-384 591 384 735 ds
-528 575 528 751 ds
-608 599 608 727 ds
-/text_height 12 def
-/text_width 6 def
-416 619 moveto 9 (#4 x 1/4" spacers \(2\)) ht
-/text_height 12 def
-/text_width 6 def
-400 699 moveto 9 (#4 screws \(4\)) ht
-/text_height 12 def
-/text_width 6 def
-1248 27 moveto 9 (2) ht
-/text_height 12 def
-/text_width 6 def
-672 667 moveto 9 (LED2 \(red\)) ht
-/text_height 12 def
-/text_width 6 def
-672 747 moveto 9 (LED3 \(amber\)) ht
-
-showpage
diff --git a/usr.sbin/xntpd/gadget/gen0102.lpr b/usr.sbin/xntpd/gadget/gen0102.lpr
deleted file mode 100644
index cc4fd8e..0000000
--- a/usr.sbin/xntpd/gadget/gen0102.lpr
+++ /dev/null
@@ -1,1973 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:34:44 1992) show
-gsave
-Init
-8000 10500 Clipto
-4015 2626 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-12 SetLine
--100 900 [ -100 800 ] PLine
--100 800 [ 100 800 ] PLine
-100 900 [ 100 800 ] PLine
-100 800 [ 900 800 ] PLine
-300 1100 [ 600 1100 ] PLine
--1100 1150 [ -700 1150 ] PLine
--700 1150 [ -700 1600 ] PLine
-175 3300 [ -100 3300 ] PLine
-700 3000 [ 300 3000 ] PLine
-300 3000 [ 300 3100 ] PLine
-300 2500 [ 300 2650 ] PLine
-300 2650 [ 800 2650 ] PLine
-800 2800 [ 800 2650 ] PLine
-800 2650 [ 1000 2650 ] PLine
-400 2500 [ 400 2600 ] PLine
-400 2600 [ 1100 2600 ] PLine
-1100 2600 [ 1100 2800 ] PLine
--900 2300 [ -700 2100 ] PLine
--700 2100 [ -450 2100 ] PLine
-500 2500 [ 550 2550 ] PLine
-550 2550 [ 750 2550 ] PLine
-750 2550 [ 800 2500 ] PLine
--650 2600 [ -100 2600 ] PLine
--100 2250 [ 450 2250 ] PLine
-450 2250 [ 500 2200 ] PLine
--1200 2300 [ -1050 2300 ] PLine
--1050 2300 [ -1050 2100 ] PLine
--1050 2100 [ -800 2100 ] PLine
--900 2500 [ -700 2300 ] PLine
--700 2300 [ -700 2200 ] PLine
--700 2200 [ -300 2200 ] PLine
--300 2200 [ -300 2100 ] PLine
-1250 1900 [ 1250 1800 ] PLine
-1250 1800 [ 800 1800 ] PLine
-300 1900 [ 300 1800 ] PLine
-300 1800 [ 800 1800 ] PLine
-700 1900 [ 450 1900 ] PLine
-300 1700 [ 600 1700 ] PLine
-500 1600 [ -100 1600 ] PLine
--100 1600 [ -100 1700 ] PLine
-1000 3900 [ 1050 3950 ] PLine
-1050 3950 [ 1050 4050 ] PLine
-1050 4050 [ 50 4050 ] PLine
-50 4050 [ 0 4000 ] PLine
-0 4100 [ 900 4100 ] PLine
-800 3000 [ 1100 3000 ] PLine
-0 3700 [ 0 3850 ] PLine
-0 3850 [ 450 3850 ] PLine
-450 3850 [ 500 3900 ] PLine
--400 3400 [ -400 3600 ] PLine
--400 3600 [ 300 3600 ] PLine
-300 3600 [ 300 3700 ] PLine
-300 3700 [ 600 3700 ] PLine
-450 2700 [ -400 2700 ] PLine
--400 2300 [ -300 2300 ] PLine
--700 4200 [ -650 4250 ] PLine
--650 4250 [ 550 4250 ] PLine
-550 4250 [ 600 4200 ] PLine
-350 3800 [ 1100 3800 ] PLine
-1100 3800 [ 1100 3900 ] PLine
--800 3100 [ -800 2800 ] PLine
--800 2800 [ -400 2800 ] PLine
--850 3700 [ -400 3700 ] PLine
-400 1300 [ 600 1300 ] PLine
--1100 4200 [ -1050 4150 ] PLine
--1050 4150 [ 650 4150 ] PLine
-650 4150 [ 700 4200 ] PLine
--300 3400 [ -250 3350 ] PLine
--250 3350 [ 1200 3350 ] PLine
-1200 3350 [ 1200 4200 ] PLine
-1200 4200 [ 1100 4200 ] PLine
--700 3100 [ -700 2875 ] PLine
--700 2875 [ -200 2875 ] PLine
--200 2875 [ -200 2800 ] PLine
--600 3100 [ -600 2950 ] PLine
--600 2950 [ 600 2950 ] PLine
-600 2950 [ 600 2800 ] PLine
--750 550 [ -750 1050 ] PLine
--750 1050 [ -1050 1050 ] PLine
-950 3200 [ 700 3200 ] PLine
-850 1200 [ -600 1200 ] PLine
--550 3900 [ -350 3900 ] PLine
-540 4479 [ 540 4300 ] PLine
-540 4300 [ -800 4300 ] PLine
-432 4479 [ 432 4350 ] PLine
-432 4350 [ -750 4350 ] PLine
-400 3400 [ 700 3400 ] PLine
-50 SetLine
--1000 3400 [ -1000 3250 ] PLine
--1000 3250 [ -200 3250 ] PLine
--200 3250 [ -200 3100 ] PLine
--200 3100 [ -100 3100 ] PLine
-0 2500 [ 0 2350 ] PLine
-0 2350 [ 200 2350 ] PLine
-200 2350 [ 200 2500 ] PLine
-0 2350 [ -200 2350 ] PLine
--1000 3400 [ -1200 3400 ] PLine
-200 2350 [ 1100 2350 ] PLine
-1100 2350 [ 1100 2450 ] PLine
-1100 2450 [ 1200 2450 ] PLine
--600 1600 [ -600 1750 ] PLine
--600 1750 [ -200 1750 ] PLine
--1200 3700 [ -1000 3700 ] PLine
--1000 3700 [ -1000 3400 ] PLine
-1100 3200 [ 1250 3200 ] PLine
-1250 3200 [ 1250 2450 ] PLine
-1250 2450 [ 1200 2450 ] PLine
-900 4200 [ 900 4300 ] PLine
-900 4300 [ 1250 4300 ] PLine
-1250 4300 [ 1250 3200 ] PLine
--700 4000 [ -1000 4000 ] PLine
--1000 4000 [ -1000 3700 ] PLine
-900 4200 [ 800 4200 ] PLine
-200 1400 [ 1100 1400 ] PLine
-1100 1400 [ 1100 800 ] PLine
--50 450 [ -50 150 ] PLine
-950 150 [ 1100 450 ] PLine
-1100 450 [ 1000 800 ] PLine
--250 450 [ -250 1000 ] PLine
--250 1000 [ 200 1000 ] PLine
-200 1000 [ 200 1100 ] PLine
-0 450 [ -750 450 ] PLine
--750 450 [ -1100 450 ] PLine
-0 4475 [ 0 4400 ] PLine
-0 4400 [ -648 4400 ] PLine
--648 4400 [ -648 4479 ] PLine
-75 4000 [ 300 4000 ] PLine
-300 4000 [ 300 3900 ] PLine
-1100 450 [ 750 450 ] PLine
-750 450 [ 0 450 ] PLine
-900 2200 [ 900 2000 ] PLine
-900 2000 [ 75 2000 ] PLine
-75 2000 [ 75 2200 ] PLine
-75 2200 [ 200 2200 ] PLine
-300 4000 [ 1000 4000 ] PLine
--1100 450 [ -1050 150 ] PLine
--600 1900 [ -600 2000 ] PLine
--600 2000 [ 75 2000 ] PLine
-75 2100 [ 0 2100 ] PLine
-12 SetLine
-700 3700 [ 750 3650 ] PLine
-750 3650 [ 750 800 ] PLine
-750 800 [ 900 800 ] PLine
-0 550 [ 300 550 ] PLine
-300 550 [ 300 1100 ] PLine
-300 2200 [ 250 2150 ] PLine
-250 2150 [ 250 1600 ] PLine
-250 1600 [ 300 1550 ] PLine
-300 1550 [ 300 1100 ] PLine
--700 2500 [ -550 2500 ] PLine
--550 2500 [ -550 1700 ] PLine
--550 1700 [ -700 1700 ] PLine
--700 1700 [ -700 1600 ] PLine
-300 3500 [ 175 3500 ] PLine
-175 3500 [ 175 3100 ] PLine
-175 3100 [ 300 3100 ] PLine
-300 4200 [ 250 4150 ] PLine
-250 4150 [ 250 3800 ] PLine
-250 3800 [ 300 3750 ] PLine
-300 3750 [ 300 3500 ] PLine
--300 2500 [ -250 2550 ] PLine
--250 2550 [ -250 3300 ] PLine
--250 3300 [ -100 3300 ] PLine
-300 4200 [ 400 4200 ] PLine
--900 1600 [ -800 1600 ] PLine
--800 1600 [ -800 1500 ] PLine
--800 1500 [ -500 1500 ] PLine
--500 1500 [ -500 1600 ] PLine
-1000 2650 [ 1000 2250 ] PLine
-1000 2250 [ 1200 2250 ] PLine
-400 1500 [ 400 2200 ] PLine
-400 2200 [ 400 2300 ] PLine
-400 2300 [ 700 2300 ] PLine
-700 2300 [ 700 2500 ] PLine
--450 2100 [ -450 1650 ] PLine
--450 1650 [ -400 1600 ] PLine
--500 3400 [ -500 3150 ] PLine
--500 3150 [ -650 3150 ] PLine
--650 3150 [ -650 2600 ] PLine
--100 2600 [ -100 2250 ] PLine
--1200 2500 [ -1200 2300 ] PLine
--300 2100 [ -250 2050 ] PLine
--250 2050 [ -250 1650 ] PLine
--250 1650 [ -300 1600 ] PLine
-800 1800 [ 800 2200 ] PLine
-600 900 [ 600 550 ] PLine
-600 550 [ 750 550 ] PLine
-700 2200 [ 700 1900 ] PLine
-600 1700 [ 600 2200 ] PLine
-1050 150 [ 1050 250 ] PLine
-1050 250 [ 500 250 ] PLine
-500 250 [ 500 1600 ] PLine
-0 4200 [ 0 4100 ] PLine
-900 4100 [ 900 3900 ] PLine
-800 3900 [ 800 3000 ] PLine
-600 3700 [ 600 3900 ] PLine
-600 4200 [ 600 4075 ] PLine
-600 4075 [ 450 4075 ] PLine
-450 4075 [ 450 2700 ] PLine
--400 2700 [ -400 2300 ] PLine
-300 3300 [ 350 3350 ] PLine
-350 3350 [ 350 3800 ] PLine
--1200 2800 [ -1000 2800 ] PLine
--1000 2800 [ -1000 3100 ] PLine
--900 3100 [ -850 3150 ] PLine
--850 3150 [ -850 3700 ] PLine
-50 150 [ 400 150 ] PLine
-400 150 [ 400 1300 ] PLine
--500 3100 [ -500 3000 ] PLine
--500 3000 [ -350 3000 ] PLine
--350 3000 [ -350 1300 ] PLine
--350 1300 [ -100 1300 ] PLine
-200 3700 [ 150 3750 ] PLine
-150 3750 [ 150 4425 ] PLine
-150 4425 [ 108 4479 ] PLine
-108 4479 [ 54 4593 ] PLine
--108 4479 [ 50 4600 ] PLine
-50 4600 [ 54 4593 ] PLine
--324 4479 [ -216 4479 ] PLine
--1100 1700 [ -1100 1450 ] PLine
--1050 1050 [ -1050 1800 ] PLine
--1050 1800 [ -1200 1800 ] PLine
-950 3524 [ 950 3200 ] PLine
-950 3700 [ 850 3700 ] PLine
-850 3700 [ 850 1200 ] PLine
--600 1200 [ -600 150 ] PLine
--600 150 [ -950 150 ] PLine
--540 4479 [ -550 4479 ] PLine
--550 4479 [ -550 3900 ] PLine
--350 3900 [ -350 3150 ] PLine
--350 3150 [ -300 3100 ] PLine
--432 4479 [ -450 4479 ] PLine
--450 4479 [ -450 3150 ] PLine
--450 3150 [ -382 3100 ] PLine
--382 3100 [ -400 3100 ] PLine
--800 4300 [ -800 3400 ] PLine
--750 4350 [ -750 3450 ] PLine
--750 3450 [ -700 3400 ] PLine
-400 3900 [ 400 3400 ] PLine
-1100 3400 [ 1100 3600 ] PLine
-1100 3600 [ 1026 3600 ] PLine
-1026 3600 [ 1026 3612 ] PLine
-50 SetLine
--100 3100 [ 0 3100 ] PLine
-0 3100 [ 0 2500 ] PLine
--200 2350 [ -200 1900 ] PLine
--200 1900 [ -100 1900 ] PLine
--200 1900 [ -200 1500 ] PLine
--200 1500 [ 0 1500 ] PLine
-0 1500 [ 200 1500 ] PLine
-200 1500 [ 200 1300 ] PLine
-800 4200 [ 800 4050 ] PLine
-800 4050 [ 700 4050 ] PLine
-700 4050 [ 700 3900 ] PLine
--750 450 [ -900 450 ] PLine
--900 450 [ -900 1300 ] PLine
--1200 1600 [ -1275 1600 ] PLine
--1275 1600 [ -1275 900 ] PLine
--900 900 [ -1275 900 ] PLine
--600 1900 [ -600 1750 ] PLine
--600 1750 [ -975 1750 ] PLine
--975 1750 [ -975 1300 ] PLine
--975 1300 [ -900 1300 ] PLine
--1200 2100 [ -1275 2100 ] PLine
--1275 2100 [ -1275 1600 ] PLine
--1200 3000 [ -1275 3000 ] PLine
--1275 3000 [ -1275 2100 ] PLine
--900 3400 [ -900 3525 ] PLine
--900 3525 [ -1275 3525 ] PLine
--1100 4000 [ -1275 4000 ] PLine
--1275 4000 [ -1275 3000 ] PLine
-75 3500 [ 75 2100 ] PLine
-75 2100 [ 0 2100 ] PLine
-75 2200 [ 200 2200 ] PLine
-0 4479 [ 0 4400 ] PLine
-0 4400 [ 75 4400 ] PLine
-75 4400 [ 75 3500 ] PLine
--300 3700 [ -300 3500 ] PLine
--300 3500 [ 75 3500 ] PLine
-900 2500 [ 900 2200 ] PLine
-1000 4000 [ 1000 4200 ] PLine
-25 sg
-0 sg
-10 SetLine
--1350 0 [ -1350 4900 ] PLine
--1350 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 0 ] PLine
-1350 0 [ -1350 0 ] PLine
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-10 SetLine
--1050 1400 [ -1050 1200 ] PLine
--1050 1200 [ -1150 1200 ] PLine
--1150 1200 [ -1150 1400 ] PLine
--1150 1400 [ -1050 1400 ] PLine
-10 SetLine
--50 3300 [ -100 3300 ] PLine
-10 SetLine
-250 3235 [ -50 3235 ] PLine
--50 3235 [ -50 3365 ] PLine
--50 3365 [ 250 3365 ] PLine
-250 3365 [ 250 3235 ] PLine
-10 SetLine
-300 3300 [ 250 3300 ] PLine
-10 SetLine
-250 3100 [ 300 3100 ] PLine
-10 SetLine
--50 3165 [ 250 3165 ] PLine
-250 3165 [ 250 3035 ] PLine
-250 3035 [ -50 3035 ] PLine
--50 3035 [ -50 3165 ] PLine
-10 SetLine
--100 3100 [ -50 3100 ] PLine
-10 SetLine
--50 3500 [ -100 3500 ] PLine
-10 SetLine
-250 3435 [ -50 3435 ] PLine
--50 3435 [ -50 3565 ] PLine
--50 3565 [ 250 3565 ] PLine
-250 3565 [ 250 3435 ] PLine
-10 SetLine
-300 3500 [ 250 3500 ] PLine
-10 SetLine
--1150 3700 [ -1200 3700 ] PLine
-10 SetLine
--450 3575 [ -1150 3575 ] PLine
--1150 3575 [ -1150 3825 ] PLine
--1150 3825 [ -450 3825 ] PLine
--450 3825 [ -450 3575 ] PLine
-10 SetLine
--400 3700 [ -450 3700 ] PLine
-10 SetLine
--850 1300 [ -900 1300 ] PLine
-10 SetLine
--150 1175 [ -850 1175 ] PLine
--850 1175 [ -850 1425 ] PLine
--850 1425 [ -150 1425 ] PLine
--150 1425 [ -150 1175 ] PLine
-10 SetLine
--100 1300 [ -150 1300 ] PLine
-10 SetLine
-550 2800 [ 600 2800 ] PLine
-10 SetLine
--150 2925 [ 550 2925 ] PLine
-550 2925 [ 550 2675 ] PLine
-550 2675 [ -150 2675 ] PLine
--150 2675 [ -150 2925 ] PLine
-10 SetLine
--200 2800 [ -150 2800 ] PLine
-10 SetLine
--450 2800 [ -400 2800 ] PLine
-10 SetLine
--1150 2925 [ -450 2925 ] PLine
--450 2925 [ -450 2675 ] PLine
--450 2675 [ -1150 2675 ] PLine
--1150 2675 [ -1150 2925 ] PLine
-10 SetLine
--1200 2800 [ -1150 2800 ] PLine
-10 SetLine
-0 2150 [ 0 2100 ] PLine
-10 SetLine
-65 2450 [ 65 2150 ] PLine
-65 2150 [ -65 2150 ] PLine
--65 2150 [ -65 2450 ] PLine
--65 2450 [ 65 2450 ] PLine
-10 SetLine
-0 2500 [ 0 2450 ] PLine
-10 SetLine
--1200 3050 [ -1200 3000 ] PLine
-10 SetLine
--1135 3350 [ -1135 3050 ] PLine
--1135 3050 [ -1265 3050 ] PLine
--1265 3050 [ -1265 3350 ] PLine
--1265 3350 [ -1135 3350 ] PLine
-10 SetLine
--1200 3400 [ -1200 3350 ] PLine
-10 SetLine
--950 2250 [ -1150 2250 ] PLine
--1150 2250 [ -1150 2350 ] PLine
--1150 2350 [ -950 2350 ] PLine
--950 2350 [ -950 2250 ] PLine
-10 SetLine
--1150 2550 [ -950 2550 ] PLine
--950 2550 [ -950 2450 ] PLine
--950 2450 [ -1150 2450 ] PLine
--1150 2450 [ -1150 2550 ] PLine
-10 SetLine
-850 2850 [ 1050 2850 ] PLine
-1050 2850 [ 1050 2750 ] PLine
-1050 2750 [ 850 2750 ] PLine
-850 2750 [ 850 2850 ] PLine
-10 SetLine
-500 1900 [ 450 1900 ] PLine
-10 SetLine
-1200 1775 [ 500 1775 ] PLine
-500 1775 [ 500 2025 ] PLine
-500 2025 [ 1200 2025 ] PLine
-1200 2025 [ 1200 1775 ] PLine
-10 SetLine
-1250 1900 [ 1200 1900 ] PLine
-10 SetLine
--1150 900 [ -1200 900 ] PLine
-10 SetLine
--150 725 [ -1150 725 ] PLine
--1150 725 [ -1150 1075 ] PLine
--1150 1075 [ -150 1075 ] PLine
--150 1075 [ -150 725 ] PLine
-10 SetLine
--100 900 [ -150 900 ] PLine
-10 SetLine
--1050 4000 [ -1100 4000 ] PLine
-10 SetLine
--750 3935 [ -1050 3935 ] PLine
--1050 3935 [ -1050 4065 ] PLine
--1050 4065 [ -750 4065 ] PLine
--750 4065 [ -750 3935 ] PLine
-10 SetLine
--700 4000 [ -750 4000 ] PLine
-10 SetLine
-750 3000 [ 700 3000 ] PLine
-10 SetLine
-1050 2935 [ 750 2935 ] PLine
-750 2935 [ 750 3065 ] PLine
-750 3065 [ 1050 3065 ] PLine
-1050 3065 [ 1050 2935 ] PLine
-10 SetLine
-1100 3000 [ 1050 3000 ] PLine
-10 SetLine
--250 3750 [ -50 3750 ] PLine
--50 3750 [ -50 3650 ] PLine
--50 3650 [ -250 3650 ] PLine
--250 3650 [ -250 3750 ] PLine
-10 SetLine
-200 900 [ 150 900 ] PLine
-10 SetLine
-270 950 [ 270 850 ] PLine
-10 SetLine
-200 850 [ 200 950 ] PLine
-200 950 [ 500 950 ] PLine
-500 950 [ 500 850 ] PLine
-500 850 [ 200 850 ] PLine
-10 SetLine
-500 900 [ 550 900 ] PLine
-10 SetLine
-250 850 [ 250 950 ] PLine
-10 SetLine
-260 850 [ 260 950 ] PLine
-10 SetLine
-600 3700 [ 650 3700 ] PLine
-10 SetLine
-530 3650 [ 530 3750 ] PLine
-10 SetLine
-600 3750 [ 600 3650 ] PLine
-600 3650 [ 300 3650 ] PLine
-300 3650 [ 300 3750 ] PLine
-300 3750 [ 600 3750 ] PLine
-10 SetLine
-300 3700 [ 250 3700 ] PLine
-10 SetLine
-550 3750 [ 550 3650 ] PLine
-10 SetLine
-540 3750 [ 540 3650 ] PLine
-10 SetLine
--750 550 100 PCircle
-10 SetLine
-0 550 100 PCircle
-10 SetLine
-750 550 100 PCircle
-10 SetLine
-768 5000 [ 768 5248 ] PLine
-768 5248 [ -768 5248 ] PLine
--768 5248 [ -768 5000 ] PLine
-10 SetLine
-1058 4900 [ -1058 4900 ] PLine
-10 SetLine
-1058 5000 [ 1058 4408 ] PLine
-1058 4408 [ -1058 4408 ] PLine
--1058 4408 [ -1058 5000 ] PLine
--1058 5000 [ 1058 5000 ] PLine
-10 SetLine
-1058 5000 [ -1058 5000 ] PLine
-10 SetLine
-768 4900 [ 768 4408 ] PLine
-10 SetLine
--768 4900 [ -768 4408 ] PLine
-10 SetLine
-900 200 [ 1100 200 ] PLine
-1100 200 [ 1100 100 ] PLine
-1100 100 [ 900 100 ] PLine
-900 100 [ 900 200 ] PLine
-10 SetLine
--100 200 [ 100 200 ] PLine
-100 200 [ 100 100 ] PLine
-100 100 [ -100 100 ] PLine
--100 100 [ -100 200 ] PLine
-10 SetLine
--1100 200 [ -900 200 ] PLine
--900 200 [ -900 100 ] PLine
--900 100 [ -1100 100 ] PLine
--1100 100 [ -1100 200 ] PLine
-10 SetLine
-916 3493 [ 900 3456 ] PLine
-900 3456 [ 939 3442 ] PLine
-939 3442 [ 953 3477 ] PLine
-10 SetLine
-988 3612 140 PCircle
-10 SetLine
--1000 1529 [ -1039 1490 ] PLine
-10 SetLine
--1000 1490 [ -1000 1910 ] PLine
--1000 1910 [ -1300 1910 ] PLine
--1300 1910 [ -1300 1490 ] PLine
--1300 1490 [ -1000 1490 ] PLine
-10 SetLine
-200 1730 [ 200 1670 ] PLine
-200 1670 [ 0 1670 ] PLine
-0 1670 [ 0 1730 ] PLine
-0 1730 [ 200 1730 ] PLine
-10 SetLine
-200 1700 [ 260 1700 ] PLine
-10 SetLine
-0 1700 [ -50 1700 ] PLine
-10 SetLine
-300 1270 [ 300 1330 ] PLine
-300 1330 [ 500 1330 ] PLine
-500 1330 [ 500 1270 ] PLine
-500 1270 [ 300 1270 ] PLine
-10 SetLine
-300 1300 [ 240 1300 ] PLine
-10 SetLine
-500 1300 [ 550 1300 ] PLine
-10 SetLine
--600 2270 [ -600 2330 ] PLine
--600 2330 [ -400 2330 ] PLine
--400 2330 [ -400 2270 ] PLine
--400 2270 [ -600 2270 ] PLine
-10 SetLine
--600 2300 [ -660 2300 ] PLine
-10 SetLine
--400 2300 [ -350 2300 ] PLine
-10 SetLine
--800 4230 [ -800 4170 ] PLine
--800 4170 [ -1000 4170 ] PLine
--1000 4170 [ -1000 4230 ] PLine
--1000 4230 [ -800 4230 ] PLine
-10 SetLine
--800 4200 [ -740 4200 ] PLine
-10 SetLine
--1000 4200 [ -1050 4200 ] PLine
-10 SetLine
-1000 3230 [ 1000 3170 ] PLine
-1000 3170 [ 800 3170 ] PLine
-800 3170 [ 800 3230 ] PLine
-800 3230 [ 1000 3230 ] PLine
-10 SetLine
-1000 3200 [ 1060 3200 ] PLine
-10 SetLine
-800 3200 [ 750 3200 ] PLine
-10 SetLine
--600 2470 [ -600 2530 ] PLine
--600 2530 [ -400 2530 ] PLine
--400 2530 [ -400 2470 ] PLine
--400 2470 [ -600 2470 ] PLine
-10 SetLine
--600 2500 [ -660 2500 ] PLine
-10 SetLine
--400 2500 [ -350 2500 ] PLine
-10 SetLine
--600 2070 [ -600 2130 ] PLine
--600 2130 [ -400 2130 ] PLine
--400 2130 [ -400 2070 ] PLine
--400 2070 [ -600 2070 ] PLine
-10 SetLine
--600 2100 [ -660 2100 ] PLine
-10 SetLine
--400 2100 [ -350 2100 ] PLine
-10 SetLine
--900 2130 [ -900 2070 ] PLine
--900 2070 [ -1100 2070 ] PLine
--1100 2070 [ -1100 2130 ] PLine
--1100 2130 [ -900 2130 ] PLine
-10 SetLine
--900 2100 [ -840 2100 ] PLine
-10 SetLine
--1100 2100 [ -1150 2100 ] PLine
-10 SetLine
-500 1130 [ 500 1070 ] PLine
-500 1070 [ 300 1070 ] PLine
-300 1070 [ 300 1130 ] PLine
-300 1130 [ 500 1130 ] PLine
-10 SetLine
-500 1100 [ 560 1100 ] PLine
-10 SetLine
-300 1100 [ 250 1100 ] PLine
-10 SetLine
-1000 2521 [ 1039 2560 ] PLine
-10 SetLine
-1000 2560 [ 1000 2140 ] PLine
-1000 2140 [ 1300 2140 ] PLine
-1300 2140 [ 1300 2560 ] PLine
-1300 2560 [ 1000 2560 ] PLine
-10 SetLine
-0 1870 [ 0 1930 ] PLine
-0 1930 [ 200 1930 ] PLine
-200 1930 [ 200 1870 ] PLine
-200 1870 [ 0 1870 ] PLine
-10 SetLine
-0 1900 [ -60 1900 ] PLine
-10 SetLine
-200 1900 [ 250 1900 ] PLine
-10 SetLine
-100 1470 [ 100 1530 ] PLine
-100 1530 [ 300 1530 ] PLine
-300 1530 [ 300 1470 ] PLine
-300 1470 [ 100 1470 ] PLine
-10 SetLine
-100 1500 [ 40 1500 ] PLine
-10 SetLine
-300 1500 [ 350 1500 ] PLine
-10 SetLine
--950 1650 [ -250 1650 ] PLine
--250 1650 [ -250 1850 ] PLine
--250 1850 [ -950 1850 ] PLine
--950 1850 [ -950 1775 ] PLine
--950 1775 [ -900 1775 ] PLine
--900 1775 [ -900 1725 ] PLine
--900 1725 [ -950 1725 ] PLine
--950 1725 [ -950 1650 ] PLine
-10 SetLine
-150 2250 [ 950 2250 ] PLine
-950 2250 [ 950 2450 ] PLine
-950 2450 [ 150 2450 ] PLine
-150 2450 [ 150 2375 ] PLine
-150 2375 [ 200 2375 ] PLine
-200 2375 [ 200 2325 ] PLine
-200 2325 [ 150 2325 ] PLine
-150 2325 [ 150 2250 ] PLine
-10 SetLine
-150 3950 [ 1150 3950 ] PLine
-1150 3950 [ 1150 4150 ] PLine
-1150 4150 [ 150 4150 ] PLine
-150 4150 [ 150 4075 ] PLine
-150 4075 [ 200 4075 ] PLine
-200 4075 [ 200 4025 ] PLine
-200 4025 [ 150 4025 ] PLine
-150 4025 [ 150 3950 ] PLine
-10 SetLine
--1050 3150 [ -250 3150 ] PLine
--250 3150 [ -250 3350 ] PLine
--250 3350 [ -1050 3350 ] PLine
--1050 3350 [ -1050 3275 ] PLine
--1050 3275 [ -1000 3275 ] PLine
--1000 3275 [ -1000 3225 ] PLine
--1000 3225 [ -1050 3225 ] PLine
--1050 3225 [ -1050 3150 ] PLine
-10 SetLine
-800 1075 [ 800 1675 ] PLine
-800 1675 [ 1200 1675 ] PLine
-1200 1675 [ 1200 1075 ] PLine
-1200 1075 [ 800 1075 ] PLine
-10 SetLine
-875 1075 [ 875 825 ] PLine
-875 825 [ 925 825 ] PLine
-925 825 [ 925 1075 ] PLine
-10 SetLine
-1075 1075 [ 1075 825 ] PLine
-1075 825 [ 1125 825 ] PLine
-1125 825 [ 1125 1075 ] PLine
-10 SetLine
-975 1075 [ 975 825 ] PLine
-975 825 [ 1025 825 ] PLine
-1025 825 [ 1025 1075 ] PLine
-10 SetLine
-996 1549 75 PCircle
-10 SetLine
-800 1425 [ 1200 1425 ] PLine
-10 SetLine
--100 4200 [ -25 4200 ] PLine
-10 SetLine
--100 3900 [ -100 4300 ] PLine
--100 4300 [ -500 4300 ] PLine
--500 4300 [ -500 3900 ] PLine
--500 3900 [ -100 3900 ] PLine
-10 SetLine
--100 4000 [ -25 4000 ] PLine
-10 SetLine
--1100 450 100 PCircle
-10 SetLine
-1100 450 100 PCircle
-10 SetLine
-1000 3430 [ 1000 3370 ] PLine
-1000 3370 [ 800 3370 ] PLine
-800 3370 [ 800 3430 ] PLine
-800 3430 [ 1000 3430 ] PLine
-10 SetLine
-1000 3400 [ 1060 3400 ] PLine
-10 SetLine
-800 3400 [ 750 3400 ] PLine
-10 SetText2
-0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char
-10 SetText2
-0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char
-0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char
-10 SetText2
-0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char
-10 SetText2
-0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-0 0 60 /PRndPad SetFlash
--1100 1450 Flash
--1100 1150 Flash
-300 3300 Flash
--100 3300 Flash
--100 3100 Flash
-300 3100 Flash
-300 3500 Flash
--100 3500 Flash
--400 3700 Flash
--1200 3700 Flash
--100 1300 Flash
--900 1300 Flash
--200 2800 Flash
-600 2800 Flash
--1200 2800 Flash
--400 2800 Flash
-0 2500 Flash
-0 2100 Flash
--1200 3400 Flash
--1200 3000 Flash
--900 2300 Flash
--1200 2300 Flash
--1200 2500 Flash
--900 2500 Flash
-800 2800 Flash
-1100 2800 Flash
-1250 1900 Flash
-450 1900 Flash
--100 900 Flash
--1200 900 Flash
--700 4000 Flash
--1100 4000 Flash
-1100 3000 Flash
-700 3000 Flash
--300 3700 Flash
-0 3700 Flash
-0 0 60 /PSqrPad SetFlash
-100 900 Flash
-0 0 60 /PRndPad SetFlash
-600 900 Flash
-0 0 60 /PSqrPad SetFlash
-700 3700 Flash
-0 0 60 /PRndPad SetFlash
-200 3700 Flash
-0 0 70 /PRndPad SetFlash
--750 550 Flash
--750 450 Flash
-0 550 Flash
-0 450 Flash
-750 550 Flash
-750 450 Flash
--648 4479 Flash
--540 4479 Flash
--432 4479 Flash
--324 4479 Flash
--216 4479 Flash
--108 4479 Flash
-0 4479 Flash
-108 4479 Flash
-216 4479 Flash
-324 4479 Flash
-432 4479 Flash
-540 4479 Flash
-648 4479 Flash
--594 4593 Flash
--486 4593 Flash
--378 4593 Flash
--270 4593 Flash
--162 4593 Flash
--54 4593 Flash
-54 4593 Flash
-162 4593 Flash
-270 4593 Flash
-378 4593 Flash
-486 4593 Flash
-594 4593 Flash
-0 0 177 /PRndPad SetFlash
-940 4536 Flash
--940 4536 Flash
-0 0 60 /PSqrPad SetFlash
-950 150 Flash
-0 0 60 /PRndPad SetFlash
-1050 150 Flash
-0 0 60 /PSqrPad SetFlash
--50 150 Flash
-0 0 60 /PRndPad SetFlash
-50 150 Flash
-0 0 60 /PSqrPad SetFlash
--1050 150 Flash
-0 0 60 /PRndPad SetFlash
--950 150 Flash
-0 0 50 /PRndPad SetFlash
-950 3524 Flash
-1026 3612 Flash
-950 3700 Flash
-0 0 60 /PSqrPad SetFlash
--1200 1600 Flash
-0 0 60 /PRndPad SetFlash
--1100 1700 Flash
--1200 1800 Flash
-300 1700 Flash
--100 1700 Flash
-200 1300 Flash
-600 1300 Flash
--700 2300 Flash
--300 2300 Flash
--700 4200 Flash
--1100 4200 Flash
-1100 3200 Flash
-700 3200 Flash
--700 2500 Flash
--300 2500 Flash
--700 2100 Flash
--300 2100 Flash
--800 2100 Flash
--1200 2100 Flash
-600 1100 Flash
-200 1100 Flash
-0 0 60 /PSqrPad SetFlash
-1200 2450 Flash
-0 0 60 /PRndPad SetFlash
-1100 2350 Flash
-1200 2250 Flash
--100 1900 Flash
-300 1900 Flash
-0 1500 Flash
-400 1500 Flash
-0 0 60 /PSqrPad SetFlash
--900 1600 Flash
-0 0 60 /PRndPad SetFlash
--800 1600 Flash
--700 1600 Flash
--600 1600 Flash
--500 1600 Flash
--400 1600 Flash
--300 1600 Flash
--300 1900 Flash
--400 1900 Flash
--500 1900 Flash
--600 1900 Flash
--700 1900 Flash
--800 1900 Flash
--900 1900 Flash
-0 0 60 /PSqrPad SetFlash
-200 2200 Flash
-0 0 60 /PRndPad SetFlash
-300 2200 Flash
-400 2200 Flash
-500 2200 Flash
-600 2200 Flash
-700 2200 Flash
-800 2200 Flash
-900 2200 Flash
-900 2500 Flash
-800 2500 Flash
-700 2500 Flash
-600 2500 Flash
-500 2500 Flash
-400 2500 Flash
-300 2500 Flash
-200 2500 Flash
-0 0 60 /PSqrPad SetFlash
-200 3900 Flash
-0 0 60 /PRndPad SetFlash
-300 3900 Flash
-400 3900 Flash
-500 3900 Flash
-600 3900 Flash
-700 3900 Flash
-800 3900 Flash
-900 3900 Flash
-1000 3900 Flash
-1100 3900 Flash
-1100 4200 Flash
-1000 4200 Flash
-900 4200 Flash
-800 4200 Flash
-700 4200 Flash
-600 4200 Flash
-500 4200 Flash
-400 4200 Flash
-300 4200 Flash
-200 4200 Flash
-0 0 60 /PSqrPad SetFlash
--1000 3100 Flash
-0 0 60 /PRndPad SetFlash
--900 3100 Flash
--800 3100 Flash
--700 3100 Flash
--600 3100 Flash
--500 3100 Flash
--400 3100 Flash
--300 3100 Flash
--300 3400 Flash
--400 3400 Flash
--500 3400 Flash
--600 3400 Flash
--700 3400 Flash
--800 3400 Flash
--900 3400 Flash
--1000 3400 Flash
-0 0 70 /PRndPad SetFlash
-900 800 Flash
-1100 800 Flash
-1000 800 Flash
-0 0 177 /PRndPad SetFlash
-1000 1550 Flash
-0 0 60 /PRndPad SetFlash
-0 4000 Flash
-0 4200 Flash
-0 0 250 /PRndPad SetFlash
--1100 450 Flash
-1100 450 Flash
-0 0 60 /PRndPad SetFlash
-1100 3400 Flash
-700 3400 Flash
-0 0 60 /PRndPad SetFlash
--1100 1450 Flash
--1100 1150 Flash
-300 3300 Flash
--100 3300 Flash
--100 3100 Flash
-300 3100 Flash
-300 3500 Flash
--100 3500 Flash
--400 3700 Flash
--1200 3700 Flash
--100 1300 Flash
--900 1300 Flash
--200 2800 Flash
-600 2800 Flash
--1200 2800 Flash
--400 2800 Flash
-0 2500 Flash
-0 2100 Flash
--1200 3400 Flash
--1200 3000 Flash
--900 2300 Flash
--1200 2300 Flash
--1200 2500 Flash
--900 2500 Flash
-800 2800 Flash
-1100 2800 Flash
-1250 1900 Flash
-450 1900 Flash
--100 900 Flash
--1200 900 Flash
--700 4000 Flash
--1100 4000 Flash
-1100 3000 Flash
-700 3000 Flash
--300 3700 Flash
-0 3700 Flash
-0 0 60 /PSqrPad SetFlash
-100 900 Flash
-0 0 60 /PRndPad SetFlash
-600 900 Flash
-0 0 60 /PSqrPad SetFlash
-700 3700 Flash
-0 0 60 /PRndPad SetFlash
-200 3700 Flash
-0 0 70 /PRndPad SetFlash
--750 550 Flash
--750 450 Flash
-0 550 Flash
-0 450 Flash
-750 550 Flash
-750 450 Flash
--648 4479 Flash
--540 4479 Flash
--432 4479 Flash
--324 4479 Flash
--216 4479 Flash
--108 4479 Flash
-0 4479 Flash
-108 4479 Flash
-216 4479 Flash
-324 4479 Flash
-432 4479 Flash
-540 4479 Flash
-648 4479 Flash
--594 4593 Flash
--486 4593 Flash
--378 4593 Flash
--270 4593 Flash
--162 4593 Flash
--54 4593 Flash
-54 4593 Flash
-162 4593 Flash
-270 4593 Flash
-378 4593 Flash
-486 4593 Flash
-594 4593 Flash
-0 0 177 /PRndPad SetFlash
-940 4536 Flash
--940 4536 Flash
-0 0 60 /PSqrPad SetFlash
-950 150 Flash
-0 0 60 /PRndPad SetFlash
-1050 150 Flash
-0 0 60 /PSqrPad SetFlash
--50 150 Flash
-0 0 60 /PRndPad SetFlash
-50 150 Flash
-0 0 60 /PSqrPad SetFlash
--1050 150 Flash
-0 0 60 /PRndPad SetFlash
--950 150 Flash
-0 0 50 /PRndPad SetFlash
-950 3524 Flash
-1026 3612 Flash
-950 3700 Flash
-0 0 60 /PSqrPad SetFlash
--1200 1600 Flash
-0 0 60 /PRndPad SetFlash
--1100 1700 Flash
--1200 1800 Flash
-300 1700 Flash
--100 1700 Flash
-200 1300 Flash
-600 1300 Flash
--700 2300 Flash
--300 2300 Flash
--700 4200 Flash
--1100 4200 Flash
-1100 3200 Flash
-700 3200 Flash
--700 2500 Flash
--300 2500 Flash
--700 2100 Flash
--300 2100 Flash
--800 2100 Flash
--1200 2100 Flash
-600 1100 Flash
-200 1100 Flash
-0 0 60 /PSqrPad SetFlash
-1200 2450 Flash
-0 0 60 /PRndPad SetFlash
-1100 2350 Flash
-1200 2250 Flash
--100 1900 Flash
-300 1900 Flash
-0 1500 Flash
-400 1500 Flash
-0 0 60 /PSqrPad SetFlash
--900 1600 Flash
-0 0 60 /PRndPad SetFlash
--800 1600 Flash
--700 1600 Flash
--600 1600 Flash
--500 1600 Flash
--400 1600 Flash
--300 1600 Flash
--300 1900 Flash
--400 1900 Flash
--500 1900 Flash
--600 1900 Flash
--700 1900 Flash
--800 1900 Flash
--900 1900 Flash
-0 0 60 /PSqrPad SetFlash
-200 2200 Flash
-0 0 60 /PRndPad SetFlash
-300 2200 Flash
-400 2200 Flash
-500 2200 Flash
-600 2200 Flash
-700 2200 Flash
-800 2200 Flash
-900 2200 Flash
-900 2500 Flash
-800 2500 Flash
-700 2500 Flash
-600 2500 Flash
-500 2500 Flash
-400 2500 Flash
-300 2500 Flash
-200 2500 Flash
-0 0 60 /PSqrPad SetFlash
-200 3900 Flash
-0 0 60 /PRndPad SetFlash
-300 3900 Flash
-400 3900 Flash
-500 3900 Flash
-600 3900 Flash
-700 3900 Flash
-800 3900 Flash
-900 3900 Flash
-1000 3900 Flash
-1100 3900 Flash
-1100 4200 Flash
-1000 4200 Flash
-900 4200 Flash
-800 4200 Flash
-700 4200 Flash
-600 4200 Flash
-500 4200 Flash
-400 4200 Flash
-300 4200 Flash
-200 4200 Flash
-0 0 60 /PSqrPad SetFlash
--1000 3100 Flash
-0 0 60 /PRndPad SetFlash
--900 3100 Flash
--800 3100 Flash
--700 3100 Flash
--600 3100 Flash
--500 3100 Flash
--400 3100 Flash
--300 3100 Flash
--300 3400 Flash
--400 3400 Flash
--500 3400 Flash
--600 3400 Flash
--700 3400 Flash
--800 3400 Flash
--900 3400 Flash
--1000 3400 Flash
-0 0 70 /PRndPad SetFlash
-900 800 Flash
-1100 800 Flash
-1000 800 Flash
-0 0 177 /PRndPad SetFlash
-1000 1550 Flash
-0 0 60 /PRndPad SetFlash
-0 4000 Flash
-0 4200 Flash
-0 0 250 /PRndPad SetFlash
--1100 450 Flash
-1100 450 Flash
-0 0 60 /PRndPad SetFlash
-1100 3400 Flash
-700 3400 Flash
-10 SetText2
-0 -225 875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 1125 1875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -1125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -525 3675 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -700 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -750 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char
-0 -696 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -640 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -588 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char
-0 -534 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -484 275 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char
-0 -380 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 -328 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 -272 275 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -168 275 [ [ 0 28 40 28 ] ] Char
-0 -55 275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -3 275 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 49 275 [ [ 0 65 0 0 ] ] Char
-0 69 275 [ [ 0 65 18 0 ] [ 36 65 18 0 ] ] Char
-0 177 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 233 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char
-0 335 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 387 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 437 275 [ [ 0 65 0 0 27 0 ] ] Char
-0 484 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 540 275 [ [ 0 65 11 0 ] [ 22 65 11 0 ] [ 22 65 34 0 ] [ 45 65 34 0 ] ] Char
-0 605 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 661 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 713 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 125 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 177 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 229 600 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 500 600 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-0 561 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 592 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -625 600 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -569 600 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -517 600 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -465 600 [ [ 0 65 0 0 ] ] Char
-0 -445 600 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-10 SetText2
-0 -300 4725 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-0 -248 4725 [ [ 0 65 0 0 ] ] Char
-0 -228 4725 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -176 4725 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -74 4725 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 300 4725 [ [ -31 56 -27 62 -20 65 -11 65 -4 62 0 56 0 50 -2 43 -4 40 -9 37 -22 31 -27 28 -29 25 -31 18 -31 9 -27 3 -20 0 -11 0 -4 3 0 9 ] ] Char
-0 248 4725 [ [ 0 65 0 0 ] ] Char
-0 228 4725 [ [ 0 65 0 0 ] [ 0 65 -15 65 -22 62 -27 56 -29 50 -31 40 -31 25 -29 15 -27 9 -22 3 -15 0 0 0 ] ] Char
-0 176 4725 [ [ 0 65 0 0 ] [ 0 65 -29 65 ] [ 0 34 -18 34 ] [ 0 0 -29 0 ] ] Char
-0 74 4725 [ [ -2 50 -2 53 -4 59 -6 62 -11 65 -20 65 -25 62 -27 59 -29 53 -29 46 -27 40 -22 31 0 0 -31 0 ] ] Char
-10 SetText2
-0 1100 2075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1050 1925 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 875 675 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1075 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 975 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -925 1475 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 175 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1050 2975 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 625 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 656 4325 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -825 1275 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-0 0 55 /PRndPad SetFlash
--200 2350 Flash
--200 1750 Flash
-200 1400 Flash
-0 0 55 /PRndPad SetFlash
--200 2350 Flash
--200 1750 Flash
-200 1400 Flash
-0 0 55 /PRndPad SetFlash
-300 1100 Flash
-0 0 55 /PRndPad SetFlash
-300 1100 Flash
-0 0 55 /PRndPad SetFlash
-175 3300 Flash
-0 0 55 /PRndPad SetFlash
-175 3300 Flash
-0 0 55 /PRndPad SetFlash
-1000 2650 Flash
-0 0 55 /PRndPad SetFlash
-1000 2650 Flash
-0 0 55 /PRndPad SetFlash
--450 2100 Flash
-0 0 55 /PRndPad SetFlash
--450 2100 Flash
-0 0 55 /PRndPad SetFlash
--650 2600 Flash
--100 2600 Flash
--100 2250 Flash
-0 0 55 /PRndPad SetFlash
--650 2600 Flash
--100 2600 Flash
--100 2250 Flash
-0 0 55 /PRndPad SetFlash
-800 1800 Flash
-0 0 55 /PRndPad SetFlash
-800 1800 Flash
-0 0 55 /PRndPad SetFlash
-700 1900 Flash
-0 0 55 /PRndPad SetFlash
-700 1900 Flash
-0 0 55 /PRndPad SetFlash
-600 1700 Flash
-0 0 55 /PRndPad SetFlash
-600 1700 Flash
-0 0 55 /PRndPad SetFlash
-500 1600 Flash
-0 0 55 /PRndPad SetFlash
-500 1600 Flash
-0 0 55 /PRndPad SetFlash
-0 4100 Flash
-900 4100 Flash
-0 0 55 /PRndPad SetFlash
-0 4100 Flash
-900 4100 Flash
-0 0 55 /PRndPad SetFlash
-800 3000 Flash
-0 0 55 /PRndPad SetFlash
-800 3000 Flash
-0 0 55 /PRndPad SetFlash
-600 3700 Flash
-0 0 55 /PRndPad SetFlash
-600 3700 Flash
-0 0 55 /PRndPad SetFlash
-450 2700 Flash
--400 2700 Flash
--400 2300 Flash
-0 0 55 /PRndPad SetFlash
-450 2700 Flash
--400 2700 Flash
--400 2300 Flash
-0 0 55 /PRndPad SetFlash
-350 3800 Flash
-0 0 55 /PRndPad SetFlash
-350 3800 Flash
-0 0 55 /PRndPad SetFlash
--850 3700 Flash
-0 0 55 /PRndPad SetFlash
--850 3700 Flash
-0 0 55 /PRndPad SetFlash
-400 1300 Flash
-0 0 55 /PRndPad SetFlash
-400 1300 Flash
-0 0 55 /PRndPad SetFlash
--1050 1050 Flash
-0 0 55 /PRndPad SetFlash
--1050 1050 Flash
-0 0 55 /PRndPad SetFlash
-0 4475 Flash
-75 4000 Flash
-1000 4000 Flash
-0 0 55 /PRndPad SetFlash
-0 4475 Flash
-75 4000 Flash
-1000 4000 Flash
-0 0 55 /PRndPad SetFlash
-950 3200 Flash
-0 0 55 /PRndPad SetFlash
-950 3200 Flash
-0 0 55 /PRndPad SetFlash
-850 1200 Flash
--600 1200 Flash
-0 0 55 /PRndPad SetFlash
-850 1200 Flash
--600 1200 Flash
-0 0 55 /PRndPad SetFlash
--550 3900 Flash
--350 3900 Flash
-0 0 55 /PRndPad SetFlash
--550 3900 Flash
--350 3900 Flash
-0 0 55 /PRndPad SetFlash
--800 4300 Flash
-0 0 55 /PRndPad SetFlash
--800 4300 Flash
-0 0 55 /PRndPad SetFlash
--750 4350 Flash
-0 0 55 /PRndPad SetFlash
--750 4350 Flash
-0 0 55 /PRndPad SetFlash
-400 3400 Flash
-0 0 55 /PRndPad SetFlash
-400 3400 Flash
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/sm0228.lpr b/usr.sbin/xntpd/gadget/sm0228.lpr
deleted file mode 100644
index cd39c9c..0000000
--- a/usr.sbin/xntpd/gadget/sm0228.lpr
+++ /dev/null
@@ -1,744 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:35:33 1992) show
-gsave
-Init
-8000 10500 Clipto
-4000 2800 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-0 0 70 /PRndPad SetFlash
--1100 1450 Flash
--1100 1150 Flash
-300 3300 Flash
--100 3300 Flash
--100 3100 Flash
-300 3100 Flash
-300 3500 Flash
--100 3500 Flash
--400 3700 Flash
--1200 3700 Flash
--100 1300 Flash
--900 1300 Flash
--200 2800 Flash
-600 2800 Flash
--1200 2800 Flash
--400 2800 Flash
-0 2500 Flash
-0 2100 Flash
--1200 3400 Flash
--1200 3000 Flash
--900 2300 Flash
--1200 2300 Flash
--1200 2500 Flash
--900 2500 Flash
-800 2800 Flash
-1100 2800 Flash
-1250 1900 Flash
-450 1900 Flash
--100 900 Flash
--1200 900 Flash
--700 4000 Flash
--1100 4000 Flash
-1100 3000 Flash
-700 3000 Flash
--300 3700 Flash
-0 3700 Flash
-0 0 70 /PSqrPad SetFlash
-100 900 Flash
-0 0 70 /PRndPad SetFlash
-600 900 Flash
-0 0 70 /PSqrPad SetFlash
-700 3700 Flash
-0 0 70 /PRndPad SetFlash
-200 3700 Flash
-0 0 80 /PRndPad SetFlash
--750 550 Flash
--750 450 Flash
-0 550 Flash
-0 450 Flash
-750 550 Flash
-750 450 Flash
--648 4479 Flash
--540 4479 Flash
--432 4479 Flash
--324 4479 Flash
--216 4479 Flash
--108 4479 Flash
-0 4479 Flash
-108 4479 Flash
-216 4479 Flash
-324 4479 Flash
-432 4479 Flash
-540 4479 Flash
-648 4479 Flash
--594 4593 Flash
--486 4593 Flash
--378 4593 Flash
--270 4593 Flash
--162 4593 Flash
--54 4593 Flash
-54 4593 Flash
-162 4593 Flash
-270 4593 Flash
-378 4593 Flash
-486 4593 Flash
-594 4593 Flash
-0 0 187 /PRndPad SetFlash
-940 4536 Flash
--940 4536 Flash
-0 0 70 /PSqrPad SetFlash
-950 150 Flash
-0 0 70 /PRndPad SetFlash
-1050 150 Flash
-0 0 70 /PSqrPad SetFlash
--50 150 Flash
-0 0 70 /PRndPad SetFlash
-50 150 Flash
-0 0 70 /PSqrPad SetFlash
--1050 150 Flash
-0 0 70 /PRndPad SetFlash
--950 150 Flash
-0 0 60 /PRndPad SetFlash
-950 3524 Flash
-1026 3612 Flash
-950 3700 Flash
-0 0 70 /PSqrPad SetFlash
--1200 1600 Flash
-0 0 70 /PRndPad SetFlash
--1100 1700 Flash
--1200 1800 Flash
-300 1700 Flash
--100 1700 Flash
-200 1300 Flash
-600 1300 Flash
--700 2300 Flash
--300 2300 Flash
--700 4200 Flash
--1100 4200 Flash
-1100 3200 Flash
-700 3200 Flash
--700 2500 Flash
--300 2500 Flash
--700 2100 Flash
--300 2100 Flash
--800 2100 Flash
--1200 2100 Flash
-600 1100 Flash
-200 1100 Flash
-0 0 70 /PSqrPad SetFlash
-1200 2450 Flash
-0 0 70 /PRndPad SetFlash
-1100 2350 Flash
-1200 2250 Flash
--100 1900 Flash
-300 1900 Flash
-0 1500 Flash
-400 1500 Flash
-0 0 70 /PSqrPad SetFlash
--900 1600 Flash
-0 0 70 /PRndPad SetFlash
--800 1600 Flash
--700 1600 Flash
--600 1600 Flash
--500 1600 Flash
--400 1600 Flash
--300 1600 Flash
--300 1900 Flash
--400 1900 Flash
--500 1900 Flash
--600 1900 Flash
--700 1900 Flash
--800 1900 Flash
--900 1900 Flash
-0 0 70 /PSqrPad SetFlash
-200 2200 Flash
-0 0 70 /PRndPad SetFlash
-300 2200 Flash
-400 2200 Flash
-500 2200 Flash
-600 2200 Flash
-700 2200 Flash
-800 2200 Flash
-900 2200 Flash
-900 2500 Flash
-800 2500 Flash
-700 2500 Flash
-600 2500 Flash
-500 2500 Flash
-400 2500 Flash
-300 2500 Flash
-200 2500 Flash
-0 0 70 /PSqrPad SetFlash
-200 3900 Flash
-0 0 70 /PRndPad SetFlash
-300 3900 Flash
-400 3900 Flash
-500 3900 Flash
-600 3900 Flash
-700 3900 Flash
-800 3900 Flash
-900 3900 Flash
-1000 3900 Flash
-1100 3900 Flash
-1100 4200 Flash
-1000 4200 Flash
-900 4200 Flash
-800 4200 Flash
-700 4200 Flash
-600 4200 Flash
-500 4200 Flash
-400 4200 Flash
-300 4200 Flash
-200 4200 Flash
-0 0 70 /PSqrPad SetFlash
--1000 3100 Flash
-0 0 70 /PRndPad SetFlash
--900 3100 Flash
--800 3100 Flash
--700 3100 Flash
--600 3100 Flash
--500 3100 Flash
--400 3100 Flash
--300 3100 Flash
--300 3400 Flash
--400 3400 Flash
--500 3400 Flash
--600 3400 Flash
--700 3400 Flash
--800 3400 Flash
--900 3400 Flash
--1000 3400 Flash
-0 0 80 /PRndPad SetFlash
-900 800 Flash
-1100 800 Flash
-1000 800 Flash
-0 0 187 /PRndPad SetFlash
-1000 1550 Flash
-0 0 70 /PRndPad SetFlash
-0 4000 Flash
-0 4200 Flash
-0 0 260 /PRndPad SetFlash
--1100 450 Flash
-1100 450 Flash
-0 0 70 /PRndPad SetFlash
-1100 3400 Flash
-700 3400 Flash
-0 0 65 /PRndPad SetFlash
--200 2350 Flash
--200 1750 Flash
-200 1400 Flash
-0 0 65 /PRndPad SetFlash
-300 1100 Flash
-0 0 65 /PRndPad SetFlash
-175 3300 Flash
-0 0 65 /PRndPad SetFlash
-1000 2650 Flash
-0 0 65 /PRndPad SetFlash
--450 2100 Flash
-0 0 65 /PRndPad SetFlash
--650 2600 Flash
--100 2600 Flash
--100 2250 Flash
-0 0 65 /PRndPad SetFlash
-800 1800 Flash
-0 0 65 /PRndPad SetFlash
-700 1900 Flash
-0 0 65 /PRndPad SetFlash
-600 1700 Flash
-0 0 65 /PRndPad SetFlash
-500 1600 Flash
-0 0 65 /PRndPad SetFlash
-0 4100 Flash
-900 4100 Flash
-0 0 65 /PRndPad SetFlash
-800 3000 Flash
-0 0 65 /PRndPad SetFlash
-600 3700 Flash
-0 0 65 /PRndPad SetFlash
-450 2700 Flash
--400 2700 Flash
--400 2300 Flash
-0 0 65 /PRndPad SetFlash
-350 3800 Flash
-0 0 65 /PRndPad SetFlash
--850 3700 Flash
-0 0 65 /PRndPad SetFlash
-400 1300 Flash
-0 0 65 /PRndPad SetFlash
--1050 1050 Flash
-0 0 65 /PRndPad SetFlash
-0 4475 Flash
-75 4000 Flash
-1000 4000 Flash
-0 0 65 /PRndPad SetFlash
-950 3200 Flash
-0 0 65 /PRndPad SetFlash
-850 1200 Flash
--600 1200 Flash
-0 0 65 /PRndPad SetFlash
--550 3900 Flash
--350 3900 Flash
-0 0 65 /PRndPad SetFlash
--800 4300 Flash
-0 0 65 /PRndPad SetFlash
--750 4350 Flash
-0 0 65 /PRndPad SetFlash
-400 3400 Flash
-grestore
-showpage
diff --git a/usr.sbin/xntpd/gadget/sst0126.lpr b/usr.sbin/xntpd/gadget/sst0126.lpr
deleted file mode 100644
index c3f1986..0000000
--- a/usr.sbin/xntpd/gadget/sst0126.lpr
+++ /dev/null
@@ -1,1118 +0,0 @@
-%!PS-Adobe-2.0
-%%Title: PADS Postscript Driver Header
-%%Creator: Andy Montalvo, 18 Lupine St., Lowell, MA 01851
-%%CreationDate: 06/08/90
-%%For: CAD Software, Littleton, MA
-%%EndComments
-%%BeginProcSet: Markers 1.0 0
-% marker attributes
-/MAttr_Width 1 def
-/MAttr_Size 0 def
-/MAttr_Type /M1 def
-% procedures
-/M1 { %def
-% draw marker 1: plus
-% Stack: - M1 -
- -2 0 rmoveto
- 4 0 rlineto
- -2 2 rmoveto
- 0 -4 rlineto
-} bind def
-/M2 { %def
-% draw marker 2: cross
-% Stack: - M2 -
- -2 -2 rmoveto
- 4 4 rlineto
- -4 0 rmoveto
- 4 -4 rlineto
-} bind def
-/M3 { %def
-% draw marker 3: square
-% Stack: - M3 -
- 0 2 rlineto
- 2 0 rlineto
- 0 -4 rlineto
- -4 0 rlineto
- 0 4 rlineto
- 2 0 rlineto
-} bind def
-/M4 { %def
-% draw marker 4: diamond
-% Stack: - M4 -
- 0 2 rlineto
- 2 -2 rlineto
- -2 -2 rlineto
- -2 2 rlineto
- 2 2 rlineto
-} bind def
-/M5 { %def
-% draw marker 5: hourglass
-% Stack: - M5 -
- 2 2 rlineto
- -4 0 rlineto
- 4 -4 rlineto
- -4 0 rlineto
- 2 2 rlineto
-} bind def
-/M6 { %def
-% draw marker 6: bowtie
-% Stack: - M6 -
- 2 2 rlineto
- 0 -4 rlineto
- -4 4 rlineto
- 0 -4 rlineto
- 2 2 rlineto
-} bind def
-/M7 { %def
-% draw marker 7: small plus (goes with char marker)
-% Stack: - M7 -
- -1 0 rmoveto
- 2 0 rlineto
- -1 1 rmoveto
- 0 -2 rlineto
-} bind def
-/Marker { %def
-% Command from driver: draw marker
-% STACK: x y Marker -
- MAttr_Size 0 gt
- {
- gsave
- moveto
- MAttr_Size 4 div dup scale
- MAttr_Type load exec
- 4 MAttr_Size div dup scale
- MAttr_Width setlinewidth
- stroke
- grestore
- } if
-} def
-%%EndProcSet: Markers 1.0 0
-%%BeginProcSet: Lib 1.0 0
-/sg { %def
-% Command from driver: set the gray scale 0 - 100
-% STACK: greylevel sg
- 100 div dup setgray /glev exch def
-} bind def
-/Circle { %def
-% draw a circle
-% STACK: x y radius Circle -
- 0 360 arc
-} bind def
-/RndAper { %def
-% select a round aperture
-% STACK: - RndAper -
- 1 setlinejoin
- 1 setlinecap
-} bind def
-/SqrAper { %def
-% select a square aperture
-% STACK: - SqrAper -
- 0 setlinejoin
- 2 setlinecap
-} bind def
-/Line { %def
-% draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] Line -
- 3 1 roll
- moveto
- true
- exch
- % This pushes the x then the y then does lineto
- { exch { false } { lineto true } ifelse } forall
- pop
-} bind def
-/Clipto { %def
-% set clipping rectangle from 0,0 to new values
-% STACK: x y Clipto -
- 0 0 moveto
- dup 0 exch lineto
- 2 copy lineto
- pop
- 0 lineto
- closepath
- clip
- newpath
-} bind def
-/Clip4 { %def
-% set clipping rectangle from xmin,ymin to xmax,ymax
-% STACK: xmin ymin xmax ymax Clip4 -
- 4 copy pop pop moveto
- 4 copy pop exch lineto pop
- 2 copy lineto
- exch pop exch pop lineto
- closepath
- clip
- newpath
-} bind def
-%%EndProcSet: Lib 1.0 0
-%%BeginProcSet: Lines 1.0 0
-% line attributes %
-/LAttr_Width 1 def
-% line procedures
-/PLine { %def
-% Cammand from driver: draw a set of connected lines
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- LAttr_Width setlinewidth
- stroke
-} bind def % PLine
-/Char { %def
-% Command from driver: draw a character at the current position
-% STACK: type x y stroke_array Char -
-% stroke array -- [ stroke1 stroke2 ... stroken ]
-% stroke -- connected staight lines
-% type = 0 if text 1 if marker
- gsave
- 4 1 roll
- translate
- 0 eq { TAttr_Width } { MAttr_Width } ifelse setlinewidth
- {
- dup length 2 gt
- {
- dup dup 0 get exch 1 get % get starting point
- 3 -1 roll % put x y before array
- dup length 2 sub 2 exch getinterval % delete first items from array
- Line
- stroke
- }
- {
- aload pop currentlinewidth 2 div Circle fill
- } ifelse
- } forall
- grestore
-} bind def % Char
-/PArc { %def
-% Command from driver: draw an arc
-% STACK: x y radius startangle deltaangle Arc -
- 10 div exch 10 div exch
- 2 copy pop add
- arc
- LAttr_Width setlinewidth
- stroke
-} bind def
-/PCircle { %def
-% Command from driver: draw an circle
-% STACK: x y radius PCircle -
- Circle
- LAttr_Width setlinewidth
- stroke
-} bind def
-%%EndProcSet: Lines 1.0 0
-%%BeginProcSet: Polygon 1.0 0
-% polygon attributes %
-/PAttr_ExtWidth 1 def
-/PAttr_IntWidth 1 def
-/PAttr_Grid 1 def
-% polygon procedures
-/LoopSet { %def
-% set up for loop condition
-% STACK: start end LoopSet low gridwidth high
- 2 copy lt { exch } if
- % make grid line up to absolute coordinates
- PAttr_Grid div truncate PAttr_Grid mul exch
- PAttr_Grid exch
-} bind def
-/Hatch { %def
-% draw cross hatch pattern in current path
-% STACK: - Hatch -
- pathbbox
- /ury exch def
- /urx exch def
- /lly exch def
- /llx exch def
- clip
- newpath
- llx urx LoopSet
- { % x loop
- dup lly exch ury moveto lineto
- } for
- lly ury LoopSet
- { % y loop
- llx exch dup urx exch moveto lineto
- } for
- PAttr_IntWidth setlinewidth
- stroke
-} bind def
-/PPoly { %def
-% Command from driver: draw a plygon
-% STACK: x1 y1 [ x2 y2 ... xn yn ] PLine -
- Line
- closepath
- gsave
- PAttr_IntWidth PAttr_Grid ge {fill} {Hatch} ifelse
- grestore
- PAttr_ExtWidth setlinewidth
- stroke
-} bind def
-%%EndProcSet: Polygon 1.0 0
-%%BeginProcSet: Text 1.0 0
-% text attributes %
-/TAttr_Mirr 0 def
-/TAttr_Orient 0 def
-/TAttr_Width 1 def
-% text procedures
-/Text { %def
-% Command from driver: Draw text
-% STACK: x y width string Text -
- gsave
- 4 2 roll
- translate
- TAttr_Mirr 0 gt
- {
- -1 1 scale
- } if
- TAttr_Orient rotate
- 0 0 moveto
- dup length dup 1 gt
- {
- exch dup stringwidth pop
- 4 -1 roll
- exch 2 copy
- lt
- {
- div 1 scale show
- }
- {
- sub
- 3 -1 roll 1 sub div
- 0 3 -1 roll ashow
- }
- ifelse
- }
- {
- pop
- show
- } ifelse
- grestore
-} bind def
-%%EndProcSet: Text 1.0 0
-%%BeginProcSet: FlashSymbols 1.0 0
-% flash symbol attributes %
-/FAttr_Type /PRndPad def
-/FAttr_Width 0 def
-/FAttr_Length 1 def
-/FAttr_Orient 0 def
-% flash symbol procedures
-/PRndPad { %def
-% Command from driver: draw an circular pad
-% STACK: - PCirclePad -
- FAttr_Width dup scale
- 0 0 .5 Circle
- fill
-} bind def
-/PSqrPad { %def
-% Draw an Square pad
-% STACK: - PRectPad -
- FAttr_Width dup scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/PRectPad { %def
-% Draw an rectangular pad
-% STACK: - PRectPad -
- FAttr_Length FAttr_Width scale
- .5 .5 moveto
- -.5 .5 lineto
- -.5 -.5 lineto
- .5 -.5 lineto
- closepath
- fill
-} bind def
-/POvalPad { %def
-% Draw an oval pad
-% STACK: - POvalPad -
- FAttr_Width setlinewidth
- FAttr_Length FAttr_Width sub 2 div dup
- neg 0 moveto
- 0 lineto
- RndAper
- stroke
-} bind def
-/Anl { %def
- 0 0 .5 Circle
- fill
- FAttr_Length FAttr_Width lt
- { % inner circle
- 0 0
- FAttr_Length 0 gt { FAttr_Length FAttr_Width div } { .5 } ifelse
- 2 div Circle
- 1 setgray
- fill
- glev setgray
- } if
-} bind def
-/PAnlPad { %def
-% Draw an annular pad
-% STACK: - PAnlPad -
- FAttr_Width dup scale
- Anl
-} bind def
-/PRelPad { %def
-% Draw an thermal relief pad
-% STACK: - PRelPad -
- PAnlPad
- 1 setgray
- .17 setlinewidth
- 0 setlinecap % the x
- 45 rotate
- .5 0 moveto -.5 0 lineto
- 0 .5 moveto 0 -.5 lineto
- stroke
- glev setgray
-} bind def
-/Flash { %def
-% Command from driver: Flash a symbol
-% STACK: x y Flash -
- FAttr_Width 0 gt
- {
- gsave
- translate
- FAttr_Orient rotate
- FAttr_Type load exec
- grestore
- } if
-} def
-%%EndProcSet: FlashSymbols 1.0 0
-%%BeginProcSet: SetAttr 1.0 0
-/SetLine { %def
-% Set the width of the lines
-% STACK: linewidth SetLine -
- /LAttr_Width exch def
- RndAper
-} bind def
-/SetPoly { %def
-% Set attribute of polygon
-% STACK: external_width internal_grid_width grid_spacing SetPoly -
- /PAttr_Grid exch def
- /PAttr_IntWidth exch def
- /PAttr_ExtWidth exch def
- RndAper
-} bind def
-/SetFlash { %def
-% Set Attributed of flash pad
-% STACK: orientation_angle length width aperture_type SetFlash -
- /FAttr_Type exch def
- FAttr_Type /PSqrPad eq FAttr_Type /PRectPad eq or
- { SqrAper } { RndAper } ifelse
- /FAttr_Width exch def
- /FAttr_Length exch def
- /FAttr_Orient exch 10 div def
-} bind def
-/SetMkr { %def
-% Set attributes of markers
-% STACK: linewidth size type SetMkr -
- /MAttr_Type exch def
- /MAttr_Size exch def
- /MAttr_Width exch def
- RndAper
-} bind def
-/SetText1 { %def
-% Set attributes of text
-% STACK: fontname height orient mirror SetMkr -
- /TAttr_Mirr exch def
- /TAttr_Orient exch 10 div def
- exch findfont exch scalefont setfont
- RndAper
-} bind def
-/SetText2 { %def
-% Set attributes of text
-% STACK: linewidth height mirror orient SetMkr -
- /TAttr_Width exch def
- RndAper
-} bind def
-%%EndProcSet: SetAttr 1.0 0
-%%BeginProcSet: Initialize 1.0 0
-/Init { %def
-% Initialize the driver
-% STACK: Init -
- 72 1000 div dup scale % Scale to 1/1000 inch
- 250 250 translate % make origin 1/4 inch from bottom left
- 1.5 setmiterlimit 1 RndAper % set line defaults
- 0 setgray % set color default
- /glev 0 def
-} def
-%%EndProcSet: Initialize 1.0 0
-%%EndProlog
-/Helvetica findfont 12 scalefont setfont
-35 760 moveto
-(gadget.job - Fri Aug 21 03:35:07 1992) show
-gsave
-Init
-8000 10500 Clipto
-4015 2626 translate
-0 rotate
-1 1 div dup scale
-75 sg
-50 sg
-25 sg
-0 sg
-10 SetLine
--1350 4700 [ -1350 4900 ] PLine
--1350 4900 [ -1150 4900 ] PLine
-10 SetLine
-1150 4900 [ 1350 4900 ] PLine
-1350 4900 [ 1350 4700 ] PLine
-10 SetLine
-1150 0 [ 1350 0 ] PLine
-1350 0 [ 1350 200 ] PLine
-10 SetLine
--1350 200 [ -1350 0 ] PLine
--1350 0 [ -1150 0 ] PLine
-10 SetLine
--1050 1400 [ -1050 1200 ] PLine
--1050 1200 [ -1150 1200 ] PLine
--1150 1200 [ -1150 1400 ] PLine
--1150 1400 [ -1050 1400 ] PLine
-10 SetLine
--50 3300 [ -100 3300 ] PLine
-10 SetLine
-250 3235 [ -50 3235 ] PLine
--50 3235 [ -50 3365 ] PLine
--50 3365 [ 250 3365 ] PLine
-250 3365 [ 250 3235 ] PLine
-10 SetLine
-300 3300 [ 250 3300 ] PLine
-10 SetLine
-250 3100 [ 300 3100 ] PLine
-10 SetLine
--50 3165 [ 250 3165 ] PLine
-250 3165 [ 250 3035 ] PLine
-250 3035 [ -50 3035 ] PLine
--50 3035 [ -50 3165 ] PLine
-10 SetLine
--100 3100 [ -50 3100 ] PLine
-10 SetLine
--50 3500 [ -100 3500 ] PLine
-10 SetLine
-250 3435 [ -50 3435 ] PLine
--50 3435 [ -50 3565 ] PLine
--50 3565 [ 250 3565 ] PLine
-250 3565 [ 250 3435 ] PLine
-10 SetLine
-300 3500 [ 250 3500 ] PLine
-10 SetLine
--1150 3700 [ -1200 3700 ] PLine
-10 SetLine
--450 3575 [ -1150 3575 ] PLine
--1150 3575 [ -1150 3825 ] PLine
--1150 3825 [ -450 3825 ] PLine
--450 3825 [ -450 3575 ] PLine
-10 SetLine
--400 3700 [ -450 3700 ] PLine
-10 SetLine
--850 1300 [ -900 1300 ] PLine
-10 SetLine
--150 1175 [ -850 1175 ] PLine
--850 1175 [ -850 1425 ] PLine
--850 1425 [ -150 1425 ] PLine
--150 1425 [ -150 1175 ] PLine
-10 SetLine
--100 1300 [ -150 1300 ] PLine
-10 SetLine
-550 2800 [ 600 2800 ] PLine
-10 SetLine
--150 2925 [ 550 2925 ] PLine
-550 2925 [ 550 2675 ] PLine
-550 2675 [ -150 2675 ] PLine
--150 2675 [ -150 2925 ] PLine
-10 SetLine
--200 2800 [ -150 2800 ] PLine
-10 SetLine
--450 2800 [ -400 2800 ] PLine
-10 SetLine
--1150 2925 [ -450 2925 ] PLine
--450 2925 [ -450 2675 ] PLine
--450 2675 [ -1150 2675 ] PLine
--1150 2675 [ -1150 2925 ] PLine
-10 SetLine
--1200 2800 [ -1150 2800 ] PLine
-10 SetLine
-0 2150 [ 0 2100 ] PLine
-10 SetLine
-65 2450 [ 65 2150 ] PLine
-65 2150 [ -65 2150 ] PLine
--65 2150 [ -65 2450 ] PLine
--65 2450 [ 65 2450 ] PLine
-10 SetLine
-0 2500 [ 0 2450 ] PLine
-10 SetLine
--1200 3050 [ -1200 3000 ] PLine
-10 SetLine
--1135 3350 [ -1135 3050 ] PLine
--1135 3050 [ -1265 3050 ] PLine
--1265 3050 [ -1265 3350 ] PLine
--1265 3350 [ -1135 3350 ] PLine
-10 SetLine
--1200 3400 [ -1200 3350 ] PLine
-10 SetLine
--950 2250 [ -1150 2250 ] PLine
--1150 2250 [ -1150 2350 ] PLine
--1150 2350 [ -950 2350 ] PLine
--950 2350 [ -950 2250 ] PLine
-10 SetLine
--1150 2550 [ -950 2550 ] PLine
--950 2550 [ -950 2450 ] PLine
--950 2450 [ -1150 2450 ] PLine
--1150 2450 [ -1150 2550 ] PLine
-10 SetLine
-850 2850 [ 1050 2850 ] PLine
-1050 2850 [ 1050 2750 ] PLine
-1050 2750 [ 850 2750 ] PLine
-850 2750 [ 850 2850 ] PLine
-10 SetLine
-500 1900 [ 450 1900 ] PLine
-10 SetLine
-1200 1775 [ 500 1775 ] PLine
-500 1775 [ 500 2025 ] PLine
-500 2025 [ 1200 2025 ] PLine
-1200 2025 [ 1200 1775 ] PLine
-10 SetLine
-1250 1900 [ 1200 1900 ] PLine
-10 SetLine
--1150 900 [ -1200 900 ] PLine
-10 SetLine
--150 725 [ -1150 725 ] PLine
--1150 725 [ -1150 1075 ] PLine
--1150 1075 [ -150 1075 ] PLine
--150 1075 [ -150 725 ] PLine
-10 SetLine
--100 900 [ -150 900 ] PLine
-10 SetLine
--1050 4000 [ -1100 4000 ] PLine
-10 SetLine
--750 3935 [ -1050 3935 ] PLine
--1050 3935 [ -1050 4065 ] PLine
--1050 4065 [ -750 4065 ] PLine
--750 4065 [ -750 3935 ] PLine
-10 SetLine
--700 4000 [ -750 4000 ] PLine
-10 SetLine
-750 3000 [ 700 3000 ] PLine
-10 SetLine
-1050 2935 [ 750 2935 ] PLine
-750 2935 [ 750 3065 ] PLine
-750 3065 [ 1050 3065 ] PLine
-1050 3065 [ 1050 2935 ] PLine
-10 SetLine
-1100 3000 [ 1050 3000 ] PLine
-10 SetLine
--250 3750 [ -50 3750 ] PLine
--50 3750 [ -50 3650 ] PLine
--50 3650 [ -250 3650 ] PLine
--250 3650 [ -250 3750 ] PLine
-10 SetLine
-200 900 [ 150 900 ] PLine
-10 SetLine
-270 950 [ 270 850 ] PLine
-10 SetLine
-200 850 [ 200 950 ] PLine
-200 950 [ 500 950 ] PLine
-500 950 [ 500 850 ] PLine
-500 850 [ 200 850 ] PLine
-10 SetLine
-500 900 [ 550 900 ] PLine
-10 SetLine
-250 850 [ 250 950 ] PLine
-10 SetLine
-260 850 [ 260 950 ] PLine
-10 SetLine
-600 3700 [ 650 3700 ] PLine
-10 SetLine
-530 3650 [ 530 3750 ] PLine
-10 SetLine
-600 3750 [ 600 3650 ] PLine
-600 3650 [ 300 3650 ] PLine
-300 3650 [ 300 3750 ] PLine
-300 3750 [ 600 3750 ] PLine
-10 SetLine
-300 3700 [ 250 3700 ] PLine
-10 SetLine
-550 3750 [ 550 3650 ] PLine
-10 SetLine
-540 3750 [ 540 3650 ] PLine
-10 SetLine
--750 550 100 PCircle
-10 SetLine
-0 550 100 PCircle
-10 SetLine
-750 550 100 PCircle
-10 SetLine
-768 5000 [ 768 5248 ] PLine
-768 5248 [ -768 5248 ] PLine
--768 5248 [ -768 5000 ] PLine
-10 SetLine
-1058 4900 [ -1058 4900 ] PLine
-10 SetLine
-1058 5000 [ 1058 4408 ] PLine
-1058 4408 [ -1058 4408 ] PLine
--1058 4408 [ -1058 5000 ] PLine
--1058 5000 [ 1058 5000 ] PLine
-10 SetLine
-1058 5000 [ -1058 5000 ] PLine
-10 SetLine
-768 4900 [ 768 4408 ] PLine
-10 SetLine
--768 4900 [ -768 4408 ] PLine
-10 SetLine
-900 200 [ 1100 200 ] PLine
-1100 200 [ 1100 100 ] PLine
-1100 100 [ 900 100 ] PLine
-900 100 [ 900 200 ] PLine
-10 SetLine
--100 200 [ 100 200 ] PLine
-100 200 [ 100 100 ] PLine
-100 100 [ -100 100 ] PLine
--100 100 [ -100 200 ] PLine
-10 SetLine
--1100 200 [ -900 200 ] PLine
--900 200 [ -900 100 ] PLine
--900 100 [ -1100 100 ] PLine
--1100 100 [ -1100 200 ] PLine
-10 SetLine
-916 3493 [ 900 3456 ] PLine
-900 3456 [ 939 3442 ] PLine
-939 3442 [ 953 3477 ] PLine
-10 SetLine
-988 3612 140 PCircle
-10 SetLine
--1000 1529 [ -1039 1490 ] PLine
-10 SetLine
--1000 1490 [ -1000 1910 ] PLine
--1000 1910 [ -1300 1910 ] PLine
--1300 1910 [ -1300 1490 ] PLine
--1300 1490 [ -1000 1490 ] PLine
-10 SetLine
-200 1730 [ 200 1670 ] PLine
-200 1670 [ 0 1670 ] PLine
-0 1670 [ 0 1730 ] PLine
-0 1730 [ 200 1730 ] PLine
-10 SetLine
-200 1700 [ 260 1700 ] PLine
-10 SetLine
-0 1700 [ -50 1700 ] PLine
-10 SetLine
-300 1270 [ 300 1330 ] PLine
-300 1330 [ 500 1330 ] PLine
-500 1330 [ 500 1270 ] PLine
-500 1270 [ 300 1270 ] PLine
-10 SetLine
-300 1300 [ 240 1300 ] PLine
-10 SetLine
-500 1300 [ 550 1300 ] PLine
-10 SetLine
--600 2270 [ -600 2330 ] PLine
--600 2330 [ -400 2330 ] PLine
--400 2330 [ -400 2270 ] PLine
--400 2270 [ -600 2270 ] PLine
-10 SetLine
--600 2300 [ -660 2300 ] PLine
-10 SetLine
--400 2300 [ -350 2300 ] PLine
-10 SetLine
--800 4230 [ -800 4170 ] PLine
--800 4170 [ -1000 4170 ] PLine
--1000 4170 [ -1000 4230 ] PLine
--1000 4230 [ -800 4230 ] PLine
-10 SetLine
--800 4200 [ -740 4200 ] PLine
-10 SetLine
--1000 4200 [ -1050 4200 ] PLine
-10 SetLine
-1000 3230 [ 1000 3170 ] PLine
-1000 3170 [ 800 3170 ] PLine
-800 3170 [ 800 3230 ] PLine
-800 3230 [ 1000 3230 ] PLine
-10 SetLine
-1000 3200 [ 1060 3200 ] PLine
-10 SetLine
-800 3200 [ 750 3200 ] PLine
-10 SetLine
--600 2470 [ -600 2530 ] PLine
--600 2530 [ -400 2530 ] PLine
--400 2530 [ -400 2470 ] PLine
--400 2470 [ -600 2470 ] PLine
-10 SetLine
--600 2500 [ -660 2500 ] PLine
-10 SetLine
--400 2500 [ -350 2500 ] PLine
-10 SetLine
--600 2070 [ -600 2130 ] PLine
--600 2130 [ -400 2130 ] PLine
--400 2130 [ -400 2070 ] PLine
--400 2070 [ -600 2070 ] PLine
-10 SetLine
--600 2100 [ -660 2100 ] PLine
-10 SetLine
--400 2100 [ -350 2100 ] PLine
-10 SetLine
--900 2130 [ -900 2070 ] PLine
--900 2070 [ -1100 2070 ] PLine
--1100 2070 [ -1100 2130 ] PLine
--1100 2130 [ -900 2130 ] PLine
-10 SetLine
--900 2100 [ -840 2100 ] PLine
-10 SetLine
--1100 2100 [ -1150 2100 ] PLine
-10 SetLine
-500 1130 [ 500 1070 ] PLine
-500 1070 [ 300 1070 ] PLine
-300 1070 [ 300 1130 ] PLine
-300 1130 [ 500 1130 ] PLine
-10 SetLine
-500 1100 [ 560 1100 ] PLine
-10 SetLine
-300 1100 [ 250 1100 ] PLine
-10 SetLine
-1000 2521 [ 1039 2560 ] PLine
-10 SetLine
-1000 2560 [ 1000 2140 ] PLine
-1000 2140 [ 1300 2140 ] PLine
-1300 2140 [ 1300 2560 ] PLine
-1300 2560 [ 1000 2560 ] PLine
-10 SetLine
-0 1870 [ 0 1930 ] PLine
-0 1930 [ 200 1930 ] PLine
-200 1930 [ 200 1870 ] PLine
-200 1870 [ 0 1870 ] PLine
-10 SetLine
-0 1900 [ -60 1900 ] PLine
-10 SetLine
-200 1900 [ 250 1900 ] PLine
-10 SetLine
-100 1470 [ 100 1530 ] PLine
-100 1530 [ 300 1530 ] PLine
-300 1530 [ 300 1470 ] PLine
-300 1470 [ 100 1470 ] PLine
-10 SetLine
-100 1500 [ 40 1500 ] PLine
-10 SetLine
-300 1500 [ 350 1500 ] PLine
-10 SetLine
--950 1650 [ -250 1650 ] PLine
--250 1650 [ -250 1850 ] PLine
--250 1850 [ -950 1850 ] PLine
--950 1850 [ -950 1775 ] PLine
--950 1775 [ -900 1775 ] PLine
--900 1775 [ -900 1725 ] PLine
--900 1725 [ -950 1725 ] PLine
--950 1725 [ -950 1650 ] PLine
-10 SetLine
-150 2250 [ 950 2250 ] PLine
-950 2250 [ 950 2450 ] PLine
-950 2450 [ 150 2450 ] PLine
-150 2450 [ 150 2375 ] PLine
-150 2375 [ 200 2375 ] PLine
-200 2375 [ 200 2325 ] PLine
-200 2325 [ 150 2325 ] PLine
-150 2325 [ 150 2250 ] PLine
-10 SetLine
-150 3950 [ 1150 3950 ] PLine
-1150 3950 [ 1150 4150 ] PLine
-1150 4150 [ 150 4150 ] PLine
-150 4150 [ 150 4075 ] PLine
-150 4075 [ 200 4075 ] PLine
-200 4075 [ 200 4025 ] PLine
-200 4025 [ 150 4025 ] PLine
-150 4025 [ 150 3950 ] PLine
-10 SetLine
--1050 3150 [ -250 3150 ] PLine
--250 3150 [ -250 3350 ] PLine
--250 3350 [ -1050 3350 ] PLine
--1050 3350 [ -1050 3275 ] PLine
--1050 3275 [ -1000 3275 ] PLine
--1000 3275 [ -1000 3225 ] PLine
--1000 3225 [ -1050 3225 ] PLine
--1050 3225 [ -1050 3150 ] PLine
-10 SetLine
-800 1075 [ 800 1675 ] PLine
-800 1675 [ 1200 1675 ] PLine
-1200 1675 [ 1200 1075 ] PLine
-1200 1075 [ 800 1075 ] PLine
-10 SetLine
-875 1075 [ 875 825 ] PLine
-875 825 [ 925 825 ] PLine
-925 825 [ 925 1075 ] PLine
-10 SetLine
-1075 1075 [ 1075 825 ] PLine
-1075 825 [ 1125 825 ] PLine
-1125 825 [ 1125 1075 ] PLine
-10 SetLine
-975 1075 [ 975 825 ] PLine
-975 825 [ 1025 825 ] PLine
-1025 825 [ 1025 1075 ] PLine
-10 SetLine
-996 1549 75 PCircle
-10 SetLine
-800 1425 [ 1200 1425 ] PLine
-10 SetLine
--100 4200 [ -25 4200 ] PLine
-10 SetLine
--100 3900 [ -100 4300 ] PLine
--100 4300 [ -500 4300 ] PLine
--500 4300 [ -500 3900 ] PLine
--500 3900 [ -100 3900 ] PLine
-10 SetLine
--100 4000 [ -25 4000 ] PLine
-10 SetLine
--1100 450 100 PCircle
-10 SetLine
-1100 450 100 PCircle
-10 SetLine
-1000 3430 [ 1000 3370 ] PLine
-1000 3370 [ 800 3370 ] PLine
-800 3370 [ 800 3430 ] PLine
-800 3430 [ 1000 3430 ] PLine
-10 SetLine
-1000 3400 [ 1060 3400 ] PLine
-10 SetLine
-800 3400 [ 750 3400 ] PLine
-10 SetText2
-0 -1175 1225 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1175 1279 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -1175 1310 [ [ -65 29 -65 6 -37 4 -40 6 -43 13 -43 20 -40 27 -34 31 -25 34 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 75 3375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3375 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 75 3175 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3175 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 75 3575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 129 3575 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -825 3850 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 3850 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -575 1450 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -521 1450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -490 1450 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 125 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 179 2950 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 210 2950 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -825 2950 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -771 2950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 -100 2250 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -100 2304 [ [ -53 0 -56 4 -65 11 0 11 ] ] Char
-0 -100 2335 [ [ -65 4 -65 29 -40 15 -40 22 -37 27 -34 29 -25 31 -18 31 -9 29 -3 25 0 18 0 11 -3 4 -6 2 -12 0 ] ] Char
-10 SetText2
-0 -1275 3200 [ [ -50 34 -56 31 -62 27 -65 22 -65 13 -62 9 -56 4 -50 2 -40 0 -25 0 -15 2 -9 4 -3 9 0 13 0 22 -3 27 -9 31 -15 34 ] ] Char
-0 -1275 3254 [ [ -50 2 -53 2 -59 4 -62 6 -65 11 -65 20 -62 25 -59 27 -53 29 -46 29 -40 27 -31 22 0 0 0 31 ] ] Char
-10 SetText2
-0 -1100 2375 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2375 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1100 2575 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -1046 2575 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -1015 2575 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 900 2875 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 954 2875 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 985 2875 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 800 2050 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 854 2050 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 885 2050 [ [ 31 65 9 0 ] [ 0 65 31 65 ] ] Char
-10 SetText2
-0 -675 1100 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -621 1100 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 -590 1100 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -925 4075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -871 4075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 875 3075 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 929 3075 [ [ 11 65 4 62 2 56 2 50 4 43 9 40 18 37 25 34 29 28 31 21 31 12 29 6 27 3 20 0 11 0 4 3 2 6 0 12 0 21 2 28 6 34 13 37 22 40 27 43 29 50 29 56 27 62 20 65 11 65 ] ] Char
-10 SetText2
-0 -200 3775 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 ] ] Char
-0 -146 3775 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 325 975 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 377 975 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 450 3775 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 502 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -775 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -732 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -50 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -7 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 700 675 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 743 675 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -1175 4650 [ [ 22 65 22 15 20 6 18 3 13 0 9 0 4 3 2 6 0 15 0 21 ] ] Char
-0 -1132 4650 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 1172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 1222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 1274 125 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 125 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 172 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 222 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 274 125 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -875 125 [ [ 0 65 0 0 27 0 ] ] Char
-0 -828 125 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -778 125 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -726 125 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1075 3425 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] [ 20 12 34 -6 ] ] Char
-0 1131 3425 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1075 1475 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 -1127 1475 [ [ -11 -65 -4 -62 -2 -56 -2 -50 -4 -43 -9 -40 -18 -37 -25 -34 -29 -28 -31 -21 -31 -12 -29 -6 -27 -3 -20 0 -11 0 -4 -3 -2 -6 0 -12 0 -21 -2 -28 -6 -34 -13 -37 -22 -40 -27 -43 -29 -50 -29 -56 -27 -62 -20 -65 -11 -65 ] ] Char
-10 SetText2
-0 25 1750 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 77 1750 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 108 1750 [ [ 13 65 6 62 2 53 0 37 0 28 2 12 6 3 13 0 18 0 25 3 29 12 31 28 31 37 29 53 25 62 18 65 13 65 ] ] Char
-10 SetText2
-0 350 1350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1350 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1350 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2350 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2350 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -925 4250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -873 4250 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 850 3250 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 902 3250 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -550 2550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -550 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -498 2150 [ [ 27 56 25 62 18 65 13 65 6 62 2 53 0 37 0 21 2 9 6 3 13 0 15 0 22 3 27 9 29 18 29 21 27 31 22 37 15 40 13 40 6 37 2 31 0 21 ] ] Char
-10 SetText2
-0 -1025 2150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 -973 2150 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 350 1150 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 402 1150 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 433 1150 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 1200 2125 [ [ 0 -65 0 0 ] [ 0 -65 -20 -65 -27 -62 -29 -59 -31 -53 -31 -46 -29 -40 -27 -37 -20 -34 0 -34 ] [ -15 -34 -31 0 ] ] Char
-0 1148 2125 [ [ -31 -65 -9 0 ] [ 0 -65 -31 -65 ] ] Char
-10 SetText2
-0 50 1950 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 102 1950 [ [ 29 43 27 34 22 28 15 25 13 25 6 28 2 34 0 43 0 46 2 56 6 62 13 65 15 65 22 62 27 56 29 43 29 28 27 12 22 3 15 0 11 0 4 3 2 9 ] ] Char
-10 SetText2
-0 150 1550 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 202 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 233 1550 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -675 1950 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 1950 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 450 2550 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 502 2550 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 500 4275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 552 4275 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -675 3450 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -623 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 950 1700 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 1002 1700 [ [ 29 65 6 65 4 37 6 40 13 43 20 43 27 40 31 34 34 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -350 4325 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -298 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1225 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 -1169 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 -1117 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1125 600 [ [ 0 65 0 0 ] [ 0 65 18 0 ] [ 36 65 18 0 ] [ 36 65 36 0 ] ] Char
-0 1181 600 [ [ 0 65 0 0 ] [ 31 65 31 0 ] [ 0 34 31 34 ] ] Char
-0 1233 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 800 3450 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 852 3450 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 883 3450 [ [ 22 65 0 21 34 21 ] [ 22 65 22 0 ] ] Char
-10 SetText2
-0 -225 875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 1125 1875 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -1125 2775 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -525 3675 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-10 SetText2
-0 -700 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -750 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char
-0 -696 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -640 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -588 275 [ [ 34 50 31 56 27 62 22 65 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 34 25 ] [ 22 25 34 25 ] ] Char
-0 -534 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 -484 275 [ [ 15 65 15 0 ] [ 0 65 31 65 ] ] Char
-0 -380 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 ] [ 0 34 20 34 27 31 29 28 31 21 31 12 29 6 27 3 20 0 0 0 ] ] Char
-0 -328 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 -272 275 [ [ 0 65 31 0 ] [ 31 65 0 0 ] ] Char
-0 -168 275 [ [ 0 28 40 28 ] ] Char
-0 -55 275 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -3 275 [ [ 0 65 0 0 ] [ 0 65 31 0 ] [ 31 65 31 0 ] ] Char
-0 49 275 [ [ 0 65 0 0 ] ] Char
-0 69 275 [ [ 0 65 18 0 ] [ 36 65 18 0 ] ] Char
-0 177 275 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-0 233 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] ] Char
-0 335 275 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 387 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-0 437 275 [ [ 0 65 0 0 27 0 ] ] Char
-0 484 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 540 275 [ [ 0 65 11 0 ] [ 22 65 11 0 ] [ 22 65 34 0 ] [ 45 65 34 0 ] ] Char
-0 605 275 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 661 275 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 46 29 40 27 37 20 34 0 34 ] [ 15 34 31 0 ] ] Char
-0 713 275 [ [ 0 65 0 0 ] [ 0 65 29 65 ] [ 0 34 18 34 ] [ 0 0 29 0 ] ] Char
-10 SetText2
-0 125 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 177 600 [ [ 0 65 0 0 ] [ 0 65 20 65 27 62 29 59 31 53 31 43 29 37 27 34 20 31 0 31 ] ] Char
-0 229 600 [ [ 31 56 27 62 20 65 11 65 4 62 0 56 0 50 2 43 4 40 9 37 22 31 27 28 29 25 31 18 31 9 27 3 20 0 11 0 4 3 0 9 ] ] Char
-10 SetText2
-0 500 600 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-0 561 600 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 592 600 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 -625 600 [ [ 18 65 0 0 ] [ 18 65 36 0 ] [ 6 21 29 21 ] ] Char
-0 -569 600 [ [ 0 65 0 18 2 9 6 3 13 0 18 0 25 3 29 9 31 18 31 65 ] ] Char
-0 -517 600 [ [ 0 65 0 0 ] [ 0 65 15 65 22 62 27 56 29 50 31 40 31 25 29 15 27 9 22 3 15 0 0 0 ] ] Char
-0 -465 600 [ [ 0 65 0 0 ] ] Char
-0 -445 600 [ [ 13 65 9 62 4 56 2 50 0 40 0 25 2 15 4 9 9 3 13 0 22 0 27 3 31 9 34 15 36 25 36 40 34 50 31 56 27 62 22 65 13 65 ] ] Char
-10 SetText2
-0 1100 2075 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1050 1925 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 875 675 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 1075 675 [ [ 2 50 2 53 4 59 6 62 11 65 20 65 25 62 27 59 29 53 29 46 27 40 22 31 0 0 31 0 ] ] Char
-10 SetText2
-0 975 675 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -925 1475 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 175 3775 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 -1050 2975 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-10 SetText2
-0 625 4325 [ [ 0 53 4 56 11 65 11 0 ] ] Char
-0 656 4325 [ [ 4 65 29 65 15 40 22 40 27 37 29 34 31 25 31 18 29 9 25 3 18 0 11 0 4 3 2 6 0 12 ] ] Char
-10 SetText2
-0 -825 1275 [ [ 20 56 20 0 ] [ 0 28 40 28 ] ] Char
-grestore
-showpage
diff --git a/usr.sbin/xntpd/hints/README b/usr.sbin/xntpd/hints/README
deleted file mode 100644
index f7fdb72..0000000
--- a/usr.sbin/xntpd/hints/README
+++ /dev/null
@@ -1,12 +0,0 @@
-README file for directory ./hints of the NTP Version 3 distribution
-
-This directory contains files with hints for particular architectures.
-
-All files are derived from the earlier README.<machine> files.
-I have tried to adjust these files to match the current state of
-affairs of this xntp distribution. The information contained in the
-files may or may not be completely correct. But these files contain
-valuable hints for specific architectures.
-
-Frank Kardel 93/12/3
-
diff --git a/usr.sbin/xntpd/hints/aux b/usr.sbin/xntpd/hints/aux
deleted file mode 100644
index aa7ccbb..0000000
--- a/usr.sbin/xntpd/hints/aux
+++ /dev/null
@@ -1,159 +0,0 @@
-Last revision: 09-Aug-1993
-
-Included in this distribution of XNTP V3 is a configuration file suitable
-for use under Apple's A/UX Version 3.0.x While it may work with
-other versions, it has not been tested. To make the executables follow
-the steps outlined below.
-
-*** NOTE: You must have gcc installed to successfully compile the current
-distribution; the native cc supplied with A/UX will NOT correctly compile
-this source. See the FAQ in comp.unix.aux for places to obtain gcc from
-and how to install it.
-
-Now, you need to create the makefiles:
-
- % make refconf
-
-First of all, you need to edit Config.local to make sure that BINDIR is
-correct for where you wish the programs to be "installed". The default
-(and what I use) is /usr/local/etc. Make sure that DEFS_LOCAL and
-CLOCKDEFS are commented out!
-
-
-After this is done (you should be told that your system is A/UX 3), make
-xntpd (the options to 'gcc' are held in compilers/aux3.gcc):
-
- % make
-
-I do not normally use the `make install' option and so have not verified its
-compatibility with A/UX. Rather, I pull out each of the executables and
-place them in the locally appropriate locations.
-
-At this point you need to set things up so that 'xntpd' is started upon
-boot-up. You can do this in 1 of 2 ways: either add entries in /etc/inittab
-or create and use an /etc/rc.local file.
-
-By default, A/UX doesn't have one, so you'll need to add the following to
-/etc/inittab:
-
- net6:2:wait:/etc/syslogd # set to "wait" to run a syslog daemon
-+ jmj0:2:wait:/etc/rc.local 1>/dev/syscon 2>&1 # Local stuff
- dbg2::wait:/etc/telinit v # turn off init's verbose mode
-
-Now, the look of /etc/rc.local is as follows:
-
- #!/bin/sh
- :
- : rc.local
- :
- # @(#)Copyright Apple Computer 1987 Version 1.17 of rc.sh on 91/11/08 15:56:21 (ATT 1.12)
-
-
- # Push line discipline/set the device so it will print
- /etc/line_sane 1
- echo " "
- echo "Entering rc.local..."
-
- set `/bin/who -r`
- if [ "$7" = 2 ]
- then
- /bin/echo " now setting the time..."
- /usr/local/etc/ntpdate -s -b <host.domain>
- sleep 5
- #
- # start up xntpd if we want
- #
- if [ -f /etc/ntp.conf ]
- then
- /bin/echo " setting tick and tickadj..."
- /usr/local/etc/tickadj -t 16672 -a 54
- sleep 5
- /bin/echo " starting xntpd..."
- /usr/local/etc/xntpd <&- > /dev/null 2>&1
- sleep 5
- fi
- #
- fi
-
- echo "Leaving rc.local..."
-
-There are a few things to notice about the above:
-
- o When run, 'ntpdate' forces your clock to the time returned by the
- host(s) specified by <host.domain> (you'll need to replace this
- be the IP address(es) of your timehosts. This is good since it gets
- things close to start off with.
-
- o 'tickadj' is also called. This does two things: changes the
- default value of 'tick' (which the the amount of time, in ms, that
- is added to the clock every 1/60 seconds) and changes the value
- of 'tickadj' which the the amount that is added or subtracted
- from 'tickadj' when adjtime() is called.
-
- Now Mac clocks are pretty bad and tend to be slow. Sooo, instead of
- having A/UX add the default of 16666ms every 1/60th of a second,
- you want it to add more so that it keeps better time. The above
- value works for me but your "best" value may be different and will
- likely require some fooling around to find the best value.
-
- A/UX's default value of 'tickadj' is 1666 which is too big for
- 'xntpd'... so it also needs to be adjusted.
-
-
-Finally, before A/UX and 'xntpd' will work happily together, you need to
-patch the kernel. This is due to the fact that A/UX attempts to keep the
-UNIX-software clock and the Mac-hardware clock in sync. Now both of these
-are too good. Also, 'xntpd' will be attempting to adjust the software
-clock as well, so having A/UX muck around with it is asking for headaches.
-What you therefore need to do is tell the kernel _not_ to sync the s/w clock
-with the h/w one. This is done using 'adb'. The following is a shell script
-that will do the patch for you:
-
- #! /bin/sh
- adb -w /unix <<!
- init_time_fix_timeout?4i
- init_time_fix_timeout?w 0x4e75
- init_time_fix_timeout?4i
- $q
- !
-
-This must be done _every_ time you create a new kernel (via newconfig or
-newunix) or else 'xntpd' will go crazy.
-
-John Dundas was the original porter of xntpd and a lot of the additions
-and A/UX-ports are from him. I got involved when I wanted to run 'xntpd'
-on jagubox. It was also around this time that the base-patchlevel of
-'xntpd' changed relatively significantly so John may not be up on this
-version (called the "jones" version).
-
-The original kernel patch (which patched 'time_fix_timeout') was from
-Richard Todd. I suggest patching 'init_time_fix_timeout' which prevents
-'time_fix_timeout' from even being called.
-
-TECHNICAL NOTES:
-
- o As configured (see machines/aux3), 'xntpd' will log messages via syslogd
- using the LOC_LOCAL1 facility. I would suggest the following in
- /etc/syslog.conf:
-
- local1.notice /usr/adm/ntpd-syslog
-
- o As mentioned above, the clocks on A/UX and Macs are kinda bad. Not
- only that, but logging in and out of the MacOS mode as well as
- extensive floppy use causes A/UX to drop and lose clock interupts
- (these are sent every 1/60th of a second). So, if you do these
- activities a lot, you find out that you lose about 300ms of time
- (i.e., you become 300ms slow). 'xntpd' default way of handling this
- is to called 'settimeofday()' and step the clock to the correct
- time. I prefer having 'xntpd' slew the clock back into line by
- making gradual adjustments to the clock over a coupla minutes
- or so. It's for this reason that SLEWALWAYS is defined in
- include/ntp_machine.h for SYS_AUX3.
-
-Good luck! If you have problems under A/UX feel free to contact me (e-mail
-is preferred).
---
- Jim Jagielski | "That is no ordinary rabbit... 'tis the
- jim@jagubox.gsfc.nasa.gov | most foul, cruel and bad-tempered
- NASA/GSFC, Code 734.4 | rodent you ever set eyes on"
- Greenbelt, MD 20771 | Tim the Enchanter
diff --git a/usr.sbin/xntpd/hints/bsdi b/usr.sbin/xntpd/hints/bsdi
deleted file mode 100644
index 3ab518b..0000000
--- a/usr.sbin/xntpd/hints/bsdi
+++ /dev/null
@@ -1,61 +0,0 @@
-README.bsdi
-
-Author: Bdale Garbee, bdale@gag.com
-Last revision: 16 July 1993
-
-Included in this distribution of XNTP is a configuration file suitable
-for use with the BSDI BSD/386 operation system. It has been tested against
-the version 1.0 "production release", but should work with any 0.9.X "gamma
-release" version if anyone still cares. I'm using the stock gcc provided
-with the OS.
-
-[ As the pmake is badly broken on these systems at the time of this writing
- the only way to compile is to call make like this "make -e MAKE=make [target]"
- - Frank Kardel - 93/12/3 ]
-
-To date, I haven't used this with any hardware clocks, but I will probably
-get around to trying a Spectracom WWVB receiver at some point, and I'm hacking
-on an interface for the Rockwell Navcore 5 GPS widget in my "copious spare
-time".
-
-The config file is Config.bsdi, and the following steps should be all that
-are required to install and use the bits.
-
-To build the software:
-
- rm -f Config.local
- make refconf
- make
-
-To install the software:
-
- make install
-
- This will place all of the executables in /usr/local/etc. The config
- file is expected to be /usr/local/etc/xntp.conf and the key file for
- the optional authentication is /etc/ntp.keys.
-
- Craft a config file and a key file, and put them in the right places.
- There is information on how to do this elsewhere in the documentation,
- the only thing I'll mention is that I put the drift file in
- /var/log/ntp.drift, and the authdelay on my 486DX/50 system is
- 0.000064. Your mileage will vary, learn to use the authspeed tools
- if you're going to authenticate.
-
- In the file /etc/rc.local, make sure that the invocation of ntpd is
- commented out, and add an invocation of xntpd. Here's what I'm using:
-
- echo -n 'starting local daemons:'
-
- if [ -f /etc/ntp.keys -a -f /usr/local/etc/xntp.conf ]; then
- echo -n ' xntpd'; /usr/local/etc/xntpd
- fi
-
- #XXX# echo -n ' ntpd'; /usr/libexec/ntpd -t
-
-At this point, you should be good to go. Try running /usr/local/etc/xntpd and
-using ntpq or xntpdc to see if things are working, then pay attention the next
-time you reboot to make sure that xntpd is being invoked, and use ntpq or
-xntpdc again to make sure all is well.
-
-Enjoy!
diff --git a/usr.sbin/xntpd/hints/decosf1 b/usr.sbin/xntpd/hints/decosf1
deleted file mode 100644
index bc4ce0b..0000000
--- a/usr.sbin/xntpd/hints/decosf1
+++ /dev/null
@@ -1,40 +0,0 @@
-Some major changes were necessary to make xntp v3 run on the DEC Alpha
-hardware running DEC OSF/1. All "long" and "u_long" declarations and
-casts in the code were changed to "LONG" and "U_LONG" and a new header
-file (include/ntp_types.h) was added. The new header file defines
-LONG as int and U_LONG as u_int for the Alpha hardware and as long
-and u_long for anything else. A couple of #ifs where changed in
-ntpq and xntpdc to get the result of a signal defined correctly. The
-Config.decosf1 file built the programs here with no problems.
-
-I don't have a radio clock here, so none of that code has been tested.
-I have run xntpd, xntpdc, xntpres, ntpq, ntpdate, and tickadj under
-DEC OSF/1 v1.2-2 (BL10).
-
-Mike Iglesias Internet: iglesias@draco.acs.uci.edu
-University of California, Irvine BITNET: iglesias@uci
-Office of Academic Computing uucp: ...!ucbvax!ucivax!iglesias
-Distributed Computing Support phone: (714) 856-6926
-
-Support for NTP Version 2 is included with the current OSF/1 release. If
-you are upgrading to NTP Version 3 with this distribution, you should not
-use the xntpd or ntpq programs that come with the OSF/1 release. The
-older programs should be replaced by the newer programs of the same name,
-either in situ or via a link to a tranquil spot like /usr/local/bin. The
-make install script in the this distribution don't work due to a silly
-install program incompatibility, so you will need to copy the programs by
-hand.
-
-Don't use the setup utility to install or configure the xntpd installation,
-as it will cheerfully clobber your painstakingly crafted ntp.conf program.
-However, assuming you put this file in /etc/ntp.conf, you can use the
-/sbin/init.d/xntpd script to start and stop the daemon.
-
-This distribution compiles with nominal mumur with the stock cc compiler
-that comes with OSF/1.
-
-Dave Mills
-Electrical Engineering Department
-Unibergisty of Delabunch
-mills@udel.edu
-
diff --git a/usr.sbin/xntpd/hints/hpux b/usr.sbin/xntpd/hints/hpux
deleted file mode 100644
index f0e231d..0000000
--- a/usr.sbin/xntpd/hints/hpux
+++ /dev/null
@@ -1,92 +0,0 @@
-Last update: Sun Mar 13 15:05:31 PST 1994
-
-This file hopefully describes the whatever and however of how to get xntp
-running on hpux 7.0 and later s300. s400, s700, and s800.
-
-First off, all the standard disclaimers hold here ... HP doesn't have anthing
-to do with this stuff. I fool with it in my spare time because we use it and
-because I like to. We just happen to have a lot of HP machines around here :-)
-Xntpd has been in use here for several years and has a fair amount of mileage
-on various HP platforms within the company. I can't really guarantee bug fixes
-but I'd certainly like to hear about bugs and I won't hestitate to look at
-any fixes sent to me.
-
-Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now.
-This stuff has run here on pretty much everything from 8.0 upward on s300,
-s700, and s800. It is known to run on 7.0 s300/s400 but all reports are
-from the field and not my personal experience.
-
-If you are lucky enough to have a s300 or s400 with 9.03, then you no longer
-have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you
-will have to wait on 10.0 which will have adjtime(2) and a supported though
-a bit older version of xntpd.
-
-Next, let me explain a bit about how this stuff works on HP-UX's that do not
-have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
-daemon. Instead of the adjtime(2) system call, we use a library routine to
-talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
-causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
-code provided here is NOT a general replacement for adjtime(2) ... use of
-this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results.
-
-What to do to get this stuff running ?
-
- * If you are running an OS less than 10.0 or do not have a s300/s400
- with 9.03 or better
- -> cd machines
- -> vi hpux
- -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9])
- -> cd ..
-
- * Say "make makeconfig"
-
- * Say "make", sit back for a few minutes.
-
- * cd authstuff
- * Say "./authcert < certdata" and check the output. Every line should
- end with "OK" ... if not, we got trouble.
- * Now try "./authspeed auth.samplekeys". What we want to
- remember here is the "authentication delay in CPU time"
- * cd ..
-
- * Say "make install"
-
- * I'd suggest reading the xntp docs about now :-) ... seriously !!
-
- * One thing I have added to this version of xntpd is a way to select
- config files if you are sharing /usr/local thru NFS or whatever.
- If the file /usr/local/etc/xntp.conf happens to be a directory, the
- files in that directory are searched until a match is found. The
- rules for a match are:
-
- 1. Our hostname
- 2. default.<machine id> (as in default.375 or default.850)
- 3. default
-
- * Ok, make sure adjtimed is running (just start it up for now with
- "/usr/local/etc/adjtimed"). Using -z as an option will get you
- a usage message.
-
- * Now start up xntpd and watch it work.
-
- * Make sure that adjtimed gets started at boot right before xntpd.
- We do this in /etc/netbsdsrc. They must both run as root !!
-
-Possible problems ?
-
- * On some 320's and 835's we have had to run adjtimed with "-p 45" or
- so to get rid of syslog messages about "last adjust did not finish".
-
- * At 9.0, there is a problem with DIAGMON (patch available from the
- response center) which causes it to delete the message queue that
- adjtimed/xntpd use to communicate. (see next note for result)
-
- * Xntpd has been known to get really ticked off when adjtime() fails
- which is usually only while running the emulation code on HP-UX.
- When it gets mad, it usually jumps the clock into never never land.
- Possible reasons for this are adjtimed being killed or just never
- started or adjtimed being completely swapped out on a really busy
- machine (newer adjtimed try to lock themselves in memory to prevent
- this one).
-
-Anything else ... just drop me a line at ken@sdd.hp.com
diff --git a/usr.sbin/xntpd/hints/linux b/usr.sbin/xntpd/hints/linux
deleted file mode 100644
index 0efc12b..0000000
--- a/usr.sbin/xntpd/hints/linux
+++ /dev/null
@@ -1,9 +0,0 @@
-
-Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
-------------
-
- With this configuration, xntp should build an run right out of the box
-(see generic hints for how-to). If you really need to run xntp on any earlier
-versions of the kernel or libc, or have any other question not covered in the
-READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
-free to ask me (duwe@informatik.uni-erlangen.de)
diff --git a/usr.sbin/xntpd/hints/notes-xntp-v3 b/usr.sbin/xntpd/hints/notes-xntp-v3
deleted file mode 100644
index ba027f2..0000000
--- a/usr.sbin/xntpd/hints/notes-xntp-v3
+++ /dev/null
@@ -1,119 +0,0 @@
-Notes for NTP Version 3
-
-This version operates in much the same manner as Version 2 with the
-following changes and additions:
-
-1. The protocol machinery operates in conformance with the RFC1305 NTP
- Version 3 specification. The most visible characteristic of this
- version is that the poll intervals for all polls, even selected
- ones, is significantly increased. This is especially desirable when
- serving a large client population. This implementation supports
- previous versions as non-configured peers; for version-2 configured
- peers a "version 2" keyword should be included on the "peer" line.
-
-2. The configuration file has a new keyword: statfile <file>, where
- <file> is the name of a statistics file." When present, each clock
- update generates an entry of the form:
-
- <day> <sec>.<frac> <addr> <status> <offset> <delay> <disp>
-
- where <day> is the modified Julian day, <sec>.<frac> is the time of
- day, <addr> is the peer address and <status> is the peer status.
- The <offset>, <delay> and <disp> are the measured offset, delay and
- dispersion, respectively, of the peer clock relative to the local
- clock. About once per day the current file is closed and a new one
- created with names <file>.<gen>, where <gen> starts at one and
- increments for each new generation.
-
-3. A number of additional platforms are supported. See ./Config file
- for details.
-
-4. A driver for the TrueTime 468DC GOES Synchronized Clock is
- included. This driver (refclock_goes.c) should also work for other
- TrueTime radio clocks, since all use the same format.
-
-5. A replacement driver for the Spectracom 8170 WWVB Synchronized
- Clock is included. This driver (refclock_wwvb.c) (a) does not
- require a 1-pulse-per-second signal, (b) supports both format 0
- (original 8170) and format 2 (Netclock/2 and upgraded 8170), (c)
- can be connected to more than one computer and (d) automatically
- compensates for all serial baud rates.
-
-6. A driver for the German time/frequency station DCF77 is included.
- This requires a special STREAMS module.
-
-7. In Version 2 special line-discipline modules were required for the
- CHU and WWVB drivers. This code continues to work in Version 3,
- although it is no longer needed for the WWVB driver. However, this
- code does not work under STREAMS, as used in SunOS 4.1.1.
- Equivalent STREAMS modules are supplied with Version 3.
-
-8. Support for an external 1-pulse-per-second (pps) signal is
- provided. The signal is connected to a serial port (see
- xntpd/ntp_loopfilter.c for details). When present the leading edge
- of the pulse establishes the on-time epoch within an interval
- established by the selected radio clock or other NTP time server.
- Use of the pps is indicated when the tattletale displayed by ntpq
- changes from "*" to "o".
-
-9. The clock-selection and poll-update procedures have been modified
- slightly in order to achieve better performance on high speed LANs
- with compromise in performance on typical WANs.
-
-10. In order to comply with U.S. Commerce Department regulations, the DES
- encryption routine lib/authdes.c cannot be exported. For exportable
- versions of this distribution a DES-encrypted version of this routine
- lib/authdes.c.des is included along with an unencrypted version
- lib/authdes.c.export, which allows normal operation, but without the
- NTP authentication feature. Further information is available in the
- lib/authdes.c.export file.
-
-11. As an alternative to the DES-based authentication mechanism, an
- implementation of the RSA Message Digest 5 algorithm is provided.
- (see applicable copyright information in the library files).
-
-12. A driver for the Magnavox MX4200 GPS clock.
-
-13. A STREAMS module which captures carrier-detect data-lead transitions to
- connect a precision source of 1-pps, yet avoid the ugly overhead in the
- usual STREAMS processing. See the ppsclock subdirectory.
-
-14. Support for the Apple A/UX operating system and enhanced support for the
- Hewlet-Packard HP/UX operating system. See the various README and Config
- files for further information.
-
-See the COPYRIGHT file for authors and copyright information. Note that some
-modules in this distribution contain copyright information that supersedes
-the copyright information in that file.
-
-If I missed something or neglected to give due credit, please advise.
-
-David L. Mills
-University of Delaware
-31 May 1992, amended 23 July 1992, 25 October 1992
-
-Bugs and notes
-
-A bug in the original tty_clk_STREAMS.c module has been fixed.
-
-The poll-interval randomization feature of poll_update (in
-xntpd/ntp_proto.c) has been extended to apply when the poll interval is
-increased, as well as reduced. This spreads the update messages in time
-and helps avoid unpleasant bursts of messages.
-
-In the clock_select algorithm the peers selected for combining are
-limited to those survivors at the lowest stratum, not the entire list.
-This helps avoid whiplash when large numbers of peers are at the same
-stratum.
-
-The number formerly displayed by ntpq as "compliance" is now the time
-constant of integration.
-
-The DNS resolver xntpd/ntp_intres.c is now integrated into xntpd, making
-configuration of multiple hosts easier.
-
-System and peer event are now written to the system log at priority
-LOG_INFO.
-
-The leap-second code was fixed to avoid broadcasting leap warnings on
-all except the last day of June and December.
diff --git a/usr.sbin/xntpd/hints/parse b/usr.sbin/xntpd/hints/parse
deleted file mode 100644
index d252351..0000000
--- a/usr.sbin/xntpd/hints/parse
+++ /dev/null
@@ -1,105 +0,0 @@
-Compilation:
- Usual thing: rm -f Config.local ; make for vanilla
- make refconf for reference clock (e. g. DCF77)
-
-Directory contents:
-
- hints/PARSE - this file
-
- xntpd/refclock_parse.c
- - reference clock support for DCF77/GPS in xntp
- parse/parse.c
- - Reference clock data parser framework
- parse/parse_conf.c
- - parser configuration (clock types)
- parse/clk_meinberg.c
- - Meinberg clock formats (DCF U/A 31, PZF 535, GPS166)
- parse/clk_schmid.c
- - Schmid receiver (DCF77)
- parse/clk_rawdcf.c
- - 100/200ms pulses via 50 Baud line (DCF77)
- parse/clk_dcf7000.c
- - ELV DCF7000 (DCF77)
- parse/clk_trimble.c
- - Trimble SV6 GPS receiver
-
- If you want to add new clock types please check
- with kardel@informatik.uni-erlangen.de. These files
- implement the conversion of RS232 data streams into
- timing information used by refclock_parse.c which is
- mostly generic except for NTP configuration constants.
-
- parse/Makefile.kernel
- - *SIMPLE* makefile to build a loadable STREAMS
- module for SunOS 4.x / SunOS 5.x systems
-
- parse/parsestreams.c
- - SUN Streams module (loadable) for radio clocks
- This streams module is designed for SunOS 4.1.X.
-
- parse/parsesolaris.c
- - SUN Streams module (loadable) for radio clocks.
- This streams module is designed for SunOS 5.x
- Beware this is still new - so it might crash
- your machine (we have seen it working, though).
-
- parse/parsetest.c
- - simple test program for STREAMS module. Its so simple,
- that it doesn't even set TTY-modes, thus they got to
- be correct on startup - works for Meinberg receivers
-
- parse/testdcf.c
- - test program for raw DCF77 (100/200ms pulses)
- receivers
-
- include/parse.h - interface to "parse" module and more
- include/parse_conf.h
- - interface to "parse" configuration
-
- include/sys/parsestreams.h
- - STREAMS specific definitions
-
- scripts/support
- - scripts (perl & sh) for statistics and rc startup
- the startup scripts are used in Erlangen for
- starting the daemon on a variety of Suns and HPs
- and for Reference Clock startup on Suns
- These scripts may or may not be helpful to you.
-
-Supported clocks:
- Meinberg DCF U/A 31
- Meinberg PZF535/TCXO (Software revision PZFUERL 4.6)
- Meinberg PZF535/OCXO (Software revision PZFUERL 4.6)
- Meinberg GPS166 (Software version for Uni-Erlangen)
- ELV DCF7000 (not recommended - casual/emergency use only)
- Conrad DCF77 receiver (email: time@informatik.uni-erlangen.de)
- + level converter
- TimeBrick (email: time@informatik.uni-erlangen.de)
- Schmid Receiver Kit
- Trimble SV6 GPS receiver
-
-Addresses:
- Meinberg Funkuhren
- Auf der Landwehr 22
- 31812 Bad Pyrmont
- Germany
- Tel.: 05281/20 18
- FAX: 05281/60 81 80
-
- ELV Kundenservice
- Postfach 1000
- 26787 Leer
- Germany
- Tel.: 0491/60 08 88
-
- Walter Schmidt
- Eichwisrain 14
- 8634 Hombrechtikon
- Switzerland
-
-If you have problems mail to:
-
- time@informatik.uni-erlangen.de
-
-We'll help (conditions permitting)
-
diff --git a/usr.sbin/xntpd/hints/refclocks b/usr.sbin/xntpd/hints/refclocks
deleted file mode 100644
index 34b2ea9..0000000
--- a/usr.sbin/xntpd/hints/refclocks
+++ /dev/null
@@ -1,32 +0,0 @@
-This is a short overview for the reference clocks currently supported
-by xntp V3. (Ultimate wisdom can be obtained from xntpd/refclock_*.c
-this file was derived from that information - unfortunately some comments
-in the files tend to get stale - so use with caution)
-
-Refclock address Type
-127.127.0.x no clock (fails to configure)
-127.127.1.x local clock - use local clock as reference
-127.127.2.x no clock (fails to configure)
-127.127.3.x PSTI 1010/1020 WWV Clock
-127.127.4.x SPECTRACOM WWVB receiver 8170 and Netclock/2
-127.127.5.x Kinimetric Truetime 468-DC GOES receiver
-127.127.6.x IRIG audio decode (Sun & modified BSD audio driver)
-127.127.7.x CHU Timecode (via normal receiver & Bell 103 modem)
-127.127.8.x PARSE (generic driver for a bunch of DCF/GPS clocks
- can be extended for other clocks too)
- 8.0-3 Meinberg PZF535/TCXO
- 8.4-7 Meinberg PZF535/OCXO
- 8.8-11 Meinberg DCF U/A 31
- 8.12-15 ELV DCF7000
- 8.16-19 Walter Schmid DCF receiver (Kit)
- 8.20-23 Conrad DCF77 receiver module + level converter (Kit)
- 8.24-27 TimeBrick (limited availability ask
- time@informatik.uni-erlangen.de)
- 8.28-31 Meinberg GPS166
- 8.32-35 Trimble SV6 GPS receiver
-127.127.9.x MX4200 GPS receiver
-127.127.10.x Austron 2201A GPS Timing Receiver
-127.127.11.x Kinemetrics Truetime OM-DC OMEGA Receiver
-127.127.12.x KSI/Odetecs TPRO-S IRIG-B / TPRO-SAT GPS
-127.127.13.x Leitch: CSD 5300 Master Clock System Driver
-127.127.14.x MSFEES
diff --git a/usr.sbin/xntpd/hints/rs6000 b/usr.sbin/xntpd/hints/rs6000
deleted file mode 100644
index 8561ac2..0000000
--- a/usr.sbin/xntpd/hints/rs6000
+++ /dev/null
@@ -1,56 +0,0 @@
-15.7.1993
-xntp3 compiles now again on AIX. I have disabled prototyping and added
-the switch -D_NO_PROTO which disables prototyping in the system include
-files.
-
-Matthias Ernst maer@nmr.lpc.ethz.ch
---------------------------------------------------------------------------------
-Xntp version 3 now support the cc compiler for AIX.
-The Config.aix will now use cc by default. You can still compile xntp
-with the bsd compiler by changing "COMP= cc" to "COMP= bsdcc" and
-and removing the "-DSTUPID_SIGNAL" option from the "DEFS" option.
-
-xntp and tickadj was also modified so that the value of tickadj is read
-form the kernel and can be set by tickadj. For now I would not set
-tickadj below 40 us.
-
-Bill Jones
-jones@chpc.utexas.edu
--------------------------------------------------------------------------------
-
-This is a modified version of xntp version 3 for the RS6000. It works for
-AIX 3.2 and these are the same changes as have been applied tothe version 2
-implementation of xntp. It works fine for us but I have not tested all of
-the features, especially the local clock support for the RS6000 is not tested
-at all.
-
-Matthias Ernst, ETH-Zuerich, Switzerland - maer@nmr.lpc.ethz.ch
-
---------------------------------------------------------------------------------
-
-Here the original README.rs6000 for the version 2 implementation:
-
-A hacked version of xntp for the IBM RS/6000 under AIX 3.1 can be found
-in xntp.rs6000.tar.Z. [ if still available at all - Frank Kardel 93/12/3 ]
-
-This will not work on older versions of AIX due to a kernel bug; to find
-out whether you have the kernel bug, compile and run testrs6000.c (see
-comments in the code for instructions).
-
-xntp and testrs6000 require "bsdcc" to compile. This is simply another
-entry point into the xlc compiler with various options set for BSD
-compatibility. If your system does not have bsdcc, do the following:
-
-link /bin/bsdcc to /bin/xlc
-
-put the following into /etc/xlc.cfg:
-
-* BSD compatibility
-bsdcc: use = DEFLT
- crt = /lib/crt0.o
- mcrt = /lib/mcrt0.o
- gcrt = /lib/gcrt0.o
- libraries = -lbsd, -lc
- proflibs = -L/lib/profiled,-L/usr/lib/profiled
- options = -H512,-T512, -qlanglvl=extended, -qnoro, -D_BSD, -D_NONSTD_TYPES, -D_NO_PROTO, -tp,-B/lib/
-
diff --git a/usr.sbin/xntpd/hints/sgi b/usr.sbin/xntpd/hints/sgi
deleted file mode 100644
index 5e4f7de..0000000
--- a/usr.sbin/xntpd/hints/sgi
+++ /dev/null
@@ -1,74 +0,0 @@
-adjtime, tick and tickadj:
---------------------------
-
-The SGI value for HZ is 100 under Irix 4, with the system clock running
-in nominal mode (ftimer off), so the value for tick is 10000 usec.
-Tickadj is a bit more tricky because of the behaviour of adjtime(),
-which seems to try to perform the correction over 100-200 seconds, with
-a rate limit of 0.04 secs/sec for large corrections. Corrections of
-less than 0.017 seconds generally complete in less than a second,
-however.
-
-Some measured rates are as follows:
-
- Delta Rate (sec/sec)
-
- > 1 0.04
- 0.75 0.04
- 0.6 0.004
- 0.5 0.004
- 0.4 0.0026
- 0.3 0.0026
- 0.2 0.0013
- 0.1 0.0015
- 0.05 0.0015
- 0.02 0.0003
- 0.01 0.015
-Strange. Anyway, since adjtime will complete adjustments of less than
-17msec in less than a second, whether the fast clock is on or off, I
-have used a value of 150usec/tick for the tickadj value.
-
-Fast clock:
------------
-
-I get smoother timekeeping if I turn on the fast clock, thereby making
-the clock tick at 1kHz rather than 100Hz. With the fast clock off, I
-see a sawtooth clock offset with an amplitude of 5msec. With it on,
-the amplitude drops to 0.5msec (surprise!). This may be a consequence
-of having a local reference clock which spits out the time at exactly
-one-second intervals - I am probably seeing sampling aliasing between
-that and the machine clock. This may all be irrelevant for machines
-without a local reference clock. Fiddling with the fast clock doesn't
-seem to compromise the above choices for tick and tickadj.
-
-I use the "ftimer" program to switch the fast clock on when the system
-goes into multiuser mode, but you can set the "fastclock" flag in
-/usr/sysgen/master.d/kernel to have it on by default. See ftimer(1).
-
-timetrim:
----------
-
-Irix has a kernel variable called timetrim which adjusts the system
-time increment, effectively trimming the clock frequency. Xntpd could
-use this rather than adjtime() to do it's frequency trimming, but I
-haven't the time to explore this. There is a utility program,
-"timetrim", in the util directory which allows manipulation of the
-timetrim value in both SGI and xntpd native units. You can fiddle with
-default timetrim value in /usr/sysgen/master.d/kernel, but I think
-that's ugly. I just use xntpd to figure out the right value for
-timetrim for a particular CPU and then set it using "timetrim" when
-going to multiuser mode.
-
-Serial I/O latency:
--------------------
-
-If you use a local clock on an RS-232 line, look into the kernel
-configuration stuff with regard to improving the input latency (check
-out /usr/sysgen/master.d/[sduart|cdsio]). I have a Kinemetrics OM-DC
-hooked onto /dev/ttyd2 (the second CPU board RS-232 port) on an SGI
-Crimson, and setting the duart_rsrv_duration flag to 0 improves things
-a bit.
-
-
-12 Jan 93
-Steve Clift, CSIRO Marine Labs, Hobart, Australia (clift@ml.csiro.au)
diff --git a/usr.sbin/xntpd/hints/solaris b/usr.sbin/xntpd/hints/solaris
deleted file mode 100644
index 1d0e47f..0000000
--- a/usr.sbin/xntpd/hints/solaris
+++ /dev/null
@@ -1,87 +0,0 @@
- A quick summary of how to compile under Solaris:
-
- If you are running Solaris 2.0, you should upgrade to a later version of
-Solaris immediately.
- If you are running Solaris 2.1 or later, all should be fine (i hope)
-
- Solaris 2.1 contains fairly traditional clock code, with tick and tickadj.
-Solaris 2.2 and later contains completely re-written clock code to provide
-high resolution microsecond timers. A benefit of the re-written clock code
-is that adjtime does not round off its adjustments, so xntp does not have to
-compensate for this rounding. On Solaris 2.2 and later we #define
-ADJTIME_IS_ACCURATE, and do not look for the tickadj kernel variable.
-
- If you are running both Solaris 2.1 and 2.2 on your net, you will need to
-maintain two sets of xntp binaries. The Config.solaris2.2 file will compile
-on Solaris 2.1, but the resulting binaries will not work correctly.
-
-ADDITIONAL NOTES FOR SOLARIS 2.1
-(by William L. Jones jones@chpc.utexas.edu)
-
-Since settimeofday under Solaris 2.1 only sets the seconds part of timeval
-care must be used in starting xntpd. I suggest the following start
-up script:
-
- tickadj -s -a 1000
- ntpdate -v server1 server2
- sleep 20
- ntpdate -v server1 server2
- sleep 20
- tickadj -a 200
- xntpd
-
-The first tickadj turns of the time of day clock and sets the tick adjust
-value to 1 ms. This will insure that an adjtime value of at most 2
-seconds will complete in 20 seconds.
-
-The first ntpdate will set the time to within two seconds
-using settimeofday or it will adjust time using adjtime.
-
-The first sleep insures the adjtime has completed for the first ntpdate.
-
-The second ntpdate will use adjtime to set the time of day since the
-clock should be within 2 seconds of the correct time.
-
-The second tickadj set the tick adjust system value to 5 us.
-
-The second sleeps insure that adjtime will complete before starting
-the next xntpd.
-
-I tried running with a tickadj of 5 us with out much success.
-200 us seems to work well.
-
-
-ADDITIONAL NOTES FOR SOLARIS 2.2 AND LATER:
- You still need to turn off dosynctodr for XNTP to be able to keep accurate
-time. You can either do this in the /etc/system file (consulted at boot to set
-various kernel variables) by putting in the following line:
-set dosynctodr=0
-or you can use the tickadj program to force the variable to 0 in the running
-kernel. Fiddling with a running kernel is almost never a good idea, I'd
-recommend using /etc/system.
- I would recommend starting xntp from the following script, placed in
-/etc/rc2.d and named S99xntpd
-
-#!/bin/sh
-
-if [ $1 = "start" ]; then
- if [ -x /usr/local/bin/xntpd ]; then
- echo "Starting NTP daemon, takes about 1 minute... "
- # The following line is unnecessary if you turn off
- # dosynctodr in /etc/system.
- /usr/local/bin/tickadj -s
- /usr/local/bin/ntpdate -v server1 server2
- sleep 5
- /usr/local/bin/xntpd
- fi
-else
- if [ $1 = "stop" ]; then
- pid=`/usr/bin/ps -e | /usr/bin/grep xntpd | /usr/bin/sed -e 's/^ *//' -e 's/ .*//'`
- if [ "${pid}" != "" ]; then
- echo "Stopping Network Time Protocol daemon "
- /usr/bin/kill ${pid}
- fi
- fi
-fi
-
-Denny Gentry denny@eng.sun.com
diff --git a/usr.sbin/xntpd/hints/sun4 b/usr.sbin/xntpd/hints/sun4
deleted file mode 100644
index 6dc36ea..0000000
--- a/usr.sbin/xntpd/hints/sun4
+++ /dev/null
@@ -1,17 +0,0 @@
-Notes on CPU clock oscillator tolerance with SunOS 4.1.1 and 4.1.3
-
-A bug in SunOS 4.1.1 results in the kernel time losing 1 microsecond
-per tick of the system clock. The bug was fixed (bugid 1094383) for
-SunOS 4.1.1 and corrected in SunOS 4.1.3. The easiest way to fix this
-is to replace the 4.1.1 binary clock.o with the corresponding 4.1.3
-binary. Without this change it is necessary to use the tickadj program
-included in this distribution with the -t 9999 option.
-
-The tickadj option will work in all cases except when the kernel has
-been modified to correct the CPU clock oscillator frequency using a
-1-pps signal from a precision source. The bugfix must be installed for
-this wrinkle to work properly.
-
-Dave Mills (mills@udle.edu)
-
-
diff --git a/usr.sbin/xntpd/hints/svr4-dell b/usr.sbin/xntpd/hints/svr4-dell
deleted file mode 100644
index b6d0157..0000000
--- a/usr.sbin/xntpd/hints/svr4-dell
+++ /dev/null
@@ -1,6 +0,0 @@
-Notes on the DELL SVR4.
-
-You should use -DSETTIMEOFDAY_BROKEN.
-
-Philip.Gladstone@mail.citicorp.com
-
diff --git a/usr.sbin/xntpd/kernel/Makefile.tmpl b/usr.sbin/xntpd/kernel/Makefile.tmpl
deleted file mode 100644
index 8b40f4a..0000000
--- a/usr.sbin/xntpd/kernel/Makefile.tmpl
+++ /dev/null
@@ -1,59 +0,0 @@
-#
-# /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp
-#
-# parse routine that could be used in two places
-#
-COMPILER= cc
-COPTS= -O
-AUTHDEFS=-DDES
-LIBDEFS= -DBIG_ENDIAN
-RANLIB= ranlib
-INSTALL= install
-CLOCKDEFS=
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-CLK_VDOBJS=clkinit.o tty_clk_STREAMS.o
-CHU_VDOBJS=chuinit.o tty_chu_STREAMS.o
-INCL=-I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL) -DKERNEL
-CC= $(COMPILER)
-#
-
-all:
- @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \
- awk '/-DREFCLOCK/ && ( /-D.*CLK/ || /-D.*PPS/ ) { makeit=1; }\
- END { if (makeit) \
- { print ""; \
- print "### STREAMS kernel modules ppsclock, ppsclocd or line disciplines must"; \
- print "### be installed manually if needed"; \
- print "### see kernel/README* for details"; \
- print "### The parse refclock implementation has their own support in"; \
- print "### parse/*."; } }'
-
-loadable: clk.o chu.o
-
-clk.o: ${CLK_VDOBJS}
- ld -r ${OBJS} -o clk.o
-
-clk.h:
- echo "#define NCLK 2" > clk.h
-
-tty_clk_STREAMS.o: clk.h tty_clk_STREAMS.c
- cc ${CFLAGS} tty_clk_STREAMS.c -c tty_clk_STREAMS.o
-
-chu.o: ${CHU_VDOBJS}
- ld -r ${OBJS} -o chu.o
-
-chu.h:
- echo "#define NCHU 2" > chu.h
-
-tty_chu_STREAMS.o: chu.h tty_chu_STREAMS.c
- cc ${CFLAGS} tty_chu_STREAMS.c -c tty_chu_STREAMS.o
-
-clean:
- -@rm -f *~ *.o *.out *.ln make.log Makefile.bak \
- lintlib.errs lint.errs
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
diff --git a/usr.sbin/xntpd/kernel/README b/usr.sbin/xntpd/kernel/README
deleted file mode 100644
index cf69b13..0000000
--- a/usr.sbin/xntpd/kernel/README
+++ /dev/null
@@ -1,90 +0,0 @@
-This directory contains code for two line disciplines which may
-work with BSD-style terminal drivers. While I'll try to cover
-installation details for the more useful one here as best I can,
-you really should know what you are doing before attempting to
-put one of these in your kernel since the details seem to vary
-from BSD variant to BSD variant.
-
-Tty_clk.c contains a generic clock support line discipline.
-The terminal driver is actually run in raw mode, giving you an
-eight bit data path. Instead of delivering the data
-character-by-character, however, the line discipline collects
-characters until one of two magic characters (your current erase
-and kill characters. Don't throw up) is received. A timestamp
-is then taken (by calling microtime()), inserted in the input
-buffer after the magic character, and the whole mess made available
-for input by the application. Both select() and SIGIO are supported
-by the discipline.
-
-Tty_chu.c is a special purpose line discipline for receiving
-the CHU time code. It understands enough about the format of the
-code CHU transmits to filter out errors, and delivers an entire
-ten character code group to the application all at once, including
-a timestamp for each character. The structure the code group is
-delivered in is defined in chudefs.h. Note that this line discipline
-is old and could use some rewriting for better portability. Please
-drop me a line if you are interested in using this.
-
-To install the clock line discipline, do something like the following:
-
-(1) Copy tty_clk.c into /sys/sys
-
-(2) Edit /sys/sys/tty_conf.c. You will want to include some facsimile
- of the following lines:
-
-#include "clk.h"
-#if NCLK > 0
-int clkopen(), clkclose(), clkwrite(), clkinput(), clkioctl();
-#endif
-
-#if NCLK > 0
- { clkopen, clkclose, ttread, clkwrite, clkioctl,
- clkinput, nodev, nulldev, ttstart, nullmodem, /* 10- CLKLDISC */
- ttselect },
-#else
- { nodev, nodev, nodev, nodev, nodev,
- nodev, nodev, nodev, nodev, nodev,
- nodev },
-#endif
-
- In Ultrix 4.2a and 4.3 the file to edit is /sys/data/tty_conf_data.c.
- The lines should be
-
-#if NCLK > 0
- clkopen, clkclose, ttread, clkwrite, clkioctl, /* 10 */
- clkinput, nodev, nulldev, ttstart, nulldev,
-#else
- nodev, nodev, nodev, nodev, nodev,
- nodev, nodev, nodev, nodev, nodev,
-#endif
-
- Note that if your kernel doesn't include the ??select() entry in
- the structure (i.e. there are only 10 entry points in the structure)
- just leave it out. Also note that the number you give the line
- discipline (10 in my kernel) will be specific to your kernel and
- will depend on what is in there already. The entries sould be in
- order with no missing space; that is, if there are only seven
- disciplines already defined and you want to use 10 for good reason,
- you should define a dummy 9th entry like this
-
- nodev, nodev, nodev, nodev, nodev, /* 9 */
- nodev, nodev, nodev, nodev, nodev,
-
-(3) Edit /sys/h/ioctl.h and include a line (somewhere near where other
- line disciplines are defined) like:
-
-#define CLKLDISC 10 /* clock line discipline */
-
- The `10' should match what you used in /sys/sys/tty_conf.c.
-
-(4) Edit /sys/conf/files and add a line which looks like:
-
-sys/tty_clk.c optional clk
-
-(5) Edit the configuration file for the machine you want to use
- the clock line discipline on to include the following:
-
-pseudo-device clk 4
-
-(6) Run config, then make clean, then make depend, then make vmunix.
- Then reboot the new kernel.
diff --git a/usr.sbin/xntpd/kernel/README.streams b/usr.sbin/xntpd/kernel/README.streams
deleted file mode 100644
index 26c2825..0000000
--- a/usr.sbin/xntpd/kernel/README.streams
+++ /dev/null
@@ -1,86 +0,0 @@
-Some kernels don't support additional user defined line disciplines.
-Especially notable in this regard is SunOS and System V. They
-provide similar support in the form of "Streams". Accordingly,
-included in this directory is a pair of STREAMS modules to
-replace the line disciplines that provide clock support for
-xntpd. Notice that the "clkdefs.h" file is not used in the
-original line discipline, but the "chudefs.h" file is the
-same one used in the original line discipline.
-
-TO INSTALL A NEW STREAMS DRIVER:
-
-1. Copy your choice to /sys/os, removing the "_STREAMS" in the
-filename.
-
-2. Copy the appropriate *defs.h file to /usr/include/sys,
-then link it (with ln) to /sys/sys.
-
-In the following steps, substitute "clk" for "chu" if you're
-installing the clk driver.
-
-3. Append to /sys/conf.common/files.cmn:
-
-os/tty_chu.c optional chu
-
-4. Edit /sys/sun/str_conf.c. You'll want to add lines in three
-places. It'll be sort of clear where when you see the file.
-
-.
-.
-.
-#include "chu.h"
-.
-.
-.
-#if NCHU > 0
-extern struct streamtab chuinfo;
-#endif
-.
-.
-.
-#if NCHU > 0
- { "chu", &chuinfo },
-#endif
-.
-.
-.
-
-At this point, the kernel-making "config [k-name] ; cd ../[k-name] ; make"
-should produce a kernel just as it did before. If it fouls up,
-something's wrong.
-
-5. Edit /sys/[arch]/conf/[k-name] (substituting the architecture and
-kernel name) to stick in:
-
-pseudo-device chu4 # CHU clock support
-
-You can change 4 to anything you like. It will limit the number
-of instantiations of the chu driver you can use at the same time.
-
-6. Make a new kernel and boot it.
-
-HOW TO USE THE CHU STREAMS DRIVER:
-
-The driver should act exactly like the line discipline.
-After setting the raw mode, and exclusive access (if you want),
-pop off all the extra streams, then push the chu module
-on. From then on, any reads from the file in question
-will return chucode structures as defined in chudefs.h.
-Depending on the settings of PEDANTIC and ANAL_RETENTIVE
-used when compiling the kernel, some checking of the
-data may or may not be necessary.
-
-HOW TO USE THE CLK STREAMS DRIVER:
-
-First, it should be noted that a new ioctl() has been defined.
-The CLK_SETSTR ioctl takes a pointer to a string of no more
-than CLK_MAXSTRSIZE characters. Until the first CLK_SETSTR
-is performed, the driver will simply pass through characters.
-Once it is passed a string, then any character in that string
-will be immediately followed by a struct timeval. You can
-change the string whenever you want by doing another
-CLK_SETSTR. The character must be an exact, 8 bit match.
-The character '\000' cannot, unfortunately, be stamped.
-Passing an empty string to CLK_SETSTR turns off stamping.
-Passing NULL will produce undefined results.
-
diff --git a/usr.sbin/xntpd/kernel/tty_chu.c b/usr.sbin/xntpd/kernel/tty_chu.c
deleted file mode 100644
index 4615875..0000000
--- a/usr.sbin/xntpd/kernel/tty_chu.c
+++ /dev/null
@@ -1,276 +0,0 @@
-/* tty_chu.c,v 3.1 1993/07/06 01:07:30 jbj Exp
- * tty_chu.c - CHU line driver
- */
-
-#include "chu.h"
-#if NCHU > 0
-
-#include "../h/param.h"
-#include "../h/types.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/ioctl.h"
-#include "../h/tty.h"
-#include "../h/proc.h"
-#include "../h/file.h"
-#include "../h/conf.h"
-#include "../h/buf.h"
-#include "../h/uio.h"
-
-#include "../h/chudefs.h"
-
-/*
- * Line discipline for receiving CHU time codes.
- * Does elementary noise elimination, takes time stamps after
- * the arrival of each character, returns a buffer full of the
- * received 10 character code and the associated time stamps.
- */
-#define NUMCHUBUFS 3
-
-struct chudata {
- u_char used; /* Set to 1 when structure in use */
- u_char lastindex; /* least recently used buffer */
- u_char curindex; /* buffer to use */
- u_char sleeping; /* set to 1 when we're sleeping on a buffer */
- struct chucode chubuf[NUMCHUBUFS];
-} chu_data[NCHU];
-
-/*
- * Number of microseconds we allow between
- * character arrivals. The speed is 300 baud
- * so this should be somewhat more than 30 msec
- */
-#define CHUMAXUSEC (50*1000) /* 50 msec */
-
-int chu_debug = 0;
-
-/*
- * Open as CHU time discipline. Called when discipline changed
- * with ioctl, and changes the interpretation of the information
- * in the tty structure.
- */
-/*ARGSUSED*/
-chuopen(dev, tp)
- dev_t dev;
- register struct tty *tp;
-{
- register struct chudata *chu;
-
- /*
- * Don't allow multiple opens. This will also protect us
- * from someone opening /dev/tty
- */
- if (tp->t_line == CHULDISC)
- return (EBUSY);
- ttywflush(tp);
- for (chu = chu_data; chu < &chu_data[NCHU]; chu++)
- if (!chu->used)
- break;
- if (chu >= &chu[NCHU])
- return (EBUSY);
- chu->used++;
- chu->lastindex = chu->curindex = 0;
- chu->sleeping = 0;
- chu->chubuf[0].ncodechars = 0;
- tp->T_LINEP = (caddr_t) chu;
- return (0);
-}
-
-/*
- * Break down... called when discipline changed or from device
- * close routine.
- */
-chuclose(tp)
- register struct tty *tp;
-{
- register int s = spl5();
-
- ((struct chudata *) tp->T_LINEP)->used = 0;
- tp->t_cp = 0;
- tp->t_inbuf = 0;
- tp->t_rawq.c_cc = 0; /* clear queues -- paranoid */
- tp->t_canq.c_cc = 0;
- tp->t_line = 0; /* paranoid: avoid races */
- splx(s);
-}
-
-/*
- * Read a CHU buffer. Sleep on the current buffer
- */
-churead(tp, uio)
- register struct tty *tp;
- struct uio *uio;
-{
- register struct chudata *chu;
- register struct chucode *chucode;
- register int s;
-
- if ((tp->t_state&TS_CARR_ON)==0)
- return (EIO);
-
- chu = (struct chudata *) (tp->T_LINEP);
-
- s = spl5();
- chucode = &(chu->chubuf[chu->lastindex]);
- while (chu->curindex == chu->lastindex) {
- chu->sleeping = 1;
- sleep((caddr_t)chucode, TTIPRI);
- }
- chu->sleeping = 0;
- if (++(chu->lastindex) >= NUMCHUBUFS)
- chu->lastindex = 0;
- splx(s);
-
- return (uiomove((caddr_t)chucode, sizeof(*chucode), UIO_READ, uio));
-}
-
-/*
- * Low level character input routine.
- * If the character looks okay, grab a time stamp. If the stuff in
- * the buffer is too old, dump it and start fresh. If the character is
- * non-BCDish, everything in the buffer too.
- */
-chuinput(c, tp)
- register int c;
- register struct tty *tp;
-{
- register struct chudata *chu = (struct chudata *) tp->T_LINEP;
- register struct chucode *chuc;
- register int i;
- long sec, usec;
- struct timeval tv;
-
- /*
- * Do a check on the BSDness of the character. This delays
- * the time stamp a bit but saves a fair amount of overhead
- * when the static is bad.
- */
- if (((c) & 0xf) > 9 || (((c)>>4) & 0xf) > 9) {
- chuc = &(chu->chubuf[chu->curindex]);
- chuc->ncodechars = 0; /* blow all previous away */
- return;
- }
-
- /*
- * Call microtime() to get the current time of day
- */
- microtime(&tv);
-
- /*
- * Compute the difference in this character's time stamp
- * and the last. If it exceeds the margin, blow away all
- * the characters currently in the buffer.
- */
- chuc = &(chu->chubuf[chu->curindex]);
- i = (int)chuc->ncodechars;
- if (i > 0) {
- sec = tv.tv_sec - chuc->codetimes[i-1].tv_sec;
- usec = tv.tv_usec - chuc->codetimes[i-1].tv_usec;
- if (usec < 0) {
- sec -= 1;
- usec += 1000000;
- }
- if (sec != 0 || usec > CHUMAXUSEC) {
- i = 0;
- chuc->ncodechars = 0;
- }
- }
-
- /*
- * Store the character. If we're done, have to tell someone
- */
- chuc->codechars[i] = (u_char)c;
- chuc->codetimes[i] = tv;
-
- if (++i < NCHUCHARS) {
- /*
- * Not much to do here. Save the count and wait
- * for another character.
- */
- chuc->ncodechars = (u_char)i;
- } else {
- /*
- * Mark this buffer full and point at next. If the
- * next buffer is full we overwrite it by bumping the
- * next pointer.
- */
- chuc->ncodechars = NCHUCHARS;
- if (++(chu->curindex) >= NUMCHUBUFS)
- chu->curindex = 0;
- if (chu->curindex == chu->lastindex)
- if (++(chu->lastindex) >= NUMCHUBUFS)
- chu->lastindex = 0;
- chu->chubuf[chu->curindex].ncodechars = 0;
-
- /*
- * Wake up anyone sleeping on this. Also wake up
- * selectors and/or deliver a SIGIO as required.
- */
- if (tp->t_rsel) {
- selwakeup(tp->t_rsel, tp->t_state&TS_RCOLL);
- tp->t_state &= ~TS_RCOLL;
- tp->t_rsel = 0;
- }
- if (tp->t_state & TS_ASYNC)
- gsignal(tp->t_pgrp, SIGIO);
- if (chu->sleeping)
- (void) wakeup((caddr_t)chuc);
- }
-}
-
-/*
- * Handle ioctls. We reject all tty-style except those that
- * change the line discipline.
- */
-chuioctl(tp, cmd, data, flag)
- struct tty *tp;
- int cmd;
- caddr_t data;
- int flag;
-{
-
- if ((cmd>>8) != 't')
- return (-1);
- switch (cmd) {
- case TIOCSETD:
- case TIOCGETD:
- case TIOCGETP:
- case TIOCGETC:
- return (-1);
- }
- return (ENOTTY); /* not quite appropriate */
-}
-
-
-chuselect(dev, rw)
- dev_t dev;
- int rw;
-{
- register struct tty *tp = &cdevsw[major(dev)].d_ttys[minor(dev)];
- struct chudata *chu;
- int s = spl5();
-
- chu = (struct chudata *) (tp->T_LINEP);
-
- switch (rw) {
-
- case FREAD:
- if (chu->curindex != chu->lastindex)
- goto win;
- if (tp->t_rsel && tp->t_rsel->p_wchan == (caddr_t)&selwait)
- tp->t_state |= TS_RCOLL;
- else
- tp->t_rsel = u.u_procp;
- break;
-
- case FWRITE:
- goto win;
- }
- splx(s);
- return (0);
-win:
- splx(s);
- return (1);
-}
-#endif NCHU
diff --git a/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c b/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c
deleted file mode 100644
index f46e25d..0000000
--- a/usr.sbin/xntpd/kernel/tty_chu_STREAMS.c
+++ /dev/null
@@ -1,603 +0,0 @@
-/*
- * CHU STREAMS module for SunOS
- *
- * Version 2.6
- *
- * Copyright 1991-1994, Nick Sayer
- *
- * Special thanks to Greg Onufer for his debug assists.
- * Special thanks to Matthias Urlichs for the 4.1.x loadable driver support
- * code.
- * Special wet-noodle whippings to Sun for not properly documenting
- * ANYTHING that makes this stuff at all possible.
- *
- * Should be PUSHed directly on top of a serial I/O channel.
- * Provides complete chucode structures to user space.
- *
- * COMPILATION:
- *
- *
- * To make a SunOS 4.1.x compatable loadable module (from the ntp kernel
- * directory):
- *
- * % cc -c -I../include -DLOADABLE tty_chu_STREAMS.c
- *
- * The resulting .o file is the loadable module. Modload it
- * thusly:
- *
- * % modload tty_chu_STREAMS.o -entry _chuinit
- *
- * When none of the instances are pushed in a STREAM, you can
- * modunload the driver in the usual manner if you wish.
- *
- * As an alternative to loading it dynamically you can compile it
- * directly into the kernel by hacking str_conf.c. See the README
- * file for more details on doing it the old fashioned way.
- *
- *
- * To make a Solaris 2.x compatable module (from the ntp kernel
- * directory):
- *
- * % {gcc,cc} -c -I../include -DSOLARIS2 tty_chu_STREAMS.c
- * % ld -r -o /usr/kernel/strmod/chu tty_chu_STREAMS.o
- * % chmod 755 /usr/kernel/strmod/chu
- *
- * The OS will load it for you automagically when it is first pushed.
- *
- * If you get syntax errors from <sys/timer.h> (really references
- * to types that weren't typedef'd in gcc's version of types.h),
- * add -D_SYS_TIMER_H to blot out the miscreants.
- *
- * Under Solaris 2.2 and previous, do not attempt to modunload the
- * module unless you're SURE it's not in use. I haven't tried it, but
- * I've been told it won't do the right thing. Under Solaris 2.3 (and
- * presumably future revs) an attempt to unload the module when it's in
- * use will properly refuse with a "busy" message.
- *
- *
- * HISTORY:
- *
- * v2.6 - Mutexed the per-instance chucode just to be safe.
- * v2.5 - Fixed show-stopper bug in Solaris 2.x - qprocson().
- * v2.4 - Added dynamic allocation support for Solaris 2.x.
- * v2.3 - Added support for Solaris 2.x.
- * v2.2 - Added SERVICE IMMEDIATE hack.
- * v2.1 - Added 'sixth byte' heuristics.
- * v2.0 - first version with an actual version number.
- * Added support for new CHU 'second 31' data format.
- * Deleted PEDANTIC and ANAL_RETENTIVE.
- *
- */
-
-#ifdef SOLARIS2
-# ifndef NCHU
-# define NCHU 1
-# endif
-# define _KERNEL
-#elif defined(LOADABLE)
-# ifndef NCHU
-# define NCHU 3
-# define KERNEL
-# endif
-#else
-# include "chu.h"
-#endif
-
-#if NCHU > 0
-
-/*
- * Number of microseconds we allow between
- * character arrivals. The speed is 300 baud
- * so this should be somewhat more than 30 msec
- */
-#define CHUMAXUSEC (60*1000) /* 60 msec */
-
-#include <sys/types.h>
-#include <sys/stream.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/errno.h>
-#include <sys/user.h>
-#include <syslog.h>
-#include <sys/tty.h>
-
-#include <sys/chudefs.h>
-
-#ifdef SOLARIS2
-
-#include <sys/ksynch.h>
-#include <sys/kmem.h>
-#include <sys/cmn_err.h>
-#include <sys/conf.h>
-#include <sys/strtty.h>
-#include <sys/modctl.h>
-#include <sys/ddi.h>
-#include <sys/sunddi.h>
-
-#endif
-
-#ifdef LOADABLE
-
-#include <sys/kernel.h>
-#include <sys/conf.h>
-#include <sys/buf.h>
-#include <sundev/mbvar.h>
-#include <sun/autoconf.h>
-#include <sun/vddrv.h>
-
-#endif
-
-
-static struct module_info rminfo = { 0, "chu", 0, INFPSZ, 0, 0 };
-static struct module_info wminfo = { 0, "chu", 0, INFPSZ, 0, 0 };
-static int chuopen(), churput(), chuwput(), chuclose();
-
-static struct qinit rinit = { churput, NULL, chuopen, chuclose, NULL,
- &rminfo, NULL };
-
-static struct qinit winit = { chuwput, NULL, NULL, NULL, NULL,
- &wminfo, NULL };
-
-struct streamtab chuinfo = { &rinit, &winit, NULL, NULL };
-
-/*
- * Here's our private data type and structs
- */
-struct priv_data
-{
-#ifdef SOLARIS2
- kmutex_t chucode_mutex;
-#else
- char in_use;
-#endif
- struct chucode chu_struct;
-};
-
-#ifndef SOLARIS2
-struct priv_data our_priv_data[NCHU];
-#endif
-
-#ifdef SOLARIS2
-
-static struct fmodsw fsw =
-{
- "chu",
- &chuinfo,
- D_NEW | D_MP
-};
-
-extern struct mod_ops mod_strmodops;
-
-static struct modlstrmod modlstrmod =
-{
- &mod_strmodops,
- "CHU timecode decoder v2.6",
- &fsw
-};
-
-static struct modlinkage modlinkage =
-{
- MODREV_1,
- (void*) &modlstrmod,
- NULL
-};
-
-int _init()
-{
- return mod_install(&modlinkage);
-}
-
-int _info(foo)
-struct modinfo *foo;
-{
- return mod_info(&modlinkage,foo);
-}
-
-int _fini()
-{
- return mod_remove(&modlinkage);
-}
-
-#endif /* SOLARIS2 */
-
-#ifdef LOADABLE
-
-# ifdef sun
-
-static struct vdldrv vd =
-{
- VDMAGIC_PSEUDO,
- "chu",
- NULL, NULL, NULL, 0, 0, NULL, NULL, 0, 0,
-};
-
-static struct fmodsw *chu_fmod;
-
-/*ARGSUSED*/
-chuinit (fc, vdp, vdi, vds)
- unsigned int fc;
- struct vddrv *vdp;
- addr_t vdi;
- struct vdstat *vds;
-{
- switch (fc) {
- case VDLOAD:
- {
- int dev, i;
-
- /* Find free entry in fmodsw */
- for (dev = 0; dev < fmodcnt; dev++) {
- if (fmodsw[dev].f_str == NULL)
- break;
- }
- if (dev == fmodcnt)
- return (ENODEV);
- chu_fmod = &fmodsw[dev];
-
- /* If you think a kernel would have strcpy() you're mistaken. */
- for (i = 0; i <= FMNAMESZ; i++)
- chu_fmod->f_name[i] = wminfo.mi_idname[i];
-
- chu_fmod->f_str = &chuinfo;
- }
- vdp->vdd_vdtab = (struct vdlinkage *) & vd;
-
- {
- int i;
-
- for (i=0; i<NCHU; i++)
- our_priv_data[i].in_use=0;
- }
-
- return 0;
- case VDUNLOAD:
- {
- int dev;
-
- for (dev = 0; dev < NCHU; dev++)
- if (our_priv_data[dev].in_use) {
- /* One of the modules is still open */
- return (EBUSY);
- }
- }
- chu_fmod->f_name[0] = '\0';
- chu_fmod->f_str = NULL;
- return 0;
- case VDSTAT:
- return 0;
- default:
- return EIO;
- }
-}
-
-# endif /* sun */
-
-#endif /* LOADABLE */
-
-#if !defined(LOADABLE) && !defined(SOLARIS2)
-
-char chu_first_open=1;
-
-#endif
-
-/*ARGSUSED*/
-static int chuopen(q, dev, flag, sflag)
-queue_t *q;
-dev_t dev;
-int flag;
-int sflag;
-{
- int i;
-
-#if !defined(LOADABLE) && !defined(SOLARIS2)
- if (chu_first_open)
- {
- chu_first_open=0;
-
- for(i=0;i<NCHU;i++)
- our_priv_data[i].in_use=0;
- }
-#endif
-
-#ifdef SOLARIS2
- /* According to the docs, calling with KM_SLEEP can never
- fail */
-
- q->q_ptr = kmem_alloc( sizeof(struct priv_data), KM_SLEEP );
- ((struct priv_data *) q->q_ptr)->chu_struct.ncodechars = 0;
-
- mutex_init(&((struct priv_data *) q->q_ptr)->chucode_mutex,"Chucode Mutex",MUTEX_DRIVER,NULL);
- qprocson(q);
-
- if (!putnextctl1(WR(q), M_CTL, MC_SERVICEIMM))
- {
- qprocsoff(q);
- mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex);
- kmem_free(q->q_ptr, sizeof(struct chucode) );
- return (EFAULT);
- }
-
- return 0;
-
-#else
- for(i=0;i<NCHU;i++)
- if (!our_priv_data[i].in_use)
- {
- ((struct priv_data *) (q->q_ptr))=&(our_priv_data[i]);
- our_priv_data[i].in_use++;
- our_priv_data[i].chu_struct.ncodechars = 0;
- if (!putctl1(WR(q)->q_next, M_CTL, MC_SERVICEIMM))
- {
- our_priv_data[i].in_use=0;
- u.u_error = EFAULT;
- return (OPENFAIL);
- }
- return 0;
- }
-
- u.u_error = EBUSY;
- return (OPENFAIL);
-#endif
-
-}
-
-/*ARGSUSED*/
-static int chuclose(q, flag)
-queue_t *q;
-int flag;
-{
-#ifdef SOLARIS2
- qprocsoff(q);
- mutex_destroy(&((struct priv_data *)q->q_ptr)->chucode_mutex);
- kmem_free(q->q_ptr, sizeof(struct chucode) );
-#else
- ((struct priv_data *) (q->q_ptr))->in_use=0;
-#endif
- return (0);
-}
-
-/*
- * Now the crux of the biscuit.
- *
- * We will be passed data from the man downstairs. If it's not a data
- * packet, it must be important, so pass it along unmunged. If, however,
- * it is a data packet, we're gonna do special stuff to it. We're going
- * to pass each character we get to the old line discipline code we
- * include below for just such an occasion. When the old ldisc code
- * gets a full chucode struct, we'll hand it back upstairs.
- *
- * chuinput takes a single character and q (as quickly as possible).
- * passback takes a pointer to a chucode struct and q and sends it upstream.
- */
-
-void chuinput();
-void passback();
-
-static int churput(q, mp)
-queue_t *q;
-mblk_t *mp;
-{
- mblk_t *bp;
-
- switch(mp->b_datap->db_type)
- {
- case M_DATA:
- for(bp=mp; bp!=NULL; bp=bp->b_cont)
- {
- while(bp->b_rptr < bp->b_wptr)
- chuinput( ((u_char)*(bp->b_rptr++)) , q );
- }
- freemsg(mp);
- break;
- default:
- putnext(q,mp);
- break;
- }
-
-}
-
-/*
- * Writing to a chu device doesn't make sense, but we'll pass them
- * through in case they're important.
- */
-
-static int chuwput(q, mp)
-queue_t *q;
-mblk_t *mp;
-{
- putnext(q,mp);
-}
-
-/*
- * Take a pointer to a filled chucode struct and a queue and
- * send the chucode stuff upstream
- */
-
-void passback(outdata,q)
-struct chucode *outdata;
-queue_t *q;
-{
- mblk_t *mp;
- int j;
-
- mp=(mblk_t*) allocb(sizeof(struct chucode),BPRI_LO);
-
- if (mp==NULL)
- {
-#ifdef SOLARIS2
- cmn_err(CE_WARN,"chu module couldn't allocate message block");
-#else
- log(LOG_ERR,"chu: cannot allocate message");
-#endif
- return;
- }
-
- for(j=0;j<sizeof(struct chucode); j++)
- *mp->b_wptr++ = *( ((char*)outdata) + j );
-
- putnext(q,mp);
-}
-
-/*
- * This routine was copied nearly verbatim from the old line discipline.
- */
-void chuinput(c,q)
-register u_char c;
-queue_t *q;
-{
- register struct chucode *chuc;
- register int i;
- long sec, usec;
- struct timeval tv;
-
- /*
- * Quick, Batman, get a timestamp! We need to do this
- * right away. The time between the end of the stop bit
- * and this point is critical, and should be as nearly
- * constant and as short as possible. (Un)fortunately,
- * the Sun's clock granularity is so big this isn't a
- * major problem.
- *
- * uniqtime() is totally undocumented, but there you are.
- */
- uniqtime(&tv);
-
-#ifdef SOLARIS2
- mutex_enter(&((struct priv_data *)q->q_ptr)->chucode_mutex);
-#endif
-
- /*
- * Now, locate the chu struct once so we don't have to do it
- * over and over.
- */
- chuc=&(((struct priv_data *) (q->q_ptr))->chu_struct);
-
- /*
- * Compute the difference in this character's time stamp
- * and the last. If it exceeds the margin, blow away all
- * the characters currently in the buffer.
- */
- i = (int)chuc->ncodechars;
- if (i > 0)
- {
- sec = tv.tv_sec - chuc->codetimes[i-1].tv_sec;
- usec = tv.tv_usec - chuc->codetimes[i-1].tv_usec;
- if (usec < 0)
- {
- sec -= 1;
- usec += 1000000;
- }
- if (sec != 0 || usec > CHUMAXUSEC)
- {
- i = 0;
- chuc->ncodechars = 0;
- }
- }
-
- /*
- * Store the character.
- */
- chuc->codechars[i] = (u_char)c;
- chuc->codetimes[i] = tv;
-
- /*
- * Now we perform the 'sixth byte' heuristics.
- *
- * This is a long story.
- *
- * We used to be able to count on the first byte of the code
- * having a '6' in the LSD. This prevented most code framing
- * errors (garbage before the first byte wouldn't typically
- * have a 6 in the LSD). That's no longer the case.
- *
- * We can get around this, however, by noting that the 6th byte
- * must be either equal to or one's complement of the first.
- * If we get a sixth byte that ISN'T like that, then it may
- * well be that the first byte is garbage. The right thing
- * to do is to left-shift the whole buffer one count and
- * continue to wait for the sixth byte.
- */
- if (i == NCHUCHARS/2)
- {
- register u_char temp_byte;
-
- temp_byte=chuc->codechars[i] ^ chuc->codechars[0];
-
- if ( (temp_byte) && (temp_byte!=0xff) )
- {
- register int t;
- /*
- * No match. Left-shift the buffer and try again
- */
- for(t=0;t<=NCHUCHARS/2;t++)
- {
- chuc->codechars[t]=chuc->codechars[t+1];
- chuc->codetimes[t]=chuc->codetimes[t+1];
- }
-
- i--; /* This is because of the ++i immediately following */
- }
- }
-
- /*
- * We done yet?
- */
- if (++i < NCHUCHARS)
- {
- /*
- * We're not done. Not much to do here. Save the count and wait
- * for another character.
- */
- chuc->ncodechars = (u_char)i;
- }
- else
- {
- /*
- * We are done. Mark this buffer full and pass it along.
- */
- chuc->ncodechars = NCHUCHARS;
-
- /*
- * Now we have a choice. Either the front half and back half
- * have to match, or be one's complement of each other.
- *
- * So let's try the first byte and see
- */
-
- if(chuc->codechars[0] == chuc->codechars[NCHUCHARS/2])
- {
- chuc->chutype = CHU_TIME;
- for( i=0; i<(NCHUCHARS/2); i++)
- if (chuc->codechars[i] != chuc->codechars[i+(NCHUCHARS/2)])
- {
- chuc->ncodechars = 0;
-#ifdef SOLARIS2
- mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
-#endif
- return;
- }
- }
- else
- {
- chuc->chutype = CHU_YEAR;
- for( i=0; i<(NCHUCHARS/2); i++)
- if (((chuc->codechars[i] ^ chuc->codechars[i+(NCHUCHARS/2)]) & 0xff)
- != 0xff )
- {
- chuc->ncodechars = 0;
-#ifdef SOLARIS2
- mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
-#endif
- return;
- }
- }
-
- passback(chuc,q); /* We're done! */
- chuc->ncodechars = 0; /* Start all over again! */
- }
-#ifdef SOLARIS2
- mutex_exit(&((struct priv_data *)q->q_ptr)->chucode_mutex);
-#endif
-}
-
-#endif /* NCHU > 0 */
diff --git a/usr.sbin/xntpd/kernel/tty_clk.c b/usr.sbin/xntpd/kernel/tty_clk.c
deleted file mode 100644
index 0720610..0000000
--- a/usr.sbin/xntpd/kernel/tty_clk.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* tty_clk.c,v 3.1 1993/07/06 01:07:33 jbj Exp
- * tty_clk.c - Generic line driver for receiving radio clock timecodes
- */
-
-#include "clk.h"
-#if NCLK > 0
-
-#include "../h/param.h"
-#include "../h/types.h"
-#include "../h/systm.h"
-#include "../h/dir.h"
-#include "../h/user.h"
-#include "../h/ioctl.h"
-#include "../h/tty.h"
-#include "../h/proc.h"
-#include "../h/file.h"
-#include "../h/conf.h"
-#include "../h/buf.h"
-#include "../h/uio.h"
-#include "../h/clist.h"
-
-/*
- * This line discipline is intended to provide well performing
- * generic support for the reception and time stamping of radio clock
- * timecodes. Most radio clock devices return a string where a
- * particular character in the code (usually a \r) is on-time
- * synchronized with the clock. The idea here is to collect characters
- * until (one of) the synchronization character(s) (we allow two) is seen.
- * When the magic character arrives we take a timestamp by calling
- * microtime() and insert the eight bytes of struct timeval into the
- * buffer after the magic character. We then wake up anyone waiting
- * for the buffer and return the whole mess on the next read.
- *
- * To use this the calling program is expected to first open the
- * port, and then to set the port into raw mode with the speed
- * set appropriately with a TIOCSETP ioctl(), with the erase and kill
- * characters set to those to be considered magic (yes, I know this
- * is gross, but they were so convenient). If only one character is
- * magic you can set then both the same, or perhaps to the alternate
- * parity versions of said character. After getting all this set,
- * change the line discipline to CLKLDISC and you are on your way.
- *
- * The only other bit of magic we do in here is to flush the receive
- * buffers on writes if the CRMOD flag is set (hack, hack).
- */
-
-/*
- * We run this very much like a raw mode terminal, with the exception
- * that we store up characters locally until we hit one of the
- * magic ones and then dump it into the rawq all at once. We keep
- * the buffered data in clists since we can then often move it to
- * the rawq without copying. For sanity we limit the number of
- * characters between specials, and the total number of characters
- * before we flush the rawq, as follows.
- */
-#define CLKLINESIZE (256)
-#define NCLKCHARS (CLKLINESIZE*4)
-
-struct clkdata {
- int inuse;
- struct clist clkbuf;
-};
-#define clk_cc clkbuf.c_cc
-#define clk_cf clkbuf.c_cf
-#define clk_cl clkbuf.c_cl
-
-struct clkdata clk_data[NCLK];
-
-/*
- * Routine for flushing the internal clist
- */
-#define clk_bflush(clk) (ndflush(&((clk)->clkbuf), (clk)->clk_cc))
-
-int clk_debug = 0;
-
-/*ARGSUSED*/
-clkopen(dev, tp)
- dev_t dev;
- register struct tty *tp;
-{
- register struct clkdata *clk;
-
- /*
- * Don't allow multiple opens. This will also protect us
- * from someone opening /dev/tty
- */
- if (tp->t_line == CLKLDISC)
- return (EBUSY);
- ttywflush(tp);
- for (clk = clk_data; clk < &clk_data[NCLK]; clk++)
- if (!clk->inuse)
- break;
- if (clk >= &clk_data[NCLK])
- return (EBUSY);
- clk->inuse++;
- clk->clk_cc = 0;
- clk->clk_cf = clk->clk_cl = NULL;
- tp->T_LINEP = (caddr_t) clk;
- return (0);
-}
-
-
-/*
- * Break down... called when discipline changed or from device
- * close routine.
- */
-clkclose(tp)
- register struct tty *tp;
-{
- register struct clkdata *clk;
- register int s = spltty();
-
- clk = (struct clkdata *)tp->T_LINEP;
- if (clk->clk_cc > 0)
- clk_bflush(clk);
- clk->inuse = 0;
- tp->t_line = 0; /* paranoid: avoid races */
- splx(s);
-}
-
-
-/*
- * Receive a write request. We pass these requests on to the terminal
- * driver, except that if the CRMOD bit is set in the flags we
- * first flush the input queues.
- */
-clkwrite(tp, uio)
- register struct tty *tp;
- struct uio *uio;
-{
- if (tp->t_flags & CRMOD) {
- register struct clkdata *clk;
- int s;
-
- s = spltty();
- if (tp->t_rawq.c_cc > 0)
- ndflush(&tp->t_rawq, tp->t_rawq.c_cc);
- clk = (struct clkdata *) tp->T_LINEP;
- if (clk->clk_cc > 0)
- clk_bflush(clk);
- (void)splx(s);
- }
- ttwrite(tp, uio);
-}
-
-
-/*
- * Low level character input routine.
- * If the character looks okay, grab a time stamp. If the stuff in
- * the buffer is too old, dump it and start fresh. If the character is
- * non-BCDish, everything in the buffer too.
- */
-clkinput(c, tp)
- register int c;
- register struct tty *tp;
-{
- register struct clkdata *clk;
- register int i;
- register long s;
- struct timeval tv;
-
- /*
- * Check to see whether this isn't the magic character. If not,
- * save the character and return.
- */
-#ifdef ultrix
- if (c != tp->t_cc[VERASE] && c != tp->t_cc[VKILL]) {
-#else
- if (c != tp->t_erase && c != tp->t_kill) {
-#endif
- clk = (struct clkdata *) tp->T_LINEP;
- if (clk->clk_cc >= CLKLINESIZE)
- clk_bflush(clk);
- if (putc(c, &clk->clkbuf) == -1) {
- /*
- * Hopeless, no clists. Flush what we have
- * and hope things improve.
- */
- clk_bflush(clk);
- }
- return;
- }
-
- /*
- * Here we have a magic character. Get a timestamp and store
- * everything.
- */
- microtime(&tv);
- clk = (struct clkdata *) tp->T_LINEP;
-
- if (putc(c, &clk->clkbuf) == -1)
- goto flushout;
-
-#ifdef CLKLDISC
- /*
- * STREAMS people started writing timestamps this way.
- * It's not my fault, I am just going along with the flow...
- */
- for (i = 0; i < sizeof(struct timeval); i++)
- if (putc(*( ((char*)&tv) + i ), &clk->clkbuf) == -1)
- goto flushout;
-#else
- /*
- * This is a machine independant way of puting longs into
- * the datastream. It has fallen into disuse...
- */
- s = tv.tv_sec;
- for (i = 0; i < sizeof(long); i++) {
- if (putc((s >> 24) & 0xff, &clk->clkbuf) == -1)
- goto flushout;
- s <<= 8;
- }
-
- s = tv.tv_usec;
- for (i = 0; i < sizeof(long); i++) {
- if (putc((s >> 24) & 0xff, &clk->clkbuf) == -1)
- goto flushout;
- s <<= 8;
- }
-#endif
-
- /*
- * If the length of the rawq exceeds our sanity limit, dump
- * all the old crap in there before copying this in.
- */
- if (tp->t_rawq.c_cc > NCLKCHARS)
- ndflush(&tp->t_rawq, tp->t_rawq.c_cc);
-
- /*
- * Now copy the buffer in. There is a special case optimization
- * here. If there is nothing on the rawq at present we can
- * just copy the clists we own over. Otherwise we must concatenate
- * the present data on the end.
- */
- s = (long)spltty();
- if (tp->t_rawq.c_cc <= 0) {
- tp->t_rawq = clk->clkbuf;
- clk->clk_cc = 0;
- clk->clk_cl = clk->clk_cf = NULL;
- (void) splx((int)s);
- } else {
- (void) splx((int)s);
- catq(&clk->clkbuf, &tp->t_rawq);
- clk_bflush(clk);
- }
-
- /*
- * Tell the world
- */
- ttwakeup(tp);
- return;
-
-flushout:
- /*
- * It would be nice if this never happened. Flush the
- * internal clists and hope someone else frees some of them
- */
- clk_bflush(clk);
- return;
-}
-
-
-/*
- * Handle ioctls. We reject most tty-style except those that
- * change the line discipline and a couple of others..
- */
-clkioctl(tp, cmd, data, flag)
- struct tty *tp;
- int cmd;
- caddr_t data;
- int flag;
-{
- int flags;
- struct sgttyb *sg;
-
- if ((cmd>>8) != 't')
- return (-1);
- switch (cmd) {
- case TIOCSETD:
- case TIOCGETD:
- case TIOCGETP:
- case TIOCGETC:
- case TIOCOUTQ:
- return (-1);
-
- case TIOCSETP:
- /*
- * He likely wants to set new magic characters in.
- * Do this part.
- */
- sg = (struct sgttyb *)data;
-#ifdef ultrix
- tp->t_cc[VERASE] = sg->sg_erase;
- tp->t_cc[VKILL] = sg->sg_kill;
-#else
- tp->t_erase = sg->sg_erase;
- tp->t_kill = sg->sg_kill;
-#endif
- return (0);
-
- case TIOCFLUSH:
- flags = *(int *)data;
- if (flags == 0 || (flags & FREAD)) {
- register struct clkdata *clk;
-
- clk = (struct clkdata *) tp->T_LINEP;
- if (clk->clk_cc > 0)
- clk_bflush(clk);
- }
- return (-1);
-
- default:
- break;
- }
- return (ENOTTY); /* not quite appropriate */
-}
-#endif NCLK
diff --git a/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c b/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c
deleted file mode 100644
index 13b0a25..0000000
--- a/usr.sbin/xntpd/kernel/tty_clk_STREAMS.c
+++ /dev/null
@@ -1,266 +0,0 @@
-/* tty_clk_STREAMS.c,v 3.1 1993/07/06 01:07:34 jbj Exp
- * Timestamp STREAMS module for SunOS 4.1
- *
- * Copyright 1991, Nick Sayer
- *
- * Special thanks to Greg Onufer for his debug assists.
- *
- * Should be PUSHed directly on top of a serial I/O channel.
- * For any character in a user-designated set, adds a kernel
- * timestamp to that character.
- *
- * BUGS:
- *
- * Only so many characters can be timestamped. This number, however,
- * is adjustable.
- *
- * The null character ($00) cannot be timestamped.
- *
- * The M_DATA messages passed upstream will not be the same
- * size as when they arrive from downstream, even if no
- * timestamp character is in the message. This, however,
- * should not affect anything.
- *
- */
-
-#include "clk.h"
-#if NCLK > 0
-/*
- * How big should the messages we pass upstream be?
- */
-#define MESSAGE_SIZE 128
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/stream.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/kernel.h>
-#include <sys/user.h>
-#include <sys/errno.h>
-#include <sys/syslog.h>
-
-#include <sys/clkdefs.h>
-
-static struct module_info rminfo = { 0, "clk", 0, INFPSZ, 0, 0 };
-static struct module_info wminfo = { 0, "clk", 0, INFPSZ, 0, 0 };
-static int clkopen(), clkrput(), clkwput(), clkclose();
-
-static struct qinit rinit = { clkrput, NULL, clkopen, clkclose, NULL,
- &rminfo, NULL };
-
-static struct qinit winit = { clkwput, NULL, NULL, NULL, NULL,
- &wminfo, NULL };
-
-struct streamtab clkinfo = { &rinit, &winit, NULL, NULL };
-
-struct priv_data_type
-{
- char in_use;
- char string[CLK_MAXSTRSIZE];
-} priv_data[NCLK];
-
-char first_open=1;
-
-/*
- * God only knows why, but linking with strchr() fails
- * on my system, so here's a renamed copy.
- */
-
-u_char *str_chr(s,c)
-u_char *s;
-int c;
-{
- while (*s)
- if(*s++ == c)
- return (s-1);
- return NULL;
-}
-
-/*ARGSUSED*/
-static int clkopen(q, dev, flag, sflag)
-queue_t *q;
-dev_t dev;
-int flag;
-int sflag;
-{
- int i;
-
-/* Damn it! We can't even have the global data struct properly
- initialized! So we have a mark to tell us to init the global
- data on the first open */
-
- if (first_open)
- {
- first_open=0;
-
- for(i=0;i<NCLK;i++)
- priv_data[i].in_use=0;
- }
-
- for(i=0;i<NCLK;i++)
- if(!priv_data[i].in_use)
- {
- priv_data[i].in_use++;
- ((struct priv_data_type *) (q->q_ptr))=priv_data+i;
- priv_data[i].string[0]=0;
- return (0);
- }
- u.u_error = EBUSY;
- return (OPENFAIL);
-}
-
-/*ARGSUSED*/
-static int clkclose(q, flag)
-queue_t *q;
-int flag;
-{
- ((struct priv_data_type *) (q->q_ptr))->in_use=0;
-
- return (0);
-}
-
-/*
- * Now the crux of the biscuit.
- *
- * If it's an M_DATA package, we take each character and pass
- * it to clkchar.
- */
-
-void clkchar();
-
-static int clkrput(q, mp)
-queue_t *q;
-mblk_t *mp;
-{
- mblk_t *bp;
-
- switch(mp->b_datap->db_type)
- {
- case M_DATA:
- clkchar(0,q,2);
- for(bp=mp; bp!=NULL; bp=bp->b_cont)
- {
- while(bp->b_rptr < bp->b_wptr)
- clkchar( ((u_char)*(bp->b_rptr++)) , q , 0 );
- }
- clkchar(0,q,1);
- freemsg(mp);
- break;
- default:
- putnext(q,mp);
- break;
- }
-
-}
-
-/*
- * If it's a matching M_IOCTL, handle it.
- */
-
-static int clkwput(q, mp)
-queue_t *q;
-mblk_t *mp;
-{
- struct iocblk *iocp;
-
- switch(mp->b_datap->db_type)
- {
- case M_IOCTL:
- iocp=(struct iocblk*) mp->b_rptr;
- if (iocp->ioc_cmd==CLK_SETSTR)
- {
- strncpy( ((struct priv_data_type *) (RD(q)->q_ptr))->string,
- (char *) mp->b_cont->b_rptr,CLK_MAXSTRSIZE);
- /* make sure it's null terminated */
- ((struct priv_data_type *) (RD(q)->q_ptr))->string[CLK_MAXSTRSIZE-1]=0;
- mp->b_datap->db_type = M_IOCACK;
- qreply(q,mp);
- }
- else
- putnext(q,mp);
- break;
- default:
- putnext(q,mp);
- break;
- }
-}
-
-/*
- * Now clkchar. It takes a character, a queue pointer and an action
- * flag and depending on the flag either:
- *
- * 0 - adds the character to the current message. If there's a
- * timestamp to be done, do that too. If the message is less than
- * 8 chars from being full, link in a new one, and set it up for
- * the next call.
- *
- * 1 - sends the whole mess to Valhala.
- *
- * 2 - set things up.
- *
- * Yeah, it's an ugly hack. Complaints may be filed with /dev/null.
- */
-
-
-void clkchar(c,q,f)
- register u_char c;
- queue_t *q;
- char f;
-{
- static char error;
- static mblk_t *message,*mp;
- struct timeval tv;
-
-/* Get a timestamp ASAP! */
- uniqtime(&tv);
-
- switch(f)
- {
- case 1:
- if (!error)
- putnext(q,message);
- break;
- case 2:
- mp=message= (mblk_t*) allocb(MESSAGE_SIZE,BPRI_LO);
- error=(message==NULL);
- if (error)
- log(LOG_ERR,"clk: cannot allocate message - data lost");
- break;
- case 0:
- if (error) /* If we had an error, forget it. */
- return;
-
- *mp->b_wptr++=c; /* Put the char away first.
-
- /* If it's in the special string, append a struct timeval */
-
- if (str_chr( ((struct priv_data_type *) (q->q_ptr))->string ,
- c )!=NULL)
- {
- int i;
-
- for (i=0;i<sizeof(struct timeval);i++)
- *mp->b_wptr++= *( ((char*)&tv) + i );
- }
-
- /* If we don't have space for a complete struct timeval, and a
- char, it's time for a new mp block */
-
- if (((mp->b_wptr-mp->b_rptr)+sizeof(struct timeval)+2)>MESSAGE_SIZE)
- {
- mp->b_cont= (mblk_t*) allocb(MESSAGE_SIZE,BPRI_LO);
- error=(mp->b_cont==NULL);
- if (error)
- {
- log(LOG_ERR,"clk: cannot allocate message - data lost");
- freemsg(message);
- }
- mp=mp->b_cont;
- }
-
- break;
- }
-}
-
-#endif
diff --git a/usr.sbin/xntpd/lib/Makefile.tmpl b/usr.sbin/xntpd/lib/Makefile.tmpl
deleted file mode 100644
index 1a8d020..0000000
--- a/usr.sbin/xntpd/lib/Makefile.tmpl
+++ /dev/null
@@ -1,75 +0,0 @@
-#
-# Makefile.tmpl
-#
-LIBNAME= libntp
-#
-# xntp routines which are used a lot of places
-#
-COMPILER= cc
-COPTS= -O
-AUTHDEFS=-DDES
-LIBDEFS= -DBIG_ENDIAN
-RANLIB= ranlib
-INSTALL= install
-CLOCKDEFS=
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-#
-INCL=-I../include
-CFLAGS= $(COPTS) $(AUTHDEFS) $(LIBDEFS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-#
-SOURCE= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \
- authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \
- buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \
- clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c getopt.c \
- gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \
- lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \
- msutotsf.c numtoa.c refnumtoa.c numtohost.c octtoint.c \
- prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \
- uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \
- md5.c a_md5encrypt.c a_md5decrypt.c \
- a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
- findconfig.c netof.c
-
-OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \
- authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \
- buftvtots.o caljulian.o calleapwhen.o caltontp.o calyearstart.o \
- clocktime.o dofptoa.o dolfptoa.o emalloc.o fptoa.o fptoms.o getopt.o \
- gettstamp.o hextoint.o hextolfp.o humandate.o inttoa.o \
- lib_strbuf.o mfptoa.o mfptoms.o modetoa.o mstolfp.o \
- msutotsf.o numtoa.o refnumtoa.o numtohost.o octtoint.o \
- prettydate.o ranny.o tsftomsu.o tstotv.o tvtoa.o tvtots.o \
- uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \
- md5.o a_md5encrypt.o a_md5decrypt.o \
- a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \
- findconfig.o netof.o
-
-$(LIBNAME).a: $(OBJS)
- ar rv $@ $?
- -rm -f $?
- @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \
- ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
- else \
- :; \
- fi
- $(RANLIB) $@
-
-lintlib: llib-l$(LIBNAME).ln
-
-llib-l$(LIBNAME).ln: $(SOURCE)
- lint -C$(LIBNAME) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lintlib.errs
-
-lint:
- lint -u $(DEFS) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lint.errs
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(LIBNAME).a *.o *.out *.ln make.log Makefile.bak \
- lintlib.errs lint.errs
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
diff --git a/usr.sbin/xntpd/lib/authdes.c b/usr.sbin/xntpd/lib/authdes.c
deleted file mode 100644
index dd122de..0000000
--- a/usr.sbin/xntpd/lib/authdes.c
+++ /dev/null
@@ -1,845 +0,0 @@
-/*
- * authdes.c - an implementation of the DES cipher algorithm for NTP
- */
-#include "ntp_stdlib.h"
-
-/*
- * There are two entries in here. auth_subkeys() called to
- * compute the encryption and decryption key schedules, while
- * auth_des() is called to do the actual encryption/decryption
- */
-
-/*
- * Key setup. Here we entirely permute a key, saving the results
- * for both the encryption and decryption. Note that while the
- * decryption subkeys are simply the encryption keys reordered,
- * we save both so that a common cipher routine may be used.
- */
-
-/*
- * Permuted choice 1 tables. These are used to extract bits
- * from the left and right parts of the key to form Ci and Di.
- * The code that uses these tables knows which bits from which
- * part of each key are used to form Ci and Di.
- */
-static U_LONG PC1_CL[8] = {
- 0x00000000, 0x00000010, 0x00001000, 0x00001010,
- 0x00100000, 0x00100010, 0x00101000, 0x00101010
-};
-
-static U_LONG PC1_DL[16] = {
- 0x00000000, 0x00100000, 0x00001000, 0x00101000,
- 0x00000010, 0x00100010, 0x00001010, 0x00101010,
- 0x00000001, 0x00100001, 0x00001001, 0x00101001,
- 0x00000011, 0x00100011, 0x00001011, 0x00101011
-};
-
-static U_LONG PC1_CR[16] = {
- 0x00000000, 0x00000001, 0x00000100, 0x00000101,
- 0x00010000, 0x00010001, 0x00010100, 0x00010101,
- 0x01000000, 0x01000001, 0x01000100, 0x01000101,
- 0x01010000, 0x01010001, 0x01010100, 0x01010101
-};
-
-static U_LONG PC1_DR[8] = {
- 0x00000000, 0x01000000, 0x00010000, 0x01010000,
- 0x00000100, 0x01000100, 0x00010100, 0x01010100
-};
-
-
-/*
- * At the start of some iterations of the key schedule we do
- * a circular left shift by one place, while for others we do a shift by
- * two places. This has bits set for the iterations where we do 2 bit
- * shifts, starting at the low order bit.
- */
-#define TWO_BIT_SHIFTS 0x7efc
-
-/*
- * Permuted choice 2 tables. The first actually produces the low order
- * 24 bits of the subkey Ki from the 28 bit value of Ci. The second produces
- * the high order 24 bits from Di. The tables are indexed by six bit
- * segments of Ci and Di respectively. The code is handcrafted to compute
- * the appropriate 6 bit chunks.
- *
- * Note that for ease of computation, the 24 bit values are produced with
- * six bits going into each byte.
- */
-static U_LONG PC2_C[4][64] = {
- { 0x00000000, 0x00040000, 0x01000000, 0x01040000,
- 0x00000400, 0x00040400, 0x01000400, 0x01040400,
- 0x00200000, 0x00240000, 0x01200000, 0x01240000,
- 0x00200400, 0x00240400, 0x01200400, 0x01240400,
- 0x00000001, 0x00040001, 0x01000001, 0x01040001,
- 0x00000401, 0x00040401, 0x01000401, 0x01040401,
- 0x00200001, 0x00240001, 0x01200001, 0x01240001,
- 0x00200401, 0x00240401, 0x01200401, 0x01240401,
- 0x02000000, 0x02040000, 0x03000000, 0x03040000,
- 0x02000400, 0x02040400, 0x03000400, 0x03040400,
- 0x02200000, 0x02240000, 0x03200000, 0x03240000,
- 0x02200400, 0x02240400, 0x03200400, 0x03240400,
- 0x02000001, 0x02040001, 0x03000001, 0x03040001,
- 0x02000401, 0x02040401, 0x03000401, 0x03040401,
- 0x02200001, 0x02240001, 0x03200001, 0x03240001,
- 0x02200401, 0x02240401, 0x03200401, 0x03240401 },
-
- { 0x00000000, 0x00000002, 0x00000800, 0x00000802,
- 0x08000000, 0x08000002, 0x08000800, 0x08000802,
- 0x00010000, 0x00010002, 0x00010800, 0x00010802,
- 0x08010000, 0x08010002, 0x08010800, 0x08010802,
- 0x00000100, 0x00000102, 0x00000900, 0x00000902,
- 0x08000100, 0x08000102, 0x08000900, 0x08000902,
- 0x00010100, 0x00010102, 0x00010900, 0x00010902,
- 0x08010100, 0x08010102, 0x08010900, 0x08010902,
- 0x00000010, 0x00000012, 0x00000810, 0x00000812,
- 0x08000010, 0x08000012, 0x08000810, 0x08000812,
- 0x00010010, 0x00010012, 0x00010810, 0x00010812,
- 0x08010010, 0x08010012, 0x08010810, 0x08010812,
- 0x00000110, 0x00000112, 0x00000910, 0x00000912,
- 0x08000110, 0x08000112, 0x08000910, 0x08000912,
- 0x00010110, 0x00010112, 0x00010910, 0x00010912,
- 0x08010110, 0x08010112, 0x08010910, 0x08010912 },
-
- { 0x00000000, 0x04000000, 0x00002000, 0x04002000,
- 0x10000000, 0x14000000, 0x10002000, 0x14002000,
- 0x00000020, 0x04000020, 0x00002020, 0x04002020,
- 0x10000020, 0x14000020, 0x10002020, 0x14002020,
- 0x00080000, 0x04080000, 0x00082000, 0x04082000,
- 0x10080000, 0x14080000, 0x10082000, 0x14082000,
- 0x00080020, 0x04080020, 0x00082020, 0x04082020,
- 0x10080020, 0x14080020, 0x10082020, 0x14082020,
- 0x20000000, 0x24000000, 0x20002000, 0x24002000,
- 0x30000000, 0x34000000, 0x30002000, 0x34002000,
- 0x20000020, 0x24000020, 0x20002020, 0x24002020,
- 0x30000020, 0x34000020, 0x30002020, 0x34002020,
- 0x20080000, 0x24080000, 0x20082000, 0x24082000,
- 0x30080000, 0x34080000, 0x30082000, 0x34082000,
- 0x20080020, 0x24080020, 0x20082020, 0x24082020,
- 0x30080020, 0x34080020, 0x30082020, 0x34082020 },
-
- { 0x00000000, 0x00100000, 0x00000008, 0x00100008,
- 0x00000200, 0x00100200, 0x00000208, 0x00100208,
- 0x00020000, 0x00120000, 0x00020008, 0x00120008,
- 0x00020200, 0x00120200, 0x00020208, 0x00120208,
- 0x00000004, 0x00100004, 0x0000000c, 0x0010000c,
- 0x00000204, 0x00100204, 0x0000020c, 0x0010020c,
- 0x00020004, 0x00120004, 0x0002000c, 0x0012000c,
- 0x00020204, 0x00120204, 0x0002020c, 0x0012020c,
- 0x00001000, 0x00101000, 0x00001008, 0x00101008,
- 0x00001200, 0x00101200, 0x00001208, 0x00101208,
- 0x00021000, 0x00121000, 0x00021008, 0x00121008,
- 0x00021200, 0x00121200, 0x00021208, 0x00121208,
- 0x00001004, 0x00101004, 0x0000100c, 0x0010100c,
- 0x00001204, 0x00101204, 0x0000120c, 0x0010120c,
- 0x00021004, 0x00121004, 0x0002100c, 0x0012100c,
- 0x00021204, 0x00121204, 0x0002120c, 0x0012120c }
-};
-
-static U_LONG PC2_D[4][64] = {
- { 0x00000000, 0x00000200, 0x00020000, 0x00020200,
- 0x00000001, 0x00000201, 0x00020001, 0x00020201,
- 0x08000000, 0x08000200, 0x08020000, 0x08020200,
- 0x08000001, 0x08000201, 0x08020001, 0x08020201,
- 0x00200000, 0x00200200, 0x00220000, 0x00220200,
- 0x00200001, 0x00200201, 0x00220001, 0x00220201,
- 0x08200000, 0x08200200, 0x08220000, 0x08220200,
- 0x08200001, 0x08200201, 0x08220001, 0x08220201,
- 0x00000002, 0x00000202, 0x00020002, 0x00020202,
- 0x00000003, 0x00000203, 0x00020003, 0x00020203,
- 0x08000002, 0x08000202, 0x08020002, 0x08020202,
- 0x08000003, 0x08000203, 0x08020003, 0x08020203,
- 0x00200002, 0x00200202, 0x00220002, 0x00220202,
- 0x00200003, 0x00200203, 0x00220003, 0x00220203,
- 0x08200002, 0x08200202, 0x08220002, 0x08220202,
- 0x08200003, 0x08200203, 0x08220003, 0x08220203 },
-
- { 0x00000000, 0x00000010, 0x20000000, 0x20000010,
- 0x00100000, 0x00100010, 0x20100000, 0x20100010,
- 0x00000800, 0x00000810, 0x20000800, 0x20000810,
- 0x00100800, 0x00100810, 0x20100800, 0x20100810,
- 0x04000000, 0x04000010, 0x24000000, 0x24000010,
- 0x04100000, 0x04100010, 0x24100000, 0x24100010,
- 0x04000800, 0x04000810, 0x24000800, 0x24000810,
- 0x04100800, 0x04100810, 0x24100800, 0x24100810,
- 0x00000004, 0x00000014, 0x20000004, 0x20000014,
- 0x00100004, 0x00100014, 0x20100004, 0x20100014,
- 0x00000804, 0x00000814, 0x20000804, 0x20000814,
- 0x00100804, 0x00100814, 0x20100804, 0x20100814,
- 0x04000004, 0x04000014, 0x24000004, 0x24000014,
- 0x04100004, 0x04100014, 0x24100004, 0x24100014,
- 0x04000804, 0x04000814, 0x24000804, 0x24000814,
- 0x04100804, 0x04100814, 0x24100804, 0x24100814 },
-
- { 0x00000000, 0x00001000, 0x00010000, 0x00011000,
- 0x02000000, 0x02001000, 0x02010000, 0x02011000,
- 0x00000020, 0x00001020, 0x00010020, 0x00011020,
- 0x02000020, 0x02001020, 0x02010020, 0x02011020,
- 0x00040000, 0x00041000, 0x00050000, 0x00051000,
- 0x02040000, 0x02041000, 0x02050000, 0x02051000,
- 0x00040020, 0x00041020, 0x00050020, 0x00051020,
- 0x02040020, 0x02041020, 0x02050020, 0x02051020,
- 0x00002000, 0x00003000, 0x00012000, 0x00013000,
- 0x02002000, 0x02003000, 0x02012000, 0x02013000,
- 0x00002020, 0x00003020, 0x00012020, 0x00013020,
- 0x02002020, 0x02003020, 0x02012020, 0x02013020,
- 0x00042000, 0x00043000, 0x00052000, 0x00053000,
- 0x02042000, 0x02043000, 0x02052000, 0x02053000,
- 0x00042020, 0x00043020, 0x00052020, 0x00053020,
- 0x02042020, 0x02043020, 0x02052020, 0x02053020 },
-
- { 0x00000000, 0x00000400, 0x01000000, 0x01000400,
- 0x00000100, 0x00000500, 0x01000100, 0x01000500,
- 0x10000000, 0x10000400, 0x11000000, 0x11000400,
- 0x10000100, 0x10000500, 0x11000100, 0x11000500,
- 0x00080000, 0x00080400, 0x01080000, 0x01080400,
- 0x00080100, 0x00080500, 0x01080100, 0x01080500,
- 0x10080000, 0x10080400, 0x11080000, 0x11080400,
- 0x10080100, 0x10080500, 0x11080100, 0x11080500,
- 0x00000008, 0x00000408, 0x01000008, 0x01000408,
- 0x00000108, 0x00000508, 0x01000108, 0x01000508,
- 0x10000008, 0x10000408, 0x11000008, 0x11000408,
- 0x10000108, 0x10000508, 0x11000108, 0x11000508,
- 0x00080008, 0x00080408, 0x01080008, 0x01080408,
- 0x00080108, 0x00080508, 0x01080108, 0x01080508,
- 0x10080008, 0x10080408, 0x11080008, 0x11080408,
- 0x10080108, 0x10080508, 0x11080108, 0x11080508 }
-};
-
-
-
-/*
- * Permute the key to give us our key schedule.
- */
-void
-DESauth_subkeys(key, encryptkeys, decryptkeys)
- const U_LONG *key;
- u_char *encryptkeys;
- u_char *decryptkeys;
-{
- register U_LONG tmp;
- register U_LONG c, d;
- register u_char *ek, *dk;
- register int two_bit_shifts;
- register int i;
-
- /*
- * The first permutted choice gives us the 28 bits for C0 and
- * 28 for D0. C0 gets 12 bits from the left key and 16 from
- * the right, while D0 gets 16 from the left and 12 from the
- * right. The code knows which bits go where.
- */
- tmp = *key; /* left part of key */
- c = PC1_CL[(tmp >> 29) & 0x7]
- | (PC1_CL[(tmp >> 21) & 0x7] << 1)
- | (PC1_CL[(tmp >> 13) & 0x7] << 2)
- | (PC1_CL[(tmp >> 5) & 0x7] << 3);
- d = PC1_DL[(tmp >> 25) & 0xf]
- | (PC1_DL[(tmp >> 17) & 0xf] << 1)
- | (PC1_DL[(tmp >> 9) & 0xf] << 2)
- | (PC1_DL[(tmp >> 1) & 0xf] << 3);
-
- tmp = *(key+1); /* right part of key */
- c |= PC1_CR[(tmp >> 28) & 0xf]
- | (PC1_CR[(tmp >> 20) & 0xf] << 1)
- | (PC1_CR[(tmp >> 12) & 0xf] << 2)
- | (PC1_CR[(tmp >> 4) & 0xf] << 3);
- d |= PC1_DR[(tmp >> 25) & 0x7]
- | (PC1_DR[(tmp >> 17) & 0x7] << 1)
- | (PC1_DR[(tmp >> 9) & 0x7] << 2)
- | (PC1_DR[(tmp >> 1) & 0x7] << 3);
-
- /*
- * Now iterate to compute the key schedule. Note that we
- * record the entire set of subkeys in 6 bit chunks since
- * they are used that way. At 6 bits/char, we need
- * 48/6 char's/subkey * 16 subkeys/encryption == 128 chars.
- * encryptkeys and decryptkeys must be this big.
- */
- ek = encryptkeys;
- dk = decryptkeys + (8 * 15);
- two_bit_shifts = TWO_BIT_SHIFTS;
- for (i = 16; i > 0; i--) {
- /*
- * Do the rotation. One bit and two bit rotations
- * are done separately. Note C and D are 28 bits.
- */
- if (two_bit_shifts & 0x1) {
- c = ((c << 2) & 0xffffffc) | (c >> 26);
- d = ((d << 2) & 0xffffffc) | (d >> 26);
- } else {
- c = ((c << 1) & 0xffffffe) | (c >> 27);
- d = ((d << 1) & 0xffffffe) | (d >> 27);
- }
- two_bit_shifts >>= 1;
-
- /*
- * Apply permutted choice 2 to C to get the first
- * 24 bits worth of keys. Note that bits 9, 18, 22
- * and 25 (using DES numbering) in C are unused. The
- * shift-mask stuff is done to delete these bits from
- * the indices, since this cuts the table size in half.
- */
- tmp = PC2_C[0][((c >> 22) & 0x3f)]
- | PC2_C[1][((c >> 15) & 0xf) | ((c >> 16) & 0x30)]
- | PC2_C[2][((c >> 4) & 0x3) | ((c >> 9) & 0x3c)]
- | PC2_C[3][((c ) & 0x7) | ((c >> 4) & 0x38)];
- *ek++ = *dk++ = (u_char)(tmp >> 24);
- *ek++ = *dk++ = (u_char)(tmp >> 16);
- *ek++ = *dk++ = (u_char)(tmp >> 8);
- *ek++ = *dk++ = (u_char)tmp;
-
- /*
- * Apply permutted choice 2 to D to get the other half.
- * Here, bits 7, 10, 15 and 26 go unused. The sqeezing
- * actually turns out to be cheaper here.
- */
- tmp = PC2_D[0][((d >> 22) & 0x3f)]
- | PC2_D[1][((d >> 14) & 0xf) | ((d >> 15) & 0x30)]
- | PC2_D[2][((d >> 7) & 0x3f)]
- | PC2_D[3][((d ) & 0x3) | ((d >> 1) & 0x3c)];
- *ek++ = *dk++ = (u_char)(tmp >> 24);
- *ek++ = *dk++ = (u_char)(tmp >> 16);
- *ek++ = *dk++ = (u_char)(tmp >> 8);
- *ek++ = *dk++ = (u_char)tmp;
-
- /*
- * We are filling in the decryption subkeys from the end.
- * Space it back 16 elements to get to the start of the
- * next set.
- */
- dk -= 16;
- }
-}
-
-/*
- * The DES algorithm. This is intended to be fairly speedy at the
- * expense of some memory.
- *
- * This uses all the standard hacks. The S boxes and the P permutation
- * are precomputed into one table. The E box never actually appears
- * explicitly since it is easy to apply this algorithmically. The
- * initial permutation and final (inverse initial) permuation are
- * computed from tables designed to permute four bits at a time. This
- * should run pretty fast on machines with 32 bit words and
- * bit field/multiple bit shift instructions which are fast.
- */
-
-/*
- * The initial permutation array. This is used to compute both the
- * left and the right halves of the initial permutation using bytes
- * from words made from the following operations:
- *
- * ((left & 0x55555555) << 1) | (right & 0x55555555) for left half
- * (left & 0xaaaaaaaa) | ((right & 0xaaaaaaaa) >> 1) for right half
- *
- * The scheme is that we index into the table using each byte. The
- * result from the high order byte is or'd with the result from the
- * next byte shifted left once is or'd with the result from the next
- * byte shifted left twice if or'd with the result from the low order
- * byte shifted left by three. Clear?
- */
-static U_LONG IP[256] = {
- 0x00000000, 0x00000010, 0x00000001, 0x00000011,
- 0x00001000, 0x00001010, 0x00001001, 0x00001011,
- 0x00000100, 0x00000110, 0x00000101, 0x00000111,
- 0x00001100, 0x00001110, 0x00001101, 0x00001111,
- 0x00100000, 0x00100010, 0x00100001, 0x00100011,
- 0x00101000, 0x00101010, 0x00101001, 0x00101011,
- 0x00100100, 0x00100110, 0x00100101, 0x00100111,
- 0x00101100, 0x00101110, 0x00101101, 0x00101111,
- 0x00010000, 0x00010010, 0x00010001, 0x00010011,
- 0x00011000, 0x00011010, 0x00011001, 0x00011011,
- 0x00010100, 0x00010110, 0x00010101, 0x00010111,
- 0x00011100, 0x00011110, 0x00011101, 0x00011111,
- 0x00110000, 0x00110010, 0x00110001, 0x00110011,
- 0x00111000, 0x00111010, 0x00111001, 0x00111011,
- 0x00110100, 0x00110110, 0x00110101, 0x00110111,
- 0x00111100, 0x00111110, 0x00111101, 0x00111111,
- 0x10000000, 0x10000010, 0x10000001, 0x10000011,
- 0x10001000, 0x10001010, 0x10001001, 0x10001011,
- 0x10000100, 0x10000110, 0x10000101, 0x10000111,
- 0x10001100, 0x10001110, 0x10001101, 0x10001111,
- 0x10100000, 0x10100010, 0x10100001, 0x10100011,
- 0x10101000, 0x10101010, 0x10101001, 0x10101011,
- 0x10100100, 0x10100110, 0x10100101, 0x10100111,
- 0x10101100, 0x10101110, 0x10101101, 0x10101111,
- 0x10010000, 0x10010010, 0x10010001, 0x10010011,
- 0x10011000, 0x10011010, 0x10011001, 0x10011011,
- 0x10010100, 0x10010110, 0x10010101, 0x10010111,
- 0x10011100, 0x10011110, 0x10011101, 0x10011111,
- 0x10110000, 0x10110010, 0x10110001, 0x10110011,
- 0x10111000, 0x10111010, 0x10111001, 0x10111011,
- 0x10110100, 0x10110110, 0x10110101, 0x10110111,
- 0x10111100, 0x10111110, 0x10111101, 0x10111111,
- 0x01000000, 0x01000010, 0x01000001, 0x01000011,
- 0x01001000, 0x01001010, 0x01001001, 0x01001011,
- 0x01000100, 0x01000110, 0x01000101, 0x01000111,
- 0x01001100, 0x01001110, 0x01001101, 0x01001111,
- 0x01100000, 0x01100010, 0x01100001, 0x01100011,
- 0x01101000, 0x01101010, 0x01101001, 0x01101011,
- 0x01100100, 0x01100110, 0x01100101, 0x01100111,
- 0x01101100, 0x01101110, 0x01101101, 0x01101111,
- 0x01010000, 0x01010010, 0x01010001, 0x01010011,
- 0x01011000, 0x01011010, 0x01011001, 0x01011011,
- 0x01010100, 0x01010110, 0x01010101, 0x01010111,
- 0x01011100, 0x01011110, 0x01011101, 0x01011111,
- 0x01110000, 0x01110010, 0x01110001, 0x01110011,
- 0x01111000, 0x01111010, 0x01111001, 0x01111011,
- 0x01110100, 0x01110110, 0x01110101, 0x01110111,
- 0x01111100, 0x01111110, 0x01111101, 0x01111111,
- 0x11000000, 0x11000010, 0x11000001, 0x11000011,
- 0x11001000, 0x11001010, 0x11001001, 0x11001011,
- 0x11000100, 0x11000110, 0x11000101, 0x11000111,
- 0x11001100, 0x11001110, 0x11001101, 0x11001111,
- 0x11100000, 0x11100010, 0x11100001, 0x11100011,
- 0x11101000, 0x11101010, 0x11101001, 0x11101011,
- 0x11100100, 0x11100110, 0x11100101, 0x11100111,
- 0x11101100, 0x11101110, 0x11101101, 0x11101111,
- 0x11010000, 0x11010010, 0x11010001, 0x11010011,
- 0x11011000, 0x11011010, 0x11011001, 0x11011011,
- 0x11010100, 0x11010110, 0x11010101, 0x11010111,
- 0x11011100, 0x11011110, 0x11011101, 0x11011111,
- 0x11110000, 0x11110010, 0x11110001, 0x11110011,
- 0x11111000, 0x11111010, 0x11111001, 0x11111011,
- 0x11110100, 0x11110110, 0x11110101, 0x11110111,
- 0x11111100, 0x11111110, 0x11111101, 0x11111111
-};
-
-/*
- * The final permutation array. Like the IP array, used
- * to compute both the left and right results from the nibbles
- * of words computed from:
- *
- * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result
- * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result
- *
- * The result from the high order byte is shifted left 6 bits and
- * or'd with the result from the next byte shifted left 4 bits, which
- * is or'd with the result from the next byte shifted left 2 bits,
- * which is or'd with the result from the low byte.
- *
- * There is one of these for big end machines (the natural order for
- * DES) and a second for little end machines. One is a byte swapped
- * version of the other.
- */
-#ifndef XNTP_LITTLE_ENDIAN
- /*
- * Big end version
- */
-static U_LONG FP[256] = {
- 0x00000000, 0x02000000, 0x00020000, 0x02020000,
- 0x00000200, 0x02000200, 0x00020200, 0x02020200,
- 0x00000002, 0x02000002, 0x00020002, 0x02020002,
- 0x00000202, 0x02000202, 0x00020202, 0x02020202,
- 0x01000000, 0x03000000, 0x01020000, 0x03020000,
- 0x01000200, 0x03000200, 0x01020200, 0x03020200,
- 0x01000002, 0x03000002, 0x01020002, 0x03020002,
- 0x01000202, 0x03000202, 0x01020202, 0x03020202,
- 0x00010000, 0x02010000, 0x00030000, 0x02030000,
- 0x00010200, 0x02010200, 0x00030200, 0x02030200,
- 0x00010002, 0x02010002, 0x00030002, 0x02030002,
- 0x00010202, 0x02010202, 0x00030202, 0x02030202,
- 0x01010000, 0x03010000, 0x01030000, 0x03030000,
- 0x01010200, 0x03010200, 0x01030200, 0x03030200,
- 0x01010002, 0x03010002, 0x01030002, 0x03030002,
- 0x01010202, 0x03010202, 0x01030202, 0x03030202,
- 0x00000100, 0x02000100, 0x00020100, 0x02020100,
- 0x00000300, 0x02000300, 0x00020300, 0x02020300,
- 0x00000102, 0x02000102, 0x00020102, 0x02020102,
- 0x00000302, 0x02000302, 0x00020302, 0x02020302,
- 0x01000100, 0x03000100, 0x01020100, 0x03020100,
- 0x01000300, 0x03000300, 0x01020300, 0x03020300,
- 0x01000102, 0x03000102, 0x01020102, 0x03020102,
- 0x01000302, 0x03000302, 0x01020302, 0x03020302,
- 0x00010100, 0x02010100, 0x00030100, 0x02030100,
- 0x00010300, 0x02010300, 0x00030300, 0x02030300,
- 0x00010102, 0x02010102, 0x00030102, 0x02030102,
- 0x00010302, 0x02010302, 0x00030302, 0x02030302,
- 0x01010100, 0x03010100, 0x01030100, 0x03030100,
- 0x01010300, 0x03010300, 0x01030300, 0x03030300,
- 0x01010102, 0x03010102, 0x01030102, 0x03030102,
- 0x01010302, 0x03010302, 0x01030302, 0x03030302,
- 0x00000001, 0x02000001, 0x00020001, 0x02020001,
- 0x00000201, 0x02000201, 0x00020201, 0x02020201,
- 0x00000003, 0x02000003, 0x00020003, 0x02020003,
- 0x00000203, 0x02000203, 0x00020203, 0x02020203,
- 0x01000001, 0x03000001, 0x01020001, 0x03020001,
- 0x01000201, 0x03000201, 0x01020201, 0x03020201,
- 0x01000003, 0x03000003, 0x01020003, 0x03020003,
- 0x01000203, 0x03000203, 0x01020203, 0x03020203,
- 0x00010001, 0x02010001, 0x00030001, 0x02030001,
- 0x00010201, 0x02010201, 0x00030201, 0x02030201,
- 0x00010003, 0x02010003, 0x00030003, 0x02030003,
- 0x00010203, 0x02010203, 0x00030203, 0x02030203,
- 0x01010001, 0x03010001, 0x01030001, 0x03030001,
- 0x01010201, 0x03010201, 0x01030201, 0x03030201,
- 0x01010003, 0x03010003, 0x01030003, 0x03030003,
- 0x01010203, 0x03010203, 0x01030203, 0x03030203,
- 0x00000101, 0x02000101, 0x00020101, 0x02020101,
- 0x00000301, 0x02000301, 0x00020301, 0x02020301,
- 0x00000103, 0x02000103, 0x00020103, 0x02020103,
- 0x00000303, 0x02000303, 0x00020303, 0x02020303,
- 0x01000101, 0x03000101, 0x01020101, 0x03020101,
- 0x01000301, 0x03000301, 0x01020301, 0x03020301,
- 0x01000103, 0x03000103, 0x01020103, 0x03020103,
- 0x01000303, 0x03000303, 0x01020303, 0x03020303,
- 0x00010101, 0x02010101, 0x00030101, 0x02030101,
- 0x00010301, 0x02010301, 0x00030301, 0x02030301,
- 0x00010103, 0x02010103, 0x00030103, 0x02030103,
- 0x00010303, 0x02010303, 0x00030303, 0x02030303,
- 0x01010101, 0x03010101, 0x01030101, 0x03030101,
- 0x01010301, 0x03010301, 0x01030301, 0x03030301,
- 0x01010103, 0x03010103, 0x01030103, 0x03030103,
- 0x01010303, 0x03010303, 0x01030303, 0x03030303
-};
-#else
- /*
- * Byte swapped for little end machines.
- */
-static U_LONG FP[256] = {
- 0x00000000, 0x00000002, 0x00000200, 0x00000202,
- 0x00020000, 0x00020002, 0x00020200, 0x00020202,
- 0x02000000, 0x02000002, 0x02000200, 0x02000202,
- 0x02020000, 0x02020002, 0x02020200, 0x02020202,
- 0x00000001, 0x00000003, 0x00000201, 0x00000203,
- 0x00020001, 0x00020003, 0x00020201, 0x00020203,
- 0x02000001, 0x02000003, 0x02000201, 0x02000203,
- 0x02020001, 0x02020003, 0x02020201, 0x02020203,
- 0x00000100, 0x00000102, 0x00000300, 0x00000302,
- 0x00020100, 0x00020102, 0x00020300, 0x00020302,
- 0x02000100, 0x02000102, 0x02000300, 0x02000302,
- 0x02020100, 0x02020102, 0x02020300, 0x02020302,
- 0x00000101, 0x00000103, 0x00000301, 0x00000303,
- 0x00020101, 0x00020103, 0x00020301, 0x00020303,
- 0x02000101, 0x02000103, 0x02000301, 0x02000303,
- 0x02020101, 0x02020103, 0x02020301, 0x02020303,
- 0x00010000, 0x00010002, 0x00010200, 0x00010202,
- 0x00030000, 0x00030002, 0x00030200, 0x00030202,
- 0x02010000, 0x02010002, 0x02010200, 0x02010202,
- 0x02030000, 0x02030002, 0x02030200, 0x02030202,
- 0x00010001, 0x00010003, 0x00010201, 0x00010203,
- 0x00030001, 0x00030003, 0x00030201, 0x00030203,
- 0x02010001, 0x02010003, 0x02010201, 0x02010203,
- 0x02030001, 0x02030003, 0x02030201, 0x02030203,
- 0x00010100, 0x00010102, 0x00010300, 0x00010302,
- 0x00030100, 0x00030102, 0x00030300, 0x00030302,
- 0x02010100, 0x02010102, 0x02010300, 0x02010302,
- 0x02030100, 0x02030102, 0x02030300, 0x02030302,
- 0x00010101, 0x00010103, 0x00010301, 0x00010303,
- 0x00030101, 0x00030103, 0x00030301, 0x00030303,
- 0x02010101, 0x02010103, 0x02010301, 0x02010303,
- 0x02030101, 0x02030103, 0x02030301, 0x02030303,
- 0x01000000, 0x01000002, 0x01000200, 0x01000202,
- 0x01020000, 0x01020002, 0x01020200, 0x01020202,
- 0x03000000, 0x03000002, 0x03000200, 0x03000202,
- 0x03020000, 0x03020002, 0x03020200, 0x03020202,
- 0x01000001, 0x01000003, 0x01000201, 0x01000203,
- 0x01020001, 0x01020003, 0x01020201, 0x01020203,
- 0x03000001, 0x03000003, 0x03000201, 0x03000203,
- 0x03020001, 0x03020003, 0x03020201, 0x03020203,
- 0x01000100, 0x01000102, 0x01000300, 0x01000302,
- 0x01020100, 0x01020102, 0x01020300, 0x01020302,
- 0x03000100, 0x03000102, 0x03000300, 0x03000302,
- 0x03020100, 0x03020102, 0x03020300, 0x03020302,
- 0x01000101, 0x01000103, 0x01000301, 0x01000303,
- 0x01020101, 0x01020103, 0x01020301, 0x01020303,
- 0x03000101, 0x03000103, 0x03000301, 0x03000303,
- 0x03020101, 0x03020103, 0x03020301, 0x03020303,
- 0x01010000, 0x01010002, 0x01010200, 0x01010202,
- 0x01030000, 0x01030002, 0x01030200, 0x01030202,
- 0x03010000, 0x03010002, 0x03010200, 0x03010202,
- 0x03030000, 0x03030002, 0x03030200, 0x03030202,
- 0x01010001, 0x01010003, 0x01010201, 0x01010203,
- 0x01030001, 0x01030003, 0x01030201, 0x01030203,
- 0x03010001, 0x03010003, 0x03010201, 0x03010203,
- 0x03030001, 0x03030003, 0x03030201, 0x03030203,
- 0x01010100, 0x01010102, 0x01010300, 0x01010302,
- 0x01030100, 0x01030102, 0x01030300, 0x01030302,
- 0x03010100, 0x03010102, 0x03010300, 0x03010302,
- 0x03030100, 0x03030102, 0x03030300, 0x03030302,
- 0x01010101, 0x01010103, 0x01010301, 0x01010303,
- 0x01030101, 0x01030103, 0x01030301, 0x01030303,
- 0x03010101, 0x03010103, 0x03010301, 0x03010303,
- 0x03030101, 0x03030103, 0x03030301, 0x03030303
-};
-#endif
-
-
-/*
- * The SP table is actually the S boxes and the P permutation
- * table combined.
- */
-static U_LONG SP[8][64] = {
- { 0x00808200, 0x00000000, 0x00008000, 0x00808202,
- 0x00808002, 0x00008202, 0x00000002, 0x00008000,
- 0x00000200, 0x00808200, 0x00808202, 0x00000200,
- 0x00800202, 0x00808002, 0x00800000, 0x00000002,
- 0x00000202, 0x00800200, 0x00800200, 0x00008200,
- 0x00008200, 0x00808000, 0x00808000, 0x00800202,
- 0x00008002, 0x00800002, 0x00800002, 0x00008002,
- 0x00000000, 0x00000202, 0x00008202, 0x00800000,
- 0x00008000, 0x00808202, 0x00000002, 0x00808000,
- 0x00808200, 0x00800000, 0x00800000, 0x00000200,
- 0x00808002, 0x00008000, 0x00008200, 0x00800002,
- 0x00000200, 0x00000002, 0x00800202, 0x00008202,
- 0x00808202, 0x00008002, 0x00808000, 0x00800202,
- 0x00800002, 0x00000202, 0x00008202, 0x00808200,
- 0x00000202, 0x00800200, 0x00800200, 0x00000000,
- 0x00008002, 0x00008200, 0x00000000, 0x00808002 },
-
- { 0x40084010, 0x40004000, 0x00004000, 0x00084010,
- 0x00080000, 0x00000010, 0x40080010, 0x40004010,
- 0x40000010, 0x40084010, 0x40084000, 0x40000000,
- 0x40004000, 0x00080000, 0x00000010, 0x40080010,
- 0x00084000, 0x00080010, 0x40004010, 0x00000000,
- 0x40000000, 0x00004000, 0x00084010, 0x40080000,
- 0x00080010, 0x40000010, 0x00000000, 0x00084000,
- 0x00004010, 0x40084000, 0x40080000, 0x00004010,
- 0x00000000, 0x00084010, 0x40080010, 0x00080000,
- 0x40004010, 0x40080000, 0x40084000, 0x00004000,
- 0x40080000, 0x40004000, 0x00000010, 0x40084010,
- 0x00084010, 0x00000010, 0x00004000, 0x40000000,
- 0x00004010, 0x40084000, 0x00080000, 0x40000010,
- 0x00080010, 0x40004010, 0x40000010, 0x00080010,
- 0x00084000, 0x00000000, 0x40004000, 0x00004010,
- 0x40000000, 0x40080010, 0x40084010, 0x00084000 },
-
- { 0x00000104, 0x04010100, 0x00000000, 0x04010004,
- 0x04000100, 0x00000000, 0x00010104, 0x04000100,
- 0x00010004, 0x04000004, 0x04000004, 0x00010000,
- 0x04010104, 0x00010004, 0x04010000, 0x00000104,
- 0x04000000, 0x00000004, 0x04010100, 0x00000100,
- 0x00010100, 0x04010000, 0x04010004, 0x00010104,
- 0x04000104, 0x00010100, 0x00010000, 0x04000104,
- 0x00000004, 0x04010104, 0x00000100, 0x04000000,
- 0x04010100, 0x04000000, 0x00010004, 0x00000104,
- 0x00010000, 0x04010100, 0x04000100, 0x00000000,
- 0x00000100, 0x00010004, 0x04010104, 0x04000100,
- 0x04000004, 0x00000100, 0x00000000, 0x04010004,
- 0x04000104, 0x00010000, 0x04000000, 0x04010104,
- 0x00000004, 0x00010104, 0x00010100, 0x04000004,
- 0x04010000, 0x04000104, 0x00000104, 0x04010000,
- 0x00010104, 0x00000004, 0x04010004, 0x00010100 },
-
- { 0x80401000, 0x80001040, 0x80001040, 0x00000040,
- 0x00401040, 0x80400040, 0x80400000, 0x80001000,
- 0x00000000, 0x00401000, 0x00401000, 0x80401040,
- 0x80000040, 0x00000000, 0x00400040, 0x80400000,
- 0x80000000, 0x00001000, 0x00400000, 0x80401000,
- 0x00000040, 0x00400000, 0x80001000, 0x00001040,
- 0x80400040, 0x80000000, 0x00001040, 0x00400040,
- 0x00001000, 0x00401040, 0x80401040, 0x80000040,
- 0x00400040, 0x80400000, 0x00401000, 0x80401040,
- 0x80000040, 0x00000000, 0x00000000, 0x00401000,
- 0x00001040, 0x00400040, 0x80400040, 0x80000000,
- 0x80401000, 0x80001040, 0x80001040, 0x00000040,
- 0x80401040, 0x80000040, 0x80000000, 0x00001000,
- 0x80400000, 0x80001000, 0x00401040, 0x80400040,
- 0x80001000, 0x00001040, 0x00400000, 0x80401000,
- 0x00000040, 0x00400000, 0x00001000, 0x00401040 },
-
- { 0x00000080, 0x01040080, 0x01040000, 0x21000080,
- 0x00040000, 0x00000080, 0x20000000, 0x01040000,
- 0x20040080, 0x00040000, 0x01000080, 0x20040080,
- 0x21000080, 0x21040000, 0x00040080, 0x20000000,
- 0x01000000, 0x20040000, 0x20040000, 0x00000000,
- 0x20000080, 0x21040080, 0x21040080, 0x01000080,
- 0x21040000, 0x20000080, 0x00000000, 0x21000000,
- 0x01040080, 0x01000000, 0x21000000, 0x00040080,
- 0x00040000, 0x21000080, 0x00000080, 0x01000000,
- 0x20000000, 0x01040000, 0x21000080, 0x20040080,
- 0x01000080, 0x20000000, 0x21040000, 0x01040080,
- 0x20040080, 0x00000080, 0x01000000, 0x21040000,
- 0x21040080, 0x00040080, 0x21000000, 0x21040080,
- 0x01040000, 0x00000000, 0x20040000, 0x21000000,
- 0x00040080, 0x01000080, 0x20000080, 0x00040000,
- 0x00000000, 0x20040000, 0x01040080, 0x20000080 },
-
- { 0x10000008, 0x10200000, 0x00002000, 0x10202008,
- 0x10200000, 0x00000008, 0x10202008, 0x00200000,
- 0x10002000, 0x00202008, 0x00200000, 0x10000008,
- 0x00200008, 0x10002000, 0x10000000, 0x00002008,
- 0x00000000, 0x00200008, 0x10002008, 0x00002000,
- 0x00202000, 0x10002008, 0x00000008, 0x10200008,
- 0x10200008, 0x00000000, 0x00202008, 0x10202000,
- 0x00002008, 0x00202000, 0x10202000, 0x10000000,
- 0x10002000, 0x00000008, 0x10200008, 0x00202000,
- 0x10202008, 0x00200000, 0x00002008, 0x10000008,
- 0x00200000, 0x10002000, 0x10000000, 0x00002008,
- 0x10000008, 0x10202008, 0x00202000, 0x10200000,
- 0x00202008, 0x10202000, 0x00000000, 0x10200008,
- 0x00000008, 0x00002000, 0x10200000, 0x00202008,
- 0x00002000, 0x00200008, 0x10002008, 0x00000000,
- 0x10202000, 0x10000000, 0x00200008, 0x10002008 },
-
- { 0x00100000, 0x02100001, 0x02000401, 0x00000000,
- 0x00000400, 0x02000401, 0x00100401, 0x02100400,
- 0x02100401, 0x00100000, 0x00000000, 0x02000001,
- 0x00000001, 0x02000000, 0x02100001, 0x00000401,
- 0x02000400, 0x00100401, 0x00100001, 0x02000400,
- 0x02000001, 0x02100000, 0x02100400, 0x00100001,
- 0x02100000, 0x00000400, 0x00000401, 0x02100401,
- 0x00100400, 0x00000001, 0x02000000, 0x00100400,
- 0x02000000, 0x00100400, 0x00100000, 0x02000401,
- 0x02000401, 0x02100001, 0x02100001, 0x00000001,
- 0x00100001, 0x02000000, 0x02000400, 0x00100000,
- 0x02100400, 0x00000401, 0x00100401, 0x02100400,
- 0x00000401, 0x02000001, 0x02100401, 0x02100000,
- 0x00100400, 0x00000000, 0x00000001, 0x02100401,
- 0x00000000, 0x00100401, 0x02100000, 0x00000400,
- 0x02000001, 0x02000400, 0x00000400, 0x00100001 },
-
- { 0x08000820, 0x00000800, 0x00020000, 0x08020820,
- 0x08000000, 0x08000820, 0x00000020, 0x08000000,
- 0x00020020, 0x08020000, 0x08020820, 0x00020800,
- 0x08020800, 0x00020820, 0x00000800, 0x00000020,
- 0x08020000, 0x08000020, 0x08000800, 0x00000820,
- 0x00020800, 0x00020020, 0x08020020, 0x08020800,
- 0x00000820, 0x00000000, 0x00000000, 0x08020020,
- 0x08000020, 0x08000800, 0x00020820, 0x00020000,
- 0x00020820, 0x00020000, 0x08020800, 0x00000800,
- 0x00000020, 0x08020020, 0x00000800, 0x00020820,
- 0x08000800, 0x00000020, 0x08000020, 0x08020000,
- 0x08020020, 0x08000000, 0x00020000, 0x08000820,
- 0x00000000, 0x08020820, 0x00020020, 0x08000020,
- 0x08020000, 0x08000800, 0x08000820, 0x00000000,
- 0x08020820, 0x00020800, 0x00020800, 0x00000820,
- 0x00000820, 0x00020020, 0x08000000, 0x08020800 }
-};
-
-
-
-/*
- * DESauth_des - perform an in place DES encryption on 64 bits
- *
- * Note that the `data' argument is always in big-end-first
- * byte order, i.e. *(char *)data is the high order byte of
- * the 8 byte data word. We modify the initial and final
- * permutation computations for little-end-first machines to
- * swap bytes into the natural host order at the beginning and
- * back to big-end order at the end. This is unclean but avoids
- * a byte swapping performance penalty on Vaxes (which are slow already).
- */
-void
-DESauth_des(data, subkeys)
- U_LONG *data;
- u_char *subkeys;
-{
- register U_LONG left, right;
- register U_LONG temp;
- register u_char *kp;
- register int i;
-
- /*
- * Do the initial permutation. The first operation gets
- * all the bits which are used to form the left half of the
- * permutted result in one word, which is then used to
- * index the appropriate table a byte at a time.
- */
- temp = ((*data & 0x55555555) << 1) | (*(data+1) & 0x55555555);
-#ifdef XNTP_LITTLE_ENDIAN
- /*
- * Modify the computation to use the opposite set of bytes.
- */
- left = (IP[(temp >> 24) & 0xff] << 3)
- | (IP[(temp >> 16) & 0xff] << 2)
- | (IP[(temp >> 8) & 0xff] << 1)
- | IP[temp & 0xff];
-#else
- left = IP[(temp >> 24) & 0xff]
- | (IP[(temp >> 16) & 0xff] << 1)
- | (IP[(temp >> 8) & 0xff] << 2)
- | (IP[temp & 0xff] << 3);
-#endif
-
- /*
- * Same thing again except for the right half.
- */
- temp = (*data & 0xaaaaaaaa) | ((*(data+1) & 0xaaaaaaaa) >> 1);
-#ifdef XNTP_LITTLE_ENDIAN
- right = (IP[(temp >> 24) & 0xff] << 3)
- | (IP[(temp >> 16) & 0xff] << 2)
- | (IP[(temp >> 8) & 0xff] << 1)
- | IP[temp & 0xff];
-#else
- right = IP[(temp >> 24) & 0xff]
- | (IP[(temp >> 16) & 0xff] << 1)
- | (IP[(temp >> 8) & 0xff] << 2)
- | (IP[temp & 0xff] << 3);
-#endif
-
- /*
- * Do the 16 rounds through the cipher function. We actually
- * do two at a time, one on the left half and one on the right
- * half.
- */
- kp = subkeys;
- for (i = 0; i < 8; i++) {
- /*
- * The E expansion is easy to compute algorithmically.
- * Take a look at its form and compare it to
- * everything involving temp below. Note that
- * since SP[0-7] don't have any bits in common set
- * it is okay to do the successive xor's.
- */
- temp = (right >> 1) | ((right & 1) ? 0x80000000 : 0);
- left ^= SP[0][((temp >> 26) & 0x3f) ^ *kp++];
- left ^= SP[1][((temp >> 22) & 0x3f) ^ *kp++];
- left ^= SP[2][((temp >> 18) & 0x3f) ^ *kp++];
- left ^= SP[3][((temp >> 14) & 0x3f) ^ *kp++];
- left ^= SP[4][((temp >> 10) & 0x3f) ^ *kp++];
- left ^= SP[5][((temp >> 6) & 0x3f) ^ *kp++];
- left ^= SP[6][((temp >> 2) & 0x3f) ^ *kp++];
- left ^= SP[7][(((right << 1) | ((right & 0x80000000)?1:0))
- & 0x3f) ^ *kp++];
-
- /*
- * Careful here. Right now `right' is actually the
- * left side and `left' is the right side. Do the
- * same thing again, except swap `left' and `right'
- */
- temp = (left >> 1) | ((left & 1) ? 0x80000000 : 0);
- right ^= SP[0][((temp >> 26) & 0x3f) ^ *kp++];
- right ^= SP[1][((temp >> 22) & 0x3f) ^ *kp++];
- right ^= SP[2][((temp >> 18) & 0x3f) ^ *kp++];
- right ^= SP[3][((temp >> 14) & 0x3f) ^ *kp++];
- right ^= SP[4][((temp >> 10) & 0x3f) ^ *kp++];
- right ^= SP[5][((temp >> 6) & 0x3f) ^ *kp++];
- right ^= SP[6][((temp >> 2) & 0x3f) ^ *kp++];
- right ^= SP[7][(((left << 1) | ((left & 0x80000000)?1:0))
- & 0x3f) ^ *kp++];
-
- /*
- * By the time we get here, all is straightened out
- * again. `left' is left and `right' is right.
- */
- }
-
- /*
- * Now the final permutation. Note this is like the IP above
- * except that the data is computed from
- *
- * ((left & 0x0f0f0f0f) << 4) | (right & 0x0f0f0f0f) for left result
- * (left & 0xf0f0f0f0) | ((right & 0xf0f0f0f0) >> 4) for right result
- *
- * Just to confuse things more, we're supposed to swap the right
- * and the left halves before doing this. Instead, we'll just
- * switch which goes where when computing the temporary.
- *
- * This operation also byte swaps stuff back into big end byte
- * order. This is accomplished by modifying the FP table for
- * little end machines, however, so we don't have to worry about
- * it here.
- */
- temp = ((right & 0x0f0f0f0f) << 4) | (left & 0x0f0f0f0f);
- *data = (FP[(temp >> 24) & 0xff] << 6)
- | (FP[(temp >> 16) & 0xff] << 4)
- | (FP[(temp >> 8) & 0xff] << 2)
- | FP[temp & 0xff];
-
- temp = (right & 0xf0f0f0f0) | ((left & 0xf0f0f0f0) >> 4);
- *(data+1) = (FP[(temp >> 24) & 0xff] << 6)
- | (FP[(temp >> 16) & 0xff] << 4)
- | (FP[(temp >> 8) & 0xff] << 2)
- | FP[temp & 0xff];
-}
diff --git a/usr.sbin/xntpd/machines/README b/usr.sbin/xntpd/machines/README
deleted file mode 100644
index b12db88..0000000
--- a/usr.sbin/xntpd/machines/README
+++ /dev/null
@@ -1,5 +0,0 @@
-README file for directory ./machines of the NTP Version 3 distribution
-
-This directory contains configuration files for the various machines
-and compilers supported by the distribution. README and RELNOTES files in the
-parent directory contain directions on how to use these files.
diff --git a/usr.sbin/xntpd/machines/aix3.2 b/usr.sbin/xntpd/machines/aix3.2
deleted file mode 100644
index 93a0181..0000000
--- a/usr.sbin/xntpd/machines/aix3.2
+++ /dev/null
@@ -1,10 +0,0 @@
-RANLIB= :
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DRS6000 -DSYS_AIX -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-INSTALL= /usr/ucb/install
-COPTS= -O
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/aux2 b/usr.sbin/xntpd/machines/aux2
deleted file mode 100644
index 0aa8ee0..0000000
--- a/usr.sbin/xntpd/machines/aux2
+++ /dev/null
@@ -1,9 +0,0 @@
-RANLIB= true # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5 -DFASTMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COMPAT= -lposix -lbsd -lmalloc -s
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/aux3 b/usr.sbin/xntpd/machines/aux3
deleted file mode 100644
index 1c6313b..0000000
--- a/usr.sbin/xntpd/machines/aux3
+++ /dev/null
@@ -1,9 +0,0 @@
-RANLIB= true # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5 -DFASTMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COMPAT= -lposix -lbsd -lmalloc -s
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/bsdi b/usr.sbin/xntpd/machines/bsdi
deleted file mode 100644
index 3145bd6..0000000
--- a/usr.sbin/xntpd/machines/bsdi
+++ /dev/null
@@ -1,8 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_BSDI -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lkvm
-RESLIB=
-COPTS= -g -O
diff --git a/usr.sbin/xntpd/machines/convexos10 b/usr.sbin/xntpd/machines/convexos10
deleted file mode 100644
index 39eb384..0000000
--- a/usr.sbin/xntpd/machines/convexos10
+++ /dev/null
@@ -1,10 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT=
-
diff --git a/usr.sbin/xntpd/machines/convexos9 b/usr.sbin/xntpd/machines/convexos9
deleted file mode 100644
index a0276b8..0000000
--- a/usr.sbin/xntpd/machines/convexos9
+++ /dev/null
@@ -1,9 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/decosf1 b/usr.sbin/xntpd/machines/decosf1
deleted file mode 100644
index 0f92351..0000000
--- a/usr.sbin/xntpd/machines/decosf1
+++ /dev/null
@@ -1,9 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/dell.svr4 b/usr.sbin/xntpd/machines/dell.svr4
deleted file mode 100644
index 5b53a2b..0000000
--- a/usr.sbin/xntpd/machines/dell.svr4
+++ /dev/null
@@ -1,9 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_SVR4 -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB= -lnsl -lsocket -lelf
-INSTALL= /usr/ucb/install
diff --git a/usr.sbin/xntpd/machines/domainos b/usr.sbin/xntpd/machines/domainos
deleted file mode 100644
index 0ca6713..0000000
--- a/usr.sbin/xntpd/machines/domainos
+++ /dev/null
@@ -1,7 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/freebsd b/usr.sbin/xntpd/machines/freebsd
deleted file mode 100644
index 9380c0e..0000000
--- a/usr.sbin/xntpd/machines/freebsd
+++ /dev/null
@@ -1,8 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lcrypt
-RESLIB=
-COPTS= -O2
diff --git a/usr.sbin/xntpd/machines/hpux b/usr.sbin/xntpd/machines/hpux
deleted file mode 100644
index fdb0789..0000000
--- a/usr.sbin/xntpd/machines/hpux
+++ /dev/null
@@ -1,8 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_TERMIOS -DSYS_HPUX=8
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-COPTS=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/hpux-adj b/usr.sbin/xntpd/machines/hpux-adj
deleted file mode 100644
index 0119b63..0000000
--- a/usr.sbin/xntpd/machines/hpux-adj
+++ /dev/null
@@ -1,8 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-COPTS=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/hpux10+ b/usr.sbin/xntpd/machines/hpux10+
deleted file mode 100644
index 0119b63..0000000
--- a/usr.sbin/xntpd/machines/hpux10+
+++ /dev/null
@@ -1,8 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-COPTS=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/i386 b/usr.sbin/xntpd/machines/i386
deleted file mode 100644
index c5d9357..0000000
--- a/usr.sbin/xntpd/machines/i386
+++ /dev/null
@@ -1,7 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_I386 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/i386svr4 b/usr.sbin/xntpd/machines/i386svr4
deleted file mode 100644
index bc3fadb..0000000
--- a/usr.sbin/xntpd/machines/i386svr4
+++ /dev/null
@@ -1,9 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB= -lnsl -lsocket -lelf
-INSTALL= /usr/ucb/install
diff --git a/usr.sbin/xntpd/machines/irix4 b/usr.sbin/xntpd/machines/irix4
deleted file mode 100644
index ae2bbf8..0000000
--- a/usr.sbin/xntpd/machines/irix4
+++ /dev/null
@@ -1,9 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_SYSV_TTYS -DSYS_IRIX4
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lmld
-RESLIB=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/irix5 b/usr.sbin/xntpd/machines/irix5
deleted file mode 100644
index a808b97..0000000
--- a/usr.sbin/xntpd/machines/irix5
+++ /dev/null
@@ -1,9 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_SYSV_TTYS -DSYS_IRIX5
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lmld
-RESLIB=
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/linux b/usr.sbin/xntpd/machines/linux
deleted file mode 100644
index d7a8ac4..0000000
--- a/usr.sbin/xntpd/machines/linux
+++ /dev/null
@@ -1,8 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ranlib
-DEFS= -DSYS_LINUX -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-INCL= -I../include -I/usr/include/bsd
-CLOCKDEFS=
-DAEMONLIBS=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/mips b/usr.sbin/xntpd/machines/mips
deleted file mode 100644
index a624e8f..0000000
--- a/usr.sbin/xntpd/machines/mips
+++ /dev/null
@@ -1,9 +0,0 @@
-#RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lmld
-RESLIB=
-COMPAT=
-
diff --git a/usr.sbin/xntpd/machines/netbsd b/usr.sbin/xntpd/machines/netbsd
deleted file mode 100644
index 1cfd8e1..0000000
--- a/usr.sbin/xntpd/machines/netbsd
+++ /dev/null
@@ -1,8 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_NETBSD -DSYS_386BSD -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lcrypt -lutil
-RESLIB=
-COPTS= -O
diff --git a/usr.sbin/xntpd/machines/next b/usr.sbin/xntpd/machines/next
deleted file mode 100644
index 9125f7d..0000000
--- a/usr.sbin/xntpd/machines/next
+++ /dev/null
@@ -1,9 +0,0 @@
-RANLIB= ranlib -c -s
-DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5 -DFAST_MD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS= -O -pipe
-COMPAT=
-
diff --git a/usr.sbin/xntpd/machines/ptx b/usr.sbin/xntpd/machines/ptx
deleted file mode 100644
index 4759851..0000000
--- a/usr.sbin/xntpd/machines/ptx
+++ /dev/null
@@ -1,8 +0,0 @@
-RANLIB= :
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DREADKMEM -DSYS_PTX -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB= -lseq -lsocket -linet -lnsl
-COPTS= -O
diff --git a/usr.sbin/xntpd/machines/sequent b/usr.sbin/xntpd/machines/sequent
deleted file mode 100644
index 9962788..0000000
--- a/usr.sbin/xntpd/machines/sequent
+++ /dev/null
@@ -1,8 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS= -O
diff --git a/usr.sbin/xntpd/machines/sinix-m b/usr.sbin/xntpd/machines/sinix-m
deleted file mode 100644
index fb01a01..0000000
--- a/usr.sbin/xntpd/machines/sinix-m
+++ /dev/null
@@ -1,11 +0,0 @@
-RANLIB= :
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSYS_SINIXM -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT= -lsocket -lnsl -lelf
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/sony b/usr.sbin/xntpd/machines/sony
deleted file mode 100644
index 890e9f5..0000000
--- a/usr.sbin/xntpd/machines/sony
+++ /dev/null
@@ -1,6 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_SONY -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lmld
diff --git a/usr.sbin/xntpd/machines/sunos4.bsd b/usr.sbin/xntpd/machines/sunos4.bsd
deleted file mode 100644
index f18ffda..0000000
--- a/usr.sbin/xntpd/machines/sunos4.bsd
+++ /dev/null
@@ -1,11 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lkvm
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT=
-
diff --git a/usr.sbin/xntpd/machines/sunos4.posix b/usr.sbin/xntpd/machines/sunos4.posix
deleted file mode 100644
index 86716e1..0000000
--- a/usr.sbin/xntpd/machines/sunos4.posix
+++ /dev/null
@@ -1,11 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSTREAM -DSYS_SUNOS4 -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS= -lkvm
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT=
-
diff --git a/usr.sbin/xntpd/machines/sunos5.1 b/usr.sbin/xntpd/machines/sunos5.1
deleted file mode 100644
index 16ab8ff..0000000
--- a/usr.sbin/xntpd/machines/sunos5.1
+++ /dev/null
@@ -1,11 +0,0 @@
-RANLIB= :
-DEFS_LOCAL=-DREFCLOCK
-DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT= -lsocket -lnsl -lelf
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/sunos5.2 b/usr.sbin/xntpd/machines/sunos5.2
deleted file mode 100644
index 3e09c15..0000000
--- a/usr.sbin/xntpd/machines/sunos5.2
+++ /dev/null
@@ -1,11 +0,0 @@
-RANLIB= :
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
-COPTS= -O
-ADJLIB=
-COMPAT= -lsocket -lnsl -lelf
-INSTALL=$(TOP)scripts/install.sh
diff --git a/usr.sbin/xntpd/machines/svr4 b/usr.sbin/xntpd/machines/svr4
deleted file mode 100644
index 63997b6..0000000
--- a/usr.sbin/xntpd/machines/svr4
+++ /dev/null
@@ -1,10 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS=
-DAEMONLIBS= -lnet -lnsl -lsocket -lelf
-RESLIB= -lnet -lnsl -lsocket -lelf
-INSTALL=$(TOP)scripts/install.sh
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
diff --git a/usr.sbin/xntpd/machines/ultrix.bsd b/usr.sbin/xntpd/machines/ultrix.bsd
deleted file mode 100644
index a8e9f1d..0000000
--- a/usr.sbin/xntpd/machines/ultrix.bsd
+++ /dev/null
@@ -1,7 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/ultrix.posix b/usr.sbin/xntpd/machines/ultrix.posix
deleted file mode 100644
index 7db6993..0000000
--- a/usr.sbin/xntpd/machines/ultrix.posix
+++ /dev/null
@@ -1,7 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-COMPAT=
diff --git a/usr.sbin/xntpd/machines/univel b/usr.sbin/xntpd/machines/univel
deleted file mode 100644
index 23d683a..0000000
--- a/usr.sbin/xntpd/machines/univel
+++ /dev/null
@@ -1,10 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS=
-DAEMONLIBS= -lnsl -lsocket -lelf
-RESLIB= -lnsl -lsocket -lelf
-INSTALL=$(TOP)scripts/install.sh
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
diff --git a/usr.sbin/xntpd/machines/unixware1 b/usr.sbin/xntpd/machines/unixware1
deleted file mode 100644
index 7707376..0000000
--- a/usr.sbin/xntpd/machines/unixware1
+++ /dev/null
@@ -1,10 +0,0 @@
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\"
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS=
-DAEMONLIBS= -lnsl -lsocket -lelf
-RESLIB= -lnsl -lsocket -lelf
-INSTALL=$(TOP)scripts/install.sh
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
diff --git a/usr.sbin/xntpd/machines/vax b/usr.sbin/xntpd/machines/vax
deleted file mode 100644
index 55e8c44..0000000
--- a/usr.sbin/xntpd/machines/vax
+++ /dev/null
@@ -1,6 +0,0 @@
-RANLIB= ranlib
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DSYS_VAX -DHAVE_BSD_TTYS
-CLOCKDEFS= -DLOCAL_CLOCK
-DAEMONLIBS=
-RESLIB=
diff --git a/usr.sbin/xntpd/ntpdate/Makefile.tmpl b/usr.sbin/xntpd/ntpdate/Makefile.tmpl
deleted file mode 100644
index 34f8f66..0000000
--- a/usr.sbin/xntpd/ntpdate/Makefile.tmpl
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= ntpdate
-#
-# ntpdate - private mode query program for ntpdate
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-RESLIB=
-ADJLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-OBJS= ntpdate.o
-SOURCE= ntpdate.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) \
- $(ADJLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
diff --git a/usr.sbin/xntpd/ntpq/Makefile.tmpl b/usr.sbin/xntpd/ntpq/Makefile.tmpl
deleted file mode 100644
index 76a09ad..0000000
--- a/usr.sbin/xntpd/ntpq/Makefile.tmpl
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= ntpq
-#
-# ntpq - control mode query program
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-RESLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-OBJS= ntpq.o ntpq_ops.o
-SOURCE= ntpq.c ntpq_ops.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
diff --git a/usr.sbin/xntpd/ntptrace/Makefile.tmpl b/usr.sbin/xntpd/ntptrace/Makefile.tmpl
deleted file mode 100644
index ca321f1..0000000
--- a/usr.sbin/xntpd/ntptrace/Makefile.tmpl
+++ /dev/null
@@ -1,70 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= ntptrace
-#
-# ntptrace - private mode query program for ntptrace
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-RESLIB=
-ADJLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-OBJS= ntptrace.o
-SOURCE= ntptrace.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) \
- $(ADJLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
diff --git a/usr.sbin/xntpd/parse/Makefile.kernel b/usr.sbin/xntpd/parse/Makefile.kernel
deleted file mode 100644
index 4cd0ace..0000000
--- a/usr.sbin/xntpd/parse/Makefile.kernel
+++ /dev/null
@@ -1,76 +0,0 @@
-#
-# very simple makefile (SunOS!)
-#
-# Possible defines:
-# DEBUG_PARSE: include debug code (STREAMS mechanism and parsing)
-# DEBUG_CD: include signal propagation to sun4c LED (sun4c only)
-#
-# Possible defines (parsestreams variants only):
-# KERNEL: must define
-# VDDRV: loadable driver support - recommended
-# KARCH: must define at make call for correct kernel module
-# (currently only needed for parsestreams variants)
-#
-KARCH=
-DEFS=-DSTREAM -DKERNEL -DVDDRV -D$(KARCH)
-MICROTIME=../ppsclock/sys/$(KARCH)/microtime.s
-
-all:
- @if [ -f /kernel/unix ]; then \
- $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" KARCH="`(arch -k) 2>/dev/null || uname -a | awk '{ print $5 }'`" -f Makefile.kernel parse; \
- else \
- $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" KARCH="`(arch -k) 2>/dev/null || uname -a | awk '{ print $5 }'`" -f Makefile.kernel parsestreams.o; \
- fi
-
-parse: parsesolaris.c libparse_kernel.a ../lib/libntp.a
- @echo "--- WARNING: SunOS5 support is fresh and hardly tested"
- @echo "--- This code could lead to kernel panics more"
- @echo "--- easily than other streams modules"
- $(CC) -c -I../include -D_KERNEL parsesolaris.c
- ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
- @echo "--- Install 'parse' in /kernel/strmod for automatic loading"
-
-mparsestreams.o: mparsestreams.$(KARCH).o
- @echo "--- You may load mparsestreams.$(KARCH).o via 'modload mparsestreams.$(KARCH).o' into the kernel"
-
-mparsestreams.$(KARCH).o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
- ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
- microtime.o
- rm -f parsestreams.o
-
-parsestreams.o: parsestreams.$(KARCH).o
- @echo "--- You may load parsestreams.$(KARCH).o via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
-
-parsestreams.$(KARCH).o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
- ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a
- rm -f parsestreams.o
-
-microtime.o: $(MICROTIME) assym.s
- cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
- as -o $@ $@.i
- rm -f $@.i assym.s
-
-assym.s: genassym
- ./genassym > $@
-
-genassym: ../ppsclock/sys/genassym/genassym.c
- cc -o $@ $?
-
-libparse_kernel.a:
- $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" libparse_kernel.a
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-lint: parsestreams.c ../include/parse.h ../include/sys/parsestreams.h ../lib/llib-llibntp.ln
- lint -u -I../include $(DEFS) parsestreams.c ../lib/llib-llibntp.ln
-
-../lib/llib-llibntp.ln:
- cd ../lib && make lintlib
-
-clean:
- rm -f *.o genassym assym.s parsestreams
-
-distclean: clean
diff --git a/usr.sbin/xntpd/parse/Makefile.tmpl b/usr.sbin/xntpd/parse/Makefile.tmpl
deleted file mode 100644
index 781fed6..0000000
--- a/usr.sbin/xntpd/parse/Makefile.tmpl
+++ /dev/null
@@ -1,111 +0,0 @@
-#
-# /src/NTP/REPOSITORY/v3/parse/Makefile.tmpl,v 3.6 1993/10/10 22:44:36 kardel Exp
-#
-LIBNAME= libparse
-KLIBNAME= libparse_kernel
-#
-# parse routine that could be used in two places
-#
-COMPILER= cc
-COPTS= -O
-AUTHDEFS=-DDES
-LIBDEFS= -DBIG_ENDIAN
-RANLIB= ranlib
-INSTALL= install
-CLOCKDEFS=
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-#
-INCL=-I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-#
-SOURCE= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \
- clk_dcf7000.c clk_trimtaip.c clk_trimtsip.c
-
-OBJS= parse.o parse_conf.o clk_meinberg.o clk_schmid.o clk_rawdcf.o \
- clk_dcf7000.o clk_trimtaip.o clk_trimtsip.o
-
-all:
- @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \
- awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\
- END { if (makeit) \
- { print "echo ; echo --- creating parse libraries ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" libs"; } \
- else \
- { print "echo ; echo --- creating parse placebo libraries ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" emptyplacebolibs";} }' |\
- sh
- @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \
- awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ {makeit=1; }\
- END { if (makeit) \
- { print "echo ; echo --- creating utility programs ; cd util && $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" -k"; } \
- else \
- { print ":";} }' |\
- sh
- @if (sun) > /dev/null 2>&1; then \
- echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS); \
- else :; fi | \
- awk '/-DSTREAM/ && /-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\
- END { if (makeit) \
- { print "echo ; echo --- creating kernel files ; $(MAKE) $(MFLAGS) MFLAGS=\"$(MFLAGS)\" MAKE=\"$(MAKE)\" -f Makefile.kernel"; } \
- else \
- { print ":";} }' |\
- sh
-
-emptyplacebolibs: empty.c
- @if [ ! -f "$(LIBNAME).a" -o ! -f "$(KLIBNAME).a" ]; then \
- $(CC) -c empty.c; \
- rm -f $(LIBNAME).a $(KLIBNAME).a; \
- ar r $(LIBNAME).a empty.o; \
- $(RANLIB) $(LIBNAME).a; \
- ar r $(KLIBNAME).a empty.o; \
- $(RANLIB) $(KLIBNAME).a; \
- rm -f empty.o; \
- else \
- : sorry guys - but i always get bitten by the broken ultrix sh; \
- fi
-
-libs: $(LIBNAME).a $(KLIBNAME).a
-
-$(LIBNAME).a: $(SOURCE)
- $(CC) -c $(CFLAGS) $(CLOCKDEFS) -UPARSESTREAM $(SOURCE)
- ar rv $@ $(OBJS)
- rm -f $(OBJS)
- $(RANLIB) $@
-
-$(KLIBNAME).a: $(SOURCE) $(LIBNAME).a
- $(CC) -c $(CFLAGS) $(CLOCKDEFS) -DPARSESTREAM $(SOURCE)
- ar rv $@ $(OBJS)
- rm -f $(OBJS)
- $(RANLIB) $@
-
-lintlib: llib-l$(LIBNAME).ln
-
-llib-l$(LIBNAME).ln: $(SOURCE)
- lint -C$(LIBNAME) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lintlib.errs
-
-lint:
- lint -u $(DEFS) $(INCL) $(CLOCKDEFS) $(AUTHDEFS) $(LIBDEFS) $(SOURCE) >lint.errs
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
- lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.*
- -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
- -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl distclean
-
-install: all
- @echo $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) | \
- awk '/-DREFCLOCK/ && /-DPARSE/ && /-DCLOCK_/ { makeit=1; }\
- END { if (makeit) \
- { print "echo --- installing utility programs ; cd util && $(MAKE) MAKE=\"$(MAKE)\" $@"; } \
- else \
- { print ":";} }' |\
- sh
- @echo "--- Kernel modules like "parse" or "parsestreams.o" must be installed manually"
- @echo "--- if applicable."
diff --git a/usr.sbin/xntpd/patches/patch.1 b/usr.sbin/xntpd/patches/patch.1
deleted file mode 100644
index a6089ff..0000000
--- a/usr.sbin/xntpd/patches/patch.1
+++ /dev/null
@@ -1,790 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa12064; 26 Jan 94 16:33 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa12284;
- 26 Jan 94 16:26 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA16418 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 22:26:48 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA29418 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 22:26:45 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199401262126.AA29418@faui43.informatik.uni-erlangen.de>
-Subject: Re: Solaribum
-To: Mills@udel.edu
-Date: Wed, 26 Jan 94 22:26:38 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
- Paul_Vixie@corpmis.sjc.hw.sony.com
-In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Frank,
-
-> Your command-line weenie sounds rather useful, especially in cases where
-> 1-pps signals, kernel mods, etc., are involved. Better be quick about
-> patches, though. Paul Vixie is burning rubber on changes.
-
-> Dave
-
-Ok, you overan me with 3.3c - thus the following patches will be
-relative to 3.3c around Jan 26th 11:something.
-
-The patches include additional sys and refclock variables, the
-adjtime fix from Lewis, doc fixes and a include botch fix for
-lib/numtohost.c.
-
-For examples how to add extra refclock variables see refclock_parse.c
-(as usual 8-). The variable mechanism is documented in doc/xntpd.8.
-
-Ok, here it goes...
-
-begin 644 patches-fau.Z
-M'YV09-*8,0.BQ1@05)X0>:(CA@N'#F<@5,APAHL:"E1HG+BPX<./,Q)<*4,&
-MA)(P;D#(L*$RA@X:-E[> !$C1PX:"EKHY/A$)$F3*%6RE.$2YDL<-&WBU,BT
-MJ5,5&3?&8%$#1%,%($",4!!"*T\6=D!8I)'TY@L8,5[(D!CC1L,<.F"P7!-&
-M#IDR;$ 4P0,'JU:_5-"DF0/"3!HV94",>>.&3I@T;@C#D?-&#.(VA->X>7,G
-M)9TW(.B@21RFCN@W<@B+#D,'Q!PZA_.Z*?/S,P@QB<DP+N/"[T@0=][485,R
-M#)S)9<:D89U8((@\PA4+)^X:3MW$<]ZT2?R&(/0Z<D*GV1X:-)LW;]:$1D.Y
-MSADT.7=.K:I3I]^M74=\#6NQ:DVS:*GE'UPPS*!##57191=>>O%U'V""$688
-M8M(U]EAD($Q6V669;=99>>N19AH:J*F&!FNNP<:&;+259!MN(.@V6V]9_1;<
-M<,4=)T=RR]'1G'?1+89C==>YIAUW0((G'GFVG9?>>NV]IT! Q5TD&YCO(!'
-M8W"0X0(.'D'T4 PQOI'EEG1T^:4.%A$5E0IEGLFEEV"*"5$,/I5T4DHKM233
-M@63]AU-]<6HYYY=Y L7G4$6YA6!92STE*51,@7 ##2S<D(-53,77@J68XD!?
-M?7YU <(6?KD@1$%TI)I$:'+4\1I):Y21AP(K@& JJKFJ6I =N(+@PJMVU+6<
-M964$NVNPOK9@!;/$&AL&LJ6F.@42(!!1Q!1#2)$$%%0D\803KH* Q9QO3GI5
-MI3'0 ,+[59U%:'MV@#OH_6UX-<<</!H1AX@A!%C&CN.\9D< +^8F*P_F8&:
-M8CNR!MD9*4K\6AIC2'A8&7.X"@>K(.#@5QAD% ="K0"[44<;N(5GFVB)T1'K
-MK"6A# (;@[7::Q(?MQ"6R+F2;/(<><S:!@C%RG$L8M#V;$7(P0H=L&M%^WAT
-MTDLGAC/-MP%\EQFEL=%J5BY<"X((0XQK1!)'5"%%$.&."\+:3!0!PA/@BNO$
-M%"*X*H6Y<X)P0L=9+>:&86> )S%CA6T,PF @[,B&Q';@!; 9.R;FL!QML.9"
-M5D-HMUUC<[ G&!CH %"YP#CEJZZ&KT) @TWL4#[IO/N5 ,,F-8P UGY0@CY
-M8FUT[D9)D%>6'6(^!GP\")NU%D:QATU+(63K05YY:FDPWEVY:*J9*A10,+OJ
-M'&70D32T2$M+[<ZG?ATV'5TP2WZP@0TO.DK%E4Q84$)+ VP8$X:\$,UH[5.:
-M]7B#D-&@+X%9(\P8@N*Z7#',1: )R&N4)@;3D*9D NR>&PKXN,.AIG,#3,D<
-MZI"Z@)F(-&,8 \<D\P:<C2$/GTN"&8(%,P@N$ 3="5%A*',T'HQP.S[H 0^*
-MQ88ZE,$'CY-0#<]SAY^((6&C89_\AJ.SD]DJ.'81(M9^>(?8W$9K.?M)&"13
-ME]8$L8=;%!O5C!:L,2*+,"C@4APB%Q;B&8\,*?A<8#CVP8"DD(1V1 QAT">'
-MRI5P<R@480&#!0?PP.$-Z",,8]B PP;:*F [@MX;6B,YYF!0B!KZS&+R,LK1
-MN.Q$K8$9P":8D@K>+(U>\N3)/)225)JIACZ\(W#,6, [A*%H0-Q>&N[B/( E
-MDF,Q*H-A9D.&.BXG1.Q#G_KJ$JSMI XE@VE#;WIUOUP-,I1%$DWFJL,C1+I/
-MD>M!D>$<@[T>'A&:02Q@7IX)Q!WFJH=S" -YSM >. @RB_ [X!>2]H6M=9%$
-MQ'DA] 2*3X+H<XY6"Z8B#YHL^/6K#')8:%T:FK-@090,$KVG)BVZH@S1)CS/
-M_-_S8,:^,9QG#&L0:4@=:M(:NF@T$]W.2H6X(S. M QND*%B;JJ>F(Y36/<C
-MVZIVM+SME>L%UA&-H=)$U?&5#W9.D5T,8)"#&<!KK&2Z2E9@LQT:W<TS0)W>
-M8R8GAL,($&!!)-\4'GG"Q<$U661[%5O+( .N%*8.9#B#YL)@L(?-@41W$"*5
-MC+JCI"8&-W2X@X^0*D2]+@D[CFG#Q_A'U.24 0XI-.Q@*R;:?@J1D<LQ8!K.
-M,$(V'!1RUI$#17T4'LA%K"2;!!AKK(9:U;S!L-K,'AMUNQW>#K.E,)KM9G;D
-M)0@!5EBO,L/DS@ #OR!U@82!3"5;,R'>3NRV_UL=29:3DO*"=)BBJ1!L5":<
-M10H4#CASPQDXZBF:Q$ &.#BKNPI"JK6.AS=^><)? T8]NMJ5#G@EB&<A TF_
-M8C.PGRUL5\R 6,46AK$'B^8TH0G06D46LU7D; \]N]K7W-=Y/TU,P4Z;VJZT
-M.+0?>R-0/3L'Z180O1FJRV[?"SE9U4&? (.!"T%@9"2K=L=0V&N/:4M"R.$&
-M9V6H'/(\<V 8WVVO=YD<,A\[G9+ :#%R*)B/JMF5>@*U<ZF##';ZI1S#' 1]
-M!A.A:WM8*SG,)B]D4-KV>M.58678L+,AB2;=P,DSNB9]IU-Q7/-,0A[[."^0
-M"_,Q&^;8(QDV8MEQ@UL'62[MAH&[WAVA,,5KFL:)#:3G;2#D!+:=@ 3%O>$I
-M8WSG"9DZU-<U]\WO?CWY.MB)=:PY."M1.!4[#.O1+X-=##.?Z57##O*STDX,
-M/]V<&#U&K@PD6ZJ9FOK.Q/B1M/.\T"*S#-));C@->$$I1QN7&O+"FSJ0Z^%-
-M2;A:[%7!#6G 0V'Z2H=YXYDQ)3%,O*/X9"29(;FVJ0(5A@ "%%2X-4A 0A.:
-M$$A=C@$\E:5#HT&<!D?.N.3O-?49_A=*AY($T67 0\%!$ 00'C(O1F4->#2W
-MW:'V\.3; R5W4"O)%0',Y5L.LFX;X\#!$%J7(#YR7E:;[2B" *DVQ>1/L(>2
-M,U!(#+K%:?H(PP,0^.!S00!!'*0N$(Q96,?)ZLI=LNVB+E?]XE9WV(HX,S$A
-M4OT-=YGWY%Z3(7@K-8@4)K@(#9MOH+YA>Q>-E1L KM_/>KF'C/UX&X9CRL]*
-M\97F9NK5*]>8BOEH#FYU051!\&\!7CVI@)]8M>G5K@#'H"TR(+!]G)VF.$#[
-MP%6G-MGNUY5K>_NWXL:I1J%Y[N<Y]-&0WV>Y4>])]!GVI /?>QD/QU?.^54'
-MAC5T4;..TR\,EO$2W??4NZQKU?6P.P^'=,0G7G&\9WSC@;0V4#^>9J2*7+AY
-M9G*FA7+AH7(LAT9< QGA]RKCQU1?X&)T("M/5W.&5'2% 6X1&$H&N&= !73O
-M521O0'0$9'2WE("])&1,QS%.IW\P%('\9G> UQR$@70EM(#8%H,3J'9L9V=O
-M1Q!PE!PQ6'?D<7<$EW=3Q'>5IX"%QH#21'XY=7%/=VV#UQIP8'A(TGV1Q#B-
-MQQW1EQ>21WD4LUJDA7DQM#*<MV:J=6"?)T1..'K^9WK0I(38]6UFX(0/Z!BG
-M]W17,!HI,6$FY'TI9'7(@3ZE%T WMWQ"QV!SM4!/)WY-Z(#'<3';85@.]4(+
-MQF)JB&,P9H,-.&Y?$(ES8&*4F#,2-5E'95EGE%FTD1)2, 5KD7MW(6BUD8DO
-M-H90ME>#Y6*BE7JKUWJM@76QIU_5-EE64D(VA5AE\ )<\@7S1!FVA09A\A%5
-M 1G'>!?*F";,R!@R4T,N (T680.R0XU-9(W+V(S<"(UV<A&)LB="X2<T ";+
-M)BC])8[(>(UPD(V-X8S=N(Y!T2=$<10Z$(]*46SJ(E8V8%9MD5:=DA4C\#5R
-ME@!#, 5?, 59, 544 1-D !M<1\..1L0*9%+4 19D 1$H)$BPY =608?^052
-M4 1&, 4A>04:F0.&U9#2]) 1^0564 2MJ#<)( /=E14UF9(KV01!@ 5IHRTK
-MN9,].2Y^X1<O !59814@ 4OM7R$445,=CP@Y6+'TU\Q<)#P<@-D$CPH>9,>
-MF9,4:9$8J9$WP)%HJ9(Y&9(C69(Q<)):090YV9(O&9,S.91Q"0(Y:05!( 5,
-MD 06^9-!"0* .6)%>91)601+69B':9%/F151Z1=4:97O%5/ L3!<66_\0Y"3
-M(CM B2E$D7MJE9=Q"9%0,)%%X 14D ), .%=9:..02O23<7*052\ 124)LS
-M )>YN9M,$ 374ILXD1]Z^9I$@)A00)LS@!',V9JZ^05&B90*(9G7^9Q34#Y"
-MB9E2F15P,@2BYYE:60>AZ975-)4J\ +]=9HL0!0289:L69RP*9O2>9OWB9.[
-MF01,T)N_&9PS,)RXZ9]?8 3'F9R_TYAR)IBO29B&B9BS.9U/F2LVB9_9&9FN
-MJ9.42:'! I7C297F.6Y8^9E;&8OLJ9GO29J28IHR( /S*0.XLY#]F99#D*!5
-M0 1'4 2$R00RH)&+F:$XF:,*&@1', 4:&0/$6:1?H"U6D 1#()G_]935F9LY
-MNJ';"9$Y"J526@27"0*9Z9[9@I8AY#T^"%0;Q$(9N##HLV6\55N-9AO8)S/&
-M@85^U1N$$J-FM19E66 W*I=&NJ,]^J-!.E9-BJ,)>IQ)NJ2)*JA/ZJ-?JI&%
-MA:$I*9@Y*J&5.9LQ8*",>:5.JJ5*.029^J&6&9YB.J)P0@1F&HAPER*Q8C [
-MQV1O6D)QBF0@4J>Z]3&)!X@BU!O$:!#&.([)N(P34@:*)6KH^!$1,:SU:*P;
-MDZS=R"8N\):50H_DB(W'*JW+*B8A,1)ZTH^, I Q"BGSF%3$:H]?L*U(M8_@
-MJBCM^(_O&)"Y)X]@M2Y2017,-IZ9V154":V(P:U@(18NP!+_,0-GD0-G02;_
-M6 ,N(0-DH2!AUB!]X9XL*F*0<:88LCD@()M0X&J)D:SMED*+5 ?'@1IC0YY@
-MJ:_VV:_D"3W:&JWMB@8#:Q$S(2@+*R!)$1<TT!!S41<3NQ<5J[)DVI$:NX8>
-M"[(@(+*Z1;*N8;*7) <I:Q53(A $(:S86JS8"&>",2/=^A&;DK7JRK5R-JT.
-M ;'AB*[/NK6,U;6\\;4.D0/\N"CN"(\W.Y"$(K;+2+9>.[?Q6A1V:Z[WVBGL
-MLA;P\CO[&J99@01!L)-?4 5.0*%$\ 78,I4% 0)-<$PP0F9# B.YY48$X;%?
-M 5/, 5)@ 43^01N,Z4@\ -AF@5!4F8@H :R0H6M]H,CMFA"I"TO>4NS44*K
-MT[9R-@<OP .8!$7'ZE:O(B,GT!H]AHHP@TXMATF@.S #<8JQE ?](D':486(
-M\4HH(C '9#5'TP:SA08I>R*58SK9P22PI!A!H1L90ADOH[U]1UJMU)7QU!JT
-M%#U M& !509',[X"K+Q+"VD"\TV1$3.@D5G+1 84TKY7V$.&@SB*$XBY)5!K
-MQ%O_P[_=NS&_1QYBL$8_P3C$@U\@]0)\:V[:45<C1 <]QAB$<46TVG>B 3E9
-M"[)/-P6T42&5@P>F\Q@"1UHKE!(5/%L7+$+KEAB0)1VBA1@"YWJ*57!AVJ*6
-M"Y:&VZE(89^:"0*,Z[B0*[F4:[F7F[EYL+DDTKF)\;FN);JD:[JH.P6J*P6L
-MZ[I"F2N\FP21&S=[,S? "0)K>9%- (F8 )5^9M3.@5R+ 7!DA46*04369&"
-M3,93^2E,Y$2N1<!74VZ-#,A4 ,E0@,C;LLAD;,D%A,E!I"$R- ?9 5.<G"M^
-M ;MU(!U#0KN$-UZ2%9>ZVT.\NU?YU1PIL<+$:[QS@+P;8\#,Z[S4&#.N1!K3
-M2WA!9(HA%QK:RWP?_+W[.S6:7+[GF[[34P;L>R393$ME,K^CU,#V6WGX&[TF
-M(D\HX;^, U!A(, 85<!^\2I3/#4*_$ O4T8E$\'B_*I'G#A-JV<9W#FSDAH!
-MX\&B!<(&)L(D#%Q&W+W?J\+"^[O$X\*L$<,80L.R8L,1XJS,E+R&Q<,L[ 8_
-M',0!YV5%7"$67- R_&A,S!E.C,)1W!I3C'I5#)]7/+BQPRXU(*,Q4 ,SD3N?
-M,M3V$I; Z@C@%14<A].[1Q1^05", 5$8!4\':@)\,5%0-56_061.Z7!,@("
-MP94$\<B1S)9-,-:7BM:!C)%G$\98\ )!<+I]@Z%1O4,,F=>I"@*M: ,P$-A8
-M'::9Z=.4(A4VD-1DF;CT<@,(B0-_NGM:W9)48+I'0 59 62:0=OL$R/F@"B
-MNY9#$ 1,P 1?T*.<:IN?'=H5.=JE_05!0 1*H)$T\)886M9?X\F0_-9K;:F!
-MZ=:2#-<B(-<O, 7J6;JSXP)X<-=:D==0?3P"0=B'/;ABA0-"C0-(8=1)(:-
-M&=GZ<J"_Z\:E>[JIN[I@"MZ)P=6P3054 )M4 5'( 7@&:A>W+A=#3?M'=9@
-M>MMF8-:ZG=:"S-:__<D +MS$;;J1BP4MT 1]L]?0[4_-_>#2?;'&[0;(70,/
-M 43A4>$7[@*Y]S!34$/&0A@RD.$@+N)*0^(>[J)/(58Y$&! *1':3113012;
-M8I]$^KOJC=_N#=_R_:CU[;@\KM] OJ.O>04 2@2C+063JRV'R919,-:X+4W_
-MS=L"/F)5'MR#/-P)7MPH#CDEOMQC[=P._M2H6M@^#:,U+@-%W2E[.@,W,)\P
-MH7O?3=_B#<?E3<?G3=\[SMX]'M_SW=02SM_^#=QJ?>4/:NB3S.6G^P*A@](Q
-M5[H-'N%/C=<2?N:J"@))X"U8D-R=3EJ;?KH@@.%XP.)A52EK40-RKF0S7@.H
-M:0.YA^.7VN?M/05%\-Z #N3J7=632^3HW;'O/;KC'<=S+-:$GMN*CI&(_KO)
-MON7$'>I8P-R";N:4'MV8;NKX"B<0&^<RX#N,O1,KD6QLOL5,/>OV[=6]_J6?
-M3=F6C=F:G0"<[=GH#=K!+MJDS002:9%$(.7]C>P$;N6^C>7-'M==7@5BHS1B
-M7N;1;>G4+J(7&P15@ 783K@;P>;<?0-M'CM[F@-Q/@,P,"J2G>/I?>Z\_@7L
-M79% S@1/< 1@_=X@H/(LK_*NS:2_KMZ6[02D7023*R[\7NC_KN7+GA@#S^AS
-M#?'1/N:77NUZS9CB.?$_7?$XT*<X4*,:OQ,S<'LL8)M*)NN!N>M?[>M\?NY.
-M\+CDPI#JF=MW3MYR;-X][^^[#?0!G^@_K]8$W^A.$'-T,.G3OO!*/^%DB@10
-M$/%./]UB@199+Q??_BD%*J._L_5,C1?65_/GWI*QO01-H.P*#^%DW>]4WNQ!
-MG^5T3_0O /@1+^UDWO?7;MBR<_53<?4LH=V_H^K369_EWO7G?IA"L 16L-:_
-MGO;$SO:2[[@E3^3'WOES'^!QS^S';^!=SNM)8/I)+_)!WM4E?_)3\-P-K_J5
-M8IL=;YN)+Q8V@"EP'NN 2I4%Q!@4TW[:[!C' [1!Q1V_2P;'! )=8<7TO8PD
-MHP:K]05?D/^#5>K!C_I]/757_,[:\NMM]&WH$3<FT&O$',.S=JB/Z:6JP;?Z
-M9D" ^1UD ?;=@ N( V8"U\-RZHWR$0'+A_GL7+![8VJOV.TYZ>?UTIVQTPI3
-MS@"^O4.7_(3> :Q[<TT%\#J]Y]P>X-)S>&1*6Z2-*6 $F)3VVPB_(]E,IPSH
-MYJQ>#I!1[L+QA;Q+Y?ORG%B;=ZR-6]R[?$<%]MV\:X%@C0#"0,XG PL< I1^
-M"K#+"<'2502A'[7;>S^PZ1U!.#&=+F#X^W[N E/0@$Y%YW3=Y"L"E>_R#3(@
-M)Y&& .."9'G,">@\"<@"2=X ?(&;S^?-0.27 &^@Z$L"%M &\,!!%P&!X,MJ
-M FD #G2,.0C^[ 6<4TA5[U/L055' ]9"'V1(SB$ED0$4L):PT[>8 BD R#F!
-M)T "!V$ 1'=A$!+&0-!'"=&@)21NH% 4ND$(" <G'"F$<V8%SE$]J$ H6B$K
-M1%SV:;#!0H(@"VEA18)-4: *Q"8JD M_X? 3@Y'0[9G!SY<&&QT/6SMOB CD
-M 8 C<&; )JQTG;#ID2EP(?%(H;N(<WM0-35!50CK;,<-D()U#L+TB]RFGJ8,
-M-7$-)$)J,9D'%!'IP Z -M6,(48&Z?(3SD/EJ0,-!?U=Q,S7]HS?)%1V-9 8
-M,C]W6 ;@8>GAA\MPZ35#5$4!*\4>!(BN4+O5-E:( Y;:% Q,NW BL0U%.+D,
-M86&*5$. "3!"<^>X1& O](/"[Q'NMS$H"==A2FR'<RW$N8$\< _YWDR4@&/J
-M91&F?ICF;.)*L!U7#P]V0-N1 T!>G9-^0?'FZ;PO8!0181%(BDO1]C5%0#@"
-M!6%>!(&.T 5.Q71H$JUB)3R)SJ[+C<68B/T@H(AB3/Z0!K#"1[&:I)_,6P*C
-M2Y0I,D)8D:R R4L"E^\)& $B$ 2BW*\S75J@JU$VMT$4OX >HVI5P @8 9Y4
-MDYQ;5ZA) L'M <*,1)NBDF[;C8_CB<$;PM";FH"XV"LM*C\,0_56'(^C@])Q
-MYZXYEJ[&*!-/7W_9'<G&8;&$#_B@+F-F? *)[/J=QL[X&4/C:"R-A# )I$:6
-M=.M8XUQ\C4(@-LY&1J8<R:!*7&N@2ODA1AQ8W(J&%9 "-* K5L>D5Q,W DS0
-M@S9@&E[';D<59L"-JWU8+@NZ-GPWD;I@D;-UWS$AN+MM4>2(P)%+<DNNR16!
-M)\>3HEP!O(_L\!BJP2=@E/28I$-Z^+ 9PC+^IAN# &], +[QD0''\8!?AB-"
-MX$G&$;FUJ!/)'(&D<TR)15(*!,GKYP.I8Y@BC&8@ ; [MK$AJU:5P%IJ*UO=
-MHTZ$4\P6L_H2(DUK;<E'-&ZFE440&=<J2XK)+\ EUX"7%!,XP&_Y(\ 5D)""
-M/,I;:E)=M4EW]1/8T9PD5W9R()'"&Z#J>F+BR@H)0.4Y@2-P6!)+EBD@,F D
-M@H $ !*_27C@/R$' LD*24DIF=&)" ]3B-TTAHO8%3JEI=Q*%V0+Q( N("G[
-M@*3,"6 QTTD!:7**E$H;2@(OX G *C:U<SX'ZZE5MD%#V(%E0AI2 F3@+6!#
-MJ:"8572Q?@ZMK"RV4O0$&@(D4V*,ILN5JP/P# <$0R@()0LPE/8I48X+1LEA
-M'"43B91^P51^2L4 <OR/IIP#G+)2KLM027HLHF%1EW4!5;XI4CDIUY3!4 PB
-M1Z=8A35@!TC*:]@!.!).&"(+Y)GLGZOT>R]K5E(6K!-Z3!2NU)7^LDWYRBH
-M+$&#L"26SL-6@91D>5G21XIQ \VR SU+BIE\U,.TW![54HA<S&Q)!K8EL+):
-MQ4AOI0DO ;<*5IBT1SS3(V"$-%F-Q&303$<V0$Z.JWDUG<P5GBR:0)-/ABNZ
-M):_ 1-.T5V4Q7S'!V-$5?..AH%G\(<,=K+-P \X"2T +<<$M%(C9)0;4 ,6Z
-M6%_S<D$!^C5*JMD:"A_5Q3UEM97E$_5%U\QT<?-3S,USIA"A"<?"FVY%&T+&
-MK*GM:MSK&X@M@2JX1>\B<T"*&X!WG8T,) !5-D/PT39B PD "J %) QO\T8
-ML ,=A""H --Q+%- "I"4>,]R8LYED@!V1-2B U] 5-*!T#DZCR7[DAELRJ6\
-M%Q7@.E]EKO":V,@<V9:#,"0G8*Z@2E, >,HJ#?0P[%1DF!R!R#$(DV7)68ZE
-MY20AFJR1P8EM ]U6V>7!>P,'$#V5P98K2J?!8 ,"<P\$BTY)9B1BMKF(N8)^
-M5L3"T'/PYZ0\E2K 1\@<__DPCR=4>)YPP@ALE_;11#B&^(1/-1 B!8&Q)P(3
-M S V@AZ$G0L7<%O,5%LJ 8M%(QII3(NVC3!05*&A0*Q+;GM"A-*!YP%QJT
-M"#P!*^!"<4!WF9&3K2>@@-%&0?EB+HR@5T"'\M OT$&3P$7ZH9--)NW0"<H>
-M8QL?&*)%](B&J%P1._U,X5B7<")@E R!*3I)I_3D7P$S:7 *T]$0.6))\(AG
-M@'4VAN(9+*IH2D :F=-R80[:H%.>3Q=UGV$T7Q+/U]E&*Z<5A:/+Q')I$RXZ
-M.O$H_!2C&L%T % RNA%I2T=$?VJ4#K!1*NI'WVB\*PE3:9 J%#':11?I5G*(
-MCU2_1-))&BMAUCTZEE3%!3#/K.9&9Z?F7$:HE&/P3A1P2=FH4 I6!T%LY1;T
-M\28_ DO0I76!EWJCAS"<B&:ZVJ5O*QHYA*3YKOSDTK2:!@MO[01@FAK>EM*L
-M6VPBFMZ$ @DGID+&XU=0P5_!B1<P!^1 EO!8+Z EH<"$( 6RP NP PB+F@K3
-MFO40ZI52R%FNL"T$) /Q\4X&T&(00HM%&1:JA$R[$3W]+Y "G[(%M[ 6XD*"
-M^*=Y(:!:+#(5.N! 'E :[Z$UH( QD *2PM2#%S;A7?R'J? ?A)I-0$@#B4P9
-M@:6C'I8 1)T;2H,D*(W4T0*" !3C'^^E]<!, 3+/6D,1D .30[\@E1;@!)R(
-MGVD99V!E>4! Y;*H$CDUIR\ G:K3\<9.W2D\?0'R]&T=5+9P3P-$M]M9O",@
-MD0F)!5 =A,42ITIGGH9-/HBSO.J X%EBU9\NB(AJ5HG6RZJH%[6;51R.ZE&3
-MS7\0J3:!I-H$DUI60.HV5:DL%02XU+D*4^'-M*2I-C7FX-3PH%.[$D^%-#\U
-MJ"8KHFI4W0!2Y:8T0=4MF\HX#/F?"FU%70T)\#\@9UH+$X94K5_@/@B$!! "
-M4$ WS"^2% 3P 3Z L:@)"N!_1\ )5($<]05<YT U/1A#,:Q+9,H>,L8RV0)=
-MH >(@((*-@D60FVK:2&?,E1^^E 9J]":&Q!/!$C*KRA;U>396$:%$_6@@;Y!
-M+T2K=Y.M]K&UHE;*M5I_G7Q]K?5U#-)6VQJ79B%N[:B[M;>2A-]ZVH0K<36N
-M_@JY'H13R5S-:8\A ]!5NE+7K9I0W2I8[5G+AJS2U8]A!,+K>+6.L-"\B@#T
-M:C>[4=]XAC9 ]AW$[S<#4FS6<VRO\&4A@9R!&O( ^)FH+VO" @L$ZM>RS&#0
-M,Q:!#U;8[%H5+FQ<E:MA1GR" "1725"P6 ,R@%[+AX$>K%FY;#D:-8U]PQ9
-MM2 1:,)V=:A90<->+$%A.J%L]4@M%@N7_DQDBH_,0"]U"-,H3[+9"F8F+T+:
-M@IISEC&XV9Y9 ZYIU603=VN;/LUC&DS+0)N5FO#J3S+-0!LIJ!N[R!2'<@*B
-MU:=Z3M];.BT"ZQ0X6=5X*F<+[:&MKF-ARVK7?9HVD6Q9'5I4"ZWFV<-A4,-F
-MH.BJ3=;+DEH8,!,T[-O$L20J!.75C+I7.^K!,JPX ;&BA);Z4E>J8YVI:*"F
-MWM30Q'H SDYU#)@5J':=H5I4+>=GI1>0MF6%TY=%::.JI9VJIJNJOE-.BV<]
-M+9T%M1=!U+[5L.H*;:U$55FJUMSJV59+L 8$D]59-0&NMMN7^FZI%D75M1@5
-M??7:LH!2#^O+6JG#5K$6VYCZ6)-M9,4#D[794LO+ZE.EK5!U YS5VH*4I$H*
-MA]I\0H7C"4J"@/O:U=*&$S "]#6VVM?1Y5I+KMI(N?!UO][6UJE;>6LW!*X&
-MEO\AV$R*AY+KJ20#8\ ,--<'&V&GJ[QEM>CVU=[;4=M0::VIW;#@M0J(5R=Y
-M[=KKQXVQ(I?DTL67"UM9*\N=KR87Y7;=;2AS^RL*^*\U5\#.0IP[7'5N+DRP
-M$,CGKDN@*W0=['.-KD:WFGY:>FIO:0 ^7;<85B*X6[X0=:<N2;QV:E9L'1"L
-M4F@W"+C!#&_69RK>HL%XJZGC%2CJE5K=GCN;KA8O,KV\D+=G,M,^*:ZP*0U0
-MNH-BFN9)S]MX9<;C5:]^EDZ>7L'%.&D"I%U-376<EM-*"P4N;:9MI^,6JZY>
-MROMY72_FI;=!5LE@5RXK:QLJ0AV\J';;$M36&S%"[T%5OK"6^>I3YYM[H*]
-M_;<6->!J5+Y:$S[J7S6L@O4)&M:"&VP/;F)=K!/+V,I4C.%PEVTLDKC/MJ?J
-M!8N[6:OM4=VX2C7&YEXQM7N];>\%MT94TP;?R4N\BF_U5:\'E4PLWZ^:;\.J
-MQWNZMQ;>YECJ^WJ1[YA0MT;V GM?7%N> *Y>W:B^]L7YU9"*?@TK866_%POA
-MN@%BRUCE;\-5MI*5V596[@%M*ZYFI;:=];-V7)0::15GS*VM,W>-IMV;6V#;
-M;G%]NSQ78BS8Y5IH,=[0O;L2E@,?7W0[5D3M0B6USY??\@7#FP^UPMFC<J?5
-MUH4D*: (F0!8(L+9T/X=8?XZ8OPKS0VP3#BX.N&=FQ7B[A3.E\C4"MM="(MW
-M'7 'YL(2./M28 +1LT2P&(8#9)B\FCW_EH:+P!INPU;R:AV$/O-G7D#FJA7)
-MBPX\,67J @2OY<0+GC@,@.)C)HKQ"[4"1Y6"$Z/B3WR3$(,+:,5L@!1_*])+
-M-67OIKB3.T$6LX%4O(IM,2Z.O0")=M!>1YNOONF#R \$&*I*54Q+517P517&
-MQ+@6\P9<S'>]L*R%<P="\#[B!_$IM@)#2JLR1CC,%V8F3V07C+@@P"NS>,S)
-ML<H>!.A@D5 0/&D'J 8QL#*VHY,K29%8][K>ZLQ\+W&IW@8T^)0_,3HJ3;U
-MNQ:V C?B[AJTZJHY]@K(-'*HXP>U&CR8&J-56\<S!(<,08\=*$/R"VFC">3C
-MNB$%^'$,R<3%"&>( 7):-0Z,*B7%75@FTV1)Q!O&@$>P5AM!)X\OF^R3T]%8
-M0<:[(RY@7T&[$X1R36XK8P IPP"EO(SOE6FR@/,)QE;&TY< ^L!3^A0)0*'8
-M(?BC35P _*P#:0 $\&.RG#Z^0!JXB&!9+#L@MEQPSC)!6,L#89": ;@L 1.
-M<T !_N_ H 3X/_L@.DP 6^@,'?4L@,#.JK\1)1AN6B<AS. F#>%^!)4L!T
-MH V4T+S*F1@B [9,%/L?'0 "2D ;$ %\%#(W$A+"CV$ O^S*5X<-1+Y)63N9
-MB%JF":]R&^8V;1$?X]L4 &R![5X>D,E<F5?>9?9-FCG_/:"G7 900 F8 RF
-M--/EV_R<GS,7< ,B@ 7<RP1@N=J &4 MB7ETYC\> -^0 MP"8TYB(%FTY$#
-M4@#KG .SX0S\ !'0 D2 #A !V7D[6ZZ5\9T_0QA 739+9N. &T&V#,;+97#
-M^0U09LN,F35S"2@)#[HT0V@R<)VS<\6AN87Y%A=,/*.=2V4"0 $8&C2K#PW]
-M!1C&&# =(%H))V81;0=(-(>^T&MT.Z]H_=>BU4>)QC.I6>GU-=Y<!7PS<&9U
-M>[-4_F4 G:%M-)ZA?ZTY[<[H$6VC3322!@&-F9 9,A30.?# %]@,V>B)I8_$
-M $4:LV/>SG. "E@!#3D%!O.2-LR$;$E#Y]><*&$;$2 "@UDN>R*Z?)C5-!_U
-MT EZ01OG*U"8(M>BU,QST\?^FL\<FD=':P@(9, -=.83QCS* &H>K[F1RO'H
-M(["=__)=Z" 4 XK0 "A,FR+S'"#.EGE2=VC:S)VGD@@(U,/RUP3F[8 ".BHU
-MHFA;VG10E64B=:CS'*C0H[I36R[UX9_-M&+.T<W00_]EG5"EK_0;R-(HK'GT
-M@-;<4?-T<69Y?)H-Z[$CD*MIDPBH%$X -+0!U) 83@"JMCSY;V DZD4-JWW$
-M"7C4Z=(K(\H=D8'< I8S6P@1WOE-P?C,![6Y<KJNB__Y57=G DSBZ[3BAD$
-M,.8O#9F=-8-&SF=C"'#F0]W NDS^JUV&FC2;9G2MFFUS:W[-?2 V/Q#YB:>+
-M!C.:RWDY?9CE$IV6\7+\P9UO&4Q[[+$<LNMRB;[+_>1DKRM.69M9,VY^DI&:
-M($SJOQ;8NDO'_M0*^ED?Y\Q\-I3S4&;5SSDZQ^SDPH^K\ZW&SM4Z 7AG\/R?
-M 3-H)L_F&3V[9RVJ!@ST>X[/\[D^W^?\[*$IY=3NU0$Z#0SHEKVN#/2=ILT&
-MVS@WZ+,1H>OVA,;5,#JW%ND-G1RB=HK6VRR:1)MH%$USS[2+[MMYFU/3)L/=
-MI''TAWUP.[H(]&:>+=CDL+ F"$0Z<!OIY/"DE4R 9=P%TTF' &8- C@VJ0[3
-M8_H)5#9?_:_3M/];T]NY3:_0.+VR0?;)!M@B&G:7[;]<K+$TH][29@=*?^FR
-M[:E!]9[NT],Z:I?JK'"J=T2JEA7@&C1#[#>$J!4U0TO6CAI8Y^QL(;E[=.SV
-MRYC[4KN'X+VIOW?Q#MJANGM3:_-MN9JWH(;>_+I5&Z-R#<Z^S8.MU4W[:9-M
-M4DV;=K4=Z-6(^5<_[J=&O(=U"^C=Q_IW*VMF;;[C-K1&WG^:?9MJ;*VMN;7@
-M^-:$6EQ;[YK6J,_UV^[47ME#Y^NNG"[9-7APU_!:7L-D8:5'[%$<N,GI""B9
-MTCC@PF]RF^@NE:*%ZQ$8_B6!DE0^$+]8FGX*'=Y[5.D/KP%!?)N2PFZ'\>93
-M#;!NWX^)<[LG3OLD6^U$5FGD4F+1,0 '..6.. -97+GJ43?0Q4LX%D]H8CP\
-MJ N[M3\IU\N/6MGE/R$BYTN_7 :?W];(#MIJMC$*NMXS_W#KJR!YO&C]*/J
-MAA/HXT)IB<.Z/G606)V-2@!W0#!0B(WZ,<H.&W\>A>Q"LS+K($-0P!J' QTU
-MDW_R)WT"N( <. %2VBIP<5)^G4^ <87,7'P%K !.2<9O\R4K Z\YDCL.2BZP
-M%4._P.2&;)2/;L'! ESY=E8!9%R6W^9/+LLYI2Z?Y+4<BMSR5#X8^ 5C:<XJ
-M((_ @?/L.LLA;2;C.H%3(O./P8]+.0PX 7 9W,&Z5X<- 14DE^2)@9=;\E]>
-M$C(YB-[DU]R3<_%0'LQ7^3 OY:<\E0OS<M[*7SEMCN6S/%W6<GY\RW,Y/-^K
-ME=R7.[54/CH'.C%WY6DWCJ^9G5NJ3??RUD%RO"1X 7Y<T9-YKN#'S'P%=-1E
-M+3A$@"M_S5DAA/?E9Q[/HSD#Q629O)IS<FRNS;FY0:=-X+P%B/.%+CBXP#F_
-MB&H6F6;CY"6,27'N4>H+^9@U]3,I.Z"Z*M;&+J"IQW"D[!)NC]/<"5:]&/,&
-M8<S5&T(B5N*UU^/9CL?9;"8E=6@!X:$%>,Q"BXZ7QXAS >8A#8@!-BN,78#
-M< $NX 7H9)G,)?QZN@0"R8%$G U"D00B@V-H*2< F:)R[/$"L/$&V=8)YV&4
-MAL\020[">2 9$V/2&1;1HH4A[QL@S8;X^!X$\S4&Z)=-!@V 7;#K==DN!@J[
-MP)#)?#TA^W5A$=BS:C?B[<(7:K)>RVM\0V^ZC"'%J 40 >/8+50W:+0;) %
-M]+*.V@*20&S/8:D=\OIC1/G6XSIH( % H*X7=]0#VP/[8-?KMOV6['5/V]<%
-M!A=(EQ^=M;OVMG)<UO71: $$(;N3]WN)V%,':*#/.T&6!:^CLZ)7AW['ZTCC
-MFIP S/[92P)I)^X/&*]/]L;0P("*,!;M7>' GW;Q'N$/0FP_[[4]3>QVW,[>
-M=?M?[^V=MIK^]NL^?!MP:5>OQ_T@"*OH/MT+@G5'\463PW=@?UPJNWM!^.[A
-M';P#=Q"?WDF\WFWO_#VQ_W="(>!9Q\TH\!H^P0N,!0]X&KR./[YO8,*_# N?
-MD$5[5I#OH^2UD^;HSMQ_4[BX?!UUC1 -<4(X_J>,MQO5_7.0>2EEYI\[@'TT
-M):$%=.L7P 5<@->I#"2D1 .<.#!87@ 90.50!+R[@#307]2ZPXJQ"<#'RW5T
-M7->_''E7[[G=S^"%W?[A9SMA%_%AX+ K^<6^$QJ[BX'LDAUX5?:$3$YE!F9/
-MGP'#-&@'*?SD0;M^P? &_L7C==+\X#/)>,?K+B"Z+X'"9 @Y=7]7[ #^4S3Y
-M^6?E>SW'^/5O(-BC@&%/QY! 1QV64Y[!%WAG#WK)N[2G]L5>RU?XQ'#A#<MH
-MU_#?GMA;>]2NZU<[QICOO*&\TW;:7N3U>J;_,YP>QQ-:%:\Z6+QP)[ZZ'CX@
-M2N0NK)1[F7?NEP\$T'B7A MMO+\G5E=>NZ=+20_D(_ZE[_0S^=,;E-MN[TN\
-MIK<M[AV^=^=W'^;I>PF_[_E=UQ^7VYCA53Z[A_ =.-H+>W5O[$=]L@<!RY[
-MAQMT/_.K_;57\-I^YZO\=._SQ;T0*?="J>7#?"Q/](O]R_?U'7[(>WKT#NHQ
-MO<?']R<^N.][80K<&7#EA?J'.,87HX7_DJC[C=?ZR,CBJ])[2?$5?GB/\AB?
-MWE=](X\^O@"2+Y6<HR"D_*5OVL,4F!\LNU[AHX"#?^:+0)IG97F S8O]%@#G
-MK;O@)_QV7K?B^8*PY_O\GQ]A>4'0IP%"?V ,/:)W^XM^A1\$I6Y3<@K=/8B!
-MC8>+B9E ^MF Z0^ZJ!\&V/"'@,,W0NM__68@]JO^CW #RGI8^NJ?XO9_@=/?
-MLXUX,RV]#:NK,UK0.A6RFXW:?&H7!?"EI @>EP _KSC=L!(#6)MK=BNQ7G&=
-MJ;P;4O\A@!F5G!&(_=Y\ '?;:?Q[-^W73T:E?_C#_N)_HL-F$H?(L7;[NH1'
-M/X)?UJ=Z6?$?\9?ZU7\$R_VG4#5?^]]8-8Z18'H!$_ TF'^Q'\VT+0E4V!:Y
-M$_+$0F;7]'<977]TF)PQ"VE_2UCWUW)]?]>?^.<=08 ]6_HG?>E>TMBW18V%
-M6]88PB+\"8"R'P&8?(%@%5@-4&KU?U3)_T>5!(#SWP!X?>& !((.Z'3Q@)G.
-MB/0 #@'G7\\F 3(-:1;.)*P(?]L!9(!4[7X. >M7:+T \5\5Z%EM7+/?YE4I
-M4(%E@!4(!A9E7U+O=_SU8@>"\@?\H6-<H.OW!7B!5V!4M@;^+6U@0Q HH77,
-M6#?U+45:T%\WI %6?QQ@]M=R;7_1G_<798!_F9P)6/UA)T6 'B,$\"1'@ HX
-M4+& !!D")FY=562@&2@'[!<V(.WGC>E_@ (&UF]E49?@4I%3T(%GX! X@7UA
-M#4O$L@#:551)$U &?H&?8,OTM)PL4@L%*!_\@3@.!EB'27\NR?AG_5%TAB!J
-MA0@F@[8."1C^F5W&("0H"5*"EN"D58"Q?P:9^]<)XH*@8 1&!#I4#8&2@00F
-M?0"@',@*?H*JE#<X@:U;.F 7A@1>++:@)T@QM"$K!"\XM4PW5IE-U"[8#C4!
-M'K0/MD+DCV1#E<Q8KT&-=6/1@G!"%W@+UH%@@9)E9?U8C$.012: 8&!5.ZAD
-M/%U*UM+E9 $A2<69-64AA#W6E05DB8+>& )8"F*$9 J9]61UA%(68R!0)75;
-M8/RG6]P!=!<66*W @3)A&$ 3!EVS'TTR!L:$<N!,6!.B@:N?[W?_]1?"GU#(
-M$]J!O!@>Z+"\!5496"%6_(&D%3>4 1:#&R R* (J@R'@,*@(XD(E(#3H';T-
-M5X#Y5PUR6]>@"]C^!5])H4XX%-)3>R#^IQ;4*P]+S^+5C8,^8$(8%+J%2R%<
-M*&K1A0&)7:@ >E=UE;\5,>F$V0(3:*]5$K)9Q:1\U(.WDR]XU "#3(TPZ $2
-M@T: ,5@(;H6VSC+(&6):BV!8. Q&@V2A6>CP6(,MX 'V B9@!YD,"!3F%$JA
-MFQ4*&H 161'8$'1?LV /F KFA#NA;$A/T89$5D5X&YJ"A:&LA!A"@*S?</!
-MT(-0"\HB4)%"04UVA+AH-]%A@[14"81P D%X,-A8WU<Y"!ORA;[ACA4Q^5A8
-MED6P*5"$.>!PB!'R6!IAF<42^A7B4Y5%'HZ$2,%?F!7<'H&A61=F0507BV&
-M!_P$GL6)<#P(&R^A%#CZO88/2.I@OG@)1"'OAQ/*@7. @KA,A(&U'YP@_$6(
-M:,"":!.J@4WAG_04RG# 6/"'(&*(&B)3.#4YA0_+4M9HY8/YBO/7U@6"5V%F
-MF!7:<\R@X=<57H9?(2-HR#B"Y-]$8@@91T3 6>A4I86JX5K("8Z($B*#^!N.
-M@@S5_O>S$(;1%SGX T*(26(Z:/\QB6+5@? D5F31%X63).J"D*%S:+%4@%B7
-M9>A;#8+DWV;H%1Z"-Z)OE2.*AI=A-,@M:!PDB9"("1I@!1D,V!J^?W%@3D$B
-M3HBA8!>V#@J'0PUQ&"7FA:I@@I@A HJNH"+&#C8$%-FIU1U"3U\B<V@//H>U
-M5UAB>VAED).F.)8 9-BA%T-C(0P'H6$X)?J)56+]YQ#.AQ$A23@H$HI%EIC%
-M'LJ%KM!*&&7!AU06F?(0EH<NP'GX"MZ'3:*6N!_.56.64N >WHIHELH"$U93
-M?:+YH32P#+98@WBV/(@YA<PP'B +LQ]09B$BB-8BM-B3.75EG4#"E(F(S&+\
-MURUBBR9BHC6N?(AGW8HH%3Y:;%W(928.6&CB,4@C?H:>X9J(6CF#C:!8^ A^
-M,J#1%& %V !VXD"&)VJ",2"?:"X^B^BB0T9PO0!CQ0MP@9$5+T'/(AD9BI,B
-MG$ %,(P4@L#($EB*D:'>](^5B5;A,%@OJHDX(IN(AWV&_.*.Z"_VB !C$^ Q
-M%HSKGUJ8#;*%W"+'V)/14XS6WT4HUEJY8::S,5Z+'>/ ""8VA[V@R-AQR05G
-M!<@%EC"-MT??=+%HAP9AQI@HGHO18D/(8^V*(^%,@![:AFW!L)ADS8H'H*WH
-M$;J$N>)X*!*VBBS!PQ@Q7F!0&EQP>KT$L2)_2*88#A7("%+3G(WMQ0)E4X ;
-M*D.7N"RB#^_?A@@'%E0^69#E$]I^6R#B2(IQB">BAU@7OH%*'>(8+J)>S!]5
-M^/S-B[/0R:@5ZHN=89LX8+V)IR%:F!KFB:RA-M@X%EI6HG45%QZ I" 2AS&2
-M*8@BXGA0O8Y>%2RX_VT*[^ ^5&B%!YC=M@3K%16UDF.X!DB&MI<%^!9QCIBA
-M9O@YIHQ<X<H(.H*&8&'I."2>C@CCGE@YLHZ!(G"(;]F&,AQ>F K:CFN5][B(
-M@8/A8]!XL4 !O^,3J#D\#,0CM&0\8HI]H$K W;B(JLK>1'8A8687VB4]7H9L
-MUX$%A=EQI](@!EW=9GD7+Q4HXH[Y7[ H.T)?D1B(!0.)6(M7>F5BQ2?W8XQE
-MA.V/':!OY3]R?\-@ .EV(1=_W!UG0)H*_%@"N3.6C]_@QQ.0B(./6 1)((58
-M.9X(4$&66.L5\]>I^%7MPM9$#<D'.Z2 <1W6.0/AJ,@=,H#DXZJX-J8$BN-]
-MZ"@ZD>CC12@KOBSMH=G8$J),:2-5PC6VBG>)$]D>FH2R(TKXLJB$'"&RN'A$
-M@5?2@<@LKEJRX>-X.!Y=;62054PQCFLD'+DAAHM]%U*X.NI==%:ZZ$SY"1]B
-M'MEQ:8XO(O/H.=Z+TV.^"#TV@Z&A]7@G8H-ZHNI81_*1\U:@:$^UA]N7#! 7
-MX(90XL52.]J1EB26&*-LDK,C2,@^5E.7DIZ%Q, TP8RV1"%P+/$CR^2$M'E4
-M"YD8#):,E^$A.:75B(JDFS@"-I)-#VJ8":Z&FZ!K.$G6?7TDA34HIH?[5B=)
-M.XZ/H*0R^40RD^*8,VE*MH\#31+#. 2/KR3\N#*A(K,D_<@BP@F0S;<4+_87
-MY>34HT%FAT9DJ9CIL)%6HA()$3*1Q)0722L66=2DV(@79(2TXD9H.)B1:"-(
-MN$72DPA529A)DI)B)%5"1OZ3?&.!F$:^D9:7I6<3D@7;8T0Y.:0X/6%5MT=F
-M$A*EM.@"T #AXD.F1QZ3'$-'&2XN?X.D,Q9,FH[#I)%H3!*.GU='Z1?^B@<E
-M[U!*ZH;QED5YUX6"#*3VQ5!IDC9E[_BRZ$@VTE[!3;Z/X4$L"4XR%;0DG$ +
-M'3=3 *ESN?@O' 8)<GJL&9=+!Y$'O!>X@3$12G0%GP)RLP0 *"R943G_7 S0
-M1;* ;0V1CJ3!"$FFCC@C26G7892S80NI _8)XF-.R5%>E$Y'7;E,@H];HJ3(
-M !*5,J/[.#Q^D]'2N-%45AP<3E2IW$R5H\1A854^>S_!IZ!5<I5E@%>9&("5
-M7X9B15;R)&8EP(!6Y@6N0\<E[L@+-LH&217E-K@5"4GK%9#.%2&&0,:4?"7J
-MP5.*DD"E+ @ERI -3]-#+YR6ZZ3^N%I2.:UE5T! KDLGY&S9>,F45^)?B3X&
-MEAL6;^D8R4&9HH,$+UR,N)<*4)@D*56 K4,$V#_'TLB5L= !M%3FY,V9;GU8
-M"5E LHINP &90IY)9-@5I4>5#E;!%& Z!%"2$JKB6\H'UF6\((!IEU( =^E=
-M@I>EAUL&<)"7M91?@%XJ6"8D>^E>G@WF87QYQZD ]*4*8%]:!?;2%6.YH#GU
-MX^VA*9P5AI)VXV'RD!W0.BDJ%H2DHM5(6^Z46J/:.$\6@/:DSR@<]@GK(179
-M3QZ+#646"2<,E 1+??@K-E^YI3[)!A2+-P&.>44ZE)H81 GVJ7:D&$M042Z9
-MVIWF55C\A'+EK^=1CEZ1X[KXL,2%(R5,V>Z%BUQF2AEIJ7]$(NI83/*)!UZ@
-MV"["CC_E#A@T2HG;(M]G6ZJ#BA@L"%0"C=:DJ0@G$)9&I2N)5-(AQ6/+M%@^
-ME1;.%$ #*#>YT%KY7Z:"-6.1>#,>B55FAW=079+WI'#HB.69J*!>^>Q)FFL5
-MI>DSIH>7)I=H-?*9AB4LB5@:CX-F8WEHX@&Y4,=E+Y0KJXEJ*7(5EPPF;$ET
-MH9!G0YI)9V*2;>81&$,.<-/E!%E#WI#;RP5)+[R: 2$1*8=M0_X-K7E<YDO)
-M90JI:W::=B6; $/NEL!F'"1L0GPV).5E0>:0IJ5HA19$6B0<)9,50#[7A;E9
-MNMU+Z>5KB5PZF+BF"" 1DF&E&@!585Z8^&6ZA*J4:AM$4F%1@6AF0!O0 O@
-M9L"51E&8#FW /6$Z& %- ,YS^4P!6@ ?]5N*F^\5HI2O43+H9A=#R7AT[29L
-M ,A]&TOD@REOUE/TIGRIQMV;]V6&.2GMF^FEG\'%Y0$ I\!)<!J<VP'"J7#.
-M#0VGC;0M1)P74<?5[=@>*X&,TRG^G/#"2@ J*ILGYG;H3EXLTZ8\R2L6E*\B
-MJ"E%\H=D8^YH9.** B5[:5U-A#]F3>DUBEDIH;%H1<*':&22J=29!H?!4L>*
-MC6(Q'!R(=BID5QU#YHH%65,F'4DXOIUJIS'&=O9P95U:%"*ZG2I"WKF-/3%]
-M9[N8.:*6+Z) UFB:F0GCV1EX1G5Z)WZQ:R(LMP?$>+,8"+_#<-C_760IV4JV
-MC_5C?D$OTP.L+)/320:-+9[9HR1Y=SZ><>?:*7E2F\ZE"^D@E9*<)SZFC[5D
-MH&=6('J*?H!GVDEW,8BD&$6Y!>*=OV<8.#39G<D(\1ET 9_I"$AY!TJ.; )7
-M-2[VGL-8\>E'(G\)8/09%1H;CY9**6FQE <C,=EX#I^!I_4I3?*:] JD>%-F
-MFB^+^;E629\WYD%9* J55 ER2!,$-FI!8(,99 C*(78P#Z4.E ' $5 $(O*/
-M ,,X: @$A4!1<6![HPX,( 24!B4!;$%"_#+>7"WY"[*5*^7UV%(^FB]E\EE^
-M+I^M8Y#5=WV:MF$KM'["F3$""!HHCJ"U(3AH@M*?JXIB>+/@GT )#+!_,H8/
-M!-&05+ 'C,%@8&$4H-M:+T$9)*!' RUU3>P.#RAB\6@H$'D!!2I.OHL;@6-C
-M5EP*CEQ;1Z:H>2L#.]8::"6&P_802P ?,0A\T;4($>I)P/$"2!P4QVEA)J@.
-M1&2.Y8R@/] $$[%,W!6N!2PR6[@>6V4PI7$F1U/)7^:$#)QY:'A0=M0$@0T4
-M9KG\H3Y ( H"K #\V%CAFO5&< (6((DJ%\\%H $:N!XJ0E[ P E3Y!JJ0]9
-M+G#"YD%XJ"\E$V<A,$0,)$A\1CDD!HIHU?$I!!HAR./0*G1+!4JF,&!D0R\+
-M%NJ^H A<*&/@A=X@S$3[P6UL)68H&GIU7!(M1!M*4+VA0A5A((<:$A&&2C P
-M@'&M02!*2Y(G\$F"Y8<R%8 HN"&(0@J&Z%2"B"JBC.C]^8@F3.;")'K#9"5F
-MA/R"B9H1FRA9D0$)EY\HF2**M@:DZ!EABGX;N(HJ"ALX$JUH&/J*4@:\2JLP
-M.'J@:>=5.1228E6!XYF0/GL+J7FH43*+>*="NA0RI'UG'DDH.*3#F$4J&V:D
-MVV=!TGV.F2N@6VDS1I)QY>KYD+X&;V'8U%,R79ID^HAIHJ >:0@*)M&4;:9,
-M*FHR@#V&EI88GG\S* R0?]J@DD'_&1H\>^8,$;J 'J$.* 2ZA,86ODL94('^
-MD),A!OI]:J#AITO))U:D$&E?V%Q.DR5HI+AA>9*I8$WJ5X*E+JA8FH'IF:X!
-MCT0AV)^.Z%!Z@QJE5V52REPLI0(#$NJ42J!-J)PQE?*>$:+24%R\ $> $\'*
-MN "/19/I&K1VH1 ,0Y@:IJA'8GHGR Z!:6-*O!2F,P1B*GHA99JD5_=W5J:#
-M*69ZF#X6G.EPB#5UF,#E:D*;/"\!QP'GS75JB<,,T0.PIGC 0??)0 [ )M6
-MQ& 2'17\\D"( "2 /52#0&8)P*$9 Q!/2PMD*EWMIG- @ 0"Y*:W*883 _2F
-MR:EL:D.J)YB$="H"/*<T6P* X2"G64%LRLHLI]CI'(#AR #;*73Z6\XG1R=\
-M1YNZIK>I>#H'S*892VW:!MRFT"F>5I[R 7/E8*"X)0 3Q&\:G&ZG"@AQ:IPB
-MI_(I>;H9-*?I:7<JG5*G">IUNJ!JI]QI=.H"@*?5Z7@JH6:G'DZ#"EHA<2Q
-MBD5NTB81ZFQ !X@!<P 9,.ET:M I9*8?> A"!(>A0C@&4@MA\"E$+\Z,MN'4
-ME C[RW:F'\@O_@LJVF@02XV!0(!%E('A 7*CGFPE%(5;09OH!T; @S+$T32O
-M@I.@'J (P@%,85DQ#J0%B= OP'?Z04<F2H@!@ ? @&Z" "?"3P$Y= Z-!%YP
-M'D!OQ%(8X*0F /K!JZ" ^B]EQ(I@PVAK_H>>T4.0'KI!>!!S]$C*P?_17P V
-M(6I[2IR6J.D#BJJBXJ<TVXM*T_00,FK%4*->+CAJ(@*H\J@=F8]:S@2IX 8)
-M0J3"!O]"B$ P=);8@WK2I(*I<X.4*DI$%E4J>G"ENA%*PD[%I3X/7NIU\:1F
-M,YL!F4H&F*F-(9H:;JRCP4N;NG? J7>!G,JJVJE' YX:&^RIZD61&L\ %9NJ
-MH,H7V! "!"?!>^)-ZLI 8Q-VD=QJ.:)*@H+4BIM0*82KR=.X^JW&2<_GNJA)
-MRHY_)[IZCWBKUR<;Z#M09:?I.+EDF14OSO=36-D$6->E$G:Q#:-+E$&;H"WS
-MSL#*\N1C1 #=()G\)!A!PJHV$*PPC\-ZL((C*9'"ZMY(* ?K6X*JB#P0R<O5
-M!"@$.@EHZ9/0/%I-V(6=D*QTR<'*_#5Q=XE E IY6;8'N.3.[0%G0]QU,60,
-MV1EMHK%:)' #A2*E[!5]@':&*.&LT]4R<:STK"'KR46P,JP.*PA0M*9+2.MD
-MMK2R #[KQ!KSK#Q1Z]2:/R&MVD32P+3^K+>.A"*U&JV3$M+*M#:M:P/+ [DL
-M ;O0%> $2*U^P<.4R*5U84G6 VL^?Z>/&S5A1JG'PZ.#.+1J^24E T AH/<$
-MO_1LJG'APQ<0@C@M*>2TX)/=!3J &: #K $Z0"X&!^@ <H ., ?H '3 ?9:;
-M,9C'4@(PQ7P&M4)D,$M%K:O3A*E(85&M:WBY1TE*=ESIBD*D#BC#+.5)E4XH
-M QA1$LRNC=Y=HK=*C8?7U5%)_:V0 1D@N,X6A*O&>8AB48@K1:&XJI=85./Z
-MN"HQ"*3DJ@-0KI8KYJJY<JZ>*^BJ ]@!.H 5(+J&*;5K8V"ZI@^H*U(Q!ZRN
-M^IA5\+KJ4?.K&A>[EA[ :\>97-FNK 'N:BOHKEC4[Q2KM :]*VKPN[)1S]"E
-MD/5 -B/J")<N_64@A1R@75 ,GQO1\3P,<W7!&<!7>70?6BU5&$P&QY(9X$7%
-M(G) M=:^R0JG1AD@L1$&6T!!( :4!+M",3+0K"N.0Q> MT6OVT&.1IO$' ($
-M"B #Z+ CW/7Z/%QLD*C]!FD(L:<$54&CXC3IP^/:4 PVA *<8PJ)"I!>N3DI
-M/;"86P0[P2II%FQ)@,%^@AOL=E9>+A,=U7>F-#0&(BQ+&L%J9BBL8K'"G@H%
-MP;0 P\*QPLH,>ZSH"G1L8H!U( PB2$J@:0 ,-BS4EI3>$Q]<!VM>?K!G+!V0
-MQM(!)*QFQ@70 8]L"XO?#1$MD1.15%P.-2P=JQ[8#'=L#-L"-*$*FM(2R*)K
-M'MH8"T@@LB'L"+O&G@V/;"1;$'P,54C"D<E*LN$!V+&B!:B'&EXP_WBRBP0>
-M KT%!&I&C:4K5&B%K"E;QH*P:*PJFV8XLI L'2#)QA(S U9I,WBR8<$!@8AX
-MLD]#'.&\(!/\Q"BKPR8 /"QY^<-R2D%L%WN;G:.^$55QQ)JSMH$2VT8<,)\!
-M:O'$MBC^$("!%@F=,RL-8)N@1<KC<;<NH0S'RB"'!3BL#F<1@,A-2GYK>(G$
-M<DI^*P#UN&:P;EQ#BT59 5NJ&\#0'J]5P!>@*#%*B4?_,R+8?;;",L$I.:P]
-MRMRJ K K%NU3$AF9%:<7_MA?M+2V@^P8+E$5ZPHYU[%4 :4-IT2*LDDE)1L0
-M=/!C.RU ZSC0<7?,I)29Y$]4"61PZN4% L-FX,=*$_,#(J+^$*M *.-@JV*1
-M*V?S9,B2L=5!(BO"_C*:657K!BP4%6T/P 6( -89?F8Z4+3< V/ 1^5/FI3'
-MEC2<77*& (L8N&L4Z HP%?@U3\!;RPAM;RV)'., =C5Z3&^"\[AAZUI/6SD8
-MF+=*7M"(9IL?*DP@.3F-A *"$.?4 (E-%0N;T7051V/6G8(=X,8:T)W.3P J
-M"2,XV $G /B1/Y6V#\0)8 6DMJ1M6-:6;5)U 8"&6F2P=BU28=O2J&= "J#7
-MF@Y2P!4@^8U.!P%+Y]IB=#\ ]V8$@ "DF9?FQM$FH*TJ-MI"9MKL0=BI:;%L
-MP!G0S#%_F=#ATHFJIKK:5(("R$MU00KP4<@!* .*1M[* >;M2V& ?+-6;*<6
-MW8JVL1M\-\*-<,9L89!UH \6!RB7SATU[@))M0<]2%9<>)L5C+>>4GE[WJ:W
-M%<=ZV]Z.3#T'?#O"0;<1 WW+\AUTIBW9*J85)N#'[H:Y47BI*]FA$ORG60$'
-M^]$Y<$.;\F9NCEB@P33'L82M^5+SD>=%I8\#;<&MJ:B%;*DFTUVWC6'L5N+Z
-MN)G4;"O7UK;M:V2@*G4!N:V[5N3. 4>N;[O7!K>ZE?DV.HU.(*[[&KS]L*E<
-M"+!!C &B!0JPY&X!,@"2>S9HLZ@9^)?<\B[,K?"6X\9TL=M\2[/=M^E2?EN'
-MG ?\[7?&1W5<IY>J$R]4H50I35#;"#6U33^;V()Q:!P Q<5Y<6><<Q%>E@$U
-M!*)+Z"JZI0>(Z\9]<6%<>*G1S7%0VNB:,.F;"53R:JE6+X9!O5$>I*[,'TS@
-M5]4VYR2B!.*>L\[<0X<"A ",;KRV;D)F1:Y#L06 N+(<KGGH;F><[:N+F,A0
-M3( ^!\IEN8C)=Q($3"G"+D='FR!T--M?]NL^ <'N)P?^/6:DVBA'T!UUMVFL
-M>YO% /^MG\OQW O]5+BTZA*UDU*O"^O6$ 0;;5;KY@RW+NJ:Z]YFNZZ'9NX^
-MN]'N/D?1A0#%K@J%[$J[&9VOL=']IY>N2$?2I71J63GGTKUM\)VS:^M N\EN
-MNMNI6;M%';9+G&J[C^VV.B=TJ]J(/N)1%HKRJN>D\9:K1M!&T/$J3]]JG]6N
-M I+\E.%)*(R\&2\W4J\ZA?P4I9DY^I"&!?(TK[:\R]-!]3#26F83E-;5=742
-M@1K0-JVE<(*XFH^XO)<+57%)S!2@@?*D7K R*6S,1(@4!SKH06"GB$(L2E9#
-MUIA7/ !+VCUT(SX W]0'_4UP4[IZ]"Y/22_'L/2>$DZO4!%0*!92[T2W1OR?
-ML()QT%1JO3E,U\O(?KUH0-A+"MD 4T%FJ]T OB&J5>J'N5( :L T7C@ALY3O
-MM"O]2VT2!"*_VBJVE-*#CM:+BM/A:T@)3&M<P#3%"! "S"RU^2)2]2NG0$K9
-M<9^4&?7D51Y"0F- 2'E1 RS =$CI497OX7M) :@XKZ#'+R0'HN\793JA3G6
-MZC1*Y6BV;^9TQ9$,=XC.\;[>4;YOP0#\"K^4+_'[QR&^OX5.$4'TOK&O\YLZ
-M3;ZMTYU;>T4]9P4^.YXD #AK4-22A$/; A6 M5I0=&M,]RI]"K!29O(I0$]?
-MU*S"L5A/GYJ%H3W!$]R3L=08?$\&1-4@P,!*5 GY%!"83V,(^@2%$, MRJ<P
-M^N9+\A-8!A+53Q[,7<"7Z4\H"_]T:L!+L!* BD4)4/;2I_ PP;^^Y<&U0-UR
-M'</\VP"GK$Q4!75!,2GEF%["1$51DLD)!2N!K"K4FS:MU5#=10S<FLA0-!0(
-M!4/!OSZP8_*;?&A#E B4:&HU0102/ -[4(;?#4R4!+=.< _E1$%14/ 2#"O%
-MOYG.%" ;S(*!+)PTW$,OM*U41?H%K,$!0',W 7_H9EQ*Y I?VJY44*PP2#"
-M-&$M@<"UVCV1.#7 .T%/Q +D @1=POH.HU'JV"2[V@Y6.MO@K5VFT;#=EJT
-MHJ-AH_U#_AK"7P!=0I(DPD_ (HPR+!..,-;J&W61DC#.NI<P?#$))KP(%Q6A
-M2&;9"4/"N$,VFK92PDR)Z3(NF,()@ @@UI*U;2UV=K:BHS)<* REK;] \"(L
-M EBQ=FNL1.%\P2>*5H+,M@8TC#8+HQT6>H >@/FQ$@M""9LM[0ARG1SPR<X0
-M4RE\0B^0%45G(%P(JR6(L)24"=?"FLPJ_ D7-5G-)#R7B"27L#FL"8>T*NHN
-M_ EG-^VP*"R1\"4P21%P!=#"(@ J;&*HP]U4*WPOZ<,>RH1BD0#$M.U.D3-T
-MPKY1+YP/_\*T23!<"P_#^5HQ'"QHOK[O^\3YXCW+V1P@,)%T#[ :EP*X9B%*
-M/;IG(L/HR1J3R'8-(D94FZ)!P]+P16' @A0()[>6#6_#K$PWS/SY#O>"@H0H
-MY22BT4MRZZ"M*PD1X"T8 >IONI23=)Z'R00UI6AG8-E@8K+.PNG28J(1TPO[
-M;*?"5IJ6W X,(+/VN6V!GLO ADNB\&MBZ\@F#+'_01"+!:K)1'R=\":8&7 "
-M$.,:E($<\!87*(J3.VR<("=(P%T\>*Q7]C =-(_.3VEQ0KRI ,3GK4YA,.4]
-M9VM?TS3YPN]"13Q#"</$\*NTQ"$(["F?&Y_\#JL.I"<*#RH\BH]"VL@H\G M
-M7"XI%N?26]R%^<*DRJ*"I-B7J;$(8("XQFF%7-RE2"I3<6U\%PQ+,H1K'!<C
-MQIB*8DRA ,1V"$/A4$#$W92,,Q%7Q@F 18R?9<8J;>T%8/0I@' 4)Y:P.59I
-M6 0](<.D!>?$RCP,1@O)4@8[$(E!GIH7*# >QOT+5(!Q>L"V=ALD9G;!'@Q!
-M#9=ED)4S[S0[M;!<PQB=2&A-* ,>C3+ R6<3(&M&BTPMK)YH!IP!=@8C\3T;
-M,?6:+VT0(;'5\& V._[3X@JK?"*4P2K3RES(!(Z '!X!)Z.K=ZPQ[BJ/;YM"
-M?8 OT%P$3!H'U.#41%9P!WH0Q#S/$R]S%^,0E+%*-ZG1SQ>'!"TE+$ 2#RP
-MI0?60 9(2A$P0GN\ E!L+4?#*<%/WUEH(%IHNG. KM%"!,E*PRD; <L'0 G0
-MR0<%#SZG#55TY@"$\$&G^)H&:%EC0#H-N7+ %I"3U U! !00K?EI1T 7<(OA
-M/2A:1KO1I@"(@7'P!7B58,@WZ^8>=QFN1"(B$\A20(=K)L-//[+,L":+Q$F#
-MFVPH(\C B9T, IL.!_* K,C8Q?I9)I4&Z &,K@B;*8_(4@!U1Q,(RA4NIQ2@
-M)@;DL%JC*"^[9S(,XR@WQ)*R&60IX\GWD0GK*8/*W0$M= "9RM,IS38H#WR%
-M<B4,#Q,!UFWBRRBCR<?2HZQ3U,J6,!%P*\L<>;)&.RZ=Q!(GEYS8%)WV6KBD
-M+'\BS+*:3"N_R8"0G S!U<EW,K5<<>C)UW*??(\ RA,#JAS:JLK%\J&\*2?*
-MVYF/;!IL$,YRI)R3V,N+S+1,!PBP'+*9,$.@!KIR'_8IA\JP;\'L(:,&P+*\
-M+-T2R@]$JRS(O,K?<J,L!_3+=4&MS-L(S 2S)I,PMZ6\\B(;4F@R$;.PG"I3
-MS*PR2'(L)\OZ<@32+(_++G-= C*OR];RHH0M]YR9(HV"D'@\93)KVS*S1WV)
-M/PPSQ\ILP'?&,;?)HW#1? 7<S": 0B$09Y82LX7[/Q7+L;#>@#''S/PRS5RR
-M-B6'7+H\,(, 3;((,3)O$'<M"E VN[55,SE;MV(Q'V:G8@%!>JLR)<P/QR1'
-M\[(L<BC-7O/=[ ]#S5*S-)$*WP%M\[U4-P\FI@H5@#%SL";G;1#\NLE4@&F3
-MG3PI<$,0H-'R<6Q:5D#I%KI85(7)RJ2<]R5ND#E_&X\ND5%ZI&P>FN:<Z+X7
-M)?' Q"]URH0!/Y8ZC<XP@NP<_"ZB)#/#G#J9RFBS;NLU:RH4BL!L*M, H_-?
-M1AA $;B!XF:YN+GHJ)!*X%4>8M0]$3*T "C Y;($Q ;#DRO<O_U_V_.6^V_2
-ME[]SXBP\C\Y;+FM .FEF9BU^5LCV88LH/]8[NVNZ&VVV5MQF'/"%NSUS+"B
-M>N ^L\D[ /V3/P^<&X@) 2_3B>#+*<\3R6,,QE3LL$J:?,:,'""P.NS HVY
-MS0$K0!J@UYH=LK-4VN:NS*FS!%UQ$ ;#G"05NU&8REPY5\R-SH*4S/!RGL\G
-MPP.-]T30@E3[_#B@T'2K_5RJX<_ZL_&*.S7$_;-ZD,G55@XTP=ES$#(#= ]M
-M0'?*/VX'+4C%SBVT#P "T]!9P5^FY4)GL1NOH3+@<N:>$CV5]+H4)F$@RK$R
-MI%P/8,R5;:S,=FM#4S(+-!C]*0313S02W8=.T!7T!9U$G!'_Z:"L14?1$_23
-M)D*7;23T27?10=&PBK\)<]*7;#2NG ; T)F4#(TZR\]3B4S7*1O/*T#N,4<G
-MSVZT'<U(=\I]]&UVKJ%SF#03;<YQTF>T[ LN,[*LP7^6.K$O667P:SIXMMO9
-MA#LL3TH9<:EKS[8+?+&("1/HN;N#52HT0RCYB>(,W\7,:3)YV1C[RVKQ.'0S
-MG[<#)R$B2:G,\_+\=#A'*(FS:DN;R4^K;>.<.D'.DO-10CE3 9:S(=?'5=.D
-M<QAG;X+.5H'H3-JJSJ5S;W$Z/[?H=!C7.JL ]"T.U3W?9K/S.>UHV,X$0?NT
-M,/?*N_/E\CZC ,-TQWR= ,\6B?!\N1#/]K3Q'+Q1TN!T5L \I[.A:J.!1B40
-M[\_T7#U_"M?SBI ]V]/VM/<\2)L. 373#$TKQ%3 ^-Q1J]#F,WTI J3/Z!HX
-M31B4H_\T[ 9.MP;NL_]D3^/0MUE(W3\#T0#T$"U SU $]!IP1#?4ZR91'473
-MSS)# ^U"RQQ^[?9LN4#2%C29,$EKT*MM C H&]6/0QX=0B-1#R\%[4>? ">T
-M/9U"FU/?L^E02#/5[#09\U+S8RD;4>V5R=.E&B0M26?07/5'=U5?TN!T)FWP
-M<M)YM2=MU/'5(Q0C'3/+/XX!"G!*NP:I=($FO#VW;S5M]DH3P]5QA[D[D%2[
-MPSG97GE+84F+I=F.U6DS(NJ$W 418N5+F[C2*W/^=#B7*B2U-$V;4-."];IT
-M30\!D3-VHDV31MSTY7S(I=6;LW,Q3EL%GS.&&3ICT>!T;FTZMP9M-2,M7(<'
-M[W0\'5C/T_AT6ET[.\[Y=.[,3P>_O'-2K=LFQP(U:KVI&-2J4%JM4"//5#4C
-M[5"GRLUS1/T\4PS1,T5A45O/V+,:=Q]OSR<U6?U1MTS/<FQ,4)?48G-3S6^B
-MU.2E2LU2Z]?L,TQM7<// '9H0#_;U. T3NV2.2!)PT[]/PO1&S 1#50;T2J=
-M6%U4B]=]*%(-5.FV9_4R;6'CT1]T'"U5T]6Q[5WM5+_1'[0>75<G 'KU'_UA
-MPRHK-"&]5'O86/5:/4-;V(WU3?TPY,_P+C?J Q!,CW$/G>4^V %T$5U 5]A$
-M-6M]8O=A3'2'G58_U9C;%+UB6]%.Q),]E;S87#08_46#T.6<&+UBE]$)'5R-
-M1M//-FH3W49CU5"U'$UB5]4F]D<'8I-.*G9LVV*#U8#UDAU(Q]AF]8S-.A78
-M,70Y6ES;V12F)OU76]DY-C@M5V/0=+2%W687M=OSG.W2I=6!]K4+6-O3@W4I
-M;5BKTHBU98EIL]*K;6--X3;3%N?;3!)U7 Y+G#/4[*TSJU)C:J=855R=0^U>
-M<>ETBBQ*(U)V@*,K3F]Q<$#*6<;!M25DZTSQEFZ_L%YP&4NMG)*&?$W_%SC
-M09LN<9CZZJEM>_@.XB]8DF+Y58F-58K%5AP[0AR 6B#:V;93\YI><>U:ICM%
-M34I_F7*<,Q2\'W1'G$>9Q(W9_*0ZA]LF0*S+*2W;XR]5P@3(JK">P!#J$AZ6
-M$HCQ7MRNJL.T&C.<&KZ2#H&BV,$_,58VU+PCY*:Y2TOUU!&V(3- .[S@6\51
-M6]D!$/?*0<A4)2O4M';]6;LHW</M1+_0%'<"D";8<C,VF_;.[7(!U,?PS_W5
-MJ=PJ5W9TV\"<*D?.H71I0LD-H,(!VRUQ:G+SW D=<;KCTB9_6<N-;G_2.G>O
-M*W-_&W' 1)?3X7.=G+3[;7=JS.YM6G'S<BP=S5T2!%@@]T7WI1V;-X!08P-
-M<>&2PXUQ0]@:M\0-5%/<4K3('4!SW#JPSBS0K7(L739W=D/0)??)S="EW+$;
-M%WURO]SGG$#W=W?9J%PFMW1KW7/WS8UA#KNO-M4-='>G/W?/3:H-W5>W)Z=W
-M2]J(H.6M>)\ 7G;2[>H>WBV1TVW(Z'3YG-1M=>_<DG>G=G73W?P8XLUUL]Y>
-M][KI:HH*\$*"-!:;<;'V.UUKX]Z5[CKMS^I1MUP95RJMM\ !2@##; $[E$0B
-MJA0!/L!ULGQW5,EM\BU;:R?:@E[;49%F.]1KLGQ;WWV<D%9ZG &C1(,=IES=
-M-*V:9R8$4BQ=E-9XR[_R 63C5UDWBNJD=%S+VAXQK6UKHW'A9<HV\&%1P?=K
-M1GRK ,8$Z?":A9?@]S81'I!T.<GRW7QKWY#)=@)]5QP)> ->?4^G:6[V/7U'
-M)M:WION7E=_CL7)0$J3?%#>S#85V4PF28N-T@;=R !RP!A0<[])MAK[(,!N5
-MR'% O$NMVC>[@7,,'NUI0!?D 5.W1ZQ0J QM0.Y4+S'1*+&')@: RI0!<8M%
-MI0 !. QC.D3@U'<1D('#=P6X&$7NTB:]+BT%[WJ^Z0/HVP8LS8=9\ W^#7/J
-M]VU:;F?<7K2P;04,;_R;1QS!H@8[%&9&]L"M3X#<*J'DN.#V"=>=3KB0G/'-
-MY)[=V0:NR>W&I^%WOE3QT@M1CT@E*K3:\%T*OH(CIKXL$_V"1P8QN&Q6--#@
-MHC7YC8-O=B3"#MZ#!TP_^,H@A+M+K.YV5H7G2^5HZXL[S;4@<4-<R#;A3#2"
-M"T"E *,/F$FH "G.'O+IAWA(,4;H(33OK"XZ9"+?[.Y>"D.F67A88%+QH7#
-M!E8#&$[(B.$=%1E><I_A:'<:/D"OFV6;NCFD)>.B].?;C+?B;'(8?LJ<%F,X
-MZ6;BNMDHMMOM4ZOA;+CJC8X7#@'3&[XQ3RF^R1P>MSH!=[C*W:G-4<W91K6$
-MP^)X.&UBPOD9^C@)1[SUX:1#K;Q]QP K " >@PCB!7DQ7O$>Y%0V%IV-4S*P
-MV9EZCJN;;FY?P[D0!QO<B7 <<!;UC_8,PMVF?#@LO@4XY'<!1$Z(&^#;+L_<
-M89(E(E78'333)OCS LWM/@X"&S\&A4<F_;,%76'[W'^92IX&= %3-ZRL-P/)
-MA_2;J[$E!HTWK!W&_=\9@Z:+D^_8&<-M]C6$Q#I%_[S&<=F9KF+@5?^G&?.^
-M7#3T3FO45_[-WK=/^:Q+F\W?I=-Y:Q6<M^]O^XW9P@L=4/R]C^_8.GE0WI-3
-MPLMW4'Y$$^68FU&.E)_>7/-9WI3'MCDYJZM#<^5BU ^- H#CD'+'?)2[ &^W
-MD2V4K]C:>&'NAV\!%O1/OIWHM8=Y5?V.B]+C!6']GU'FS_)E?BG'M@8N ZW;
-MLN:1LFO^0J_2:WE;'I7/WU0Y!UQ5P^7J]NRKQA%,5GD"@#]GY?S85LY#JW)@
-MN6LFEA_1%[GA&BL#R7];"J"6J]PX-#=.F]<%/718()D33&CXQFUD$TS0.:G6
-MF5<<X'DUOG'S+F2YNEEI%];I^:4LF[MK\?EMOEC;MZ0M/_Z+F\0 .3FKFS?B
-MJS-R[?O*Y2H 71Y9-]N.C5!S*=S>JID*SH)'XB[X9T")OT_G+0U^WF;B-[A(
-MS(FG!\?$U(U,^P! ^"A..I3B1C@2[HO[XW4!\12,\](+.3%>B!_@XO8Q[NIJ
-MX<HX_.2-"S ]4NA4XCC#10H%XV;XV8XYG9V9^9 M5NN>KOA:08<3H]#,F_K
-M/9Z/6]T#>4HK=-^F*CE+7@:XY(CX6G27 *S>LB/^H"N_$3H,3J&_%!;Z2X&A
-M8V[E]XC H?/@M^F''J+K3D0XFP:+WV:R^!)>B^\=8P N_J(7LKQX$HZBRP$J
-MNA\NC._I-)M$'J/39LCX%FZC=^'->$C-HSL1/GKG-HT+Z>&YVKV&&^E4=SR>
-MI,_C<GB37H?CXX6)?HV39P[[N57 A/OA\&T>3I"CY%3Z9VZEN^0=%Z&DH!,U
-MWP\ANH(5BMZR<8Z5V[1;N4YM<W=N_3-"EY3'S.<M6BY)?7(@M9G^YN;GI/J?
-M;JKWY^G:<1<P:1>R AK@H*, K#2;&ZN/W6,)IYAJ/T%)35F1;!+)I,2FB3&H
-MG*\V<![[UM_ ]Z0;H-LJC[GXO7\#W^-X&8<H;;0,5+R4X()*X$85<CR8#NXR
-MH"R3(^AM$5Z>%JFF]C:^K4X(!^^!&#%]^$I$P,J08[0:* *E2C 0'@[1GM$>
-M8(N<;CN<J-?H7\"-_H4WQ(\Z.?ZC"V^8.C5.I%_J)BZ2GA?'X?6XIVZ'A^HJ
-M=Y2^K$-F;?>0OHYCP4:4X5=RN^Q*NARNV2A)Q:[> -_:[/CYY59QJ #!]]$-
-M<P=8(0!KT-FHR<$WCS[MWJ9 .Z=>CPL!L0W#20YUIT@[9#9T;^,DA"'C!\#)
-MK\DN%"[L#5F $S $G.QE.'&:M</LD S73@3\*.+0T9X^Z.'X.3D(B>IG&F-(
-MLQO(-/MG0#$C.#+?C"SZ=/1O?.AJ:B6C 2)WMM&.[]+D<IR\-1?+:+L>@RS'
-M;NZRITO2.;A,A,IM22^[F'NY/"=/:QASI->O \IT.NA>0(CN'#1M5MU6T9KZ
-MR[ZDDSW?R5WT.A6Q6>J'P47(:N;U8%.VA>VT&9PKE$R<J E:P(@C2@G[D["P
-MNP?N![7ZL.N>$CL00;''$D#%OJW,T!8:NW# L3/ODO#'WHTSZC@ZR?Z,U^OE
-M.,JN9(.S,L=(?*@3W92Z>FZI3^Z5-S?N$8OLDWG[;KZ; -"XI(Z-\V\J^SI^
-MC9_CW[(\3K?;XY_ZDWZ0(^W$&^7-OJ_BAOC-5K9E;!KY]S:ZC]9].VV6LU?J
-M@LD3W+-?[7)[[1ZTU^-#NW&DR!CM8/O>OJJ+[95:E T21^93&M->KSOM@3?4
-M+K4WRU7[^1ZO@?"DVMQ^N]OM7KO>WJXMZTK[J_O"YTOVG&UFMJ/M8(USQ[:[
-M[7#[SR[":^UU>VR#MQM^*?P0G\&W\!7'$<_>_N]4=^=\F]WI-P7LFS;?W2_T
-M"O!/B^&1-"+]O.I18W, 15.[!J_S'3V5S/%H_ #5=[NZ 93@'4:/T>8YADD'
-ME- 8IAE-JHW0=, @_U6+T2IW^4Q>)O*F@QA>QY]N0FYEOC&#SP,VZ>3D1O)H
-M>(ZKG\?/H_5_7K:Y++I:X)X\_"[H@P!C7QSN@$SB+D L[HR[21Z6/>Z1>PQ"
-MOQ_.$@G:GKKC\I=SG*RYI^ZJNW'@N3>X^WH*$+I;\+$[U5VZQ\FG^Z($S ?L
-M=4%*\+D7\\<\\7;!)P"S._'FPW?J>X-F\[8C3.AH[PXV_.[\* G2N&_/JGI*
-M.\%G\%8L\X<#$+YWB0W@?4KE^+?O/>BZTP/Z55*@OQ2J,O]=K_O?^WKQG9#'
-MQ@OY0?O&X30O>K'=_))).(7DZX34Y9_":=*G\ X$;IU#ST.ZQ/7][5S$Y?J\
-M@3ZOJW']][WT?\/BG!(!GM#[<=DO0[\&./1,A6:<*4X]M@>9C'B.OV$1=P8G
-M&-Q:20&.IAX5*$H^*C#(Y;I<"S%KM$R^TA$ :80T[Y*3VA>W21YO#3&8?>B[
-M%\E@#<.^P5/DBX>8ZN\"(>.$Y&CT-J?[\N#;'(MG,HQR<K4"%0.^M\->.B0.
-MI@.U$OH<4(F7?C2X";#5Z["&>A$^*?7I)[JE%*B3#D]XEB*!2^'!\KTDOM_O
-MY/O('H[K\)!Z^AZW:_#Q^\I^RT_Q![S,#JJ7RC6["B^E%^_P794^< ;B,3D5
-M_J)W]GL*#" FTSCC.J)4TU,E.'W($EDV,SU]XO[37R5!O>HPU#LA1?U1#SDD
-M]1V[,\U49'4%T_-!$@?GG.])[,:9<7.N)Z(\/?4O13)M3DGU*%KI9-6C",13
-M5B_7,Q5<O6E?;\,)]_:3$-9/'_$84$'6BVRY_;KFH*OU$8@DWM:_]:Y?7#_7
-MNW&&.D'_U^NU*X JKE-L5+L]D.U0--5S^C0_BY/QM_@P[L;A]?OY7N^$+RV$
-M>KI4USMTNQR-/KXSXS@Z=FT-\^_H>Q2?LC?V GR1GD"CT9B;@D_8,_A?.&UO
-MW^<,)7ND+HV#\7;VFZVS1]SL.(E?XHO2!OSM+MDK\/R;<=ZLZ_6G.ND0D//C
-M=53.0-^721_^:Q"0,_#\FP.ODKOW43A\_ZIW]L2;H3Z(:_/:2*]AD4_>HGP@
-M3\ETY+[11SZNX:/&P2]'_PCODS<[CY ?WT=^Q0N9*?D#^PB>%-0$(-4%-N/<
-M'J_F#EG%-N:/+4_. _CD?GT4+I@/Y:1:4?Z9'^7#>JSLA(!HAYD38CH$]JLM
-MG!^6UU8>?F_/[E[FCOV=OV+K^0EY:%[G8^"K$F=N;K[G_UFB_QB#YB S;'[B
-M9O*:OJUKFS/5N+E_7L&K9N\Z53X&/+?J>O#$K@_GN_>^J:N'!QM5<2MB?&R>
-M2(.MRAT$9'BP/@8,YCV\G\]4&.O6>0P1Z#,5I7Y^OF,33#TVCZ_H'TPG@W=N
-MR #1)W[:S8YWYT,U(WUUI^=O-WL>V[KGL;)JGC_G\6/S/UV?D_KW>:@M3^OG
-M?[J +U-/2CA^TN!0[/A=4H]/8_=E'C&U_EA<Z]EZ!.25+7%K ;<#L0C%\K,D
-M?'5'L.BVCR*;T$6741& E( +%+>ZZ=RK]"S]N*&/,_7'O0D U2_W@092K'JG
-MVRE]<=_07_71O<>OJTWWXP9\&S./!G@ "A 04_R1>'[F<XNW[++._#[!]9'X
-M8+;>WZ:&_DZ>ELWYQ7%@_C@ ^[&YY5*6TP%_OMJFU2/[Z3YFG_FD*O6B)$S!
-M!ZM;<D1_>KV:,(&@6_"WPP=_FI'P6P$+OS'H\.LFY!"F+O$O]"+_2G_5/_2Q
-M6W*]>]O0 &I]_^S/\53]O_3J8_63?*>&\>.\R#U(H=Q/$!W_Z0WR5_4P/W1_
-M$IO\_1O*CU.H_+$RR^_R/_?EO<S/O]'\.7,E>/.G]SF_XK\&D%(\/U\>D\OY
-M=/X%OITX^K>INGGT)_W'_KB1[%?5V7FS7^_/_=WYD,WM5_AK.+:/9$OY'O2X
-MS\%[^U6UN@GNZ\WB_KE?[F?RPO_6QFDOUZ,Z'27OZ_BA?LZPEE-'4#]66/U)
-M_?\YP%\0\<@T[Y[RCM0XNP/Q:IX;_%W_ <Z/*?SMC6;#DSB/4?G9'_+/DFM_
-M2P^;N_T(=ALN]S_&=/H[+=S#YIJ)ZKWWG[U]OS;L T3U@3^?6_^F[E>N2_M)
-MODI^IS?NC.;/KV5U6_G%'!Y_A;_('^)O>8,"J/E9_D0..#_EE\Z/NL< ]+GU
-M_/QR0#\B'U!NZ(?GP_T9_6)FJ+^EG^KO/F>::_TMV)Q]0;9HG^ROVF>-F[!%
-M^[)]'S]STU]F]H?BX_W%^'Y_H[3@'[DOR:7[&[FA^XY_L+EX7UU@WM?\\_'M
-MX:!_48FH7SOLWV<=\WCT*3P>,[WX!+2-/57;@/0 X=XG(PS=@$T+):;J6AG,
-MO9(*F &-&[FKT,9@*J,X4LXHZ(]@@7QOKK7YZV0DU_PGK+5V&AK'#?@0F:BM
-M^L9MA8-2W//D=+#+\:%-^_)GLAP.WL2MDU$XV&[A4-YM)QS% %EW 9 B1IL
-M4>B :)H> ZC,=/ U0**HU8![B!1XVNYM$#B5X .&4B@&FD#@&AJM]/ UP -V
-M,GASC90^(/I#$O@*?-?= 0&!B@%XEW# ]377$@4R >!.311H/^$/,'LJ_^!
-M FE?_+T\W4:EC4=AVJ>9S%Q]ZS92RINM#D@*O+!-^18#_R9G'?%D#8"BF<6)
-M MD7SD "X*RMO+7&\6M1,MA]L[C-WS"PD88+].003%( 6X Q@)VLZ@#O6@>Z
-M ^T \$!YH-@L*T#2V>]U#O!TI).%F3EP:?<.C ?:R380R3EI@CW0%Q@/),VI
-M4L)0@D#Q%D/PU[<JV0?2Z69Q*+%!X#TP'^@01 BJX=:!43J"(#[0("@VFP3B
-M4"XI&[&V#":0$UA* P=N D4,GL"Q&C10.,<I(,XQ AMG*@#5W#JP%!@+/ 7F
-MSG:"4316H$(P6) '#*>A<6Z!@\#YVVXMW_0(S*I9W%1S:1<MET#P)HBT:PH.
-M:8*![\"8X(^K&I@5<+@%T1Q[7#4E&_LL.5=*<^/,S_@Q3C9WFU/0R\55LUR(
-M!<D8?K<_GD"GS-;' \&1MM9W?1A'("--D<=84PM"V99VL3.<&T7'\G9T\[)%
-M!0,HQI75%EZ0DM6<Z; 5V#IL%T$[W3^PC)<*++") ;"!,"?57)[-"%CN$PBF
-MU;Z"0[2$X%[&GE85Q.PAM=B!I\&,TVEP*[AR(F- !ON!DD%;7)ZN,F@6)&-<
-M!G4MMI66H)D-5T8;] M.)4"#$3;18&W0<E$:_.AXVL(L>D$23C6PL786U**0
-M >9[!!.78/VF$[@.O W^FS2#H0'IH%^+#8@2;)]4\N9[V,%4("=0FJ 5Q GJ
-M!&^"J:\WX.H+%;@P PK"ZUJ!1$$[H$JPMA5OT]\=]L*#"[/QH!E@.SANZPXR
-M!G-\KX%Q7WF0_K9N&YB, JV!!$*:(#QM';@#Q ?>!(N"<I1EWVV&..<_ PY:
-M^\9S.$#]G&/0/<@8+-5M _&!0,'&FE=&S=+Q0FG9A*H")4*9A:@A<51/D1VD
-M" ,6[0J/DLFK0[0NXJ=@CE9>%R^ !;(B1HB4L1&&I$H3CY8L8 :JZ!6S@!&N
-M"!M%906(D0S@+" 1*! <"'1 39/)0!T 8' *\B2YI008I+@[%M/"KU"RL ?!
-M>CP6GB2KU<9 ZM5SV5F!+%)@OZ#2TU6*2'B/,!&&DF)/,8&[D/J(=G0E--1H
-M#"@$6T*G19A((L*Q !/2CL2$\ 0B1IG0XW0FM'CM3/0DE:QGS[=*(M#QRK89
-MI@H.+,).A8LP1XB-<!0J"C=>NY@L$\I+#_0&:A0F"E\#QA\:X::PBY2O,O/1
-M.&H<;+XHSNT!5=@/RM5EV_H?. 72"<?/&N8]H162<59PI@,]AA'@"3"T:>+1
-MUH( 0CR^'0L/KM8$I/O9_S*"?9DK3MJOJ<<&&,P(#:9Z$S\#(,GO\*<"7/Q9
-MY3 &FSVF@E3O-O,L1$Q!!OH?)0,Y &(*7!AH*/-QGRH>R+:/2RT-<D*?0!7.
-MS;QEV$*"4X?A4<(&(!.P]38)]#XWR6J,7AC8P]F- 0!H\\)S29B.T9 OQ,P%
-M#"$E7+U"7^8 0$A>*A9V #5XMCYQ8$>K#4$\V=;L"#X1*[CF5:@-4:+O0P-@
-M#,E+?!02X<6+J><X2D=L"KA5)$/N$;5",C(I/!2F#%4\'B6YQ<FK88%Y.@KA
-M"%V&*KU/!/>H1\@F. H-DEQ:VY#HCRX)^X,O$AU]@'Y)U:,AH4G*T822NJJ@
-M#'.&Y"."A3YK%!03 ##T#-=/J:"7H0*)GC(UI"E5#:TFO*,YX<N":9%<42HE
-MEI0/+Y.4@S=)AD M01XU?TA&0D/I7YKH>>1+BAZ!D!9)U".##ID)>R1^VA,]
-M#9>%4<.Q LJ.%2!J1KBF792&ABJA-9PA20U'!Q^C^("AD.L(9F";'@0,!L:
-MCV($LH@"Q-JP# 0S>4*="[LI-(K#A9!PVY3V42%=D#Y6SH$00#<D+D*J,%T$
-MB;)<29C<R@\M#Y-S*:ZXE@B%MB8LS,L/<,@]XAK"GV!'7\.K(00)LH7I4 $L
-M:XZ'R,/DH?)P><@\;!XZ#Y^'SD,LAE^E:1(,$K%05[P\8Q#ZQ^J05\@MB$C4
-MB6"'_2.:R^S0[")"LAT:ER1D2:784M%E<6B3NAC!"0,2A\-3BW1)VQ25,!Y"
-M#^^'^,/\H?X0>0A:@5CT*1AN,PY]EIRCHK>' A/1&=H."Y9QE38)94+&L']D
-M!:!D'P/?WY0OHJ'+R@/TS\Q-OI$VA/HA0W B>"!,9YHG#\2:E@21DA&)^&-=
-M$#&(>B$3Q08Q$L%!-&U]$.E1$Y &(I@(#\'$X!\(&UX MA.4A>QAB5.P\WAX
-MQC8>IA"Q6, **,(KC$V4)+9:)0%/3@J@!C>DH(+P"G^%M E3%E9/%\(KW!4J
-M2> &%['/1U!$K^#D*(V0,1830 [SCVODB"@",/\,PWPCE,.?E.)$^B%&M)R1
-M)&IAYI\PP!D13F CB29PDRP,]*S:"^W@LB5$U(G8!*@"X:[R!R %DZ+*@9_H
-M!(M8&T2HX'5 W_8PF*Y,$;93W@0!43A!<9(5 (E$R<11\!/*P"C!A%C$TB0R
-MLBJ(E$360^6O< _&6&\*2J(X+P,8KND]#"=^128 L\H(D3, <E!;\3& "&*
-M$O%U2X5/A"B$DXB.PI2\(3P+K<3T8!\PEAAV.$34$K,:C3/RA$W!+7,D*V*1
-M)*0#S(3QU@H!5U%&9 *A9D*)IQ)EHB&18\"8ZF,A3'PCOS&,0;=!O>9 O.-H
-M$]<5!(=4(IS /\1I $0,-J!#>:N@!F5+=X#F"VJH"2T709%?(=K*<F'^@0)H
-M 8P OH,: $OB":"ZZ2)F ?:)4XE^XC\QH$C50$[H/$8DI1'M3#5PBQAE,"@B
-M%'5/3*#1Q1CQHOB3\B<"%*<3D0IN@;<@;X 5HV0$1:R(1HFF&'0(-.8[4)!4
-MMK RK@[O'S[QB5@YXR@J%#^*-0#P"!: 5_B;*"A"% ^*SJN;8D!1I\@KY-IY
-MEWZ*$D4R!D71JH%4#"IF%%\3ES"GHA' HSA4' +L%$.*W8)O 1^#HWA2!$ZD
-M%+4ST*&@AN3$&5/9(FI0!0X2&J2I1#ZQIBA5K ($ :X> T6?XG$"J$C),/^X
-M%>&*1L6'XEPQJ3A3+%@Q%?>*4D78QD:QK?A6C %@%4>*6T7G55?QBJA2K+T0
-M-=X%1(TL8&7K!F O>.*4]I2*-$5NFDU1,=2SB2MV09J*=47.8F"CH7A4!"Q.
-M%'F%7$30(AFCC3A8#"TV@4:+V@*1HE91;\!5K")Z%>$&8$7'(G:#*E!6^'X@
-M<50=@(V*$QGC"F#5R"CJ$YU7Q$4Q8D_QLPA8I&0D%S.*>46+XDUPJ2A=="T*
-M%J.*SL7B(LHEMIA5)"DZ 3B*ST64"TH1MPA: 6S8"P!?\\1/ > +4P#K$(=A
-M%K=I00".8FDHH[A<K"Z2,4PN;X/)172QJ7A:]"O:%_F)&44W(A& HXA?C&T<
-M%F>+)44RQGQ1O'A;;"S6C]8Y(2H:Q??C(&%6.$@0$$V*F<7XHO-JP>A9_"].
-M)0H_0@!O08]HOVA:?"^F%IN+J\4 8VN1C %B%#&6?[8%W<7$(B6#PSA>=##J
-MJ\(?,HKP!UEQ)Y!BR3$^<=**68$C0)0A+&$#@"]R%(6,4P B8X=1M6BY0#(J
-M&4F,$<7I(FJQHLADG$HX&1,;*\8FXY 1R\A=1"S2%IU75\8B8XTQM_A@1%0E
-M-B2+/$:R1.'+*F6YB!D) >H&'B,CH_/*S0AG'!@M&5&,;49O01/@S;@ML#-"
-M&8&*_<438Y21DD%G[#,6&;&++$8](Y\QSMAE1#!^%^>,BL8ZHYBQP4AFU%?9
-M.& <,8XH#E'@7: CT_IE!9 I R=3(DF@@CBR0<NPNM!17*B@@(L,.6 04""&
-M$OY8,X@90CPA)4 F.#@\#\J)H$8?@*CQCU5JA-GD&MDLA9-LX1=@UXA*O%!,
-M)7Z-NT12XUDF+7-J](VD&E,"JT9L6#;IU5A!C#6"T58#M,9' ]Z(?7)L++0,
-MG$J(RL:7#3\0'?-M]+0$&WT RT1PHYC!IF:Y^-!Y$O]8YB9^S*_1W%C-$#:^
-M&XN-[<;DWO_O-5#Z*9Q0,N2-WD8? +"QWHANA)\43@I7'SKD@'( R_)OG"-P
-MR'@$3K+^(8( -8$@<"F".S!;IR5""9!Q*J&."362#/ .EHNUC&G XU@R**6%
-M' ]UE(R.HQ/MP*#.:@V<',F YB:5HR^1= "A$SG2 09.])(WA$^._-?$,XX<
-MMCB$*D=[7[QQ\&?W*Q!&]PI7;"[]TEJP#-4:F*-E)\(8E8U6DW6,J'%:HF*M
-M)IQ7;S;(P,")%/5V2XI@1K@:A9\?%M6*W=37\%]TEQ8A4C_%1>Y/Z^@#X#KN
-M[)@ 7T?[QH]B.J4%+-BM!,9-7(SS7(IFZ_C-Z#K"'2D7]HVPXVN*XT1N%#@F
-M&\4,MQFVX[YPL( NV1A*0#!\,!J^8^7 [QAWW$G,':6.]:.5 )HOZ.1]>K.I
-M8RI0"#2LHU'0N?!*?'F,2YX61P,Z3H*%./BN Z"HG"@9K;Y_B2@&P]0&0#I.
-M)>!R^Q/3P&)@(&![U /JUM8E#I'>X^AQN'9C4S<-%LP/2X)7R>J1XSAR;#OV
-M'4.#@HF_(]CQN1,#>*)('^6.I(WJH]<1\+B3.%(< ;2/U\?N(Z-"!F!]K#RZ
-M)!@5,P#AH\R1J0!:L_7-&_4NY\9E8OM1,)5"&%VE')N/B\<#@[VP\$AL7#=:
-M*<Q-IHVDB!3 3(-_G!<R'JM[,<<"I+FD@+!_+,[HS'Z-^L8-@LZA]OB54>=,
-M)]A3^ )!XE_F\^B\HG;!'E-]/<&2 +YNA9!Z%+<M'WV/[P778\KI]4C&B#W&
-M$HX& 10*I+H)]Y@!TSW"'X2/2D'@HW0!!_FNR[\)'X^/7R@9I ^(C*&.>9=L
-M 6 N*9/VB3O_GAS=#Y.'J&/V\?IX^4#_&A^##N6'[F/IC$F !42"^E]W$)R
-M-;R/Y,<HI'W#^YA^%#VN'\<-[<><6L!QX-@O$#;.'QM3(@3[(Q%2 ?GYV@[L
-M'W.-_<=C@O(Q =F$S#]N!W(/ ,=JRK?Q\*B'5#M:+E2.^T(F0@-R3P:!]/O]
-M_^P4$0@A9/\PQ<+MJ+:-J"1A,<<J02 2??! L\FP67@RF#E[76N0C&':F )4
-M 80 9IJ!P&$FUPCX8;,0'=H*=J[^F6\$>.)P2"XT[OB0 $-'">/Q-G.#)#O.
-M(9N0;L<(&Q_ )Q=^O'4\=QJ/H\BDX\HI7R-Z](Y1,A0F+05B%<<B--,X@&Y4
-M'M0Q0H050 L #\"-%#BP,;Q<K+TB03'AF'"-DB'.!B(+Z 8!$1BG\J!PB"AT
-M]T +_ .@!6$ !T ]RS_L*>1YHI4$B7"1-H&)3#EJ(@N/K4A/"RCR.\,I 4!.
-M)$Z1J4C%FL8OX!B0U+N\(GD#L<B^!BUR:0-IN$52,A)YW,)+('TPZ#CW,QVX
-M"X!;?2V8#B6#7^#5\G*-S7:'=@A0A(FA!_"<L= DS< SF(&$I.F 8*3#(F.,
-M<-I?@37((PJ@$N-7!*@Q)#V1 DD:8F(P;:46Q$CR8X0&\SW$3//1WF<Z$)/Q
-MM?@ [+G:($DRE07).QN0#$4A@X7T65K+0H,<2.3E 0AK_1I6)%#2(0GXL7,U
-MU7)LZB9GI SQHB"-?!A0(^U@?0=L9 ]!&]F-]$:^L\"1/#UQ)!O F% T$#W^
-M*S)+7@;V6-^A'8E2>$=6#-H?=H%Y9#VR-Z#(>>=E9?J(CQR%&?>NG+,"X*0Y
-M'H\KNYKQ@!I2$+ER;"L &VTRWYE28UKF4Z $8*+4! XB_)*1I KMWU2$C,0I
-M4@8+@QFVPH'&W#3'VR"84]@# )I]F6NRJ*.H>=OH)$, (K2C%=EQCM>:!-.U
-M3S)YQ<GRGF]R*F'%PCCUN(23I9(^S#),A'62+,V, 4H 8C$R '92!J"B @?2
-M%L@H2#_X@Y@"!("H8C*$)ZL$)0#R)"LM.FE@$[!MV)1<0"Q#9#HN!,"31&T4
-M?B(3/LEJRF&F%?,^,:[L*6AR61D)8[A$,BG-$QQ4)MUF4B(RAE'2.9B4Y$@^
-MQ@9]]JRG9%02,YE)F4Z:)#4S3+VLY%F+E$6;; VX)]-FB3R$UPER+2B6]$R:
-M&T&3!H5E([JMW0:=; UZU"Z49P,> .0B$:+S\ %L*#\X%R<R1L:I1;E?DZ_!
-M*+N2$ :PY%/O)VFBA#^B*&>3I9HY'D;R./F>-$E^</QVTLF29'72.7.=S$YN
-M)P$)&TKOI!L /+E[) B\ -237$KQ9'H2L!&?5#K^!5]=]<E;QWUR.Y&?K)$1
-M,OB3(@?CRA+G("):<6P$S7*4EHL=)5&2>1=#'$4FA'0M58DH@P9,XX8YT [<
-M##88_"@7P=(AH)!G8!RD:"X.%HC@PFM*9,2GA%/:%I IIZLQ@ O@$TE#U*UL
-M(LL G<@B9=T' I$8, $(_@Y<E1@A@%^1#Y"JG$CX%;EZ[,F_S!XM&4EX!$7-
-M\5 YH+1DY('+@U5\80YXN40+[Y--9:$E4RFLU+N0*DT'@[S 'GN2S<6>S#@M
-M*\%XJLGE'GDI.2DKT,R<#9Z49(S\5J_21_"KA ,$*S&5["M-):>2.3"@T4T:
-M)^=SN4E9F?(+26FYV'&UG"8(TTIS97F/!;"=X@%0;%J#LDI@I<BA6(D^(%;F
-M6=03L\KX#ET@0I0&2 .D*]\E:CSDI+Q25K"U207VRJB5T!E_FL)27:F<O%Q,
-M!40^=SQ]Y:5R6!FNY%<:6E(GE 5DI<;28^FOE+< +"V6V$I'WL'2-2D"\ '<
-M*TLU>,B/8Q&B'&6I)%EV+-DL8<"+ X+RBO6?W&>Q.3*05AP\Y51"3TG^*DK.
-M\9"2<RVE9!.2*4D3B%#^)J"2+HFF6I22*GF29.J]2_YKM<$EI?LLDQ>B9#>V
-M!D][ "! I6=A U&H/!I,(1*5=:_(P"PQ)?"H5#SHC225^B9L5-RR9@FN3.2)
-M*X.2S %/)4!R+#FJ[%2:*@6 XJU6I5Z!5=ER454:RA9!>\A2C;:R]>*KI%MR
-M+.V6'LODEX\ 6>EALY^]*\UG54D1P(WR=<:GS%=Z*_>5=4ND7^12%<>IZ<X,
-M+)4#!DN(9<*R20FQ;%B& UN7#K")Y;L$6.;QV]6,+$.7=TN]"\@2)R8E^UQN
-M+*LI)4M*TLGRJ('PXE/&+,D > >:Y>WR<2FZQ%G*+ $1.\L$0/_0L<'MD-61
-MFX26YZ;G)%&2/:FRA%C2*RL.',H>95+!?.:][%U^*PLM4 B<9? K9&F^!%VB
-M+PD.H\M=8.721<E?6UDJO^B5*8"7)3,R+3FB>$8N+5@#K@0X!')E9U6.!$4%
-M:6B3O,B%Y4L-7=FZE$-&"&E]"S3GW,]OYPCV:V]D)TA_PLG_).%KW.%>;$[J
-M*+6714OVY((2:;F17$IV)$,&6;VGY822>VFAS%PR]2X.6,LL&OW2Y82Y')LY
-M+JLIZ4M/R^[2&G;#1!_D,(67:Q21I,H2DJ>Y5)_M+)N1_4L9XAD @,DZZU3J
-MK#Q.!4Q*Y1!R5W.TU$ANS)26 R>F90T*) FU- (L)\=J*S079LZ05#F?VEQ2
-M*-<*'LJM99.R:RF?S H8^B28?[DI105S^H;!)$K.*1,D69D2T]6Q<SE!&RQ,
-M*D./S\JI93+K).FT><Z\L9PS7H(K90F@!)"_')GU858&K8NS0?]L.T6:V4YM
-M 21_(\018IL25/F(7.NQU1YPUQI*YME \F=G8_]I ]IM4LR!ORD#;""$\SP
-M9-PS&,M\HSGE#?&E=$0EZV:9I8?TI".J)JE6@V0*V X,(LE=S53B0ZG;\K#Q
-M*961[;P1Y51RD*F9Z9]](6P8!X855A? )3D':F6R:DB0E2\S9//QKD4/)&.H
-M,=-F#4QM9A-R"M'-G$K8'-\EZL?FXV"AY>C-W%L*%998)(%N%YOCVP5@@%C$
-M6.*6QC,_9MPRB::K[&I1+1TT<P"GS2'S0>,"4&0R,O<W=C829"13O'(V2'.I
-MM?R2F4SQ5JZQ!<?2.:0M-%4 HLR')F3&<,54ROFA,F.94XE5IC6S.?/*3&7*
-M,F4(I8=:9F#CEHG2; WH,@M1!<E>YM'@E[D="&;>\5R.Q$PEES$S&6F\FV)6
-M**64)TEGIGH"#/%96&%E*6\&U4S8)#931-FAS$@^!Y.6#DJ'@NE@G\77^F+^
-M-/^95LF<X3)!*WFK46L5'MF0G,QE(AG+>-+4/$I:,0F02\L3IE/R-S$0%*2T
-M,*N66DWM0 R"JWG4Q$,FKR8&H<;GX!NRC_4++&LR**&:)LP'9=,RP%#5Y! N
-M,Q59,$J4I ,B;1A2N&JES]B'H2#W(5I*+@ _-!29,6$9ZB:5(S<3(MC._*>%
-M,S.;V\P-1CESW BQ3&<V(=>9A 27HSG3G?GL:2/$,T$K'@_'I,>#3,9B^2]$
-M0SH5[D5S4SGQ$-FRV4QJ$PX,Y4:R)(J2K$G),&W,;A S+9M5Y!J2$,F#\UKJ
-M)'F2:TIMP29SL!#<[%LR!WXZK[8W6Q/ -3(%Z%%$ 0 T X&1C=(/_C"R4:R=
-M9U9I> ;2L\F!22E@6W./K(>=1 6BX.$\>$N6-[)6-I)5B/(9HM)BZ1U$AS&
-MF"PL8)7(88V)*E%%*B/EF%066Z/^YD>)+( ><@O8)O8I0B8EBS9A_Z7'JIQP
-M)4H",87XD*Y(P3DU-"@%#V=/":7L4'3$2(+<0*5H2V0([0EED8&H(" '2$<@
-M!70R0+C/ (D 5.B/J13 .%<&,D[JA4TH3C*!&0I,9?X+;:#^PHVS#9#CI''.
-M))8NXPI]2@9ED&19NT#]EZ '.,XWP(P34JCS&IOPO! ?:!/1WDM R2#T<IN<
-M@J"<1$XI)_7B<M&% BFT!DQ48 3U !"N99"K&'/JP;)>4@X1"XFEV)1#HB%Q
-8FY81&X3S0IV3=,A,,"*D#\@ 8@"PUU,"
-
-end
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.10 b/usr.sbin/xntpd/patches/patch.10
deleted file mode 100644
index 1771b5f..0000000
--- a/usr.sbin/xntpd/patches/patch.10
+++ /dev/null
@@ -1,1925 +0,0 @@
-diff -c COPYRIGHT:1.1.1.16 COPYRIGHT:1.21
-*** COPYRIGHT:1.1.1.16 Wed Feb 2 18:09:17 1994
---- COPYRIGHT Wed Feb 2 18:09:18 1994
-***************
-*** 1,6 ****
- /******************************************************************************
- * *
-! * Copyright (c) David L. Mills 1992, 1993, 1994 *
- * *
- * Permission to use, copy, modify, and distribute this software and its *
- * documentation for any purpose and without fee is hereby granted, provided *
---- 1,6 ----
- /******************************************************************************
- * *
-! * Copyright (c) David L. Mills 1992, 1993, 1994 *
- * *
- * Permission to use, copy, modify, and distribute this software and its *
- * documentation for any purpose and without fee is hereby granted, provided *
-***************
-*** 55,58 ****
- * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
- * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
- * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
-! */
---- 55,58 ----
- * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
- * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
- * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
-! */
-diff -c doc/xntpd.8:1.1.1.12 doc/xntpd.8:3.24
-*** doc/xntpd.8:1.1.1.12 Wed Feb 2 18:10:44 1994
---- doc/xntpd.8 Wed Feb 2 18:10:45 1994
-***************
-*** 446,451 ****
---- 446,467 ----
- .Ip notrust 10
- Treat these hosts normally in other respects, but never use them as
- synchronization sources.
-+ .Ip limited 10
-+ These hosts are subject to limitation of number of clients from the
-+ same net. Net in this context refers to the IP notion of net (class A,
-+ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts
-+ that have shown up at the server and that have been active during the
-+ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from
-+ other clients from the same net are rejected. Only time request
-+ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R",
-+ and \*(L"broadcast\*(R" packets are not subject to client limitation
-+ and therefore are not contributing to client count. History of clients
-+ is kept using the monitoring capability of
-+ .IR xntpd .
-+ Thus, monitoring is active as long as there is a restriction entry
-+ with the \*(L"limited\*(R" flag. The default value for
-+ \*(L"client_limit\*(R" is 3. The default value for
-+ \*(L"client_limit_period\*(R" is 3600 seconds.
- .Ip ntpport 10
- This is actually a match algorithm modifier, rather than a restriction
- flag. Its presence causes the restriction entry to be matched only if
-***************
-*** 469,474 ****
---- 485,505 ----
- considered an alternative to the standard NTP authentication facility. Source
- address based restrictions are easily circumvented by a determined cracker.
- .PP
-+ .B clientlimit
-+ .I limit
-+ .PP
-+ Sets \*(L"client_limit\*(R" to \*(L"limit\*(R", allows configuration
-+ of client limitation policy. This variable defines the number of
-+ clients from the same network that are allowed to use the server.
-+ .PP
-+ .B clientperiod
-+ .I period
-+ .PP
-+ Sets \*(L"client_limit_period\*(R", allows configuration of client
-+ limitation policy. This variable specifies the number
-+ of seconds after which a client is considered inactive and thus no
-+ longer is counted for client limit restriction.
-+ .PP
- .B trap
- .I host_address
- [
-diff -c doc/xntpdc.8:1.1.1.2 doc/xntpdc.8:3.4
-*** doc/xntpdc.8:1.1.1.2 Wed Feb 2 18:10:46 1994
---- doc/xntpdc.8 Wed Feb 2 18:10:47 1994
-***************
-*** 539,544 ****
---- 539,555 ----
- Ignore all NTP mode 7 packets which attempt to modify the state of the
- server (i.e. run time reconfiguration). Queries which return information
- are permitted.
-+ .Ip notrap 10
-+ Decline to provide mode 6 control message trap service to matching
-+ hosts. The trap service is a subsystem of the mode 6 control message
-+ protocol which is intended for use by remote event logging programs.
-+ .Ip lowpriotrap 10
-+ Declare traps set by matching hosts to be low priority. The number
-+ of traps a server can maintain is limited (the current limit is 3).
-+ Traps are usually assigned on a first come, first served basis, with
-+ later trap requestors being denied service. This flag modifies the
-+ assignment algorithm by allowing low priority traps to be overridden
-+ by later requests for normal priority traps.
- .Ip noserve 10
- Ignore NTP packets whose mode is other than 7. In effect, time service is
- denied, though queries may still be permitted.
-***************
-*** 549,554 ****
---- 560,582 ----
- .Ip notrust 10
- Treat these hosts normally in other respects, but never use them as
- synchronization sources.
-+ .Ip limited 10
-+ These hosts are subject to limitation of number of clients from the
-+ same net. Net in this context refers to the IP notion of net (class A,
-+ class B, class C, etc.). Only the first \*(L"client_limit\*(R" hosts
-+ that have shown up at the server and that have been active during the
-+ last \*(L"client_limit_period\*(R" seconds are accepted. Requests from
-+ other clients from the same net are rejected. Only time request
-+ packets are taken into account. \*(L"Private\*(R", \*(L"control\*(R",
-+ and \*(L"broadcast\*(R" packets are not subject to client limitation
-+ and therefore are not contributing to client count. History of clients
-+ is kept using the monitoring capability of
-+ .IR xntpd.
-+ Thus, monitoring is active as long as there is a restriction entry
-+ with the \*(L"limited\*(R" flag. The default value for
-+ \*(L"client_limit\*(R" is 3. The default value for
-+ \*(L"client_limit_period\*(R" is 3600 seconds. Currently both
-+ variables are not runtime configurable.
- .Ip ntpport 10
- This is actually a match algorithm modifier, rather than a restriction
- flag. Its presence causes the restriction entry to be matched only if
-diff -c hints/linux:1.1.1.1 hints/linux:1.2
-*** hints/linux:1.1.1.1 Wed Feb 2 18:10:58 1994
---- hints/linux Wed Feb 2 18:10:59 1994
-***************
-*** 1,29 ****
-
-! Requirements: kernel 0.99.14 or newer, libc 4.5 or newer
- ------------
-
-! With this configuration, xntp should build an run right out of the
-! box (see generic hints for how-to), with one big limitation: tickadj doesn't
-! work yet. This is especially painful since PCs are usually equipped with
-! untuned, badly-drifting quartzes, values up to 200 ppm being no exception.
-! Because the loop filter algorithms are limited to compensating no more than
-! 100 ppm, currently only one workaround is possible:
-! Compile your own kernel and adjust linux/include/linux/timex.h,
-! line 67 (in pl14):
-!
-! #define CLOCK_TICK_RATE 1193180 /* Underlying HZ */
-!
-! Since this is surely not true for your hardware, adjust the hundreds
-! to match your quartz. Adding 100 compensates for a drift of -83.8 ppm
-! (1/CLOCK_TICK_RATE). The number gets rounded to the nearest 100 so don't
-! bother to tune any finer.
-!
-! Fixing tickadj is already in my work queue, so the previous comment should be
-! obsolete RSN. If you really need to run xntp on any earlier versions of the
-! kernel or libc, or have any other question not covered in the READMEs / hint
-! files (sorry, necessary comment in the Linux community ;-) feel free to ask
-! me (duwe@informatik.uni-erlangen.de)
-!
-! xntp3.3b of 1993/12/06 : remember to change #define ntp_adjtime adjtimex to
-! __adjtimex in the Linux section (line 316). This is hopefully done if you
-! (don't :-) see this paragraph in the xntp3.x distribution.
---- 1,9 ----
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer
- ------------
-
-! With this configuration, xntp should build an run right out of the box
-! (see generic hints for how-to). If you really need to run xntp on any earlier
-! versions of the kernel or libc, or have any other question not covered in the
-! READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
-! free to ask me (duwe@informatik.uni-erlangen.de)
-diff -c include/ntp.h:1.1.1.17 include/ntp.h:3.23
-*** include/ntp.h:1.1.1.17 Wed Feb 2 18:11:18 1994
---- include/ntp.h Wed Feb 2 18:11:18 1994
-***************
-*** 612,617 ****
---- 612,620 ----
- struct mon_data *hash_prev; /* previous structure in hash list */
- struct mon_data *mru_next; /* next structure in MRU list */
- struct mon_data *mru_prev; /* previous structure in MRU list */
-+ struct mon_data *fifo_next; /* next structure in FIFO list */
-+ struct mon_data *fifo_prev; /* previous structure in FIFO list */
-+ U_LONG lastdrop; /* last time dropped due to RES_LIMIT*/
- U_LONG lasttime; /* last time data updated */
- U_LONG firsttime; /* time structure initialized */
- U_LONG count; /* count we have seen */
-***************
-*** 621,627 ****
- u_char version; /* version of incoming packet */
- };
-
-!
- /*
- * Structure used for restrictlist entries
- */
---- 624,635 ----
- u_char version; /* version of incoming packet */
- };
-
-! /*
-! * Values used with mon_enabled to indicate reason for enabling monitoring
-! */
-! #define MON_OFF 0x00 /* no monitoring */
-! #define MON_ON 0x01 /* monitoring explicitly enabled */
-! #define MON_RES 0x02 /* implicit monitoring for RES_LIMITED */
- /*
- * Structure used for restrictlist entries
- */
-***************
-*** 645,654 ****
- #define RES_NOPEER 0x20 /* don't allocate memory resources */
- #define RES_NOTRAP 0x40 /* don't allow him to set traps */
- #define RES_LPTRAP 0x80 /* traps set by him are low priority */
-
- #define RES_ALLFLAGS \
- (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\
-! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP)
-
- /*
- * Match flags
---- 653,663 ----
- #define RES_NOPEER 0x20 /* don't allocate memory resources */
- #define RES_NOTRAP 0x40 /* don't allow him to set traps */
- #define RES_LPTRAP 0x80 /* traps set by him are low priority */
-+ #define RES_LIMITED 0x100 /* limit per net number of clients */
-
- #define RES_ALLFLAGS \
- (RES_IGNORE|RES_DONTSERVE|RES_DONTTRUST|RES_NOQUERY\
-! |RES_NOMODIFY|RES_NOPEER|RES_NOTRAP|RES_LPTRAP|RES_LIMITED)
-
- /*
- * Match flags
-diff -c include/ntp_request.h:1.1.1.7 include/ntp_request.h:3.7
-*** include/ntp_request.h:1.1.1.7 Wed Feb 2 18:11:27 1994
---- include/ntp_request.h Wed Feb 2 18:11:28 1994
-***************
-*** 429,438 ****
---- 429,456 ----
- U_LONG processed; /* packets processed */
- U_LONG badauth; /* packets dropped because of authorization */
- U_LONG wanderhold;
-+ U_LONG limitrejected; /* rejected because of client limitation */
- };
-
-
- /*
-+ * System stats - old version
-+ */
-+ struct old_info_sys_stats {
-+ U_LONG timeup; /* time we have been up and running */
-+ U_LONG timereset; /* time since these were last cleared */
-+ U_LONG badstratum; /* packets claiming an invalid stratum */
-+ U_LONG oldversionpkt; /* old version packets received */
-+ U_LONG newversionpkt; /* new version packets received */
-+ U_LONG unknownversion; /* don't know version packets */
-+ U_LONG badlength; /* packets with bad length */
-+ U_LONG processed; /* packets processed */
-+ U_LONG badauth; /* packets dropped because of authorization */
-+ U_LONG wanderhold;
-+ };
-+
-+
-+ /*
- * Peer memory statistics. Collected in the peer module.
- */
- struct info_mem_stats {
-***************
-*** 546,551 ****
---- 564,570 ----
- struct info_monitor {
- U_LONG lasttime; /* last packet from this host */
- U_LONG firsttime; /* first time we received a packet */
-+ U_LONG lastdrop; /* last time we rejected a packet due to client limitation policy */
- U_LONG count; /* count of packets received */
- U_LONG addr; /* host address */
- u_short port; /* port number of last reception */
-***************
-*** 553,558 ****
---- 572,589 ----
- u_char version; /* version number of last packet */
- };
-
-+ /*
-+ * Structure used for returning monitor data (old format
-+ */
-+ struct old_info_monitor {
-+ U_LONG lasttime; /* last packet from this host */
-+ U_LONG firsttime; /* first time we received a packet */
-+ U_LONG count; /* count of packets received */
-+ U_LONG addr; /* host address */
-+ u_short port; /* port number of last reception */
-+ u_char mode; /* mode of last packet */
-+ u_char version; /* version number of last packet */
-+ };
-
- /*
- * Structure used for passing indication of flags to clear
-diff -c include/ntp_stdlib.h:1.1.1.7 include/ntp_stdlib.h:1.2
-*** include/ntp_stdlib.h:1.1.1.7 Wed Feb 2 18:11:31 1994
---- include/ntp_stdlib.h Wed Feb 2 18:11:31 1994
-***************
-*** 79,84 ****
---- 79,85 ----
- extern char * mfptoa P((U_LONG, U_LONG, int));
- extern char * mfptoms P((U_LONG, U_LONG, int));
- extern char * modetoa P((int));
-+ extern U_LONG netof P((U_LONG));
- extern char * numtoa P((U_LONG));
- extern char * numtohost P((U_LONG));
- extern int octtoint P((const char *, U_LONG *));
-diff -c include/ntpd.h:1.1.1.7 include/ntpd.h:1.6
-*** include/ntpd.h:1.1.1.7 Wed Feb 2 18:11:38 1994
---- include/ntpd.h Wed Feb 2 18:11:38 1994
-***************
-*** 93,100 ****
-
- /* ntp_monitor.c */
- extern void init_mon P((void));
-! extern void mon_start P((void));
-! extern void mon_stop P((void));
- extern void monitor P((struct recvbuf *));
-
- /* ntp_peer.c */
---- 93,100 ----
-
- /* ntp_monitor.c */
- extern void init_mon P((void));
-! extern void mon_start P((int));
-! extern void mon_stop P((int));
- extern void monitor P((struct recvbuf *));
-
- /* ntp_peer.c */
-diff -c lib/Makefile.tmpl:1.1.1.14 lib/Makefile.tmpl:3.25
-*** lib/Makefile.tmpl:1.1.1.14 Wed Feb 2 18:12:06 1994
---- lib/Makefile.tmpl Wed Feb 2 18:12:07 1994
-***************
-*** 31,37 ****
- uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \
- md5.c a_md5encrypt.c a_md5decrypt.c \
- a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
-! findconfig.c
-
- OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \
- authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \
---- 31,37 ----
- uglydate.c uinttoa.c utvtoa.c machines.c clocktypes.c \
- md5.c a_md5encrypt.c a_md5decrypt.c \
- a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
-! findconfig.c netof.c
-
- OBJS= atoint.o atolfp.o atouint.o auth12crypt.o authdecrypt.o authdes.o \
- authencrypt.o authkeys.o authparity.o authreadkeys.o authusekey.o \
-***************
-*** 44,50 ****
- uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \
- md5.o a_md5encrypt.o a_md5decrypt.o \
- a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \
-! findconfig.o
-
- $(LIBNAME).a: $(OBJS)
- ar rv $@ $?
---- 44,50 ----
- uglydate.o uinttoa.o utvtoa.o machines.o clocktypes.o \
- md5.o a_md5encrypt.o a_md5decrypt.o \
- a_md512crypt.o decodenetnum.o systime.o msyslog.o syssignal.o \
-! findconfig.o netof.o
-
- $(LIBNAME).a: $(OBJS)
- ar rv $@ $?
-diff -c /dev/null lib/netof.c:3.1
-*** /dev/null Wed Feb 2 18:13:07 1994
---- lib/netof.c Wed Feb 2 18:13:07 1994
-***************
-*** 0 ****
---- 1,25 ----
-+ /*
-+ * netof - return the net address part of an ip address
-+ * (zero out host part)
-+ */
-+ #include <stdio.h>
-+
-+ #include "ntp_fp.h"
-+ #include "ntp_stdlib.h"
-+
-+ U_LONG
-+ netof(num)
-+ U_LONG num;
-+ {
-+ register U_LONG netnum;
-+
-+ netnum = num;
-+
-+ if(IN_CLASSC(netnum))
-+ netnum &= IN_CLASSC_NET;
-+ else if (IN_CLASSB(netnum))
-+ netnum &= IN_CLASSB_NET;
-+ else /* treat als other like class A */
-+ netnum &= IN_CLASSA_NET;
-+ return netnum;
-+ }
-diff -c /dev/null parse/README.new_clocks:3.2
-*** /dev/null Wed Feb 2 18:14:30 1994
---- parse/README.new_clocks Wed Feb 2 18:14:30 1994
-***************
-*** 0 ****
---- 1,203 ----
-+ Here is an attempt to scetch out what you need to do in order to
-+ add another clock to the parse driver:
-+
-+ Prerequsites:
-+ - Does the system you want the clock connect to have
-+ termio.h or termios.h ? (You need that for the parse driver)
-+
-+ What to do:
-+
-+ Make a conversion module (parse/clk_*.c)
-+
-+ - What ist the time code format ?
-+ - find year, month, day, hour, minute, second, status (synchronised or
-+ not), possibly time zone information (you need to give the offset to UTC)
-+ You will have to convert the data from a string into a struct clocktime:
-+ struct clocktime /* clock time broken up from time code */
-+ {
-+ LONG day;
-+ LONG month;
-+ LONG year;
-+ LONG hour;
-+ LONG minute;
-+ LONG second;
-+ LONG usecond;
-+ LONG utcoffset; /* in seconds */
-+ LONG flags; /* current clock status */
-+ };
-+
-+ Conversion is usually simple and straight forward. For the flags following
-+ values can be OR'ed together:
-+
-+ PARSEB_ANNOUNCE switch time zone warning (informational only)
-+ PARSEB_POWERUP no synchronisation - clock confused (must set then)
-+ PARSEB_NOSYNC timecode currently not confirmed (must set then)
-+ usually on reception error when the is still a
-+ chance the the generated time is still ok.
-+
-+ PARSEB_DST DST in effect (informational only)
-+ PARSEB_UTC timecode contains UTC time (informational only)
-+ PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent)
-+ PARSEB_ALTERNATE backup transmitter (informational only)
-+ PARSEB_POSITION geographic position available (informational only)
-+ PARSEB_LEAPSECOND actual leap second (this time code is the leap
-+ second - informational only)
-+
-+ These are feature flags denoting items that are supported by the clock:
-+ PARSEB_S_LEAP supports LEAP - might set PARSEB_LEAP
-+ PARSEB_S_ANTENNA supports ANTENNA - might set PARSEB_ALTERNATE
-+ PARSEB_S_PPS supports PPS time stamping
-+ PARSEB_S_POSITION supports position information (GPS)
-+
-+ Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
-+ them for examples. The basic structure is:
-+
-+ struct clockformat <yourclock>_format = {
-+ lots of field for you to fill out (see below)
-+ };
-+
-+ static cvt_<yourclock>()
-+ ...
-+ {
-+ if (<I do not recognize my time code>) {
-+ return CVT_NONE;
-+ } else {
-+ if (<conversion into clockformat is ok>) {
-+ <set all necessary flags>;
-+ return CVT_OK;
-+ } else {
-+ return CVT_FAIL|CVT_BADFMT;
-+ }
-+ }
-+
-+ The struct clockformat is the interface to the rest of the parse
-+ driver - it holds all information necessary for finding the
-+ clock message and doing the appropriate time stamping.
-+
-+ struct clockformat
-+ {
-+ unsigned LONG (*convert)();
-+ /* conversion routine - your routine - cvt_<yourclock> */
-+ void (*syncevt)();
-+ /* routine for handling RS232 sync events (time stamps) - usually sync_simple */
-+ unsigned LONG (*syncpps)();
-+ /* PPS input routine - usually pps_simple */
-+ unsigned LONG (*synth)();
-+ /* time code synthesizer - usually not used - (LONG (*)())0 */
-+ void *data;
-+ /* local parameters - any parameters/data/configuration info your conversion
-+ routine might need */
-+ char *name;
-+ /* clock format name - Name of the time code */
-+ unsigned short length;
-+ /* maximum length of data packet for your clock format */
-+ unsigned LONG flags;
-+ /* information for the parser what to look for */
-+ struct timeval timeout;
-+ /* buffer restart after timeout (us) - some clocks preceede new data by
-+ a longer period of silence - unsually not used */
-+ unsigned char startsym;
-+ /* start symbol - character at the beginning of the clock data */
-+ unsigned char endsym;
-+ /* end symbol - character at the end of the clock data */
-+ unsigned char syncsym;
-+ /* sync symbol - character that is "on time" - where the time stamp should be taken */
-+ };
-+
-+ The flags:
-+ F_START use startsym to find the beginning of the clock data
-+ F_END use endsym to find the end of the clock data
-+ SYNC_TIMEOUT packet restart after timeout in timeout field
-+ SYNC_START packet start is sync event (time stamp at paket start)
-+ SYNC_END packet end is sync event (time stamp at paket end)
-+ SYNC_CHAR special character (syncsym) is sync event
-+ SYNC_ONE PPS synchronize on 'ONE' transition
-+ SYNC_ZERO PPS synchronize on 'ZERO' transition
-+ SYNC_SYNTHESIZE generate intermediate time stamps (very special case!)
-+ CVT_FIXEDONLY convert only in fixed configuration - (data format not
-+ suitable for auto-configuration)
-+
-+
-+ The above should have given you some hints on how to build a clk_*.c
-+ file with the time code conversion. See the examples and pick a clock
-+ closest to yours and tweak the code to match your clock.
-+
-+ In order to make your clk_*.c file usable a referenc to the clockformat
-+ structure must be put into parse_conf.c.
-+
-+
-+
-+ TTY setup and initialisation/configuration will be done in
-+ xntpd/refclock_parse.c
-+
-+ - Find out the exact tty settings for your clock (baud rate, parity,
-+ stop bits, character size, ...) and note them in terms of
-+ termio*.h c_cflag macros.
-+
-+ - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
-+ (allocates a new "IP" address - see comments)
-+ (see all the other clocks for example)
-+ struct clockinfo
-+ {
-+ U_LONG cl_flags; /* operation flags (io modes) */
-+ PARSE_F_NOPOLLONLY always do async io - read whenever input comes
-+ PARSE_F_POLLONLY never do async io - only read when expecting data
-+ PARSE_F_PPSPPS use loopfilter PPS code (CIOGETEV)
-+ PARSE_F_PPSONSECOND PPS pulses are on second
-+ usually flags stay 0 as they are used only for special setups
-+
-+ void (*cl_poll)(); /* active poll routine */
-+ The routine to call when the clock needs data sent to it in order to
-+ get a time code from the clock (e.g. Trimble clock)
-+ int (*cl_init)(); /* active poll init routine */
-+ The routine to call for very special initializations.
-+ void (*cl_end)(); /* active poll end routine */
-+ The routine to call to undo any special initialisation (free memory/timers)
-+ void *cl_data; /* local data area for "poll" mechanism */
-+ local data for polling routines
-+ u_fp cl_rootdelay; /* rootdelay */
-+ NTP rottdelay estimate (usually 0)
-+ U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional par
-+ time (fraction) by which the RS232 time code is delayed from the actual time.
-+ t */
-+ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional
-+ time (fraction) by which the PPS time stamp is delayed (usually 0)
-+ part */
-+ char *cl_id; /* ID code (usually "DCF") */
-+ Refclock id - (max 4 chars)
-+ char *cl_description; /* device name */
-+ Name of this device.
-+ char *cl_format; /* fixed format */
-+ If the data format cann not ne detected automatically this is the name
-+ as in clk_*.c clockformat.
-+ u_char cl_type; /* clock type (ntp control) */
-+ Type if clock as in clock status word (ntp control messages) - usually 0
-+ U_LONG cl_maxunsync; /* time to trust oscillator after loosing synch
-+ */
-+ seconds a clock can be trusted after loosing synchronisation.
-+
-+ U_LONG cl_cflag; /* terminal io flags */
-+ U_LONG cl_iflag; /* terminal io flags */
-+ U_LONG cl_oflag; /* terminal io flags */
-+ U_LONG cl_lflag; /* terminal io flags */
-+ termio*.h tty modes.
-+ } clockinfo[] = {
-+ ...,<other clocks>,...
-+ { < your parameters> },
-+ };
-+
-+
-+ Well, this is very sketchy, i know. But I hope it helps a little bit.
-+ The best way is to look which clock comes closet to your and tweak that
-+ code.
-+ Two sorts of clocks are used with parse. Clocks that automatically sent
-+ thier time code (once a second) do not nee entries in the poll routines because
-+ they sent the data all the time. The second sort are the clocks that need a
-+ command sent to then in order to reply with a time code (like the Trimble
-+ clock).
-+
-+ For questions: kardel@informatik.uni-erlangen.de. Please include
-+ an exact description on how your clock works. (initialisation,
-+ TTY modes, strings to be sent to it, responses received from the clock).
-+
-+ Frank Kardel
-diff -c /dev/null parse/README.parse_clocks:3.1
-*** /dev/null Wed Feb 2 18:14:33 1994
---- parse/README.parse_clocks Wed Feb 2 18:14:33 1994
-***************
-*** 0 ****
---- 1,263 ----
-+ The parse driver currently supports several clock with different
-+ query mechanisms. In order for you to find a sample that might be
-+ similar to a clock you might want to integrate into parse i'll sum
-+ up the major features of the clocks (this information is distributed
-+ in the parse/clk_*.c and xntpd/refclock_parse.c files).
-+
-+ ---
-+ Meinberg: 127.127.8. 0- 3 (PZF535TCXO)
-+ 127.127.8. 4- 7 (PZF535OCXO)
-+ 127.127.8. 8-11 (DCFUA31)
-+ 127.127.8.28-31 (GPS166)
-+ Meinberg: start=<STX>, end=<ETX>, sync on start
-+ pattern="\2D: . . ;T: ;U: . . ; \3"
-+ pattern="\2 . . ; ; : : ; \3"
-+ pattern="\2 . . ; ; : : ; : ; ; . . "
-+
-+ Meinberg is a german manufacturer of time code receivers. Those clocks
-+ have a pretty common output format in the stock version. In order to
-+ support NTP Meinberg was so kind to produce some special versions of
-+ the firmware for the use with NTP. So, if you are going to use a
-+ Meinberg clock please ask whether there is a special Uni Erlangen
-+ version.
-+
-+ General characteristics:
-+ Meinberg clocks primarily output pulse per second and a describing
-+ ASCII string. This string can be produced in two modes. either upon
-+ the reception of a question mark or every second. NTP uses the latter
-+ mechanism. The DCF77 variants have a pretty good relationship between
-+ RS232 time code and the PPS signal while the GPS receiver has no fixed
-+ timeing between the datagram and the pulse (you need to use PPS with
-+ GPS!) on DCF77 you might get away without the PPS signal.
-+
-+ The preferred tty setting for Meinberg is:
-+ CFLAG (B9600|CS7|PARENB|CREAD|HUPCL)
-+ IFLAG (IGNBRK|IGNPAR|ISTRIP)
-+ OFLAG 0
-+ LFLAG 0
-+
-+ The clock is run at datagram once per second.
-+ Stock dataformat is:
-+
-+ <STX>D:<dd>.<mm>.<yy>;T:<w>;U:<hh>:<mm>:<ss>;<S><F><D><A><ETX>
-+ pos: 0 00 00 0 00 0 11 111 1 111 12 2 22 2 22 2 2 2 3 3 3
-+ 1 23 45 6 78 9 01 234 5 678 90 1 23 4 56 7 8 9 0 1 2
-+
-+ <STX> = '\002' ASCII start of text
-+ <ETX> = '\003' ASCII end of text
-+ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
-+ <w> = day of week (sunday= 0)
-+ <hh>,<mm>,<ss> = hour, minute, second
-+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
-+ '#' if not PZF sychronisation available else ' ' for PZF 535
-+ <F> = '*' if time comes from internal quartz else ' '
-+ <D> = 'S' if daylight saving time is active else ' '
-+ <A> = '!' during the hour preceeding an daylight saving time
-+ start/end change
-+
-+ For the university of Erlangen a special format was implemented to support
-+ LEAP announcement and anouncement of alternate antenna.
-+
-+ Version for UNI-ERLANGEN Software is: PZFUERL V4.6 (Meinberg)
-+
-+ The use of this software release (or higher) is *ABSOLUTELY*
-+ recommended (ask for PZFUERL version as some minor HW fixes have
-+ been introduced) due to the LEAP second support and UTC indication.
-+ The standard timecode does not indicate when the timecode is in
-+ UTC (by front panel configuration) thus we have no chance to find
-+ the correct utc offset. For the standard format do not ever use
-+ UTC display as this is not detectable in the time code !!!
-+
-+ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <U><S><F><D><A><L><R><ETX>
-+ pos: 0 00 0 00 0 00 11 1 11 11 1 11 2 22 22 2 2 2 2 2 3 3 3
-+ 1 23 4 56 7 89 01 2 34 56 7 89 0 12 34 5 6 7 8 9 0 1 2
-+ <STX> = '\002' ASCII start of text
-+ <ETX> = '\003' ASCII end of text
-+ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
-+ <w> = day of week (sunday= 0)
-+ <hh>,<mm>,<ss> = hour, minute, second
-+ <U> = 'U' UTC time display
-+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
-+ '#' if not PZF sychronisation available else ' ' for PZF 535
-+ <F> = '*' if time comes from internal quartz else ' '
-+ <D> = 'S' if daylight saving time is active else ' '
-+ <A> = '!' during the hour preceeding an daylight saving time
-+ start/end change
-+ <L> = 'A' LEAP second announcement
-+ <R> = 'R' alternate antenna
-+
-+ Meinberg GPS166 receiver
-+
-+ You must get the Uni-Erlangen firmware for the GPS receiver support
-+ to work to full satisfaction !
-+
-+ <STX><dd>.<mm>.<yy>; <w>; <hh>:<mm>:<ss>; <+/-><00:00>; <U><S><F><D><A><L><R><L>; <position...><ETX>
-+ *
-+ 000000000111111111122222222223333333333444444444455555555556666666
-+ 123456789012345678901234567890123456789012345678901234567890123456
-+ \x0209.07.93; 5; 08:48:26; +00:00; ; 49.5736N 11.0280E 373m\x03
-+ *
-+
-+ <STX> = '\002' ASCII start of text
-+ <ETX> = '\003' ASCII end of text
-+ <dd>,<mm>,<yy> = day, month, year(2 digits!!)
-+ <w> = day of week (sunday= 0)
-+ <hh>,<mm>,<ss> = hour, minute, second
-+ <+/->,<00:00> = offset to UTC
-+ <S> = '#' if never synced since powerup else ' ' for DCF U/A 31
-+ '#' if not PZF sychronisation available else ' ' for PZF 535
-+ <U> = 'U' UTC time display
-+ <F> = '*' if time comes from internal quartz else ' '
-+ <D> = 'S' if daylight saving time is active else ' '
-+ <A> = '!' during the hour preceeding an daylight saving time
-+ start/end change
-+ <L> = 'A' LEAP second announcement
-+ <R> = 'R' alternate antenna (reminiscent of PZF535) usually ' '
-+ <L> = 'L' on 23:59:60
-+
-+
-+ For the Meinberg parse look into clock_meinberg.c
-+
-+ ---
-+ RAWDCF: 127.127.8.20-23 (Conrad receiver module - delay 210ms)
-+ 127.127.8.24-27 (FAU receiver - delay 258ms)
-+ RAWDCF: end=TIMEOUT>1.5s, sync each char (any char),generate psuedo time
-+ codes, fixed format
-+
-+ direct DCF77 code input
-+ In Europe it is relatively easy/cheap the receive the german time code
-+ transmitter DCF77. The simplest version to process its signal is to
-+ feed the 100/200ms pulse of the demodulated AM signal via a level
-+ converter to an RS232 port at 50Baud. parse/clk_rawdcf.c holds all
-+ necessary decoding logic for the time code which is transmitted each
-+ minute for one minute. A bit of the time code is sent once a second.
-+
-+ The preferred tty setting is:
-+ CFLAG (B50|CS8|CREAD|CLOCAL)
-+ IFLAG 0
-+ OFLAG 0
-+ LFLAG 0
-+
-+ DCF77 raw time code
-+
-+ From "Zur Zeit", Physikalisch-Technische Bundesanstalt (PTB), Braunschweig
-+ und Berlin, Maerz 1989
-+
-+ Timecode transmission:
-+ AM:
-+ time marks are send every second except for the second before the
-+ next minute mark
-+ time marks consist of a reduction of transmitter power to 25%
-+ of the nominal level
-+ the falling edge is the time indication (on time)
-+ time marks of a 100ms duration constitute a logical 0
-+ time marks of a 200ms duration constitute a logical 1
-+ FM:
-+ see the spec. (basically a (non-)inverted psuedo random phase shift)
-+
-+ Encoding:
-+ Second Contents
-+ 0 - 10 AM: free, FM: 0
-+ 11 - 14 free
-+ 15 R - alternate antenna
-+ 16 A1 - expect zone change (1 hour before)
-+ 17 - 18 Z1,Z2 - time zone
-+ 0 0 illegal
-+ 0 1 MEZ (MET)
-+ 1 0 MESZ (MED, MET DST)
-+ 1 1 illegal
-+ 19 A2 - expect leap insertion/deletion (1 hour before)
-+ 20 S - start of time code (1)
-+ 21 - 24 M1 - BCD (lsb first) Minutes
-+ 25 - 27 M10 - BCD (lsb first) 10 Minutes
-+ 28 P1 - Minute Parity (even)
-+ 29 - 32 H1 - BCD (lsb first) Hours
-+ 33 - 34 H10 - BCD (lsb first) 10 Hours
-+ 35 P2 - Hour Parity (even)
-+ 36 - 39 D1 - BCD (lsb first) Days
-+ 40 - 41 D10 - BCD (lsb first) 10 Days
-+ 42 - 44 DW - BCD (lsb first) day of week (1: Monday -> 7: Sunday)
-+ 45 - 49 MO - BCD (lsb first) Month
-+ 50 MO0 - 10 Months
-+ 51 - 53 Y1 - BCD (lsb first) Years
-+ 54 - 57 Y10 - BCD (lsb first) 10 Years
-+ 58 P3 - Date Parity (even)
-+ 59 - usually missing (minute indication), except for leap insertion
-+
-+ ---
-+ Schmid clock: 127.127.8.16-19
-+ Schmid clock: needs poll, binary input, end='\xFC', sync start
-+
-+ The Schmid clock is a DCF77 receiver that sends a binary
-+ time code at the reception of a flag byte. The contents
-+ if the flag byte determined the time code format. The
-+ binary time code is delimited by the byte 0xFC.
-+
-+ TTY setup is:
-+ CFLAG (B1200|CS8|CREAD|CLOCAL)
-+ IFLAG 0
-+ OFLAG 0
-+ LFLAG 0
-+
-+ The command to Schmid's DCF77 clock is a single byte; each bit
-+ allows the user to select some part of the time string, as follows (the
-+ output for the lsb is sent first).
-+
-+ Bit 0: time in MEZ, 4 bytes *binary, not BCD*; hh.mm.ss.tenths
-+ Bit 1: date 3 bytes *binary, not BCD: dd.mm.yy
-+ Bit 2: week day, 1 byte (unused here)
-+ Bit 3: time zone, 1 byte, 0=MET, 1=MEST. (unused here)
-+ Bit 4: clock status, 1 byte, 0=time invalid,
-+ 1=time from crystal backup,
-+ 3=time from DCF77
-+ Bit 5: transmitter status, 1 byte,
-+ bit 0: backup antenna
-+ bit 1: time zone change within 1h
-+ bit 3,2: TZ 01=MEST, 10=MET
-+ bit 4: leap second will be
-+ added within one hour
-+ bits 5-7: Zero
-+ Bit 6: time in backup mode, units of 5 minutes (unused here)
-+
-+
-+ ---
-+ Trimble SV6: 127.127.8.32-35
-+ Trimble SV6: needs poll, ascii timecode, start='>', end='<',
-+ query='>QTM<', eol='<'
-+
-+ Trimble SV6 is a GPS receiver with PPS output. It needs to be polled.
-+ It also need a special tty mode setup (EOL='<').
-+
-+ TTY setup is:
-+ CFLAG (B4800|CS8|CREAD)
-+ IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
-+ OFLAG (OPOST|ONLCR)
-+ LFLAG (ICANON|ECHOK)
-+
-+ Special flags are:
-+ PARSE_F_PPSPPS - use CIOGETEV for PPS time stamping
-+ PARSE_F_PPSONSECOND - the time code is not related to
-+ the PPS pulse (so use the time code
-+ only for the second epoch)
-+
-+ Timecode
-+ 0000000000111111111122222222223333333 / char
-+ 0123456789012345678901234567890123456 \ posn
-+ >RTMhhmmssdddDDMMYYYYoodnnvrrrrr;*xx< Actual
-+ ----33445566600112222BB7__-_____--99- Parse
-+ >RTM 1 ;* <", Check
-+
-+ ---
-+ ELV DCF7000: 127.127.8.12-15
-+ ELV DCF7000: end='\r', pattern=" - - - - - - - \r"
-+
-+ The ELV DCF7000 is a cheap DCF77 receiver sending each second
-+ a time code (though not very precise!) delimited by '`r'
-+
-+ Timecode
-+ YY-MM-DD-HH-MM-SS-FF\r
-+
-+ FF&0x1 - DST
-+ FF&0x2 - DST switch warning
-+ FF&0x4 - unsynchronised
-+
-diff -c parse/parsesolaris.c:1.1.1.5 parse/parsesolaris.c:3.11
-*** parse/parsesolaris.c:1.1.1.5 Wed Feb 2 18:14:49 1994
---- parse/parsesolaris.c Wed Feb 2 18:14:49 1994
-***************
-*** 65,71 ****
- {
- "parse", /* module name */
- &parseinfo, /* module information */
-! 0, /* not clean yet */
- /* lock ptr */
- };
-
---- 65,71 ----
- {
- "parse", /* module name */
- &parseinfo, /* module information */
-! D_NEW, /* not clean yet */
- /* lock ptr */
- };
-
-diff -c scripts/support/bin/monl:1.1.1.1 scripts/support/bin/monl:1.2
-*** scripts/support/bin/monl:1.1.1.1 Wed Feb 2 18:16:01 1994
---- scripts/support/bin/monl Wed Feb 2 18:16:01 1994
-***************
-*** 143,149 ****
- {
- chop;
- split;
-! ($host, $count, $mode, $version, $lasttime, $firsttime) = (@_[$[, $[+2 .. $[+6]);
-
- $Seen{$host, $mode} = 1;
-
---- 143,150 ----
- {
- chop;
- split;
-! ($host, $count, $mode, $version, $lasttime, $firsttime) =
-! (@_[$[, $[+2 .. $[+4, $#_-1,$#_]);
-
- $Seen{$host, $mode} = 1;
-
-diff -c util/tickadj.c:1.1.1.16 util/tickadj.c:3.17
-*** util/tickadj.c:1.1.1.16 Wed Feb 2 18:16:23 1994
---- util/tickadj.c Wed Feb 2 18:16:23 1994
-***************
-*** 1,4 ****
-! /* tickadj.c,v 3.1 1993/07/06 01:11:05 jbj Exp
- * tickadj - read, and possibly modify, the kernel `tick' and
- * `tickadj' variables, as well as `dosynctodr'. Note that
- * this operates on the running kernel only. I'd like to be
---- 1,4 ----
-! /*
- * tickadj - read, and possibly modify, the kernel `tick' and
- * `tickadj' variables, as well as `dosynctodr'. Note that
- * this operates on the running kernel only. I'd like to be
-***************
-*** 6,11 ****
---- 6,46 ----
- * mastered this yet.
- */
- #include <stdio.h>
-+
-+ #ifdef SYS_LINUX
-+ #include <sys/timex.h>
-+
-+ struct timex txc;
-+
-+ int
-+ main(int argc, char ** argv)
-+ {
-+ if (argc > 2)
-+ {
-+ fprintf(stderr, "Usage: %s [tick_value]\n", argv[0]);
-+ exit(-1);
-+ }
-+ else if (argc == 2)
-+ {
-+ if ( (txc.tick = atoi(argv[1])) < 1 )
-+ {
-+ fprintf(stderr, "Silly value for tick: %s\n", argv[1]);
-+ exit(-1);
-+ }
-+ txc.mode = ADJ_TICK;
-+ }
-+ else
-+ txc.mode = 0;
-+
-+ if (__adjtimex(&txc) < 0)
-+ perror("adjtimex");
-+ else
-+ printf("tick = %d\n", txc.tick);
-+
-+ return(0);
-+ }
-+ #else /* not Linux... kmem tweaking: */
-+
- #include <sys/types.h>
- #include <sys/file.h>
- #include <sys/stat.h>
-***************
-*** 513,515 ****
---- 548,551 ----
- exit(1);
- }
- }
-+ #endif /* not Linux */
-diff -c xntpd/ntp_config.c:1.1.1.19 xntpd/ntp_config.c:3.24
-*** xntpd/ntp_config.c:1.1.1.19 Wed Feb 2 18:16:36 1994
---- xntpd/ntp_config.c Wed Feb 2 18:16:37 1994
-***************
-*** 58,63 ****
---- 58,64 ----
- * statsdir /var/NTP/
- * filegen peerstats [ file peerstats ] [ type day ] [ link ]
- * resolver /path/progname
-+ * netlimit integer
- *
- * And then some. See the manual page.
- */
-***************
-*** 94,99 ****
---- 95,102 ----
- #define CONFIG_PIDFILE 25
- #define CONFIG_LOGFILE 26
- #define CONFIG_SETVAR 27
-+ #define CONFIG_CLIENTLIMIT 28
-+ #define CONFIG_CLIENTPERIOD 29
-
- #define CONF_MOD_VERSION 1
- #define CONF_MOD_KEY 2
-***************
-*** 114,119 ****
---- 117,123 ----
- #define CONF_RES_NOTRAP 8
- #define CONF_RES_LPTRAP 9
- #define CONF_RES_NTPPORT 10
-+ #define CONF_RES_LIMITED 11
-
- #define CONF_TRAP_PORT 1
- #define CONF_TRAP_INTERFACE 2
-***************
-*** 179,184 ****
---- 183,190 ----
- { "pidfile", CONFIG_PIDFILE },
- { "logfile", CONFIG_LOGFILE },
- { "setvar", CONFIG_SETVAR },
-+ { "clientlimit", CONFIG_CLIENTLIMIT },
-+ { "clientperiod", CONFIG_CLIENTPERIOD },
- { "", CONFIG_UNKNOWN }
- };
-
-***************
-*** 217,222 ****
---- 223,229 ----
- { "notrap", CONF_RES_NOTRAP },
- { "lowpriotrap", CONF_RES_LPTRAP },
- { "ntpport", CONF_RES_NTPPORT },
-+ { "limited", CONF_RES_LIMITED },
- { "", CONFIG_UNKNOWN }
- };
-
-***************
-*** 817,825 ****
- errflg = 0;
- if (ntokens >= 2) {
- if (STREQ(tokens[1], "yes"))
-! mon_start();
- else if (STREQ(tokens[1], "no"))
-! mon_stop();
- else
- errflg++;
- } else {
---- 824,832 ----
- errflg = 0;
- if (ntokens >= 2) {
- if (STREQ(tokens[1], "yes"))
-! mon_start(MON_ON);
- else if (STREQ(tokens[1], "no"))
-! mon_stop(MON_ON);
- else
- errflg++;
- } else {
-***************
-*** 965,970 ****
---- 972,981 ----
- peerkey |= RESM_NTPONLY;
- break;
-
-+ case CONF_RES_LIMITED:
-+ peerversion |= RES_LIMITED;
-+ break;
-+
- case CONFIG_UNKNOWN:
- errflg++;
- break;
-***************
-*** 1413,1418 ****
---- 1424,1483 ----
- set_sys_var(tokens[1], strlen(tokens[1])+1, RW |
- ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0));
- }
-+ break;
-+
-+ case CONFIG_CLIENTLIMIT:
-+ if (ntokens < 2)
-+ {
-+ syslog(LOG_ERR,
-+ "no value for clientlimit command - line ignored");
-+ }
-+ else
-+ {
-+ U_LONG i;
-+ if (!atouint(tokens[1], &i) || !i)
-+ {
-+ syslog(LOG_ERR,
-+ "illegal value for clientlimit command - line ignored");
-+ }
-+ else
-+ {
-+ extern U_LONG client_limit;
-+ char bp[80];
-+
-+ sprintf(bp, "client_limit=%d", i);
-+ set_sys_var(bp, strlen(bp)+1, RO);
-+
-+ client_limit = i;
-+ }
-+ }
-+ break;
-+
-+ case CONFIG_CLIENTPERIOD:
-+ if (ntokens < 2)
-+ {
-+ syslog(LOG_ERR,
-+ "no value for clientperiod command - line ignored");
-+ }
-+ else
-+ {
-+ U_LONG i;
-+ if (!atouint(tokens[1], &i) || i < 64)
-+ {
-+ syslog(LOG_ERR,
-+ "illegal value for clientperiod command - line ignored");
-+ }
-+ else
-+ {
-+ extern U_LONG client_limit_period;
-+ char bp[80];
-+
-+ sprintf(bp, "client_limit_period=%d", i);
-+ set_sys_var(bp, strlen(bp)+1, RO);
-+
-+ client_limit_period = i;
-+ }
-+ }
- break;
- }
- }
-diff -c xntpd/ntp_monitor.c:1.1.1.10 xntpd/ntp_monitor.c:3.9
-*** xntpd/ntp_monitor.c:1.1.1.10 Wed Feb 2 18:16:48 1994
---- xntpd/ntp_monitor.c Wed Feb 2 18:16:48 1994
-***************
-*** 58,64 ****
- static struct mon_data *mon_hash; /* Pointer to array of hash buckets */
- static int *mon_hash_count; /* Point to hash count stats keeper */
- struct mon_data mon_mru_list;
-!
- /*
- * List of free structures structures, and counters of free and total
- * structures. The free structures are linked with the hash_next field.
---- 58,64 ----
- static struct mon_data *mon_hash; /* Pointer to array of hash buckets */
- static int *mon_hash_count; /* Point to hash count stats keeper */
- struct mon_data mon_mru_list;
-! struct mon_data mon_fifo_list;
- /*
- * List of free structures structures, and counters of free and total
- * structures. The free structures are linked with the hash_next field.
-***************
-*** 93,99 ****
- * Don't do much of anything here. We don't allocate memory
- * until someone explicitly starts us.
- */
-! mon_enabled = 0;
- mon_have_memory = 0;
-
- mon_free_mem = 0;
---- 93,99 ----
- * Don't do much of anything here. We don't allocate memory
- * until someone explicitly starts us.
- */
-! mon_enabled = MON_OFF;
- mon_have_memory = 0;
-
- mon_free_mem = 0;
-***************
-*** 103,108 ****
---- 103,109 ----
- mon_hash = 0;
- mon_hash_count = 0;
- memset((char *)&mon_mru_list, 0, sizeof mon_mru_list);
-+ memset((char *)&mon_fifo_list, 0, sizeof mon_fifo_list);
- }
-
-
-***************
-*** 110,122 ****
- * mon_start - start up the monitoring software
- */
- void
-! mon_start()
- {
- register struct mon_data *md;
- register int i;
-
-! if (mon_enabled)
- return;
-
- if (!mon_have_memory) {
- mon_hash = (struct mon_data *)
---- 111,128 ----
- * mon_start - start up the monitoring software
- */
- void
-! mon_start(mode)
-! int mode;
- {
- register struct mon_data *md;
- register int i;
-
-! if (mon_enabled != MON_OFF) {
-! mon_enabled |= mode;
- return;
-+ }
-+ if (mode == MON_OFF)
-+ return; /* Ooops.. */
-
- if (!mon_have_memory) {
- mon_hash = (struct mon_data *)
-***************
-*** 142,148 ****
- mon_mru_list.mru_next = &mon_mru_list;
- mon_mru_list.mru_prev = &mon_mru_list;
-
-! mon_enabled = 1;
- }
-
-
---- 148,157 ----
- mon_mru_list.mru_next = &mon_mru_list;
- mon_mru_list.mru_prev = &mon_mru_list;
-
-! mon_fifo_list.fifo_next = &mon_fifo_list;
-! mon_fifo_list.fifo_prev = &mon_fifo_list;
-!
-! mon_enabled = mode;
- }
-
-
-***************
-*** 150,161 ****
- * mon_stop - stop the monitoring software
- */
- void
-! mon_stop()
- {
- register struct mon_data *md;
- register int i;
-
-! if (!mon_enabled)
- return;
-
- /*
---- 159,177 ----
- * mon_stop - stop the monitoring software
- */
- void
-! mon_stop(mode)
-! int mode;
- {
- register struct mon_data *md;
- register int i;
-
-! if (mon_enabled == MON_OFF)
-! return;
-! if ((mon_enabled & mode) == 0 || mode == MON_OFF)
-! return;
-!
-! mon_enabled &= ~mode;
-! if (mon_enabled != MON_OFF)
- return;
-
- /*
-***************
-*** 176,182 ****
- mon_mru_list.mru_next = &mon_mru_list;
- mon_mru_list.mru_prev = &mon_mru_list;
-
-! mon_enabled = 0;
- }
-
-
---- 192,199 ----
- mon_mru_list.mru_next = &mon_mru_list;
- mon_mru_list.mru_prev = &mon_mru_list;
-
-! mon_fifo_list.fifo_next = &mon_fifo_list;
-! mon_fifo_list.fifo_prev = &mon_fifo_list;
- }
-
-
-***************
-*** 194,200 ****
- register int mode;
- register struct mon_data *mdhash;
-
-! if (!mon_enabled)
- return;
-
- pkt = &rbufp->recv_pkt;
---- 211,217 ----
- register int mode;
- register struct mon_data *mdhash;
-
-! if (mon_enabled == MON_OFF)
- return;
-
- pkt = &rbufp->recv_pkt;
-***************
-*** 220,225 ****
---- 237,243 ----
- md->mru_prev = &mon_mru_list;
- mon_mru_list.mru_next->mru_prev = md;
- mon_mru_list.mru_next = md;
-+
- return;
- }
- md = md->hash_next;
-***************
-*** 240,245 ****
---- 258,269 ----
- md->hash_next->hash_prev = md->hash_prev;
- md->hash_prev->hash_next = md->hash_next;
- *(mon_hash_count + MON_HASH(md->rmtadr)) -= 1;
-+ /*
-+ * Get it from FIFO list
-+ */
-+ md->fifo_prev->fifo_next = md->fifo_next;
-+ md->fifo_next->fifo_prev = md->fifo_prev;
-+
- } else {
- if (mon_free_mem == 0)
- mon_getmoremem();
-***************
-*** 252,257 ****
---- 276,282 ----
- * Got one, initialize it
- */
- md->lasttime = md->firsttime = current_time;
-+ md->lastdrop = 0;
- md->count = 1;
- md->rmtadr = netnum;
- md->rmtport = NSRCPORT(&rbufp->recv_srcadr);
-***************
-*** 260,266 ****
-
- /*
- * Shuffle him into the hash table, inserting him at the
-! * end. Also put him on top of the MRU list.
- */
- mdhash = mon_hash + MON_HASH(netnum);
- md->hash_next = mdhash;
---- 285,292 ----
-
- /*
- * Shuffle him into the hash table, inserting him at the
-! * end. Also put him on top of the MRU list
-! * and at bottom of FIFO list
- */
- mdhash = mon_hash + MON_HASH(netnum);
- md->hash_next = mdhash;
-***************
-*** 273,278 ****
---- 299,309 ----
- md->mru_prev = &mon_mru_list;
- mon_mru_list.mru_next->mru_prev = md;
- mon_mru_list.mru_next = md;
-+
-+ md->fifo_prev = mon_fifo_list.fifo_prev;
-+ md->fifo_next = &mon_fifo_list;
-+ mon_fifo_list.fifo_prev->fifo_next = md;
-+ mon_fifo_list.fifo_prev = md;
- }
-
-
-diff -c xntpd/ntp_proto.c:1.1.1.19 xntpd/ntp_proto.c:3.21
-*** xntpd/ntp_proto.c:1.1.1.19 Wed Feb 2 18:16:51 1994
---- xntpd/ntp_proto.c Wed Feb 2 18:16:52 1994
-***************
-*** 49,54 ****
---- 49,55 ----
- U_LONG sys_processed; /* packets processed */
- U_LONG sys_badauth; /* packets dropped because of authorization */
- U_LONG sys_wanderhold; /* sys_peer held to prevent wandering */
-+ U_LONG sys_limitrejected; /* pkts rejected due toclient count per net */
-
- /*
- * Imported from ntp_timer.c
-***************
-*** 373,378 ****
---- 374,394 ----
- return;
-
- /*
-+ * See if we only accept limited number of clients
-+ * from the net this guy is from.
-+ * Note: the flag is determined dynamically within restrictions()
-+ */
-+ if (restrict & RES_LIMITED) {
-+ extern U_LONG client_limit;
-+
-+ sys_limitrejected++;
-+ syslog(LOG_NOTICE,
-+ "rejected mode %d request from %s - per net client limit (%d) exceeded",
-+ PKT_MODE(pkt->li_vn_mode),
-+ ntoa(&rbufp->recv_srcadr), client_limit);
-+ return;
-+ }
-+ /*
- * Dump anything with a putrid stratum. These will most likely
- * come from someone trying to poll us with ntpdc.
- */
-***************
-*** 2165,2168 ****
---- 2181,2185 ----
- sys_badauth = 0;
- sys_wanderhold = 0;
- sys_stattime = current_time;
-+ sys_limitrejected = 0;
- }
-diff -c xntpd/ntp_request.c:1.1.1.14 xntpd/ntp_request.c:3.15
-*** xntpd/ntp_request.c:1.1.1.14 Wed Feb 2 18:16:55 1994
---- xntpd/ntp_request.c Wed Feb 2 18:16:55 1994
-***************
-*** 916,921 ****
---- 916,922 ----
- extern U_LONG sys_processed;
- extern U_LONG sys_badauth;
- extern U_LONG sys_wanderhold;
-+ extern U_LONG sys_limitrejected;
-
- ss = (struct info_sys_stats *)prepare_pkt(srcadr, inter, inpkt,
- sizeof(struct info_sys_stats));
-***************
-*** 930,936 ****
- ss->processed = htonl(sys_processed);
- ss->badauth = htonl(sys_badauth);
- ss->wanderhold = htonl(sys_wanderhold);
-!
- (void) more_pkt();
- flush_pkt();
- }
---- 931,937 ----
- ss->processed = htonl(sys_processed);
- ss->badauth = htonl(sys_badauth);
- ss->wanderhold = htonl(sys_wanderhold);
-! ss->limitrejected = htonl(sys_limitrejected);
- (void) more_pkt();
- flush_pkt();
- }
-***************
-*** 1311,1317 ****
- struct interface *inter;
- struct req_pkt *inpkt;
- {
-! mon_start();
- req_ack(srcadr, inter, inpkt, INFO_OKAY);
- }
-
---- 1312,1318 ----
- struct interface *inter;
- struct req_pkt *inpkt;
- {
-! mon_start(MON_ON);
- req_ack(srcadr, inter, inpkt, INFO_OKAY);
- }
-
-***************
-*** 1325,1331 ****
- struct interface *inter;
- struct req_pkt *inpkt;
- {
-! mon_stop();
- req_ack(srcadr, inter, inpkt, INFO_OKAY);
- }
-
---- 1326,1332 ----
- struct interface *inter;
- struct req_pkt *inpkt;
- {
-! mon_stop(MON_ON);
- req_ack(srcadr, inter, inpkt, INFO_OKAY);
- }
-
-***************
-*** 1497,1502 ****
---- 1498,1507 ----
- md = md->mru_next) {
- im->lasttime = htonl(current_time - md->lasttime);
- im->firsttime = htonl(current_time - md->firsttime);
-+ if (md->lastdrop)
-+ im->lastdrop = htonl(current_time - md->lastdrop);
-+ else
-+ im->lastdrop = 0;
- im->count = htonl(md->count);
- im->addr = md->rmtadr;
- im->port = md->rmtport;
-diff -c xntpd/ntp_restrict.c:1.1.1.10 xntpd/ntp_restrict.c:3.10
-*** xntpd/ntp_restrict.c:1.1.1.10 Wed Feb 2 18:16:57 1994
---- xntpd/ntp_restrict.c Wed Feb 2 18:16:57 1994
-***************
-*** 1,4 ****
-! /* ntp_restrict.c,v 3.1 1993/07/06 01:11:28 jbj Exp
- * ntp_restrict.c - find out what restrictions this host is running under
- */
- #include <stdio.h>
---- 1,4 ----
-! /*
- * ntp_restrict.c - find out what restrictions this host is running under
- */
- #include <stdio.h>
-***************
-*** 60,65 ****
---- 60,80 ----
- U_LONG res_timereset;
-
- /*
-+ * Parameters of the RES_LIMITED restriction option.
-+ * client_limit is the number of hosts allowed per source net
-+ * client_limit_period is the number of seconds after which an entry
-+ * is no longer considered for client limit determination
-+ */
-+ U_LONG client_limit;
-+ U_LONG client_limit_period;
-+ /*
-+ * count number of restriction entries referring to RES_LIMITED
-+ * controls activation/deactivation of monitoring
-+ * (with respect ro RES_LIMITED control)
-+ */
-+ U_LONG res_limited_refcnt;
-+
-+ /*
- * Our initial allocation of list entries.
- */
- static struct restrictlist resinit[INITRESLIST];
-***************
-*** 70,81 ****
---- 85,102 ----
- extern U_LONG current_time;
-
- /*
-+ * debug flag
-+ */
-+ extern int debug;
-+
-+ /*
- * init_restrict - initialize the restriction data structures
- */
- void
- init_restrict()
- {
- register int i;
-+ char bp[80];
-
- /*
- * Zero the list and put all but one on the free list
-***************
-*** 108,113 ****
---- 129,146 ----
- res_found = 0;
- res_not_found = 0;
- res_timereset = 0;
-+
-+ /*
-+ * set default values for RES_LIMIT functionality
-+ */
-+ client_limit = 3;
-+ client_limit_period = 3600;
-+ res_limited_refcnt = 0;
-+
-+ sprintf(bp, "client_limit=%d", client_limit);
-+ set_sys_var(bp, strlen(bp)+1, RO);
-+ sprintf(bp, "client_limit_period=%d", client_limit_period);
-+ set_sys_var(bp, strlen(bp)+1, RO);
- }
-
-
-***************
-*** 150,155 ****
---- 183,302 ----
- else
- res_found++;
-
-+ /*
-+ * The following implements limiting the number of clients
-+ * accepted from a given network. The notion of "same network"
-+ * is determined by the mask and addr fields of the restrict
-+ * list entry. The monitor mechanism has to be enabled for
-+ * collecting info on current clients.
-+ *
-+ * The policy is as follows:
-+ * - take the list of clients recorded
-+ * from the given "network" seen within the last
-+ * client_limit_period seconds
-+ * - if there are at most client_limit entries:
-+ * --> access allowed
-+ * - otherwise sort by time first seen
-+ * - current client among the first client_limit seen
-+ * hosts?
-+ * if yes: access allowed
-+ * else: eccess denied
-+ */
-+ if (match->flags & RES_LIMITED) {
-+ int lcnt;
-+ struct mon_data *md, *this_client;
-+ extern int mon_enabled;
-+ extern struct mon_data mon_fifo_list, mon_mru_list;
-+
-+ #ifdef DEBUG
-+ if (debug > 2)
-+ printf("limited clients check: %d clients, period %d seconds, net is 0x%X\n",
-+ client_limit, client_limit_period,
-+ netof(hostaddr));
-+ #endif /*DEBUG*/
-+ if (mon_enabled == MON_OFF) {
-+ #ifdef DEBUG
-+ if (debug > 4)
-+ printf("no limit - monitoring is off\n");
-+ #endif
-+ return (int)(match->flags & ~RES_LIMITED);
-+ }
-+
-+ /*
-+ * How nice, MRU list provides our current client as the
-+ * first entry in the list.
-+ * Monitoring was verified to be active above, thus we
-+ * know an entry for our client must exist, or some
-+ * brain dead set the memory limit for mon entries to ZERO!!!
-+ */
-+ this_client = mon_mru_list.mru_next;
-+
-+ for (md = mon_fifo_list.fifo_next,lcnt = 0;
-+ md != &mon_fifo_list;
-+ md = md->fifo_next) {
-+ if ((current_time - md->lasttime)
-+ > client_limit_period) {
-+ #ifdef DEBUG
-+ if (debug > 5)
-+ printf("checking: %s: ignore: too old: %d\n",
-+ numtoa(md->rmtadr),
-+ current_time - md->lasttime);
-+ #endif
-+ continue;
-+ }
-+ if (md->mode == MODE_BROADCAST ||
-+ md->mode == MODE_CONTROL ||
-+ md->mode == MODE_PRIVATE) {
-+ #ifdef DEBUG
-+ if (debug > 5)
-+ printf("checking: %s: ignore mode %d\n",
-+ numtoa(md->rmtadr),
-+ md->mode);
-+ #endif
-+ continue;
-+ }
-+ if (netof(md->rmtadr) !=
-+ netof(hostaddr)) {
-+ #ifdef DEBUG
-+ if (debug > 5)
-+ printf("checking: %s: different net 0x%X\n",
-+ numtoa(md->rmtadr),
-+ netof(md->rmtadr));
-+ #endif
-+ continue;
-+ }
-+ lcnt++;
-+ if (lcnt > client_limit ||
-+ md->rmtadr == hostaddr) {
-+ #ifdef DEBUG
-+ if (debug > 5)
-+ printf("considering %s: found host\n",
-+ numtoa(md->rmtadr));
-+ #endif
-+ break;
-+ }
-+ #ifdef DEBUG
-+ else {
-+ if (debug > 5)
-+ printf("considering %s: same net\n",
-+ numtoa(md->rmtadr));
-+ }
-+ #endif
-+
-+ }
-+ #ifdef DEBUG
-+ if (debug > 4)
-+ printf("this one is rank %d in list, limit is %d: %s\n",
-+ lcnt, client_limit,
-+ (lcnt <= client_limit) ? "ALLOW" : "REJECT");
-+ #endif
-+ if (lcnt <= client_limit) {
-+ this_client->lastdrop = 0;
-+ return (int)(match->flags & ~RES_LIMITED);
-+ } else {
-+ this_client->lastdrop = current_time;
-+ }
-+ }
- return (int)match->flags;
- }
-
-***************
-*** 257,262 ****
---- 404,413 ----
- rlprev->next = rl;
- restrictcount++;
- }
-+ if ((rl->flags ^ (u_short)flags) & RES_LIMITED) {
-+ res_limited_refcnt++;
-+ mon_start(MON_RES); /* ensure data gets collected */
-+ }
- rl->flags |= (u_short)flags;
- break;
-
-***************
-*** 265,272 ****
- * Remove some bits from the flags. If we didn't
- * find this one, just return.
- */
-! if (rl != 0)
- rl->flags &= (u_short)~flags;
- break;
-
- case RESTRICT_REMOVE:
---- 416,429 ----
- * Remove some bits from the flags. If we didn't
- * find this one, just return.
- */
-! if (rl != 0) {
-! if ((rl->flags ^ (u_short)flags) & RES_LIMITED) {
-! res_limited_refcnt--;
-! if (res_limited_refcnt == 0)
-! mon_stop(MON_RES);
-! }
- rl->flags &= (u_short)~flags;
-+ }
- break;
-
- case RESTRICT_REMOVE:
-***************
-*** 280,285 ****
---- 437,447 ----
- && !(rl->mflags & RESM_INTERFACE)) {
- rlprev->next = rl->next;
- restrictcount--;
-+ if (rl->flags & RES_LIMITED) {
-+ res_limited_refcnt--;
-+ if (res_limited_refcnt == 0)
-+ mon_stop(MON_RES);
-+ }
- memset((char *)rl, 0, sizeof(struct restrictlist));
-
- rl->next = resfree;
-diff -c xntpd/ntp_unixclock.c:1.1.1.27 xntpd/ntp_unixclock.c:3.29
-*** xntpd/ntp_unixclock.c:1.1.1.27 Wed Feb 2 18:17:00 1994
---- xntpd/ntp_unixclock.c Wed Feb 2 18:17:01 1994
-***************
-*** 556,568 ****
- #endif /* SOLARIS */
-
- #ifdef SYS_LINUX
-! /* XXX should look this up somewhere ! */
- static void
- clock_parms(tickadj, tick)
- U_LONG *tickadj;
- U_LONG *tick;
- {
-! *tickadj = (U_LONG)1;
-! *tick = (U_LONG)10000;
- }
- #endif /* SYS_LINUX */
---- 556,573 ----
- #endif /* SOLARIS */
-
- #ifdef SYS_LINUX
-! #include <sys/timex.h>
- static void
- clock_parms(tickadj, tick)
- U_LONG *tickadj;
- U_LONG *tick;
- {
-! struct timex txc;
-!
-! txc.mode = 0;
-! __adjtimex(&txc);
-!
-! *tickadj = (U_LONG)1; /* our adjtime is accurate */
-! *tick = (U_LONG)txc.tick;
- }
- #endif /* SYS_LINUX */
-diff -c xntpdc/ntpdc_ops.c:1.1.1.12 xntpdc/ntpdc_ops.c:3.16
-*** xntpdc/ntpdc_ops.c:1.1.1.12 Wed Feb 2 18:17:35 1994
---- xntpdc/ntpdc_ops.c Wed Feb 2 18:17:36 1994
-***************
-*** 846,853 ****
- if (!check1item(items, fp))
- return;
-
-! if (!checkitemsize(itemsize, sizeof(struct info_sys_stats)))
- return;
-
- (void) fprintf(fp, "system uptime: %d\n",
- ntohl(ss->timeup));
---- 846,857 ----
- if (!check1item(items, fp))
- return;
-
-! if (itemsize != sizeof(struct info_sys_stats) &&
-! itemsize != sizeof(struct old_info_sys_stats)) {
-! /* issue warning according to new structure size */
-! checkitemsize(itemsize, sizeof(struct info_sys_stats));
- return;
-+ }
-
- (void) fprintf(fp, "system uptime: %d\n",
- ntohl(ss->timeup));
-***************
-*** 869,874 ****
---- 873,883 ----
- ntohl(ss->badauth));
- (void) fprintf(fp, "wander hold downs: %d\n",
- ntohl(ss->wanderhold));
-+ if (itemsize != sizeof(struct info_sys_stats))
-+ return;
-+
-+ (void) fprintf(fp, "limitation rejects: %d\n",
-+ ntohl(ss->limitrejected));
- }
-
-
-***************
-*** 1243,1248 ****
---- 1252,1258 ----
- { "nopeer", RES_NOPEER },
- { "notrap", RES_NOTRAP },
- { "lptrap", RES_LPTRAP },
-+ { "limited", RES_LIMITED },
- { "", 0 }
- };
-
-***************
-*** 1463,1468 ****
---- 1473,1479 ----
- FILE *fp;
- {
- struct info_monitor *ml;
-+ struct old_info_monitor *oml;
- int items;
- int itemsize;
- int res;
-***************
-*** 1476,1498 ****
- if (!checkitems(items, fp))
- return;
-
-! if (!checkitemsize(itemsize, sizeof(struct info_monitor)))
-! return;
-
-! (void) fprintf(fp,
-! " address port count mode version lasttime firsttime\n");
-! (void) fprintf(fp,
-! "=====================================================================\n");
-! while (items > 0) {
-! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n",
-! nntohost(ml->addr),
-! ntohs(ml->port),
-! ntohl(ml->count),
-! ml->mode, ml->version,
-! ntohl(ml->lasttime),
-! ntohl(ml->firsttime));
-! ml++;
-! items--;
- }
- }
-
---- 1487,1535 ----
- if (!checkitems(items, fp))
- return;
-
-! if (itemsize == sizeof(struct info_monitor)) {
-
-! (void) fprintf(fp,
-! " address port count mode version lastdrop lasttime firsttime\n");
-! (void) fprintf(fp,
-! "===============================================================================\n");
-! while (items > 0) {
-! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u %9u\n",
-! nntohost(ml->addr),
-! ntohs(ml->port),
-! ntohl(ml->count),
-! ml->mode,
-! ml->version,
-! ntohl(ml->lastdrop),
-! ntohl(ml->lasttime),
-! ntohl(ml->firsttime));
-! ml++;
-! items--;
-! }
-! } else {
-! if (itemsize != sizeof(struct old_info_monitor)) {
-! /* issue warning according to new info_monitor size */
-! checkitemsize(itemsize, sizeof(struct info_monitor));
-! return;
-! }
-!
-! oml = (struct old_info_monitor *)ml;
-! (void) fprintf(fp,
-! " address port count mode version lasttime firsttime\n");
-! (void) fprintf(fp,
-! "======================================================================\n");
-! while (items > 0) {
-! (void) fprintf(fp, "%-20.20s %5d %9d %4d %3d %9u %9u\n",
-! nntohost(oml->addr),
-! ntohs(oml->port),
-! ntohl(oml->count),
-! oml->mode,
-! oml->version,
-! ntohl(oml->lasttime),
-! ntohl(oml->firsttime));
-! oml++;
-! items--;
-! }
- }
- }
-
diff --git a/usr.sbin/xntpd/patches/patch.11 b/usr.sbin/xntpd/patches/patch.11
deleted file mode 100644
index 8554d88..0000000
--- a/usr.sbin/xntpd/patches/patch.11
+++ /dev/null
@@ -1,536 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa05908; 9 Feb 94 18:18 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa21398;
- 9 Feb 94 18:13 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA29809 (5.65c-6/7.3v-FAU); Thu, 10 Feb 1994 00:12:50 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA11633 (5.65c-6/7.3m-FAU); Thu, 10 Feb 1994 00:12:46 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402092312.AA11633@faui43.informatik.uni-erlangen.de>
-Subject: .zz Patches
-To: Mills@udel.edu
-Date: Thu, 10 Feb 94 0:12:41 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de,
- Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
-X-Mailer: ELM [version 2.3 PL11]
-
-Guys,
-
-Ok, here are some patches (including some WWVB cleanup 8-) relative
-to the zz version. The KERNEL stuff in ntp_timex.h must still
-be resolved.
-
-diff -c Makefile:1.1.1.11 Makefile:3.46
-*** Makefile:1.1.1.11 Wed Feb 9 23:54:57 1994
---- Makefile Wed Feb 9 23:54:57 1994
-***************
-*** 162,168 ****
- FRC:
-
- savebin:
-! @test -d bin || mkdir bin
- @echo
- @echo '### saving $(TARGETS) $(OPTTARG) in bin'
- -@for f in $(TARGETS) $(OPTTARG); \
---- 162,168 ----
- FRC:
-
- savebin:
-! -@test -d bin || mkdir bin
- @echo
- @echo '### saving $(TARGETS) $(OPTTARG) in bin'
- -@for f in $(TARGETS) $(OPTTARG); \
-diff -c include/ntp_machine.h:1.1.1.11 include/ntp_machine.h:1.27
-*** include/ntp_machine.h:1.1.1.11 Wed Feb 9 23:56:27 1994
---- include/ntp_machine.h Wed Feb 9 23:56:27 1994
-***************
-*** 274,280 ****
- #ifndef STR_SYSTEM
- #define STR_SYSTEM "UNIX/Ultrix"
- #endif
-- #define HAVE_TERMIOS
- #endif
-
- /*
---- 274,279 ----
-diff -c lib/systime.c:1.1.1.11 lib/systime.c:1.9
-*** lib/systime.c:1.1.1.11 Wed Feb 9 23:57:45 1994
---- lib/systime.c Wed Feb 9 23:57:45 1994
-***************
-*** 47,58 ****
- * We also remember the clock precision we computed from the kernel in
- * case someone asks us.
- */
- LONG adj_precision; /* adj precision in usec (tickadj) */
- LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
-
- U_LONG tsf_maxslew; /* same as above, as LONG format */
-
-- LONG sys_clock;
- l_fp sys_clock_offset; /* correction for current system time */
-
- /*
---- 47,59 ----
- * We also remember the clock precision we computed from the kernel in
- * case someone asks us.
- */
-+ LONG sys_clock;
-+
- LONG adj_precision; /* adj precision in usec (tickadj) */
- LONG tvu_maxslew; /* maximum adjust doable in 1<<CLOCK_ADJ sec (usec) */
-
- U_LONG tsf_maxslew; /* same as above, as LONG format */
-
- l_fp sys_clock_offset; /* correction for current system time */
-
- /*
-diff -c machines/sunos4.bsd:1.1.1.3 machines/sunos4.bsd:1.3
-*** machines/sunos4.bsd:1.1.1.3 Wed Feb 9 23:58:15 1994
---- machines/sunos4.bsd Wed Feb 9 23:58:15 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SUNOS4
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lkvm
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SUNOS4 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lkvm
-diff -c machines/ultrix.bsd:1.1.1.2 machines/ultrix.bsd:1.3
-*** machines/ultrix.bsd:1.1.1.2 Wed Feb 9 23:58:19 1994
---- machines/ultrix.bsd Wed Feb 9 23:58:19 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_ULTRIX
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_ULTRIX -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/ultrix.posix:1.1.1.2 machines/ultrix.posix:1.3
-*** machines/ultrix.posix:1.1.1.2 Wed Feb 9 23:58:20 1994
---- machines/ultrix.posix Wed Feb 9 23:58:20 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_ULTRIX -DNTP_POSIX_SOURCE -DHAVE_SIGNALED_IO -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c parse/clk_dcf7000.c:1.1.1.8 parse/clk_dcf7000.c:3.11
-*** parse/clk_dcf7000.c:1.1.1.8 Wed Feb 9 23:58:51 1994
---- parse/clk_dcf7000.c Wed Feb 9 23:58:51 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
- *
-! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
- *
- * ELV DCF7000 module
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
- *
-! * clk_dcf7000.c,v 3.11 1994/02/02 17:45:14 kardel Exp
- *
- * ELV DCF7000 module
- *
-***************
-*** 121,126 ****
---- 121,129 ----
- * History:
- *
- * clk_dcf7000.c,v
-+ * Revision 3.11 1994/02/02 17:45:14 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.6 1993/10/09 15:01:27 kardel
- * file structure unified
- *
-diff -c parse/clk_meinberg.c:1.1.1.8 parse/clk_meinberg.c:3.13
-*** parse/clk_meinberg.c:1.1.1.8 Wed Feb 9 23:58:53 1994
---- parse/clk_meinberg.c Wed Feb 9 23:58:53 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
- *
-! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
- *
- * Meinberg clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
- *
-! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
- *
- * Meinberg clock support
- *
-***************
-*** 414,419 ****
---- 414,422 ----
- * History:
- *
- * clk_meinberg.c,v
-+ * Revision 3.13 1994/02/02 17:45:21 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.11 1994/01/25 19:05:10 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/clk_rawdcf.c:1.1.1.8 parse/clk_rawdcf.c:3.11
-*** parse/clk_rawdcf.c:1.1.1.8 Wed Feb 9 23:58:54 1994
---- parse/clk_rawdcf.c Wed Feb 9 23:58:54 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
- *
-! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
- *
-! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
-***************
-*** 529,534 ****
---- 529,537 ----
- * History:
- *
- * clk_rawdcf.c,v
-+ * Revision 3.11 1994/02/02 17:45:23 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.9 1994/01/25 19:05:12 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/clk_schmid.c:1.1.1.8 parse/clk_schmid.c:3.12
-*** parse/clk_schmid.c:1.1.1.8 Wed Feb 9 23:58:55 1994
---- parse/clk_schmid.c Wed Feb 9 23:58:55 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
- *
-! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
- *
- * Schmid clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
- *
-! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
- *
- * Schmid clock support
- *
-***************
-*** 168,173 ****
---- 168,176 ----
- * History:
- *
- * clk_schmid.c,v
-+ * Revision 3.12 1994/02/02 17:45:25 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.10 1994/01/25 19:05:15 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/clk_trimble.c:1.1.1.3 parse/clk_trimble.c:3.9
-*** parse/clk_trimble.c:1.1.1.3 Wed Feb 9 23:58:56 1994
---- parse/clk_trimble.c Wed Feb 9 23:58:57 1994
-***************
-*** 1,6 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp
- *
- * Trimble SV6 clock support
- */
---- 1,6 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.9 1994/02/02 17:45:27 kardel Exp
- *
- * Trimble SV6 clock support
- */
-***************
-*** 106,111 ****
---- 106,114 ----
- * History:
- *
- * clk_trimble.c,v
-+ * Revision 3.9 1994/02/02 17:45:27 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.7 1994/01/25 19:05:17 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/parse.c:1.1.1.8 parse/parse.c:3.21
-*** parse/parse.c:1.1.1.8 Wed Feb 9 23:58:59 1994
---- parse/parse.c Wed Feb 9 23:59:00 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
- *
-! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
-! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 1148,1153 ****
---- 1148,1156 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.21 1994/02/02 17:45:30 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.19 1994/01/25 19:05:20 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/parse_conf.c:1.1.1.8 parse/parse_conf.c:3.15
-*** parse/parse_conf.c:1.1.1.8 Wed Feb 9 23:59:01 1994
---- parse/parse_conf.c Wed Feb 9 23:59:01 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
- *
-! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
- *
- * Parser configuration module for reference clocks
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
- *
-! * parse_conf.c,v 3.15 1994/02/02 17:45:32 kardel Exp
- *
- * Parser configuration module for reference clocks
- *
-***************
-*** 81,86 ****
---- 81,89 ----
- * History:
- *
- * parse_conf.c,v
-+ * Revision 3.15 1994/02/02 17:45:32 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.13 1994/01/25 19:05:23 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/parsesolaris.c:1.1.1.6 parse/parsesolaris.c:3.12
-*** parse/parsesolaris.c:1.1.1.6 Wed Feb 9 23:59:02 1994
---- parse/parsesolaris.c Wed Feb 9 23:59:02 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
- *
-! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
- *
-! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
-***************
-*** 139,145 ****
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.9";
- char *s, *S, *t;
-
- /*
---- 139,145 ----
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.12";
- char *s, *S, *t;
-
- /*
-***************
-*** 1179,1184 ****
---- 1179,1187 ----
- * History:
- *
- * parsesolaris.c,v
-+ * Revision 3.12 1994/02/02 17:45:35 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.9 1994/01/25 19:05:26 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/parsestreams.c:1.1.1.7 parse/parsestreams.c:3.14
-*** parse/parsestreams.c:1.1.1.7 Wed Feb 9 23:59:03 1994
---- parse/parsestreams.c Wed Feb 9 23:59:04 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
- *
-! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
- *
-! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
-***************
-*** 1258,1263 ****
---- 1258,1266 ----
- * History:
- *
- * parsestreams.c,v
-+ * Revision 3.14 1994/02/02 17:45:38 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.12 1994/01/25 19:05:30 kardel
- * 94/01/23 reconcilation
- *
-diff -c xntpd/ntp_proto.c:1.1.1.20 xntpd/ntp_proto.c:3.22
-*** xntpd/ntp_proto.c:1.1.1.20 Thu Feb 10 00:00:36 1994
---- xntpd/ntp_proto.c Thu Feb 10 00:00:36 1994
-***************
-*** 25,31 ****
- l_fp sys_refskew; /* accumulated skew since last update */
- struct peer *sys_peer; /* our current peer */
- u_char sys_poll; /* log2 of desired system poll interval */
-! LONG sys_clock; /* second part of current time */
- LONG sys_lastselect; /* sys_clock at last synch-dist update */
-
- /*
---- 25,31 ----
- l_fp sys_refskew; /* accumulated skew since last update */
- struct peer *sys_peer; /* our current peer */
- u_char sys_poll; /* log2 of desired system poll interval */
-! extern LONG sys_clock; /* second part of current time - now in systime.c */
- LONG sys_lastselect; /* sys_clock at last synch-dist update */
-
- /*
-diff -c xntpd/ntpd.c:1.1.1.28 xntpd/ntpd.c:3.32
-*** xntpd/ntpd.c:1.1.1.28 Thu Feb 10 00:00:43 1994
---- xntpd/ntpd.c Thu Feb 10 00:00:43 1994
-***************
-*** 139,145 ****
- (void) dup2(0, 1);
- (void) dup2(0, 2);
- #ifdef NTP_POSIX_SOURCE
-! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX)
- (void) setsid();
- #else
- (void) setpgid(0, 0);
---- 139,145 ----
- (void) dup2(0, 1);
- (void) dup2(0, 2);
- #ifdef NTP_POSIX_SOURCE
-! #if defined(SOLARIS) || defined(SYS_PTX) || defined(SYS_AUX3) || defined(SYS_AIX) || defined(SYS_ULTRIX)
- (void) setsid();
- #else
- (void) setpgid(0, 0);
-diff -c xntpd/refclock_parse.c:1.1.1.10 xntpd/refclock_parse.c:3.47
-*** xntpd/refclock_parse.c:1.1.1.10 Thu Feb 10 00:00:54 1994
---- xntpd/refclock_parse.c Thu Feb 10 00:00:54 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
- *
-! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
- *
-! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 3396,3401 ****
---- 3396,3404 ----
- * History:
- *
- * refclock_parse.c,v
-+ * Revision 3.47 1994/02/02 17:44:30 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.45 1994/01/25 19:06:27 kardel
- * 94/01/23 reconcilation
- *
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.12 b/usr.sbin/xntpd/patches/patch.12
deleted file mode 100644
index 9d7db0f..0000000
--- a/usr.sbin/xntpd/patches/patch.12
+++ /dev/null
@@ -1,66 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa16020; 11 Feb 94 10:28 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27338;
- 11 Feb 94 10:12 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA00715 (5.65c-6/7.3v-FAU); Fri, 11 Feb 1994 14:26:34 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA24390 (5.65c-6/7.3m-FAU); Fri, 11 Feb 1994 14:26:31 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402111326.AA24390@faui43.informatik.uni-erlangen.de>
-Subject: Re: Beep, beep, beep
-To: Mills@udel.edu
-Date: Fri, 11 Feb 94 14:26:25 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de,
- Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
-In-Reply-To: <9402101138.aa10259@huey.udel.edu>; from "Mills@udel.edu" at Feb 10, 94 11:38 am
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Frank,
-
-> In the latest xntp3.3zz.tar.Z the Ultrix kernel finds joy of clock.
-> (Whew).
-
-Ok, I just dug out an old allocation failure in xntpdc. While
-reading respones the input buffer might be realloced(and MOVED) without
-telling the rest of the system. This was fatal when stdio needed a
-buffer for non terminal operation. Net result was confused output.
-
-Ok, here ist the patch:
-
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/xntpdc/ntpdc.c,v
-retrieving revision 3.17
-diff -c -r3.17 xntpdc/ntpdc.c
-*** xntpdc/ntpdc.c:3.17 1994/01/28 14:07:13
---- xntpdc/ntpdc.c 1994/02/11 13:20:56
-***************
-*** 598,605 ****
- /*
- * So far, so good. Copy this data into the output array.
- */
-! if ((datap + datasize) > (pktdata + pktdatasize))
- growpktdata();
- memmove(datap, (char *)rpkt.data, datasize);
- datap += datasize;
- if (firstpkt) {
---- 598,609 ----
- /*
- * So far, so good. Copy this data into the output array.
- */
-! if ((datap + datasize) > (pktdata + pktdatasize)) {
-! int offset = datap - pktdata;
- growpktdata();
-+ *rdata = pktdata; /* might have been realloced ! */
-+ datap = pktdata + offset;
-+ }
- memmove(datap, (char *)rpkt.data, datasize);
- datap += datasize;
- if (firstpkt) {
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.13 b/usr.sbin/xntpd/patches/patch.13
deleted file mode 100644
index 17363e2..0000000
--- a/usr.sbin/xntpd/patches/patch.13
+++ /dev/null
@@ -1,68 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id af16153; 14 Feb 94 7:27 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27498;
- 13 Feb 94 13:23 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA22387 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:22:59 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA27117 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:22:57 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402131822.AA27117@faui43.informatik.uni-erlangen.de>
-Subject: compilation setup for solaris
-To: mills@udel.edu
-Date: Sun, 13 Feb 94 19:22:53 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave.
-
-Just to remove some compilation noise in solaris (NTP_POSIX_SOURCE
-redefined):
-
-For 3.3e:
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.1,v
-retrieving revision 1.4
-diff -c -r1.4 machines/sunos5.1
-*** machines/sunos5.1:1.4 1994/02/01 23:30:54
---- machines/sunos5.1 1994/02/13 18:16:24
-***************
-*** 1,6 ****
- RANLIB= :
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DNTP_POSIX_SOURCE
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= :
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/machines/sunos5.2,v
-retrieving revision 1.4
-diff -c -r1.4 machines/sunos5.2
-*** machines/sunos5.2:1.4 1994/02/01 23:30:56
---- machines/sunos5.2 1994/02/13 18:16:27
-***************
-*** 1,6 ****
- RANLIB= :
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE -DNTP_POSIX_SOURCE
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= :
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSTREAM -DSOLARIS -DSYS_SOLARIS -DADJTIME_IS_ACCURATE
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.14 b/usr.sbin/xntpd/patches/patch.14
deleted file mode 100644
index 775f9da..0000000
--- a/usr.sbin/xntpd/patches/patch.14
+++ /dev/null
@@ -1,116 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa16187; 14 Feb 94 7:27 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa27096;
- 13 Feb 94 13:04 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA21590 (5.65c-6/7.3v-FAU); Sun, 13 Feb 1994 19:04:48 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA26947 (5.65c-6/7.3m-FAU); Sun, 13 Feb 1994 19:04:46 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402131804.AA26947@faui43.informatik.uni-erlangen.de>
-Subject: patches for 3.3e
-To: mills@udel.edu
-Date: Sun, 13 Feb 94 19:04:42 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave.
-
-Here is something to make Sequent PTX happier.
-I also changed the version number from 3.3zz to 3.3e.
-The patch is relative to the current 3.3e version.
-
-diff -c Makefile:1.1.1.12 Makefile:3.47
-*** Makefile:1.1.1.12 Sun Feb 13 18:53:06 1994
---- Makefile Sun Feb 13 18:53:07 1994
-***************
-*** 144,150 ****
- @echo '###' creating XNTPRES utility
- @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
-
-! util/tickadj: util/Makefile FRC
- @echo
- @echo '###' creating TICKADJ utility
- @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
---- 144,150 ----
- @echo '###' creating XNTPRES utility
- @cd xntpres && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
-
-! util/tickadj: util/Makefile lib/libntp.a FRC
- @echo
- @echo '###' creating TICKADJ utility
- @cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)"
-diff -c VERSION:1.1.1.7 VERSION:3.12
-*** VERSION:1.1.1.7 Sun Feb 13 18:53:10 1994
---- VERSION Sun Feb 13 18:53:10 1994
-***************
-*** 1 ****
-! version=3.3zz (beta)
---- 1 ----
-! version=3.3e (beta)
-diff -c authstuff/Makefile.tmpl:1.1.1.9 authstuff/Makefile.tmpl:3.12
-*** authstuff/Makefile.tmpl:1.1.1.9 Sun Feb 13 18:53:18 1994
---- authstuff/Makefile.tmpl Sun Feb 13 18:53:18 1994
-***************
-*** 38,50 ****
- all: $(PROGRAM)
-
- authcert: $(CRTOBJS) $(LIB)
-! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB)
-
- authspeed: $(SPDOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
-
- keyparity: $(PAROBJS) $(LIB)
-! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB)
-
- makeIPFP: $(IFPOBJS)
- $(CC) $(COPTS) -o $@ $(IFPOBJS)
---- 38,50 ----
- all: $(PROGRAM)
-
- authcert: $(CRTOBJS) $(LIB)
-! $(CC) $(COPTS) -o $@ $(CRTOBJS) $(LIB) $(COMPAT) $(RESLIB)
-
- authspeed: $(SPDOBJS) $(LIB)
- $(CC) $(COPTS) -o $@ $(SPDOBJS) $(LIB) $(COMPAT) $(RESLIB)
-
- keyparity: $(PAROBJS) $(LIB)
-! $(CC) $(COPTS) -o $@ $(PAROBJS) $(LIB) $(COMPAT) $(RESLIB)
-
- makeIPFP: $(IFPOBJS)
- $(CC) $(COPTS) -o $@ $(IFPOBJS)
-***************
-*** 68,74 ****
- $(CC) $(COPTS) -o $@ $(UNXBJS)
-
- md5: $(MD5OBJS)
-! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB)
-
- tags:
- ctags *.c *.h
---- 68,74 ----
- $(CC) $(COPTS) -o $@ $(UNXBJS)
-
- md5: $(MD5OBJS)
-! $(CC) $(COPTS) -o $@ $(MD5OBJS) $(LIB) $(COMPAT) $(RESLIB)
-
- tags:
- ctags *.c *.h
-diff -c include/ntp_machine.h:1.1.1.12 include/ntp_machine.h:1.28
-*** include/ntp_machine.h:1.1.1.12 Sun Feb 13 18:54:32 1994
---- include/ntp_machine.h Sun Feb 13 18:54:32 1994
-***************
-*** 457,462 ****
---- 457,463 ----
- #define HAVE_READKMEM
- #define UDP_WILDCARD_DELIVERY
- #define NTP_POSIX_SOURCE
-+ #define memmove(x, y, z) memcpy(x, y, z)
- struct timezone { int __0; }; /* unused placebo */
- /*
- * no comment !@!
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.15 b/usr.sbin/xntpd/patches/patch.15
deleted file mode 100644
index 1ef861d..0000000
--- a/usr.sbin/xntpd/patches/patch.15
+++ /dev/null
@@ -1,39 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aq16153; 14 Feb 94 7:28 EST
-Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24615;
- 14 Feb 94 6:34 EST
-Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #1)
- id m0pW1Zk-000C8UC; Mon, 14 Feb 94 06:34 EST
-Message-Id: <m0pW1Zk-000C8UC@jagubox.gsfc.nasa.gov>
-From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-Subject: xntp 3.3e (or is that zz ;) )
-To: Mills@udel.edu
-Date: Mon, 14 Feb 1994 06:34:52 -0500 (EST)
-Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
-X-Mailer: ELM [version 2.4 PL23]
-Content-Type: text
-Content-Length: 621
-
-This latest version requires the NTP_NEED_BOPS define in ntp_machine.h for
-A/UX:
-
-*** ntp_machine.h.orig Mon Feb 14 06:34:34 1994
---- ntp_machine.h Mon Feb 14 06:20:57 1994
-***************
-*** 299,304 ****
---- 299,305 ----
- #define HAVE_BSD_TTYS
- #define LOG_NTP LOG_LOCAL1
- #define HAVE_SIGNALED_IO
-+ #define NTP_NEED_BOPS
- #ifndef STR_SYSTEM
- #define STR_SYSTEM "UNIX/AUX"
- #endif
---
-#include <std/disclaimer.h>
- Jim Jagielski |
- jim@jagubox.gsfc.nasa.gov | "Ahh... west and wewaxation at wast"
- NASA/GSFC, Code 734.4 | Elmer Fudd
- Greenbelt, MD 20771 |
-
diff --git a/usr.sbin/xntpd/patches/patch.16 b/usr.sbin/xntpd/patches/patch.16
deleted file mode 100644
index 909f0c7..0000000
--- a/usr.sbin/xntpd/patches/patch.16
+++ /dev/null
@@ -1,267 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa25712; 15 Feb 94 17:54 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18345;
- 15 Feb 94 17:51 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA15109 (5.65c-6/7.3v-FAU); Tue, 15 Feb 1994 23:50:53 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA17375 (5.65c-6/7.3m-FAU); Tue, 15 Feb 1994 23:50:51 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402152250.AA17375@faui43.informatik.uni-erlangen.de>
-Subject: fixed for parse kernel stuff...
-To: mills@udel.edu
-Date: Tue, 15 Feb 94 23:50:47 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-
-Hi, Dave !
-
-Here are some fixes for the PARSE kernel modules. Basically they
-fix a memory leak on an open error condition and pronounce the
-Solaris 2.x stream module MT safe.
-
-Well, actually I should put something for you to eat here 8-).
-
-RCS file: /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v
-retrieving revision 1.1.1.7
-diff -c -r1.1.1.7 parsesolaris.c
-*** parse/parsesolaris.c:1.1.1.7 1994/02/12 09:53:42
---- parse/parsesolaris.c 1994/02/15 22:20:51
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
- *
-! * parsesolaris.c,v 3.12 1994/02/02 17:45:35 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
- *
-! * parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
-***************
-*** 19,25 ****
- */
-
- #ifndef lint
-! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
- #endif
-
- /*
---- 19,25 ----
- */
-
- #ifndef lint
-! static char rcsid[] = "parsesolaris.c,v 3.15 1994/02/15 22:20:51 kardel Exp";
- #endif
-
- /*
-***************
-*** 65,71 ****
- {
- "parse", /* module name */
- &parseinfo, /* module information */
-! D_NEW, /* not clean yet */
- /* lock ptr */
- };
-
---- 65,71 ----
- {
- "parse", /* module name */
- &parseinfo, /* module information */
-! D_NEW|D_MP|D_MTQPAIR, /* exclusive for q pair */
- /* lock ptr */
- };
-
-***************
-*** 139,145 ****
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.12";
- char *s, *S, *t;
-
- /*
---- 139,145 ----
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.15";
- char *s, *S, *t;
-
- /*
-***************
-*** 413,418 ****
---- 413,420 ----
- parse->parse_ppsclockev.tv.tv_usec = 0;
- parse->parse_ppsclockev.serial = 0;
-
-+ qprocson(q);
-+
- parseprintf(DD_OPEN,("parse: OPEN - initializing io subsystem q=%x\n", q));
-
- if (!parse_ioinit(&parse->parse_io))
-***************
-*** 420,425 ****
---- 422,429 ----
- /*
- * ok guys - beat it
- */
-+ qprocsoff(q);
-+
- kmem_free((caddr_t)parse, sizeof(parsestream_t));
-
- parsebusy--;
-***************
-*** 441,447 ****
- */
- if (!notice)
- {
-! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", modlstrmod.strmod_linkinfo);
- notice = 1;
- }
-
---- 445,451 ----
- */
- if (!notice)
- {
-! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", modlstrmod.strmod_linkinfo);
- notice = 1;
- }
-
-***************
-*** 449,455 ****
---- 453,464 ----
- }
- else
- {
-+ qprocsoff(q);
-+
-+ kmem_free((caddr_t)parse, sizeof(parsestream_t));
-+
- parsebusy--;
-+
- return EIO;
- }
- }
-***************
-*** 462,467 ****
---- 471,478 ----
-
- parseprintf(DD_CLOSE,("parse: CLOSE\n"));
-
-+ qprocsoff(q);
-+
- s = splhigh();
-
- if (parse->parse_dqueue)
-***************
-*** 1178,1184 ****
- /*
- * History:
- *
-! * parsesolaris.c,v
- * Revision 3.12 1994/02/02 17:45:35 kardel
- * rcs ids fixed
- *
---- 1189,1204 ----
- /*
- * History:
- *
-! * parsesolaris.c,v
-! * Revision 3.15 1994/02/15 22:20:51 kardel
-! * rcsid fixed
-! *
-! * Revision 3.14 1994/02/15 22:06:04 kardel
-! * added qprocsx & flags for MT capability
-! *
-! * Revision 3.13 1994/02/13 19:16:47 kardel
-! * updated verbose Copyright message
-! *
- * Revision 3.12 1994/02/02 17:45:35 kardel
- * rcs ids fixed
- *
-RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v
-retrieving revision 1.1.1.8
-diff -c -r1.1.1.8 parsestreams.c
-*** parse/parsestreams.c:1.1.1.8 1994/02/12 09:53:45
---- parse/parsestreams.c 1994/02/15 22:39:50
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
- *
-! * parsestreams.c,v 3.14 1994/02/02 17:45:38 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
- *
-! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
-***************
-*** 527,533 ****
- */
- if (!notice)
- {
-! printf("%s: Copyright (c) 1991-1993, Frank Kardel\n", parsesync_vd.Drv_name);
- notice = 1;
- }
-
---- 527,533 ----
- */
- if (!notice)
- {
-! printf("%s: Copyright (c) 1991-1994, Frank Kardel\n", parsesync_vd.Drv_name);
- notice = 1;
- }
-
-***************
-*** 535,540 ****
---- 535,542 ----
- }
- else
- {
-+ kmem_free((caddr_t)parse, sizeof(parsestream_t));
-+
- #ifdef VDDRV
- parsebusy--;
- #endif
-***************
-*** 1257,1263 ****
- /*
- * History:
- *
-! * parsestreams.c,v
- * Revision 3.14 1994/02/02 17:45:38 kardel
- * rcs ids fixed
- *
---- 1259,1271 ----
- /*
- * History:
- *
-! * parsestreams.c,v
-! * Revision 3.16 1994/02/15 22:39:50 kardel
-! * memory leak on open failure closed
-! *
-! * Revision 3.15 1994/02/13 19:16:50 kardel
-! * updated verbose Copyright message
-! *
- * Revision 3.14 1994/02/02 17:45:38 kardel
- * rcs ids fixed
- *
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.17 b/usr.sbin/xntpd/patches/patch.17
deleted file mode 100644
index f98f754..0000000
--- a/usr.sbin/xntpd/patches/patch.17
+++ /dev/null
@@ -1,50 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa00480; 16 Feb 94 12:17 EST
-Received: from quack.kfu.com by louie.udel.edu id aa24950; 16 Feb 94 12:12 EST
-Received: by quack.kfu.com id AA03532
- (5.65c8/IDA-1.4.4 for mills@udel.edu); Wed, 16 Feb 1994 09:12:04 -0800
-Date: Wed, 16 Feb 1994 09:12:04 -0800
-From: Nick Sayer <nsayer@quack.kfu.com>
-Message-Id: <199402161712.AA03532@quack.kfu.com>
-To: mills@udel.edu
-Subject: CHU debug patch
-
-I don't know what you think about this, but I thought I'd pass it
-along. I'm sorry I don't have a proper 'patch' format patch, but
-it should be aparent from the context where this goes in refclock_chu.c:
-
- return;
- }
-
- /*
- * Get the clock this applies to and a pointer to the data
- */
- chu = (struct chuunit *)rbufp->recv_srcclock;
- chuc = (struct chucode *)&rbufp->recv_space;
- chu->responses++;
- chu->lastupdate = current_time;
-
- /*
- * Just for fun, we can debug the whole frame if
- * we want.
- */
-
-#ifndef NO_CHU_DEBUG
- syslog(LOG_DEBUG,"CHU %s packet:",(chuc->chutype==CHU_YEAR)?
- "year":"time");
- for (i=0;i<NCHUCHARS;i++)
- {
- char c[64];
-
- sprintf(c,"%c%c %s",hexstring[chuc->codechars[i]&0xf],
- hexstring[chuc->codechars[i]>>4],
- ctime(&(chuc->codetimes[i].tv_sec)));
- c[strlen(c)-1]=0; /* ctime() adds a damn \n */
- syslog(LOG_DEBUG,"%s .%06d",c,chuc->codetimes[i].tv_usec);
- }
-#endif
-
- /*
- * At this point we're assured that both halves of the
- * data match because of what the kernel has done.
-
diff --git a/usr.sbin/xntpd/patches/patch.18 b/usr.sbin/xntpd/patches/patch.18
deleted file mode 100644
index e81eb62..0000000
--- a/usr.sbin/xntpd/patches/patch.18
+++ /dev/null
@@ -1,99 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa00679; 16 Feb 94 13:00 EST
-Received: from spatula.csv.warwick.ac.uk by louie.udel.edu id aa26092;
- 16 Feb 94 12:48 EST
-Date: Wed, 16 Feb 1994 17:47:50 GMT
-From: Ian Dickinson <cudep@csv.warwick.ac.uk>
-Message-Id: <7051.199402161747@spatula.csv.warwick.ac.uk>
-Received: from localhost by spatula.csv.warwick.ac.uk
- id RAA07051; Wed, 16 Feb 1994 17:47:50 GMT
-In-Reply-To: Mills@udel.edu
- "Re: xntp sunos5 config" (Feb 16, 10:50am)
-X-Mailer: Mail User's Shell (7.2.4 2/2/92)
-To: Mills@udel.edu
-Subject: Re: xntp sunos5 config
-MIME-Version: 1.0
-Content-Type: text/plain; charset=US-ASCII
-
-On Feb 16, 10:50am, Mills@udel.edu wrote:
-} Subject: Re: xntp sunos5 config
-
-BTW, 3.3f seems to work fine on an SC2000 sunos5.3 (including the patch below)
-
-> Your message did not say in which file sunos5.1 or sunos5.2 or both
-> you wanted the -DLOCK_PROCESS. I'll wait for your patches.
-
-I've never done any heavy work on a sunos5.1 machine, so I can't remember if
-plock() exists there. I *think* sunso5.2 will work with it.
-Perhaps it's time to create a sunos5.3 file which has -DLOCK_PROCESS and is
-otherwise identical to sunos5.2, though this is getting silly for supposedly
-a single SVR4-based operating system.
-
-As far as I'm aware, the choice between plock() and mlockall() can be done
-with feature testing and doesn't need a seperate #define.
-
-This patch applies to 3.3b and 3.3f (with line fuzz).
-I'm certainly not sure this is the best way to do this, but it does work here.
-Perhaps it's worth asking around how widely this works in sunos5.x
-
-*** 1.1 1994/02/01 17:16:13
---- xntpd/ntpd.c 1994/02/16 16:32:47
-***************
-*** 28,35 ****
---- 28,39 ----
- #include "ntp_stdlib.h"
-
- #ifdef LOCK_PROCESS
-+ #ifdef SYS_SOLARIS
-+ #include <sys/mman.h>
-+ #else
- #include <sys/lock.h>
- #endif
-+ #endif
-
- /*
- * Signals we catch for debugging. If not debugging we ignore them.
-***************
-*** 218,229 ****
- if (rtprio(0, 120) < 0)
- syslog(LOG_ERR, "rtprio() error: %m");
- #else
-! #if defined(PROCLOCK) && defined(LOCK_PROCESS)
- /*
- * lock the process into memory
- */
- if (plock(PROCLOCK) < 0)
- syslog(LOG_ERR, "plock(): %m");
- #endif
- #if defined(NTPD_PRIO) && NTPD_PRIO != 0
- /*
---- 222,243 ----
- if (rtprio(0, 120) < 0)
- syslog(LOG_ERR, "rtprio() error: %m");
- #else
-! #if defined(LOCK_PROCESS)
-! #if defined(MCL_CURRENT) && defined(MCL_FUTURE)
-! /*
-! * lock the process into memory
-! */
-! if (mlockall(MCL_CURRENT|MCL_FUTURE) < 0)
-! syslog(LOG_ERR, "mlockall(): %m");
-! #else
-! #if defined(PROCLOCK)
- /*
- * lock the process into memory
- */
- if (plock(PROCLOCK) < 0)
- syslog(LOG_ERR, "plock(): %m");
-+ #endif
-+ #endif
- #endif
- #if defined(NTPD_PRIO) && NTPD_PRIO != 0
- /*
-
-
-
-Cheers,
---
-Ian
-
diff --git a/usr.sbin/xntpd/patches/patch.19 b/usr.sbin/xntpd/patches/patch.19
deleted file mode 100644
index 396f16f..0000000
--- a/usr.sbin/xntpd/patches/patch.19
+++ /dev/null
@@ -1,599 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa08047; 17 Feb 94 15:26 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa17403;
- 17 Feb 94 15:15 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA04056 (5.65c-6/7.3v-FAU); Thu, 17 Feb 1994 21:14:43 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA29721 (5.65c-6/7.3m-FAU); Thu, 17 Feb 1994 21:14:39 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402172014.AA29721@faui43.informatik.uni-erlangen.de>
-Subject: Re: Beep, beep, beep
-To: Mills@udel.edu
-Date: Thu, 17 Feb 94 21:14:33 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de,
- Paul_Vixie@corpmis.sjc.hw.sony.com, Piete.Brooks@cl.cam.ac.uk
-In-Reply-To: <9402171155.aa07032@huey.udel.edu>; from "Mills@udel.edu" at Feb 17, 94 11:55 am
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Guys,
-
-> Trouble with HAVE_BSD_TTYS on a VAX
-
-> ### creating NTP library
-> cc -O -DDES -DXNTP_LITTLE_ENDIAN -DSYS_VAX -DDEBUG -DREFCLOCK -I../include -c atoint.c
-> "../include/ntp_machine.h", line 570: syntax error
-Yupp, nit TTY define set.
-
-> "atoint.c", line 12: redeclaration of ival
-> "atoint.c", line 13: syntax error
-> ...
-
-Well, I guess the trouble is more that none of the tty defines was
-defined. For the sake of completeness i have added the tty defines to
-(hopefully) all machine/* files. Some configurations were unknown to
-me so I assumed HAVE_BSD_TTYS. Would be nice if someone could run
-the whole suite 8-).
-I have put the tty defines into the machine files so that the
-refconf scripts can pick up the define without having to run the
-preprocessor to dig out the configuration.
-Hope this works.
-
-diff -c include/ntp_machine.h:1.1.1.13 include/ntp_machine.h:1.30
-*** include/ntp_machine.h:1.1.1.13 Thu Feb 17 20:17:59 1994
---- include/ntp_machine.h Thu Feb 17 20:17:59 1994
-***************
-*** 44,54 ****
- WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
- NTP_POSIX_SOURCE was set but can't. The
- posix tty driver is too restrictive on most systems.
-! It defined if you define STREAMS.
-
- HAVE_SYSV_TTYS - Use SYSV termio.h
- HAVE_BSD_TTYS - Use BSD stty.h
-- HAVE_TERMIOS - Use POSIX termios.h
-
- THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
- kernel mucking.
---- 44,59 ----
- WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
- NTP_POSIX_SOURCE was set but can't. The
- posix tty driver is too restrictive on most systems.
-! It is defined if you define STREAMS.
-
-+ We do not put these defines in the ntp_machine.h as some systems
-+ offer multiple interfaces and refclock configuration likes to
-+ peek into the configuration defines for tty model restrictions.
-+ Thus all tty definitions should be in the files in the machines directory.
-+
-+ HAVE_TERMIOS - Use POSIX termios.h
- HAVE_SYSV_TTYS - Use SYSV termio.h
- HAVE_BSD_TTYS - Use BSD stty.h
-
- THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
- kernel mucking.
-***************
-*** 296,302 ****
- #define FORCE_NTPDATE_STEP
- #define RETSIGTYPE void
- #define HAVE_ATT_SETPGRP
-- #define HAVE_BSD_TTYS
- #define LOG_NTP LOG_LOCAL1
- #define HAVE_SIGNALED_IO
- #define NTP_NEED_BOPS
---- 301,306 ----
-***************
-*** 352,359 ****
- #ifndef STR_SYSTEM
- #define STR_SYSTEM "UNIX/BSDI"
- #endif
-- #define HAVE_BSD_TTYS
-- #define HAVE_TERMIOS
- #endif
-
- /*
---- 356,361 ----
-***************
-*** 441,449 ****
- */
- #if defined(SYS_PTX)
- #define NO_SIGNED_CHAR_DECL
-- #ifndef HAVE_SYSV_TTYS
-- #define HAVE_SYSV_TTYS
-- #endif
- #define STREAMS_TLI
- #define HAVE_ATT_SETPGRP
- #define HAVE_SIGNALED_IO
---- 443,448 ----
-***************
-*** 528,534 ****
- #define HAVE_BSD_NICE
- #define NOKMEM
- #define HAVE_SIGNALED_IO
-- #define HAVE_BSD_TTYS
- #define NTP_SYSCALLS_STD
- #define USE_PROTOTYPES
- #define UDP_WILDCARD_DELIVERY
---- 527,532 ----
-***************
-*** 565,570 ****
---- 563,582 ----
- && !defined(HAVE_NO_NICE)
- ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
- #endif
-+
-+ /*
-+ * use only one tty model - no use in initialising
-+ * a tty in three ways
-+ * HAVE_TERMIOS is preferred over HAVE_SYSV_TTYS over HAVE_BSD_TTYS
-+ */
-+ #ifdef HAVE_TERMIOS
-+ #undef HAVE_BSD_TTYS
-+ #undef HAVE_SYSV_TTYS
-+ #endif
-+
-+ #ifdef HAVE_SYSV_TTYS
-+ #undef HAVE_BSD_TTYS
-+ #endif
-
- #if !defined(HAVE_SYSV_TTYS) \
- && !defined(HAVE_BSD_TTYS) \
-diff -c machines/aux2:1.1.1.2 machines/aux2:1.4
-*** machines/aux2:1.1.1.2 Thu Feb 17 20:19:50 1994
---- machines/aux2 Thu Feb 17 20:19:50 1994
-***************
-*** 1,6 ****
- RANLIB= true # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_AUX2
- AUTHDEFS= -DDES -DMD5 -DFASTMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= true # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_AUX2 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5 -DFASTMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/aux3:1.1.1.2 machines/aux3:1.4
-*** machines/aux3:1.1.1.2 Thu Feb 17 20:19:52 1994
---- machines/aux3 Thu Feb 17 20:19:52 1994
-***************
-*** 1,6 ****
- RANLIB= true # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_AUX3
- AUTHDEFS= -DDES -DMD5 -DFASTMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= true # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_AUX3 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5 -DFASTMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/bsdi:1.1.1.4 machines/bsdi:1.6
-*** machines/bsdi:1.1.1.4 Thu Feb 17 20:19:53 1994
---- machines/bsdi Thu Feb 17 20:19:53 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_BSDI
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lkvm
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_BSDI -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lkvm
-diff -c machines/convexos10:1.1.1.2 machines/convexos10:1.3
-*** machines/convexos10:1.1.1.2 Thu Feb 17 20:19:54 1994
---- machines/convexos10 Thu Feb 17 20:19:54 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_CONVEXOS10
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- RESLIB=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_CONVEXOS10 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- RESLIB=
-diff -c machines/convexos9:1.1.1.2 machines/convexos9:1.3
-*** machines/convexos9:1.1.1.2 Thu Feb 17 20:19:55 1994
---- machines/convexos9 Thu Feb 17 20:19:56 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_CONVEXOS9
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- RESLIB=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_CONVEXOS9 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- RESLIB=
-diff -c machines/decosf1:1.1.1.2 machines/decosf1:1.4
-*** machines/decosf1:1.1.1.2 Thu Feb 17 20:19:57 1994
---- machines/decosf1 Thu Feb 17 20:19:57 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSTREAM -DSYS_DECOSF1
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSTREAM -DSYS_DECOSF1 -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/dell.svr4:1.1.1.1 machines/dell.svr4:1.2
-*** machines/dell.svr4:1.1.1.1 Thu Feb 17 20:19:58 1994
---- machines/dell.svr4 Thu Feb 17 20:19:58 1994
-***************
-*** 1,7 ****
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SVR4
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,7 ----
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SVR4 -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/domainos:1.1.1.1 machines/domainos:1.2
-*** machines/domainos:1.1.1.1 Thu Feb 17 20:19:59 1994
---- machines/domainos Thu Feb 17 20:19:59 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_DOMAINOS -D_INCLUDE_BSD_SOURCE -D_INCLUDE_XOPEN_SOURCE -D_INCLUDE_POSIX_SOURCE -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/i386:1.1.1.2 machines/i386:1.3
-*** machines/i386:1.1.1.2 Thu Feb 17 20:20:04 1994
---- machines/i386 Thu Feb 17 20:20:05 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_I386
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_I386 -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/i386svr4:1.1.1.3 machines/i386svr4:1.4
-*** machines/i386svr4:1.1.1.3 Thu Feb 17 20:20:05 1994
---- machines/i386svr4 Thu Feb 17 20:20:05 1994
-***************
-*** 1,7 ****
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,7 ----
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/mips:1.1.1.2 machines/mips:1.3
-*** machines/mips:1.1.1.2 Thu Feb 17 20:20:10 1994
---- machines/mips Thu Feb 17 20:20:10 1994
-***************
-*** 1,7 ****
- #RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
- DEFS=
-! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lmld
- RESLIB=
---- 1,7 ----
- #RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
- DEFS=
-! AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lmld
- RESLIB=
-diff -c machines/next:1.1.1.1 machines/next:1.2
-*** machines/next:1.1.1.1 Thu Feb 17 20:20:12 1994
---- machines/next Thu Feb 17 20:20:13 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib -c -s
- DEFS= -DSYS_NEXT
-! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
---- 1,6 ----
- RANLIB= ranlib -c -s
- DEFS= -DSYS_NEXT
-! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
-diff -c machines/sequent:1.1.1.3 machines/sequent:1.4
-*** machines/sequent:1.1.1.3 Thu Feb 17 20:20:14 1994
---- machines/sequent Thu Feb 17 20:20:14 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DHAVE_READ_KMEM -DSYS_SEQUENT -DHAVE_BSD_TTYS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/sinix-m:1.1.1.2 machines/sinix-m:1.5
-*** machines/sinix-m:1.1.1.2 Thu Feb 17 20:20:15 1994
---- machines/sinix-m Thu Feb 17 20:20:15 1994
-***************
-*** 1,6 ****
- RANLIB= :
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_SINIXM
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
---- 1,6 ----
- RANLIB= :
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_SINIXM -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
-diff -c machines/sony:1.1.1.2 machines/sony:1.3
-*** machines/sony:1.1.1.2 Thu Feb 17 20:20:16 1994
---- machines/sony Thu Feb 17 20:20:16 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SONY
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lmld
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_SONY -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS= -lmld
-diff -c machines/svr4:1.1.1.4 machines/svr4:1.4
-*** machines/svr4:1.1.1.4 Thu Feb 17 20:20:20 1994
---- machines/svr4 Thu Feb 17 20:20:20 1994
-***************
-*** 1,6 ****
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
-! DEFS= -DSYS_SVR4 -DSTREAMS_TLI
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS=
- DAEMONLIBS= -lnet -lnsl -lsocket -lelf
---- 1,6 ----
- SHELL= /bin/sh
- RANLIB= ls # ar does the work of ranlib under System V
-! DEFS= -DSYS_SVR4 -DSTREAMS_TLI -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS=
- DAEMONLIBS= -lnet -lnsl -lsocket -lelf
-diff -c machines/vax:1.1.1.2 machines/vax:1.3
-*** machines/vax:1.1.1.2 Thu Feb 17 20:20:23 1994
---- machines/vax Thu Feb 17 20:20:23 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_VAX
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
---- 1,6 ----
- RANLIB= ranlib
- DEFS_LOCAL= -DREFCLOCK
-! DEFS= -DSYS_VAX -DHAVE_BSD_TTYS
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
-RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v
-retrieving revision 1.1.1.2
-retrieving revision 3.3
-diff -c -r1.1.1.2 -r3.3
-*** parse/README.new_clocks:1.1.1.2 1994/02/12 09:53:48
---- parse/README.new_clocks 1994/02/17 20:09:58
-***************
-*** 1,7 ****
-! Here is an attempt to scetch out what you need to do in order to
- add another clock to the parse driver:
-
-! Prerequsites:
- - Does the system you want the clock connect to have
- termio.h or termios.h ? (You need that for the parse driver)
-
---- 1,7 ----
-! Here is an attempt to sketch out what you need to do in order to
- add another clock to the parse driver:
-
-! Prerequisites:
- - Does the system you want the clock connect to have
- termio.h or termios.h ? (You need that for the parse driver)
-
-***************
-*** 32,38 ****
- PARSEB_ANNOUNCE switch time zone warning (informational only)
- PARSEB_POWERUP no synchronisation - clock confused (must set then)
- PARSEB_NOSYNC timecode currently not confirmed (must set then)
-! usually on reception error when the is still a
- chance the the generated time is still ok.
-
- PARSEB_DST DST in effect (informational only)
---- 32,38 ----
- PARSEB_ANNOUNCE switch time zone warning (informational only)
- PARSEB_POWERUP no synchronisation - clock confused (must set then)
- PARSEB_NOSYNC timecode currently not confirmed (must set then)
-! usually on reception error when there is still a
- chance the the generated time is still ok.
-
- PARSEB_DST DST in effect (informational only)
-***************
-*** 53,59 ****
- them for examples. The basic structure is:
-
- struct clockformat <yourclock>_format = {
-! lots of field for you to fill out (see below)
- };
-
- static cvt_<yourclock>()
---- 53,59 ----
- them for examples. The basic structure is:
-
- struct clockformat <yourclock>_format = {
-! lots of fields for you to fill out (see below)
- };
-
- static cvt_<yourclock>()
-***************
-*** 122,132 ****
- file with the time code conversion. See the examples and pick a clock
- closest to yours and tweak the code to match your clock.
-
-! In order to make your clk_*.c file usable a referenc to the clockformat
- structure must be put into parse_conf.c.
-
--
--
- TTY setup and initialisation/configuration will be done in
- xntpd/refclock_parse.c
-
---- 122,130 ----
- file with the time code conversion. See the examples and pick a clock
- closest to yours and tweak the code to match your clock.
-
-! In order to make your clk_*.c file usable a reference to the clockformat
- structure must be put into parse_conf.c.
-
- TTY setup and initialisation/configuration will be done in
- xntpd/refclock_parse.c
-
-***************
-*** 135,141 ****
- termio*.h c_cflag macros.
-
- - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
-! (allocates a new "IP" address - see comments)
- (see all the other clocks for example)
- struct clockinfo
- {
---- 133,139 ----
- termio*.h c_cflag macros.
-
- - in xntpd/refclock_parse.c fill out a new the struct clockinfo element
-! (that allocates a new "IP" address - see comments)
- (see all the other clocks for example)
- struct clockinfo
- {
-***************
-*** 188,199 ****
-
-
- Well, this is very sketchy, i know. But I hope it helps a little bit.
-! The best way is to look which clock comes closet to your and tweak that
- code.
-! Two sorts of clocks are used with parse. Clocks that automatically sent
-! thier time code (once a second) do not nee entries in the poll routines because
-! they sent the data all the time. The second sort are the clocks that need a
-! command sent to then in order to reply with a time code (like the Trimble
- clock).
-
- For questions: kardel@informatik.uni-erlangen.de. Please include
---- 186,197 ----
-
-
- Well, this is very sketchy, i know. But I hope it helps a little bit.
-! The best way is to look which clock comes closest to your and tweak that
- code.
-! Two sorts of clocks are used with parse. Clocks that automatically send
-! their time code (once a second) do not need entries in the poll routines because
-! they send the data all the time. The second sort are the clocks that need a
-! command sent to them in order to reply with a time code (like the Trimble
- clock).
-
- For questions: kardel@informatik.uni-erlangen.de. Please include
-RCS file: /src/NTP/REPOSITORY/v3/parse/README.parse_clocks,v
-retrieving revision 1.1.1.1
-retrieving revision 3.2
-diff -c -r1.1.1.1 -r3.2
-*** parse/README.parse_clocks:1.1.1.1 1994/01/01 00:00:00
---- parse/README.parse_clocks 1994/02/17 20:10:02
-***************
-*** 1,4 ****
-! The parse driver currently supports several clock with different
- query mechanisms. In order for you to find a sample that might be
- similar to a clock you might want to integrate into parse i'll sum
- up the major features of the clocks (this information is distributed
---- 1,4 ----
-! The parse driver currently supports several clocks with different
- query mechanisms. In order for you to find a sample that might be
- similar to a clock you might want to integrate into parse i'll sum
- up the major features of the clocks (this information is distributed
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.2 b/usr.sbin/xntpd/patches/patch.2
deleted file mode 100644
index 50a10235..0000000
--- a/usr.sbin/xntpd/patches/patch.2
+++ /dev/null
@@ -1,129 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa12171; 26 Jan 94 17:04 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa15368;
- 26 Jan 94 17:00 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA17953 (5.65c-6/7.3v-FAU); Wed, 26 Jan 1994 23:00:40 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA29710 (5.65c-6/7.3m-FAU); Wed, 26 Jan 1994 23:00:37 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199401262200.AA29710@faui43.informatik.uni-erlangen.de>
-Subject: Re: Solaribum
-To: Mills@udel.edu
-Date: Wed, 26 Jan 94 23:00:31 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
- Paul_Vixie@corpmis.sjc.hw.sony.com
-In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
-X-Mailer: ELM [version 2.3 PL11]
-
-
-Sorry, guys - i tripped over a backward compatibility
-variable. Thus the second patch:
-
-diff -c include/ntp_control.h:3.6 include/ntp_control.h:3.7
-*** include/ntp_control.h:3.6 Wed Jan 26 22:57:52 1994
---- include/ntp_control.h Wed Jan 26 22:57:52 1994
-***************
-*** 204,210 ****
- #define CP_SENT 32
- #define CP_FILTERROR 33
- #define CP_FLASH 34
-! #define CP_VARLIST 35
-
- #define CP_MAXCODE CP_VARLIST
-
---- 204,211 ----
- #define CP_SENT 32
- #define CP_FILTERROR 33
- #define CP_FLASH 34
-! #define CP_DISP 35
-! #define CP_VARLIST 36
-
- #define CP_MAXCODE CP_VARLIST
-
-diff -c xntpd/ntp_control.c:3.21 xntpd/ntp_control.c:3.22
-*** xntpd/ntp_control.c:3.21 Wed Jan 26 22:58:30 1994
---- xntpd/ntp_control.c Wed Jan 26 22:58:31 1994
-***************
-*** 175,181 ****
- { CP_SENT, RO, "sent" }, /* 32 */
- { CP_FILTERROR, RO, "filterror" }, /* 33 */
- { CP_FLASH, RO, "flash" }, /* 34 */
-! { CP_VARLIST, RO, "peer_var_list" }, /* 35 */
- { 0, EOV, "" }
- };
-
---- 175,182 ----
- { CP_SENT, RO, "sent" }, /* 32 */
- { CP_FILTERROR, RO, "filterror" }, /* 33 */
- { CP_FLASH, RO, "flash" }, /* 34 */
-! { CP_DISP, PADDING,"" }, /* 35 */
-! { CP_VARLIST, RO, "peer_var_list" }, /* 36 */
- { 0, EOV, "" }
- };
-
-***************
-*** 1298,1303 ****
---- 1299,1307 ----
-
- for (k = sys_var; !(k->flags &EOV); k++)
- {
-+ if (k->flags & PADDING)
-+ continue;
-+
- i = strlen(k->text);
- if (s+i+1 >= be)
- break;
-***************
-*** 1309,1314 ****
---- 1313,1321 ----
-
- for (k = ext_sys_var; k && !(k->flags &EOV); k++)
- {
-+ if (k->flags & PADDING)
-+ continue;
-+
- ss = k->text;
- if (!ss)
- continue;
-***************
-*** 1484,1489 ****
---- 1491,1499 ----
-
- for (k = peer_var; !(k->flags &EOV); k++)
- {
-+ if (k->flags & PADDING)
-+ continue;
-+
- i = strlen(k->text);
- if (s+i+1 >= be)
- break;
-***************
-*** 1594,1599 ****
---- 1604,1612 ----
-
- for (k = clock_var; !(k->flags &EOV); k++)
- {
-+ if (k->flags & PADDING)
-+ continue;
-+
- i = strlen(k->text);
- if (s+i+1 >= be)
- break;
-***************
-*** 1605,1610 ****
---- 1618,1626 ----
-
- for (k = clock->kv_list; k && !(k->flags &EOV); k++)
- {
-+ if (k->flags & PADDING)
-+ continue;
-+
- ss = k->text;
- if (!ss)
- continue;
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.20 b/usr.sbin/xntpd/patches/patch.20
deleted file mode 100644
index 3975507..0000000
--- a/usr.sbin/xntpd/patches/patch.20
+++ /dev/null
@@ -1,1031 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa03713; 20 Feb 94 10:36 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02155;
- 20 Feb 94 10:26 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA03871 (5.65c-6/7.3v-FAU); Sun, 20 Feb 1994 16:26:26 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA04409 (5.65c-6/7.3m-FAU); Sun, 20 Feb 1994 16:26:24 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402201526.AA04409@faui43.informatik.uni-erlangen.de>
-Subject: 3.3g patches
-To: mills@udel.edu
-Date: Sun, 20 Feb 94 16:26:19 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave,
-
-here are some more patches. They fix the following:
- - nroff macros from John Line
- - parse add/delete leap second (as opposed to just add second)
- - some rcs ids
- - linux support
- - xntpd.8 leap variable documentation
-
-And here we go...
-
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/compilers/linux.gcc,v
-retrieving revision 1.2
-diff -c -r1.2 linux.gcc
-*** 1.2 1993/10/10 23:10:03
---- compilers/linux.gcc 1994/02/20 13:03:27
-***************
-*** 1,2 ****
- COMPILER= gcc -DUSE_PROTOTYPES -Wall
-! COPTS= -O6 -finline-functions -fomit-frame-pointer
---- 1,2 ----
- COMPILER= gcc -DUSE_PROTOTYPES -Wall
-! COPTS= -O2 -finline-functions -fomit-frame-pointer
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/notes.txt,v
-retrieving revision 1.3
-diff -c -r1.3 notes.txt
-*** 1.3 1993/08/24 21:24:55
---- doc/notes.txt 1994/02/20 11:57:24
-***************
-*** 785,791 ****
- with mode-6 messages is set the leap-second warning bits) and the ntpq
- program provides generic support for the latter. The leap bits that can be
- set in the leap_warning variable (up to one month ahead) and in the
-! leap_indication variable have a slighly different encoding than the
- usual interpretation:
-
- Value Action
---- 785,791 ----
- with mode-6 messages is set the leap-second warning bits) and the ntpq
- program provides generic support for the latter. The leap bits that can be
- set in the leap_warning variable (up to one month ahead) and in the
-! leap_indication variable have a slightly different encoding than the
- usual interpretation:
-
- Value Action
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/ntpdate.8,v
-retrieving revision 3.0
-diff -c -r3.0 ntpdate.8
-*** 3.0 1992/08/14 15:11:44
---- doc/ntpdate.8 1994/02/20 11:27:53
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/ntpq.8,v
-retrieving revision 3.3
-diff -c -r3.3 ntpq.8
-*** 3.3 1993/10/22 14:26:57
---- doc/ntpq.8 1994/02/20 11:27:55
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/ntptrace.8,v
-retrieving revision 1.1.1.2
-diff -c -r1.1.1.2 ntptrace.8
-*** 1.1.1.2 1993/01/26 18:55:43
---- doc/ntptrace.8 1994/02/20 11:27:58
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/tickadj.8,v
-retrieving revision 3.0
-diff -c -r3.0 tickadj.8
-*** 3.0 1992/08/14 15:11:53
---- doc/tickadj.8 1994/02/20 11:28:00
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/xntpd.8,v
-retrieving revision 3.24
-diff -c -r3.24 xntpd.8
-*** 3.24 1994/02/02 16:42:25
---- doc/xntpd.8 1994/02/20 11:57:28
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-***************
-*** 374,380 ****
- Certain changes can be made to the
- .I xntpd
- server via mode 6 control messages, in particular the setting of
-! leap second indications in a server with a radio clock. The
- .B controlkey
- statement specifies an encription key number to be used for authenticating
- such messages. Omitting this statement will cause control messages
---- 374,381 ----
- Certain changes can be made to the
- .I xntpd
- server via mode 6 control messages, in particular the setting of
-! leap second indications in a server with a radio clock.
-! The
- .B controlkey
- statement specifies an encription key number to be used for authenticating
- such messages. Omitting this statement will cause control messages
-***************
-*** 1401,1406 ****
---- 1402,1432 ----
- If flag3 is set, then the sample information is dumped.
- If flag4 is set, then the input data is smoothed, and all data
- points are used.
-+ .PP
-+ .SH VARIABLES
-+ Most variables used by the NTP protocol can be examined with the xntpdc
-+ (mode 7 messages) and the ntpq (mode 6 messages). Currently very few variables
-+ can be modified via mode 6 messages. These variables are either created with the
-+ .I setvar
-+ directive or the leap warning variables. The leap warning bits that can be
-+ set in the
-+ .B leapwarning
-+ variable (up to one month ahead). Both, the
-+ .B leapwarning and in the
-+ .B leapindication
-+ variable, have a slightly different encoding than the usual
-+ .B leap
-+ bits interpretation:
-+ .P
-+ .Ip 00 8
-+ The daemon passes the leap bits of its synchronisation source (usual mode of
-+ operation).
-+ .Ip 01/10 8
-+ A leap second is added/deleted (operator forced leap second).
-+ .Ip 11 8
-+ Leap information from the sychronisation source is ignored (thus LEAP_NOWARNING
-+ is passed on).
-+ .PP
- .SH FILES
- .Ip /etc/ntp.conf 20
- the default name of the configuration file
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/doc/xntpdc.8,v
-retrieving revision 3.4
-diff -c -r3.4 xntpdc.8
-*** 3.4 1994/02/02 15:54:14
---- doc/xntpdc.8 1994/02/20 11:28:06
-***************
-*** 20,32 ****
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Bell System Logo is used as a dummy character.
- '''
-! .tr \(bs-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(bs-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(bs\h'-12u'\(bs\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(bs\h'-12u'\(bs\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
---- 20,32 ----
- '''
- ''' Set up \*(-- to give an unbreakable dash;
- ''' string Tr holds user defined translation string.
-! ''' Greek uppercase omega is used as a dummy character.
- '''
-! .tr \(*W-|\(bv\*(Tr
- .ie n \{\
-! .ds -- \(*W-
-! .if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
-! .if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
- .ds L" ""
- .ds R" ""
- .ds L' '
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/hints/linux,v
-retrieving revision 1.2
-diff -c -r1.2 linux
-*** 1.2 1994/02/01 23:19:26
---- hints/linux 1994/02/20 11:26:44
-***************
-*** 1,5 ****
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.8 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
---- 1,5 ----
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
-***************
-*** 7,9 ****
---- 7,14 ----
- versions of the kernel or libc, or have any other question not covered in the
- READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
- free to ask me (duwe@informatik.uni-erlangen.de)
-+
-+ [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
-+ binary compiled under the appropriate kernel. Get this one from
-+ tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
-+ puplic relase after 4.5.20]
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/include/parse.h,v
-retrieving revision 3.14
-diff -c -r3.14 parse.h
-*** 3.14 1994/01/28 14:03:35
---- include/parse.h 1994/02/20 13:04:26
-***************
-*** 81,115 ****
- /*
- * state flags
- */
-! #define PARSEB_ANNOUNCE 0x0001 /* switch time zone warning (DST switch) */
-! #define PARSEB_POWERUP 0x0002 /* no synchronisation */
-! #define PARSEB_NOSYNC 0x0004 /* timecode currently not confirmed */
-! #define PARSEB_DST 0x0008 /* DST in effect */
-! #define PARSEB_UTC 0x0010 /* UTC time */
-! #define PARSEB_LEAP 0x0020 /* LEAP warning (1 hour prior to occurence) */
-! #define PARSEB_ALTERNATE 0x0040 /* alternate antenna used */
-! #define PARSEB_POSITION 0x0080 /* position available */
-! #define PARSEB_LEAPSECOND 0x0100 /* actual leap second */
-!
-! #define PARSEB_S_LEAP 0x0200 /* supports LEAP */
-! #define PARSEB_S_ANTENNA 0x0400 /* supports antenna information */
-! #define PARSEB_S_PPS 0x0800 /* supports PPS time stamping */
-! #define PARSEB_S_POSITION 0x1000 /* supports position information (GPS) */
-
-! #define PARSEB_TIMECODE 0x2000 /* valid time code sample */
-! #define PARSEB_PPS 0x4000 /* valid PPS sample */
-
- #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\
-! PARSEB_UTC|PARSEB_LEAP|PARSEB_ALTERNATE|PARSEB_S_LEAP|\
- PARSEB_S_LOCATION|PARSEB_TIMECODE)
-
-! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP)
-! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC)
-! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0)
-! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE)
-! #define PARSE_DST(x) ((x) & PARSEB_DST)
- #define PARSE_UTC(x) ((x) & PARSEB_UTC)
-! #define PARSE_LEAP(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP))
- #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE)
- #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND))
-
---- 81,135 ----
- /*
- * state flags
- */
-! #define PARSEB_POWERUP 0x00000001 /* no synchronisation */
-! #define PARSEB_NOSYNC 0x00000002 /* timecode currently not confirmed */
-
-! /*
-! * time zone information
-! */
-! #define PARSEB_ANNOUNCE 0x00000010 /* switch time zone warning (DST switch) */
-! #define PARSEB_DST 0x00000020 /* DST in effect */
-! #define PARSEB_UTC 0x00000040 /* UTC time */
-!
-! /*
-! * leap information
-! */
-! #define PARSEB_LEAPDEL 0x00000100 /* LEAP deletion warning */
-! #define PARSEB_LEAPADD 0x00000200 /* LEAP addition warning */
-! #define PARSEB_LEAPS 0x00000300 /* LEAP warnings */
-! #define PARSEB_LEAPSECOND 0x00000400 /* actual leap second */
-! /*
-! * optional status information
-! */
-! #define PARSEB_ALTERNATE 0x00001000 /* alternate antenna used */
-! #define PARSEB_POSITION 0x00002000 /* position available */
-!
-! /*
-! * feature information
-! */
-! #define PARSEB_S_LEAP 0x00010000 /* supports LEAP */
-! #define PARSEB_S_ANTENNA 0x00020000 /* supports antenna information */
-! #define PARSEB_S_PPS 0x00040000 /* supports PPS time stamping */
-! #define PARSEB_S_POSITION 0x00080000 /* supports position information (GPS) */
-!
-! /*
-! * time stamp availality
-! */
-! #define PARSEB_TIMECODE 0x10000000 /* valid time code sample */
-! #define PARSEB_PPS 0x20000000 /* valid PPS sample */
-
- #define PARSE_TCINFO (PARSEB_ANNOUNCE|PARSEB_POWERUP|PARSEB_NOSYNC|PARSEB_DST|\
-! PARSEB_UTC|PARSEB_LEAPS|PARSEB_ALTERNATE|PARSEB_S_LEAP|\
- PARSEB_S_LOCATION|PARSEB_TIMECODE)
-
-! #define PARSE_POWERUP(x) ((x) & PARSEB_POWERUP)
-! #define PARSE_NOSYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == PARSEB_NOSYNC)
-! #define PARSE_SYNC(x) (((x) & (PARSEB_POWERUP|PARSEB_NOSYNC)) == 0)
-! #define PARSE_ANNOUNCE(x) ((x) & PARSEB_ANNOUNCE)
-! #define PARSE_DST(x) ((x) & PARSEB_DST)
- #define PARSE_UTC(x) ((x) & PARSEB_UTC)
-! #define PARSE_LEAPADD(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPADD))
-! #define PARSE_LEAPDEL(x) (PARSE_SYNC(x) && (((x) & PARSEB_LEAPS) == PARSEB_LEAPDEL))
- #define PARSE_ALTERNATE(x) ((x) & PARSEB_ALTERNATE)
- #define PARSE_LEAPSECOND(x) (PARSE_SYNC(x) && ((x) & PARSEB_LEAP_SECOND))
-
-***************
-*** 118,126 ****
- #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS)
- #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION)
-
-! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE)
- #define PARSE_PPS(x) ((x) & PARSEB_PPS)
-! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION)
-
- /*
- * operation flags - some are also fudge flags
---- 138,146 ----
- #define PARSE_S_PPS(x) ((x) & PARSEB_S_PPS)
- #define PARSE_S_POSITION(x) ((x) & PARSEB_S_POSITION)
-
-! #define PARSE_TIMECODE(x) ((x) & PARSEB_TIMECODE)
- #define PARSE_PPS(x) ((x) & PARSEB_PPS)
-! #define PARSE_POSITION(x) ((x) & PARSEB_POSITION)
-
- /*
- * operation flags - some are also fudge flags
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/README.new_clocks,v
-retrieving revision 3.3
-diff -c -r3.3 README.new_clocks
-*** 3.3 1994/02/17 20:09:58
---- parse/README.new_clocks 1994/02/20 13:04:34
-***************
-*** 37,43 ****
-
- PARSEB_DST DST in effect (informational only)
- PARSEB_UTC timecode contains UTC time (informational only)
-! PARSEB_LEAP LEAP warning (prior to leap happening - must set when imminent)
- PARSEB_ALTERNATE backup transmitter (informational only)
- PARSEB_POSITION geographic position available (informational only)
- PARSEB_LEAPSECOND actual leap second (this time code is the leap
---- 37,46 ----
-
- PARSEB_DST DST in effect (informational only)
- PARSEB_UTC timecode contains UTC time (informational only)
-! PARSEB_LEAPADD LEAP addition warning (prior to leap happening - must set when imminent)
-! also used for time code that do not encode the
-! direction (as this is currently the default).
-! PARSEB_LEAPDEL LEAP deletion warning (prior to leap happening - must set when imminent)
- PARSEB_ALTERNATE backup transmitter (informational only)
- PARSEB_POSITION geographic position available (informational only)
- PARSEB_LEAPSECOND actual leap second (this time code is the leap
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v
-retrieving revision 3.13
-diff -c -r3.13 clk_meinberg.c
-*** 3.13 1994/02/02 17:45:21
---- parse/clk_meinberg.c 1994/02/20 13:04:37
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
- *
-! * clk_meinberg.c,v 3.13 1994/02/02 17:45:21 kardel Exp
- *
- * Meinberg clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp
- *
-! * clk_meinberg.c,v 3.14 1994/02/20 13:04:37 kardel Exp
- *
- * Meinberg clock support
- *
-***************
-*** 284,291 ****
- clock->flags |= PARSEB_S_LEAP;
- clock->flags |= PARSEB_S_ANTENNA;
-
- if (f[4] == 'A')
-! clock->flags |= PARSEB_LEAP;
-
- if (f[5] == 'R')
- clock->flags |= PARSEB_ALTERNATE;
---- 284,296 ----
- clock->flags |= PARSEB_S_LEAP;
- clock->flags |= PARSEB_S_ANTENNA;
-
-+ /*
-+ * DCF77 does not encode the direction -
-+ * so we take the current default -
-+ * earth slowing down
-+ */
- if (f[4] == 'A')
-! clock->flags |= PARSEB_LEAPADD;
-
- if (f[5] == 'R')
- clock->flags |= PARSEB_ALTERNATE;
-***************
-*** 394,402 ****
-
- /*
- * oncoming leap second
- */
- if (f[5] == 'A')
-! clock->flags |= PARSEB_LEAP;
-
- /*
- * this is the leap second
---- 399,410 ----
-
- /*
- * oncoming leap second
-+ * data format does not (yet) specify whether
-+ * to add or to delete a second - thus we
-+ * pick the current default
- */
- if (f[5] == 'A')
-! clock->flags |= PARSEB_LEAPADD;
-
- /*
- * this is the leap second
-***************
-*** 413,419 ****
- /*
- * History:
- *
-! * clk_meinberg.c,v
- * Revision 3.13 1994/02/02 17:45:21 kardel
- * rcs ids fixed
- *
---- 421,430 ----
- /*
- * History:
- *
-! * clk_meinberg.c,v
-! * Revision 3.14 1994/02/20 13:04:37 kardel
-! * parse add/delete second support
-! *
- * Revision 3.13 1994/02/02 17:45:21 kardel
- * rcs ids fixed
- *
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v
-retrieving revision 3.11
-diff -c -r3.11 clk_rawdcf.c
-*** 3.11 1994/02/02 17:45:23
---- parse/clk_rawdcf.c 1994/02/20 13:04:39
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
- *
-! * clk_rawdcf.c,v 3.11 1994/02/02 17:45:23 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
- *
-! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
-***************
-*** 278,284 ****
- clock->flags |= PARSEB_ANNOUNCE;
-
- if (ext_bf(buffer, DCF_A2, dcfparam->zerobits))
-! clock->flags |= PARSEB_LEAP;
-
- if (ext_bf(buffer, DCF_R, dcfparam->zerobits))
- clock->flags |= PARSEB_ALTERNATE;
---- 278,284 ----
- clock->flags |= PARSEB_ANNOUNCE;
-
- if (ext_bf(buffer, DCF_A2, dcfparam->zerobits))
-! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */
-
- if (ext_bf(buffer, DCF_R, dcfparam->zerobits))
- clock->flags |= PARSEB_ALTERNATE;
-***************
-*** 528,534 ****
- /*
- * History:
- *
-! * clk_rawdcf.c,v
- * Revision 3.11 1994/02/02 17:45:23 kardel
- * rcs ids fixed
- *
---- 528,537 ----
- /*
- * History:
- *
-! * clk_rawdcf.c,v
-! * Revision 3.12 1994/02/20 13:04:39 kardel
-! * parse add/delete second support
-! *
- * Revision 3.11 1994/02/02 17:45:23 kardel
- * rcs ids fixed
- *
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v
-retrieving revision 3.12
-diff -c -r3.12 clk_schmid.c
-*** 3.12 1994/02/02 17:45:25
---- parse/clk_schmid.c 1994/02/20 13:04:41
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
- *
-! * clk_schmid.c,v 3.12 1994/02/02 17:45:25 kardel Exp
- *
- * Schmid clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp
- *
-! * clk_schmid.c,v 3.13 1994/02/20 13:04:41 kardel Exp
- *
- * Schmid clock support
- *
-***************
-*** 152,158 ****
-
- if (buffer[8] & WS_LEAP)
- {
-! clock->flags |= PARSEB_LEAP;
- }
- }
-
---- 152,158 ----
-
- if (buffer[8] & WS_LEAP)
- {
-! clock->flags |= PARSEB_LEAPADD; /* default: DCF77 data format deficiency */
- }
- }
-
-***************
-*** 167,173 ****
- /*
- * History:
- *
-! * clk_schmid.c,v
- * Revision 3.12 1994/02/02 17:45:25 kardel
- * rcs ids fixed
- *
---- 167,176 ----
- /*
- * History:
- *
-! * clk_schmid.c,v
-! * Revision 3.13 1994/02/20 13:04:41 kardel
-! * parse add/delete second support
-! *
- * Revision 3.12 1994/02/02 17:45:25 kardel
- * rcs ids fixed
- *
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
-retrieving revision 3.47
-diff -c -r3.47 refclock_parse.c
-*** 3.47 1994/02/02 17:44:30
---- xntpd/refclock_parse.c 1994/02/20 13:26:00
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
- *
-! * refclock_parse.c,v 3.47 1994/02/02 17:44:30 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
-! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 129,135 ****
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp";
- #endif
-
- /**===========================================================================
---- 129,135 ----
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
- #endif
-
- /**===========================================================================
-***************
-*** 1706,1712 ****
- { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
- { PARSEB_DST, "DST" },
- { PARSEB_UTC, "UTC DISPLAY" },
-! { PARSEB_LEAP, "LEAP WARNING" },
- { PARSEB_LEAPSECOND, "LEAP SECOND" },
- { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
- { PARSEB_TIMECODE, "TIME CODE" },
---- 1706,1713 ----
- { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
- { PARSEB_DST, "DST" },
- { PARSEB_UTC, "UTC DISPLAY" },
-! { PARSEB_LEAPADD, "LEAP ADD WARNING" },
-! { PARSEB_LEAPDEL, "LEAP DELETE WARNING" },
- { PARSEB_LEAPSECOND, "LEAP SECOND" },
- { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
- { PARSEB_TIMECODE, "TIME CODE" },
-***************
-*** 2539,2547 ****
- parse_leap()
- {
- /*
-- * PARSE does encode a leap warning... we are aware but not afraid of that
-- * as long as we get a little help for the direction from the operator until
- * PARSE encodes the LEAP correction direction.
- */
- }
-
---- 2540,2549 ----
- parse_leap()
- {
- /*
- * PARSE encodes the LEAP correction direction.
-+ * For timecodes that do not pass on the leap correction direction
-+ * the default PARSEB_LEAPADD must be used. It may then be modified
-+ * with a fudge flag (flag2).
- */
- }
-
-***************
-*** 2821,2827 ****
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---- 2823,2829 ----
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
-***************
-*** 3245,3258 ****
- }
- else
- {
-! if (PARSE_LEAP(parsetime->parse_state))
- {
- leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
- }
- else
-! {
-! leap = LEAP_NOWARNING;
-! }
- }
-
- refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
---- 3247,3270 ----
- }
- else
- {
-! if (PARSE_LEAPADD(parsetime->parse_state))
- {
-+ /*
-+ * we pick this state also for time code that pass leap warnings
-+ * without direction information (as earth is currently slowing
-+ * down).
-+ */
- leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
- }
- else
-! if (PARSE_LEAPDEL(parsetime->parse_state))
-! {
-! leap = LEAP_DELSECOND;
-! }
-! else
-! {
-! leap = LEAP_NOWARNING;
-! }
- }
-
- refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
-***************
-*** 3395,3401 ****
- /*
- * History:
- *
-! * refclock_parse.c,v
- * Revision 3.47 1994/02/02 17:44:30 kardel
- * rcs ids fixed
- *
---- 3407,3419 ----
- /*
- * History:
- *
-! * refclock_parse.c,v
-! * Revision 3.49 1994/02/20 13:26:00 kardel
-! * rcs id cleanup
-! *
-! * Revision 3.48 1994/02/20 13:04:56 kardel
-! * parse add/delete second support
-! *
- * Revision 3.47 1994/02/02 17:44:30 kardel
- * rcs ids fixed
- *
-*** parse/util/parsetest.c Sun Feb 20 15:54:11 1994
---- parse/util/parsetest.c Sun Feb 20 14:04:46 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/kernel/parsetest.c,v 3.4 1993/03/17 17:16:57 kardel Exp
- *
-! * parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp
- *
-! * parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 10,26 ****
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
-! * parsetest.c,v
-! * Revision 3.4 1993/03/17 17:16:57 kardel
-! * DEC OSF/1 ALPHA Integration - 930314
- *
-! * Revision 3.3 1993/01/18 09:24:33 kardel
-! * updated copyright conditions in conjunction with
-! * conditions set up in the COPYRIGHT file
- *
-- * Revision 3.2 1993/01/17 13:43:00 kardel
-- * 1993 initial update
-- *
- */
-
- #ifndef STREAM
---- 10,22 ----
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
-! * parsetest.c,v
-! * Revision 3.13 1994/02/20 13:04:46 kardel
-! * parse add/delete second support
- *
-! * Revision 3.12 1994/02/02 17:45:51 kardel
-! * rcs ids fixed
- *
- */
-
- #ifndef STREAM
-***************
-*** 199,205 ****
- parsetime_t parsetime;
- struct strioctl strioc;
-
-! printf("parsetest.c,v 3.10 1994/01/23 17:22:18 kardel Exp\n");
-
- while (ioctl(fd, I_POP, 0) == 0)
- ;
---- 195,201 ----
- parsetime_t parsetime;
- struct strioctl strioc;
-
-! printf("parsetest.c,v 3.13 1994/02/20 13:04:46 kardel Exp\n");
-
- while (ioctl(fd, I_POP, 0) == 0)
- ;
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v
-retrieving revision 3.16
-diff -c -r3.16 parsestreams.c
-*** 3.16 1994/02/15 22:39:50
---- parse/parsestreams.c 1994/02/20 15:18:02
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
- *
-! * parsestreams.c,v 3.16 1994/02/15 22:39:50 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
- *
-! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
-***************
-*** 16,22 ****
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp";
- #endif
-
- #include "sys/types.h"
---- 16,22 ----
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp";
- #endif
-
- #include "sys/types.h"
-***************
-*** 195,201 ****
- }
- else
- {
-! static char revision[] = "3.12";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
---- 195,201 ----
- }
- else
- {
-! static char revision[] = "3.17";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
-***************
-*** 1259,1265 ****
- /*
- * History:
- *
-! * parsestreams.c,v
- * Revision 3.16 1994/02/15 22:39:50 kardel
- * memory leak on open failure closed
- *
---- 1259,1268 ----
- /*
- * History:
- *
-! * parsestreams.c,v
-! * Revision 3.17 1994/02/20 15:18:02 kardel
-! * rcs id cleanup
-! *
- * Revision 3.16 1994/02/15 22:39:50 kardel
- * memory leak on open failure closed
- *
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.21 b/usr.sbin/xntpd/patches/patch.21
deleted file mode 100644
index 9299971..0000000
--- a/usr.sbin/xntpd/patches/patch.21
+++ /dev/null
@@ -1,54 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa25363; 23 Feb 94 18:50 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa28210;
- 23 Feb 94 18:44 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA07903 (5.65c-6/7.3v-FAU); Thu, 24 Feb 1994 00:44:18 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA19013 (5.65c-6/7.3m-FAU); Thu, 24 Feb 1994 00:44:17 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402232344.AA19013@faui43.informatik.uni-erlangen.de>
-Subject: TRAK clock
-To: mills@udel.edu
-Date: Thu, 24 Feb 94 0:44:12 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave - some obvious things about the TRAK clock:
- - please removed the 4 ^A at the end of the
- xntpd/reflock_trak.c file (email leftovers).
- - add following refclocks/rclk.TRAK file
-
-#!/bin/sh -
-CMD="$1"
-shift;
-
-. refclocks/setup
-
-case "$CMD" in
- info)
- echo " TRAK - TRAK 8810 GPS station clock"
- ;;
- check)
- if check "$RCONFIG" '$0 ~ /TRAK/'; then
- echo "TRAK - TRAK 8810 GPS station clock"
- fi
- ;;
- config)
- if check "$REFCONF" '$0 ~ /TRAK/' ||
- ( [ ! "$REFCONF" ] && query "Include TRAK 8810 GPS station clock (TRAK)" n); then
- if check "$PPSFEATURES" '$0 ~ /CD/' &&
- [ "$PPSOK" -eq 1 ] &&
- (check "$REFCONF" '$0 ~ /TRAKPPS/' ||
- ( [ ! "$REFCONF" ] && query " Use TRAK for PPS" n)); then
- echo "-DTRAKPPS" >> $RCONFIG
- else
- echo "-DTRAK" >> $RCONFIG
- fi
- fi
- ;;
-esac
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.22 b/usr.sbin/xntpd/patches/patch.22
deleted file mode 100644
index 8b4296c..0000000
--- a/usr.sbin/xntpd/patches/patch.22
+++ /dev/null
@@ -1,296 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa02110; 24 Feb 94 18:54 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa13897;
- 24 Feb 94 18:53 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA27796 (5.65c-6/7.3v-FAU); Fri, 25 Feb 1994 00:53:32 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA16114 (5.65c-6/7.3m-FAU); Fri, 25 Feb 1994 00:53:31 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199402242353.AA16114@faui43.informatik.uni-erlangen.de>
-Subject: patches (parse pps/pll control)
-To: mills@udel.edu
-Date: Fri, 25 Feb 94 0:52:59 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, here are some patches.
-
-pps pll control is nor supported by parse.
-pps output variable are readable via mode 6 messages.
-
-diff -c v3/parse/parsestreams.c:1.1.1.10 v3/parse/parsestreams.c:3.19
-*** v3/parse/parsestreams.c:1.1.1.10 Fri Feb 25 00:44:41 1994
---- v3/parse/parsestreams.c Fri Feb 25 00:44:41 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
- *
-! * parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
- *
-! * parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
-***************
-*** 16,22 ****
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.17 1994/02/20 15:18:02 kardel Exp";
- #endif
-
- #include "sys/types.h"
---- 16,22 ----
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.19 1994/02/24 16:33:54 kardel Exp";
- #endif
-
- #include "sys/types.h"
-***************
-*** 195,201 ****
- }
- else
- {
-! static char revision[] = "3.17";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
---- 195,201 ----
- }
- else
- {
-! static char revision[] = "3.19";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
-***************
-*** 1076,1081 ****
---- 1076,1086 ----
-
- #define MAXDEPTH 50 /* maximum allowed stream crawl */
-
-+ #ifdef PPS_SYNC
-+ extern hardpps();
-+ extern struct timeval time;
-+ #endif
-+
- /*
- * take external status interrupt (only CD interests us)
- */
-***************
-*** 1087,1101 ****
- register queue_t *q;
- register unsigned char zsstatus;
- register int loopcheck;
-- register unsigned char cdstate;
- register char *dname;
-
- /*
- * pick up current state
- */
- zsstatus = zsaddr->zscc_control;
-
-! if (za->za_rr0 ^ (cdstate = zsstatus & ZSRR0_CD))
- {
- timestamp_t cdevent;
- register int status;
---- 1092,1109 ----
- register queue_t *q;
- register unsigned char zsstatus;
- register int loopcheck;
- register char *dname;
-+ #ifdef PPS_SYNC
-+ register int s;
-+ register long usec;
-+ #endif
-
- /*
- * pick up current state
- */
- zsstatus = zsaddr->zscc_control;
-
-! if ((za->za_rr0 ^ zsstatus) & (ZSRR0_CD|ZSRR0_SYNC))
- {
- timestamp_t cdevent;
- register int status;
-***************
-*** 1103,1129 ****
- /*
- * CONDITIONAL external measurement support
- */
-! SET_LED(cdstate); /*
- * inconsistent with upper SET_LED, but this
- * is for oscilloscope business anyway and we
- * are just interested in edge delays in the
- * lower us range
- */
-!
- /*
- * time stamp
- */
- uniqtime(&cdevent.tv);
-!
-! TIMEVAL_USADD(&cdevent.tv, xsdelay);
-!
-! q = za->za_ttycommon.t_readq;
-
- /*
- * logical state
- */
-! status = cd_invert ? cdstate == 0 : cdstate != 0;
-
- /*
- * ok - now the hard part - find ourself
- */
---- 1111,1155 ----
- /*
- * CONDITIONAL external measurement support
- */
-! SET_LED(zsstatus & (ZSRR0_CD|ZSRR0_SYNC)); /*
- * inconsistent with upper SET_LED, but this
- * is for oscilloscope business anyway and we
- * are just interested in edge delays in the
- * lower us range
- */
-! #ifdef PPS_SYNC
-! s = splclock();
-! usec = time.tv_usec;
-! #endif
- /*
- * time stamp
- */
- uniqtime(&cdevent.tv);
-!
-! #ifdef PPS_SYNC
-! splx(s);
-! #endif
-
- /*
- * logical state
- */
-! status = cd_invert ? (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) == 0 : (zsstatus & (ZSRR0_CD|ZSRR0_SYNC)) != 0;
-
-+ #ifdef PPS_SYNC
-+ if (status)
-+ {
-+ usec = cdevent.tv.tv_usec - usec;
-+ if (usec < 0)
-+ usec += 1000000;
-+
-+ hardpps(&cdevent.tv, usec);
-+ }
-+ #endif
-+
-+ TIMEVAL_USADD(&cdevent.tv, xsdelay);
-+
-+ q = za->za_ttycommon.t_readq;
-+
- /*
- * ok - now the hard part - find ourself
- */
-***************
-*** 1179,1188 ****
- /*
- * only pretend that CD has been handled
- */
-! za->za_rr0 = za->za_rr0 & ~ZSRR0_CD | zsstatus & ZSRR0_CD;
- ZSDELAY(2);
-
-! if (!((za->za_rr0 ^ zsstatus) & ~ZSRR0_CD))
- {
- /*
- * all done - kill status indication and return
---- 1205,1214 ----
- /*
- * only pretend that CD has been handled
- */
-! za->za_rr0 = za->za_rr0 & ~(ZSRR0_CD|ZSRR0_SYNC) | zsstatus & (ZSRR0_CD|ZSRR0_SYNC);
- ZSDELAY(2);
-
-! if (!((za->za_rr0 ^ zsstatus) & ~(ZSRR0_CD|ZSRR0_SYNC)))
- {
- /*
- * all done - kill status indication and return
-***************
-*** 1260,1265 ****
---- 1286,1297 ----
- * History:
- *
- * parsestreams.c,v
-+ * Revision 3.19 1994/02/24 16:33:54 kardel
-+ * CD events can also be posted on sync flag
-+ *
-+ * Revision 3.18 1994/02/24 14:12:58 kardel
-+ * initial PPS_SYNC support version
-+ *
- * Revision 3.17 1994/02/20 15:18:02 kardel
- * rcs id cleanup
- *
-diff -c v3/xntpd/ntp_loopfilter.c:1.1.1.33 v3/xntpd/ntp_loopfilter.c:3.40
-*** v3/xntpd/ntp_loopfilter.c:1.1.1.33 Fri Feb 25 00:46:20 1994
---- v3/xntpd/ntp_loopfilter.c Fri Feb 25 00:46:21 1994
-***************
-*** 522,529 ****
---- 522,545 ----
- ntv.maxerror = sys_rootdispersion + sys_rootdelay / 2;
- ntv.esterror = sys_rootdispersion;
- ntv.time_constant = time_constant;
-+ ntv.shift = 0;
- (void)ntp_adjtime(&ntv);
- drift_comp = ntv.frequency;
-+ if (ntv.shift != 0) {
-+ char buf[128];
-+ (void) sprintf(buf, "pps_freq=%s", fptoa(ntv.ybar, 3));
-+ set_sys_var(buf, strlen(buf)+1, RO|DEF);
-+ (void) sprintf(buf, "pps_disp=%s", fptoa(ntv.disp, 3));
-+ set_sys_var(buf, strlen(buf)+1, RO|DEF);
-+ (void) sprintf(buf, "pps_interval=%ld",1 << ntv.shift);
-+ set_sys_var(buf, strlen(buf)+1, RO);
-+ (void) sprintf(buf, "pps_intervals=%ld", ntv.calcnt);
-+ set_sys_var(buf, strlen(buf)+1, RO);
-+ (void) sprintf(buf, "pps_jitterexceeded=%ld", ntv.jitcnt);
-+ set_sys_var(buf, strlen(buf)+1, RO);
-+ (void) sprintf(buf, "pps_dispersionexceeded=%ld", ntv.discnt);
-+ set_sys_var(buf, strlen(buf)+1, RO);
-+ }
- #endif /* KERNEL_PLL */
- } else {
- if (offset < 0) {
-***************
-*** 725,730 ****
---- 741,748 ----
- "loop_config: skew compensation %s too large",
- fptoa(tmp, 5));
- } else {
-+ char var[40];
-+
- drift_comp = tmp;
-
- #if defined(KERNEL_PLL)
-***************
-*** 751,756 ****
---- 769,778 ----
- syslog(LOG_NOTICE,
- "%susing kernel phase-lock loop",
- (pll_control) ? "" : "Not ");
-+ (void)sprintf(var, "kernel_pll=%s", pll_control ? "true" : "false");
-+
-+ set_sys_var(var, strlen(var)+1, RO);
-+
- #if DEBUG
- if (debug)
- printf("pll_control %d\n", pll_control);
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.23 b/usr.sbin/xntpd/patches/patch.23
deleted file mode 100644
index 5fee16f..0000000
--- a/usr.sbin/xntpd/patches/patch.23
+++ /dev/null
@@ -1,80 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa18634; 27 Feb 94 13:54 EST
-Received: from rincewind.mech.virginia.edu by louie.udel.edu id aa11711;
- 27 Feb 94 13:53 EST
-Received: from localhost (dmm0t@localhost) by rincewind.mech.virginia.edu (8.6.5/8.6.5) id NAA04646 for mills@udel.edu; Sun, 27 Feb 1994 13:53:35 -0500
-From: David Meyer <dmm0t@rincewind.mech.virginia.edu>
-Message-Id: <199402271853.NAA04646@rincewind.mech.virginia.edu>
-Subject: patches to xntpd-3.3j for NeXT
-To: mills@udel.edu
-Date: Sun, 27 Feb 1994 13:53:34 -0500 (EST)
-X-Mailer: ELM [version 2.4 PL23]
-MIME-Version: 1.0
-Content-Type: text/plain; charset=US-ASCII
-Content-Transfer-Encoding: 7bit
-Content-Length: 2043
-
-I have a couple of patches to make the 3.3j beta compile on a NeXT
-running NS3.1.
-
-The first patch just defines RETSIGTYPE. The second patch puts
-HAVE_BSD_TTYS in DEFS rather than AUTHDEFS. The last patch just fixes
-a type - using # rather than * in a comment block.
-
-*** ../orig/include/ntp_machine.h Sun Feb 20 22:23:29 1994
---- include/ntp_machine.h Sun Feb 27 13:47:59 1994
-***************
-*** 313,318 ****
---- 313,319 ----
- * Next
- */
- #if defined(SYS_NEXT)
-+ #define RETSIGTYPE void
- #define DOSYNCTODR
- #define HAVE_READKMEM
- #define HAVE_BSD_NICE
-
-*** ../orig/machines/next Sun Feb 20 22:23:36 1994
---- machines/next Sun Feb 27 13:47:15 1994
-***************
-*** 1,6 ****
- RANLIB= ranlib -c -s
-! DEFS= -DSYS_NEXT
-! AUTHDEFS= -DDES -DMD5 -DFAST_MD5 -DHAVE_BSD_TTYS
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
---- 1,6 ----
- RANLIB= ranlib -c -s
-! DEFS= -DSYS_NEXT -DHAVE_BSD_TTYS
-! AUTHDEFS= -DDES -DMD5 -DFAST_MD5
- CLOCKDEFS= -DLOCAL_CLOCK
- DAEMONLIBS=
- RESLIB=
-
-*** ../orig/xntpd/refclock_irig.c Thu Jan 27 09:03:58 1994
---- xntpd/refclock_irig.c Sun Feb 27 13:36:30 1994
-***************
-*** 19,25 ****
- * This driver supports the IRIG audio decoder. This clever gadget uses
- * a modified BSD audio driver for the Sun SPARCstation which provides
- * a timestamp, raw binary timecode, status byte and decoded ASCII
-! # timecode. The data are represented in the structure:
- *
- * struct irig_time {
- * struct timeval stamp; timestamp
---- 19,25 ----
- * This driver supports the IRIG audio decoder. This clever gadget uses
- * a modified BSD audio driver for the Sun SPARCstation which provides
- * a timestamp, raw binary timecode, status byte and decoded ASCII
-! * timecode. The data are represented in the structure:
- *
- * struct irig_time {
- * struct timeval stamp; timestamp
-
-
---
-David M. Meyer Mechanical & Aerospace Engineering
-dmm0t@rincewind.mech.virginia.edu University of Virginia
-NeXTmail ok
-
diff --git a/usr.sbin/xntpd/patches/patch.24 b/usr.sbin/xntpd/patches/patch.24
deleted file mode 100644
index 6ab00e2..0000000
--- a/usr.sbin/xntpd/patches/patch.24
+++ /dev/null
@@ -1,474 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
- 4 Mar 94 6:34 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
-Subject: Re: patches for 3.3l
-To: Mills@udel.edu
-Date: Fri, 4 Mar 94 12:33:49 MET
-In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Frank,
-
-
-> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
-I didn't fiddle with lib/* this round. Thus it must be some problem
-with the lib building process. Try make clean and again. I just checked
-the patches with my 3.3l tree - fine. I do admit being a bit lax when
-sending you the patches - you might have had to enter some paths
-manually.
-
-> ld: Undefined symbol
-> _DESauth1crypt ....
-Happens if ranlib isn't run.
-
-> Obviously, it bombed.
-Not likely being a problem from my patches - the lib/libntp.a got
-inconsistent.
-Usually this should not happen (ranlib need to be run on BSD systems).
-Try building again from scratch (make clean all). If the problem
-persists look (or send me) at the output of the lib building step
-something is amiss there at your site.
-
-I'll include the patches here again not properly prepared for a
-plain "patch < patchfile".
-
-
-Hi, Dave,
-
-Here are some more patches:
- - allow parse conversion routines to deliver UTC directly
- - irix4 machine/cc from Amos
- - rcs id fixing
- - linux hints
- - modload hints
- - full integration of trak refclock driver (was only partially integrated)
-
-diff -c /dev/null compilers/irix4.cc:1.1
-*** /dev/null Thu Mar 3 10:29:50 1994
---- compilers/irix4.cc Thu Mar 3 10:29:50 1994
-***************
-*** 0 ****
---- 1,2 ----
-+ COMPILER= cc -cckr
-+ COPTS= -O2
-diff -c hints/linux:1.1.1.3 hints/linux:1.5
-*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
---- hints/linux Thu Mar 3 10:30:53 1994
-***************
-*** 1,5 ****
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
---- 1,5 ----
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
-***************
-*** 7,14 ****
- versions of the kernel or libc, or have any other question not covered in the
- READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
- free to ask me (duwe@informatik.uni-erlangen.de)
--
-- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
-- binary compiled under the appropriate kernel. Get this one from
-- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
-- puplic relase after 4.5.20]
---- 7,9 ----
-diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
-*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
---- include/parse.h Thu Mar 3 10:31:37 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
-! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
- *
-! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 15,21 ****
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
- #endif
-
- #include "ntp_types.h"
---- 15,21 ----
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
- #endif
-
- #include "ntp_types.h"
-***************
-*** 301,306 ****
---- 301,307 ----
- LONG second;
- LONG usecond;
- LONG utcoffset; /* in seconds */
-+ time_t utctime; /* the actual time - alternative to date/time */
- LONG flags; /* current clock status */
- };
-
-***************
-*** 385,390 ****
---- 386,394 ----
- * History:
- *
- * parse.h,v
-+ * Revision 3.17 1994/03/03 09:27:20 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.13 1994/01/25 19:04:21 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
-*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
---- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
-***************
-*** 40,46 ****
- rm -f parsestreams.o
-
- parsestreams.o: parsestreams.o.$(KARCH)
-! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
-
- parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
---- 40,46 ----
- rm -f parsestreams.o
-
- parsestreams.o: parsestreams.o.$(KARCH)
-! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
-
- parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
-diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
-*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
---- parse/README.new_clocks Thu Mar 3 10:35:53 1994
-***************
-*** 23,28 ****
---- 23,29 ----
- LONG second;
- LONG usecond;
- LONG utcoffset; /* in seconds */
-+ time_t utcoffset; /* true utc time instead of date/time */
- LONG flags; /* current clock status */
- };
-
-***************
-*** 52,57 ****
---- 53,65 ----
- PARSEB_S_PPS supports PPS time stamping
- PARSEB_S_POSITION supports position information (GPS)
-
-+ If the utctime field is non zero this value will be take as
-+ time code value. This allows for conversion routines that
-+ already have the utc time value. The utctime field gives the seconds
-+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
-+ usec value. The fields for date and time (down to second resolution)
-+ will be ignored.
-+
- Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
- them for examples. The basic structure is:
-
-diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
-*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
---- parse/parse.c Thu Mar 3 10:36:07 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
-! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
-! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 556,561 ****
---- 556,564 ----
- register int i;
- time_t t;
-
-+ if (clock->utctime)
-+ return clock->utctime; /* if the conversion routine gets it right away - why not */
-+
- if (clock->year < 100)
- clock->year += 1900;
-
-***************
-*** 628,633 ****
---- 631,639 ----
- t += clock->utcoffset; /* warp to UTC */
-
- /* done */
-+
-+ clock->utctime = t; /* documentray only */
-+
- return t;
- }
-
-***************
-*** 890,895 ****
---- 896,903 ----
-
- if (parseio->parse_flags & PARSE_FIXED_FMT)
- {
-+ clock.utctime = 0;
-+
- switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
- {
- case CVT_FAIL:
-***************
-*** 941,946 ****
---- 949,956 ----
- {
- do
- {
-+ clock.utctime = 0;
-+
- switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
- clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
- CVT_NONE) & CVT_MASK)
-***************
-*** 1148,1153 ****
---- 1158,1166 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.22 1994/02/25 12:34:49 kardel
-+ * allow for converter generated utc times
-+ *
- * Revision 3.21 1994/02/02 17:45:30 kardel
- * rcs ids fixed
- *
-diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
-*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
---- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
-! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
- *
-! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
-diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
-*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
---- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
-***************
-*** 34,40 ****
- refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
- refclock_parse.c refclock_as2201.c refclock_omega.c \
- refclock_tpro.c refclock_leitch.c refclock_irig.c \
-! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
-
- OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
- ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
---- 34,41 ----
- refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
- refclock_parse.c refclock_as2201.c refclock_omega.c \
- refclock_tpro.c refclock_leitch.c refclock_irig.c \
-! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
-! ntp_intres.c ntp_filegen.c
-
- OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
- ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
-***************
-*** 44,50 ****
- refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
- refclock_parse.o refclock_as2201.o refclock_omega.o \
- refclock_tpro.o refclock_leitch.o refclock_irig.o \
-! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
-
- all: $(PROGRAM)
-
---- 45,52 ----
- refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
- refclock_parse.o refclock_as2201.o refclock_omega.o \
- refclock_tpro.o refclock_leitch.o refclock_irig.o \
-! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
-! ntp_intres.o ntp_filegen.o
-
- all: $(PROGRAM)
-
-***************
-*** 136,141 ****
---- 138,146 ----
-
- refclock_msfees.o: refclock_msfees.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-+
-+ refclock_trak.o: refclock_trak.c
-+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
- refclock_gpstm.o: refclock_gpstm.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
-*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
---- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
-***************
-*** 301,307 ****
- static u_char clocktypes[] = {
- CTL_SST_TS_NTP, /* REFCLK_NONE */
- CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
-! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
- CTL_SST_TS_HF, /* REFCLK_WWV_PST */
- CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
- CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
---- 301,307 ----
- static u_char clocktypes[] = {
- CTL_SST_TS_NTP, /* REFCLK_NONE */
- CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
-! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */
- CTL_SST_TS_HF, /* REFCLK_WWV_PST */
- CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
- CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
-diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
-*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
---- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
-***************
-*** 113,119 ****
- struct refclock *refclock_conf[] = {
- &refclock_none, /* 0 REFCLK_NONE */
- &refclock_local, /* 1 REFCLK_LOCAL */
-! &refclock_none, /* 2 REFCLK_WWV_HEATH */
- &refclock_pst, /* 3 REFCLK_WWV_PST */
- &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
- &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
---- 113,119 ----
- struct refclock *refclock_conf[] = {
- &refclock_none, /* 0 REFCLK_NONE */
- &refclock_local, /* 1 REFCLK_LOCAL */
-! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
- &refclock_pst, /* 3 REFCLK_WWV_PST */
- &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
- &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
-RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
-retrieving revision 1.1.1.12
-diff -c -r1.1.1.12 xntpd/refclock_parse.c
-*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
---- xntpd/refclock_parse.c 1994/03/03 09:49:54
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
-! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
-! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 129,135 ****
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
- #endif
-
- /**===========================================================================
---- 129,135 ----
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
- #endif
-
- /**===========================================================================
-***************
-*** 1653,1659 ****
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
-! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
- return;
- }
- }
---- 1653,1660 ----
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
-! if ((i == 0) &&
-! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
- return;
- }
- }
-***************
-*** 2823,2829 ****
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---- 2824,2830 ----
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.25 b/usr.sbin/xntpd/patches/patch.25
deleted file mode 100644
index 6ab00e2..0000000
--- a/usr.sbin/xntpd/patches/patch.25
+++ /dev/null
@@ -1,474 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa16943; 4 Mar 94 6:43 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa02686;
- 4 Mar 94 6:34 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA12349 (5.65c-6/7.3v-FAU); Fri, 4 Mar 1994 12:34:08 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA26044 (5.65c-6/7.3m-FAU); Fri, 4 Mar 1994 12:34:06 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403041134.AA26044@faui43.informatik.uni-erlangen.de>
-Subject: Re: patches for 3.3l
-To: Mills@udel.edu
-Date: Fri, 4 Mar 94 12:33:49 MET
-In-Reply-To: <9403040253.aa16147@huey.udel.edu>; from "Mills@udel.edu" at Mar 4, 94 2:53 am
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Frank,
-
-
-> ld: ../lib/libntp.a: warning: archive has no table of contents; add one using ranlib(1)
-I didn't fiddle with lib/* this round. Thus it must be some problem
-with the lib building process. Try make clean and again. I just checked
-the patches with my 3.3l tree - fine. I do admit being a bit lax when
-sending you the patches - you might have had to enter some paths
-manually.
-
-> ld: Undefined symbol
-> _DESauth1crypt ....
-Happens if ranlib isn't run.
-
-> Obviously, it bombed.
-Not likely being a problem from my patches - the lib/libntp.a got
-inconsistent.
-Usually this should not happen (ranlib need to be run on BSD systems).
-Try building again from scratch (make clean all). If the problem
-persists look (or send me) at the output of the lib building step
-something is amiss there at your site.
-
-I'll include the patches here again not properly prepared for a
-plain "patch < patchfile".
-
-
-Hi, Dave,
-
-Here are some more patches:
- - allow parse conversion routines to deliver UTC directly
- - irix4 machine/cc from Amos
- - rcs id fixing
- - linux hints
- - modload hints
- - full integration of trak refclock driver (was only partially integrated)
-
-diff -c /dev/null compilers/irix4.cc:1.1
-*** /dev/null Thu Mar 3 10:29:50 1994
---- compilers/irix4.cc Thu Mar 3 10:29:50 1994
-***************
-*** 0 ****
---- 1,2 ----
-+ COMPILER= cc -cckr
-+ COPTS= -O2
-diff -c hints/linux:1.1.1.3 hints/linux:1.5
-*** hints/linux:1.1.1.3 Thu Mar 3 10:30:53 1994
---- hints/linux Thu Mar 3 10:30:53 1994
-***************
-*** 1,5 ****
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.20 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
---- 1,5 ----
-
-! Requirements: kernel 0.99.14y or newer, libc 4.5.21 or newer
- ------------
-
- With this configuration, xntp should build an run right out of the box
-***************
-*** 7,14 ****
- versions of the kernel or libc, or have any other question not covered in the
- READMEs / hint files (sorry, necessary comment in the Linux community ;-) feel
- free to ask me (duwe@informatik.uni-erlangen.de)
--
-- [NOTE: libc-4.5.20 is (or was ? ;-) a beta testing release, but the first
-- binary compiled under the appropriate kernel. Get this one from
-- tsx-11:.../GCC/private/dontuse , compile 4.5.19 yourself or wait for the next
-- puplic relase after 4.5.20]
---- 7,9 ----
-diff -c include/parse.h:1.1.1.8 include/parse.h:3.17
-*** include/parse.h:1.1.1.8 Thu Mar 3 10:31:37 1994
---- include/parse.h Thu Mar 3 10:31:37 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
-! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
- *
-! * parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 15,21 ****
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
- #endif
-
- #include "ntp_types.h"
---- 15,21 ----
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.17 1994/03/03 09:27:20 kardel Exp";
- #endif
-
- #include "ntp_types.h"
-***************
-*** 301,306 ****
---- 301,307 ----
- LONG second;
- LONG usecond;
- LONG utcoffset; /* in seconds */
-+ time_t utctime; /* the actual time - alternative to date/time */
- LONG flags; /* current clock status */
- };
-
-***************
-*** 385,390 ****
---- 386,394 ----
- * History:
- *
- * parse.h,v
-+ * Revision 3.17 1994/03/03 09:27:20 kardel
-+ * rcs ids fixed
-+ *
- * Revision 3.13 1994/01/25 19:04:21 kardel
- * 94/01/23 reconcilation
- *
-diff -c parse/Makefile.kernel:1.1.1.3 parse/Makefile.kernel:3.9
-*** parse/Makefile.kernel:1.1.1.3 Thu Mar 3 10:35:48 1994
---- parse/Makefile.kernel Thu Mar 3 10:35:48 1994
-***************
-*** 40,46 ****
- rm -f parsestreams.o
-
- parsestreams.o: parsestreams.o.$(KARCH)
-! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
-
- parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
---- 40,46 ----
- rm -f parsestreams.o
-
- parsestreams.o: parsestreams.o.$(KARCH)
-! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o' (put in e.g. /sys/<karch>/OBJ) into the kernel"
-
- parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
-diff -c parse/README.new_clocks:1.1.1.3 parse/README.new_clocks:3.5
-*** parse/README.new_clocks:1.1.1.3 Thu Mar 3 10:35:52 1994
---- parse/README.new_clocks Thu Mar 3 10:35:53 1994
-***************
-*** 23,28 ****
---- 23,29 ----
- LONG second;
- LONG usecond;
- LONG utcoffset; /* in seconds */
-+ time_t utcoffset; /* true utc time instead of date/time */
- LONG flags; /* current clock status */
- };
-
-***************
-*** 52,57 ****
---- 53,65 ----
- PARSEB_S_PPS supports PPS time stamping
- PARSEB_S_POSITION supports position information (GPS)
-
-+ If the utctime field is non zero this value will be take as
-+ time code value. This allows for conversion routines that
-+ already have the utc time value. The utctime field gives the seconds
-+ since Jan 1st 1970, 0:00:00. The useconds field gives the respective
-+ usec value. The fields for date and time (down to second resolution)
-+ will be ignored.
-+
- Conversion is done in the cvt_* routine in parse/clk_*.c files. look in
- them for examples. The basic structure is:
-
-diff -c parse/parse.c:1.1.1.9 parse/parse.c:3.22
-*** parse/parse.c:1.1.1.9 Thu Mar 3 10:36:06 1994
---- parse/parse.c Thu Mar 3 10:36:07 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
-! * parse.c,v 3.21 1994/02/02 17:45:30 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
-! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 556,561 ****
---- 556,564 ----
- register int i;
- time_t t;
-
-+ if (clock->utctime)
-+ return clock->utctime; /* if the conversion routine gets it right away - why not */
-+
- if (clock->year < 100)
- clock->year += 1900;
-
-***************
-*** 628,633 ****
---- 631,639 ----
- t += clock->utcoffset; /* warp to UTC */
-
- /* done */
-+
-+ clock->utctime = t; /* documentray only */
-+
- return t;
- }
-
-***************
-*** 890,895 ****
---- 896,903 ----
-
- if (parseio->parse_flags & PARSE_FIXED_FMT)
- {
-+ clock.utctime = 0;
-+
- switch ((cvtrtc = clockformats[format]->convert ? clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) : CVT_NONE) & CVT_MASK)
- {
- case CVT_FAIL:
-***************
-*** 941,946 ****
---- 949,956 ----
- {
- do
- {
-+ clock.utctime = 0;
-+
- switch ((cvtrtc = (clockformats[format]->convert && !(clockformats[format]->flags & CVT_FIXEDONLY)) ?
- clockformats[format]->convert(parseio->parse_data, parseio->parse_index, clockformats[format]->data, &clock) :
- CVT_NONE) & CVT_MASK)
-***************
-*** 1148,1153 ****
---- 1158,1166 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.22 1994/02/25 12:34:49 kardel
-+ * allow for converter generated utc times
-+ *
- * Revision 3.21 1994/02/02 17:45:30 kardel
- * rcs ids fixed
- *
-diff -c parse/util/testdcf.c:1.1.1.6 parse/util/testdcf.c:3.11
-*** parse/util/testdcf.c:1.1.1.6 Thu Mar 3 10:36:27 1994
---- parse/util/testdcf.c Thu Mar 3 10:36:27 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
-! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
- *
-! * testdcf.c,v 3.11 1994/02/02 17:45:55 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
-diff -c xntpd/Makefile.tmpl:1.1.1.18 xntpd/Makefile.tmpl:3.28
-*** xntpd/Makefile.tmpl:1.1.1.18 Thu Mar 3 10:38:13 1994
---- xntpd/Makefile.tmpl Thu Mar 3 10:38:13 1994
-***************
-*** 34,40 ****
- refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
- refclock_parse.c refclock_as2201.c refclock_omega.c \
- refclock_tpro.c refclock_leitch.c refclock_irig.c \
-! refclock_msfees.c refclock_gpstm.c ntp_intres.c ntp_filegen.c
-
- OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
- ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
---- 34,41 ----
- refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
- refclock_parse.c refclock_as2201.c refclock_omega.c \
- refclock_tpro.c refclock_leitch.c refclock_irig.c \
-! refclock_msfees.c refclock_gpstm.c refclock_trak.c \
-! ntp_intres.c ntp_filegen.c
-
- OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
- ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
-***************
-*** 44,50 ****
- refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
- refclock_parse.o refclock_as2201.o refclock_omega.o \
- refclock_tpro.o refclock_leitch.o refclock_irig.o \
-! refclock_msfees.o refclock_gpstm.o ntp_intres.o ntp_filegen.o
-
- all: $(PROGRAM)
-
---- 45,52 ----
- refclock_wwvb.o refclock_goes.o refclock_mx4200.o \
- refclock_parse.o refclock_as2201.o refclock_omega.o \
- refclock_tpro.o refclock_leitch.o refclock_irig.o \
-! refclock_msfees.o refclock_gpstm.o refclock_trak.o \
-! ntp_intres.o ntp_filegen.o
-
- all: $(PROGRAM)
-
-***************
-*** 136,141 ****
---- 138,146 ----
-
- refclock_msfees.o: refclock_msfees.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-+
-+ refclock_trak.o: refclock_trak.c
-+ $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
- refclock_gpstm.o: refclock_gpstm.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-diff -c xntpd/ntp_control.c:1.1.1.17 xntpd/ntp_control.c:3.26
-*** xntpd/ntp_control.c:1.1.1.17 Thu Mar 3 10:38:16 1994
---- xntpd/ntp_control.c Thu Mar 3 10:38:17 1994
-***************
-*** 301,307 ****
- static u_char clocktypes[] = {
- CTL_SST_TS_NTP, /* REFCLK_NONE */
- CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
-! CTL_SST_TS_HF, /* REFCLK_WWV_HEATH */
- CTL_SST_TS_HF, /* REFCLK_WWV_PST */
- CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
- CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
---- 301,307 ----
- static u_char clocktypes[] = {
- CTL_SST_TS_NTP, /* REFCLK_NONE */
- CTL_SST_TS_UNSPEC, /* REFCLK_LOCALCLOCK */
-! CTL_SST_TS_HF, /* REFCLK_GPS_TRAK */
- CTL_SST_TS_HF, /* REFCLK_WWV_PST */
- CTL_SST_TS_LF, /* REFCLK_WWVB_SPECTRACOM */
- CTL_SST_TS_UHF, /* REFCLK_GOES_TRUETIME */
-diff -c xntpd/refclock_conf.c:1.1.1.22 xntpd/refclock_conf.c:3.21
-*** xntpd/refclock_conf.c:1.1.1.22 Thu Mar 3 10:38:54 1994
---- xntpd/refclock_conf.c Thu Mar 3 10:38:54 1994
-***************
-*** 113,119 ****
- struct refclock *refclock_conf[] = {
- &refclock_none, /* 0 REFCLK_NONE */
- &refclock_local, /* 1 REFCLK_LOCAL */
-! &refclock_none, /* 2 REFCLK_WWV_HEATH */
- &refclock_pst, /* 3 REFCLK_WWV_PST */
- &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
- &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
---- 113,119 ----
- struct refclock *refclock_conf[] = {
- &refclock_none, /* 0 REFCLK_NONE */
- &refclock_local, /* 1 REFCLK_LOCAL */
-! &refclock_trak, /* 2 REFCLK_GPS_TRAK */
- &refclock_pst, /* 3 REFCLK_WWV_PST */
- &refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
- &refclock_goes, /* 5 REFCLK_GOES_TRUETIME */
-RCS file: /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v
-retrieving revision 1.1.1.12
-diff -c -r1.1.1.12 xntpd/refclock_parse.c
-*** xntpd/refclock_parse.c:1.1.1.12 1994/02/22 21:57:57
---- xntpd/refclock_parse.c 1994/03/03 09:49:54
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
-! * refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
-! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 129,135 ****
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp";
- #endif
-
- /**===========================================================================
---- 129,135 ----
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
- #endif
-
- /**===========================================================================
-***************
-*** 1653,1659 ****
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
-! if (select(fd + 1, &fdmask, 0, 0, &null_time) == 0)
- return;
- }
- }
---- 1653,1660 ----
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
-! if ((i == 0) &&
-! (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
- return;
- }
- }
-***************
-*** 2823,2829 ****
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.49 1994/02/20 13:26:00 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---- 2824,2830 ----
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.26 b/usr.sbin/xntpd/patches/patch.26
deleted file mode 100644
index a55360d..0000000
--- a/usr.sbin/xntpd/patches/patch.26
+++ /dev/null
@@ -1,36 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa24501; 5 Mar 94 21:23 EST
-Received: from goofus.wustl.edu by louie.udel.edu id aa01087; 5 Mar 94 21:15 EST
-Received: from mumps.pfcs.com by goofus.wustl.edu with UUCP id AA17154
- (5.67a+/IDA-1.5 for mills@udel.edu); Sat, 5 Mar 1994 20:15:06 -0600
-Received: by mumps.pfcs.com id AA09821
- (5.65c/IDA-1.4.4 for mills@udel.edu); Sat, 5 Mar 1994 19:10:18 -0600
-Date: Sat, 5 Mar 1994 19:10:18 -0600
-From: Harlan Stenn <harlan@mumps.pfcs.com>
-Message-Id: <199403060110.AA09821@mumps.pfcs.com>
-To: mills@udel.edu
-Subject: xntpd/Makefile and 3.3l
-
-Dave,
-
-xntpd/Makefile doesn't get -DSYS_whatever and -DHAVE_xxx_TTYS "installed"
-when the Makefile gets created. This is for OS=mips.
-
-Same for xntpdc/Makefile.
-
-A patch follows...
-
-Harlan
-
-PS - might you have a copy of the message I sent you a couple of weeks
-ago where I asked about broadcast servers and clients and the ntp.conf
-file? I was going to send it to the maling list but I lost my copy.
-
-machines/mips
-3,4c3,4
-< DEFS=
-< AUTHDEFS= -DDES -DMD5 -DSYS_MIPS -DHAVE_BSD_TTYS
----
-> DEFS= -DSYS_MIPS -DHAVE_BSD_TTYS
-> AUTHDEFS= -DDES -DMD5
-
diff --git a/usr.sbin/xntpd/patches/patch.27 b/usr.sbin/xntpd/patches/patch.27
deleted file mode 100644
index 5d450d4..0000000
--- a/usr.sbin/xntpd/patches/patch.27
+++ /dev/null
@@ -1,86 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa23654; 11 Mar 94 7:49 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa14038;
- 10 Mar 94 14:14 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA13885 (5.65c-6/7.3v-FAU); Thu, 10 Mar 1994 20:10:36 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA03872 (5.65c-6/7.3m-FAU); Thu, 10 Mar 1994 20:10:33 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403101910.AA03872@faui43.informatik.uni-erlangen.de>
-Subject: RAW dcf77 showstopper 8-(.
-To: mills@udel.edu
-Date: Thu, 10 Mar 94 20:10:25 MET
-Cc: dpk@morgan.com, Frank.Kardel@informatik.uni-erlangen.de,
- Piete.Brooks@cl.cam.ac.uk, jcs@bear.zoo.bt.co.uk
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, my changes for 3.3m introduced a subtle reliability problem for
-the cheap DCF77 receiver code - it only returned somtimes the
-correct time 8-(.
-
-Well, here is the patch. (I'll post this one to the news group
-also as it is a show stopper for the cheap clocks 8-(). So
-don't be confused.
-
-
-RCS file: /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v
-retrieving revision 3.12
-diff -c -r3.12 clk_rawdcf.c
-*** parse/clk_rawdcf.c:3.12 1994/02/20 13:04:39
---- parse/clk_rawdcf.c 1994/03/10 19:00:43
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
- *
-! * clk_rawdcf.c,v 3.12 1994/02/20 13:04:39 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
- *
-! * clk_rawdcf.c,v 3.13 1994/03/10 19:00:43 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
-***************
-*** 245,250 ****
---- 245,251 ----
- parseprintf(DD_RAWDCF,("parse: convert_rawdcf: parity check passed\n"));
-
- clock->flags = PARSEB_S_ANTENNA|PARSEB_S_LEAP;
-+ clock->utctime= 0;
- clock->usecond= 0;
- clock->second = 0;
- clock->minute = ext_bf(buffer, DCF_M10, dcfparam->zerobits);
-***************
-*** 528,534 ****
- /*
- * History:
- *
-! * clk_rawdcf.c,v
- * Revision 3.12 1994/02/20 13:04:39 kardel
- * parse add/delete second support
- *
---- 529,538 ----
- /*
- * History:
- *
-! * clk_rawdcf.c,v
-! * Revision 3.13 1994/03/10 19:00:43 kardel
-! * clear utctime field to avoid confusion on synthesize time stamps
-! *
- * Revision 3.12 1994/02/20 13:04:39 kardel
- * parse add/delete second support
- *
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.28 b/usr.sbin/xntpd/patches/patch.28
deleted file mode 100644
index 37e2065..0000000
--- a/usr.sbin/xntpd/patches/patch.28
+++ /dev/null
@@ -1,454 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa07183; 13 Mar 94 23:57 EST
-Received: from hpsdlo.sdd.hp.com by louie.udel.edu id aa17483;
- 13 Mar 94 23:50 EST
-Received: from hpsdlz.sdd.hp.com by hpsdlo.sdd.hp.com with SMTP
- (1.36.108.4/15.5+IOS 3.21+sdd) id AA07032; Sun, 13 Mar 1994 20:50:23 -0800
-Received: from localhost by hpsdlz.sdd.hp.com with SMTP
- (1.36.108.4/15.5+IOS 3.21+sdd) id AA05726; Sun, 13 Mar 1994 20:50:21 -0800
-Message-Id: <9403140450.AA05726@hpsdlz.sdd.hp.com>
-To: mills@udel.edu
-Subject: patches for xntpd
-Date: Sun, 13 Mar 1994 20:50:21 -0800
-From: Ken Stone <ken@sdd.hp.com>
-
-
-Ok Dave,
-
-I guess I'll take a poke at the "m" version for cleanup and updates. This
-should take care of the newly released 9.03 for s300/s400 which has the
-adjtime(2) syscall. Also, cleanup in readiness for 10.0 all around.
-
- -- Ken
-
-P.S. How is your HP hardware/software deal going ? I haven't heard anything
- lately.
-
-
-
-First do a "rm */hpux10+*" as I have renamed all that to hpux-adj ... that
-9.03 blew me out of the water on the naming scheme :-)
-
-Then unshar the following ... it will add a few new files and give you
-diff to apply (diffs.hpux).
-
-
-#---------------------------------- cut here ----------------------------------
-# This is a shell archive. Remove anything before this line,
-# then unpack it by saving it in a file and typing "sh file".
-#
-# Wrapped by Source Hacker <src@hpsdlz> on Sun Mar 13 20:47:57 1994
-#
-# This archive contains:
-# compilers/hpux-adj.cc compilers/hpux-adj.gcc
-# machines/hpux-adj scripts/hpadjtime.sh
-# diffs.hpux
-#
-# Error checking via wc(1) will be performed.
-# Error checking via sum(1) will be performed.
-
-LANG=""; export LANG
-PATH=/bin:/usr/bin:$PATH; export PATH
-
-if sum -r </dev/null >/dev/null 2>&1
-then
- sumopt='-r'
-else
- sumopt=''
-fi
-
-echo x - compilers/hpux-adj.cc
-cat >compilers/hpux-adj.cc <<'@EOF'
-COMPILER=cc +O1
-@EOF
-set `sum $sumopt <compilers/hpux-adj.cc`; if test $1 -ne 22541
-then
- echo ERROR: compilers/hpux-adj.cc checksum is $1 should be 22541
-fi
-set `wc -lwc <compilers/hpux-adj.cc`
-if test $1$2$3 != 1216
-then
- echo ERROR: wc results of compilers/hpux-adj.cc are $* should be 1 2 16
-fi
-
-chmod 644 compilers/hpux-adj.cc
-
-echo x - compilers/hpux-adj.gcc
-cat >compilers/hpux-adj.gcc <<'@EOF'
-COMPILER=gcc -O2
-@EOF
-set `sum $sumopt <compilers/hpux-adj.gcc`; if test $1 -ne 23593
-then
- echo ERROR: compilers/hpux-adj.gcc checksum is $1 should be 23593
-fi
-set `wc -lwc <compilers/hpux-adj.gcc`
-if test $1$2$3 != 1217
-then
- echo ERROR: wc results of compilers/hpux-adj.gcc are $* should be 1 2 17
-fi
-
-chmod 644 compilers/hpux-adj.gcc
-
-echo x - machines/hpux-adj
-cat >machines/hpux-adj <<'@EOF'
-SHELL= /bin/sh
-RANLIB= ls # ar does the work of ranlib under System V
-DEFS_LOCAL= -DREFCLOCK
-DEFS= -DHAVE_TERMIOS -DSYS_HPUX=10
-AUTHDEFS= -DDES -DMD5
-CLOCKDEFS= -DLOCAL_CLOCK
-COPTS=
-INSTALL=$(TOP)scripts/install.sh
-@EOF
-set `sum $sumopt <machines/hpux-adj`; if test $1 -ne 42265
-then
- echo ERROR: machines/hpux-adj checksum is $1 should be 42265
-fi
-set `wc -lwc <machines/hpux-adj`
-if test $1$2$3 != 826251
-then
- echo ERROR: wc results of machines/hpux-adj are $* should be 8 26 251
-fi
-
-chmod 644 machines/hpux-adj
-
-echo x - scripts/hpadjtime.sh
-cat >scripts/hpadjtime.sh <<'@EOF'
-#! /bin/sh
-
-if [ -f /bin/uname -o -f /usr/bin/uname ]; then
- set `uname -a | tr '[A-Z]' '[a-z]'`
- case "$1" in
- hp-ux) case "$3" in
- *.10.*) val=1 ;;
- *.09.03) case "$5" in
- 9000/3*) val=1 ;;
- *) val=0 ;;
- esac ;;
- *) val=0 ;;
- esac
- ;;
- *)
- esac
-fi
-exit $val
-@EOF
-set `sum $sumopt <scripts/hpadjtime.sh`; if test $1 -ne 1497
-then
- echo ERROR: scripts/hpadjtime.sh checksum is $1 should be 1497
-fi
-set `wc -lwc <scripts/hpadjtime.sh`
-if test $1$2$3 != 1850287
-then
- echo ERROR: wc results of scripts/hpadjtime.sh are $* should be 18 50 287
-fi
-
-chmod 755 scripts/hpadjtime.sh
-
-echo x - diffs.hpux
-cat >diffs.hpux <<'@EOF'
-*** xntp3.3m.orig/compilers/hpux.cc Thu Sep 2 13:19:56 1993
---- xntp3.3m/compilers/hpux.cc Sun Mar 13 12:10:23 1994
-***************
-*** 1,2 ****
-! COMPILER=cc
-! COPTS=+O1
---- 1 ----
-! COMPILER=cc +O1
-*** xntp3.3m.orig/compilers/hpux.gcc Thu Sep 2 13:19:59 1993
---- xntp3.3m/compilers/hpux.gcc Sun Mar 13 12:10:29 1994
-***************
-*** 1,2 ****
-! COMPILER=gcc
-! COPTS=-O2
---- 1 ----
-! COMPILER=gcc -O2
-*** xntp3.3m.orig/hints/hpux Fri Dec 3 02:28:57 1993
---- xntp3.3m/hints/hpux Sun Mar 13 20:20:38 1994
-***************
-*** 1,59 ****
- This file hopefully describes the whatever and however of how to get xntp
-! running on hpux 8.0 and later s300, s700, and s800.
-
- First off, all the standard disclaimers hold here ... HP doesn't have anthing
- to do with this stuff. I fool with it in my spare time because we use it and
- because I like to. We just happen to have a lot of HP machines around here :-)
-! Xntp has been in use here for several months and has a fair amount of mileage
- on various HP platforms within the company. I can't really guarantee bug fixes
- but I'd certainly like to hear about bugs and I won't hestitate to look at
- any fixes sent to me.
-
-! Now lets talk OS. If you don't have 8.0 or later, pretty much hang it up now.
-! This stuff has run here on 8.0 s300, s700, and s800. Its possible that it
-! runs on 7.0 but I have not tried v3 code on 7.0 at all.
-
-! [Note that recent reports state that this release does in fact run on HP
-! 300 and 400 boxes, which run 7.0 - Ed.]
-
-! Next, let me explain a bit about how this stuff works on HP-UX since we don't
- have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
- daemon. Instead of the adjtime(2) system call, we use a library routine to
- talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
- causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
- code provided here is NOT a general replacement for adjtime(2) ... use of
-! this adjtime(3)/adjtimed(8) other than here may yield very odd results.
-
- What to do to get this stuff running ?
-
-! * cd ..
-! * Say "make makeconfig"
-
-! * cd ..
-! * Say "make", sit back for a few minutes.
-
- * cd authstuff
- * Say "./authcert < certdata" and check the output. Every line should
- end with "OK" ... if not, we got trouble.
- * Now try "./authspeed auth.samplekeys". What we want to
- remember here is the "authentication delay in CPU time"
-
-! * cd ..
-! * Now we need to install this stuff ... make install will not work
-! unless you have replaced the SYSV install command with a BSD
-! compatible version. So ... the simplest thing to do is run
-! make -n install and do manually what it would have done.
-
- * I'd suggest reading the xntp docs about now :-) ... seriously !!
-
-! * Check out the docs and the stuff in xntp/conf and build a config
-! file ... put it in /usr/local/etc/xntp.conf (or where ever you
-! defined the config file to be in Config). One thing we have
-! added to this version of xntpd is a way to select config files
-! if you are sharing /usr/local thru NFS or whatever. If the
-! file /usr/local/etc/xntp.conf happens to be a directory, the files
-! in that directory are searched until a match is found. The rules
-! for a match are:
-
- 1. Our hostname
- 2. default.<machine id> (as in default.375 or default.850)
---- 1,63 ----
-+ Last update: Sun Mar 13 15:05:31 PST 1994
-+
- This file hopefully describes the whatever and however of how to get xntp
-! running on hpux 7.0 and later s300. s400, s700, and s800.
-
- First off, all the standard disclaimers hold here ... HP doesn't have anthing
- to do with this stuff. I fool with it in my spare time because we use it and
- because I like to. We just happen to have a lot of HP machines around here :-)
-! Xntpd has been in use here for several years and has a fair amount of mileage
- on various HP platforms within the company. I can't really guarantee bug fixes
- but I'd certainly like to hear about bugs and I won't hestitate to look at
- any fixes sent to me.
-
-! Now lets talk OS. If you don't have 7.0 or later, pretty much hang it up now.
-! This stuff has run here on pretty much everything from 8.0 upward on s300,
-! s700, and s800. It is known to run on 7.0 s300/s400 but all reports are
-! from the field and not my personal experience.
-
-! If you are lucky enough to have a s300 or s400 with 9.03, then you no longer
-! have to worry about adjtimed as HP-UX now has adjtime(2). The rest of you
-! will have to wait on 10.0 which will have adjtime(2) and a supported though
-! a bit older version of xntpd.
-
-! Next, let me explain a bit about how this stuff works on HP-UX's that do not
- have adjtime(2). The directory adjtime contains libadjtime.a and the adjtimed
- daemon. Instead of the adjtime(2) system call, we use a library routine to
- talk to adjtimed thru message queues. Adjtimed munges into /dev/kmem and
- causes the clock to skew properly as needed. PLEASE NOTE that the adjtime
- code provided here is NOT a general replacement for adjtime(2) ... use of
-! this adjtime(3)/adjtimed(8) other than with xntpd may yield very odd results.
-
- What to do to get this stuff running ?
-
-! * If you are running an OS less than 10.0 or do not have a s300/s400
-! with 9.03 or better
-! -> cd machines
-! -> vi hpux
-! -> (change -DSYS_HPUX=? to match whatever you are running [7,8,9])
-! -> cd ..
-
-! * Say "make makeconfig"
-
-+ * Say "make", sit back for a few minutes.
-+
- * cd authstuff
- * Say "./authcert < certdata" and check the output. Every line should
- end with "OK" ... if not, we got trouble.
- * Now try "./authspeed auth.samplekeys". What we want to
- remember here is the "authentication delay in CPU time"
-+ * cd ..
-
-! * Say "make install"
-
- * I'd suggest reading the xntp docs about now :-) ... seriously !!
-
-! * One thing I have added to this version of xntpd is a way to select
-! config files if you are sharing /usr/local thru NFS or whatever.
-! If the file /usr/local/etc/xntp.conf happens to be a directory, the
-! files in that directory are searched until a match is found. The
-! rules for a match are:
-
- 1. Our hostname
- 2. default.<machine id> (as in default.375 or default.850)
-***************
-*** 72,76 ****
---- 76,92 ----
-
- * On some 320's and 835's we have had to run adjtimed with "-p 45" or
- so to get rid of syslog messages about "last adjust did not finish".
-+
-+ * At 9.0, there is a problem with DIAGMON (patch available from the
-+ response center) which causes it to delete the message queue that
-+ adjtimed/xntpd use to communicate. (see next note for result)
-+
-+ * Xntpd has been known to get really ticked off when adjtime() fails
-+ which is usually only while running the emulation code on HP-UX.
-+ When it gets mad, it usually jumps the clock into never never land.
-+ Possible reasons for this are adjtimed being killed or just never
-+ started or adjtimed being completely swapped out on a really busy
-+ machine (newer adjtimed try to lock themselves in memory to prevent
-+ this one).
-
- Anything else ... just drop me a line at ken@sdd.hp.com
-*** xntp3.3m.orig/include/ntp_machine.h Sun Feb 27 19:34:59 1994
---- xntp3.3m/include/ntp_machine.h Sun Mar 13 15:35:33 1994
-***************
-*** 334,341 ****
- #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
- #define NO_SIGNED_CHAR_DECL
- #define LOCK_PROCESS
-- #define HAVE_NO_NICE /* HPUX uses rtprio instead */
- #define RETSIGTYPE void
- #if (SYS_HPUX < 10)
- #define NOKMEM
- #else
---- 334,345 ----
- #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
- #define NO_SIGNED_CHAR_DECL
- #define LOCK_PROCESS
- #define RETSIGTYPE void
-+ #if (SYS_HPUX < 9)
-+ #define HAVE_NO_NICE /* HPUX uses rtprio instead */
-+ #else
-+ #define HAVE_BSD_NICE /* new at 9.X */
-+ #endif
- #if (SYS_HPUX < 10)
- #define NOKMEM
- #else
-*** xntp3.3m.orig/lib/Makefile.tmpl Wed Feb 2 21:20:13 1994
---- xntp3.3m/lib/Makefile.tmpl Sun Mar 13 16:27:50 1994
-***************
-*** 49,55 ****
- $(LIBNAME).a: $(OBJS)
- ar rv $@ $?
- -rm -f $?
-! @if ( hp-pa || hp-mc680x0 ) > /dev/null 2>&1; then \
- ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
- else \
- :; \
---- 49,55 ----
- $(LIBNAME).a: $(OBJS)
- ar rv $@ $?
- -rm -f $?
-! @if ( ../scripts/hpadjtime.sh ) > /dev/null 2>&1; then \
- ( cd ../adjtime && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" MAKE="$(MAKE)" ) && ar rv $@ ../adjtime/adjtime.o; \
- else \
- :; \
-*** xntp3.3m.orig/scripts/Guess.sh Wed Jan 26 15:26:03 1994
---- xntp3.3m/scripts/Guess.sh Sun Mar 13 14:10:19 1994
-***************
-*** 40,46 ****
- guess="ultrix"
- ;;
- hp-ux) case "$3" in
-! *.10.*) guess="hpux10+" ;;
- *) guess="hpux" ;;
- esac
- ;;
---- 40,50 ----
- guess="ultrix"
- ;;
- hp-ux) case "$3" in
-! *.10.*) guess="hpux-adj" ;;
-! *.09.03) case "$5" in
-! 9000/3*) guess="hpux-adj" ;;
-! *) guess="hpux" ;;
-! esac ;;
- *) guess="hpux" ;;
- esac
- ;;
-*** xntp3.3m.orig/util/tickadj.c Wed Feb 2 21:20:17 1994
---- xntp3.3m/util/tickadj.c Sun Mar 13 13:55:53 1994
-***************
-*** 388,393 ****
---- 388,409 ----
- #endif
- #endif
-
-+ #if defined(SYS_HPUX)
-+ #define X_TICKADJ 0
-+ #define X_TICK 1
-+ #define X_DEF
-+ static struct nlist nl[] =
-+ #ifdef hp9000s300
-+ { {"_tickadj"},
-+ {"_old_tick"},
-+ #else
-+ { {"tickadj"},
-+ {"old_tick"},
-+ #endif
-+ {""},
-+ };
-+ #endif
-+
- #if !defined(X_DEF)
- #define X_TICKADJ 0
- #define X_TICK 1
-***************
-*** 408,413 ****
---- 424,430 ----
- "/kernel/unix",
- "/386bsd",
- "/netbsd",
-+ "/hp-ux",
- NULL
- };
- struct stat stbuf;
-*** xntp3.3m.orig/xntpd/ntp_loopfilter.c Sun Feb 27 19:36:16 1994
---- xntp3.3m/xntpd/ntp_loopfilter.c Sun Mar 13 14:03:54 1994
-***************
-*** 349,356 ****
- }
- }
- #endif /* HAVE_BSD_TTYS */
-- fdpps = fd232;
- #endif /* HPUXGADGET */
-
- /*
- * Insert in device list.
---- 349,356 ----
- }
- }
- #endif /* HAVE_BSD_TTYS */
- #endif /* HPUXGADGET */
-+ fdpps = fd232;
-
- /*
- * Insert in device list.
-@EOF
-set `sum $sumopt <diffs.hpux`; if test $1 -ne 46307
-then
- echo ERROR: diffs.hpux checksum is $1 should be 46307
-fi
-set `wc -lwc <diffs.hpux`
-if test $1$2$3 != 288172410391
-then
- echo ERROR: wc results of diffs.hpux are $* should be 288 1724 10391
-fi
-
-chmod 664 diffs.hpux
-
-exit 0
-
-
-
diff --git a/usr.sbin/xntpd/patches/patch.29 b/usr.sbin/xntpd/patches/patch.29
deleted file mode 100644
index ee161a2..0000000
--- a/usr.sbin/xntpd/patches/patch.29
+++ /dev/null
@@ -1,52 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa24239; 16 Mar 94 18:01 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa18720;
- 16 Mar 94 17:57 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA25324 (5.65c-6/7.3v-FAU); Wed, 16 Mar 1994 23:57:39 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA18230 (5.65c-6/7.3m-FAU); Wed, 16 Mar 1994 23:57:37 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403162257.AA18230@faui43.informatik.uni-erlangen.de>
-Subject: hpadjtime.sh
-To: mills@udel.edu, ken@sdd.hp.com
-Date: Wed, 16 Mar 94 23:57:32 MET
-Return-Receipt-To: "Frank Kardel" <Frank.Kardel@informatik.uni-erlangen.de>
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, 3.3n is somewhat broken...
-
-First of all
- - scripts/hpadjtime.sh is missing (it's in patch.28)
-
-And
- - scripts/hpadjtime.sh is broken for non hp-ux
- (will try to build adjtime libs on non hp-ux architectures
- as a default value was no set)
-
-Please use this version of scripts/hpadjtime.sh for increased safety:
-
-#! /bin/sh
-val=1
-if [ -f /bin/uname -o -f /usr/bin/uname ]; then
- set `uname -a | tr '[A-Z]' '[a-z]'`
- case "$1" in
- hp-ux) case "$3" in
- *.10.*) val=1 ;;
- *.09.03) case "$5" in
- 9000/3*) val=1 ;;
- *) val=0 ;;
- esac ;;
- *) val=0 ;;
- esac
- ;;
- *)
- esac
-fi
-exit $val
-
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.3 b/usr.sbin/xntpd/patches/patch.3
deleted file mode 100644
index beba805..0000000
--- a/usr.sbin/xntpd/patches/patch.3
+++ /dev/null
@@ -1,3032 +0,0 @@
-diff -c TODO:1.1.1.3 TODO:3.5
-*** TODO:1.1.1.3 Wed Jan 26 21:46:47 1994
---- TODO Wed Jan 26 21:46:48 1994
-***************
-*** 1,5 ****
- #
-! # TODO,v 3.4 1994/01/23 17:19:06 kardel Exp
- #
- This file contains problems known to the authors that still need to be done.
- We would appreciate if you could spare some of your time to look through
---- 1,5 ----
- #
-! # TODO,v 3.5 1994/01/25 19:03:55 kardel Exp
- #
- This file contains problems known to the authors that still need to be done.
- We would appreciate if you could spare some of your time to look through
-diff -c doc/xntpd.8:1.1.1.11 doc/xntpd.8:3.21
-*** doc/xntpd.8:1.1.1.11 Wed Jan 26 21:47:54 1994
---- doc/xntpd.8 Wed Jan 26 21:47:55 1994
-***************
-*** 74,79 ****
---- 74,85 ----
- ] [
- .B -t
- .I trustedkey
-+ ] [
-+ .B -v
-+ .I variable
-+ ] [
-+ .B -V
-+ .I variable
- ]
- .SH DESCRIPTION
- .I Xntpd
-***************
-*** 140,145 ****
---- 146,155 ----
- specify a directory to be used for creating statistics files
- .Ip -t 8
- add a key number to the trusted key list
-+ .Ip -v 8
-+ add a system variable
-+ .Ip -V 8
-+ add a system variable listed by default
- .SH "CONFIGURATION FILE OPTIONS"
- .IR Xntpd 's
- configuration file is relatively free format. Comments, which may be
-***************
-*** 494,499 ****
---- 504,534 ----
- This command is obsolete and not available in this version of
- .I xntpd.
- .PP
-+ .B setvar
-+ .I variable
-+ .I [default]
-+ .PP
-+ This command adds an additional system variable. These variables can be
-+ used to distribute additional information such as the access policy. If
-+ the variable of the from <name>=<value> is followed by the
-+ .I default
-+ keyword the variable will be listed as part of the default system
-+ variables (ntpq rv command). These additional variables serve informational
-+ purposes only. They are not related to the protocol other that they can be
-+ listed. The known protocol variables will always overide any variables defined
-+ via the
-+ .I setvar
-+ mechanism.
-+ .PP
-+ There are three special variables that contain the names of all variable of
-+ the same group. The
-+ .I sys_var_list
-+ holds the names of all system variables. The
-+ .I peer_var_list
-+ holds the names of all peer variables and the
-+ .I clock_var_list
-+ hold the names of the reference clock variables.
-+ .PP
- .B resolver
- .I /path/xntpres
- .PP
-***************
-*** 1093,1101 ****
- time.
- On the availability of PPS information the
- .I time2
-! fudge factor show the difference betwteen the PPS time stamp and the reception
-! time stamp of the serial signal. This parameter is read only attempts to
-! set this parameter will be ignored.
- The
- .I flag0
- enables input filtering. This a median filter with continuous sampling. The
---- 1128,1140 ----
- time.
- On the availability of PPS information the
- .I time2
-! fudge factor defines the skew between the PPS time stamp and the reception
-! time stamp of the PPS signal. This parameter is usually 0 as usually
-! the PPS signal is believed in time and OS delays should be corrected
-! in the machine specific section of the kernel driver.
-! .I time2
-! needs only be set when the actial PPS signal is delayed for some
-! reason.
- The
- .I flag0
- enables input filtering. This a median filter with continuous sampling. The
-***************
-*** 1109,1121 ****
- .I ntpq
- timecode variable
- .PP
-! The timecode variable in the ntpq read clock variable command contains several
-! fields. The first field is the local time in Unix format. The second field is
-! the offset to UTC (format HHMM). The currently active receiver flags are listed
-! next. Additional feature flags of the receiver are optionally listed in paranthesis.
-! The actual time code is enclosed in angle brackets < >. A qualification of the
-! decoded time code format is following the time code. The last piece of information
-! is the overall running time and the accumulated times for the clock event states.
- .PP
- Unit encoding
- .PP
---- 1148,1172 ----
- .I ntpq
- timecode variable
- .PP
-! The ntpq read clock variables command list several variables. These
-! hold followinf information:
-! .I refclock_time
-! is the local time with the offset to UTC (format HHMM).
-! The currently active receiver flags are listed in
-! .I refclock_status.
-! Additional feature flags of the receiver are optionally listed in paranthesis.
-! The actual time code is listed in
-! .I timecode.
-! A qualification of the decoded time code format is following in
-! .I refclock_format.
-! The last piece of information is the overall running time and the accumulated
-! times for the clock event states in
-! .I refclock_states.
-! When PPS information is present additional variable are available.
-! .I refclock_ppstime
-! lists then the PPS timestamp and
-! .I refclock_ppsskew
-! lists the difference between RS232 derived timestamp and the PPS timestamp.
- .PP
- Unit encoding
- .PP
-diff -c include/ntp_control.h:1.1.1.5 include/ntp_control.h:3.6
-*** include/ntp_control.h:1.1.1.5 Wed Jan 26 21:48:21 1994
---- include/ntp_control.h Wed Jan 26 21:48:21 1994
-***************
-*** 163,171 ****
- #define CS_SYSTEM 17
- #define CS_KEYID 18
- #define CS_REFSKEW 19
-! #define CS_VERSION 20
-
-! #define CS_MAXCODE CS_VERSION
-
- /*
- * Peer variables we understand
---- 163,171 ----
- #define CS_SYSTEM 17
- #define CS_KEYID 18
- #define CS_REFSKEW 19
-! #define CS_VARLIST 20
-
-! #define CS_MAXCODE CS_VARLIST
-
- /*
- * Peer variables we understand
-***************
-*** 204,212 ****
- #define CP_SENT 32
- #define CP_FILTERROR 33
- #define CP_FLASH 34
-! #define CP_DISP 35
-! #define CP_MAXCODE CP_DISP
-
- /*
- * Clock variables we understand
- */
---- 204,213 ----
- #define CP_SENT 32
- #define CP_FILTERROR 33
- #define CP_FLASH 34
-! #define CP_VARLIST 35
-
-+ #define CP_MAXCODE CP_VARLIST
-+
- /*
- * Clock variables we understand
- */
-***************
-*** 222,229 ****
- #define CC_FUDGEVAL2 10
- #define CC_FLAGS 11
- #define CC_DEVICE 12
-
-! #define CC_MAXCODE CC_DEVICE
-
- /*
- * Definition of the structure used internally to hold trap information.
---- 223,231 ----
- #define CC_FUDGEVAL2 10
- #define CC_FLAGS 11
- #define CC_DEVICE 12
-+ #define CC_VARLIST 13
-
-! #define CC_MAXCODE CC_VARLIST
-
- /*
- * Definition of the structure used internally to hold trap information.
-diff -c include/ntp_filegen.h:1.1.1.3 include/ntp_filegen.h:3.7
-*** include/ntp_filegen.h:1.1.1.3 Wed Jan 26 21:48:22 1994
---- include/ntp_filegen.h Wed Jan 26 21:48:22 1994
-***************
-*** 1,5 ****
- /*
-! * ntp_filegen.h,v 3.6 1993/09/01 21:51:24 kardel Exp
- *
- * definitions for NTP file generations support
- *
---- 1,5 ----
- /*
-! * ntp_filegen.h,v 3.7 1994/01/25 19:04:16 kardel Exp
- *
- * definitions for NTP file generations support
- *
-diff -c include/ntp_machine.h:1.1.1.9 include/ntp_machine.h:1.24
-*** include/ntp_machine.h:1.1.1.9 Wed Jan 26 21:48:27 1994
---- include/ntp_machine.h Wed Jan 26 21:48:27 1994
-***************
-*** 123,134 ****
-
- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
-
- You could just put the defines on the DEFS line in machines/<os> file.
- I don't since there are lost of different types compiler that a systemm might
- have, some that can do proto typing and others that cannot on the saem system.
- I get a chanse to twiddle some of the configuration paramasters at compile
- time based on compler/machine combinatsions by using this include file.
-! See convex, aix and sun configurations see how complex it get.
-
- */
-
---- 123,138 ----
-
- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
-
-+ DEFINITIONS FOR SYSTEM && PROCESSOR
-+ STR_SYSTEM - value of system variable
-+ STR_PROCESSOR - value of processor variable
-+
- You could just put the defines on the DEFS line in machines/<os> file.
- I don't since there are lost of different types compiler that a systemm might
- have, some that can do proto typing and others that cannot on the saem system.
- I get a chanse to twiddle some of the configuration paramasters at compile
- time based on compler/machine combinatsions by using this include file.
-! See convex, aix and sun configurations see how complex it gets.
-
- */
-
-***************
-*** 152,157 ****
---- 156,164 ----
- #endif
- #endif /*_BSD */
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/AIX"
-+ #endif
- #endif /* RS6000 */
-
- /*
-***************
-*** 166,171 ****
---- 173,181 ----
- #define RETSIGTYPE void
- #define NTP_SYSCALL_GET 132
- #define NTP_SYSCALL_ADJ 147
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/SunOS 4.x"
-+ #endif
- #endif
-
- /*
-***************
-*** 182,188 ****
---- 192,201 ----
- #define NTP_POSIX_SOURCE
- #define HAVE_ATT_SETPGRP
- #define HAVE_ATT_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/SINIX-M"
- #endif
-+ #endif
-
- /*
- * SunOS 5.1 or SunOS 5.2 or Solaris 2.1 or Solaris 2.2
-***************
-*** 198,203 ****
---- 211,219 ----
- #define HAVE_ATT_SETPGRP
- #define HAVE_ATT_NICE
- #define UDP_WILDCARD_DELIVERY
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Solaris 2.x"
-+ #endif
- #endif
-
- /*
-***************
-*** 221,227 ****
---- 237,246 ----
- #define NTP_POSIX_SOURCE
- #define HAVE_ATT_SETPGRP
- #endif
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/ConvexOS"
- #endif
-+ #endif
-
- /*
- * IRIX 4.X and IRIX 5.x
-***************
-*** 235,240 ****
---- 254,262 ----
- #define HAVE_ATT_SETPGRP
- #define HAVE_BSD_NICE
- #define NTP_POSIX_SOURCE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/IRIX"
-+ #endif
- #endif
-
- /*
-***************
-*** 247,253 ****
---- 269,278 ----
- #define HAVE_BSD_NICE
- #define RETSIGTYPE void
- #define NTP_SYSCALLS_STD
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Ultrix"
- #endif
-+ #endif
-
- /*
- * AUX
-***************
-*** 272,277 ****
---- 297,305 ----
- #define HAVE_BSD_TTYS
- #define LOG_NTP LOG_LOCAL1
- #define HAVE_SIGNALED_IO
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/AUX"
-+ #endif
- #endif
-
- /*
-***************
-*** 283,289 ****
---- 311,320 ----
- #define HAVE_BSD_NICE
- #define HAVE_N_UN
- #undef NTP_POSIX_SOURCE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Next"
- #endif
-+ #endif
-
- /*
- * HPUX
-***************
-*** 301,306 ****
---- 332,340 ----
- #else
- #define HAVE_READKMEM
- #endif
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/HPUX"
-+ #endif
- #endif
-
- /*
-***************
-*** 311,316 ****
---- 345,353 ----
- #define HAVE_LIBKVM
- #define NTP_POSIX_SOURCE
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/BSDI"
-+ #endif
- #define HAVE_BSD_TTYS
- #endif
-
-***************
-*** 327,332 ****
---- 364,372 ----
- * along with a standard name one day ! */
- #define ntp_adjtime __adjtimex
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Linux"
-+ #endif
- #endif
-
- /*
-***************
-*** 338,344 ****
---- 378,387 ----
- #define HAVE_READKMEM
- #define NTP_POSIX_SOURCE
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/*BSD"
- #endif
-+ #endif
-
- /*
- * DECOSF1
-***************
-*** 349,354 ****
---- 392,400 ----
- #define NTP_POSIX_SOURCE
- #define NTP_SYSCALLS_STD
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/DECOSF1"
-+ #endif
- #endif
-
- /*
-***************
-*** 358,364 ****
---- 404,413 ----
- #define HAVE_READKMEM
- #define S_CHAR_DEFINED
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/I386"
- #endif
-+ #endif
-
- /*
- * Mips
-***************
-*** 366,371 ****
---- 415,423 ----
- #if defined(SYS_MIPS)
- #define NOKMEM
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Mips"
-+ #endif
- #endif
-
- /*
-***************
-*** 373,379 ****
---- 425,434 ----
- */
- #if defined(SYS_SEQUENT)
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Sequent Dynix 3"
- #endif
-+ #endif
-
- /*
- * PTX
-***************
-*** 407,412 ****
---- 462,470 ----
- typedef unsigned short u_short;
- typedef unsigned long u_long;
- #endif
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Sequent PTX"
-+ #endif
- #endif
-
-
-***************
-*** 417,423 ****
---- 475,484 ----
- #define NO_SIGNED_CHAR_DECL
- #define HAVE_READKMEM
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Sony"
- #endif
-+ #endif
-
- /*
- * VAX
-***************
-*** 426,431 ****
---- 487,495 ----
- #define NO_SIGNED_CHAR_DECL
- #define HAVE_READKMEM
- #define HAVE_BSD_NICE
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/VAX"
-+ #endif
- #endif
-
- /*
-***************
-*** 445,455 ****
- #define LOCK_PROCESS
- #define SYSV_TIMEOFDAY
- #define SIZE_RETURNED_IN_BUFFER
-! #endif
-!
-! #ifdef STREAM /* STREAM implies TERMIOS */
-! #ifndef HAVE_TERMIOS
-! #define HAVE_TERMIOS
- #endif
- #endif
-
---- 509,516 ----
- #define LOCK_PROCESS
- #define SYSV_TIMEOFDAY
- #define SIZE_RETURNED_IN_BUFFER
-! #ifndef STR_SYSTEM
-! #define STR_SYSTEM "UNIX/SysVR4"
- #endif
- #endif
-
-***************
-*** 464,469 ****
---- 525,539 ----
- #define NTP_SYSCALLS_STD
- #define USE_PROTOTYPES
- #define UDP_WILDCARD_DELIVERY
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/DOMAINOS"
-+ #endif
-+ #endif
-+
-+ #ifdef STREAM /* STREAM implies TERMIOS */
-+ #ifndef HAVE_TERMIOS
-+ #define HAVE_TERMIOS
-+ #endif
- #endif
-
- #ifndef RETSIGTYPE
-diff -c include/ntp_refclock.h:1.1.1.8 include/ntp_refclock.h:3.8
-*** include/ntp_refclock.h:1.1.1.8 Wed Jan 26 21:48:28 1994
---- include/ntp_refclock.h Wed Jan 26 21:48:28 1994
-***************
-*** 75,84 ****
- LONG fudgeval2;
- u_char currentstatus;
- u_char lastevent;
-! u_char unused[1];
- };
-
--
- /*
- * Reference clock I/O structure. Used to provide an interface between
- * the reference clock drivers and the I/O module.
---- 75,84 ----
- LONG fudgeval2;
- u_char currentstatus;
- u_char lastevent;
-! u_char unused;
-! struct ctl_var *kv_list; /* additional variables */
- };
-
- /*
- * Reference clock I/O structure. Used to provide an interface between
- * the reference clock drivers and the I/O module.
-diff -c include/ntpd.h:1.1.1.6 include/ntpd.h:1.5
-*** include/ntpd.h:1.1.1.6 Wed Jan 26 21:48:35 1994
---- include/ntpd.h Wed Jan 26 21:48:35 1994
-***************
-*** 1,4 ****
-! /* ntpd.h,v 3.1 1993/07/06 01:07:03 jbj Exp
- * ntpd.h - Prototypes for xntpd.
- */
-
---- 1,4 ----
-! /*
- * ntpd.h - Prototypes for xntpd.
- */
-
-***************
-*** 21,26 ****
---- 21,55 ----
- extern void process_control P((struct recvbuf *, int));
- extern void report_event P((int, struct peer *));
-
-+ /* ntp_control.c */
-+ /*
-+ * Structure for translation tables between internal system
-+ * variable indices and text format.
-+ */
-+ struct ctl_var {
-+ u_short code;
-+ u_short flags;
-+ char *text;
-+ };
-+ /*
-+ * Flag values
-+ */
-+ #define CAN_READ 0x01
-+ #define CAN_WRITE 0x02
-+
-+ #define DEF 0x20
-+ #define PADDING 0x40
-+ #define EOV 0x80
-+
-+ #define RO (CAN_READ)
-+ #define WO (CAN_WRITE)
-+ #define RW (CAN_READ|CAN_WRITE)
-+
-+ extern char * add_var P((struct ctl_var **, unsigned long, int));
-+ extern void free_varlist P((struct ctl_var *));
-+ extern void set_var P((struct ctl_var **, char *, unsigned long, int));
-+ extern void set_sys_var P((char *, unsigned long, int));
-+
- /* ntp_intres.c */
- extern void ntp_intres P((void));
-
-diff -c include/parse.h:1.1.1.6 include/parse.h:3.13
-*** include/parse.h:1.1.1.6 Wed Jan 26 21:48:36 1994
---- include/parse.h Wed Jan 26 21:48:36 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp
- *
-! * parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
-! * parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 15,21 ****
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.12 1994/01/23 17:23:05 kardel Exp FAU";
- #endif
-
- #include "ntp_types.h"
---- 15,21 ----
- #ifndef __PARSE_H__
- #define __PARSE_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char parsehrcsid[]="parse.h,v 3.13 1994/01/25 19:04:21 kardel Exp FAU";
- #endif
-
- #include "ntp_types.h"
-***************
-*** 365,370 ****
---- 365,373 ----
- * History:
- *
- * parse.h,v
-+ * Revision 3.13 1994/01/25 19:04:21 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.12 1994/01/23 17:23:05 kardel
- * 1994 reconcilation
- *
-diff -c include/parse_conf.h:1.1.1.5 include/parse_conf.h:3.5
-*** include/parse_conf.h:1.1.1.5 Wed Jan 26 21:48:37 1994
---- include/parse_conf.h Wed Jan 26 21:48:37 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
- *
-! * parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp
- *
- * Copyright (c) 1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/include/parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
- *
-! * parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp
- *
- * Copyright (c) 1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 15,21 ****
- #ifndef __PARSE_CONF_H__
- #define __PARSE_CONF_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char dcfhrcsid[]="parse_conf.h,v 3.4 1994/01/23 17:23:07 kardel Exp FAU";
- #endif
-
- /*
---- 15,21 ----
- #ifndef __PARSE_CONF_H__
- #define __PARSE_CONF_H__
- #if !(defined(lint) || defined(__GNUC__))
-! static char dcfhrcsid[]="parse_conf.h,v 3.5 1994/01/25 19:04:23 kardel Exp FAU";
- #endif
-
- /*
-diff -c include/sys/parsestreams.h:1.1.1.6 include/sys/parsestreams.h:3.11
-*** include/sys/parsestreams.h:1.1.1.6 Wed Jan 26 21:48:44 1994
---- include/sys/parsestreams.h Wed Jan 26 21:48:44 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
- *
-! * parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/include/sys/parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
- *
-! * parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
-***************
-*** 13,19 ****
- */
-
- #if !(defined(lint) || defined(__GNUC__))
-! static char parse77hrcsid[]="parsestreams.h,v 3.10 1994/01/23 17:23:12 kardel Exp";
- #endif
-
- #undef PARSEKERNEL
---- 13,19 ----
- */
-
- #if !(defined(lint) || defined(__GNUC__))
-! static char parse77hrcsid[]="parsestreams.h,v 3.11 1994/01/25 19:04:30 kardel Exp";
- #endif
-
- #undef PARSEKERNEL
-diff -c kernel/Makefile.tmpl:1.1.1.3 kernel/Makefile.tmpl:3.6
-*** kernel/Makefile.tmpl:1.1.1.3 Wed Jan 26 21:48:49 1994
---- kernel/Makefile.tmpl Wed Jan 26 21:48:49 1994
-***************
-*** 1,7 ****
- #
-! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.5 1994/01/23 17:37:53 kardel Exp
- #
-- #
- # parse routine that could be used in two places
- #
- COMPILER= cc
---- 1,6 ----
- #
-! # /src/NTP/REPOSITORY/v3/kernel/Makefile.tmpl,v 3.6 1994/01/25 19:04:35 kardel Exp
- #
- # parse routine that could be used in two places
- #
- COMPILER= cc
-diff -c lib/systime.c:1.1.1.10 lib/systime.c:1.7
-*** lib/systime.c:1.1.1.10 Wed Jan 26 21:50:00 1994
---- lib/systime.c Wed Jan 26 21:50:00 1994
-***************
-*** 238,273 ****
- #endif
- }
-
-- sys_clock_offset.l_ui = offset_i;
-- sys_clock_offset.l_uf = offset_f;
--
- if (adjtime(&adjtv, &oadjtv) < 0) {
- syslog(LOG_ERR, "Can't do time adjustment: %m");
- rval = 0;
-! } else
- rval = 1;
-
- #ifdef DEBUGRS6000
-! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
-! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
-! umfptoa(offset_i, offset_f, 9));
-! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
-! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
-! oadjtv.tv_usec);
- #endif /* DEBUGRS6000 */
-
-! if ((oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) && (max_no_complete > 0)) {
-! sTVTOTS(&oadjtv, &oadjts);
-! L_ADD(&sys_clock_offset, &oadjts);
-! syslog(LOG_WARNING, "Previous time adjustment didn't complete");
- #ifdef DEBUG
-! if (debug > 4)
-! syslog(LOG_DEBUG,
-! "Previous adjtime() incomplete, residual = %s\n",
-! tvtoa(&oadjtv));
- #endif
-! if (--max_no_complete == 0) syslog(LOG_WARNING,
-! "*** No more 'Prev time adj didn't complete'");
- }
- return(rval);
- }
---- 238,277 ----
- #endif
- }
-
- if (adjtime(&adjtv, &oadjtv) < 0) {
- syslog(LOG_ERR, "Can't do time adjustment: %m");
- rval = 0;
-! } else {
-! sys_clock_offset.l_ui = offset_i;
-! sys_clock_offset.l_uf = offset_f;
- rval = 1;
-
- #ifdef DEBUGRS6000
-! syslog(LOG_ERR, "adj_systime(%s): offset = %s%s\n",
-! mfptoa((adj<0?-1:0), adj, 9), isneg?"-":"",
-! umfptoa(offset_i, offset_f, 9));
-! syslog(LOG_ERR, "%d %d %d %d\n", (int) adjtv.tv_sec,
-! (int) adjtv.tv_usec, (int) oadjtv.tv_sec, (int)
-! oadjtv.tv_usec);
- #endif /* DEBUGRS6000 */
-
-! if (oadjtv.tv_sec != 0 || oadjtv.tv_usec != 0) {
-! sTVTOTS(&oadjtv, &oadjts);
-! L_ADD(&sys_clock_offset, &oadjts);
-! if (max_no_complete > 0) {
-! syslog(LOG_WARNING,
-! "Previous time adjustment didn't complete");
- #ifdef DEBUG
-! if (debug > 4)
-! syslog(LOG_DEBUG,
-! "Previous adjtime() incomplete, residual = %s\n",
-! tvtoa(&oadjtv));
- #endif
-! if (--max_no_complete == 0)
-! syslog(LOG_WARNING,
-! "*** No more 'Prev time adj didn't complete'");
-! }
-! }
- }
- return(rval);
- }
-diff -c ntpq/ntpq.c:1.1.1.20 ntpq/ntpq.c:3.20
-*** ntpq/ntpq.c:1.1.1.20 Wed Jan 26 21:50:59 1994
---- ntpq/ntpq.c Wed Jan 26 21:50:59 1994
-***************
-*** 2577,2582 ****
---- 2577,2583 ----
- register char *cp;
- register char *np;
- register char *cpend;
-+ int quoted = 0;
- static char name[MAXVARLEN];
- static char value[MAXVALLEN];
-
-***************
-*** 2623,2630 ****
- while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
- cp++;
- np = value;
-! while (cp < cpend && *cp != ',')
-! *np++ = *cp++;
- while (np > value && isspace(*(np-1)))
- np--;
- *np = '\0';
---- 2624,2634 ----
- while (cp < cpend && (isspace(*cp) && *cp != '\r' && *cp != '\n'))
- cp++;
- np = value;
-! while (cp < cpend && ((*cp != ',') || quoted))
-! {
-! quoted ^= ((*np++ = *cp++) == '"');
-! }
-!
- while (np > value && isspace(*(np-1)))
- np--;
- *np = '\0';
-diff -c parse/Makefile.kernel:1.1.1.2 parse/Makefile.kernel:3.8
-*** parse/Makefile.kernel:1.1.1.2 Wed Jan 26 21:51:11 1994
---- parse/Makefile.kernel Wed Jan 26 21:51:11 1994
-***************
-*** 30,46 ****
- ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
- @echo "--- Install 'parse' in /kernel/strmod for automatic loading"
-
-! mparsestreams.o: parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
- ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
- microtime.o
- rm -f parsestreams.o
-! @echo "--- You may load mparsestreams.o via 'modload mparsestreams.o' into the kernel"
-
-! parsestreams.o: parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
-! ld -r -o $@ $@ ../lib/libntp.a libparse_kernel.a
-! @echo "--- You may load parsestreams.o via 'modload parsestreams.o' into the kernel"
-
- microtime.o: $(MICROTIME) assym.s
- cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
---- 30,51 ----
- ld -r -o parse parsesolaris.o libparse_kernel.a ../lib/libntp.a
- @echo "--- Install 'parse' in /kernel/strmod for automatic loading"
-
-! mparsestreams.o: mparsestreams.o.$(KARCH)
-! @echo "--- You may load mparsestreams.o.$(KARCH) via 'modload mparsestreams.o.$(KARCH)' into the kernel"
-!
-! mparsestreams.o.$(KARCH): parsestreams.c microtime.o ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c -DMICROTIME $(DEFS) -I../include parsestreams.c
- ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a \
- microtime.o
- rm -f parsestreams.o
-!
-! parsestreams.o: parsestreams.o.$(KARCH)
-! @echo "--- You may load parsestreams.o.$(KARCH) via 'modload parsestreams.o.$(KARCH)' into the kernel"
-
-! parsestreams.o.$(KARCH): parsestreams.c ../lib/libntp.a libparse_kernel.a ../include/parse.h ../include/sys/parsestreams.h
- cc -c $(DEFS) -I../include parsestreams.c
-! ld -r -o $@ parsestreams.o ../lib/libntp.a libparse_kernel.a
-! rm -f parsestreams.o
-
- microtime.o: $(MICROTIME) assym.s
- cc -E -I. $(MICROTIME) | sed -e '/\.global _uniqtime/d' > $@.i
-diff -c parse/clk_dcf7000.c:1.1.1.7 parse/clk_dcf7000.c:3.10
-*** parse/clk_dcf7000.c:1.1.1.7 Wed Jan 26 21:51:16 1994
---- parse/clk_dcf7000.c Wed Jan 26 21:51:17 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp
- *
-! * clk_dcf7000.c,v 3.9 1994/01/23 17:21:51 kardel Exp
- *
- * ELV DCF7000 module
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_DCF7000)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
- *
-! * clk_dcf7000.c,v 3.10 1994/01/25 19:05:07 kardel Exp
- *
- * ELV DCF7000 module
- *
-diff -c parse/clk_meinberg.c:1.1.1.7 parse/clk_meinberg.c:3.11
-*** parse/clk_meinberg.c:1.1.1.7 Wed Jan 26 21:51:17 1994
---- parse/clk_meinberg.c Wed Jan 26 21:51:18 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp
- *
-! * clk_meinberg.c,v 3.10 1994/01/23 17:21:54 kardel Exp
- *
- * Meinberg clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_MEINBERG)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
- *
-! * clk_meinberg.c,v 3.11 1994/01/25 19:05:10 kardel Exp
- *
- * Meinberg clock support
- *
-***************
-*** 414,419 ****
---- 414,422 ----
- * History:
- *
- * clk_meinberg.c,v
-+ * Revision 3.11 1994/01/25 19:05:10 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.10 1994/01/23 17:21:54 kardel
- * 1994 reconcilation
- *
-diff -c parse/clk_rawdcf.c:1.1.1.7 parse/clk_rawdcf.c:3.9
-*** parse/clk_rawdcf.c:1.1.1.7 Wed Jan 26 21:51:19 1994
---- parse/clk_rawdcf.c Wed Jan 26 21:51:19 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp
- *
-! * clk_rawdcf.c,v 3.8 1994/01/22 11:24:11 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_RAWDCF)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
- *
-! * clk_rawdcf.c,v 3.9 1994/01/25 19:05:12 kardel Exp
- *
- * Raw DCF77 pulse clock support
- *
-***************
-*** 529,534 ****
---- 529,537 ----
- * History:
- *
- * clk_rawdcf.c,v
-+ * Revision 3.9 1994/01/25 19:05:12 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.8 1994/01/22 11:24:11 kardel
- * fixed PPS handling
- *
-diff -c parse/clk_schmid.c:1.1.1.7 parse/clk_schmid.c:3.10
-*** parse/clk_schmid.c:1.1.1.7 Wed Jan 26 21:51:20 1994
---- parse/clk_schmid.c Wed Jan 26 21:51:20 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp
- *
-! * clk_schmid.c,v 3.9 1994/01/23 17:21:56 kardel Exp
- *
- * Schmid clock support
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_SCHMID)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
- *
-! * clk_schmid.c,v 3.10 1994/01/25 19:05:15 kardel Exp
- *
- * Schmid clock support
- *
-***************
-*** 168,173 ****
---- 168,176 ----
- * History:
- *
- * clk_schmid.c,v
-+ * Revision 3.10 1994/01/25 19:05:15 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.9 1994/01/23 17:21:56 kardel
- * 1994 reconcilation
- *
-diff -c parse/clk_trimble.c:1.1.1.2 parse/clk_trimble.c:3.7
-*** parse/clk_trimble.c:1.1.1.2 Wed Jan 26 21:51:21 1994
---- parse/clk_trimble.c Wed Jan 26 21:51:21 1994
-***************
-*** 1,6 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.6 1993/10/30 09:44:45 kardel Exp
- *
- * Trimble SV6 clock support
- */
---- 1,6 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS)) && defined(CLOCK_TRIMSV6)
- /*
-! * /src/NTP/REPOSITORY/v3/parse/clk_trimble.c,v 3.7 1994/01/25 19:05:17 kardel Exp
- *
- * Trimble SV6 clock support
- */
-***************
-*** 106,111 ****
---- 106,114 ----
- * History:
- *
- * clk_trimble.c,v
-+ * Revision 3.7 1994/01/25 19:05:17 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.6 1993/10/30 09:44:45 kardel
- * conditional compilation flag cleanup
- *
-diff -c parse/parse.c:1.1.1.7 parse/parse.c:3.19
-*** parse/parse.c:1.1.1.7 Wed Jan 26 21:51:24 1994
---- parse/parse.c Wed Jan 26 21:51:24 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp
- *
-! * parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
- *
-! * parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 22,28 ****
- */
-
- #if !(defined(lint) || defined(__GNUC__))
-! static char rcsid[] = "parse.c,v 3.18 1994/01/23 17:21:59 kardel Exp";
- #endif
-
- #include "sys/types.h"
---- 22,28 ----
- */
-
- #if !(defined(lint) || defined(__GNUC__))
-! static char rcsid[] = "parse.c,v 3.19 1994/01/25 19:05:20 kardel Exp";
- #endif
-
- #include "sys/types.h"
-***************
-*** 1139,1144 ****
---- 1139,1147 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.19 1994/01/25 19:05:20 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.18 1994/01/23 17:21:59 kardel
- * 1994 reconcilation
- *
-diff -c parse/parse_conf.c:1.1.1.7 parse/parse_conf.c:3.13
-*** parse/parse_conf.c:1.1.1.7 Wed Jan 26 21:51:25 1994
---- parse/parse_conf.c Wed Jan 26 21:51:25 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp
- *
-! * parse_conf.c,v 3.12 1994/01/23 17:22:02 kardel Exp
- *
- * Parser configuration module for reference clocks
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
- *
-! * parse_conf.c,v 3.13 1994/01/25 19:05:23 kardel Exp
- *
- * Parser configuration module for reference clocks
- *
-***************
-*** 81,86 ****
---- 81,89 ----
- * History:
- *
- * parse_conf.c,v
-+ * Revision 3.13 1994/01/25 19:05:23 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.12 1994/01/23 17:22:02 kardel
- * 1994 reconcilation
- *
-diff -c parse/parsesolaris.c:1.1.1.4 parse/parsesolaris.c:3.9
-*** parse/parsesolaris.c:1.1.1.4 Wed Jan 26 21:51:26 1994
---- parse/parsesolaris.c Wed Jan 26 21:51:27 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp
- *
-! * parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
- *
-! * parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS5.x - not fully tested - buyer beware ! - OS KILLERS may still be
-***************
-*** 19,25 ****
- */
-
- #ifndef lint
-! static char rcsid[] = "parsesolaris.c,v 3.8 1994/01/23 17:22:04 kardel Exp";
- #endif
-
- /*
---- 19,25 ----
- */
-
- #ifndef lint
-! static char rcsid[] = "parsesolaris.c,v 3.9 1994/01/25 19:05:26 kardel Exp";
- #endif
-
- /*
-***************
-*** 139,145 ****
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.8";
- char *s, *S, *t;
-
- /*
---- 139,145 ----
- /*ARGSUSED*/
- int _init(void)
- {
-! static char revision[] = "3.9";
- char *s, *S, *t;
-
- /*
-***************
-*** 1179,1184 ****
---- 1179,1187 ----
- * History:
- *
- * parsesolaris.c,v
-+ * Revision 3.9 1994/01/25 19:05:26 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.8 1994/01/23 17:22:04 kardel
- * 1994 reconcilation
- *
-diff -c parse/parsestreams.c:1.1.1.6 parse/parsestreams.c:3.12
-*** parse/parsestreams.c:1.1.1.6 Wed Jan 26 21:51:28 1994
---- parse/parsestreams.c Wed Jan 26 21:51:28 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
- *
-! * parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
- *
-! * parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp
- *
- * STREAMS module for reference clocks
- * (SunOS4.x)
-***************
-*** 16,22 ****
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.11 1994/01/23 17:22:07 kardel Exp";
- #endif
-
- #include "sys/types.h"
---- 16,22 ----
- */
-
- #ifndef lint
-! static char rcsid[] = "parsestreams.c,v 3.12 1994/01/25 19:05:30 kardel Exp";
- #endif
-
- #include "sys/types.h"
-***************
-*** 195,201 ****
- }
- else
- {
-! static char revision[] = "3.11";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
---- 195,201 ----
- }
- else
- {
-! static char revision[] = "3.12";
- char *s, *S, *t;
-
- strncpy(ifm->f_name, mname, FMNAMESZ);
-***************
-*** 1258,1263 ****
---- 1258,1266 ----
- * History:
- *
- * parsestreams.c,v
-+ * Revision 3.12 1994/01/25 19:05:30 kardel
-+ * 94/01/23 reconcilation
-+ *
- * Revision 3.11 1994/01/23 17:22:07 kardel
- * 1994 reconcilation
- *
-diff -c parse/util/Makefile.tmpl:1.1.1.2 parse/util/Makefile.tmpl:3.12
-*** parse/util/Makefile.tmpl:1.1.1.2 Wed Jan 26 21:51:31 1994
---- parse/util/Makefile.tmpl Wed Jan 26 21:51:31 1994
-***************
-*** 1,5 ****
- #
-! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.11 1993/11/17 13:34:12 kardel Exp
- #
- COMPILER= cc
- DEFS=
---- 1,5 ----
- #
-! # /src/NTP/REPOSITORY/v3/parse/util/Makefile.tmpl,v 3.12 1994/01/25 19:05:39 kardel Exp
- #
- COMPILER= cc
- DEFS=
-diff -c parse/util/dcfd.c:1.1.1.4 parse/util/dcfd.c:3.15
-*** parse/util/dcfd.c:1.1.1.4 Wed Jan 26 21:51:33 1994
---- parse/util/dcfd.c Wed Jan 26 21:51:33 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
- *
-! * dcfd.c,v 3.13 1994/01/23 17:22:15 kardel Exp
- *
- * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
- *
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
- *
-! * dcfd.c,v 3.15 1994/01/25 19:05:42 kardel Exp
- *
- * DCF77 100/200ms pulse synchronisation daemon program (via 50Baud serial line)
- *
-***************
-*** 733,740 ****
- * assume that we convert timecode within the unix/UTC epoch -
- * prolonges validity of 2 digit years
- */
-! if (clock->year < 1900)
-! clock->year += 100; /* XXX this will do it till <2092 */
-
- /*
- * must have been a really negative year code - drop it
---- 733,740 ----
- * assume that we convert timecode within the unix/UTC epoch -
- * prolonges validity of 2 digit years
- */
-! if (clock->year < 1994)
-! clock->year += 100; /* XXX this will do it till <2094 */
-
- /*
- * must have been a really negative year code - drop it
-diff -c parse/util/testdcf.c:1.1.1.5 parse/util/testdcf.c:3.9
-*** parse/util/testdcf.c:1.1.1.5 Wed Jan 26 21:51:35 1994
---- parse/util/testdcf.c Wed Jan 26 21:51:35 1994
-***************
-*** 1,7 ****
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp
- *
-! * testdcf.c,v 3.8 1994/01/23 17:22:20 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
---- 1,7 ----
- /*
-! * /src/NTP/REPOSITORY/v3/parse/util/testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
-! * testdcf.c,v 3.9 1994/01/25 19:05:45 kardel Exp
- *
- * simple DCF77 100/200ms pulse test program (via 50Baud serial line)
- *
-diff -c scripts/Guess.sh:1.1.1.6 scripts/Guess.sh:1.11
-*** scripts/Guess.sh:1.1.1.6 Wed Jan 26 21:52:11 1994
---- scripts/Guess.sh Wed Jan 26 21:52:12 1994
-***************
-*** 19,25 ****
- sinix-m)
- guess=sinix-m
- ;;
-! sunos) case "$3" in
- 4.1*) guess="sunos4" ;;
- 5.1) guess="sunos5.1" ;;
- 5.*) guess="sunos5.2" ;;
---- 19,26 ----
- sinix-m)
- guess=sinix-m
- ;;
-! sunos|solaris)
-! case "$3" in
- 4.1*) guess="sunos4" ;;
- 5.1) guess="sunos5.1" ;;
- 5.*) guess="sunos5.2" ;;
-***************
-*** 59,65 ****
- guess="netbsd"
- ;;
- # now the fun starts - there are vendors that
-! # do not really identify their OS un uname.
- # Fine - now I look at our version and hope
- # that nobody else had this marvellous idea.
- # I am not willing to mention the vendor explicitly
---- 60,66 ----
- guess="netbsd"
- ;;
- # now the fun starts - there are vendors that
-! # do not really identify their OS in uname.
- # Fine - now I look at our version and hope
- # that nobody else had this marvellous idea.
- # I am not willing to mention the vendor explicitly
-diff -c xntpd/ntp_config.c:1.1.1.18 xntpd/ntp_config.c:3.21
-*** xntpd/ntp_config.c:1.1.1.18 Wed Jan 26 21:52:59 1994
---- xntpd/ntp_config.c Wed Jan 26 21:53:00 1994
-***************
-*** 93,98 ****
---- 93,99 ----
- #define CONFIG_PPS 24
- #define CONFIG_PIDFILE 25
- #define CONFIG_LOGFILE 26
-+ #define CONFIG_SETVAR 27
-
- #define CONF_MOD_VERSION 1
- #define CONF_MOD_KEY 2
-***************
-*** 177,182 ****
---- 178,184 ----
- { "statistics", CONFIG_STATISTICS },
- { "pidfile", CONFIG_PIDFILE },
- { "logfile", CONFIG_LOGFILE },
-+ { "setvar", CONFIG_SETVAR },
- { "", CONFIG_UNKNOWN }
- };
-
-***************
-*** 316,322 ****
- #endif
- extern char *FindConfig();
- char *progname;
-! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:";
-
- static int gettokens P((FILE *, char *, char **, int *));
- static int matchkey P((char *, struct keyword *));
---- 318,324 ----
- #endif
- extern char *FindConfig();
- char *progname;
-! static char *xntp_options = "abc:de:f:k:l:p:r:s:t:v:V:";
-
- static int gettokens P((FILE *, char *, char **, int *));
- static int matchkey P((char *, struct keyword *));
-***************
-*** 374,381 ****
- }
-
- if (errflg || optind != argc) {
-! (void) fprintf(stderr,
-! "usage: %s [ -bd ] [ -c config_file ]\n", progname);
- exit(2);
- }
- optind = 0; /* reset optind to restart getopt_l */
---- 376,385 ----
- }
-
- if (errflg || optind != argc) {
-! (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
-! (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
-! (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
-! (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
- exit(2);
- }
- optind = 0; /* reset optind to restart getopt_l */
-***************
-*** 428,433 ****
---- 432,438 ----
- char keyfile[MAXFILENAME];
- extern int optind;
- extern char *optarg;
-+ extern char *Version;
- extern U_LONG info_auth_keyid;
- FILEGEN *filegen;
-
-***************
-*** 443,448 ****
---- 448,459 ----
- res_fp = NULL;
- have_resolver = have_keyfile = 0;
-
-+ /*
-+ * install a non default variable with this daemon version
-+ */
-+ (void) sprintf(line, "daemon_version=\"%s\"", Version);
-+ set_sys_var(line, strlen(line)+1, RO);
-+
- #ifdef RESOLVE_INTERNAL
- resolve_internal = 1;
- #endif
-***************
-*** 546,551 ****
---- 557,566 ----
- } while (0);
- break;
-
-+ case 'v':
-+ case 'V':
-+ set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
-+ break;
-
- default:
- errflg++;
-***************
-*** 1386,1392 ****
- (u_char)peerkey, (u_char)peerflags);
- }
- break;
-!
- }
- }
- (void) fclose(fp);
---- 1401,1419 ----
- (u_char)peerkey, (u_char)peerflags);
- }
- break;
-!
-! case CONFIG_SETVAR:
-! if (ntokens < 2)
-! {
-! syslog(LOG_ERR,
-! "no value for setvar command - line ignored");
-! }
-! else
-! {
-! set_sys_var(tokens[1], strlen(tokens[1])+1, RW |
-! ((((ntokens > 2) && !strcmp(tokens[2], "default"))) ? DEF : 0));
-! }
-! break;
- }
- }
- (void) fclose(fp);
-***************
-*** 1445,1450 ****
---- 1472,1478 ----
- register char *cp;
- register int eol;
- register int ntok;
-+ register int quoted = 0;
-
- /*
- * Find start of first token
-***************
-*** 1469,1476 ****
- ntok = 0;
- while (!eol) {
- tokenlist[ntok++] = cp;
-! while (!ISEOL(*cp) && !ISSPACE(*cp))
-! cp++;
- if (ISEOL(*cp)) {
- *cp = '\0';
- eol = 1;
---- 1497,1505 ----
- ntok = 0;
- while (!eol) {
- tokenlist[ntok++] = cp;
-! while (!ISEOL(*cp) && (!ISSPACE(*cp) || quoted))
-! quoted ^= (*cp++ == '"');
-!
- if (ISEOL(*cp)) {
- *cp = '\0';
- eol = 1;
-diff -c xntpd/ntp_control.c:1.1.1.15 xntpd/ntp_control.c:3.21
-*** xntpd/ntp_control.c:1.1.1.15 Wed Jan 26 21:53:01 1994
---- xntpd/ntp_control.c Wed Jan 26 21:53:02 1994
-***************
-*** 1,4 ****
-! /* ntp_control.c,v 3.1 1993/07/06 01:11:13 jbj Exp
- * ntp_control.c - respond to control messages and send async traps
- */
- #include <stdio.h>
---- 1,4 ----
-! /*
- * ntp_control.c - respond to control messages and send async traps
- */
- #include <stdio.h>
-***************
-*** 61,66 ****
---- 61,67 ----
- static void ctl_putclock P((int, struct refclockstat *, int));
- #endif /* REFCLOCK */
- static struct ctl_var *ctl_getitem P((struct ctl_var *, char **));
-+ static unsigned long count_var P((struct ctl_var *));
- static void control_unspec P((struct recvbuf *, int));
- static void read_status P((struct recvbuf *, int));
- static void read_variables P((struct recvbuf *, int));
-***************
-*** 83,113 ****
- { NO_REQUEST, 0 }
- };
-
--
-- /*
-- * Structure for translation tables between internal system
-- * variable indices and text format.
-- */
-- struct ctl_var {
-- u_short code;
-- u_short flags;
-- char *text;
-- };
--
- /*
-- * Flag values
-- */
-- #define CAN_READ 0x1
-- #define CAN_WRITE 0x2
-- #define PADDING 0x80
-- #define EOV 0x40
--
-- #define RO (CAN_READ)
-- #define WO (CAN_WRITE)
-- #define RW (CAN_READ|CAN_WRITE)
--
--
-- /*
- * System variable values. The array can be indexed by
- * the variable index to find the textual name.
- */
---- 84,90 ----
-***************
-*** 132,141 ****
- { CS_SYSTEM, RO, "system" }, /* 17 */
- { CS_KEYID, RO, "keyid" }, /* 18 */
- { CS_REFSKEW, RO, "refskew" }, /* 19 */
-! { CS_VERSION, RO, "daemon_version" }, /* 20 */
- { 0, EOV, "" }
- };
-
- /*
- * System variables we print by default (in fuzzball order, more-or-less)
- */
---- 109,120 ----
- { CS_SYSTEM, RO, "system" }, /* 17 */
- { CS_KEYID, RO, "keyid" }, /* 18 */
- { CS_REFSKEW, RO, "refskew" }, /* 19 */
-! { CS_VARLIST, RO, "sys_var_list" },/* 20 */
- { 0, EOV, "" }
- };
-
-+ static struct ctl_var *ext_sys_var = (struct ctl_var *)0;
-+
- /*
- * System variables we print by default (in fuzzball order, more-or-less)
- */
-***************
-*** 153,159 ****
- CS_OFFSET,
- CS_DRIFT,
- CS_COMPLIANCE,
-- CS_VERSION,
- 0
- };
-
---- 132,137 ----
-***************
-*** 197,202 ****
---- 175,181 ----
- { CP_SENT, RO, "sent" }, /* 32 */
- { CP_FILTERROR, RO, "filterror" }, /* 33 */
- { CP_FLASH, RO, "flash" }, /* 34 */
-+ { CP_VARLIST, RO, "peer_var_list" }, /* 35 */
- { 0, EOV, "" }
- };
-
-***************
-*** 255,260 ****
---- 234,240 ----
- { CC_FUDGEVAL2, RO, "fudgeval2" }, /* 10 */
- { CC_FLAGS, RO, "flags" }, /* 11 */
- { CC_DEVICE, RO, "device" }, /* 12 */
-+ { CC_VARLIST, RO, "clock_var_list" },/* 13 */
- { 0, EOV, "" }
- };
-
-***************
-*** 283,290 ****
---- 263,277 ----
- /*
- * System and processor definitions. These will change for the gizmo board.
- */
-+ #ifndef STR_SYSTEM
- #define STR_SYSTEM "UNIX"
-+ #endif
-+ #ifndef STR_PROCESSOR
- #define STR_PROCESSOR "unknown"
-+ #endif
-+
-+ static char str_system[] = STR_SYSTEM;
-+ static char str_processor[] = STR_PROCESSOR;
-
- /*
- * Trap structures. We only allow a few of these, and send
-***************
-*** 1221,1227 ****
- ctl_putsys(varid)
- int varid;
- {
-- extern char *Version;
- l_fp tmp;
-
- switch (varid) {
---- 1208,1213 ----
-***************
-*** 1280,1291 ****
- ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
- break;
- case CS_PROCESSOR:
-! ctl_putstr(sys_var[CS_PROCESSOR].text, STR_PROCESSOR,
-! sizeof(STR_PROCESSOR) - 1);
- break;
- case CS_SYSTEM:
-! ctl_putstr(sys_var[CS_SYSTEM].text, STR_SYSTEM,
-! sizeof(STR_SYSTEM) - 1);
- break;
- case CS_KEYID:
- ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
---- 1266,1277 ----
- ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
- break;
- case CS_PROCESSOR:
-! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
-! sizeof(str_processor) - 1);
- break;
- case CS_SYSTEM:
-! ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
-! sizeof(str_system) - 1);
- break;
- case CS_KEYID:
- ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
-***************
-*** 1293,1301 ****
- case CS_REFSKEW:
- ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
- break;
-! case CS_VERSION:
-! ctl_putstr(sys_var[CS_VERSION].text, Version,
-! strlen(Version));
- break;
- }
- }
---- 1279,1338 ----
- case CS_REFSKEW:
- ctl_putlfp(sys_var[CS_REFSKEW].text, &sys_refskew);
- break;
-! case CS_VARLIST:
-! {
-! char buf[CTL_MAX_DATA_LEN];
-! register char *s, *ss, *t, *be;
-! register int i;
-! register struct ctl_var *k;
-!
-! s = buf;
-! be = buf + sizeof(buf) - strlen(sys_var[CS_VARLIST].text) - 4;
-! if (s > be)
-! break; /* really long var name 8-( - Killer */
-!
-! strcpy(s, sys_var[CS_VARLIST].text);
-! strcat(s, "=\"");
-! s += strlen(s);
-! t = s;
-!
-! for (k = sys_var; !(k->flags &EOV); k++)
-! {
-! i = strlen(k->text);
-! if (s+i+1 >= be)
-! break;
-! if (s != t)
-! *s++ = ',';
-! strcpy(s, k->text);
-! s += i;
-! }
-!
-! for (k = ext_sys_var; k && !(k->flags &EOV); k++)
-! {
-! ss = k->text;
-! if (!ss)
-! continue;
-!
-! while (*ss && *ss != '=')
-! ss++;
-!
-! i = ss - k->text;
-! if (s+i+1 >= be)
-! break;
-! if (s != t)
-! *s++ = ',';
-! strncpy(s, k->text, i);
-! s += i;
-! }
-!
-! if (s+2 >= be)
-! break;
-!
-! *s++ = '"';
-! *s = '\0';
-!
-! ctl_putdata(buf, s - buf, 0);
-! }
- break;
- }
- }
-***************
-*** 1428,1433 ****
---- 1465,1507 ----
- case CP_SENT:
- ctl_putuint(peer_var[CP_SENT].text, peer->sent);
- break;
-+ case CP_VARLIST:
-+ {
-+ char buf[CTL_MAX_DATA_LEN];
-+ register char *s, *t, *be;
-+ register int i;
-+ register struct ctl_var *k;
-+
-+ s = buf;
-+ be = buf + sizeof(buf) - strlen(peer_var[CP_VARLIST].text) - 4;
-+ if (s > be)
-+ break; /* really long var name 8-( - Killer */
-+
-+ strcpy(s, peer_var[CP_VARLIST].text);
-+ strcat(s, "=\"");
-+ s += strlen(s);
-+ t = s;
-+
-+ for (k = peer_var; !(k->flags &EOV); k++)
-+ {
-+ i = strlen(k->text);
-+ if (s+i+1 >= be)
-+ break;
-+ if (s != t)
-+ *s++ = ',';
-+ strcpy(s, k->text);
-+ s += i;
-+ }
-+
-+ if (s+2 >= be)
-+ break;
-+
-+ *s++ = '"';
-+ *s = '\0';
-+
-+ ctl_putdata(buf, s - buf, 0);
-+ }
-+ break;
- }
- }
-
-***************
-*** 1501,1506 ****
---- 1575,1636 ----
- strlen(clock->clockdesc));
- }
- break;
-+ case CC_VARLIST:
-+ {
-+ char buf[CTL_MAX_DATA_LEN];
-+ register char *s, *ss, *t, *be;
-+ register int i;
-+ register struct ctl_var *k;
-+
-+ s = buf;
-+ be = buf + sizeof(buf) - strlen(clock_var[CC_VARLIST].text) - 4;
-+ if (s > be)
-+ break; /* really long var name 8-( - Killer */
-+
-+ strcpy(s, clock_var[CC_VARLIST].text);
-+ strcat(s, "=\"");
-+ s += strlen(s);
-+ t = s;
-+
-+ for (k = clock_var; !(k->flags &EOV); k++)
-+ {
-+ i = strlen(k->text);
-+ if (s+i+1 >= be)
-+ break;
-+ if (s != t)
-+ *s++ = ',';
-+ strcpy(s, k->text);
-+ s += i;
-+ }
-+
-+ for (k = clock->kv_list; k && !(k->flags &EOV); k++)
-+ {
-+ ss = k->text;
-+ if (!ss)
-+ continue;
-+
-+ while (*ss && *ss != '=')
-+ ss++;
-+
-+ i = ss - k->text;
-+ if (s+i+1 >= be)
-+ break;
-+ if (s != t)
-+ *s++ = ',';
-+ strncpy(s, k->text, i);
-+ s += i;
-+ *s = '\0';
-+ }
-+
-+ if (s+2 >= be)
-+ break;
-+
-+ *s++ = '"';
-+ *s = '\0';
-+
-+ ctl_putdata(buf, s - buf, 0);
-+ }
-+ break;
- }
- }
- #endif
-***************
-*** 1517,1522 ****
---- 1647,1653 ----
- {
- register struct ctl_var *v;
- register char *cp, *tp;
-+ static struct ctl_var eol = { 0, EOV, };
- static char buf[128];
-
- /*
-***************
-*** 1528,1533 ****
---- 1659,1667 ----
-
- if (reqpt >= reqend)
- return 0;
-+
-+ if (var_list == (struct ctl_var *)0)
-+ return &eol;
-
- /*
- * Look for a first character match on the tag. If we find
-***************
-*** 1538,1548 ****
- while (!(v->flags & EOV)) {
- if (!(v->flags & PADDING) && *cp == *(v->text)) {
- tp = v->text;
-! while (*tp != '\0' && cp < reqend && *cp == *tp) {
- cp++;
- tp++;
- }
-! if (*tp == '\0') {
- while (cp < reqend && isspace(*cp))
- cp++;
- if (cp == reqend || *cp == ',') {
---- 1672,1682 ----
- while (!(v->flags & EOV)) {
- if (!(v->flags & PADDING) && *cp == *(v->text)) {
- tp = v->text;
-! while (*tp != '\0' && *tp != '=' && cp < reqend && *cp == *tp) {
- cp++;
- tp++;
- }
-! if ((*tp == '\0') || (*tp == '=')) {
- while (cp < reqend && isspace(*cp))
- cp++;
- if (cp == reqend || *cp == ',') {
-***************
-*** 1685,1692 ****
- register struct ctl_var *v;
- register int i;
- char *valuep;
-! u_char wants[(CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1)];
-! int gotvar;
-
- if (res_associd == 0) {
- /*
---- 1819,1826 ----
- register struct ctl_var *v;
- register int i;
- char *valuep;
-! u_char *wants;
-! int gotvar = (CS_MAXCODE>CP_MAXCODE) ? (CS_MAXCODE+1) : (CP_MAXCODE+1);
-
- if (res_associd == 0) {
- /*
-***************
-*** 1696,1707 ****
- rpkt.status = htons(ctlsysstatus());
- if (res_authokay)
- ctl_sys_num_events = 0;
-! bzero((char *)wants, CS_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! return;
- }
- wants[v->code] = 1;
- gotvar = 1;
---- 1830,1853 ----
- rpkt.status = htons(ctlsysstatus());
- if (res_authokay)
- ctl_sys_num_events = 0;
-! gotvar += count_var(ext_sys_var);
-! wants = (u_char *)emalloc(gotvar);
-! bzero((char *)wants, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
-! if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! free((char *)wants);
-! return;
-! }
-! wants[CS_MAXCODE+1+v->code] = 1;
-! gotvar = 1;
-! continue;
-! } else {
-! break; /* shouldn't happen ! */
-! }
- }
- wants[v->code] = 1;
- gotvar = 1;
-***************
-*** 1710,1721 ****
- for (i = 1; i <= CS_MAXCODE; i++)
- if (wants[i])
- ctl_putsys(i);
- } else {
- register u_char *cs;
-
- for (cs = def_sys_var; *cs != 0; cs++)
-! ctl_putsys((int)*cs);
- }
- } else {
- register struct peer *peer;
-
---- 1856,1876 ----
- for (i = 1; i <= CS_MAXCODE; i++)
- if (wants[i])
- ctl_putsys(i);
-+ for (i = 0; ext_sys_var && !(ext_sys_var[i].flags & EOV); i++)
-+ if (wants[i+CS_MAXCODE+1])
-+ ctl_putdata(ext_sys_var[i].text,
-+ strlen(ext_sys_var[i].text), 0);
- } else {
- register u_char *cs;
-+ register struct ctl_var *kv;
-
- for (cs = def_sys_var; *cs != 0; cs++)
-! ctl_putsys((int)*cs);
-! for (kv = ext_sys_var; kv && !(kv->flags & EOV); kv++)
-! if (kv->flags & DEF)
-! ctl_putdata(kv->text, strlen(kv->text), 0);
- }
-+ free((char *)wants);
- } else {
- register struct peer *peer;
-
-***************
-*** 1732,1742 ****
- rpkt.status = htons(ctlpeerstatus(peer));
- if (res_authokay)
- peer->num_events = 0;
-! bzero((char*)wants, CP_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
- if (v->flags & EOV) {
- ctl_error(CERR_UNKNOWNVAR);
- return;
- }
- wants[v->code] = 1;
---- 1887,1899 ----
- rpkt.status = htons(ctlpeerstatus(peer));
- if (res_authokay)
- peer->num_events = 0;
-! wants = (u_char *)emalloc(gotvar);
-! bzero((char*)wants, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
- if (v->flags & EOV) {
- ctl_error(CERR_UNKNOWNVAR);
-+ free((char *)wants);
- return;
- }
- wants[v->code] = 1;
-***************
-*** 1752,1757 ****
---- 1909,1915 ----
- for (cp = def_peer_var; *cp != 0; cp++)
- ctl_putpeer((int)*cp, peer);
- }
-+ free((char *)wants);
- }
- ctl_flushpkt(0);
- }
-***************
-*** 1768,1773 ****
---- 1926,1932 ----
- int restrict;
- {
- register struct ctl_var *v;
-+ register int ext_var;
- char *valuep;
- LONG val;
- u_char leapind, leapwarn;
-***************
-*** 1795,1831 ****
- * Look through the variables. Dump out at the first sign of trouble.
- */
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! return;
- }
- if (!(v->flags & CAN_WRITE)) {
- ctl_error(CERR_PERMISSION);
- return;
- }
-! if (*valuep == '\0' || !atoint(valuep, &val)) {
- ctl_error(CERR_BADFMT);
- return;
- }
-! if ((val & ~LEAP_NOTINSYNC) != 0) {
- ctl_error(CERR_BADVALUE);
- return;
- }
-
-! /*
-! * This one seems sane. Save it.
-! */
-! switch(v->code) {
-! case CS_LEAP:
-! case CS_LEAPIND:
-! leapind = (u_char)val;
-! break;
-! case CS_LEAPWARNING:
-! leapwarn = (u_char)val;
-! break;
-! default:
-! ctl_error(CERR_UNSPEC); /* our fault, really */
-! return;
- }
- }
-
---- 1954,2013 ----
- * Look through the variables. Dump out at the first sign of trouble.
- */
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
-+ ext_var = 0;
- if (v->flags & EOV) {
-! if ((v = ctl_getitem(ext_sys_var, &valuep)) != 0) {
-! if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! return;
-! }
-! ext_var = 1;
-! } else {
-! break;
-! }
- }
- if (!(v->flags & CAN_WRITE)) {
- ctl_error(CERR_PERMISSION);
- return;
- }
-! if (!ext_var && (*valuep == '\0' || !atoint(valuep, &val))) {
- ctl_error(CERR_BADFMT);
- return;
- }
-! if (!ext_var && (val & ~LEAP_NOTINSYNC) != 0) {
- ctl_error(CERR_BADVALUE);
- return;
- }
-
-! if (ext_var) {
-! char *s = emalloc(strlen(v->text)+strlen(valuep)+2);
-! char *t, *tt = s;
-!
-! t = v->text;
-! while (*t && *t != '=')
-! *tt++ = *t++;
-!
-! *tt++ = '=';
-! strcat(tt, valuep);
-!
-! set_sys_var(s, strlen(s)+1, v->flags);
-! free(s);
-! } else {
-! /*
-! * This one seems sane. Save it.
-! */
-! switch(v->code) {
-! case CS_LEAP:
-! case CS_LEAPIND:
-! leapind = (u_char)val;
-! break;
-! case CS_LEAPWARNING:
-! leapwarn = (u_char)val;
-! break;
-! default:
-! ctl_error(CERR_UNSPEC); /* our fault, really */
-! return;
-! }
- }
- }
-
-***************
-*** 1861,1867 ****
- register int i;
- register struct peer *peer;
- char *valuep;
-! u_char wants[CC_MAXCODE+1];
- int gotvar;
- struct refclockstat clock;
-
---- 2043,2049 ----
- register int i;
- register struct peer *peer;
- char *valuep;
-! u_char *wants;
- int gotvar;
- struct refclockstat clock;
-
-***************
-*** 1898,1915 ****
- /*
- * If we got here we have a peer which is a clock. Get his status.
- */
- refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
-
- /*
- * Look for variables in the packet.
- */
- rpkt.status = htons(ctlclkstatus(&clock));
- gotvar = 0;
-! bzero((char*)wants, CC_MAXCODE+1);
-! while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! return;
- }
- wants[v->code] = 1;
- gotvar = 1;
---- 2080,2112 ----
- /*
- * If we got here we have a peer which is a clock. Get his status.
- */
-+ clock.kv_list = (struct ctl_var *)0;
-+
- refclock_control(&peer->srcadr, (struct refclockstat *)0, &clock);
-
- /*
- * Look for variables in the packet.
- */
- rpkt.status = htons(ctlclkstatus(&clock));
-+ gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
-+ wants = (u_char *)emalloc(gotvar);
-+ bzero((char*)wants, gotvar);
- gotvar = 0;
-! while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-! if ((v = ctl_getitem(clock.kv_list, &valuep)) != 0) {
-! if (v->flags & EOV) {
-! ctl_error(CERR_UNKNOWNVAR);
-! free((char*)wants);
-! free_varlist(clock.kv_list);
-! return;
-! }
-! wants[CC_MAXCODE+1+v->code] = 1;
-! gotvar = 1;
-! continue;
-! } else {
-! break; /* shouldn't happen ! */
-! }
- }
- wants[v->code] = 1;
- gotvar = 1;
-***************
-*** 1919,1930 ****
---- 2116,2139 ----
- for (i = 1; i <= CC_MAXCODE; i++)
- if (wants[i])
- ctl_putclock(i, &clock, 1);
-+ for (i = 0; !(clock.kv_list[i].flags & EOV); i++)
-+ if (wants[i+CC_MAXCODE+1])
-+ ctl_putdata(clock.kv_list[i].text,
-+ strlen(clock.kv_list[i].text), 0);
- } else {
- register u_char *cc;
-+ register struct ctl_var *kv;
-
- for (cc = def_clock_var; *cc != 0; cc++)
- ctl_putclock((int)*cc, &clock, 0);
-+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
-+ if (kv->flags & DEF)
-+ ctl_putdata(kv->text, strlen(kv->text), 0);
- }
-+
-+ free((char*)wants);
-+ free_varlist(clock.kv_list);
-+
- ctl_flushpkt(0);
- #endif
- }
-***************
-*** 2237,2249 ****
- */
- if (err == EVNT_CLOCKEXCPT) {
- struct refclockstat clock;
-! refclock_control(&peer->srcadr,
- (struct refclockstat *)0,
- &clock);
- ctl_puthex("refclockstatus",
- (U_LONG)ctlclkstatus(&clock));
- for (i = 1; i <= CC_MAXCODE; i++)
- ctl_putclock(i, &clock, 0);
- }
- #endif /*REFCLOCK*/
- } else {
---- 2446,2468 ----
- */
- if (err == EVNT_CLOCKEXCPT) {
- struct refclockstat clock;
-! struct ctl_var *kv;
-!
-! clock.kv_list = (struct ctl_var *)0;
-!
-! refclock_control(&peer->srcadr,
- (struct refclockstat *)0,
- &clock);
- ctl_puthex("refclockstatus",
- (U_LONG)ctlclkstatus(&clock));
-+
- for (i = 1; i <= CC_MAXCODE; i++)
- ctl_putclock(i, &clock, 0);
-+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
-+ if (kv->flags & DEF)
-+ ctl_putdata(kv->text, strlen(kv->text), 0);
-+
-+ free_varlist(clock.kv_list);
- }
- #endif /*REFCLOCK*/
- } else {
-***************
-*** 2262,2274 ****
---- 2481,2504 ----
- */
- if (err == EVNT_PEERCLOCK) {
- struct refclockstat clock;
-+ struct ctl_var *kv;
-+
-+ clock.kv_list = (struct ctl_var *)0;
-+
- refclock_control(&peer->srcadr,
- (struct refclockstat *)0,
- &clock);
-+
- ctl_puthex("refclockstatus",
- (U_LONG)ctlclkstatus(&clock));
-+
- for (i = 1; i <= CC_MAXCODE; i++)
- ctl_putclock(i, &clock, 0);
-+ for (kv = clock.kv_list; kv && !(kv->flags & EOV); kv++)
-+ if (kv->flags & DEF)
-+ ctl_putdata(kv->text, strlen(kv->text), 0);
-+
-+ free_varlist(clock.kv_list);
- }
- #endif /*REFCLOCK*/
- }
-***************
-*** 2303,2305 ****
---- 2533,2647 ----
- numctlbadop = 0;
- numasyncmsgs = 0;
- }
-+
-+ static unsigned long
-+ count_var(k)
-+ struct ctl_var *k;
-+ {
-+ register unsigned long c;
-+
-+ c = 0;
-+ while (k && !(k++->flags & EOV))
-+ c++;
-+
-+ return c;
-+ }
-+
-+ char *
-+ add_var(kv, size, def)
-+ struct ctl_var **kv;
-+ unsigned long size;
-+ int def;
-+ {
-+ register unsigned long c;
-+ register struct ctl_var *k;
-+
-+ c = count_var(*kv);
-+
-+ k = *kv;
-+ *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
-+ if (k)
-+ {
-+ bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c);
-+ free((char *)k);
-+ }
-+
-+ (*kv)[c].code = c;
-+ (*kv)[c].text = (char *)emalloc(size);
-+ (*kv)[c].flags = def;
-+ (*kv)[c+1].code = 0;
-+ (*kv)[c+1].text = (char *)0;
-+ (*kv)[c+1].flags = EOV;
-+ return (*kv)[c].text;
-+ }
-+
-+ void
-+ set_var(kv, data, size, def)
-+ struct ctl_var **kv;
-+ char *data;
-+ unsigned long size;
-+ int def;
-+ {
-+ register struct ctl_var *k;
-+ register char *s, *t;
-+
-+ if (!data || !size)
-+ return;
-+
-+ if ((k = *kv))
-+ {
-+ while (!(k->flags & EOV))
-+ {
-+ s = data;
-+ t = k->text;
-+ if (t)
-+ {
-+ while (*t != '=' && *s - *t == 0)
-+ {
-+ s++;
-+ t++;
-+ }
-+ if (*s == *t && ((*t == '=') || !*t))
-+ {
-+ free(k->text);
-+ k->text = (char *)emalloc(size);
-+ bcopy(data, k->text, size);
-+ k->flags = def;
-+ return;
-+ }
-+ }
-+ else
-+ {
-+ k->text = (char *)emalloc(size);
-+ bcopy(data, k->text, size);
-+ k->flags = def;
-+ return;
-+ }
-+ k++;
-+ }
-+ }
-+ t = add_var(kv, size, def);
-+ bcopy(data, t, size);
-+ }
-+
-+ void
-+ set_sys_var(data, size, def)
-+ char *data;
-+ unsigned long size;
-+ int def;
-+ {
-+ set_var(&ext_sys_var, data, size, def);
-+ }
-+
-+ void
-+ free_varlist(kv)
-+ struct ctl_var *kv;
-+ {
-+ struct ctl_var *k;
-+ if (kv)
-+ {
-+ for (k = kv; !(k->flags & EOV); k++)
-+ free(k->text);
-+ free((char *)kv);
-+ }
-+ }
-diff -c xntpd/ntp_filegen.c:1.1.1.5 xntpd/ntp_filegen.c:3.12
-*** xntpd/ntp_filegen.c:1.1.1.5 Wed Jan 26 21:53:04 1994
---- xntpd/ntp_filegen.c Wed Jan 26 21:53:04 1994
-***************
-*** 1,5 ****
- /*
-! * ntp_filegen.c,v 3.10 1993/12/03 03:55:35 pruy Exp
- *
- * implements file generations support for NTP
- * logfiles and statistic files
---- 1,5 ----
- /*
-! * ntp_filegen.c,v 3.12 1994/01/25 19:06:11 kardel Exp
- *
- * implements file generations support for NTP
- * logfiles and statistic files
-diff -c xntpd/ntp_request.c:1.1.1.13 xntpd/ntp_request.c:3.13
-*** xntpd/ntp_request.c:1.1.1.13 Wed Jan 26 21:53:18 1994
---- xntpd/ntp_request.c Wed Jan 26 21:53:18 1994
-***************
-*** 2111,2116 ****
---- 2111,2119 ----
- req_ack(srcadr, inter, inpkt, INFO_ERR_NODATA);
- return;
- }
-+
-+ clock.kv_list = (struct ctl_var *)0;
-+
- refclock_control(&addr, (struct refclockstat *)0, &clock);
-
- ic->clockadr = addr.sin_addr.s_addr;
-***************
-*** 2128,2133 ****
---- 2131,2138 ----
- ic->fudgeval1 = htonl(clock.fudgeval1);
- ic->fudgeval2 = htonl(clock.fudgeval2);
-
-+ free_varlist(clock.kv_list);
-+
- ic = (struct info_clock *)more_pkt();
- }
- flush_pkt();
-diff -c xntpd/refclock_parse.c:1.1.1.9 xntpd/refclock_parse.c:3.45
-*** xntpd/refclock_parse.c:1.1.1.9 Wed Jan 26 21:53:39 1994
---- xntpd/refclock_parse.c Wed Jan 26 21:53:39 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp
- *
-! * refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
- *
-! * refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 129,135 ****
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.43 1994/01/23 16:28:39 kardel Exp";
- #endif
-
- /**===========================================================================
---- 129,135 ----
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp";
- #endif
-
- /**===========================================================================
-***************
-*** 243,248 ****
---- 243,249 ----
- * clock specific configuration
- */
- l_fp basedelay; /* clock local phase offset */
-+ l_fp ppsdelay; /* clock local pps phase offset */
-
- /*
- * clock state handling/reporting
-***************
-*** 295,300 ****
---- 296,302 ----
- #define NO_END (void (*)())0
- #define NO_DATA (void *)0
- #define NO_FORMAT ""
-+ #define NO_PPSDELAY 0
-
- #define DCF_ID "DCF" /* generic DCF */
- #define DCF_A_ID "DCFa" /* AM demodulation */
-***************
-*** 497,502 ****
---- 499,505 ----
- void *cl_data; /* local data area for "poll" mechanism */
- u_fp cl_rootdelay; /* rootdelay */
- U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */
-+ U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */
- char *cl_id; /* ID code (usually "DCF") */
- char *cl_description; /* device name */
- char *cl_format; /* fixed format */
-***************
-*** 516,521 ****
---- 519,525 ----
- NO_DATA,
- DCFPZF535_ROOTDELAY,
- DCFPZF535_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535_DESCRIPTION,
- NO_FORMAT,
-***************
-*** 534,539 ****
---- 538,544 ----
- NO_DATA,
- DCFPZF535OCXO_ROOTDELAY,
- DCFPZF535OCXO_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535OCXO_DESCRIPTION,
- NO_FORMAT,
-***************
-*** 552,557 ****
---- 557,563 ----
- NO_DATA,
- DCFUA31_ROOTDELAY,
- DCFUA31_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_A_ID,
- DCFUA31_DESCRIPTION,
- NO_FORMAT,
-***************
-*** 570,575 ****
---- 576,582 ----
- NO_DATA,
- DCF7000_ROOTDELAY,
- DCF7000_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_A_ID,
- DCF7000_DESCRIPTION,
- NO_FORMAT,
-***************
-*** 588,593 ****
---- 595,601 ----
- WSDCF_DATA,
- WSDCF_ROOTDELAY,
- WSDCF_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_A_ID,
- WSDCF_DESCRIPTION,
- WSDCF_FORMAT,
-***************
-*** 606,611 ****
---- 614,620 ----
- NO_DATA,
- RAWDCF_ROOTDELAY,
- CONRAD_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_A_ID,
- CONRAD_DESCRIPTION,
- RAWDCF_FORMAT,
-***************
-*** 624,629 ****
---- 633,639 ----
- NO_DATA,
- RAWDCF_ROOTDELAY,
- TIMEBRICK_BASEDELAY,
-+ NO_PPSDELAY,
- DCF_A_ID,
- TIMEBRICK_DESCRIPTION,
- RAWDCF_FORMAT,
-***************
-*** 642,647 ****
---- 652,658 ----
- GPS166_DATA,
- GPS166_ROOTDELAY,
- GPS166_BASEDELAY,
-+ NO_PPSDELAY,
- GPS166_ID,
- GPS166_DESCRIPTION,
- GPS166_FORMAT,
-***************
-*** 660,665 ****
---- 671,677 ----
- TRIMBLESV6_DATA,
- TRIMBLESV6_ROOTDELAY,
- TRIMBLESV6_BASEDELAY,
-+ NO_PPSDELAY,
- TRIMBLESV6_ID,
- TRIMBLESV6_DESCRIPTION,
- TRIMBLESV6_FORMAT,
-***************
-*** 2198,2203 ****
---- 2210,2218 ----
- parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
- parse->basedelay.l_uf = parse->parse_type->cl_basedelay;
-
-+ parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
-+ parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay;
-+
- peer->rootdelay = parse->parse_type->cl_rootdelay;
- peer->sstclktype = parse->parse_type->cl_type;
- peer->precision = sys_precision;
-***************
-*** 2554,2559 ****
---- 2569,2575 ----
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
-+ out->kv_list = (struct ctl_var *)0;
- }
-
- if (unit >= MAXUNITS)
-***************
-*** 2579,2585 ****
-
- if (in->haveflags & CLK_HAVETIME2)
- {
-! /* not USED */
- }
-
- if (in->haveflags & CLK_HAVEVAL1)
---- 2595,2601 ----
-
- if (in->haveflags & CLK_HAVETIME2)
- {
-! parse->ppsdelay = in->fudgetime2;
- }
-
- if (in->haveflags & CLK_HAVEVAL1)
-***************
-*** 2619,2637 ****
- if (out)
- {
- register unsigned LONG sum = 0;
-! register char *t;
- register struct tm *tm;
- register short utcoff;
- register char sign;
- register int i;
- time_t tim;
-
-! out->haveflags = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
- out->clockdesc = parse->parse_type->cl_description;
-
- out->fudgetime1 = parse->basedelay;
-
-! L_CLR(&out->fudgetime2);
-
- out->fudgeval1 = (LONG)parse->peer->stratum;
-
---- 2635,2655 ----
- if (out)
- {
- register unsigned LONG sum = 0;
-! register char *t, *tt;
- register struct tm *tm;
- register short utcoff;
- register char sign;
- register int i;
- time_t tim;
-
-! outstatus[0] = '\0';
-!
-! out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
- out->clockdesc = parse->parse_type->cl_description;
-
- out->fudgetime1 = parse->basedelay;
-
-! out->fudgetime2 = parse->ppsdelay;
-
- out->fudgeval1 = (LONG)parse->peer->stratum;
-
-***************
-*** 2657,2667 ****
- */
- off = parse->time.parse_stime.fp;
- L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
-! out->fudgetime2 = off;
-! out->haveflags |= CLK_HAVETIME2;
- }
- }
-
- /*
- * all this for just finding out the +-xxxx part (there are always
- * new and changing fields in the standards 8-().
---- 2675,2691 ----
- */
- off = parse->time.parse_stime.fp;
- L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
-! tt = add_var(&out->kv_list, 40, RO);
-! sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6));
- }
- }
-
-+ if (PARSE_PPS(parse->time.parse_state))
-+ {
-+ tt = add_var(&out->kv_list, 80, RO|DEF);
-+ sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp));
-+ }
-+
- /*
- * all this for just finding out the +-xxxx part (there are always
- * new and changing fields in the standards 8-().
-***************
-*** 2686,2702 ****
- sign = '+';
- }
-
-! tim = parse->time.parse_time.fp.l_ui - JAN_1970;
-! strcpy(outstatus, ctime(&tim));
-! t = strrchr(outstatus, '\n');
-! if (!t)
- {
-! t = outstatus + strlen(outstatus);
-! }
- else
- {
-! sprintf(t, " %c%02d%02d", sign, utcoff / 60, utcoff % 60);
-! t += strlen(t);
- }
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
---- 2710,2729 ----
- sign = '+';
- }
-
-! tt = add_var(&out->kv_list, 128, RO|DEF);
-! sprintf(tt, "refclock_time=\"");
-! tt += strlen(tt);
-!
-! if (parse->time.parse_time.fp.l_ui == 0)
- {
-! strcpy(tt, "<UNDEFINED>\"");
-! }
- else
- {
-! strcpy(tt, prettydate(&parse->time.parse_time.fp));
-! t = tt + strlen(tt);
-!
-! sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60);
- }
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
-***************
-*** 2705,2731 ****
- }
- else
- {
- /*
- * copy PPS flags from last read transaction (informational only)
- */
- tmpctl.parsegettc.parse_state |= parse->time.parse_state &
- (PARSEB_PPS|PARSEB_S_PPS);
-
-! if (t)
-! {
-! *t = ' ';
-! (void) parsestate(tmpctl.parsegettc.parse_state, t+1);
-! }
-! else
-! {
-! strcat(outstatus, " ");
-! (void) parsestate(tmpctl.parsegettc.parse_state, outstatus + strlen(outstatus));
-! }
-! strcat(outstatus," <");
- if (tmpctl.parsegettc.parse_count)
-! mkascii(outstatus+strlen(outstatus), sizeof(outstatus) - strlen(outstatus) - 1,
- tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
-! strcat(outstatus,">");
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
-
---- 2732,2755 ----
- }
- else
- {
-+ tt = add_var(&out->kv_list, 128, RO|DEF);
-+ sprintf(tt, "refclock_status=\"");
-+ tt += strlen(tt);
-+
- /*
- * copy PPS flags from last read transaction (informational only)
- */
- tmpctl.parsegettc.parse_state |= parse->time.parse_state &
- (PARSEB_PPS|PARSEB_S_PPS);
-
-! (void) parsestate(tmpctl.parsegettc.parse_state, tt);
-!
-! strcat(tt, "\"");
-!
- if (tmpctl.parsegettc.parse_count)
-! mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1,
- tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
-!
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
-
-***************
-*** 2737,2752 ****
- }
- else
- {
-! strcat(outstatus," (");
-! strncat(outstatus, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
-! strcat(outstatus,")");
- }
-
- /*
- * gather state statistics
- */
-
-! t = outstatus + strlen(outstatus);
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
---- 2761,2780 ----
- }
- else
- {
-! tt = add_var(&out->kv_list, 80, RO|DEF);
-! sprintf(tt, "refclock_format=\"");
-!
-! strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
-! strcat(tt,"\"");
- }
-
- /*
- * gather state statistics
- */
-
-! tt = add_var(&out->kv_list, 200, RO|DEF);
-! strcpy(tt, "refclock_states=\"");
-! tt += strlen(tt);
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
-***************
-*** 2769,2787 ****
-
- if (stime)
- {
-! sprintf(t, "%s%s%s: %s (%d.%02d%%)",
-! sum ? "; " : " [",
- (parse->status == i) ? "*" : "",
- clockstatus(i),
- l_mktime(stime),
- percent / 100, percent % 100);
- sum += stime;
-! t += strlen(t);
- }
- }
-
-! sprintf(t, "; running time: %s]", l_mktime(sum));
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
- out->timereset = parse->timestarted;
---- 2797,2824 ----
-
- if (stime)
- {
-! sprintf(tt, "%s%s%s: %s (%d.%02d%%)",
-! sum ? "; " : "",
- (parse->status == i) ? "*" : "",
- clockstatus(i),
- l_mktime(stime),
- percent / 100, percent % 100);
- sum += stime;
-! tt += strlen(tt);
- }
- }
-
-! sprintf(tt, "; running time: %s\"", l_mktime(sum));
-!
-! tt = add_var(&out->kv_list, 32, RO);
-! sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id);
-
-+ tt = add_var(&out->kv_list, 80, RO);
-+ sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-+
-+ tt = add_var(&out->kv_list, 128, RO);
-+ sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.45 1994/01/25 19:06:27 kardel Exp\"");
-+
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
- out->timereset = parse->timestarted;
-***************
-*** 3086,3091 ****
---- 3123,3130 ----
- */
- offset = parsetime->parse_ptime.fp;
-
-+ L_ADD(&offset, &parse->ppsdelay);
-+
- if (PARSE_TIMECODE(parsetime->parse_state))
- {
- if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) &&
-***************
-*** 3353,3358 ****
---- 3392,3403 ----
- * History:
- *
- * refclock_parse.c,v
-+ * Revision 3.45 1994/01/25 19:06:27 kardel
-+ * 94/01/23 reconcilation
-+ *
-+ * Revision 3.44 1994/01/25 17:32:23 kardel
-+ * settable extended variables
-+ *
- * Revision 3.43 1994/01/23 16:28:39 kardel
- * HAVE_TERMIOS introduced
- *
-diff -c -r1.1.1.8 lib/numtohost.c
-*** lib/numtohost.c:1.1.1.8 1994/01/26 20:12:51
---- lib/numtohost.c 1994/01/26 21:17:01
-***************
-*** 1,6 ****
---- 1,7 ----
- /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
- * numtohost - convert network number to host name.
- */
-+ #include "ntp_types.h"
- #include "ntp_string.h"
- #include <netdb.h>
-
diff --git a/usr.sbin/xntpd/patches/patch.30 b/usr.sbin/xntpd/patches/patch.30
deleted file mode 100644
index 55897f9..0000000
--- a/usr.sbin/xntpd/patches/patch.30
+++ /dev/null
@@ -1,73 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa14619; 22 Mar 94 11:53 EST
-Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa24926;
- 22 Mar 94 11:48 EST
-Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
- id m0pj9dD-000C8UC; Tue, 22 Mar 94 11:48 EST
-Message-Id: <m0pj9dD-000C8UC@jagubox.gsfc.nasa.gov>
-From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-Subject: Small patch for xntpd 3.3p and A/UX (tickadj)
-To: Mills@udel.edu
-Date: Tue, 22 Mar 1994 11:48:42 -0500 (EST)
-Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
-X-Mailer: ELM [version 2.4 PL23]
-Content-Type: text
-Content-Length: 1355
-
-This little patch streamlines things a bit for tickadj and A/UX:
-
------------>8 cut here --------------------------------
-
-*** tickadj.c.orig Mon Mar 14 02:47:28 1994
---- tickadj.c Tue Mar 22 11:41:19 1994
-***************
-*** 333,342 ****
-
- #if defined(SYS_AUX3) || defined(SYS_AUX2)
- #define X_TICKADJ 0
-! #define X_V 1
-! #define X_TICK 2
- #define X_DEF
-! static struct nlist nl[4];
- #endif
-
- #ifdef NeXT
---- 333,345 ----
-
- #if defined(SYS_AUX3) || defined(SYS_AUX2)
- #define X_TICKADJ 0
-! #define X_TICK 1
- #define X_DEF
-! static struct nlist nl[] =
-! { {"tickadj"},
-! {"tick"},
-! {""},
-! };
- #endif
-
- #ifdef NeXT
-***************
-*** 428,440 ****
- NULL
- };
- struct stat stbuf;
--
-- #if defined(SYS_AUX3) || defined(SYS_AUX2)
-- strcpy (nl[X_TICKADJ].n_name, "tickadj");
-- strcpy (nl[X_V].n_name, "v");
-- strcpy (nl[X_TICK].n_name, "tick");
-- nl[3].n_name[0] = '\0';
-- #endif
-
- for (kname = kernels; *kname != NULL; kname++) {
- if (stat(*kname, &stbuf) == -1)
---- 431,436 ----
------------>8 cut here --------------------------------
---
-#include <std/disclaimer.h>
- Jim Jagielski |
- jim@jagubox.gsfc.nasa.gov | "Dead or alive, you're coming with me."
- NASA/GSFC, Code 734.4 | RoboCop
- Greenbelt, MD 20771 |
-
diff --git a/usr.sbin/xntpd/patches/patch.31 b/usr.sbin/xntpd/patches/patch.31
deleted file mode 100644
index 33048f9..0000000
--- a/usr.sbin/xntpd/patches/patch.31
+++ /dev/null
@@ -1,83 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa12734; 27 Mar 94 8:52 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa20329;
- 27 Mar 94 8:48 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA05771 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 15:48:38 +0200
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA01229 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 14:48:37 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403271348.AA01229@faui43.informatik.uni-erlangen.de>
-Subject: minor patches
-To: mills@udel.edu
-Date: Sun, 27 Mar 94 15:48:32 MET DST
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave,
-
-I just got through manually read news (in the spool area 8-( - when
-will they ever fix our news installation).
-
-In order to avoid ptx being picked up in AT&T machine i added hope-fully
-an additional check. Why do vendor have to make machine look the
-same when they aren't ? I though uname was supposed to find out - I
-guess I was wrong - every vendor seems to have his own ideas about
-uname and they all do not mix very well.
-
-The fix to numtohost allows it to compile on ptx - I hope it still
-compiles on all others (should though).
-
-diff -c lib/numtohost.c:1.1.1.9 lib/numtohost.c:3.7
-*** lib/numtohost.c:1.1.1.9 Sun Mar 27 15:36:54 1994
---- lib/numtohost.c Sun Mar 27 15:36:54 1994
-***************
-*** 1,12 ****
-! /* numtohost.c,v 3.1 1993/07/06 01:08:40 jbj Exp
- * numtohost - convert network number to host name.
- */
-- #include "ntp_types.h"
- #include <netdb.h>
-
- #include "ntp_fp.h"
-- #include "lib_strbuf.h"
- #include "ntp_stdlib.h"
-
- #define LOOPBACKNET 0x7f000000
- #define LOOPBACKHOST 0x7f000001
---- 1,11 ----
-! /*
- * numtohost - convert network number to host name.
- */
- #include <netdb.h>
-
- #include "ntp_fp.h"
- #include "ntp_stdlib.h"
-+ #include "lib_strbuf.h"
-
- #define LOOPBACKNET 0x7f000000
- #define LOOPBACKHOST 0x7f000001
-diff -c scripts/Guess.sh:1.1.1.8 scripts/Guess.sh:1.13
-*** scripts/Guess.sh:1.1.1.8 Sun Mar 27 15:38:53 1994
---- scripts/Guess.sh Sun Mar 27 15:38:53 1994
-***************
-*** 78,84 ****
- 3.2.*)
- case "$4" in
- v*)
-! (i386) >/dev/null 2>&1 && guess=ptx;;
- esac
- esac
- fi
---- 78,84 ----
- 3.2.*)
- case "$4" in
- v*)
-! (i386) >/dev/null 2>&1 && [ -f /usr/lib/libseq.a ] && guess=ptx;;
- esac
- esac
- fi
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.32 b/usr.sbin/xntpd/patches/patch.32
deleted file mode 100644
index 2e951cb..0000000
--- a/usr.sbin/xntpd/patches/patch.32
+++ /dev/null
@@ -1,89 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa12910; 27 Mar 94 10:06 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa22473;
- 27 Mar 94 10:05 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA09307 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 17:05:03 +0200
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA05359 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 16:05:01 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403271505.AA05359@faui43.informatik.uni-erlangen.de>
-Subject: more PTX related patches...
-To: mills@udel.edu
-Date: Sun, 27 Mar 94 17:04:56 MET DST
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi, Dave !
-
-And another patche to make parse compile on PTX (Sequents
-SysVR2 version).
-
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/parse/parse.c,v
-retrieving revision 3.23
-retrieving revision 3.24
-diff -c -r3.23 -r3.24
-*** parse/parse.c:3.23 1994/03/25 13:09:02
---- parse/parse.c 1994/03/27 15:01:36
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
- *
-! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
- *
-! * parse.c,v 3.24 1994/03/27 15:01:36 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 29,34 ****
---- 29,38 ----
- #include "sys/time.h"
- #include "sys/errno.h"
-
-+ #include "ntp_fp.h"
-+ #include "ntp_unixtime.h"
-+ #include "ntp_calendar.h"
-+
- #include "ntp_machine.h"
-
- #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
-***************
-*** 49,58 ****
- #endif
- #endif
-
-- #include "ntp_fp.h"
-- #include "ntp_unixtime.h"
-- #include "ntp_calendar.h"
--
- #include "parse.h"
-
- #include "ntp_stdlib.h"
---- 53,58 ----
-***************
-*** 1162,1167 ****
---- 1162,1170 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.24 1994/03/27 15:01:36 kardel
-+ * reorder include file to cope with PTX
-+ *
- * Revision 3.23 1994/03/25 13:09:02 kardel
- * considering FIXEDONLY entries only in FIXEDONLY mode
- *
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.33 b/usr.sbin/xntpd/patches/patch.33
deleted file mode 100644
index e7d1934..0000000
--- a/usr.sbin/xntpd/patches/patch.33
+++ /dev/null
@@ -1,75 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa13737; 27 Mar 94 15:27 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa29101;
- 27 Mar 94 15:23 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA24270 (5.65c-6/7.3v-FAU); Sun, 27 Mar 1994 22:23:35 +0200
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA07515 (5.65c-6/7.3m-FAU); Sun, 27 Mar 1994 21:23:34 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403272023.AA07515@faui43.informatik.uni-erlangen.de>
-Subject: and for patch 33?
-To: mills@udel.edu
-Date: Sun, 27 Mar 94 22:23:30 MET DST
-X-Mailer: ELM [version 2.3 PL11]
-
-This should get you to Patch 33. or higher.
- - gcc 2.5.8 (from Per Hedeland - gcc 2.5.8 is just
- causing to many poeple to complain 8-()_
- - a an note what one can do in Config.local in HACKermode.
-
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/RELNOTES,v
-retrieving revision 1.1.1.11
-diff -c -r1.1.1.11 RELNOTES
-*** 1.1.1.11 1994/01/30 17:08:20
---- RELNOTES 1994/03/27 19:40:27
-***************
-*** 31,36 ****
---- 31,40 ----
- For custom tailored configuration copying Config.local.dist to Config.local
- and editing Config.local to suit the local needs is neccessary (at most
- 3 lines to change), or use one of the make's above and then tweak it.
-+ Config.local can also be used to override common settings from the
-+ machines/* files like the AUTHDEFS= to select very specific configurations.
-+ Please use this feature with care and don't be disappointed if it doesn't
-+ work the way you expect.
-
- (2) Type "make" to compile everything of general interest. Expect few or
- no warnings using cc and a moderate level of warnings using gcc.
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/include/l_stdlib.h,v
-retrieving revision 1.1.1.6
-diff -c -r1.1.1.6 l_stdlib.h
-*** include/l_stdlib.h:1.1.1.6 1994/01/28 13:07:49
---- include/l_stdlib.h 1994/03/27 19:34:40
-***************
-*** 70,80 ****
-
- extern int close P((int));
- extern int ioctl P((int, int, char *));
-! extern int read P((int, char *, unsigned));
- extern int rename P((char *, char *));
-! extern int write P((int, char *, int));
-! extern int unlink P((char *));
-! extern int link P((char *, char *));
-
- #ifdef FILE
- extern int fclose P((FILE *));
---- 70,80 ----
-
- extern int close P((int));
- extern int ioctl P((int, int, char *));
-! extern int read P((int, void *, unsigned));
- extern int rename P((char *, char *));
-! extern int write P((int, const void *, unsigned));
-! extern int unlink P((const char *));
-! extern int link P((const char *, const char *));
-
- #ifdef FILE
- extern int fclose P((FILE *));
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.34 b/usr.sbin/xntpd/patches/patch.34
deleted file mode 100644
index a382889..0000000
--- a/usr.sbin/xntpd/patches/patch.34
+++ /dev/null
@@ -1,303 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa02155; 25 Mar 94 8:47 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa05544;
- 25 Mar 94 8:45 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA27199 (5.65c-6/7.3v-FAU); Fri, 25 Mar 1994 14:45:13 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA06935 (5.65c-6/7.3m-FAU); Fri, 25 Mar 1994 14:45:11 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199403251345.AA06935@faui43.informatik.uni-erlangen.de>
-Subject: bugfixes for parse & ntpq enhancements
-To: mills@udel.edu
-Date: Fri, 25 Mar 94 14:45:05 MET
-X-Mailer: ELM [version 2.3 PL11]
-
-Hi Dave,
-
-I have a 2 bug fixes and an ntpq enhancement:
- - parse bitmap initialisation fixed
- - allow for large offsets in refclock_parse (>4 min 8-()
- - decode the flash bits in cooked mode
-
-diff -c ntpq/ntpq.c:1.1.1.21 ntpq/ntpq.c:3.22
-*** ntpq/ntpq.c:1.1.1.21 Fri Mar 25 14:32:38 1994
---- ntpq/ntpq.c Fri Mar 25 14:32:38 1994
-***************
-*** 75,80 ****
---- 75,81 ----
- #define OC 12 /* integer, print in octal */
- #define MD 13 /* mode */
- #define AR 14 /* array of times */
-+ #define TST 15 /* test flags */
- #define EOV 255 /* end of table */
-
-
-***************
-*** 145,151 ****
- { CP_RECEIVED, UI, "received" }, /* 31 */
- { CP_SENT, UI, "sent" }, /* 32 */
- { CP_FILTERROR, AR, "filterror" }, /* 33 */
-! { CP_FLASH, ST, "flash"}, /* 34 */
- { CP_DISP, AR, "disp" }, /* 35 */
- /*
- * These are duplicate entires so that we can
---- 146,152 ----
- { CP_RECEIVED, UI, "received" }, /* 31 */
- { CP_SENT, UI, "sent" }, /* 32 */
- { CP_FILTERROR, AR, "filterror" }, /* 33 */
-! { CP_FLASH, TST, "flash"}, /* 34 */
- { CP_DISP, AR, "disp" }, /* 35 */
- /*
- * These are duplicate entires so that we can
-***************
-*** 189,194 ****
---- 190,209 ----
- };
-
- /*
-+ * flasher bits
-+ */
-+ static char *tstflagnames[] = {
-+ "DUPLICATE PKT",
-+ "BOGUS PKT",
-+ "PROTO UNSYNC",
-+ "PEER BOUNDS",
-+ "BAD AUTH",
-+ "PEER CLOCK UNSYNC",
-+ "BAD STRATUM",
-+ "ROOT BOUNDS"
-+ };
-+
-+ /*
- * Leap values
- */
- struct codestring leap_codes[] = {
-***************
-*** 2836,2842 ****
- output(fp, name, buf);
- }
-
-!
-
- /*
- * cookedprint - output variables in cooked mode
---- 2851,2895 ----
- output(fp, name, buf);
- }
-
-! static char *
-! tstflags(val)
-! U_LONG val;
-! {
-! register char *cb, *s;
-! register int i;
-! register char *sep;
-!
-! sep = "";
-! i = 0;
-! s = cb = &circ_buf[nextcb][0];
-! if (++nextcb >= NUMCB)
-! nextcb = 0;
-!
-! sprintf(cb, "0x%x", val);
-! cb += strlen(cb);
-! if (val <= ((1<<8)-1)) {
-! if (!val) {
-! strcat(cb, "<OK>");
-! cb += strlen(cb);
-! } else {
-! *cb++ = '<';
-! while (val) {
-! if (val & 0x1) {
-! sprintf(cb, "%s%s", sep, tstflagnames[i]);
-! sep = ";";
-! cb += strlen(cb);
-! }
-! i++;
-! val >>= 1;
-! }
-! *cb++ = '>';
-! }
-! } else {
-! *cb++ = '?';
-! }
-! *cb = '\0';
-! return s;
-! }
-
- /*
- * cookedprint - output variables in cooked mode
-***************
-*** 2994,2999 ****
---- 3047,3059 ----
- outputarr(fp, name, narr, lfparr);
- break;
-
-+ case TST:
-+ if (!decodeuint(value, &uval))
-+ output_raw = '?';
-+ else
-+ output(fp, name, tstflags(uval));
-+ break;
-+
- default:
- (void) fprintf(stderr,
- "Internal error in cookedprint, %s=%s, fmt %d\n",
-diff -c parse/parse.c:1.1.1.10 parse/parse.c:3.23
-*** parse/parse.c:1.1.1.10 Fri Mar 25 14:33:02 1994
---- parse/parse.c Fri Mar 25 14:33:02 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
-! * parse.c,v 3.22 1994/02/25 12:34:49 kardel Exp
- *
- * Parser module for reference clock
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/parse/parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
- *
-! * parse.c,v 3.23 1994/03/25 13:09:02 kardel Exp
- *
- * Parser module for reference clock
- *
-***************
-*** 178,183 ****
---- 178,187 ----
- {
- fmt = clockformats[i];
-
-+ if (!(parseio->parse_flags & PARSE_FIXED_FMT) &&
-+ (fmt->flags & CVT_FIXEDONLY))
-+ continue;
-+
- if (fmt->flags & F_START)
- {
- index = fmt->startsym / 8;
-***************
-*** 1158,1163 ****
---- 1162,1170 ----
- * History:
- *
- * parse.c,v
-+ * Revision 3.23 1994/03/25 13:09:02 kardel
-+ * considering FIXEDONLY entries only in FIXEDONLY mode
-+ *
- * Revision 3.22 1994/02/25 12:34:49 kardel
- * allow for converter generated utc times
- *
-diff -c xntpd/refclock_parse.c:1.1.1.13 xntpd/refclock_parse.c:3.53
-*** xntpd/refclock_parse.c:1.1.1.13 Fri Mar 25 14:35:07 1994
---- xntpd/refclock_parse.c Fri Mar 25 14:35:08 1994
-***************
-*** 1,8 ****
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
-! * refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp
- *
- * generic reference clock driver for receivers
- *
---- 1,8 ----
- #if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
- /*
-! * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
- *
-! * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
- *
- * generic reference clock driver for receivers
- *
-***************
-*** 129,135 ****
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp";
- #endif
-
- /**===========================================================================
---- 129,135 ----
- #include "parse.h"
-
- #if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-! static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp";
- #endif
-
- /**===========================================================================
-***************
-*** 2824,2830 ****
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.51 1994/03/03 09:49:54 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
---- 2824,2830 ----
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
-! sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
-***************
-*** 3103,3109 ****
- L_ADD(&off, &offset);
- rectime = off; /* this makes org time and xmt time somewhat artificial */
-
-! if (parse->flags & PARSE_STAT_FILTER)
- {
- struct timeval usecerror;
- /*
---- 3103,3113 ----
- L_ADD(&off, &offset);
- rectime = off; /* this makes org time and xmt time somewhat artificial */
-
-! L_SUB(&off, &parsetime->parse_stime.fp);
-!
-! if ((parse->flags & PARSE_STAT_FILTER) &&
-! (off.l_i > -60) &&
-! (off.l_i < 60)) /* take usec error only if within +- 60 secs */
- {
- struct timeval usecerror;
- /*
-***************
-*** 3115,3124 ****
- sTVTOTS(&usecerror, &off);
- L_ADD(&off, &offset);
- }
-- else
-- {
-- L_SUB(&off, &parsetime->parse_stime.fp);
-- }
- }
-
- if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
---- 3119,3124 ----
-***************
-*** 3409,3414 ****
---- 3409,3420 ----
- * History:
- *
- * refclock_parse.c,v
-+ * Revision 3.53 1994/03/25 13:07:39 kardel
-+ * fixed offset calculation for large (>4 Min) offsets
-+ *
-+ * Revision 3.52 1994/03/03 09:58:00 kardel
-+ * stick -kv in cvs is no fun
-+ *
- * Revision 3.49 1994/02/20 13:26:00 kardel
- * rcs id cleanup
- *
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.35 b/usr.sbin/xntpd/patches/patch.35
deleted file mode 100644
index e6b1ea4..0000000
--- a/usr.sbin/xntpd/patches/patch.35
+++ /dev/null
@@ -1,914 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa25410; 3 Apr 94 18:04 EDT
-Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa09227;
- 3 Apr 94 17:56 EDT
-Received: by adrastea.lcs.mit.edu; id AA26407; Sun, 3 Apr 1994 17:56:48 -0400
-Date: Sun, 3 Apr 1994 17:56:48 -0400
-From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
-Message-Id: <9404032156.AA26407@adrastea.lcs.mit.edu>
-To: Dave Mills <Mills@udel.edu>
-Subject: xntpd 3.3p changes for FreeBSD
-
-This still doesn't solve the 18-second discrepancy. However, the
-patch file below shows the current differences between xntp3.3p and
-the FreeBSD version of same, deleted files not included. I have also
-included the Makefiles that we use to provide some idea of our build
-structure. (Thankfully, xntp---unlike some other popular pieces of
-software---has a sane directory structure to begin with, so it isn't
-nearly as difficult to handle this sort of thing than it is with, say,
-GCC.)
-
-diff -c /dev/null 386BSD/src/contrib/xntpd/Makefile.inc:1.3
-*** /dev/null Sun Apr 3 13:42:15 1994
---- 386BSD/src/contrib/xntpd/Makefile.inc Sun Apr 3 13:42:15 1994
-***************
-*** 0 ****
---- 1,7 ----
-+ DEFS_LOCAL=-DREFCLOCK -DPARSE
-+ NTPDEFS= -DSYS_FREEBSD -DSYS_386BSD -DHAVE_TERMIOS
-+ AUTHDEFS= -DMD5
-+ CLOCKDEFS= -DLOCAL_CLOCK -DPST -DWWVB -DAS2201 -DGOES -DGPSTM -DOMEGA \
-+ -DLEITCH -DTRAK
-+ CFLAGS+= ${NTPDEFS} ${DEFS_LOCAL} ${AUTHDEFS} ${CLOCKDEFS} ${COPTS}
-+ BINDIR?= /usr/sbin
-diff -c /dev/null 386BSD/src/contrib/xntpd/README.FreeBSD:1.5
-*** /dev/null Sun Apr 3 13:42:15 1994
---- 386BSD/src/contrib/xntpd/README.FreeBSD Sun Apr 3 13:42:15 1994
-***************
-*** 0 ****
---- 1,78 ----
-+ This version of NTP was converted to the BSD-style Makefile system by
-+ Garrett Wollman (wollman@freefall.cdrom.com); it is based on version
-+ 3.3p (late beta) from the University of Delaware.
-+
-+ Besides the Makefile changes, the DES code has been completely removed
-+ in order to make this code exportable. If you have a legal copy of
-+ `authdes.c', you can just add it to the lib/ directory and add `-DDES'
-+ to the AUTHDEFS in Makefile.inc.
-+
-+ You can change CLOCKDEFS in the same file to add other reference clocks.
-+
-+ ----------------------------------------------------
-+ Support for Conrad electronic's "DCF-77 Uhr, Mobil".
-+ ----------------------------------------------------
-+ Conrad electronic in Germany,, Phone (+49) 962230111 (?), sells a gadget
-+ called "DCF77 Uhr, mobil", which is a DCF77 timecode receiver with a
-+ rs-232 interface. The price is around DM130.
-+ 9-pin interface is Order# 97 94 57 66
-+ 25-pin interface is Order# 97 94 81 66
-+
-+ You must define
-+ -DDCF77 -DPPS -DFREEBSD_CONRAD -DDEBUG
-+ when you compile xntpd. You can later remove -DDEBUG, if you feel like it.
-+
-+ You must also have
-+ options COM_BIDIR
-+ defined in your kernel, and finally the ttyport you intend to use must
-+ have special interrupt vector:
-+ device sio1 at isa? port "IO_COM2" tty irq 3 vector siointrts
-+ ^^^^^^^^^^^^
-+ connect the radio-clock to the tty port and link it to /dev/refclock-0:
-+
-+ cd /dev
-+ sh MAKEDEV cua1
-+ ln -s /dev/cua01 /dev/refclock-0
-+
-+ make a directory to gather statistics in:
-+ mkdir /var/tmp/ntp
-+
-+ Create a /etc/ntp.conf along these lines:
-+
-+ # DCF77 without PPS
-+ server 127.127.8.20
-+ # DCF77 with PPS
-+ #server 127.127.8.148 prefer
-+
-+ driftfile /var/tmp/ntp/ntp.drift
-+ statsdir /var/tmp/ntp
-+ statistics loopstats
-+ statistics peerstats
-+ statistics clockstats
-+ filegen peerstats file peerstats type day enable
-+ filegen loopstats file loopstats type day enable
-+ filegen clockstats file clockstats type day enable
-+
-+ Try to start it:
-+ comcontrol ttyd1 bidir
-+ tickadj -A
-+ xntpd -d -d -d
-+
-+ You should see the red LED flash on the receiver every second now. You
-+ may have to experiment a bit with the location, and possibly adjust the
-+ minute variable resistor inside to get a good signal. Be aware, that just
-+ because you see the light flash, is not the same as the signal being
-+ received by the computer. The chip doing the work in the reciver uses
-+ less than 1 micro-ampere, so even if RTS isn't pulled low, it will happily
-+ receive, but be unable to buffer the signal to the rs-232 levels needed.
-+
-+ You can see what's going on in /var/log/messages, and query the
-+ daemon using xntpdc and ntpq, in particular the "clockvar" command
-+ of ntpq will tell about the clocks healt.
-+
-+ I live in Slagelse, Denmark, which is ~1000 Km from Mainflingen, yet
-+ I have +/- 2 ms precision from this cheap gadget. If you have a very
-+ stable signal, you can use the 'pps' address instead to improve your
-+ timing.
-+
-+ Have fun... Poul-Henning Kamp <phk@login.dkuug.dk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/authstuff/Makefile:1.2
-*** /dev/null Sun Apr 3 13:42:19 1994
---- 386BSD/src/contrib/xntpd/authstuff/Makefile Sun Apr 3 13:42:20 1994
-***************
-*** 0 ****
---- 1,27 ----
-+ #
-+ # $Id: Makefile,v 1.2 1993/12/22 11:32:10 rgrimes Exp $
-+ #
-+ # Most of the programs in this directory are completely useless for the
-+ # NTP configuration that we provide by default.
-+ # We provide the `md5' program as a public service.
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= ${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= md5
-+
-+ SRCS= md5driver.c
-+ NOMAN=
-+
-+ install:
-+
-+ .include <bsd.prog.mk>
-diff -c 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.2
-*** 386BSD/src/contrib/xntpd/authstuff/md5driver.c:1.1.1.2 Sun Apr 3 13:42:20 1994
---- 386BSD/src/contrib/xntpd/authstuff/md5driver.c Sun Apr 3 13:42:20 1994
-***************
-*** 30,36 ****
---- 30,38 ----
- #endif /* SYS_BSDI */
- #include "md5.h"
-
-+ #ifndef MD5
- #define MD5
-+ #endif
- #include "ntp_string.h"
- #include "ntp_stdlib.h"
-
-diff -c /dev/null 386BSD/src/contrib/xntpd/clockstuff/Makefile:1.1
-*** /dev/null Sun Apr 3 13:42:21 1994
---- 386BSD/src/contrib/xntpd/clockstuff/Makefile Sun Apr 3 13:42:21 1994
-***************
-*** 0 ****
---- 1,16 ----
-+ #
-+ # $Id: Makefile,v 1.1 1993/12/21 21:06:24 wollman Exp $
-+ #
-+
-+ PROG= propdelay
-+ LIBADD= -L${.CURDIR}/../lib -lntp -lm
-+ DPADD= ${.CURDIR}/../lib/libntp.a
-+
-+ SRCS= propdelay.c
-+ NOMAN=
-+
-+ install:
-+
-+ CLEANFILES+= chutest clktest chutest.o clktest.o
-+
-+ .include <bsd.prog.mk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/lib/Makefile:1.5
-*** /dev/null Sun Apr 3 13:43:01 1994
---- 386BSD/src/contrib/xntpd/lib/Makefile Sun Apr 3 13:43:01 1994
-***************
-*** 0 ****
---- 1,30 ----
-+ #
-+ # $Id: Makefile,v 1.5 1994/04/03 20:37:05 wollman Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ SRCS= atoint.c atolfp.c atouint.c auth12crypt.c authdecrypt.c authdes.c \
-+ authencrypt.c authkeys.c authparity.c authreadkeys.c authusekey.c \
-+ buftvtots.c caljulian.c calleapwhen.c caltontp.c calyearstart.c \
-+ clocktime.c dofptoa.c dolfptoa.c emalloc.c fptoa.c fptoms.c \
-+ gettstamp.c hextoint.c hextolfp.c humandate.c inttoa.c \
-+ lib_strbuf.c mfptoa.c mfptoms.c modetoa.c mstolfp.c \
-+ msutotsf.c netof.c numtoa.c refnumtoa.c numtohost.c octtoint.c \
-+ prettydate.c ranny.c tsftomsu.c tstotv.c tvtoa.c tvtots.c \
-+ uglydate.c uinttoa.c utvtoa.c clocktypes.c \
-+ md5.c a_md5encrypt.c a_md5decrypt.c \
-+ a_md512crypt.c decodenetnum.c systime.c msyslog.c syssignal.c \
-+ findconfig.c getopt.c
-+
-+ NOMAN=
-+ NOPROFILE=
-+ LIB= ntp
-+ CLEANFILES+=authdes.c
-+
-+ install:
-+
-+ authdes.c: authdes.c.export
-+ cp ${.CURDIR}/authdes.c.export authdes.c
-+
-+ .include <bsd.lib.mk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/ntpdate/Makefile:1.3
-*** /dev/null Sun Apr 3 13:43:27 1994
---- 386BSD/src/contrib/xntpd/ntpdate/Makefile Sun Apr 3 13:43:27 1994
-***************
-*** 0 ****
---- 1,28 ----
-+ #
-+ # $Id: Makefile,v 1.3 1993/12/22 11:32:56 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= ntpdate
-+ MAN8= ${.CURDIR}/../doc/ntpdate.8
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= ntpdate.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion ntpdate
-+
-+ .include <bsd.prog.mk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/ntpq/Makefile:1.3
-*** /dev/null Sun Apr 3 13:43:28 1994
---- 386BSD/src/contrib/xntpd/ntpq/Makefile Sun Apr 3 13:43:29 1994
-***************
-*** 0 ****
---- 1,29 ----
-+ #
-+ # $Id: Makefile,v 1.3 1993/12/22 11:33:07 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= ntpq
-+ MAN8= ${.CURDIR}/../doc/ntpq.8
-+ CLEANFILES+= .version version.c
-+ BINDIR= /usr/bin
-+
-+ SRCS= ntpq.c ntpq_ops.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion ntpq
-+
-+ .include <bsd.prog.mk>
-diff -c 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.2
-*** 386BSD/src/contrib/xntpd/ntpq/ntpq.c:1.1.1.2 Sun Apr 3 13:43:30 1994
---- 386BSD/src/contrib/xntpd/ntpq/ntpq.c Sun Apr 3 13:43:30 1994
-***************
-*** 301,307 ****
- static int decodearr P((char *, int *, l_fp *));
- static char * getcode P((int, struct codestring *));
- static void help P((struct parse *, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI)
- static int helpsort P((const void *, const void *));
- #else
- static int helpsort P((char **, char **));
---- 301,307 ----
- static int decodearr P((char *, int *, l_fp *));
- static char * getcode P((int, struct codestring *));
- static void help P((struct parse *, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- static int helpsort P((const void *, const void *));
- #else
- static int helpsort P((char **, char **));
-***************
-*** 335,341 ****
- static void endoutput P((FILE *));
- static void outputarr P((FILE *, char *, int, l_fp *));
- static void cookedprint P((int, int, char *, int, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI)
- static int assoccmp P((const void *, const void *));
- #else
- static int assoccmp P((struct association *, struct association *));
---- 335,341 ----
- static void endoutput P((FILE *));
- static void outputarr P((FILE *, char *, int, l_fp *));
- static void cookedprint P((int, int, char *, int, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- static int assoccmp P((const void *, const void *));
- #else
- static int assoccmp P((struct association *, struct association *));
-***************
-*** 1888,1894 ****
- for (xcp = opcmds; xcp->keyword != 0; xcp++)
- cmdsort[n++] = xcp->keyword;
-
-! #if defined(sgi) || defined(SYS_BSDI)
- qsort((void *)cmdsort, n, sizeof(char *), helpsort);
- #else
- qsort((char *)cmdsort, n, sizeof(char *), helpsort);
---- 1888,1894 ----
- for (xcp = opcmds; xcp->keyword != 0; xcp++)
- cmdsort[n++] = xcp->keyword;
-
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- qsort((void *)cmdsort, n, sizeof(char *), helpsort);
- #else
- qsort((char *)cmdsort, n, sizeof(char *), helpsort);
-***************
-*** 1934,1940 ****
- * helpsort - do hostname qsort comparisons
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI)
- helpsort(t1, t2)
- const void *t1;
- const void *t2;
---- 1934,1940 ----
- * helpsort - do hostname qsort comparisons
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- helpsort(t1, t2)
- const void *t1;
- const void *t2;
-***************
-*** 3028,3034 ****
- sortassoc()
- {
- if (numassoc > 1)
-! #if defined(sgi) || defined(SYS_BSDI)
- qsort((void *)assoc_cache, numassoc,
- sizeof(struct association), assoccmp);
- #else
---- 3028,3034 ----
- sortassoc()
- {
- if (numassoc > 1)
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- qsort((void *)assoc_cache, numassoc,
- sizeof(struct association), assoccmp);
- #else
-***************
-*** 3042,3048 ****
- * assoccmp - compare two associations
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI)
- assoccmp(t1, t2)
- const void *t1;
- const void *t2;
---- 3042,3048 ----
- * assoccmp - compare two associations
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- assoccmp(t1, t2)
- const void *t1;
- const void *t2;
-diff -c /dev/null 386BSD/src/contrib/xntpd/ntptrace/Makefile:1.2
-*** /dev/null Sun Apr 3 13:43:31 1994
---- 386BSD/src/contrib/xntpd/ntptrace/Makefile Sun Apr 3 13:43:31 1994
-***************
-*** 0 ****
---- 1,28 ----
-+ #
-+ # $Id: Makefile,v 1.2 1993/12/22 11:33:14 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= ntptrace
-+ MAN8= ${.CURDIR}/../doc/ntptrace.8
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= ntptrace.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion ntptrace
-+
-+ .include <bsd.prog.mk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/parse/Makefile:1.1
-*** /dev/null Sun Apr 3 13:43:32 1994
---- 386BSD/src/contrib/xntpd/parse/Makefile Sun Apr 3 13:43:32 1994
-***************
-*** 0 ****
---- 1,19 ----
-+ #
-+ # $Id: Makefile,v 1.1 1993/12/21 20:04:14 wollman Exp $
-+ #
-+
-+ PARSEFLAGS= -DCLOCK_SCHMID -DCLOCK_DCF7000 -DCLOCK_MEINBERG \
-+ -DCLOCK_RAWDCF -DCLOCK_TRIMSV6
-+
-+ CFLAGS+= -I${.CURDIR}/../include ${PARSEFLAGS}
-+
-+ SRCS= parse.c parse_conf.c clk_meinberg.c clk_schmid.c clk_rawdcf.c \
-+ clk_dcf7000.c clk_trimble.c
-+
-+ NOMAN=
-+ NOPROFILE=
-+ LIB= parse
-+
-+ install:
-+
-+ .include <bsd.lib.mk>
-diff -c 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 386BSD/src/contrib/xntpd/scripts/mkversion:1.2
-*** 386BSD/src/contrib/xntpd/scripts/mkversion:1.1.1.1 Sun Apr 3 13:43:49 1994
---- 386BSD/src/contrib/xntpd/scripts/mkversion Sun Apr 3 13:43:49 1994
-***************
-*** 9,20 ****
- echo $RUN > .version
-
- DATE="`date`"
-
- if [ -r VERSION ]; then
- VERSION=VERSION
- else
- VERSION=../VERSION
-! fi
-
- if [ -f "$VERSION" ]; then
- FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
---- 9,23 ----
- echo $RUN > .version
-
- DATE="`date`"
-+ TOPDIR=`echo $0 | sed -e 's;mkversion;..;'`
-
- if [ -r VERSION ]; then
- VERSION=VERSION
-+ else if [ -r ${TOPDIR}/VERSION ]; then
-+ VERSION=${TOPDIR}/VERSION
- else
- VERSION=../VERSION
-! fi; fi
-
- if [ -f "$VERSION" ]; then
- FLAGS="`egrep '^[0-9a-zA-Z_]+=' "$VERSION" | tr '\012' ';'` "
-diff -c /dev/null 386BSD/src/contrib/xntpd/util/Makefile:1.2
-*** /dev/null Sun Apr 3 13:43:53 1994
---- 386BSD/src/contrib/xntpd/util/Makefile Sun Apr 3 13:43:54 1994
-***************
-*** 0 ****
---- 1,28 ----
-+ #
-+ # $Id: Makefile,v 1.2 1993/12/22 11:33:28 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= tickadj
-+ MAN8= ${.CURDIR}/../doc/tickadj.8
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= tickadj.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion tickadj
-+
-+ .include <bsd.prog.mk>
-diff -c /dev/null 386BSD/src/contrib/xntpd/xntpd/Makefile:1.5
-*** /dev/null Sun Apr 3 13:43:56 1994
---- 386BSD/src/contrib/xntpd/xntpd/Makefile Sun Apr 3 13:43:56 1994
-***************
-*** 0 ****
---- 1,45 ----
-+ #
-+ # $Id: Makefile,v 1.5 1994/04/03 20:37:26 wollman Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= ${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= ${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ .if exists(${.CURDIR}/../parse/obj)
-+ LDADD+= -L${.CURDIR}/../parse/obj
-+ DPADD+= ${.CURDIR}/../parse/obj/libparse.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../parse
-+ DPADD+= ${.CURDIR}/../parse/libparse.a
-+ .endif
-+
-+ LDADD+= -lntp -lparse
-+
-+ PROG= xntpd
-+ MAN8= ${.CURDIR}/../doc/xntpd.8
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \
-+ ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \
-+ ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \
-+ ntp_unixclock.c ntp_util.c ntpd.c refclock_chu.c \
-+ refclock_conf.c refclock_local.c refclock_pst.c \
-+ refclock_wwvb.c refclock_goes.c refclock_mx4200.c \
-+ refclock_parse.c refclock_as2201.c refclock_omega.c \
-+ refclock_tpro.c refclock_leitch.c refclock_irig.c \
-+ refclock_msfees.c refclock_gpstm.c refclock_trak.c ntp_intres.c \
-+ ntp_filegen.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion xntpd
-+
-+ .include <bsd.prog.mk>
-diff -c 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.3
-*** 386BSD/src/contrib/xntpd/xntpd/ntp_control.c:1.1.1.3 Sun Apr 3 13:43:59 1994
---- 386BSD/src/contrib/xntpd/xntpd/ntp_control.c Sun Apr 3 13:44:00 1994
-***************
-*** 264,278 ****
- /*
- * System and processor definitions. These will change for the gizmo board.
- */
-! #ifndef STR_SYSTEM
-! #define STR_SYSTEM "UNIX"
-! #endif
-! #ifndef STR_PROCESSOR
-! #define STR_PROCESSOR "unknown"
-! #endif
-!
-! static char str_system[] = STR_SYSTEM;
-! static char str_processor[] = STR_PROCESSOR;
-
- /*
- * Trap structures. We only allow a few of these, and send
---- 264,271 ----
- /*
- * System and processor definitions. These will change for the gizmo board.
- */
-! #include <sys/utsname.h>
-! static struct utsname utsname;
-
- /*
- * Trap structures. We only allow a few of these, and send
-***************
-*** 433,438 ****
---- 426,433 ----
- {
- int i;
-
-+ uname(&utsname);
-+
- ctl_clr_stats();
-
- ctl_auth_keyid = 0;
-***************
-*** 1267,1278 ****
- ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
- break;
- case CS_PROCESSOR:
-! ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
-! sizeof(str_processor) - 1);
- break;
- case CS_SYSTEM:
-! ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
-! sizeof(str_system) - 1);
- break;
- case CS_KEYID:
- ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
---- 1262,1273 ----
- ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
- break;
- case CS_PROCESSOR:
-! ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine,
-! strlen(utsname.machine));
- break;
- case CS_SYSTEM:
-! ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname,
-! strlen(utsname.sysname));
- break;
- case CS_KEYID:
- ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
-diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.3
-*** 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c:1.1.1.3 Sun Apr 3 13:44:01 1994
---- 386BSD/src/contrib/xntpd/xntpd/refclock_parse.c Sun Apr 3 13:44:01 1994
-***************
-*** 30,35 ****
---- 30,37 ----
- * PPS - supply loopfilter with PPS samples (if configured)
- * PPSPPS - notify loopfilter of PPS file descriptor
- *
-+ * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work
-+ * with FreeBSD.
- * TTY defines:
- * HAVE_BSD_TTYS - currently unsupported
- * HAVE_SYSV_TTYS - will use termio.h
-***************
-*** 82,87 ****
---- 84,92 ----
- #include <time.h>
-
- #include <sys/errno.h>
-+ #ifdef FREEBSD_CONRAD
-+ #include <sys/ioctl.h>
-+ #endif
- extern int errno;
-
- #if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
-***************
-*** 440,446 ****
---- 445,456 ----
- #define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
- #define RAWDCF_FORMAT "RAW DCF77 Timecode"
- #define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
-+
-+ #ifdef FREEBSD_CONRAD
-+ #define RAWDCF_CFLAG (CS8|CREAD|CLOCAL)
-+ #else
- #define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL)
-+ #endif
- #define RAWDCF_IFLAG 0
- #define RAWDCF_OFLAG 0
- #define RAWDCF_LFLAG 0
-***************
-*** 1482,1492 ****
---- 1492,1513 ----
- struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
- register int count;
- register char *s;
-+ #ifdef FREEBSD_CONRAD
-+ struct timeval foo;
-+ #endif
-+
- /*
- * eat all characters, parsing then and feeding complete samples
- */
- count = rbufp->recv_length;
- s = rbufp->recv_buffer;
-+ #ifdef FREEBSD_CONRAD
-+ ioctl(parse->fd,TIOCTIMESTAMP,&foo);
-+ TVTOTS(&foo, &rbufp->recv_time);
-+ rbufp->recv_time.l_uf += TS_ROUNDBIT;
-+ rbufp->recv_time.l_ui += JAN_1970;
-+ rbufp->recv_time.l_uf &= TS_MASK;
-+ #endif
-
- while (count--)
- {
-***************
-*** 2271,2277 ****
- tm.c_iflag = clockinfo[type].cl_iflag;
- tm.c_oflag = clockinfo[type].cl_oflag;
- tm.c_lflag = clockinfo[type].cl_lflag;
-!
- if (TTY_SETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
---- 2292,2301 ----
- tm.c_iflag = clockinfo[type].cl_iflag;
- tm.c_oflag = clockinfo[type].cl_oflag;
- tm.c_lflag = clockinfo[type].cl_lflag;
-! #ifdef FREEBSD_CONRAD
-! tm.c_ispeed = 50;
-! tm.c_ospeed = 50;
-! #endif
- if (TTY_SETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
-***************
-*** 2314,2319 ****
---- 2338,2358 ----
- return 0; /* well, ok - special initialisation broke */
- }
-
-+ #ifdef FREEBSD_CONRAD
-+ {
-+ int i,j;
-+ struct timeval tv;
-+ ioctl(parse->fd,TIOCTIMESTAMP,&tv);
-+ j = TIOCM_RTS;
-+ i = ioctl(fd232, TIOCMBIC, &j);
-+ if (i < 0) {
-+ syslog(LOG_ERR,
-+ "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m",
-+ CL_UNIT(parse->unit));
-+ }
-+ }
-+ #endif
-+
- strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
- tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
-
-diff -c 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.2
-*** 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c:1.1.1.1 Sun Apr 3 13:44:02 1994
---- 386BSD/src/contrib/xntpd/xntpd/refclock_trak.c Sun Apr 3 13:44:02 1994
-***************
-*** 14,19 ****
---- 14,21 ----
- #include "ntp_refclock.h"
- #include "ntp_unixtime.h"
-
-+ static void gps_send();
-+
- #if defined(HAVE_BSD_TTYS)
- #include <sgtty.h>
- #endif /* HAVE_BSD_TTYS */
-***************
-*** 841,847 ****
- /*
- * usually trak_receive can get a timestamp every second
- */
-! #ifndef TRAKPPS && TRAKCLK
- gettstamp(&gps->lastrec);
- #endif
- gps->polls++;
---- 843,849 ----
- /*
- * usually trak_receive can get a timestamp every second
- */
-! #if !defined(TRAKPPS) && !defined(TRAKCLK)
- gettstamp(&gps->lastrec);
- #endif
- gps->polls++;
-diff -c /dev/null 386BSD/src/contrib/xntpd/xntpdc/Makefile:1.2
-*** /dev/null Sun Apr 3 13:44:03 1994
---- 386BSD/src/contrib/xntpd/xntpdc/Makefile Sun Apr 3 13:44:03 1994
-***************
-*** 0 ****
---- 1,28 ----
-+ #
-+ # $Id: Makefile,v 1.2 1993/12/22 11:34:00 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= xntpdc
-+ MAN8= ${.CURDIR}/../doc/xntpdc.8
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= ntpdc.c ntpdc_ops.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion xntpdc
-+
-+ .include <bsd.prog.mk>
-diff -c 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.2
-*** 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c:1.1.1.3 Sun Apr 3 13:44:04 1994
---- 386BSD/src/contrib/xntpd/xntpdc/ntpdc.c Sun Apr 3 13:44:04 1994
-***************
-*** 53,59 ****
- static int getarg P((char *, int, arg_v *));
- static int getnetnum P((char *, U_LONG *, char *));
- static void help P((struct parse *, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI)
- static int helpsort P((const void *, const void *));
- #else
- static int helpsort P((char **, char **));
---- 53,59 ----
- static int getarg P((char *, int, arg_v *));
- static int getnetnum P((char *, U_LONG *, char *));
- static void help P((struct parse *, FILE *));
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- static int helpsort P((const void *, const void *));
- #else
- static int helpsort P((char **, char **));
-***************
-*** 1153,1159 ****
- for (xcp = opcmds; xcp->keyword != 0; xcp++)
- cmdsort[n++] = xcp->keyword;
-
-! #if defined(sgi) || defined(SYS_BSDI)
- qsort((void *)cmdsort, n, sizeof(char *), helpsort);
- #else
- qsort((char *)cmdsort, n, sizeof(char *), helpsort);
---- 1153,1159 ----
- for (xcp = opcmds; xcp->keyword != 0; xcp++)
- cmdsort[n++] = xcp->keyword;
-
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- qsort((void *)cmdsort, n, sizeof(char *), helpsort);
- #else
- qsort((char *)cmdsort, n, sizeof(char *), helpsort);
-***************
-*** 1199,1205 ****
- * helpsort - do hostname qsort comparisons
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI)
- helpsort(t1, t2)
- const void *t1;
- const void *t2;
---- 1199,1205 ----
- * helpsort - do hostname qsort comparisons
- */
- static int
-! #if defined(sgi) || defined(SYS_BSDI) || defined(__STDC__)
- helpsort(t1, t2)
- const void *t1;
- const void *t2;
-diff -c /dev/null 386BSD/src/contrib/xntpd/xntpres/Makefile:1.2
-*** /dev/null Sun Apr 3 13:44:05 1994
---- 386BSD/src/contrib/xntpd/xntpres/Makefile Sun Apr 3 13:44:05 1994
-***************
-*** 0 ****
---- 1,28 ----
-+ #
-+ # $Id: Makefile,v 1.2 1993/12/22 11:34:09 rgrimes Exp $
-+ #
-+
-+ CFLAGS+= -I${.CURDIR}/../include
-+
-+ .if exists(${.CURDIR}/../lib/obj)
-+ LDADD+= -L${.CURDIR}/../lib/obj
-+ DPADD+= -L${.CURDIR}/../lib/obj/libntp.a
-+ .else
-+ LDADD+= -L${.CURDIR}/../lib
-+ DPADD+= -L${.CURDIR}/../lib/libntp.a
-+ .endif
-+
-+ LDADD+= -lntp
-+
-+ PROG= xntpres
-+ NOMAN=
-+ CLEANFILES+= .version version.c
-+
-+ SRCS= xntpres.c version.c
-+
-+ beforedepend: version.c
-+
-+ version.c: ${.CURDIR}/../VERSION
-+ ${.CURDIR}/../scripts/mkversion xntpres
-+
-+ .include <bsd.prog.mk>
-
--GAWollman
-
---
-Garrett A. Wollman | Shashish is simple, it's discreet, it's brief. ...
-wollman@lcs.mit.edu | Shashish is the bonding of hearts in spite of distance.
-formerly known as | It is a bond more powerful than absence. We like people
-wollman@emba.uvm.edu | who like Shashish. - Claude McKenzie + Florent Vollant
-[no save]
-
diff --git a/usr.sbin/xntpd/patches/patch.36 b/usr.sbin/xntpd/patches/patch.36
deleted file mode 100644
index b90df0d..0000000
--- a/usr.sbin/xntpd/patches/patch.36
+++ /dev/null
@@ -1,42 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa18708; 7 Apr 94 14:50 EDT
-Received: from mudshark.artisoft.com by louie.udel.edu id aa16541;
- 7 Apr 94 14:46 EDT
-Received: by mudshark.artisoft.com id AA11987
- (5.67b/IDA-1.5 for mills@udel.edu); Thu, 7 Apr 1994 11:46:32 -0700
-Date: Thu, 7 Apr 1994 11:46:32 -0700
-From: Matt Day <mday@artisoft.com>
-Message-Id: <199404071846.AA11987@mudshark.artisoft.com>
-To: mills@udel.edu
-Subject: XNTP bug on Linux
-
-adjtime() on Linux fails if you try to adjust more than 131072
-microseconds. This causes `ntpdate' to fail on Linux when the system
-clock is off by more than 131072 microseconds but less than
-NTPDATE_THRESHOLD (500 ms).
-
-Reducing NTPDATE_THRESHOLD to less than 131072 microseconds fixed the
-problem.
-
-From the comments in the code for Linux's adjtime(), it looks like this
-problem might go away someday.
-
-Thanks!
-
-*** ntpdate.h- Tue Aug 24 14:29:30 1993
---- ntpdate.h Thu Apr 7 11:33:53 1994
-***************
-*** 54,60 ****
---- 54,64 ----
- * are close, or step the time if the times are farther apart. The
- * following defines what is "close".
- */
-+ #ifdef linux
-+ #define NTPDATE_THRESHOLD (FP_SECOND / 8) /* 1/8 second */
-+ #else
- #define NTPDATE_THRESHOLD (FP_SECOND >> 1) /* 1/2 second */
-+ #endif
-
- /*
- * When doing adjustments, ntpdate actually overadjusts (currently
-
diff --git a/usr.sbin/xntpd/patches/patch.37 b/usr.sbin/xntpd/patches/patch.37
deleted file mode 100644
index e17267f..0000000
--- a/usr.sbin/xntpd/patches/patch.37
+++ /dev/null
@@ -1,204 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa25219; 8 Apr 94 17:07 EDT
-Received: from ni.umd.edu by louie.udel.edu id aa03359; 8 Apr 94 16:58 EDT
-Received: by ni.umd.edu id AA18341
- (5.65c/IDA-1.4.4 for ntp-list); Fri, 8 Apr 1994 16:55:09 -0400
-Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA18337
- (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Fri, 8 Apr 1994 16:55:02 -0400
-Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
- id AA16356; Fri, 8 Apr 94 16:54:44 EDT
-Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
- id AA10459; Fri, 8 Apr 94 16:54:36 EDT via
-Message-Id: <9404082054.AA10459@repo.unipress.com>
-To: ntp@ni.umd.edu
-Subject: Re: xntp for univel/unix-ware on x86
-Date: Fri, 08 Apr 94 16:54:31 -0400
-From: Ray Schnitzler <ras@unipress.com>
-
-
-I am happy (but not particularly proud - it's more than a
- little rough around the edges) to report a working
- xntpd for Univel.
-
-It wound up being a hack on solaris, svr4, and (for the lack
- of kernel tickadj) irix.
-
-util/tickadj does *not* work, even for controlling 'tick'.
- I'm not sure what the right behavior should be.
-
-Most of the changes are signalled by SYS_UNIVEL, as
- initiated by OS=univel.
-
-There are many additional loose ends, which are not terribly
- important to me to clean up, since the univel is a
- very low usage machine, here, and my because
- employer expects me to be working on other things,
- altogether.
-
-Nevertheless, it seems to work.
-
-Special thanks go to Denton Gentry for advice along the way.
-
-
-Enjoy.
-
-
-Here are the changes I made. First, the (new)
- machines/univel file, and then the (rest of the)
- context diffs:
-
-*** /dev/null Fri Apr 8 16:49:24 1994
---- machines/univel Fri Apr 8 12:38:20 1994
-***************
-*** 0 ****
---- 1,10 ----
-+ SHELL= /bin/sh
-+ RANLIB= ls # ar does the work of ranlib under System V
-+ DEFS= -DSYS_UNIVEL -DSTREAMS_TLI -DHAVE_TERMIOS
-+ AUTHDEFS= -DDES -DMD5
-+ CLOCKDEFS=
-+ DAEMONLIBS= -lnsl -lsocket -lelf
-+ RESLIB= -lnsl -lsocket -lelf
-+ INSTALL=$(TOP)scripts/install.sh
-+ SHELL= /bin/sh
-+ RANLIB= ls # ar does the work of ranlib under System V
-*** authstuff/authspeed.c.orig Thu Jan 27 09:03:12 1994
---- authstuff/authspeed.c Fri Apr 8 14:19:35 1994
-***************
-*** 2,8 ****
- * authspeed - figure out how LONG it takes to do an NTP encryption
- */
-
-! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
- #define FAKE_RUSAGE
- #endif
-
---- 2,8 ----
- * authspeed - figure out how LONG it takes to do an NTP encryption
- */
-
-! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIVEL)
- #define FAKE_RUSAGE
- #endif
-*** include/ntp_if.h.orig Mon Nov 15 16:21:29 1993
---- include/ntp_if.h Fri Apr 8 14:51:49 1994
-***************
-*** 16,21 ****
---- 16,25 ----
- #include <sys/sockio.h>
- #endif
-
-+ #if defined(SYS_UNIVEL)
-+ #include <sys/sockio.h>
-+ #endif
-+
- #if defined(SYS_PTX) || defined(SYS_SINIXM)
- #include <sys/stream.h>
- #include <sys/stropts.h>
-*** include/ntp_machine.h.orig Mon Mar 14 02:47:02 1994
---- include/ntp_machine.h Fri Apr 8 14:45:42 1994
-***************
-*** 526,531 ****
---- 526,563 ----
- #endif
-
- /*
-+ * Univel SVR4 on intel x86 processor
-+ */
-+ #if defined(SYS_UNIVEL)
-+ /* #define _POSIX_SOURCE */
-+ #define NTP_POSIX_SOURCE
-+ #define HAVE_ATT_NICE
-+ #define HAVE_READKMEM
-+ #define USE_PROTOTYPES
-+ #undef HAVE_ATT_SETPGRP
-+ #define UDP_WILDCARD_DELIVERY
-+ #define HAVE_SIGNALED_IO
-+ #define USE_TTY_SIGPOLL
-+ #define USE_UDP_SIGPOLL
-+ #define STREAM
-+ #define STREAMS
-+ #ifndef STREAMS_TLI
-+ /*#define STREAMS_TLI*/
-+ #endif
-+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
-+ #undef STEP_SLEW /* TWO step */
-+ #define LOCK_PROCESS
-+ #undef SYSV_TIMEOFDAY
-+ #define SIZE_RETURNED_IN_BUFFER
-+ #define RETSIGTYPE void
-+ #include <sys/types.h>
-+ #include <netinet/in_systm.h>
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Univel"
-+ #endif
-+ #endif
-+
-+ /*
- * DomainOS
- */
- #if defined(SYS_DOMAINOS)
-*** xntpd/ntp_unixclock.c.orig Thu Feb 3 00:20:20 1994
---- xntpd/ntp_unixclock.c Fri Apr 8 14:40:55 1994
-***************
-*** 255,260 ****
---- 255,277 ----
- /* Define the following to be what the tick and tickadj variables are
- * called in your kernel.
- */
-+ #if defined(SYS_UNIVEL)
-+ /*
-+ * clock_parms - return the local clock tickadj and tick parameters
-+ *
-+ * The values set here were determined experimentally on a 486 system
-+ * I'm not confident in them. - RAS
-+ *
-+ */
-+ static void
-+ clock_parms(tickadj, tick)
-+ U_LONG *tickadj;
-+ U_LONG *tick;
-+ {
-+ *tick = 10000; /* microseconds */
-+ *tickadj = 80; /* microseconds */
-+ }
-+ #else /* SYS_UNIVEL */
-
- #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
- #define K_TICKADJ_NAME "tickadj"
-***************
-*** 421,427 ****
- }
- #endif /* sgi */
-
--
- #ifdef NOKMEM
-
- #ifndef HZ
---- 438,443 ----
-***************
-*** 571,573 ****
---- 587,590 ----
- *tick = (U_LONG)txc.tick;
- }
- #endif /* SYS_LINUX */
-+ #endif /* SYS_UNIVEL */
-*** xntpd/ntpd.c.orig Wed Feb 16 22:09:35 1994
---- xntpd/ntpd.c Fri Apr 8 16:35:57 1994
-***************
-*** 14,20 ****
- #include <sys/rtprio.h>
- #endif
-
-! #if defined(SYS_SVR4)
- #include <termios.h>
- #endif
-
---- 14,20 ----
- #include <sys/rtprio.h>
- #endif
-
-! #if defined(SYS_SVR4) || defined (SYS_UNIVEL)
- #include <termios.h>
- #endif
-
diff --git a/usr.sbin/xntpd/patches/patch.38 b/usr.sbin/xntpd/patches/patch.38
deleted file mode 100644
index dddba69..0000000
--- a/usr.sbin/xntpd/patches/patch.38
+++ /dev/null
@@ -1,226 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa09565; 11 Apr 94 13:04 EDT
-Received: from ni.umd.edu by louie.udel.edu id aa10661; 11 Apr 94 12:57 EDT
-Received: by ni.umd.edu id AA00787
- (5.65c/IDA-1.4.4 for ntp-list); Mon, 11 Apr 1994 12:50:20 -0400
-Received: from RUTGERS.EDU by ni.umd.edu with SMTP id AA00783
- (5.65c/IDA-1.4.4 for <ntp@ni.umd.edu>); Mon, 11 Apr 1994 12:50:13 -0400
-Received: from unipress-link.rutgers.edu by rutgers.edu (5.59/SMI4.0/RU1.5/3.08)
- id AA26905; Mon, 11 Apr 94 12:49:43 EDT
-Received: from huh.unipress.com by repo.unipress.com (4.1/SMI-4.1/UniPress022294.2)
- id AA03031; Mon, 11 Apr 94 12:49:27 EDT via
-Message-Id: <9404111649.AA03031@repo.unipress.com>
-To: ntp@ni.umd.edu
-Subject: Re: xntp for univel/unix-ware on x86
-Date: Mon, 11 Apr 94 12:49:25 -0400
-From: Ray Schnitzler <ras@unipress.com>
-
-
-As seems usual, every patch is followed by a re-patch. This
- is a (modified) re-posting of patches to make xntp
- work on unixware svr4. It now uses
- machines/unixware1 and SYS_UNIXWARE1 (instead of
- univel, as suggested by J J Farrell), and now
- includes some RELNOTES and COPYRIGHT text (as
- suggested by Dave)
-
-It is still rough, but it still works. The tickadj utility
- still does *not* work, even for controlling 'tick'.
- I'm not sure what the right behavior should be since
- there is no 'tickadj' kernel var.
-
-In addition to the credits I mentioned above, special thanks
- go to Denton Gentry for advice along the way.
-
-
-Enjoy.
-
-Ray Schnitzler
-UniPress Software, Inc.
-------------------------------------------------------------
-Here are the changes I made. First, the (new)
- machines/univel file, and then the (rest of the)
- context diffs:
-
-*** machines/unixware1.3.3p Fri Apr 8 16:48:35 1994
---- machines/unixware1 Mon Apr 11 11:08:10 1994
-***************
-*** 0 ****
---- 1,10 ----
-+ SHELL= /bin/sh
-+ RANLIB= ls # ar does the work of ranlib under System V
-+ DEFS= -DSYS_UNIXWARE1 -DSTREAMS_TLI -DHAVE_TERMIOS -DCONFIG_FILE=\\"/usr/local/etc/ntp.conf\\"
-+ AUTHDEFS= -DDES -DMD5
-+ CLOCKDEFS=
-+ DAEMONLIBS= -lnsl -lsocket -lelf
-+ RESLIB= -lnsl -lsocket -lelf
-+ INSTALL=$(TOP)scripts/install.sh
-+ SHELL= /bin/sh
-+ RANLIB= ls # ar does the work of ranlib under System V
-*** COPYRIGHT.3.3p Thu Feb 3 00:20:07 1994
---- COPYRIGHT Mon Apr 11 10:47:24 1994
-***************
-*** 55,58 ****
---- 55,59 ----
- * Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> (Linux Port)
- * Paul A Vixie <vixie@vix.com> (TrueTime GPS driver)
- * Jim Jagielski <jim@jagubox.gsfc.nasa.gov> (A/UX port)
-+ * Ray Schnitzler <schnitz@unipress.com> (First pass at a Unixware1 port.)
- */
-*** RELNOTES.3.3p Thu Jan 27 09:33:09 1994
---- RELNOTES Mon Apr 11 11:14:35 1994
-***************
-*** 140,145 ****
---- 140,146 ----
- PC BSD/386 1.0 gcc LOCAL_CLOCK possibly see "build problems"
- PC Linux (pl14) gcc LOCAL_CLOCK (dw 93/10/30)
- PC Dell SVR4 v2.2 gcc ? (tl 93/12/30)
-+ PC Unixware1/SVR4 cc no tickadj, ? (ras 93/04/11)
- NCR3445 NCR SVR4 cc LOCAL_CLOCK (tm 93/11/29)
-
- pb: Piete Brooks
-***************
-*** 149,154 ****
---- 150,156 ----
- tl: Tony Lill <ajlill@tlill.hookup.net>
- tm: Tom Moore <Tom.Moore@DaytonOH.NCR.COM>
- jmj: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-+ ras: Ray Schnitzler <schnitz@unipress.com>
-
- Build Problems (and workaround):
-
-*** authstuff/authspeed.c.3.3p Thu Jan 27 09:03:12 1994
---- authstuff/authspeed.c Mon Apr 11 10:29:47 1994
-***************
-*** 2,8 ****
- * authspeed - figure out how LONG it takes to do an NTP encryption
- */
-
-! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX)
- #define FAKE_RUSAGE
- #endif
-
---- 2,8 ----
- * authspeed - figure out how LONG it takes to do an NTP encryption
- */
-
-! #if defined(SYS_HPUX) || defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SOLARIS) || defined(SYS_SVR4) || defined(SYS_PTX) || defined(SYS_UNIXWARE1)
- #define FAKE_RUSAGE
- #endif
-
-*** include/ntp_if.h.3.3p Mon Nov 15 16:21:29 1993
---- include/ntp_if.h Mon Apr 11 10:30:21 1994
-***************
-*** 16,21 ****
---- 16,25 ----
- #include <sys/sockio.h>
- #endif
-
-+ #if defined(SYS_UNIXWARE1)
-+ #include <sys/sockio.h>
-+ #endif
-+
- #if defined(SYS_PTX) || defined(SYS_SINIXM)
- #include <sys/stream.h>
- #include <sys/stropts.h>
-*** include/ntp_machine.h.3.3p Mon Mar 14 02:47:02 1994
---- include/ntp_machine.h Mon Apr 11 10:31:11 1994
-***************
-*** 526,531 ****
---- 526,565 ----
- #endif
-
- /*
-+ * (Univel/Novell) Unixware1 SVR4 on intel x86 processor
-+ */
-+ #if defined(SYS_UNIXWARE1)
-+ /* #define _POSIX_SOURCE */
-+ #undef HAVE_ATT_SETPGRP
-+ #define USE_PROTOTYPES
-+ #define NTP_POSIX_SOURCE
-+ #define HAVE_ATT_NICE
-+ #define HAVE_READKMEM
-+ #define USE_TTY_SIGPOLL
-+ #define USE_UDP_SIGPOLL
-+ #define UDP_WILDCARD_DELIVERY
-+ #undef HAVE_SIGNALED_IO
-+ #define STREAM
-+ #define STREAMS
-+ #ifndef STREAMS_TLI
-+ /*#define STREAMS_TLI*/
-+ #endif
-+ /* #define USE_STREAMS_DEVICE_FOR_IF_CONFIG */
-+ #undef STEP_SLEW /* TWO step */
-+ #define LOCK_PROCESS
-+ #define NO_SIGNED_CHAR_DECL
-+ #undef SYSV_TIMEOFDAY
-+ #define SIZE_RETURNED_IN_BUFFER
-+ #define RETSIGTYPE void
-+ #include <sys/sockio.h>
-+ #include <sys/types.h>
-+ #include <netinet/in_systm.h>
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX/Unixware1"
-+ #endif
-+ #endif
-+
-+ /*
- * DomainOS
- */
- #if defined(SYS_DOMAINOS)
-*** xntpd/ntp_unixclock.c.3.3p Thu Feb 3 00:20:20 1994
---- xntpd/ntp_unixclock.c Mon Apr 11 10:33:23 1994
-***************
-*** 255,260 ****
---- 255,277 ----
- /* Define the following to be what the tick and tickadj variables are
- * called in your kernel.
- */
-+ #if defined(SYS_UNIXWARE1)
-+ /*
-+ * clock_parms - return the local clock tickadj and tick parameters
-+ *
-+ * The values set here were determined experimentally on a 486 system
-+ * I'm not confident in them. - RAS
-+ *
-+ */
-+ static void
-+ clock_parms(tickadj, tick)
-+ U_LONG *tickadj;
-+ U_LONG *tick;
-+ {
-+ *tick = 10000; /* microseconds */
-+ *tickadj = 80; /* microseconds */
-+ }
-+ #else /* SYS_UNIXWARE1 */
-
- #if defined(SYS_AUX3) || defined(SYS_AUX2) || defined(SYS_SVR4) || defined(SYS_PTX)
- #define K_TICKADJ_NAME "tickadj"
-***************
-*** 571,573 ****
---- 587,590 ----
- *tick = (U_LONG)txc.tick;
- }
- #endif /* SYS_LINUX */
-+ #endif /* SYS_UNIXWARE1 */
-*** xntpd/ntpd.c.3.3p Wed Feb 16 22:09:35 1994
---- xntpd/ntpd.c Mon Apr 11 10:33:58 1994
-***************
-*** 14,20 ****
- #include <sys/rtprio.h>
- #endif
-
-! #if defined(SYS_SVR4)
- #include <termios.h>
- #endif
-
---- 14,21 ----
- #include <sys/rtprio.h>
- #endif
-
-! /* Shouldn't this test for HAVE_TERMIOS - RAS */
-! #if defined(SYS_SVR4) || defined (SYS_UNIXWARE1)
- #include <termios.h>
- #endif
-
-
diff --git a/usr.sbin/xntpd/patches/patch.39 b/usr.sbin/xntpd/patches/patch.39
deleted file mode 100644
index 12e09fe..0000000
--- a/usr.sbin/xntpd/patches/patch.39
+++ /dev/null
@@ -1,78 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa21593; 13 Apr 94 8:23 EDT
-Received: from jagubox.gsfc.nasa.gov by louie.udel.edu id aa20245;
- 13 Apr 94 8:15 EDT
-Received: by jagubox.gsfc.nasa.gov (Smail3.1.28.1 #2)
- id m0pr3rH-0005s0C; Wed, 13 Apr 94 08:15 EDT
-Message-Id: <m0pr3rH-0005s0C@jagubox.gsfc.nasa.gov>
-From: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-Subject: Minor change for ntp_loopfilter (and loop.c) in 3.3q
-To: Mills@udel.edu
-Date: Wed, 13 Apr 1994 08:15:55 -0400 (EDT)
-Reply-To: Jim Jagielski <jim@jagubox.gsfc.nasa.gov>
-In-Reply-To: <9308051324.aa24396@huey.udel.edu> from "Mills@udel.edu" at Aug 5, 93 01:24:24 pm
-X-Mailer: ELM [version 2.4 PL23]
-Content-Type: text
-Content-Length: 1738
-
-One of the changes between 3.3p and 3.3q was the format change of the syslog
-message when the clock is reset when xntpd sees a "large" offset. This change
-is nice, but it would be "better" is the notice also made mention of whether
-the reset was a step or slew (as defined by SLEWALWAYS).
-
-This patch adds that:
-*** xntpd/Oloop.c Wed Apr 13 08:05:09 1994
---- xntpd/loop.c Wed Apr 13 08:06:32 1994
-***************
-*** 458,464 ****
- lfptoa(fp_offset, 6));
- return (0);
- }
-! syslog(LOG_NOTICE, "clock reset %s\n",
- lfptoa(fp_offset, 6));
- step_systime(fp_offset);
- clock_adjust = 0;
---- 458,469 ----
- lfptoa(fp_offset, 6));
- return (0);
- }
-! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
-! #ifdef SLEWALWAYS
-! "slew",
-! #else
-! "step",
-! #endif
- lfptoa(fp_offset, 6));
- step_systime(fp_offset);
- clock_adjust = 0;
-*** xntpd/Ontp_loopfilter.c Wed Apr 13 08:05:23 1994
---- xntpd/ntp_loopfilter.c Wed Apr 13 08:07:03 1994
-***************
-*** 458,464 ****
- lfptoa(fp_offset, 6));
- return (0);
- }
-! syslog(LOG_NOTICE, "clock reset %s\n",
- lfptoa(fp_offset, 6));
- step_systime(fp_offset);
- clock_adjust = 0;
---- 458,469 ----
- lfptoa(fp_offset, 6));
- return (0);
- }
-! syslog(LOG_NOTICE, "clock reset (%s) %s\n",
-! #ifdef SLEWALWAYS
-! "slew",
-! #else
-! "step",
-! #endif
- lfptoa(fp_offset, 6));
- step_systime(fp_offset);
- clock_adjust = 0;
---
-#include <std/disclaimer.h>
- Jim Jagielski | "Is this something you can share with
- jim@jagubox.gsfc.nasa.gov | the rest of us Amazing Larry!!??"
- NASA/GSFC, Code 734.4 | Pee Wee
- Greenbelt, MD 20771 |
-
diff --git a/usr.sbin/xntpd/patches/patch.4 b/usr.sbin/xntpd/patches/patch.4
deleted file mode 100644
index ef06ee9..0000000
--- a/usr.sbin/xntpd/patches/patch.4
+++ /dev/null
@@ -1,4719 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa12898; 26 Jan 94 21:06 EST
-Received: from sony.com by louie.udel.edu id aa05924; 26 Jan 94 21:01 EST
-Received: by sony.com id AA18168; Wed, 26 Jan 94 18:00:44 -0800
-X-Btw: sony.com is also sonygate.sony.com
-Received: by mail1.gw.in.sel.sony.com id AA25072; Wed, 26 Jan 94 18:00:43 -0800
-Received: by mail1.sjc.in.sel.sony.com id AA13634; Wed, 26 Jan 94 18:00:41 -0800
-Received: by morality.sjc.hw.sony.com; id AA23624; Wed, 26 Jan 94 18:00:40 -0800
-Date: Wed, 26 Jan 94 18:00:40 -0800
-From: Paul Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com>
-Message-Id: <9401270200.AA23624@morality.sjc.hw.sony.com>
-To: mills@udel.edu
-Subject: diffs against 3.3c (26-jan 11:36)
-Cc: paul@vix.com
-
-These have been tested on BSD/386 1.0 and on HP-UX 8.??. I have more to do,
-but this is the last I'm going to do before 3.3d (or whatever) comes out with
-the other patches you're expecting. I need to have a day with just me and NTP
-and everybody else with their mits outa the code while I finish the portability
-stuff.
-
-*** /tmp/RCSA023397 Wed Jan 26 17:56:22 1994
---- adjtime/adjtimed.c Wed Jan 26 16:33:27 1994
-***************
-*** 42,47 ****
-
- double atof();
-! extern int optind;
-! extern char *optarg;
-
- int InitClockRate();
---- 42,47 ----
-
- double atof();
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- int InitClockRate();
-***************
-*** 84,88 ****
- openlog("adjtimed", LOG_PID, LOG_LOCAL6);
-
-! while ((ch = getopt(argc, argv, "hkrvdfp:")) != EOF) {
- switch (ch) {
- case 'k':
---- 84,88 ----
- openlog("adjtimed", LOG_PID, LOG_LOCAL6);
-
-! while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
- switch (ch) {
- case 'k':
-***************
-*** 114,118 ****
-
- case 'p':
-! if ((RATE = atof(optarg)) <= 0.0 || RATE >= 100.0) {
- fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr);
- exit(1);
---- 114,118 ----
-
- case 'p':
-! if ((RATE = atof(ntp_optarg)) <= 0.0 || RATE >= 100.0) {
- fputs("adjtimed: percentage must be between 0.0 and 100.0\n", stderr);
- exit(1);
-*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
---- authstuff/authspeed.c Wed Jan 26 16:33:28 1994
-***************
-*** 66,75 ****
- int i;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
- loops = DEFLOOPS;
-! while ((c = getopt_l(argc, argv, "cdmn:")) != EOF)
- switch (c) {
- case 'c':
---- 66,75 ----
- int i;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
- loops = DEFLOOPS;
-! while ((c = ntp_getopt(argc, argv, "cdmn:")) != EOF)
- switch (c) {
- case 'c':
-***************
-*** 83,91 ****
- break;
- case 'n':
-! loops = atoi(optarg);
- if (loops <= 0) {
- (void) fprintf(stderr,
- "%s: %s is unlikely to be a useful number of loops\n",
-! progname, optarg);
- errflg++;
- }
---- 83,91 ----
- break;
- case 'n':
-! loops = atoi(ntp_optarg);
- if (loops <= 0) {
- (void) fprintf(stderr,
- "%s: %s is unlikely to be a useful number of loops\n",
-! progname, ntp_optarg);
- errflg++;
- }
-***************
-*** 95,99 ****
- break;
- }
-! if (errflg || optind == argc) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n",
---- 95,99 ----
- break;
- }
-! if (errflg || ntp_optind == argc) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-n loops] [ -c ] auth.samplekeys\n",
-***************
-*** 109,113 ****
-
- init_auth();
-! authreadkeys(argv[optind]);
- for (i = 0; i < 16; i++) {
- if (!auth_havekey(i + domd5)) {
---- 109,113 ----
-
- init_auth();
-! authreadkeys(argv[ntp_optind]);
- for (i = 0; i < 16; i++) {
- if (!auth_havekey(i + domd5)) {
-*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
---- authstuff/keyparity.c Wed Jan 26 16:33:28 1994
-***************
-*** 50,58 ****
- int keytype;
- U_LONG key[2];
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "adno:s")) != EOF)
- switch (c) {
- case 'a':
---- 50,58 ----
- int keytype;
- U_LONG key[2];
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "adno:s")) != EOF)
- switch (c) {
- case 'a':
-***************
-*** 69,76 ****
- break;
- case 'o':
-! if (*optarg == 'n') {
- ntpoutflag = 1;
- gotoopt = 1;
-! } else if (*optarg == 's') {
- ntpoutflag = 0;
- gotoopt = 1;
---- 69,76 ----
- break;
- case 'o':
-! if (*ntp_optarg == 'n') {
- ntpoutflag = 1;
- gotoopt = 1;
-! } else if (*ntp_optarg == 's') {
- ntpoutflag = 0;
- gotoopt = 1;
-***************
-*** 86,90 ****
- break;
- }
-! if (errflg || optind == argc) {
- (void) fprintf(stderr,
- "usage: %s -n|-s [-a] [-o n|s] key [...]\n",
---- 86,90 ----
- break;
- }
-! if (errflg || ntp_optind == argc) {
- (void) fprintf(stderr,
- "usage: %s -n|-s [-a] [-o n|s] key [...]\n",
-***************
-*** 119,127 ****
- keytype = KEY_TYPE_STD;
-
-! for (; optind < argc; optind++) {
-! if (!decodekey(keytype, argv[optind], key)) {
- (void) fprintf(stderr,
- "%s: format of key %s invalid\n",
-! progname, argv[optind]);
- exit(1);
- }
---- 119,127 ----
- keytype = KEY_TYPE_STD;
-
-! for (; ntp_optind < argc; ntp_optind++) {
-! if (!decodekey(keytype, argv[ntp_optind], key)) {
- (void) fprintf(stderr,
- "%s: format of key %s invalid\n",
-! progname, argv[ntp_optind]);
- exit(1);
- }
-***************
-*** 243,247 ****
- * Make up key from ascii representation
- */
-! bzero(keybytes, sizeof(keybytes));
- for (i = 0; i < 8 && i < len; i++)
- keybytes[i] = *cp++ << 1;
---- 243,247 ----
- * Make up key from ascii representation
- */
-! memset(keybytes, 0, sizeof(keybytes));
- for (i = 0; i < 8 && i < len; i++)
- keybytes[i] = *cp++ << 1;
-*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
---- authstuff/makeIPFP.c Wed Jan 26 16:33:28 1994
-***************
-*** 29,37 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
---- 29,37 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 184,188 ****
- int octbits;
-
-! bzero((char *)bits, sizeof bits);
-
- /*
---- 184,188 ----
- int octbits;
-
-! memset((char *)bits, 0, sizeof bits);
-
- /*
-*** /tmp/RCSA023401 Wed Jan 26 17:56:23 1994
---- authstuff/makePC1.c Wed Jan 26 16:33:28 1994
-***************
-*** 26,34 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
---- 26,34 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 83,88 ****
- u_char d[28];
-
-! bzero((char *)c, sizeof c);
-! bzero((char *)d, sizeof d);
-
- for (i = 0; i < 28; i++) {
---- 83,88 ----
- u_char d[28];
-
-! memset((char *)c, 0, sizeof c);
-! memset((char *)d, 0, sizeof d);
-
- for (i = 0; i < 28; i++) {
-***************
-*** 141,145 ****
- u_char bits[64];
-
-! bzero((char *)bits, sizeof bits);
-
- printf("static U_LONG PC1_CL[8] = {");
---- 141,145 ----
- u_char bits[64];
-
-! memset((char *)bits, 0, sizeof bits);
-
- printf("static U_LONG PC1_CL[8] = {");
-*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
---- authstuff/makePC2.c Wed Jan 26 16:33:28 1994
-***************
-*** 27,35 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
---- 27,35 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 88,92 ****
- u_char res[24];
-
-! bzero((char *)res, sizeof res);
-
- for (i = 0; i < 24; i++) {
---- 88,92 ----
- u_char res[24];
-
-! memset((char *)res, 0, sizeof res);
-
- for (i = 0; i < 24; i++) {
-***************
-*** 118,122 ****
- u_char res[24];
-
-! bzero((char *)res, sizeof res);
-
- for (i = 0; i < 24; i++) {
---- 118,122 ----
- u_char res[24];
-
-! memset((char *)res, 0, sizeof res);
-
- for (i = 0; i < 24; i++) {
-***************
-*** 169,173 ****
- u_char bits[28];
-
-! bzero((char *)bits, sizeof bits);
-
- printf("static U_LONG PC2_C[4][64] = {");
---- 169,173 ----
- u_char bits[28];
-
-! memset((char *)bits, 0, sizeof bits);
-
- printf("static U_LONG PC2_C[4][64] = {");
-*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
---- authstuff/makeSP.c Wed Jan 26 16:33:28 1994
-***************
-*** 26,34 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
---- 26,34 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 166,170 ****
- int sixbits;
-
-! bzero((char *)bits, sizeof bits);
- printf("static U_LONG SP[8][64] = {");
- for (selno = 0; selno < 8; selno++) {
---- 166,170 ----
- int sixbits;
-
-! memset((char *)bits, 0, sizeof bits);
- printf("static U_LONG SP[8][64] = {");
- for (selno = 0; selno < 8; selno++) {
-*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
---- authstuff/mkrandkeys.c Wed Jan 26 16:33:28 1994
-***************
-*** 35,40 ****
- U_LONG tmp;
- char *passwd;
-! extern int optind;
-! extern char *optarg;
- extern char *getpass();
-
---- 35,40 ----
- U_LONG tmp;
- char *passwd;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- extern char *getpass();
-
-***************
-*** 42,46 ****
- progname = argv[0];
- passwd = NULL;
-! while ((c = getopt_l(argc, argv, "dnp:s")) != EOF)
- switch (c) {
- case 'd':
---- 42,46 ----
- progname = argv[0];
- passwd = NULL;
-! while ((c = ntp_getopt(argc, argv, "dnp:s")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 51,55 ****
- break;
- case 'p':
-! passwd = optarg;
- break;
- case 's':
---- 51,55 ----
- break;
- case 'p':
-! passwd = ntp_optarg;
- break;
- case 's':
-***************
-*** 62,70 ****
-
- numkeys = 0;
-! for (; !errflg && optind < argc; optind++) {
-! c = atoi(argv[optind]);
- if (c <= 0 || c > 15) {
- (void) fprintf(stderr, "%s: invalid key number `%s'\n",
-! progname, argv[optind]);
- exit(2);
- }
---- 62,70 ----
-
- numkeys = 0;
-! for (; !errflg && ntp_optind < argc; ntp_optind++) {
-! c = atoi(argv[ntp_optind]);
- if (c <= 0 || c > 15) {
- (void) fprintf(stderr, "%s: invalid key number `%s'\n",
-! progname, argv[ntp_optind]);
- exit(2);
- }
-*** /tmp/RCSA023401 Wed Jan 26 17:56:24 1994
---- authstuff/omakeIPFP.c Wed Jan 26 16:33:29 1994
-***************
-*** 35,43 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
---- 35,43 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "d")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 189,193 ****
- int quadbits;
-
-! bzero((char *)bits, sizeof bits);
-
- /*
---- 189,193 ----
- int quadbits;
-
-! memset((char *)bits, 0, sizeof bits);
-
- /*
-*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
---- clockstuff/chutest.c Wed Jan 26 16:33:29 1994
-***************
-*** 69,78 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
- void init_chu();
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "cdfpt")) != EOF)
- switch (c) {
- case 'c':
---- 69,78 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- void init_chu();
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "cdfpt")) != EOF)
- switch (c) {
- case 'c':
-***************
-*** 108,112 ****
- break;
- }
-! if (errflg || optind+1 != argc) {
- #ifdef STREAM
- (void) fprintf(stderr, "usage: %s [-dft] tty_device\n",
---- 108,112 ----
- break;
- }
-! if (errflg || ntp_optind+1 != argc) {
- #ifdef STREAM
- (void) fprintf(stderr, "usage: %s [-dft] tty_device\n",
-***************
-*** 127,131 ****
-
- (void) gettimeofday(&lasttv, (struct timezone *)0);
-! c = openterm(argv[optind]);
- init_chu();
- #ifdef STREAM
---- 127,131 ----
-
- (void) gettimeofday(&lasttv, (struct timezone *)0);
-! c = openterm(argv[ntp_optind]);
- init_chu();
- #ifdef STREAM
-*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
---- clockstuff/clktest.c Wed Jan 26 16:33:29 1994
-***************
-*** 106,111 ****
- struct sgttyb ttyb;
- struct itimerval itimer;
-! extern int optind;
-! extern char *optarg;
- int alarming();
- int ioready();
---- 106,111 ----
- struct sgttyb ttyb;
- struct itimerval itimer;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- int alarming();
- int ioready();
-***************
-*** 115,119 ****
- magic[0] = 0;
- #endif
-! while ((c = getopt_l(argc, argv, "a:b:c:dfs:t:")) != EOF)
- switch (c) {
- #ifdef CLKLDISC
---- 115,119 ----
- magic[0] = 0;
- #endif
-! while ((c = ntp_getopt(argc, argv, "a:b:c:dfs:t:")) != EOF)
- switch (c) {
- #ifdef CLKLDISC
-***************
-*** 121,125 ****
- #endif
- case 'c':
-! if (!atouint(optarg, &tmp)) {
- (void) fprintf(stderr,
- "%s: argument for -%c must be integer\n",
---- 121,125 ----
- #endif
- case 'c':
-! if (!atouint(ntp_optarg, &tmp)) {
- (void) fprintf(stderr,
- "%s: argument for -%c must be integer\n",
-***************
-*** 140,144 ****
- break;
- case 'b':
-! if (!atouint(optarg, &tmp)) {
- errflg++;
- break;
---- 140,144 ----
- break;
- case 'b':
-! if (!atouint(ntp_optarg, &tmp)) {
- errflg++;
- break;
-***************
-*** 164,175 ****
- break;
- case 's':
-! cmdlen = strlen(optarg);
- if (cmdlen == 0)
- errflg++;
- else
-! cmd = optarg;
- break;
- case 't':
-! if (!atouint(optarg, &tmp))
- errflg++;
- else {
---- 164,175 ----
- break;
- case 's':
-! cmdlen = strlen(ntp_optarg);
- if (cmdlen == 0)
- errflg++;
- else
-! cmd = ntp_optarg;
- break;
- case 't':
-! if (!atouint(ntp_optarg, &tmp))
- errflg++;
- else {
-***************
-*** 182,186 ****
- break;
- }
-! if (errflg || optind+1 != argc) {
- (void) fprintf(stderr,
- #ifdef CLKLDISC
---- 182,186 ----
- break;
- }
-! if (errflg || ntp_optind+1 != argc) {
- (void) fprintf(stderr,
- #ifdef CLKLDISC
-***************
-*** 200,209 ****
-
- if (docmd)
-! fd = open(argv[optind], O_RDWR, 0777);
- else
-! fd = open(argv[optind], O_RDONLY, 0777);
- if (fd == -1) {
- (void) fprintf(stderr, "%s: open(%s): ", progname,
-! argv[optind]);
- perror("");
- exit(1);
---- 200,209 ----
-
- if (docmd)
-! fd = open(argv[ntp_optind], O_RDWR, 0777);
- else
-! fd = open(argv[ntp_optind], O_RDONLY, 0777);
- if (fd == -1) {
- (void) fprintf(stderr, "%s: open(%s): ", progname,
-! argv[ntp_optind]);
- perror("");
- exit(1);
-*** /tmp/RCSA023419 Wed Jan 26 17:56:25 1994
---- clockstuff/propdelay.c Wed Jan 26 16:33:29 1994
-***************
-*** 141,149 ****
- double lat2, long2;
- double lat3, long3;
-! extern int optind;
-! extern char *optarg;
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "dh:CWG")) != EOF)
- switch (c) {
- case 'd':
---- 141,149 ----
- double lat2, long2;
- double lat3, long3;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "dh:CWG")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 152,159 ****
- case 'h':
- hflag++;
-! height = atof(optarg);
- if (height <= 0.0) {
- (void) fprintf(stderr, "height %s unlikely\n",
-! optarg);
- errflg++;
- }
---- 152,159 ----
- case 'h':
- hflag++;
-! height = atof(ntp_optarg);
- if (height <= 0.0) {
- (void) fprintf(stderr, "height %s unlikely\n",
-! ntp_optarg);
- errflg++;
- }
-***************
-*** 172,177 ****
- break;
- }
-! if (errflg || (!(Cflag || Wflag || Gflag) && optind+4 != argc) ||
-! ((Cflag || Wflag || Gflag) && optind+2 != argc)) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n",
---- 172,177 ----
- break;
- }
-! if (errflg || (!(Cflag || Wflag || Gflag) && ntp_optind+4 != argc) ||
-! ((Cflag || Wflag || Gflag) && ntp_optind+2 != argc)) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-h height] lat1 long1 lat2 long2\n",
-***************
-*** 186,193 ****
-
- if (!(Cflag || Wflag || Gflag)) {
-! lat1 = latlong(argv[optind], 1);
-! long1 = latlong(argv[optind + 1], 0);
-! lat2 = latlong(argv[optind + 2], 1);
-! long2 = latlong(argv[optind + 3], 0);
- if (hflag) {
- doit(lat1, long1, lat2, long2, height, "");
---- 186,193 ----
-
- if (!(Cflag || Wflag || Gflag)) {
-! lat1 = latlong(argv[ntp_optind], 1);
-! long1 = latlong(argv[ntp_optind + 1], 0);
-! lat2 = latlong(argv[ntp_optind + 2], 1);
-! long2 = latlong(argv[ntp_optind + 3], 0);
- if (hflag) {
- doit(lat1, long1, lat2, long2, height, "");
-***************
-*** 202,207 ****
- * Compute delay from WWV
- */
-! lat1 = latlong(argv[optind], 1);
-! long1 = latlong(argv[optind + 1], 0);
- lat2 = latlong(wwvlat, 1);
- long2 = latlong(wwvlong, 0);
---- 202,207 ----
- * Compute delay from WWV
- */
-! lat1 = latlong(argv[ntp_optind], 1);
-! long1 = latlong(argv[ntp_optind + 1], 0);
- lat2 = latlong(wwvlat, 1);
- long2 = latlong(wwvlong, 0);
-***************
-*** 229,234 ****
- }
- } else if (Cflag) {
-! lat1 = latlong(argv[optind], 1);
-! long1 = latlong(argv[optind + 1], 0);
- lat2 = latlong(chulat, 1);
- long2 = latlong(chulong, 0);
---- 229,234 ----
- }
- } else if (Cflag) {
-! lat1 = latlong(argv[ntp_optind], 1);
-! long1 = latlong(argv[ntp_optind + 1], 0);
- lat2 = latlong(chulat, 1);
- long2 = latlong(chulong, 0);
-***************
-*** 244,249 ****
- lat1 = latlong(goes_up_lat, 1);
- long1 = latlong(goes_up_long, 0);
-! lat3 = latlong(argv[optind], 1);
-! long3 = latlong(argv[optind + 1], 0);
-
- lat2 = latlong(goes_sat_lat, 1);
---- 244,249 ----
- lat1 = latlong(goes_up_lat, 1);
- long1 = latlong(goes_up_long, 0);
-! lat3 = latlong(argv[ntp_optind], 1);
-! long3 = latlong(argv[ntp_optind + 1], 0);
-
- lat2 = latlong(goes_sat_lat, 1);
-*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
---- conf/Config.CHATHAM Wed Jan 26 16:33:29 1994
-***************
-*** 90,96 ****
- # CLOCKDEFS= line below. This flag affects xntpd only.
- #
-- # There is an occurance of a call to rindex() in the daemon. You may
-- # have to include a -Drindex=strrchr to get this to load right.
-- #
- # To change the location of the configuration file, use a
- # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
---- 90,93 ----
-***************
-*** 110,114 ****
- # generated by the pps signal. Only one of these flags should be defined.
- #
-! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
-
- #
---- 107,111 ----
- # generated by the pps signal. Only one of these flags should be defined.
- #
-! DEFS= -DUSELIBKVM -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DPPS -DPPSDEV -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
-
- #
-*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
---- conf/Config.MONOMOY Wed Jan 26 16:33:29 1994
-***************
-*** 85,91 ****
- # CLOCKDEFS= line below. This flag affects xntpd only.
- #
-- # There is an occurance of a call to rindex() in the daemon. You may
-- # have to include a -Drindex=strrchr to get this to load right.
-- #
- # To change the location of the configuration file, use a
- # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
---- 85,88 ----
-***************
-*** 105,109 ****
- # be used)
- #
-! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DHAVE_UNISTD_H
-
- #
---- 102,106 ----
- # be used)
- #
-! DEFS= -DBSDI -DUSELIBKVM -DDEBUG -DREFCLOCK -DPPS -DCONFIG_FILE=\\"/usr/local/etc/xntp.conf\\" -DNTP_POSIX_SOURCE
-
- #
-*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
---- conf/Config.TIGER Wed Jan 26 16:33:30 1994
-***************
-*** 81,87 ****
- # CLOCKDEFS= line below. This flag affects xntpd only.
- #
-- # There is an occurance of a call to rindex() in the daemon. You may
-- # have to include a -Drindex=strrchr to get this to load right.
-- #
- # To change the location of the configuration file, use a
- # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
---- 81,84 ----
-***************
-*** 101,105 ****
- # be used)
- #
-! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
-
- #
---- 98,102 ----
- # be used)
- #
-! DEFS= -DREFCLOCK -DS_CHAR_DEFINED -DREADKMEM -DDEBUG -DPLL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
-
- #
-*** /tmp/RCSA023428 Wed Jan 26 17:56:27 1994
---- conf/Config.TRURO Wed Jan 26 16:33:30 1994
-***************
-*** 87,93 ****
- # CLOCKDEFS= line below. This flag affects xntpd only.
- #
-- # There is an occurance of a call to rindex() in the daemon. You may
-- # have to include a -Drindex=strrchr to get this to load right.
-- #
- # To change the location of the configuration file, use a
- # -DCONFIG_FILE=\\"/local/etc/ntp.conf\\" or something similar.
---- 87,90 ----
-***************
-*** 110,114 ****
- # generated by the pps signal. Only one of these flags should be defined.
- #
-! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DHAVE_UNISTD_H
-
- #
---- 107,111 ----
- # generated by the pps signal. Only one of these flags should be defined.
- #
-! DEFS= -DDEBUG -DSTREAM -DREFCLOCK -DNO_SIGNED_CHAR_DECL -DSLEWALWAYS -DSOLARIS -DPPS -DSTUPID_SIGNAL -DXNTP_RETROFIT_STDLIB -DNTP_POSIX_SOURCE
-
- #
-*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
---- include/l_stdlib.h Wed Jan 26 16:33:30 1994
-***************
-*** 39,43 ****
- #if !defined(NTP_POSIX_SOURCE)
- extern int atoi P((char *));
-- extern void bcopy P((char *, char *, int));
- extern int dup2 P((int, int));
- extern int execve P((char *, char **,char **));
---- 39,42 ----
-***************
-*** 51,58 ****
- #endif
-
-- #ifndef bzero /* XXX macro prototyping clash */
-- extern void bzero P((char *, int));
-- extern int bcmp P((char *, char *, int));
-- #endif
- extern char *mktemp P((char *));
-
---- 50,53 ----
-***************
-*** 193,200 ****
- #ifndef NTP_POSIX_SOURCE
- extern int atoi P((char *));
-- extern void bcopy P((char *, char *, int));
-- extern void bzero P((char *, int));
-- extern int bcmp P((char *, char *, int));
-- extern void bcopy P((char *, char *, int));
- extern int execve P((char *, char **,char **));
- extern int fork P((void));
---- 188,191 ----
-*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
---- include/ntp.h Wed Jan 26 16:33:30 1994
-***************
-*** 329,333 ****
-
- /*
-! * Definitions for the clear() routine. We use bzero() to clear
- * the parts of the peer structure which go to zero. These are
- * used to calculate the start address and length of the area.
---- 329,333 ----
-
- /*
-! * Definitions for the clear() routine. We use memset() to clear
- * the parts of the peer structure which go to zero. These are
- * used to calculate the start address and length of the area.
-*** /tmp/RCSA023441 Wed Jan 26 17:56:29 1994
---- include/ntp_machine.h Wed Jan 26 16:33:31 1994
-***************
-*** 1,3 ****
-! /* ntp_compat.h,v 3.1 1993/07/06 01:06:49 jbj Exp
- * Collect all machine dependent idiosyncrasies in one place.
- */
---- 1,3 ----
-! /* ntp_machine.h,v 3.1 1993/07/06 01:06:49 jbj Exp
- * Collect all machine dependent idiosyncrasies in one place.
- */
-***************
-*** 53,61 ****
-
- THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
-! kernal mucking.
-
- NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions.
- This is NOT the same as _POSIX_SOURCE.
-! It is much weeker!
-
-
---- 53,61 ----
-
- THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
-! kernel mucking.
-
- NTP_POSIX_SOURCE - Use POSIX functions over bsd functions and att functions.
- This is NOT the same as _POSIX_SOURCE.
-! It is much weaker!
-
-
-***************
-*** 95,99 ****
- UNIX V.4 machines implement a sockets library on top of streams.
- When requesting the IP interface configuration with an ioctl(2) calll,
-! an arrat of ifreq structures are placed in the provided buffer. Some
- implementations also place the length of the buffer information in
- the first integer position of the buffer.
---- 95,99 ----
- UNIX V.4 machines implement a sockets library on top of streams.
- When requesting the IP interface configuration with an ioctl(2) calll,
-! an array of ifreq structures are placed in the provided buffer. Some
- implementations also place the length of the buffer information in
- the first integer position of the buffer.
-***************
-*** 115,121 ****
- RETSIGTYPE - Define signal function type.
- NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
-! LOCK_PROCESS - Have plock.
- UDP_WILDCARD_DELIVERY
-! - these systems deliver broadcast pakets to the wildcard
- port instead to a port bound to the interface bound
- to the correct broadcast address - are these
---- 115,121 ----
- RETSIGTYPE - Define signal function type.
- NO_SIGNED_CHAR_DECL - No "signed char" see include/ntp.h
-! LOCK_PROCESS - Have plock.
- UDP_WILDCARD_DELIVERY
-! - these systems deliver broadcast packets to the wildcard
- port instead to a port bound to the interface bound
- to the correct broadcast address - are these
-***************
-*** 122,133 ****
- implementations broken or did the spec change ?
-
-- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
--
- You could just put the defines on the DEFS line in machines/<os> file.
-! I don't since there are lost of different types compiler that a systemm might
-! have, some that can do proto typing and others that cannot on the saem system.
-! I get a chanse to twiddle some of the configuration paramasters at compile
-! time based on compler/machine combinatsions by using this include file.
-! See convex, aix and sun configurations see how complex it get.
-
- */
---- 122,135 ----
- implementations broken or did the spec change ?
-
- You could just put the defines on the DEFS line in machines/<os> file.
-! I don't since there are lots of different types of compiler that a system might
-! have, some that can do prototyping and others that cannot on the saem system.
-! I get a chance to twiddle some of the configuration paramasters at compile
-! time based on compler/machine combinations by using this include file.
-! See convex, aix and sun configurations see how complex it gets.
-!
-! Note that it _is_ considered reasonable to add some system-specific defines
-! to the machine/<os> file if it would be too inconvenient to puzzle them out
-! in this file.
-
- */
-***************
-*** 145,152 ****
- * Keep USE_PROTOTYPES and _NO_PROTO in step.
- */
-! #if defined(_NO_PROTO)&&defined(USE_PROTOTYPES)
- #undef USE_PROTOTYPES
- #endif
-! #if !defined(_NO_PROTO)&&!defined(USE_PROTOTYPES)
- #define USE_PROTOTYPES
- #endif
---- 147,154 ----
- * Keep USE_PROTOTYPES and _NO_PROTO in step.
- */
-! #if defined(_NO_PROTO) && defined(USE_PROTOTYPES)
- #undef USE_PROTOTYPES
- #endif
-! #if !defined(_NO_PROTO) && !defined(USE_PROTOTYPES)
- #define USE_PROTOTYPES
- #endif
-***************
-*** 204,208 ****
- * Convex
- */
-! #if defined(SYS_CONVEXOS10)||defined(SYS_CONVEXOS9)
- #define HAVE_SIGNALED_IO
- #define HAVE_N_UN
---- 206,210 ----
- * Convex
- */
-! #if defined(SYS_CONVEXOS10) || defined(SYS_CONVEXOS9)
- #define HAVE_SIGNALED_IO
- #define HAVE_N_UN
-***************
-*** 213,221 ****
- #define NO_SIGNED_CHAR_DECL
- #else
-! #if defined(__stdc__)&&!defined(USE_PROTOTYPES)
- #define USE_PROTOTYPES
- #endif
-! #if !defined(__stdc__)&&defined(USE_PROTOTYPES)
-! #undef USE_PROTOTYPES
- #endif
- #define NTP_POSIX_SOURCE
---- 215,223 ----
- #define NO_SIGNED_CHAR_DECL
- #else
-! #if defined(__stdc__) && !defined(USE_PROTOTYPES)
- #define USE_PROTOTYPES
- #endif
-! #if !defined(__stdc__) && defined(USE_PROTOTYPES)
-! #undef USE_PROTOTYPES
- #endif
- #define NTP_POSIX_SOURCE
-***************
-*** 253,257 ****
- * AUX
- */
-! #if defined(SYS_AUX2)||defined(SYS_AUX3)
- #define NO_SIGNED_CHAR_DECL
- #define HAVE_READKMEM
---- 255,259 ----
- * AUX
- */
-! #if defined(SYS_AUX2) || defined(SYS_AUX3)
- #define NO_SIGNED_CHAR_DECL
- #define HAVE_READKMEM
-***************
-*** 292,296 ****
- #define NTP_POSIX_SOURCE
- #define HAVE_SIGNALED_IO
-- #define HAVE_UNISTD_H
- #define NO_SIGNED_CHAR_DECL
- #define LOCK_PROCESS
---- 294,297 ----
-***************
-*** 302,305 ****
---- 303,308 ----
- #define HAVE_READKMEM
- #endif
-+ #define getdtablesize() sysconf(_SC_OPEN_MAX)
-+ #define setlinebuf(f) setvbuf(f, NULL, _IOLBF, 0)
- #endif
-
-***************
-*** 313,316 ****
---- 316,320 ----
- #define HAVE_BSD_NICE
- #define HAVE_BSD_TTYS
-+ #define HAVE_TERMIOS
- #endif
-
-***************
-*** 342,346 ****
-
- /*
-! * DECOSF1
- */
- #if defined(SYS_DECOSF1)
---- 346,350 ----
-
- /*
-! * DEC AXP OSF/1
- */
- #if defined(SYS_DECOSF1)
-***************
-*** 354,357 ****
---- 358,362 ----
- /*
- * I386
-+ * XXX - what OS?
- */
- #if defined(SYS_I386)
-***************
-*** 412,416 ****
-
- /*
-! * Sony
- */
- #if defined(SYS_SONY)
---- 417,421 ----
-
- /*
-! * Sony NEWS
- */
- #if defined(SYS_SONY)
-***************
-*** 422,425 ****
---- 427,431 ----
- /*
- * VAX
-+ * XXX - VMS?
- */
- #if defined(SYS_VAX)
-***************
-*** 435,439 ****
- #define HAVE_ATT_SETPGRP
- #define USE_PROTOTYPES
-- #define HAVE_UNISTD_H
- #define NTP_POSIX_SOURCE
- #define HAVE_ATT_NICE
---- 441,444 ----
-***************
-*** 484,490 ****
- #endif /* NTP_SYSCALLS_STD */
-
-! #if !defined(HAVE_ATT_NICE) && !defined(HAVE_BSD_NICE) && !defined(HAVE_NO_NICE)
- ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
- #endif
-
- #endif /* __ntp_machine */
---- 489,545 ----
- #endif /* NTP_SYSCALLS_STD */
-
-! #if !defined(HAVE_ATT_NICE) \
-! && !defined(HAVE_BSD_NICE) \
-! && !defined(HAVE_NO_NICE)
- ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
- #endif
-+
-+
-+ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
-+
-+ # if defined(XNTP_AUTO_ENDIAN)
-+ # include <netinet/in.h>
-+
-+ # if BYTE_ORDER == BIG_ENDIAN
-+ # define XNTP_BIG_ENDIAN
-+ # endif
-+ # if BYTE_ORDER == LITTLE_ENDIAN
-+ # define XNTP_LITTLE_ENDIAN
-+ # endif
-+
-+ # else /* AUTO */
-+
-+ # ifdef WORDS_BIGENDIAN
-+ # define XNTP_BIG_ENDIAN 1
-+ # else
-+ # define XNTP_LITTLE_ENDIAN 1
-+ # endif
-+
-+ # endif /* AUTO */
-+
-+ #endif /* !BIG && !LITTLE */
-+
-+ /*
-+ * Byte order woes. The DES code is sensitive to byte order. This
-+ * used to be resolved by calling ntohl() and htonl() to swap things
-+ * around, but this turned out to be quite costly on Vaxes where those
-+ * things are actual functions. The code now straightens out byte
-+ * order troubles on its own, with no performance penalty for little
-+ * end first machines, but at great expense to cleanliness.
-+ */
-+ #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
-+ /*
-+ * Pick one or the other.
-+ */
-+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
-+ #endif
-+
-+ #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
-+ /*
-+ * Pick one or the other.
-+ */
-+ BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
-+ #endif
-+
-
- #endif /* __ntp_machine */
-*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
---- include/ntp_select.h Wed Jan 26 16:33:31 1994
-***************
-*** 15,19 ****
- #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
- #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-! #define FD_ZERO(p) bzero((char *)(p), sizeof(*(p)))
- #endif
-
---- 15,19 ----
- #define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1 << ((n) % NFDBITS)))
- #define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1 << ((n) % NFDBITS)))
-! #define FD_ZERO(p) memset((char *)(p), 0, sizeof(*(p)))
- #endif
-
-*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
---- include/ntp_stdlib.h Wed Jan 26 16:33:31 1994
-***************
-*** 48,52 ****
- extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *));
- extern char * emalloc P((u_int));
-! extern int getopt_l P((int, char **, char *));
- extern void init_auth P((void));
- extern void init_lib P((void));
---- 48,52 ----
- extern int clocktime P((int, int, int, int, int, U_LONG, U_LONG *, U_LONG *));
- extern char * emalloc P((u_int));
-! extern int ntp_getopt P((int, char **, char *));
- extern void init_auth P((void));
- extern void init_lib P((void));
-*** /tmp/RCSA023441 Wed Jan 26 17:56:30 1994
---- include/ntp_string.h Wed Jan 26 16:33:31 1994
-***************
-*** 1,4 ****
- /*
-! * Define bcopy, bzero, and bcmp and string op's
- */
-
---- 1,4 ----
- /*
-! * Define string ops: strchr strrchr memcmp memmove memset
- */
-
-***************
-*** 8,27 ****
- #ifdef NTP_POSIX_SOURCE
-
-! #if defined(HAVE_MEMORY_H)
-! #include <memory.h>
-! #endif
-!
-! #include <string.h>
-!
-! #define bcopy(s1,s2,n) memcpy(s2, s1, n)
-! #define bzero(s,n) memset(s, 0, n)
-! #define bcmp(s1,s2,n) memcmp(s1, s2, n)
-
- #else /* NTP_POSIX_SOURCE */
-
-! #include <strings.h>
-
-! #define strrchr rindex
-! #define strchr index
-
- #endif /* NTP_POSIX_SOURCE */
---- 8,27 ----
- #ifdef NTP_POSIX_SOURCE
-
-! # if defined(HAVE_MEMORY_H)
-! # include <memory.h>
-! # endif
-
-+ # include <string.h>
-+
- #else /* NTP_POSIX_SOURCE */
-
-! # include <strings.h>
-
-! # define strchr(s,c) index(s,c)
-! # define strrchr(s,c) rindex(s,c)
-! # define memcmp(a,b,c) bcmp(a,b,c)
-! # define memmove(t,f,c) bcopy(f,t,c)
-! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c)
-! void ntp_memset P((char *, int, int));
-
- #endif /* NTP_POSIX_SOURCE */
-*** /tmp/RCSA023456 Wed Jan 26 17:56:31 1994
---- kernel/tty_clk_STREAMS.c Wed Jan 26 16:33:31 1994
-***************
-*** 63,67 ****
-
- /*
-! * God only knows why, but linking with strchr() and index() fail
- * on my system, so here's a renamed copy.
- */
---- 63,67 ----
-
- /*
-! * God only knows why, but linking with strchr() fails
- * on my system, so here's a renamed copy.
- */
-*** /tmp/RCSA023460 Wed Jan 26 17:56:32 1994
---- lib/a_md512crypt.c Wed Jan 26 16:33:31 1994
-***************
-*** 81,86 ****
- MD5Final(&ctx);
-
-! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)],
-! BLOCK_OCTETS);
-! return 4 + BLOCK_OCTETS;
- }
---- 81,87 ----
- MD5Final(&ctx);
-
-! memmove((char *) &pkt[NOCRYPT_LONGS + length/sizeof(U_LONG)],
-! (char *) ctx.digest,
-! BLOCK_OCTETS);
-! return (4 + BLOCK_OCTETS);
- }
-*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
---- lib/a_md5decrypt.c Wed Jan 26 16:33:32 1994
-***************
-*** 55,58 ****
- MD5Final(&ctx);
-
-! return (0 == bcmp((char *)ctx.digest, (char *)pkt + length + 4, BLOCK_OCTETS));
- }
---- 55,60 ----
- MD5Final(&ctx);
-
-! return (!memcmp((char *)ctx.digest,
-! (char *)pkt + length + 4,
-! BLOCK_OCTETS));
- }
-*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
---- lib/a_md5encrypt.c Wed Jan 26 16:33:32 1994
-***************
-*** 64,68 ****
- MD5Final(&ctx);
-
-! bcopy((char *)ctx.digest, (char *) &pkt[NOCRYPT_LONGS + len], BLOCK_OCTETS);
-! return 4 + BLOCK_OCTETS; /* return size of key and MAC */
- }
---- 64,70 ----
- MD5Final(&ctx);
-
-! memmove((char *)&pkt[NOCRYPT_LONGS + len],
-! (char *)ctx.digest,
-! BLOCK_OCTETS);
-! return (4 + BLOCK_OCTETS); /* return size of key and MAC */
- }
-*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
---- lib/authdes.c Wed Jan 26 16:33:32 1994
-***************
-*** 4,31 ****
- #include "ntp_stdlib.h"
-
-- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
--
-- #if defined(XNTP_AUTO_ENDIAN)
-- #include <netinet/in.h>
--
-- #if BYTE_ORDER == BIG_ENDIAN
-- #define XNTP_BIG_ENDIAN
-- #endif
-- #if BYTE_ORDER == LITTLE_ENDIAN
-- #define XNTP_LITTLE_ENDIAN
-- #endif
--
-- #else /* AUTO */
--
-- #ifdef WORDS_BIGENDIAN
-- #define XNTP_BIG_ENDIAN 1
-- #else
-- #define XNTP_LITTLE_ENDIAN 1
-- #endif
--
-- #endif /* AUTO */
--
-- #endif /* !BIG && !LITTLE */
--
- /*
- * There are two entries in here. auth_subkeys() called to
---- 4,7 ----
-***************
-*** 33,58 ****
- * auth_des() is called to do the actual encryption/decryption
- */
--
-- /*
-- * Byte order woes. The DES code is sensitive to byte order. This
-- * used to be resolved by calling ntohl() and htonl() to swap things
-- * around, but this turned out to be quite costly on Vaxes where those
-- * things are actual functions. The code now straightens out byte
-- * order troubles on its own, with no performance penalty for little
-- * end first machines, but at great expense to cleanliness.
-- */
-- #if !defined(XNTP_BIG_ENDIAN) && !defined(XNTP_LITTLE_ENDIAN)
-- /*
-- * Pick one or the other.
-- */
-- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
-- #endif
--
-- #if defined(XNTP_BIG_ENDIAN) && defined(XNTP_LITTLE_ENDIAN)
-- /*
-- * Pick one or the other.
-- */
-- BYTE_ORDER_NOT_DEFINED_FOR_AUTHENTICATION
-- #endif
-
- /*
---- 9,12 ----
-*** /tmp/RCSA023460 Wed Jan 26 17:56:33 1994
---- lib/authkeys.c Wed Jan 26 16:33:32 1994
-***************
-*** 110,114 ****
- * Initialize hash table and free list
- */
-! bzero((char *)key_hash, sizeof key_hash);
- cache_flags = cache_keyid = 0;
-
---- 110,114 ----
- * Initialize hash table and free list
- */
-! memset((char *)key_hash, 0, sizeof key_hash);
- cache_flags = cache_keyid = 0;
-
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/authusekey.c Wed Jan 26 16:33:32 1994
-***************
-*** 97,101 ****
- * Make up key from ascii representation
- */
-! bzero((char *) keybytes, sizeof(keybytes));
- for (i = 0; i < 8 && i < len; i++)
- keybytes[i] = *cp++ << 1;
---- 97,101 ----
- * Make up key from ascii representation
- */
-! memset((char *) keybytes, 0, sizeof(keybytes));
- for (i = 0; i < 8 && i < len; i++)
- keybytes[i] = *cp++ << 1;
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/dofptoa.c Wed Jan 26 16:33:33 1994
-***************
-*** 32,36 ****
- * Zero out the buffer
- */
-! bzero((char *)cbuf, sizeof cbuf);
-
- /*
---- 32,36 ----
- * Zero out the buffer
- */
-! memset((char *)cbuf, 0, sizeof cbuf);
-
- /*
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/dolfptoa.c Wed Jan 26 16:33:33 1994
-***************
-*** 33,37 ****
- * Zero the character buffer
- */
-! bzero((char *) cbuf, sizeof(cbuf));
-
- /*
---- 33,37 ----
- * Zero the character buffer
- */
-! memset((char *) cbuf, 0, sizeof(cbuf));
-
- /*
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/getopt.c Wed Jan 26 16:33:33 1994
-***************
-*** 5,9 ****
- * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V).
- * It allows rescanning of an option list by setting optind to 0 before
-! * calling. Thanks to Dennis Ferguson for the appropriate modifications.
- *
- * This file is in the Public Domain.
---- 5,11 ----
- * Henry Spencer, changed for 4.3BSD compatibility (in addition to System V).
- * It allows rescanning of an option list by setting optind to 0 before
-! * calling, which is why we use it even if the system has its own (in fact,
-! * this one has a unique name so as not to conflict with the system's).
-! * Thanks to Dennis Ferguson for the appropriate modifications.
- *
- * This file is in the Public Domain.
-***************
-*** 21,57 ****
- #endif /* lint */
-
-! char *optarg; /* Global argument pointer. */
-! #ifndef __convex__
-! int optind = 0; /* Global argv index. */
-! #else /* __convex__ */
-! extern int optind; /* Global argv index. */
-! #endif /* __convex__ */
-
-- /*
-- * N.B. use following at own risk
-- */
-- #ifndef __convex__
-- int opterr = 1; /* for compatibility, should error be printed? */
-- #else /* __convex__ */
-- extern int opterr; /* for compatibility, should error be printed? */
-- #endif /* __convex__ */
-- int optopt; /* for compatibility, option character checked */
--
- static char *scan = NULL; /* Private scan pointer. */
-
- /*
-! * Print message about a bad option. Watch this definition, it's
-! * not a single statement.
- */
-! #define BADOPT(mess, ch) if (opterr) { \
-! fputs(argv[0], stderr); \
-! fputs(mess, stderr); \
-! (void) putc(ch, stderr); \
-! (void) putc('\n', stderr); \
-! } \
-! return('?')
-
- int
-! getopt_l(argc, argv, optstring)
- int argc;
- char *argv[];
---- 23,53 ----
- #endif /* lint */
-
-! char *ntp_optarg; /* Global argument pointer. */
-! int ntp_optind = 0; /* Global argv index. */
-! int ntp_opterr = 1; /* for compatibility, should error be printed? */
-! int ntp_optopt; /* for compatibility, option character checked */
-
- static char *scan = NULL; /* Private scan pointer. */
-+ static char *prog = "amnesia";
-
- /*
-! * Print message about a bad option.
- */
-! static int
-! badopt(mess, ch)
-! char *mess;
-! int ch;
-! {
-! if (ntp_opterr) {
-! fputs(prog, stderr);
-! fputs(mess, stderr);
-! (void) putc(ch, stderr);
-! (void) putc('\n', stderr);
-! }
-! return ('?');
-! }
-
- int
-! ntp_getopt(argc, argv, optstring)
- int argc;
- char *argv[];
-***************
-*** 61,85 ****
- register char *place;
-
-! optarg = NULL;
-
-! if (optind == 0) {
- scan = NULL;
-! optind++;
- }
-
- if (scan == NULL || *scan == '\0') {
-! if (optind >= argc || argv[optind][0] != '-' || argv[optind][1] == '\0')
-! return EOF;
-! if (argv[optind][1] == '-' && argv[optind][2] == '\0') {
-! optind++;
-! return EOF;
- }
-
-! scan = argv[optind]+1;
-! optind++;
- }
-
- c = *scan++;
-! optopt = c & 0377;
- for (place = optstring; place != NULL && *place != '\0'; ++place)
- if (*place == c)
---- 57,85 ----
- register char *place;
-
-! prog = argv[0];
-! ntp_optarg = NULL;
-
-! if (ntp_optind == 0) {
- scan = NULL;
-! ntp_optind++;
- }
-
- if (scan == NULL || *scan == '\0') {
-! if (ntp_optind >= argc
-! || argv[ntp_optind][0] != '-'
-! || argv[ntp_optind][1] == '\0') {
-! return (EOF);
-! }
-! if (argv[ntp_optind][1] == '-'
-! && argv[ntp_optind][2] == '\0') {
-! ntp_optind++;
-! return (EOF);
- }
-
-! scan = argv[ntp_optind++]+1;
- }
-
- c = *scan++;
-! ntp_optopt = c & 0377;
- for (place = optstring; place != NULL && *place != '\0'; ++place)
- if (*place == c)
-***************
-*** 87,91 ****
-
- if (place == NULL || *place == '\0' || c == ':' || c == '?') {
-! BADOPT(": unknown option -", c);
- }
-
---- 87,91 ----
-
- if (place == NULL || *place == '\0' || c == ':' || c == '?') {
-! return (badopt(": unknown option -", c));
- }
-
-***************
-*** 93,106 ****
- if (*place == ':') {
- if (*scan != '\0') {
-! optarg = scan;
- scan = NULL;
-! } else if (optind >= argc) {
-! BADOPT(": option requires argument -", c);
- } else {
-! optarg = argv[optind];
-! optind++;
- }
- }
-
-! return c&0377;
- }
---- 93,105 ----
- if (*place == ':') {
- if (*scan != '\0') {
-! ntp_optarg = scan;
- scan = NULL;
-! } else if (ntp_optind >= argc) {
-! return (badopt(": option requires argument -", c));
- } else {
-! ntp_optarg = argv[ntp_optind++];
- }
- }
-
-! return (c & 0377);
- }
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/machines.c Wed Jan 26 16:33:33 1994
-***************
-*** 1,18 ****
-! /*
-! * provide special support for peculiar architectures
- *
- * Real bummers unite !
- */
-
- #ifdef SYS_PTX
- #include <sys/types.h>
- #include <sys/procstats.h>
-! int settimeofday(tvp)
- struct timeval *tvp;
- {
-! return stime(&tvp->tv_sec); /* lie as bad as SysVR4 */
- }
-
-! int gettimeofday(tvp)
- struct timeval *tvp;
- {
---- 1,24 ----
-! /* machines.c - provide special support for peculiar architectures
- *
- * Real bummers unite !
-+ *
-+ * $Id:$
- */
-
-+ #include "ntp_stdlib.h"
-+
- #ifdef SYS_PTX
- #include <sys/types.h>
- #include <sys/procstats.h>
-!
-! int
-! settimeofday(tvp)
- struct timeval *tvp;
- {
-! return (stime(&tvp->tv_sec)); /* lie as bad as SysVR4 */
- }
-
-! int
-! gettimeofday(tvp)
- struct timeval *tvp;
- {
-***************
-*** 21,118 ****
- * this is also the most logical syscall for such a function
- */
-! return get_process_stats(tvp, PS_SELF, (struct procstats *) 0,
-! (struct procstats *) 0);
-! }
-! #endif
-!
-! #ifdef SYS_HPUX
-! /* hpux.c,v 3.1 1993/07/06 01:08:23 jbj Exp
-! * hpux.c -- compatibility routines for HP-UX.
-! * XXX many of these are not needed anymore.
-! */
-! #include "ntp_machine.h"
-!
-! #ifdef HAVE_UNISTD_H
-! #include <unistd.h>
-! #endif
-! #include <stdio.h>
-!
-! #include "ntp_stdlib.h"
-!
-! #if (SYS_HPUX < 8)
-! char
-! *index(s, c)
-! register char *s;
-! register int c;
-! {
-! return strchr (s, c);
-! }
-!
-!
-! char
-! *rindex(s, c)
-! register char *s;
-! register int c;
-! {
-! return strrchr (s, c);
-! }
-!
-!
-! int
-! bcmp(a, b, count)
-! register char *a, *b;
-! register int count;
-! {
-! return memcmp (a, b, count);
-! }
-!
-!
-! void
-! bcopy(from, to, count)
-! register char *from;
-! register char *to;
-! register int count;
-! {
-! if ((to == from) || (count <= 0))
-! return;
-!
-! if ((to > from) && (to <= (from + count))) {
-! to += count;
-! from += count;
-!
-! do {
-! *--to = *--from;
-! } while (--count);
-! }
-! else {
-! do {
-! *to++ = *from++;
-! } while (--count);
-! }
-! }
-!
-!
-! void
-! bzero(area, count)
-! register char *area;
-! register int count;
-! {
-! memset(area, 0, count);
- }
- #endif
-
-!
-! getdtablesize()
-! {
-! return(sysconf(_SC_OPEN_MAX));
-! }
-!
-!
-! int
-! setlinebuf(a_stream)
-! FILE *a_stream;
- {
-! return setvbuf(a_stream, (char *) NULL, _IOLBF, 0);
- }
-!
-! #endif
---- 27,43 ----
- * this is also the most logical syscall for such a function
- */
-! return (get_process_stats(tvp, PS_SELF, (struct procstats *) 0,
-! (struct procstats *) 0));
- }
- #endif
-
-! #if !defined(NTP_POSIX_SOURCE)
-! void
-! ntp_memset(a, x, c)
-! char *a;
-! int x, c;
- {
-! while (c-- > 0)
-! *a++ = x;
- }
-! #endif /*POSIX*/
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/numtohost.c Wed Jan 26 16:37:59 1994
-***************
-*** 2,6 ****
- * numtohost - convert network number to host name.
- */
-- #include "ntp_string.h"
- #include <netdb.h>
-
---- 2,5 ----
-*** /tmp/RCSA023460 Wed Jan 26 17:56:34 1994
---- lib/systime.c Wed Jan 26 16:33:33 1994
-***************
-*** 346,350 ****
- */
- if (oldtime != timetv.tv_sec) {
-! bzero((char *)&ut, sizeof(ut));
- ut.ut_type = OLD_TIME;
- ut.ut_time = oldtime;
---- 346,350 ----
- */
- if (oldtime != timetv.tv_sec) {
-! memset((char *)&ut, 0, sizeof(ut));
- ut.ut_type = OLD_TIME;
- ut.ut_time = oldtime;
-*** /tmp/RCSA023486 Wed Jan 26 17:56:35 1994
---- machines/bsdi Wed Jan 26 16:33:33 1994
-***************
-*** 1,5 ****
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_BSDI -DHAVE_TERMIOS
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
---- 1,5 ----
- RANLIB= ranlib
- DEFS_LOCAL=-DREFCLOCK
-! DEFS= -DSYS_BSDI
- AUTHDEFS= -DDES -DMD5
- CLOCKDEFS= -DLOCAL_CLOCK
-*** /tmp/RCSA023490 Wed Jan 26 17:56:36 1994
---- ntpdate/ntpdate.c Wed Jan 26 16:33:34 1994
-***************
-*** 168,173 ****
- int errflg;
- int c;
-! extern char *optarg;
-! extern int optind;
- extern char *Version;
-
---- 168,173 ----
- int errflg;
- int c;
-! extern char *ntp_optarg;
-! extern int ntp_optind;
- extern char *Version;
-
-***************
-*** 179,186 ****
- * Decode argument list
- */
-! while ((c = getopt_l(argc, argv, "a:bde:k:o:p:qst:v")) != EOF)
- switch (c) {
- case 'a':
-! c = atoi(optarg);
- sys_authenticate = 1;
- sys_authkey = (U_LONG)c;
---- 179,186 ----
- * Decode argument list
- */
-! while ((c = ntp_getopt(argc, argv, "a:bde:k:o:p:qst:v")) != EOF)
- switch (c) {
- case 'a':
-! c = atoi(ntp_optarg);
- sys_authenticate = 1;
- sys_authkey = (U_LONG)c;
-***************
-*** 193,201 ****
- break;
- case 'e':
-! if (!atolfp(optarg, &tmp)
- || tmp.l_ui != 0) {
- (void) fprintf(stderr,
- "%s: encryption delay %s is unlikely\n",
-! progname, optarg);
- errflg++;
- } else {
---- 193,201 ----
- break;
- case 'e':
-! if (!atolfp(ntp_optarg, &tmp)
- || tmp.l_ui != 0) {
- (void) fprintf(stderr,
- "%s: encryption delay %s is unlikely\n",
-! progname, ntp_optarg);
- errflg++;
- } else {
-***************
-*** 204,214 ****
- break;
- case 'k':
-! key_file = optarg;
- break;
- case 'o':
-! sys_version = atoi(optarg);
- break;
- case 'p':
-! c = atoi(optarg);
- if (c <= 0 || c > NTP_SHIFT) {
- (void) fprintf(stderr,
---- 204,214 ----
- break;
- case 'k':
-! key_file = ntp_optarg;
- break;
- case 'o':
-! sys_version = atoi(ntp_optarg);
- break;
- case 'p':
-! c = atoi(ntp_optarg);
- if (c <= 0 || c > NTP_SHIFT) {
- (void) fprintf(stderr,
-***************
-*** 227,234 ****
- break;
- case 't':
-! if (!atolfp(optarg, &tmp)) {
- (void) fprintf(stderr,
- "%s: timeout %s is undecodeable\n",
-! progname, optarg);
- errflg++;
- } else {
---- 227,234 ----
- break;
- case 't':
-! if (!atolfp(ntp_optarg, &tmp)) {
- (void) fprintf(stderr,
- "%s: timeout %s is undecodeable\n",
-! progname, ntp_optarg);
- errflg++;
- } else {
-***************
-*** 249,253 ****
- }
-
-! sys_maxservers = argc - optind;
- if (errflg || sys_maxservers == 0) {
- (void) fprintf(stderr,
---- 249,253 ----
- }
-
-! sys_maxservers = argc - ntp_optind;
- if (errflg || sys_maxservers == 0) {
- (void) fprintf(stderr,
-***************
-*** 294,299 ****
- * Add servers we are going to be polling
- */
-! for ( ; optind < argc; optind++)
-! addserver(argv[optind]);
-
- if (sys_numservers == 0) {
---- 294,299 ----
- * Add servers we are going to be polling
- */
-! for ( ; ntp_optind < argc; ntp_optind++)
-! addserver(argv[ntp_optind]);
-
- if (sys_numservers == 0) {
-***************
-*** 1031,1035 ****
-
- server = (struct server *)emalloc(sizeof(struct server));
-! bzero((char *)server, sizeof(struct server));
-
- server->srcadr.sin_family = AF_INET;
---- 1031,1035 ----
-
- server = (struct server *)emalloc(sizeof(struct server));
-! memset((char *)server, 0, sizeof(struct server));
-
- server->srcadr.sin_family = AF_INET;
-***************
-*** 1189,1193 ****
- struct sockaddr_in addr;
-
-! bzero((char *)&addr, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
---- 1189,1193 ----
- struct sockaddr_in addr;
-
-! memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
-***************
-*** 1483,1490 ****
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
-! return 1;
- }
-! return 0;
- }
-
---- 1483,1490 ----
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
-! return (1);
- }
-! return (0);
- }
-
-***************
-*** 1520,1524 ****
- if (pp->stratum == 1) {
- junk[4] = 0;
-! bcopy((char *)&pp->refid, junk, 4);
- str = junk;
- } else {
---- 1520,1524 ----
- if (pp->stratum == 1) {
- junk[4] = 0;
-! memmove(junk, (char *)&pp->refid, 4);
- str = junk;
- } else {
-*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994
---- ntpq/ntpq.c Wed Jan 26 16:33:34 1994
-***************
-*** 510,515 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- delay_time.l_ui = 0;
---- 510,515 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- delay_time.l_ui = 0;
-***************
-*** 517,524 ****
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "c:dinp")) != EOF)
- switch (c) {
- case 'c':
-! ADDCMD(optarg);
- break;
- case 'd':
---- 517,524 ----
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "c:dinp")) != EOF)
- switch (c) {
- case 'c':
-! ADDCMD(ntp_optarg);
- break;
- case 'd':
-***************
-*** 544,552 ****
- exit(2);
- }
-! if (optind == argc) {
- ADDHOST(DEFHOST);
- } else {
-! for (; optind < argc; optind++)
-! ADDHOST(argv[optind]);
- }
-
---- 544,552 ----
- exit(2);
- }
-! if (ntp_optind == argc) {
- ADDHOST(DEFHOST);
- } else {
-! for (; ntp_optind < argc; ntp_optind++)
-! ADDHOST(argv[ntp_optind]);
- }
-
-***************
-*** 983,987 ****
- * Copy the data into the data buffer.
- */
-! bcopy((char *)rpkt.data, (char *)pktdata + offset, count);
-
- /*
---- 983,987 ----
- * Copy the data into the data buffer.
- */
-! memmove((char *)pktdata + offset, (char *)rpkt.data, count);
-
- /*
-***************
-*** 1051,1055 ****
- */
- if (qsize > 0) {
-! bcopy(qdata, (char *)qpkt.data, qsize);
- pktsize = qsize + CTL_HEADER_LEN;
- while (pktsize & (sizeof(U_LONG)-1)) {
---- 1051,1055 ----
- */
- if (qsize > 0) {
-! memmove((char *)qpkt.data, qdata, qsize);
- pktsize = qsize + CTL_HEADER_LEN;
- while (pktsize & (sizeof(U_LONG)-1)) {
-***************
-*** 1542,1546 ****
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
- if (fullhost != 0)
- (void) strcpy(fullhost, hp->h_name);
---- 1542,1546 ----
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
- if (fullhost != 0)
- (void) strcpy(fullhost, hp->h_name);
-*** /tmp/RCSA023494 Wed Jan 26 17:56:37 1994
---- ntpq/ntpq_ops.c Wed Jan 26 16:33:34 1994
-***************
-*** 218,221 ****
---- 218,222 ----
- /*
- * strsave - save a string
-+ * XXX - should be in libntp.a
- */
- static char *
-***************
-*** 232,237 ****
- }
-
-! bcopy(str, cp, len);
-! return cp;
- }
-
---- 233,238 ----
- }
-
-! memmove(cp, str, len);
-! return (cp);
- }
-
-***************
-*** 373,381 ****
- if (cp != data)
- *cp++ = ',';
-! bcopy(vl->name, cp, namelen);
- cp += namelen;
- if (valuelen != 0) {
- *cp++ = '=';
-! bcopy(vl->value, cp, valuelen);
- cp += valuelen;
- }
---- 374,382 ----
- if (cp != data)
- *cp++ = ',';
-! memmove(cp, vl->name, namelen);
- cp += namelen;
- if (valuelen != 0) {
- *cp++ = '=';
-! memmove(cp, vl->value, valuelen);
- cp += valuelen;
- }
-***************
-*** 601,605 ****
- return;
-
-! bzero((char *)tmplist, sizeof(tmplist));
- if (pcmd->nargs >= 2)
- doaddvlist(tmplist, pcmd->argval[1].string);
---- 602,606 ----
- return;
-
-! memset((char *)tmplist, 0, sizeof(tmplist));
- if (pcmd->nargs >= 2)
- doaddvlist(tmplist, pcmd->argval[1].string);
-***************
-*** 632,636 ****
- return;
-
-! bzero((char *)tmplist, sizeof(tmplist));
- doaddvlist(tmplist, pcmd->argval[1].string);
-
---- 633,637 ----
- return;
-
-! memset((char *)tmplist, 0, sizeof(tmplist));
- doaddvlist(tmplist, pcmd->argval[1].string);
-
-***************
-*** 691,695 ****
- return;
-
-! bzero((char *)tmplist, sizeof(tmplist));
- if (pcmd->nargs >= 2)
- doaddvlist(tmplist, pcmd->argval[1].string);
---- 692,696 ----
- return;
-
-! memset((char *)tmplist, 0, sizeof(tmplist));
- if (pcmd->nargs >= 2)
- doaddvlist(tmplist, pcmd->argval[1].string);
-***************
-*** 803,807 ****
- return;
-
-! bzero((char *)tmplist, sizeof(tmplist));
- if (pcmd->nargs >= 3)
- doaddvlist(tmplist, pcmd->argval[2].string);
---- 804,808 ----
- return;
-
-! memset((char *)tmplist, 0, sizeof(tmplist));
- if (pcmd->nargs >= 3)
- doaddvlist(tmplist, pcmd->argval[2].string);
-***************
-*** 1283,1287 ****
- extern struct ctl_var peer_var[];
-
-! bzero((char *)havevar, sizeof(havevar));
- gettstamp(&ts);
-
---- 1284,1288 ----
- extern struct ctl_var peer_var[];
-
-! memset((char *)havevar, 0, sizeof(havevar));
- gettstamp(&ts);
-
-*** /tmp/RCSA023500 Wed Jan 26 17:56:38 1994
---- ntptrace/ntptrace.c Wed Jan 26 16:33:35 1994
-***************
-*** 112,117 ****
- int errflg;
- int c;
-! extern char *optarg;
-! extern int optind;
- extern char *Version;
-
---- 112,117 ----
- int errflg;
- int c;
-! extern char *ntp_optarg;
-! extern int ntp_optind;
- extern char *Version;
-
-***************
-*** 122,126 ****
- * Decode argument list
- */
-! while ((c = getopt_l(argc, argv, "do:nr:t:v")) != EOF)
- switch (c) {
- case 'd':
---- 122,126 ----
- * Decode argument list
- */
-! while ((c = ntp_getopt(argc, argv, "do:nr:t:v")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 131,138 ****
- break;
- case 'o':
-! sys_version = atoi(optarg);
- break;
- case 'r':
-! sys_retries = atoi(optarg);
- if (sys_retries < 1) {
- (void)fprintf(stderr,
---- 131,138 ----
- break;
- case 'o':
-! sys_version = atoi(ntp_optarg);
- break;
- case 'r':
-! sys_retries = atoi(ntp_optarg);
- if (sys_retries < 1) {
- (void)fprintf(stderr,
-***************
-*** 143,147 ****
- break;
- case 't':
-! sys_timeout = atoi(optarg);
- if (sys_timeout < 1) {
- (void)fprintf(stderr,
---- 143,147 ----
- break;
- case 't':
-! sys_timeout = atoi(ntp_optarg);
- if (sys_timeout < 1) {
- (void)fprintf(stderr,
-***************
-*** 161,165 ****
- }
-
-! if (errflg || (argc - optind) > 1) {
- (void) fprintf(stderr,
- "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n",
---- 161,165 ----
- }
-
-! if (errflg || (argc - ntp_optind) > 1) {
- (void) fprintf(stderr,
- "usage: %s [-vnd] [-r retries] [-t timeout] [server]\n",
-***************
-*** 183,188 ****
- syslog(LOG_NOTICE, "%s", Version);
-
-! if ((argc - optind) == 1)
-! firstserver = addservbyname(argv[optind]);
- else
- firstserver = addservbyname("localhost");
---- 183,188 ----
- syslog(LOG_NOTICE, "%s", Version);
-
-! if ((argc - ntp_optind) == 1)
-! firstserver = addservbyname(argv[ntp_optind]);
- else
- firstserver = addservbyname("localhost");
-***************
-*** 503,507 ****
-
- server = (struct server *)emalloc(sizeof(struct server));
-! bzero((char *)server, sizeof(struct server));
-
- server->srcadr.sin_family = AF_INET;
---- 503,507 ----
-
- server = (struct server *)emalloc(sizeof(struct server));
-! memset((char *)server, 0, sizeof(struct server));
-
- server->srcadr.sin_family = AF_INET;
-***************
-*** 617,621 ****
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
- return 1;
- }
---- 617,621 ----
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
- return 1;
- }
-***************
-*** 736,740 ****
- if (pp->stratum == 1) {
- junk[4] = 0;
-! bcopy((char *)&pp->refid, junk, 4);
- str = junk;
- (void) fprintf(fp, "'%s'", str);
---- 736,740 ----
- if (pp->stratum == 1) {
- junk[4] = 0;
-! memmove(junk, (char *)&pp->refid, 4);
- str = junk;
- (void) fprintf(fp, "'%s'", str);
-*** /tmp/RCSA023505 Wed Jan 26 17:56:39 1994
---- parse/util/testdcf.c Wed Jan 26 16:33:35 1994
-***************
-*** 353,357 ****
- }
-
-! bzero(term.c_cc, sizeof(term.c_cc));
- term.c_cc[VMIN] = 1;
- term.c_cflag = B50|CS8|CREAD|CLOCAL;
---- 353,357 ----
- }
-
-! memset(term.c_cc, 0, sizeof(term.c_cc));
- term.c_cc[VMIN] = 1;
- term.c_cflag = B50|CS8|CREAD|CLOCAL;
-*** /tmp/RCSA023510 Wed Jan 26 17:56:40 1994
---- ppsclock/ppstest/ppstest.c Wed Jan 26 16:33:35 1994
-***************
-*** 103,107 ****
- speed_t speed = B4800;
-
-! bzero((char *)&termios, sizeof(termios));
- termios.c_cflag = CS8 | CREAD | CLOCAL;
- termios.c_iflag = IGNCR;
---- 103,107 ----
- speed_t speed = B4800;
-
-! memset((char *)&termios, 0, sizeof(termios));
- termios.c_cflag = CS8 | CREAD | CLOCAL;
- termios.c_iflag = IGNCR;
-*** /tmp/RCSA023525 Wed Jan 26 17:56:43 1994
---- scripts/autoconf Wed Jan 26 16:33:35 1994
-***************
-*** 324,329 ****
- {
- test -n "$verbose" && \
-! echo ' defining' HAVE_UNISTD_H
-! DEFS="$DEFS -DHAVE_UNISTD_H=1"
- }
-
---- 324,329 ----
- {
- test -n "$verbose" && \
-! echo ' defining' NTP_POSIX_SOURCE
-! DEFS="$DEFS -DNTP_POSIX_SOURCE=1"
- }
-
-*** /tmp/RCSA023535 Wed Jan 26 17:56:46 1994
---- util/Makefile.tmpl Wed Jan 26 16:33:35 1994
-***************
-*** 33,37 ****
-
- tickadj: $(TKOBJS)
-! $(CC) $(COPTS) -o $@ $(TKOBJS) $(DAEMONLIBS) $(RESLIB) $(COMPAT)
-
- ntptime: $(NTOBJS)
---- 33,37 ----
-
- tickadj: $(TKOBJS)
-! $(CC) $(COPTS) -o $@ $(TKOBJS) $(LIB) $(DAEMONLIBS) $(RESLIB) $(COMPAT)
-
- ntptime: $(NTOBJS)
-*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994
---- util/ntptime.c Wed Jan 26 16:33:36 1994
-***************
-*** 38,42 ****
- extern int sigvec P((int, struct sigvec *, struct sigvec *));
- void pll_trap P((void));
-- extern int getopt_l P((int, char **, char *));
-
- static struct sigvec newsigsys; /* new sigvec status */
---- 38,41 ----
-***************
-*** 52,57 ****
- char *argv[];
- {
-! extern int optind;
-! extern char *optarg;
- int status;
- struct ntptimeval ntv;
---- 51,56 ----
- char *argv[];
- {
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- int status;
- struct ntptimeval ntv;
-***************
-*** 67,71 ****
- ntx.mode = 0;
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, optargs)) != EOF) switch (c) {
- case 'c':
- cost++;
---- 66,70 ----
- ntx.mode = 0;
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, optargs)) != EOF) switch (c) {
- case 'c':
- cost++;
-***************
-*** 73,81 ****
- case 'e':
- ntx.mode |= ADJ_ESTERROR;
-! ntx.esterror = atoi(optarg);
- break;
- case 'f':
- ntx.mode |= ADJ_FREQUENCY;
-! ntx.frequency = (int) (atof(optarg) * (1 << SHIFT_USEC));
- if (ntx.frequency < (-100 << SHIFT_USEC)
- || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++;
---- 72,81 ----
- case 'e':
- ntx.mode |= ADJ_ESTERROR;
-! ntx.esterror = atoi(ntp_optarg);
- break;
- case 'f':
- ntx.mode |= ADJ_FREQUENCY;
-! ntx.frequency = (int) (atof(ntp_optarg)
-! * (1 << SHIFT_USEC));
- if (ntx.frequency < (-100 << SHIFT_USEC)
- || ntx.frequency > ( 100 << SHIFT_USEC)) errflg++;
-***************
-*** 83,91 ****
- case 'm':
- ntx.mode |= ADJ_MAXERROR;
-! ntx.maxerror = atoi(optarg);
- break;
- case 'o':
- ntx.mode |= ADJ_OFFSET;
-! ntx.offset = atoi(optarg);
- break;
- case 'r':
---- 83,91 ----
- case 'm':
- ntx.mode |= ADJ_MAXERROR;
-! ntx.maxerror = atoi(ntp_optarg);
- break;
- case 'o':
- ntx.mode |= ADJ_OFFSET;
-! ntx.offset = atoi(ntp_optarg);
- break;
- case 'r':
-***************
-*** 94,98 ****
- case 's':
- ntx.mode |= ADJ_STATUS;
-! ntx.status = atoi(optarg);
- if (ntx.status < 0 || ntx.status > 4) errflg++;
- break;
---- 94,98 ----
- case 's':
- ntx.mode |= ADJ_STATUS;
-! ntx.status = atoi(ntp_optarg);
- if (ntx.status < 0 || ntx.status > 4) errflg++;
- break;
-***************
-*** 99,103 ****
- case 't':
- ntx.mode |= ADJ_TIMECONST;
-! ntx.time_constant = atoi(optarg);
- if (ntx.time_constant < 0 || ntx.time_constant > MAXTC)
- errflg++;
---- 99,103 ----
- case 't':
- ntx.mode |= ADJ_TIMECONST;
-! ntx.time_constant = atoi(ntp_optarg);
- if (ntx.time_constant < 0 || ntx.time_constant > MAXTC)
- errflg++;
-***************
-*** 106,110 ****
- errflg++;
- }
-! if (errflg || (optind != argc)) {
- (void) fprintf(stderr,
- "usage: %s [-%s]\n\n\
---- 106,110 ----
- errflg++;
- }
-! if (errflg || (ntp_optind != argc)) {
- (void) fprintf(stderr,
- "usage: %s [-%s]\n\n\
-*** /tmp/RCSA023535 Wed Jan 26 17:56:47 1994
---- util/tickadj.c Wed Jan 26 16:33:36 1994
-***************
-*** 62,68 ****
- static void writevar P((int, unsigned long, int));
- static void readvar P((int, unsigned long, int *));
-- #ifndef NTP_POSIX_SOURCE
-- extern int getopt P((int, char **, char *));
-- #endif
-
- /*
---- 62,65 ----
-***************
-*** 76,81 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
- unsigned long tickadj_offset;
- unsigned long tick_offset;
---- 73,78 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- unsigned long tickadj_offset;
- unsigned long tick_offset;
-***************
-*** 95,99 ****
-
- progname = argv[0];
-! while ((c = getopt(argc, argv, "a:Adkqpst:")) != EOF)
- switch (c) {
- case 'd':
---- 92,96 ----
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "a:Adkqpst:")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 110,118 ****
- break;
- case 'a':
-! writetickadj = atoi(optarg);
- if (writetickadj <= 0) {
- (void) fprintf(stderr,
- "%s: unlikely value for tickadj: %s\n",
-! progname, optarg);
- errflg++;
- }
---- 107,115 ----
- break;
- case 'a':
-! writetickadj = atoi(ntp_optarg);
- if (writetickadj <= 0) {
- (void) fprintf(stderr,
- "%s: unlikely value for tickadj: %s\n",
-! progname, ntp_optarg);
- errflg++;
- }
-***************
-*** 125,133 ****
- break;
- case 't':
-! writetick = atoi(optarg);
- if (writetick <= 0) {
- (void) fprintf(stderr,
- "%s: unlikely value for tick: %s\n",
-! progname, optarg);
- errflg++;
- }
---- 122,130 ----
- break;
- case 't':
-! writetick = atoi(ntp_optarg);
- if (writetick <= 0) {
- (void) fprintf(stderr,
- "%s: unlikely value for tick: %s\n",
-! progname, ntp_optarg);
- errflg++;
- }
-***************
-*** 137,141 ****
- break;
- }
-! if (errflg || optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname);
---- 134,138 ----
- break;
- }
-! if (errflg || ntp_optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [-Aqsp] [-a newadj] [-t newtick]\n", progname);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994
---- xntpd/ntp_config.c Wed Jan 26 16:33:36 1994
-***************
-*** 341,345 ****
- int errflg;
- int c;
-! extern int optind;
-
- debug = 0; /* no debugging by default */
---- 341,345 ----
- int errflg;
- int c;
-! extern int ntp_optind;
-
- debug = 0; /* no debugging by default */
-***************
-*** 353,357 ****
- * the terminal, but we won't know to do that until we've
- * parsed the command line. Do that now, crudely, and do it
-! * again later. Our getopt_l() is explicitly reusable, by the
- * way. Your own mileage may vary.
- */
---- 353,357 ----
- * the terminal, but we won't know to do that until we've
- * parsed the command line. Do that now, crudely, and do it
-! * again later. Our ntp_getopt() is explicitly reusable, by the
- * way. Your own mileage may vary.
- */
-***************
-*** 362,366 ****
- * Decode argument list
- */
-! while ((c = getopt_l(argc, argv, xntp_options)) != EOF)
- switch (c) {
- case 'd':
---- 362,366 ----
- * Decode argument list
- */
-! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 374,378 ****
- }
-
-! if (errflg || optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [ -bd ] [ -c config_file ]\n", progname);
---- 374,378 ----
- }
-
-! if (errflg || ntp_optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [ -bd ] [ -c config_file ]\n", progname);
-***************
-*** 379,383 ****
- exit(2);
- }
-! optind = 0; /* reset optind to restart getopt_l */
-
- if (debug) {
---- 379,383 ----
- exit(2);
- }
-! ntp_optind = 0; /* reset optind to restart ntp_getopt() */
-
- if (debug) {
-***************
-*** 427,432 ****
- int have_keyfile;
- char keyfile[MAXFILENAME];
-! extern int optind;
-! extern char *optarg;
- extern U_LONG info_auth_keyid;
- FILEGEN *filegen;
---- 427,432 ----
- int have_keyfile;
- char keyfile[MAXFILENAME];
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- extern U_LONG info_auth_keyid;
- FILEGEN *filegen;
-***************
-*** 451,455 ****
- * Decode argument list
- */
-! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) {
- switch (c) {
- case 'a':
---- 451,455 ----
- * Decode argument list
- */
-! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) {
- switch (c) {
- case 'a':
-***************
-*** 460,464 ****
- break;
- case 'c':
-! config_file = optarg;
- break;
- case 'd':
---- 460,464 ----
- break;
- case 'c':
-! config_file = ntp_optarg;
- break;
- case 'd':
-***************
-*** 474,481 ****
- l_fp tmp;
-
-! if (!atolfp(optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line encryption delay value %s undecodable",
-! optarg);
- errflg++;
- } else if (tmp.l_ui != 0) {
---- 474,481 ----
- l_fp tmp;
-
-! if (!atolfp(ntp_optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line encryption delay value %s undecodable",
-! ntp_optarg);
- errflg++;
- } else if (tmp.l_ui != 0) {
-***************
-*** 482,486 ****
- syslog(LOG_ERR,
- "command line encryption delay value %s is unlikely",
-! optarg);
- errflg++;
- } else {
---- 482,486 ----
- syslog(LOG_ERR,
- "command line encryption delay value %s is unlikely",
-! ntp_optarg);
- errflg++;
- } else {
-***************
-*** 491,500 ****
-
- case 'f':
-! stats_config(STATS_FREQ_FILE, optarg);
- break;
-
- case 'k':
-! getauthkeys(optarg);
-! if ((int)strlen(optarg) >= MAXFILENAME) {
- syslog(LOG_ERR,
- "key file name too LONG (>%d, sigh), no name resolution possible",
---- 491,500 ----
-
- case 'f':
-! stats_config(STATS_FREQ_FILE, ntp_optarg);
- break;
-
- case 'k':
-! getauthkeys(ntp_optarg);
-! if ((int)strlen(ntp_optarg) >= MAXFILENAME) {
- syslog(LOG_ERR,
- "key file name too LONG (>%d, sigh), no name resolution possible",
-***************
-*** 502,506 ****
- } else {
- have_keyfile = 1;
-! (void)strcpy(keyfile, optarg);
- }
- break;
---- 502,506 ----
- } else {
- have_keyfile = 1;
-! (void)strcpy(keyfile, ntp_optarg);
- }
- break;
-***************
-*** 507,511 ****
-
- case 'p':
-! stats_config(STATS_PID_FILE, optarg);
- break;
-
---- 507,511 ----
-
- case 'p':
-! stats_config(STATS_PID_FILE, ntp_optarg);
- break;
-
-***************
-*** 514,525 ****
- l_fp tmp;
-
-! if (!atolfp(optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s undecodable",
-! optarg);
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s is unlikely",
-! optarg);
- } else {
- proto_config(PROTO_BROADDELAY, tmp.l_f);
---- 514,525 ----
- l_fp tmp;
-
-! if (!atolfp(ntp_optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s undecodable",
-! ntp_optarg);
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s is unlikely",
-! ntp_optarg);
- } else {
- proto_config(PROTO_BROADDELAY, tmp.l_f);
-***************
-*** 529,533 ****
-
- case 's':
-! stats_config(STATS_STATSDIR, optarg);
- break;
-
---- 529,533 ----
-
- case 's':
-! stats_config(STATS_STATSDIR, ntp_optarg);
- break;
-
-***************
-*** 536,544 ****
- int tkey;
-
-! tkey = atoi(optarg);
- if (tkey <= 0 || tkey > NTP_MAXKEY) {
- syslog(LOG_ERR,
- "command line trusted key %s is unlikely",
-! optarg);
- } else {
- authtrust(tkey, (LONG)1);
---- 536,544 ----
- int tkey;
-
-! tkey = atoi(ntp_optarg);
- if (tkey <= 0 || tkey > NTP_MAXKEY) {
- syslog(LOG_ERR,
- "command line trusted key %s is unlikely",
-! ntp_optarg);
- } else {
- authtrust(tkey, (LONG)1);
-***************
-*** 554,558 ****
- }
-
-! if (errflg || optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [ -bd ] [ -c config_file ]\n", progname);
---- 554,558 ----
- }
-
-! if (errflg || ntp_optind != argc) {
- (void) fprintf(stderr,
- "usage: %s [ -bd ] [ -c config_file ]\n", progname);
-***************
-*** 1130,1134 ****
- }
-
-! bzero((char *)&clock, sizeof clock);
- errflg = 0;
- for (i = 2; i < ntokens-1; i++) {
---- 1130,1134 ----
- }
-
-! memset((char *)&clock, 0, sizeof clock);
- errflg = 0;
- for (i = 2; i < ntokens-1; i++) {
-***************
-*** 1582,1586 ****
- * make up socket address. Clear it out for neatness.
- */
-! bzero((char *)addr, sizeof(struct sockaddr_in));
- addr->sin_family = AF_INET;
- addr->sin_port = htons(NTP_PORT);
---- 1582,1586 ----
- * make up socket address. Clear it out for neatness.
- */
-! memset((char *)addr, 0, sizeof(struct sockaddr_in));
- addr->sin_family = AF_INET;
- addr->sin_port = htons(NTP_PORT);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:49 1994
---- xntpd/ntp_control.c Wed Jan 26 16:33:36 1994
-***************
-*** 873,877 ****
- }
-
-! bcopy(dp, (char *)datapt, dlen);
- datapt += dlen;
- datalinelen += dlen;
---- 873,877 ----
- }
-
-! memmove((char *)datapt, dp, dlen);
- datapt += dlen;
- datalinelen += dlen;
-***************
-*** 901,905 ****
- if (len > (sizeof(buffer) - (cp - buffer) - 1))
- len = sizeof(buffer) - (cp - buffer) - 1;
-! bcopy(data, cp, len);
- cp += len;
- *cp++ = '"';
---- 901,905 ----
- if (len > (sizeof(buffer) - (cp - buffer) - 1))
- len = sizeof(buffer) - (cp - buffer) - 1;
-! memmove(cp, data, len);
- cp += len;
- *cp++ = '"';
-***************
-*** 1697,1701 ****
- if (res_authokay)
- ctl_sys_num_events = 0;
-! bzero((char *)wants, CS_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
---- 1697,1701 ----
- if (res_authokay)
- ctl_sys_num_events = 0;
-! memset((char *)wants, 0, CS_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
-***************
-*** 1733,1737 ****
- if (res_authokay)
- peer->num_events = 0;
-! bzero((char*)wants, CP_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
---- 1733,1737 ----
- if (res_authokay)
- peer->num_events = 0;
-! memset((char*)wants, 0, CP_MAXCODE+1);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
-***************
-*** 1906,1910 ****
- rpkt.status = htons(ctlclkstatus(&clock));
- gotvar = 0;
-! bzero((char*)wants, CC_MAXCODE+1);
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
---- 1906,1910 ----
- rpkt.status = htons(ctlclkstatus(&clock));
- gotvar = 0;
-! memset((char*)wants, 0, CC_MAXCODE+1);
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
---- xntpd/ntp_intres.c Wed Jan 26 16:33:37 1994
-***************
-*** 295,299 ****
- len = strlen(name) + 1;
- cp = emalloc((unsigned)len);
-! bcopy(name, cp, len);
-
- ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
---- 295,299 ----
- len = strlen(name) + 1;
- cp = emalloc((unsigned)len);
-! memmove(cp, name, len);
-
- ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
-***************
-*** 348,354 ****
-
- if (h_errno == TRY_AGAIN)
-! return 1;
- #endif
-! return 0;
- }
-
---- 348,354 ----
-
- if (h_errno == TRY_AGAIN)
-! return (1);
- #endif
-! return (0);
- }
-
-***************
-*** 358,364 ****
- * only return one.
- */
-! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr),
-! sizeof(struct in_addr));
-! return 1;
- }
-
---- 358,365 ----
- * only return one.
- */
-! memmove((char *)&(entry->ce_peeraddr),
-! (char *)hp->h_addr,
-! sizeof(struct in_addr));
-! return (1);
- }
-
-***************
-*** 381,385 ****
- }
-
-! bzero((char *)&saddr, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(NTP_PORT); /* trash */
---- 382,386 ----
- }
-
-! memset((char *)&saddr, 0, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(NTP_PORT); /* trash */
-***************
-*** 449,453 ****
- * Make up a request packet with the configuration info
- */
-! bzero((char *)&reqpkt, sizeof(reqpkt));
-
- reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
---- 450,454 ----
- * Make up a request packet with the configuration info
- */
-! memset((char *)&reqpkt, 0, sizeof(reqpkt));
-
- reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
-***************
-*** 457,461 ****
- reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
- reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
-! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer));
- reqpkt.keyid = htonl(req_keyid);
-
---- 458,462 ----
- reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
- reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
-! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer));
- reqpkt.keyid = htonl(req_keyid);
-
-*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
---- xntpd/ntp_monitor.c Wed Jan 26 16:33:37 1994
-***************
-*** 103,107 ****
- mon_hash = 0;
- mon_hash_count = 0;
-! bzero((char *)&mon_mru_list, sizeof mon_mru_list);
- }
-
---- 103,107 ----
- mon_hash = 0;
- mon_hash_count = 0;
-! memset((char *)&mon_mru_list, 0, sizeof mon_mru_list);
- }
-
-***************
-*** 122,126 ****
- mon_hash = (struct mon_data *)
- emalloc(MON_HASH_SIZE * sizeof(struct mon_data));
-! bzero((char *)mon_hash, MON_HASH_SIZE*sizeof(struct mon_data));
- mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int));
- mon_free_mem = 0;
---- 122,127 ----
- mon_hash = (struct mon_data *)
- emalloc(MON_HASH_SIZE * sizeof(struct mon_data));
-! memset((char *)mon_hash, 0,
-! MON_HASH_SIZE*sizeof(struct mon_data));
- mon_hash_count = (int *)emalloc(MON_HASH_SIZE * sizeof(int));
- mon_free_mem = 0;
-*** /tmp/RCSA023543 Wed Jan 26 17:56:50 1994
---- xntpd/ntp_peer.c Wed Jan 26 16:33:37 1994
-***************
-*** 440,444 ****
- * Zero the whole thing for now. We might be pickier later.
- */
-! bzero((char *)peer, sizeof(struct peer));
-
- peer->srcadr = *srcadr;
---- 440,444 ----
- * Zero the whole thing for now. We might be pickier later.
- */
-! memset((char *)peer, 0, sizeof(struct peer));
-
- peer->srcadr = *srcadr;
-*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994
---- xntpd/ntp_proto.c Wed Jan 26 16:33:37 1994
-***************
-*** 1079,1083 ****
- else {
- if (pps_control)
-! bcopy(PPSREFID, (char *)&sys_refid, 4);
- else
- sys_refid = peer->srcadr.sin_addr.s_addr;
---- 1079,1083 ----
- else {
- if (pps_control)
-! memmove((char *)&sys_refid, PPSREFID, 4);
- else
- sys_refid = peer->srcadr.sin_addr.s_addr;
-***************
-*** 1128,1132 ****
- sys_refid = peer->refid;
- else
-! bcopy(PPSREFID, (char *)&sys_refid, 4);
- }
- }
---- 1128,1132 ----
- sys_refid = peer->refid;
- else
-! memmove((char *)&sys_refid, PPSREFID, 4);
- }
- }
-***************
-*** 1251,1255 ****
- printf("clear(%s)\n", ntoa(&peer->srcadr));
- #endif
-! bzero(CLEAR_TO_ZERO(peer), LEN_CLEAR_TO_ZERO);
- peer->hpoll = peer->minpoll;
- peer->dispersion = NTP_MAXDISPERSE;
---- 1251,1255 ----
- printf("clear(%s)\n", ntoa(&peer->srcadr));
- #endif
-! memset(CLEAR_TO_ZERO(peer), 0, LEN_CLEAR_TO_ZERO);
- peer->hpoll = peer->minpoll;
- peer->dispersion = NTP_MAXDISPERSE;
-*** /tmp/RCSA023543 Wed Jan 26 17:56:51 1994
---- xntpd/ntp_request.c Wed Jan 26 16:33:38 1994
-***************
-*** 313,317 ****
- * Copy data out of exbuf into the packet.
- */
-! bcopy(exbuf, &rpkt.data[0], itemsize);
- seqno++;
- databytes = 0;
---- 313,317 ----
- * Copy data out of exbuf into the packet.
- */
-! memmove(&rpkt.data[0], exbuf, itemsize);
- seqno++;
- databytes = 0;
-***************
-*** 683,687 ****
- extern struct peer *sys_peer;
-
-! bzero((char *)&addr, sizeof addr);
- addr.sin_family = AF_INET;
- items = INFO_NITEMS(inpkt->err_nitems);
---- 683,687 ----
- extern struct peer *sys_peer;
-
-! memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- items = INFO_NITEMS(inpkt->err_nitems);
-***************
-*** 774,778 ****
- extern struct peer *sys_peer;
-
-! bzero((char *)&addr, sizeof addr);
- addr.sin_family = AF_INET;
- items = INFO_NITEMS(inpkt->err_nitems);
---- 774,778 ----
- extern struct peer *sys_peer;
-
-! memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- items = INFO_NITEMS(inpkt->err_nitems);
-***************
-*** 1142,1146 ****
- items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_peer *)inpkt->data;
-! bzero((char *)&peeraddr, sizeof(struct sockaddr_in));
- peeraddr.sin_family = AF_INET;
- peeraddr.sin_port = htons(NTP_PORT);
---- 1142,1146 ----
- items = INFO_NITEMS(inpkt->err_nitems);
- cp = (struct conf_peer *)inpkt->data;
-! memset((char *)&peeraddr, 0, sizeof(struct sockaddr_in));
- peeraddr.sin_family = AF_INET;
- peeraddr.sin_port = htons(NTP_PORT);
-***************
-*** 1452,1457 ****
- items = INFO_NITEMS(inpkt->err_nitems);
- cr = (struct conf_restrict *)inpkt->data;
-! bzero((char *)&matchaddr, sizeof(struct sockaddr_in));
-! bzero((char *)&matchmask, sizeof(struct sockaddr_in));
- matchaddr.sin_family = AF_INET;
- matchmask.sin_family = AF_INET;
---- 1452,1457 ----
- items = INFO_NITEMS(inpkt->err_nitems);
- cr = (struct conf_restrict *)inpkt->data;
-! memset((char *)&matchaddr, 0, sizeof(struct sockaddr_in));
-! memset((char *)&matchmask, 0, sizeof(struct sockaddr_in));
- matchaddr.sin_family = AF_INET;
- matchmask.sin_family = AF_INET;
-***************
-*** 1870,1874 ****
- * Prepare sockaddr_in structure
- */
-! bzero((char *)&laddr, sizeof laddr);
- laddr.sin_family = AF_INET;
- laddr.sin_port = ntohs(NTP_PORT);
---- 1870,1874 ----
- * Prepare sockaddr_in structure
- */
-! memset((char *)&laddr, 0, sizeof laddr);
- laddr.sin_family = AF_INET;
- laddr.sin_port = ntohs(NTP_PORT);
-***************
-*** 2096,2100 ****
- struct sockaddr_in addr;
-
-! bzero((char *)&addr, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
---- 2096,2100 ----
- struct sockaddr_in addr;
-
-! memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
-***************
-*** 2150,2155 ****
- struct sockaddr_in addr;
-
-! bzero((char *)&addr, sizeof addr);
-! bzero((char *)&clock, sizeof clock);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
---- 2150,2155 ----
- struct sockaddr_in addr;
-
-! memset((char *)&addr, 0, sizeof addr);
-! memset((char *)&clock, 0, sizeof clock);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
-***************
-*** 2287,2291 ****
- struct sockaddr_in addr;
-
-! bzero((char *)&addr, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
---- 2287,2291 ----
- struct sockaddr_in addr;
-
-! memset((char *)&addr, 0, sizeof addr);
- addr.sin_family = AF_INET;
- addr.sin_port = htons(NTP_PORT);
-***************
-*** 2304,2308 ****
- }
-
-! bzero((char *)&bug, sizeof bug);
- refclock_buginfo(&addr, &bug);
- if (bug.nvalues == 0 && bug.ntimes == 0) {
---- 2304,2308 ----
- }
-
-! memset((char *)&bug, 0, sizeof bug);
- refclock_buginfo(&addr, &bug);
- if (bug.nvalues == 0 && bug.ntimes == 0) {
-*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
---- xntpd/ntp_restrict.c Wed Jan 26 16:33:38 1994
-***************
-*** 82,86 ****
- */
- resfree = 0;
-! bzero((char *)resinit, sizeof resinit);
-
- for (i = 1; i < INITRESLIST; i++) {
---- 82,86 ----
- */
- resfree = 0;
-! memset((char *)resinit, 0, sizeof resinit);
-
- for (i = 1; i < INITRESLIST; i++) {
-***************
-*** 235,239 ****
- rl = (struct restrictlist *) emalloc(
- INCRESLIST*sizeof(struct restrictlist));
-! bzero((char *)rl,
- INCRESLIST*sizeof(struct restrictlist));
-
---- 235,239 ----
- rl = (struct restrictlist *) emalloc(
- INCRESLIST*sizeof(struct restrictlist));
-! memset((char *)rl, 0,
- INCRESLIST*sizeof(struct restrictlist));
-
-***************
-*** 281,285 ****
- rlprev->next = rl->next;
- restrictcount--;
-! bzero((char *)rl, sizeof(struct restrictlist));
-
- rl->next = resfree;
---- 281,285 ----
- rlprev->next = rl->next;
- restrictcount--;
-! memset((char *)rl, 0, sizeof(struct restrictlist));
-
- rl->next = resfree;
-*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
---- xntpd/ntp_util.c Wed Jan 26 16:33:39 1994
-***************
-*** 224,230 ****
- stats_drift_file = emalloc((u_int)(len + 1));
- stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP")));
-! bcopy(value, stats_drift_file, len+1);
-! bcopy(value, stats_temp_file, len);
-! bcopy(".TEMP", stats_temp_file + len, sizeof(".TEMP"));
- L_CLR(&old_drift);
-
---- 224,230 ----
- stats_drift_file = emalloc((u_int)(len + 1));
- stats_temp_file = emalloc((u_int)(len + sizeof(".TEMP")));
-! memmove(stats_drift_file, value, len+1);
-! memmove(stats_temp_file, value, len);
-! memmove(stats_temp_file + len, ".TEMP", sizeof(".TEMP"));
- L_CLR(&old_drift);
-
-***************
-*** 450,454 ****
- key_file_name = emalloc((u_int)(len + 1));
-
-! bcopy(keyfile, key_file_name, len+1);
-
- authreadkeys(key_file_name);
---- 450,454 ----
- key_file_name = emalloc((u_int)(len + 1));
-
-! memmove(key_file_name, keyfile, len+1);
-
- authreadkeys(key_file_name);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
---- xntpd/refclock_as2201.c Wed Jan 26 16:33:39 1994
-***************
-*** 251,256 ****
- * Just zero the data arrays
- */
-! bzero((char *)gpsunits, sizeof gpsunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 251,256 ----
- * Just zero the data arrays
- */
-! memset((char *)gpsunits, 0, sizeof gpsunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 442,446 ****
- }
- }
-! bzero((char *)gps, sizeof(struct gpsunit));
- gpsunits[unit] = gps;
-
---- 442,446 ----
- }
- }
-! memset((char *)gps, 0, sizeof(struct gpsunit));
- gpsunits[unit] = gps;
-
-***************
-*** 480,484 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(GPSREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(GPSHSREFID);
---- 480,484 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, GPSREFID, 4);
- else
- peer->refid = htonl(GPSHSREFID);
-***************
-*** 908,913 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(GPSREFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(GPSHSREFID);
---- 908,913 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! GPSREFID, 4);
- else
- peer->refid = htonl(GPSHSREFID);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:52 1994
---- xntpd/refclock_chu.c Wed Jan 26 16:33:39 1994
-***************
-*** 294,299 ****
- * Just zero the data arrays
- */
-! bzero((char *)chuunits, sizeof chuunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 294,299 ----
- * Just zero the data arrays
- */
-! memset((char *)chuunits, 0, sizeof chuunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 462,466 ****
- }
- }
-! bzero((char *)chu, sizeof(struct chuunit));
- chuunits[unit] = chu;
-
---- 462,466 ----
- }
- }
-! memset((char *)chu, 0, sizeof(struct chuunit));
- chuunits[unit] = chu;
-
-***************
-*** 499,507 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(CHUREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(CHUHSREFID);
- unitinuse[unit] = 1;
-! return 1;
-
- /*
---- 499,507 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, CHUREFID, 4);
- else
- peer->refid = htonl(CHUHSREFID);
- unitinuse[unit] = 1;
-! return (1);
-
- /*
-***************
-*** 1091,1095 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(CHUREFID, (char *)&peer->refid,4);
- else
- peer->refid = htonl(CHUHSREFID);
---- 1091,1096 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! CHUREFID, 4);
- else
- peer->refid = htonl(CHUHSREFID);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
---- xntpd/refclock_goes.c Wed Jan 26 16:33:39 1994
-***************
-*** 211,216 ****
- * Just zero the data arrays
- */
-! bzero((char *)goesunits, sizeof goesunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 211,216 ----
- * Just zero the data arrays
- */
-! memset((char *)goesunits, 0, sizeof goesunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 401,405 ****
- }
- }
-! bzero((char *)goes, sizeof(struct goesunit));
- goesunits[unit] = goes;
-
---- 401,405 ----
- }
- }
-! memset((char *)goes, 0, sizeof(struct goesunit));
- goesunits[unit] = goes;
-
-***************
-*** 429,433 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(GOESREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(GOESHSREFID);
---- 429,433 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, GOESREFID, 4);
- else
- peer->refid = htonl(GOESHSREFID);
-***************
-*** 924,929 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(GOESREFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(GOESHSREFID);
---- 924,929 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! GOESREFID, 4);
- else
- peer->refid = htonl(GOESHSREFID);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
---- xntpd/refclock_gpstm.c Wed Jan 26 16:52:22 1994
-***************
-*** 18,22 ****
- #ifdef SYS_BSDI
- #undef HAVE_BSD_TTYS
-- #define HAVE_POSIX_TTYS
- #include <sys/ioctl.h>
- #endif
---- 18,21 ----
-***************
-*** 30,34 ****
- #endif /* HAVE_SYSV_TTYS */
-
-! #if defined(HAVE_POSIX_TTYS)
- #include <termios.h>
- #endif
---- 29,33 ----
- #endif /* HAVE_SYSV_TTYS */
-
-! #if defined(HAVE_TERMIOS)
- #include <termios.h>
- #endif
-***************
-*** 203,208 ****
- * Just zero the data arrays
- */
-! bzero((char *)gpstm_units, sizeof gpstm_units);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 202,207 ----
- * Just zero the data arrays
- */
-! memset((char *)gpstm_units, 0, sizeof gpstm_units);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 278,282 ****
- }
- #endif /* HAVE_SYSV_TTYS */
-! #if defined(HAVE_POSIX_TTYS)
- /*
- * POSIX serial line parameters (termios interface)
---- 277,281 ----
- }
- #endif /* HAVE_SYSV_TTYS */
-! #if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
-***************
-*** 331,335 ****
- #endif /* STREAM */
- }
-! #endif /* HAVE_POSIX_TTYS */
- #if defined(HAVE_BSD_TTYS)
- /*
---- 330,334 ----
- #endif /* STREAM */
- }
-! #endif /* HAVE_TERMIOS */
- #if defined(HAVE_BSD_TTYS)
- /*
-***************
-*** 393,397 ****
- }
- }
-! bzero((char *)gpstm, sizeof(struct gpstm_unit));
- gpstm_units[unit] = gpstm;
-
---- 392,396 ----
- }
- }
-! memset((char *)gpstm, 0, sizeof(struct gpstm_unit));
- gpstm_units[unit] = gpstm;
-
-***************
-*** 420,424 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(REFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(HSREFID);
---- 419,423 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, REFID, 4);
- else
- peer->refid = htonl(HSREFID);
-***************
-*** 928,932 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(REFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(HSREFID);
---- 927,932 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! REFID, 4);
- else
- peer->refid = htonl(HSREFID);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
---- xntpd/refclock_irig.c Wed Jan 26 16:33:40 1994
-***************
-*** 170,175 ****
- * Just zero the data arrays
- */
-! bzero((char *) irigunits, sizeof irigunits);
-! bzero((char *) unitinuse, sizeof unitinuse);
-
- /*
---- 170,175 ----
- * Just zero the data arrays
- */
-! memset((char *) irigunits, 0, sizeof irigunits);
-! memset((char *) unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 251,255 ****
- }
- }
-! bzero((char *) irig, sizeof(struct irigunit));
-
- irigunits[unit] = irig;
---- 251,255 ----
- }
- }
-! memset((char *) irig, 0, sizeof(struct irigunit));
-
- irigunits[unit] = irig;
-***************
-*** 277,281 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(IRIGREFID, (char *) &peer->refid, 4);
- else
- peer->refid = htonl(IRIGHSREFID);
---- 277,281 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *) &peer->refid, IRIGREFID, 4);
- else
- peer->refid = htonl(IRIGHSREFID);
-***************
-*** 486,491 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(IRIGREFID, (char *) &peer->refid,
-! 4);
- else
- peer->refid = htonl(IRIGHSREFID);
---- 486,491 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *) &peer->refid,
-! IRIGREFID, 4);
- else
- peer->refid = htonl(IRIGHSREFID);
-*** /tmp/RCSA023543 Wed Jan 26 17:56:53 1994
---- xntpd/refclock_leitch.c Wed Jan 26 16:33:40 1994
-***************
-*** 145,150 ****
- leitch_init()
- {
-! bzero((char*)leitchunits,sizeof(leitchunits));
-! bzero((char*)unitinuse,sizeof(unitinuse));
- }
-
---- 145,150 ----
- leitch_init()
- {
-! memset((char*)leitchunits, 0, sizeof(leitchunits));
-! memset((char*)unitinuse, 0, sizeof(unitinuse));
- }
-
-***************
-*** 271,275 ****
-
- leitch = &leitchunits[unit];
-! bzero((char*)leitch,sizeof(*leitch));
-
- #if defined(HAVE_SYSV_TTYS)
---- 271,275 ----
-
- leitch = &leitchunits[unit];
-! memset((char*)leitch, 0, sizeof(*leitch));
-
- #if defined(HAVE_SYSV_TTYS)
-*** /tmp/RCSA023543 Wed Jan 26 17:56:54 1994
---- xntpd/refclock_local.c Wed Jan 26 16:33:40 1994
-***************
-*** 101,106 ****
- * Just zero the data arrays
- */
-! bzero((char *)lclunits, sizeof lclunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
- }
-
---- 101,106 ----
- * Just zero the data arrays
- */
-! memset((char *)lclunits, 0, sizeof lclunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
- }
-
-***************
-*** 149,153 ****
- }
- }
-! bzero((char *)lcl, sizeof(struct lclunit));
- lclunits[unit] = lcl;
-
---- 149,153 ----
- }
- }
-! memset((char *)lcl, 0, sizeof(struct lclunit));
- lclunits[unit] = lcl;
-
-***************
-*** 167,171 ****
- peer->stratum = (u_char)unit;
- if (unit <= 1)
-! bcopy(LCLREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(LCLHSREFID);
---- 167,171 ----
- peer->stratum = (u_char)unit;
- if (unit <= 1)
-! memmove((char *)&peer->refid, LCLREFID, 4);
- else
- peer->refid = htonl(LCLHSREFID);
-*** /tmp/RCSA023576 Wed Jan 26 17:56:54 1994
---- xntpd/refclock_msfees.c Wed Jan 26 16:33:41 1994
-***************
-*** 380,385 ****
- register int i;
- /* Just zero the data arrays */
-! bzero((char *)eesunits, sizeof eesunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- acceptable_slop.l_ui = 0;
---- 380,385 ----
- register int i;
- /* Just zero the data arrays */
-! memset((char *)eesunits, 0, sizeof eesunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- acceptable_slop.l_ui = 0;
-***************
-*** 507,511 ****
- else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
- }
-! bzero((char *)ees, sizeof(struct eesunit));
- eesunits[unit] = ees;
-
---- 507,511 ----
- else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
- }
-! memset((char *)ees, 0, sizeof(struct eesunit));
- eesunits[unit] = ees;
-
-***************
-*** 548,553 ****
- if (!io_addclock(&ees->io)) {
- /* Oh shit. Just close and return. */
-! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m",
-! eesdev);
- goto screwed;
- }
---- 548,552 ----
- if (!io_addclock(&ees->io)) {
- /* Oh shit. Just close and return. */
-! syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev);
- goto screwed;
- }
-***************
-*** 560,575 ****
- peer->rootdelay = 0; /* ++++ */
- peer->rootdispersion = 0; /* ++++ */
-! if (stratumtouse[unit] <= 1)
-! { bcopy(EESREFID, (char *)&peer->refid, 4);
-! if (unit>0 && unit<10) ((char *)&peer->refid)[3] = '0' + unit;
- }
-- else peer->refid = htonl(EESHSREFID);
- unitinuse[unit] = 1;
- syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
-! return 1;
-
- screwed:
-! if (fd232 != -1) (void) close(fd232);
-! return 0;
- }
-
---- 559,577 ----
- peer->rootdelay = 0; /* ++++ */
- peer->rootdispersion = 0; /* ++++ */
-! if (stratumtouse[unit] <= 1) {
-! memmove((char *)&peer->refid, EESREFID, 4);
-! if (unit > 0 && unit < 10)
-! ((char *)&peer->refid)[3] = '0' + unit;
-! } else {
-! peer->refid = htonl(EESHSREFID);
- }
- unitinuse[unit] = 1;
- syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
-! return (1);
-
- screwed:
-! if (fd232 != -1)
-! (void) close(fd232);
-! return (0);
- }
-
-***************
-*** 860,864 ****
- sincelast = this_uisec - ees->last_step;
-
-! bzero(&ppsclockev, sizeof ppsclockev);
-
- rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
---- 862,866 ----
- sincelast = this_uisec - ees->last_step;
-
-! memset(&ppsclockev, 0, sizeof ppsclockev);
-
- rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
-***************
-*** 1444,1449 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1) {
-! bcopy(EESREFID, (char *)&peer->refid,
-! 4);
- if (unit>0 && unit<10)
- ((char *)&peer->refid)[3] =
---- 1446,1451 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1) {
-! memmove((char *)&peer->refid,
-! EESREFID, 4);
- if (unit>0 && unit<10)
- ((char *)&peer->refid)[3] =
-*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994
---- xntpd/refclock_mx4200.c Wed Jan 26 16:33:41 1994
-***************
-*** 263,268 ****
- * Just zero the data arrays
- */
-! bzero((char *)mx4200units, sizeof mx4200units);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 263,268 ----
- * Just zero the data arrays
- */
-! memset((char *)mx4200units, 0, sizeof mx4200units);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 487,491 ****
- }
-
-! bzero((char *)mx4200, sizeof(struct mx4200unit));
- mx4200units[unit] = mx4200;
-
---- 487,491 ----
- }
-
-! memset((char *)mx4200, 0, sizeof(struct mx4200unit));
- mx4200units[unit] = mx4200;
-
-***************
-*** 513,517 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(MX4200REFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(MX4200HSREFID);
---- 513,517 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, MX4200REFID, 4);
- else
- peer->refid = htonl(MX4200HSREFID);
-***************
-*** 702,706 ****
- return;
- mx4200->lencode = n;
-! bcopy(dpt, mx4200->lastcode, n);
-
- /*
---- 702,706 ----
- return;
- mx4200->lencode = n;
-! memmove(mx4200->lastcode, dpt, n);
-
- /*
-***************
-*** 1052,1057 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(MX4200REFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(MX4200HSREFID);
---- 1052,1057 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! MX4200REFID, 4);
- else
- peer->refid = htonl(MX4200HSREFID);
-***************
-*** 1116,1120 ****
- mx4200 = mx4200units[unit];
-
-! bzero((char *)bug, sizeof(*bug));
- bug->nvalues = 10;
- bug->ntimes = 2;
---- 1116,1120 ----
- mx4200 = mx4200units[unit];
-
-! memset((char *)bug, 0, sizeof(*bug));
- bug->nvalues = 10;
- bug->ntimes = 2;
-***************
-*** 1212,1216 ****
-
- cp = buf;
-! bzero((char *)jt, sizeof(*jt));
-
- if ((cp = strchr(cp, ',')) == NULL)
---- 1212,1216 ----
-
- cp = buf;
-! memset((char *)jt, 0, sizeof(*jt));
-
- if ((cp = strchr(cp, ',')) == NULL)
-*** /tmp/RCSA023576 Wed Jan 26 17:56:55 1994
---- xntpd/refclock_omega.c Wed Jan 26 16:33:42 1994
-***************
-*** 227,232 ****
- * Just zero the data arrays
- */
-! bzero((char *)omegaunits, sizeof omegaunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 227,232 ----
- * Just zero the data arrays
- */
-! memset((char *)omegaunits, 0, sizeof omegaunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 417,421 ****
- }
- }
-! bzero((char *)omega, sizeof(struct omegaunit));
- omegaunits[unit] = omega;
-
---- 417,421 ----
- }
- }
-! memset((char *)omega, 0, sizeof(struct omegaunit));
- omegaunits[unit] = omega;
-
-***************
-*** 445,449 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(OMEGAREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(OMEGAHSREFID);
---- 445,449 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, OMEGAREFID, 4);
- else
- peer->refid = htonl(OMEGAHSREFID);
-***************
-*** 928,933 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(OMEGAREFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(OMEGAHSREFID);
---- 928,933 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! OMEGAREFID, 4);
- else
- peer->refid = htonl(OMEGAHSREFID);
-*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994
---- xntpd/refclock_parse.c Wed Jan 26 16:33:42 1994
-***************
-*** 1068,1072 ****
- return;
- }
-! bcopy((caddr_t)&rbufp->recv_space, (caddr_t)&parsetime, sizeof(parsetime_t));
-
- /*
---- 1068,1074 ----
- return;
- }
-! memmove((caddr_t)&parsetime,
-! (caddr_t)&rbufp->recv_space,
-! sizeof(parsetime_t));
-
- /*
-***************
-*** 2009,2013 ****
- parse_init()
- {
-! bzero((caddr_t)parseunits, sizeof parseunits);
- }
-
---- 2011,2015 ----
- parse_init()
- {
-! memset((caddr_t)parseunits, 0, sizeof parseunits);
- }
-
-***************
-*** 2169,2173 ****
- }
-
-! bzero((char *)parse, sizeof(struct parseunit));
- parseunits[unit] = parse;
-
---- 2171,2175 ----
- }
-
-! memset((char *)parse, 0, sizeof(struct parseunit));
- parseunits[unit] = parse;
-
-***************
-*** 2204,2208 ****
- peer->stratum = STRATUM_REFCLOCK;
- if (peer->stratum <= 1)
-! bcopy(parse->parse_type->cl_id, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(PARSEHSREFID);
---- 2206,2210 ----
- peer->stratum = STRATUM_REFCLOCK;
- if (peer->stratum <= 1)
-! memmove((char *)&peer->refid, parse->parse_type->cl_id, 4);
- else
- peer->refid = htonl(PARSEHSREFID);
-***************
-*** 2233,2237 ****
- {
- #ifndef _PC_VDISABLE
-! bzero((char *)tm.c_cc, sizeof(tm.c_cc));
- #else
- int disablec;
---- 2235,2239 ----
- {
- #ifndef _PC_VDISABLE
-! memset((char *)tm.c_cc, 0, sizeof(tm.c_cc));
- #else
- int disablec;
-***************
-*** 2587,2591 ****
- parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
- if (parse->peer->stratum <= 1)
-! bcopy(parse->parse_type->cl_id, (char *)&parse->peer->refid, 4);
- else
- parse->peer->refid = htonl(PARSEHSREFID);
---- 2589,2595 ----
- parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
- if (parse->peer->stratum <= 1)
-! memmove((char *)&parse->peer->refid,
-! parse->parse_type->cl_id,
-! 4);
- else
- parse->peer->refid = htonl(PARSEHSREFID);
-***************
-*** 3280,3284 ****
- {
- parse->localdata = (void *)malloc(sizeof(poll_timer_t));
-! bzero((char *)parse->localdata, sizeof(poll_timer_t));
-
- pt = (poll_timer_t *)parse->localdata;
---- 3284,3288 ----
- {
- parse->localdata = (void *)malloc(sizeof(poll_timer_t));
-! memset((char *)parse->localdata, 0, sizeof(poll_timer_t));
-
- pt = (poll_timer_t *)parse->localdata;
-*** /tmp/RCSA023576 Wed Jan 26 17:56:56 1994
---- xntpd/refclock_pst.c Wed Jan 26 16:33:42 1994
-***************
-*** 438,443 ****
- * Just zero the data arrays
- */
-! bzero((char *)pstunits, sizeof pstunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 438,443 ----
- * Just zero the data arrays
- */
-! memset((char *)pstunits, 0, sizeof pstunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 630,634 ****
- }
- }
-! bzero((char *)pst, sizeof(struct pstunit));
- pstunits[unit] = pst;
-
---- 630,634 ----
- }
- }
-! memset((char *)pst, 0, sizeof(struct pstunit));
- pstunits[unit] = pst;
-
-***************
-*** 663,667 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(WWVREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(PSTHSREFID);
---- 663,667 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, WWVREFID, 4);
- else
- peer->refid = htonl(PSTHSREFID);
-***************
-*** 1461,1467 ****
- if (stratumtouse[pst->unit] <= 1) {
- if (pst->station >= 0)
-! bcopy(WWVREFID, (char *)&pst->peer->refid, 4);
- else
-! bcopy(WWVHREFID, (char *)&pst->peer->refid, 4);
- }
-
---- 1461,1467 ----
- if (stratumtouse[pst->unit] <= 1) {
- if (pst->station >= 0)
-! memmove((char *)&pst->peer->refid, WWVREFID, 4);
- else
-! memmove((char *)&pst->peer->refid, WWVHREFID, 4);
- }
-
-*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994
---- xntpd/refclock_tpro.c Wed Jan 26 16:33:43 1994
-***************
-*** 131,136 ****
- * Just zero the data arrays
- */
-! bzero((char *)tprounits, sizeof tprounits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 131,136 ----
- * Just zero the data arrays
- */
-! memset((char *)tprounits, 0, sizeof tprounits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 201,205 ****
- }
- }
-! bzero((char *)tpro, sizeof(struct tprounit));
- tprounits[unit] = tpro;
-
---- 201,205 ----
- }
- }
-! memset((char *)tpro, 0, sizeof(struct tprounit));
- tprounits[unit] = tpro;
-
-***************
-*** 226,230 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(TPROREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(TPROHSREFID);
---- 226,230 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, TPROREFID, 4);
- else
- peer->refid = htonl(TPROHSREFID);
-***************
-*** 416,421 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(TPROREFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(TPROHSREFID);
---- 416,421 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! TPROREFID, 4);
- else
- peer->refid = htonl(TPROHSREFID);
-*** /tmp/RCSA023576 Wed Jan 26 17:56:57 1994
---- xntpd/refclock_wwvb.c Wed Jan 26 16:33:43 1994
-***************
-*** 220,225 ****
- * Just zero the data arrays
- */
-! bzero((char *)wwvbunits, sizeof wwvbunits);
-! bzero((char *)unitinuse, sizeof unitinuse);
-
- /*
---- 220,225 ----
- * Just zero the data arrays
- */
-! memset((char *)wwvbunits, 0, sizeof wwvbunits);
-! memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
-***************
-*** 408,412 ****
- }
- }
-! bzero((char *)wwvb, sizeof(struct wwvbunit));
- wwvbunits[unit] = wwvb;
-
---- 408,412 ----
- }
- }
-! memset((char *)wwvb, 0, sizeof(struct wwvbunit));
- wwvbunits[unit] = wwvb;
-
-***************
-*** 436,440 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(WWVBREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(WWVBHSREFID);
---- 436,440 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid, WWVBREFID, 4);
- else
- peer->refid = htonl(WWVBHSREFID);
-***************
-*** 957,962 ****
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! bcopy(WWVBREFID, (char *)&peer->refid,
-! 4);
- else
- peer->refid = htonl(WWVBHSREFID);
---- 957,962 ----
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
-! memmove((char *)&peer->refid,
-! WWVBREFID, 4);
- else
- peer->refid = htonl(WWVBHSREFID);
-*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994
---- xntpdc/ntpdc.c Wed Jan 26 16:33:43 1994
-***************
-*** 222,227 ****
- int c;
- int errflg = 0;
-! extern int optind;
-! extern char *optarg;
-
- delay_time.l_ui = 0;
---- 222,227 ----
- int c;
- int errflg = 0;
-! extern int ntp_optind;
-! extern char *ntp_optarg;
-
- delay_time.l_ui = 0;
-***************
-*** 229,236 ****
-
- progname = argv[0];
-! while ((c = getopt_l(argc, argv, "c:dilnps")) != EOF)
- switch (c) {
- case 'c':
-! ADDCMD(optarg);
- break;
- case 'd':
---- 229,236 ----
-
- progname = argv[0];
-! while ((c = ntp_getopt(argc, argv, "c:dilnps")) != EOF)
- switch (c) {
- case 'c':
-! ADDCMD(ntp_optarg);
- break;
- case 'd':
-***************
-*** 262,270 ****
- exit(2);
- }
-! if (optind == argc) {
- ADDHOST(DEFHOST);
- } else {
-! for (; optind < argc; optind++)
-! ADDHOST(argv[optind]);
- }
-
---- 262,270 ----
- exit(2);
- }
-! if (ntp_optind == argc) {
- ADDHOST(DEFHOST);
- } else {
-! for (; ntp_optind < argc; ntp_optind++)
-! ADDHOST(argv[ntp_optind]);
- }
-
-***************
-*** 440,444 ****
- *rdata = datap = pktdata;
- lastseq = 999; /* too big to be a sequence number */
-! bzero(haveseq, sizeof(haveseq));
- FD_ZERO(&fds);
-
---- 440,444 ----
- *rdata = datap = pktdata;
- lastseq = 999; /* too big to be a sequence number */
-! memset(haveseq, 0, sizeof(haveseq));
- FD_ZERO(&fds);
-
-***************
-*** 601,605 ****
- if ((datap + datasize) > (pktdata + pktdatasize))
- growpktdata();
-! bcopy((char *)rpkt.data, datap, datasize);
- datap += datasize;
- if (firstpkt) {
---- 601,605 ----
- if ((datap + datasize) > (pktdata + pktdatasize))
- growpktdata();
-! memmove(datap, (char *)rpkt.data, datasize);
- datap += datasize;
- if (firstpkt) {
-***************
-*** 635,639 ****
- int datasize;
-
-! bzero((char *)&qpkt, sizeof qpkt);
-
- qpkt.rm_vn_mode = RM_VN_MODE(0, 0);
---- 635,639 ----
- int datasize;
-
-! memset((char *)&qpkt, 0, sizeof qpkt);
-
- qpkt.rm_vn_mode = RM_VN_MODE(0, 0);
-***************
-*** 643,647 ****
- datasize = qitems * qsize;
- if (datasize != 0 && qdata != NULL) {
-! bcopy(qdata, (char *)qpkt.data, datasize);
- qpkt.err_nitems = ERR_NITEMS(0, qitems);
- qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize);
---- 643,647 ----
- datasize = qitems * qsize;
- if (datasize != 0 && qdata != NULL) {
-! memmove((char *)qpkt.data, qdata, datasize);
- qpkt.err_nitems = ERR_NITEMS(0, qitems);
- qpkt.mbz_itemsize = MBZ_ITEMSIZE(qsize);
-***************
-*** 1092,1096 ****
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! bcopy(hp->h_addr, (char *)num, sizeof(U_LONG));
- if (fullhost != 0)
- (void) strcpy(fullhost, hp->h_name);
---- 1092,1096 ----
- return 1;
- } else if ((hp = gethostbyname(host)) != 0) {
-! memmove((char *)num, hp->h_addr, sizeof(U_LONG));
- if (fullhost != 0)
- (void) strcpy(fullhost, hp->h_name);
-*** /tmp/RCSA023592 Wed Jan 26 17:56:58 1994
---- xntpdc/ntpdc_ops.c Wed Jan 26 16:33:44 1994
-***************
-*** 443,447 ****
- if (pp->stratum <= 1) {
- junk[4] = 0;
-! bcopy((char *)&pp->refid, junk, 4);
- str = junk;
- } else {
---- 443,447 ----
- if (pp->stratum <= 1) {
- junk[4] = 0;
-! memmove(junk, (char *)&pp->refid, 4);
- str = junk;
- } else {
-***************
-*** 789,793 ****
- if (is->stratum <= 1) {
- junk[4] = 0;
-! bcopy((char *)&is->refid, junk, 4);
- str = junk;
- } else {
---- 789,793 ----
- if (is->stratum <= 1) {
- junk[4] = 0;
-! memmove(junk, (char *)&is->refid, 4);
- str = junk;
- } else {
-***************
-*** 2193,2197 ****
-
- err = 0;
-! bzero((char *)&fudgedata, sizeof fudgedata);
- fudgedata.clockadr = pcmd->argval[0].netnum;
-
---- 2193,2197 ----
-
- err = 0;
-! memset((char *)&fudgedata, 0, sizeof fudgedata);
- fudgedata.clockadr = pcmd->argval[0].netnum;
-
-*** /tmp/RCSA023598 Wed Jan 26 17:56:59 1994
---- xntpres/xntpres.c Wed Jan 26 16:33:44 1994
-***************
-*** 149,153 ****
- char *cp;
- FILE *in;
-! extern int optind;
-
- progname = argv[0];
---- 149,153 ----
- char *cp;
- FILE *in;
-! extern int ntp_optind;
-
- progname = argv[0];
-***************
-*** 181,185 ****
- syslog(LOG_NOTICE, Version);
-
-! while ((c = getopt_l(argc, argv, "dr")) != EOF)
- switch (c) {
- case 'd':
---- 181,185 ----
- syslog(LOG_NOTICE, Version);
-
-! while ((c = ntp_getopt(argc, argv, "dr")) != EOF)
- switch (c) {
- case 'd':
-***************
-*** 193,197 ****
- break;
- }
-! if (errflg || (optind + 3) != argc) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-r] keyid keyfile conffile\n", progname);
---- 193,197 ----
- break;
- }
-! if (errflg || (ntp_optind + 3) != argc) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-r] keyid keyfile conffile\n", progname);
-***************
-*** 200,210 ****
- }
-
-! if (!atouint(argv[optind], &req_keyid)) {
-! syslog(LOG_ERR, "undecodeable keyid %s", argv[optind]);
- exit(1);
- }
-
-! keyfile = argv[optind+1];
-! conffile = argv[optind+2];
-
- /*
---- 200,210 ----
- }
-
-! if (!atouint(argv[ntp_optind], &req_keyid)) {
-! syslog(LOG_ERR, "undecodeable keyid %s", argv[ntp_optind]);
- exit(1);
- }
-
-! keyfile = argv[ntp_optind+1];
-! conffile = argv[ntp_optind+2];
-
- /*
-***************
-*** 354,358 ****
- len = strlen(name) + 1;
- cp = emalloc((unsigned)len);
-! bcopy(name, cp, len);
-
- ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
---- 354,358 ----
- len = strlen(name) + 1;
- cp = emalloc((unsigned)len);
-! memmove(cp, name, len);
-
- ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
-***************
-*** 409,413 ****
- return 1;
- #endif
-! return 0;
- }
-
---- 409,413 ----
- return 1;
- #endif
-! return (0);
- }
-
-***************
-*** 417,423 ****
- * only return one.
- */
-! (void) bcopy(hp->h_addr, (char *)&(entry->ce_peeraddr),
-! sizeof(struct in_addr));
-! return 1;
- }
-
---- 417,424 ----
- * only return one.
- */
-! memmove((char *)&(entry->ce_peeraddr),
-! hp->h_addr,
-! sizeof(struct in_addr));
-! return (1);
- }
-
-***************
-*** 440,444 ****
- }
-
-! bzero((char *)&saddr, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(NTP_PORT); /* trash */
---- 441,445 ----
- }
-
-! memset((char *)&saddr, 0, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(NTP_PORT); /* trash */
-***************
-*** 500,504 ****
- * Make up a request packet with the configuration info
- */
-! bzero((char *)&reqpkt, sizeof(reqpkt));
-
- reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
---- 501,505 ----
- * Make up a request packet with the configuration info
- */
-! memset((char *)&reqpkt, 0, sizeof(reqpkt));
-
- reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
-***************
-*** 508,512 ****
- reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
- reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
-! bcopy((char *)conf, reqpkt.data, sizeof(struct conf_peer));
- reqpkt.keyid = htonl(req_keyid);
-
---- 509,513 ----
- reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
- reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
-! memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer));
- reqpkt.keyid = htonl(req_keyid);
-
-
diff --git a/usr.sbin/xntpd/patches/patch.40 b/usr.sbin/xntpd/patches/patch.40
deleted file mode 100644
index 7f1941d..0000000
--- a/usr.sbin/xntpd/patches/patch.40
+++ /dev/null
@@ -1,92 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa23994; 13 Apr 94 15:58 EDT
-Received: from adrastea.lcs.mit.edu by louie.udel.edu id aa07113;
- 13 Apr 94 15:44 EDT
-Received: by adrastea.lcs.mit.edu; id AA04845; Wed, 13 Apr 1994 15:44:23 -0400
-Date: Wed, 13 Apr 1994 15:44:23 -0400
-From: Garrett Wollman <wollman@adrastea.lcs.mit.edu>
-Message-Id: <9404131944.AA04845@adrastea.lcs.mit.edu>
-To: Mills@udel.edu
-Cc: Garrett Wollman <wollman@adrastea.lcs.mit.edu>,
- Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Subject: Re: You xntp modifications...
-In-Reply-To: <9404122159.aa18355@huey.udel.edu>
-References: <9404122159.aa18355@huey.udel.edu>
-
-<<On Tue, 12 Apr 94 21:59:57 EDT, Mills@udel.edu said:
-
-> Note that we are two versions further along, what with the average of
-> a patch per day, so it would be survivable if this issue could be
-> cleared up ASAP.
-
-This patch, applied relative to my previous patch, provides for both
-behaviors.
-
-
-*** xntpd/xntpd/ntp_control.c Wed Apr 13 12:37:51 1994
---- ntp_control.c Wed Apr 13 12:38:42 1994
-***************
-*** 264,271 ****
---- 264,283 ----
- /*
- * System and processor definitions. These will change for the gizmo board.
- */
-+ #ifndef HAVE_UNAME
-+ #ifndef STR_SYSTEM
-+ #define STR_SYSTEM "UNIX"
-+ #endif
-+ #ifndef STR_PROCESSOR
-+ #define STR_PROCESSOR "unknown"
-+ #endif
-+
-+ static char str_system[] = STR_SYSTEM;
-+ static char str_processor[] = STR_PROCESSOR;
-+ #else
- #include <sys/utsname.h>
- static struct utsname utsname;
-+ #endif /* HAVE_UNAME */
-
- /*
- * Trap structures. We only allow a few of these, and send
-***************
-*** 426,433 ****
---- 438,447 ----
- {
- int i;
-
-+ #ifdef HAVE_UNAME
- uname(&utsname);
-
-+ #endif /* HAVE_UNAME */
- ctl_clr_stats();
-
- ctl_auth_keyid = 0;
-***************
-*** 1262,1273 ****
---- 1276,1297 ----
- ctl_putuint(sys_var[CS_LEAPWARNING].text, (U_LONG)leap_warning);
- break;
- case CS_PROCESSOR:
-+ #ifndef HAVE_UNAME
-+ ctl_putstr(sys_var[CS_PROCESSOR].text, str_processor,
-+ sizeof(str_processor) - 1);
-+ #else
- ctl_putstr(sys_var[CS_PROCESSOR].text, utsname.machine,
- strlen(utsname.machine));
-+ #endif /* HAVE_UNAME */
- break;
- case CS_SYSTEM:
-+ #ifndef HAVE_UNAME
-+ ctl_putstr(sys_var[CS_SYSTEM].text, str_system,
-+ sizeof(str_system) - 1);
-+ #else
- ctl_putstr(sys_var[CS_SYSTEM].text, utsname.sysname,
- strlen(utsname.sysname));
-+ #endif /* HAVE_UNAME */
- break;
- case CS_KEYID:
- ctl_putuint(sys_var[CS_KEYID].text, (U_LONG)0);
-
-
-[no save]
-
diff --git a/usr.sbin/xntpd/patches/patch.41 b/usr.sbin/xntpd/patches/patch.41
deleted file mode 100644
index 5d1f91c..0000000
--- a/usr.sbin/xntpd/patches/patch.41
+++ /dev/null
@@ -1,50 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa13197; 16 Apr 94 22:05 EDT
-Received: from motgate.mot.com by louie.udel.edu id aa18176; 16 Apr 94 21:57 EDT
-Received: from pobox.mot.com ([129.188.137.100]) by motgate.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
- id AA01015; Sat, 16 Apr 1994 20:57:21 -0500
-Received: from merlin.dev.cdx.mot.com by pobox.mot.com with SMTP (5.67b/IDA-1.4.4/MOT-3.1 for <mills@udel.edu>)
- id AA29067; Sat, 16 Apr 1994 20:57:19 -0500
-Received: from ronald.dev.cdx.mot.com (ronald.dev.cdx.mot.com [134.33.39.18]) by merlin.dev.cdx.mot.com (8.6.5/8.6.5) with ESMTP id VAA06544; Sat, 16 Apr 1994 21:57:12 -0400
-From: "Gregory M. Paris" <paris@merlin.dev.cdx.mot.com>
-Received: from localhost (paris@localhost) by ronald.dev.cdx.mot.com (8.6.5/8.6.5) id VAA22231; Sat, 16 Apr 1994 21:57:11 -0400
-Date: Sat, 16 Apr 1994 21:57:11 -0400
-Message-Id: <199404170157.VAA22231@ronald.dev.cdx.mot.com>
-To: mills@udel.edu
-Subject: 3.3y patch
-
-Dave,
-
-I had the same problem compiling 3.3p as I got with 3.3y. The fix
-was to move a #endif that seems to be out of place in xntpd/ntp_unixclock.c.
-It now compiles fine on my HP-UX 9.03. Here's the patch.
-
-Greg
-
---
-Greg Paris <paris@merlin.dev.cdx.mot.com>
-Motorola Inc, Information Systems Group, 20 Cabot Blvd, Mansfield, MA 02048-1193
-"Your Plastic Pal who's fun to be with." TM Sirius Cybernetics
-These posts are self-disclamatory.
-
-##################################################
-*** xntpd/ntp_unixclock.c.orig Mon Apr 11 22:19:21 1994
---- xntpd/ntp_unixclock.c Sat Apr 16 21:49:15 1994
-***************
-*** 386,391 ****
---- 386,392 ----
- #undef K_TICK_NAME
- #undef N_NAME
- }
-+ #endif /* SYS_UNIXWARE1 */
- #endif /* HAVE_READKMEM */
-
- #if defined(SOLARIS)&&defined(ADJTIME_IS_ACCURATE)
-***************
-*** 583,586 ****
- *tick = (U_LONG)txc.tick;
- }
- #endif /* SYS_LINUX */
-- #endif /* SYS_UNIXWARE1 */
---- 584,586 ----
-
diff --git a/usr.sbin/xntpd/patches/patch.42 b/usr.sbin/xntpd/patches/patch.42
deleted file mode 100644
index 78c9bdf..0000000
--- a/usr.sbin/xntpd/patches/patch.42
+++ /dev/null
@@ -1,38 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa00358; 19 Apr 94 17:48 EDT
-Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa12986;
- 19 Apr 94 17:40 EDT
-Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
- with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:39:48 +0100
-To: Mills@udel.edu
-cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
-Subject: Re: Multicast NTP - take 1
-In-reply-to: Your message of Tue, 19 Apr 1994 12:29:25 -0400. <9404191229.aa28742@huey.udel.edu>
-Date: Tue, 19 Apr 1994 22:39:44 +0100
-From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
-Message-ID: <"swan.cl.cam.:138990:940419214000"@cl.cam.ac.uk>
-
-Shucks !
-
-I omitted the "-c" to diff ...
-
-*** xntpd/refclock_msfees.c.dist Thu Jan 27 14:03:59 1994
---- xntpd/refclock_msfees.c Tue Apr 19 10:58:57 1994
-***************
-*** 139,145 ****
- #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
-
- #ifndef STREAM_PP1
-! #define STREAM_PP1 "ppsclockd\0<-- patch space for module name1 -->"
- #endif
- #ifndef STREAM_PP2
- #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
---- 139,145 ----
- #define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
-
- #ifndef STREAM_PP1
-! #define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
- #endif
- #ifndef STREAM_PP2
- #define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
-
diff --git a/usr.sbin/xntpd/patches/patch.43 b/usr.sbin/xntpd/patches/patch.43
deleted file mode 100644
index 92f9200..0000000
--- a/usr.sbin/xntpd/patches/patch.43
+++ /dev/null
@@ -1,48 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa00412; 19 Apr 94 18:04 EDT
-Received: from swan.cl.cam.ac.uk by louie.udel.edu id aa13181;
- 19 Apr 94 17:44 EDT
-Received: from labes.cl.cam.ac.uk (user pb (rfc931)) by swan.cl.cam.ac.uk
- with SMTP (PP-6.5) to cl; Tue, 19 Apr 1994 22:44:05 +0100
-To: Mills@udel.edu
-cc: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
-Subject: Re: Cisco/Multicast/ntp3.3m
-In-reply-to: Your message of Tue, 19 Apr 1994 12:24:31 -0400. <9404191224.aa28707@huey.udel.edu>
-Date: Tue, 19 Apr 1994 22:43:58 +0100
-From: Piete Brooks <Piete.Brooks@cl.cam.ac.uk>
-Message-ID: <"swan.cl.cam.:140740:940419214417"@cl.cam.ac.uk>
-
-> Yes, I think you have caught all the gotchas.
-
-I fear not :-((
-
-> I take it you have the latest kernel mods.
-
-Look for a call sign I assume ....
-Do I take it that they are **REQUIRED** ? :-(((
-
-
-Other problems .....
-
-It appears that you have your own in.h in include/ntp_in.h
-
-I suspect that that is why things are failing ...
-Why not use the syatem's own in.h ??
-
-To make it compile I added:
-
-*** include/ntp_in.h.dist Thu Apr 14 16:20:29 1994
---- include/ntp_in.h Tue Apr 19 21:40:12 1994
-***************
-*** 19,24 ****
---- 19,27 ----
-
- #ifndef _netinet_in_h
- #define _netinet_in_h
-+ #define _NETINET_IN_H_
-+ #define _SYS_IN_INCLUDED
-+ #define __IN_HEADER
-
- /*
- * Protocols
-
diff --git a/usr.sbin/xntpd/patches/patch.5 b/usr.sbin/xntpd/patches/patch.5
deleted file mode 100644
index 2225804..0000000
--- a/usr.sbin/xntpd/patches/patch.5
+++ /dev/null
@@ -1,49 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa14816; 27 Jan 94 5:15 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa11733;
- 27 Jan 94 5:09 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA25056 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 11:09:06 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA09091 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 11:09:03 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199401271009.AA09091@faui43.informatik.uni-erlangen.de>
-Subject: Re: Solaribum
-To: Mills@udel.edu
-Date: Thu, 27 Jan 94 11:08:55 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
- Paul_Vixie@corpmis.sjc.hw.sony.com
-In-Reply-To: <9401261207.aa10860@huey.udel.edu>; from "Mills@udel.edu" at Jan 26, 94 12:07 pm
-X-Mailer: ELM [version 2.3 PL11]
-
-
-And another corer generator to be removed:
-
-===================================================================
-RCS file: /src/NTP/REPOSITORY/v3/xntpd/ntp_control.c,v
-retrieving revision 3.22
-diff -c -r3.22 xntpd/ntp_control.c
-*** xntpd/ntp_control.c:3.22 1994/01/26 21:56:23
---- xntpd/ntp_control.c 1994/01/27 10:03:01
-***************
-*** 2132,2138 ****
- for (i = 1; i <= CC_MAXCODE; i++)
- if (wants[i])
- ctl_putclock(i, &clock, 1);
-! for (i = 0; !(clock.kv_list[i].flags & EOV); i++)
- if (wants[i+CC_MAXCODE+1])
- ctl_putdata(clock.kv_list[i].text,
- strlen(clock.kv_list[i].text), 0);
---- 2132,2138 ----
- for (i = 1; i <= CC_MAXCODE; i++)
- if (wants[i])
- ctl_putclock(i, &clock, 1);
-! for (i = 0; clock.kv_list && !(clock.kv_list[i].flags & EOV); i++)
- if (wants[i+CC_MAXCODE+1])
- ctl_putdata(clock.kv_list[i].text,
- strlen(clock.kv_list[i].text), 0);
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.6 b/usr.sbin/xntpd/patches/patch.6
deleted file mode 100644
index 220acad..0000000
--- a/usr.sbin/xntpd/patches/patch.6
+++ /dev/null
@@ -1,550 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa17107; 27 Jan 94 14:37 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa16998;
- 27 Jan 94 14:34 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA29914 (5.65c-6/7.3v-FAU); Thu, 27 Jan 1994 20:34:08 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA23509 (5.65c-6/7.3m-FAU); Thu, 27 Jan 1994 20:34:05 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199401271934.AA23509@faui43.informatik.uni-erlangen.de>
-Subject: Re: Solaribum
-To: Mills@udel.edu
-Date: Thu, 27 Jan 94 20:33:59 MET
-Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk,
- Paul_Vixie@corpmis.sjc.hw.sony.com
-In-Reply-To: <9401271111.aa16183@huey.udel.edu>; from "Mills@udel.edu" at Jan 27, 94 11:11 am
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> Guys,
-
-> Two masive patches collided in midair here, leaving broken parts scattered
-> over three counties. The National Time Safety Board has investigated,
-> but been unable, ...
-
-Additional efforts of the european branch of the NTPSB have uncovered
-that the collision was due to low visibility across the atlantic.
-
-And I wanted to go on:
- All measures have been taken to limit the effects of the crash to a
- minimum and to resume normal aircraft operation as soon as possible.
-
- All crew members and passengers are required to apply following patch
- to xntp3.3y.tar.Z for increased comfort and safety. This patch should
- enable us to resume normal operation again.
-
- After applying the patches you may remove following debris:
-
- include/ntp_machine.h.rej
- xntpd/ntp_config.c.rej
- xntpd/ntp_control.c.rej
-
-Unfortunately I did a test compile and the results of that will
-extend the ground stay of the 3.3y aircraft considerably.
-(You may start thinking about bringing up 3.3xx - see below)
-
-SunOS 4.x.x does NOT have the new highly portable "memmove()"
-routine. The lack of this will mean that we will have to
-#define memmove(a, b, c) memcpy(a, b, c)
-or find something else. I'd like to leave this to Paul.
-Also on Sunos 4.x there are implicit declarations of bzero due
-the the FDSET macro from the system header files. So I am not
-so sure whether strictly using mem* is the best or whether we should
-add b* prototypes to l_stdlib.h. I think Paul has now something
-to work on. Anyhow, the patches below will rectify some problems
-but the resulting code still needs much polishing (providing memmove
-where it is missing e.g. SunOS4.x).
-
-In order to get a flying version fast (3.3xx) Dave could apply my
-patch he is holding to 3.3x - that should then make a workable
-version. 3.3y can then be cleaned up slowly (starting with the
-patches below and then port it again to the rest of the systems).
-
-Sorry about the bad news.
-
-> I have one more patch from Frank which I will hold on to until the aircraft
-> is recertified.
-
-That one is still to be applied because without it, it is possible
-to shoot down any plane around the NTP universe that is bearing
-the 3.3x banner (but can be applied to 3.3x).
-
-
-For the 3.3y construction crew:
-
-diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
-*** ../yy/include/ntp_machine.h Thu Jan 27 15:03:23 1994
---- ./include/ntp_machine.h Thu Jan 27 19:13:35 1994
-***************
-*** 121,139 ****
- to the correct broadcast address - are these
- implementations broken or did the spec change ?
-
-- HAVE_UNISTD_H - Maybe should be part of NTP_POSIX_SOURCE ?
--
- DEFINITIONS FOR SYSTEM && PROCESSOR
- STR_SYSTEM - value of system variable
- STR_PROCESSOR - value of processor variable
-
- You could just put the defines on the DEFS line in machines/<os> file.
-! I don't since there are lost of different types compiler that a systemm might
-! have, some that can do proto typing and others that cannot on the saem system.
-! I get a chanse to twiddle some of the configuration paramasters at compile
-! time based on compler/machine combinatsions by using this include file.
-! See convex, aix and sun configurations see how complex it gets.
-!
- */
-
-
---- 121,141 ----
- to the correct broadcast address - are these
- implementations broken or did the spec change ?
-
- DEFINITIONS FOR SYSTEM && PROCESSOR
- STR_SYSTEM - value of system variable
- STR_PROCESSOR - value of processor variable
-
- You could just put the defines on the DEFS line in machines/<os> file.
-! I don't since there are lots of different types of compilers that a system might
-! have, some that can do proto typing and others that cannot on the same system.
-! I get a chance to twiddle some of the configuration parameters at compile
-! time based on compiler/machine combinations by using this include file.
-! See convex, aix and sun configurations see how complex it get.
-!
-! Note that it _is_ considered reasonable to add some system-specific defines
-! to the machine/<os> file if it would be too inconvenient to puzzle them out
-! in this file.
-!
- */
-
-
-diff -c -r ../yy/parse/parse.c ./parse/parse.c
-*** ../yy/parse/parse.c Thu Jan 27 00:25:18 1994
---- ./parse/parse.c Thu Jan 27 20:18:58 1994
-***************
-*** 29,40 ****
- #include "sys/time.h"
- #include "sys/errno.h"
-
-- #include "ntp_fp.h"
-- #include "ntp_unixtime.h"
-- #include "ntp_calendar.h"
--
-- #include "parse.h"
--
- #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
- /*
- * Sorry, but in SunOS 4.x kernels there are no
---- 29,34 ----
-***************
-*** 44,51 ****
---- 38,54 ----
- #define _ntp_string_h
- extern void bcopy();
- extern void bzero();
-+ #else
-+ #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
-+ #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
- #endif
-
-+ #include "ntp_fp.h"
-+ #include "ntp_unixtime.h"
-+ #include "ntp_calendar.h"
-+
-+ #include "parse.h"
-+
- #include "ntp_stdlib.h"
-
- #ifdef PARSESTREAM
-diff -c -r ../yy/xntpd/ntp_config.c ./xntpd/ntp_config.c
-*** ../yy/xntpd/ntp_config.c Thu Jan 27 15:03:47 1994
---- ./xntpd/ntp_config.c Thu Jan 27 19:18:40 1994
-***************
-*** 1,4 ****
-! /* ntp_config.c,v 3.1 1993/07/06 01:11:12 jbj Exp
- * ntp_config.c - read and apply configuration information
- */
- #define RESOLVE_INTERNAL /* gdt */
---- 1,4 ----
-! /*
- * ntp_config.c - read and apply configuration information
- */
- #define RESOLVE_INTERNAL /* gdt */
-***************
-*** 375,388 ****
- break;
- }
-
-! if (errflg || optind != argc) {
- (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
- (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
- (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
- (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
- exit(2);
- }
-! optind = 0; /* reset optind to restart getopt_l */
-
- if (debug) {
- #ifdef NTP_POSIX_SOURCE
---- 375,388 ----
- break;
- }
-
-! if (errflg || ntp_optind != argc) {
- (void) fprintf(stderr, "usage: %s [ -abd ] [ -c config_file ] [ -e encryption delay ]\n", progname);
- (void) fprintf(stderr, "\t\t[ -f frequency file ] [ -k key file ] [ -l log file ]\n");
- (void) fprintf(stderr, "\t\t[ -p pid file ] [ -r broadcast delay ] [ -s status directory ]\n");
- (void) fprintf(stderr, "\t\t[ -t trusted key ] [ -v sys variable ] [ -V default sys variable ]\n");
- exit(2);
- }
-! ntp_optind = 0; /* reset ntp_optind to restart ntp_getopt */
-
- if (debug) {
- #ifdef NTP_POSIX_SOURCE
-***************
-*** 430,437 ****
- char resolver_name[MAXFILENAME];
- int have_keyfile;
- char keyfile[MAXFILENAME];
-! extern int optind;
-! extern char *optarg;
- extern char *Version;
- extern U_LONG info_auth_keyid;
- FILEGEN *filegen;
---- 430,437 ----
- char resolver_name[MAXFILENAME];
- int have_keyfile;
- char keyfile[MAXFILENAME];
-! extern int ntp_optind;
-! extern char *ntp_optarg;
- extern char *Version;
- extern U_LONG info_auth_keyid;
- FILEGEN *filegen;
-***************
-*** 461,467 ****
- /*
- * Decode argument list
- */
-! while ((c = getopt_l(argc, argv, xntp_options)) != EOF) {
- switch (c) {
- case 'a':
- proto_config(PROTO_AUTHENTICATE, (LONG)1);
---- 461,467 ----
- /*
- * Decode argument list
- */
-! while ((c = ntp_getopt(argc, argv, xntp_options)) != EOF) {
- switch (c) {
- case 'a':
- proto_config(PROTO_AUTHENTICATE, (LONG)1);
-***************
-*** 470,476 ****
- proto_config(PROTO_BROADCLIENT, (LONG)1);
- break;
- case 'c':
-! config_file = optarg;
- break;
- case 'd':
- #ifdef DEBUG
---- 470,476 ----
- proto_config(PROTO_BROADCLIENT, (LONG)1);
- break;
- case 'c':
-! config_file = ntp_optarg;
- break;
- case 'd':
- #ifdef DEBUG
-***************
-*** 484,498 ****
- do {
- l_fp tmp;
-
-! if (!atolfp(optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line encryption delay value %s undecodable",
-! optarg);
- errflg++;
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line encryption delay value %s is unlikely",
-! optarg);
- errflg++;
- } else {
- proto_config(PROTO_AUTHDELAY, tmp.l_f);
---- 484,498 ----
- do {
- l_fp tmp;
-
-! if (!atolfp(ntp_optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line encryption delay value %s undecodable",
-! ntp_optarg);
- errflg++;
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line encryption delay value %s is unlikely",
-! ntp_optarg);
- errflg++;
- } else {
- proto_config(PROTO_AUTHDELAY, tmp.l_f);
-***************
-*** 501,537 ****
- break;
-
- case 'f':
-! stats_config(STATS_FREQ_FILE, optarg);
- break;
-
- case 'k':
-! getauthkeys(optarg);
-! if ((int)strlen(optarg) >= MAXFILENAME) {
- syslog(LOG_ERR,
- "key file name too LONG (>%d, sigh), no name resolution possible",
- MAXFILENAME);
- } else {
- have_keyfile = 1;
-! (void)strcpy(keyfile, optarg);
- }
- break;
-
- case 'p':
-! stats_config(STATS_PID_FILE, optarg);
- break;
-
- case 'r':
- do {
- l_fp tmp;
-
-! if (!atolfp(optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s undecodable",
-! optarg);
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s is unlikely",
-! optarg);
- } else {
- proto_config(PROTO_BROADDELAY, tmp.l_f);
- }
---- 501,537 ----
- break;
-
- case 'f':
-! stats_config(STATS_FREQ_FILE, ntp_optarg);
- break;
-
- case 'k':
-! getauthkeys(ntp_optarg);
-! if ((int)strlen(ntp_optarg) >= MAXFILENAME) {
- syslog(LOG_ERR,
- "key file name too LONG (>%d, sigh), no name resolution possible",
- MAXFILENAME);
- } else {
- have_keyfile = 1;
-! (void)strcpy(keyfile, ntp_optarg);
- }
- break;
-
- case 'p':
-! stats_config(STATS_PID_FILE, ntp_optarg);
- break;
-
- case 'r':
- do {
- l_fp tmp;
-
-! if (!atolfp(ntp_optarg, &tmp)) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s undecodable",
-! ntp_optarg);
- } else if (tmp.l_ui != 0) {
- syslog(LOG_ERR,
- "command line broadcast delay value %s is unlikely",
-! ntp_optarg);
- } else {
- proto_config(PROTO_BROADDELAY, tmp.l_f);
- }
-***************
-*** 539,556 ****
- break;
-
- case 's':
-! stats_config(STATS_STATSDIR, optarg);
- break;
-
- case 't':
- do {
- int tkey;
-
-! tkey = atoi(optarg);
- if (tkey <= 0 || tkey > NTP_MAXKEY) {
- syslog(LOG_ERR,
- "command line trusted key %s is unlikely",
-! optarg);
- } else {
- authtrust(tkey, (LONG)1);
- }
---- 539,556 ----
- break;
-
- case 's':
-! stats_config(STATS_STATSDIR, ntp_optarg);
- break;
-
- case 't':
- do {
- int tkey;
-
-! tkey = atoi(ntp_optarg);
- if (tkey <= 0 || tkey > NTP_MAXKEY) {
- syslog(LOG_ERR,
- "command line trusted key %s is unlikely",
-! ntp_optarg);
- } else {
- authtrust(tkey, (LONG)1);
- }
-***************
-*** 559,565 ****
-
- case 'v':
- case 'V':
-! set_sys_var(optarg, strlen(optarg)+1, RW | ((c == 'V') ? DEF : 0));
- break;
-
- default:
---- 559,565 ----
-
- case 'v':
- case 'V':
-! set_sys_var(ntp_optarg, strlen(ntp_optarg)+1, RW | ((c == 'V') ? DEF : 0));
- break;
-
- default:
-diff -c -r ../yy/xntpd/ntp_control.c ./xntpd/ntp_control.c
-*** ../yy/xntpd/ntp_control.c Thu Jan 27 15:03:48 1994
---- ./xntpd/ntp_control.c Thu Jan 27 19:29:06 1994
-***************
-*** 1848,1854 ****
- ctl_sys_num_events = 0;
- gotvar += count_var(ext_sys_var);
- wants = (u_char *)emalloc(gotvar);
-! bzero((char *)wants, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
---- 1848,1854 ----
- ctl_sys_num_events = 0;
- gotvar += count_var(ext_sys_var);
- wants = (u_char *)emalloc(gotvar);
-! memset((char *)wants, 0, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(sys_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-***************
-*** 1904,1910 ****
- if (res_authokay)
- peer->num_events = 0;
- wants = (u_char *)emalloc(gotvar);
-! bzero((char*)wants, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
- if (v->flags & EOV) {
---- 1904,1910 ----
- if (res_authokay)
- peer->num_events = 0;
- wants = (u_char *)emalloc(gotvar);
-! memset((char*)wants, 0, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(peer_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-***************
-*** 2106,2112 ****
- rpkt.status = htons(ctlclkstatus(&clock));
- gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
- wants = (u_char *)emalloc(gotvar);
-! bzero((char*)wants, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
- if (v->flags & EOV) {
---- 2106,2112 ----
- rpkt.status = htons(ctlclkstatus(&clock));
- gotvar = CC_MAXCODE+1+count_var(clock.kv_list);
- wants = (u_char *)emalloc(gotvar);
-! memset((char*)wants, 0, gotvar);
- gotvar = 0;
- while ((v = ctl_getitem(clock_var, &valuep)) != 0) {
- if (v->flags & EOV) {
-***************
-*** 2578,2584 ****
- *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
- if (k)
- {
-! bcopy((char *)k, (char *)*kv, sizeof(struct ctl_var)*c);
- free((char *)k);
- }
-
---- 2578,2584 ----
- *kv = (struct ctl_var *)emalloc((c+2)*sizeof(struct ctl_var));
- if (k)
- {
-! memmove((char *)*kv, (char *)k, sizeof(struct ctl_var)*c);
- free((char *)k);
- }
-
-***************
-*** 2621,2627 ****
- {
- free(k->text);
- k->text = (char *)emalloc(size);
-! bcopy(data, k->text, size);
- k->flags = def;
- return;
- }
---- 2621,2627 ----
- {
- free(k->text);
- k->text = (char *)emalloc(size);
-! memmove(k->text, data, size);
- k->flags = def;
- return;
- }
-***************
-*** 2629,2635 ****
- else
- {
- k->text = (char *)emalloc(size);
-! bcopy(data, k->text, size);
- k->flags = def;
- return;
- }
---- 2629,2635 ----
- else
- {
- k->text = (char *)emalloc(size);
-! memmove(k->text, data, size);
- k->flags = def;
- return;
- }
-***************
-*** 2637,2643 ****
- }
- }
- t = add_var(kv, size, def);
-! bcopy(data, t, size);
- }
-
- void
---- 2637,2643 ----
- }
- }
- t = add_var(kv, size, def);
-! memmove(t, data, size);
- }
-
- void
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.7 b/usr.sbin/xntpd/patches/patch.7
deleted file mode 100644
index 682065f..0000000
--- a/usr.sbin/xntpd/patches/patch.7
+++ /dev/null
@@ -1,274 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa21105; 28 Jan 94 9:25 EST
-Received: from faui45.informatik.uni-erlangen.de by louie.udel.edu id aa08838;
- 28 Jan 94 9:20 EST
-Received: from faui43.informatik.uni-erlangen.de by uni-erlangen.de with SMTP;
- id AA29169 (5.65c-6/7.3v-FAU); Fri, 28 Jan 1994 15:19:56 +0100
-Received: from faui45x.informatik.uni-erlangen.de by immd4.informatik.uni-erlangen.de with SMTP;
- id AA11999 (5.65c-6/7.3m-FAU); Fri, 28 Jan 1994 15:19:51 +0100
-From: Frank Kardel <Frank.Kardel@informatik.uni-erlangen.de>
-Message-Id: <199401281419.AA11999@faui43.informatik.uni-erlangen.de>
-Subject: Re: Solaribum
-To: Paul A Vixie <Paul_Vixie@corpmis.sjc.hw.sony.com>
-Date: Fri, 28 Jan 94 14:02:02 MET
-Cc: Mills@udel.edu, Frank.Kardel@informatik.uni-erlangen.de,
- Piete.Brooks@cl.cam.ac.uk, Paul_Vixie@corpmis.sjc.hw.sony.com
-In-Reply-To: <9401272236.AA27835@morality.sjc.hw.sony.com>; from "Paul A Vixie" at Jan 27, 94 2:36 pm
-X-Mailer: ELM [version 2.3 PL11]
-
-
-> >memmove() and crumps in loading with an unknown external. If the missing
-> >routine is not there in SunOS 4, why not conditionally compile one
-> >and be done with it?
-
-> as i said in earlier mail, there is already a macro for memmove, to define
-> it in terms of bcopy, but it is only enabled on systems that don't have a
-> native memmove. include/*.h tells the story.
-
-Ok, in order to cope with the problems (non existent memmove() and
-sys header files that use bops) I fixed SUNOS4 and ULTRIX to use the
-b-ops (via the NTP_NEED_BOPS define). All other should to my knowledge
-use the mem* stuff (I'd rather use either mem* or b* instead of mixtures
-of both).
-
-Now, the following patch should get 3.3y (and 3.3yy) to fly
-(=compile) on suns. Functional test have not been done. ULTRIX
-has not been tested.
-
-> there are too many x's and y's now. i'm confused. i promise not to send
-> any more patches until the dust clears..
-
-With this patch we should get to 3.3yyy which should be the
-base for all next efforts (-> and 3.3{x,xx,y,yy} can be deleted).
-
-May the source be with us:
-
-diff -c -r ../yy/include/l_stdlib.h ./include/l_stdlib.h
-*** ../yy/include/l_stdlib.h Thu Jan 27 15:03:21 1994
---- ./include/l_stdlib.h Fri Jan 28 12:46:31 1994
-***************
-*** 47,54 ****
---- 47,60 ----
- extern int rand P((void));
- extern int setpgrp P((int, int));
- extern void srand P((unsigned int));
-+ extern void bcopy P((char *, char *, int));
- #endif
-
-+ #ifndef bzero /* XXX macro prototyping clash */
-+ extern void bzero P((char *, int));
-+ extern int bcmp P((char *, char *, int));
-+ extern void bcopy P((char *, char *, int));
-+ #endif
- extern char *mktemp P((char *));
-
- extern int tolower P((int));
-***************
-*** 92,102 ****
---- 98,110 ----
-
- #ifdef _ntp_string_h
- #ifdef NTP_POSIX_SOURCE /* these are builtins */
-+ #ifndef NTP_NEED_BOPS /* but may be emulated by bops */
- extern char *memcpy();
- extern char *memset();
- extern int memcmp();
- #endif
- #endif
-+ #endif
-
- #ifdef _sys_socket_h
- extern int bind P((int, struct sockaddr *, int));
-***************
-*** 187,192 ****
---- 195,203 ----
-
- #ifndef NTP_POSIX_SOURCE
- extern int atoi P((char *));
-+ extern void bzero P((char *, int));
-+ extern int bcmp P((char *, char *, int));
-+ extern void bcopy P((char *, char *, int));
- extern int execve P((char *, char **,char **));
- extern int fork P((void));
- extern int getdtablesize P((void));
-diff -c -r ../yy/include/ntp_machine.h ./include/ntp_machine.h
-*** ../yy/include/ntp_machine.h Fri Jan 28 13:32:33 1994
---- ./include/ntp_machine.h Fri Jan 28 12:25:29 1994
-***************
-*** 168,173 ****
---- 168,174 ----
- * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
- */
- #if defined(SYS_SUNOS4)
-+ #define NTP_NEED_BOPS
- #define NO_SIGNED_CHAR_DECL
- #define HAVE_LIBKVM
- #define HAVE_MALLOC_H
-***************
-*** 266,271 ****
---- 267,273 ----
- * Note: posix version has NTP_POSIX_SOURCE and HAVE_SIGNALED_IO
- */
- #if defined(SYS_ULTRIX)
-+ #define NTP_NEED_BOPS
- #define S_CHAR_DEFINED
- #define HAVE_READKMEM
- #define HAVE_BSD_NICE
-diff -c -r ../yy/include/ntp_string.h ./include/ntp_string.h
-*** ../yy/include/ntp_string.h Thu Jan 27 15:03:24 1994
---- ./include/ntp_string.h Fri Jan 28 12:36:44 1994
-***************
-*** 5,11 ****
- #ifndef _ntp_string_h
- #define _ntp_string_h
-
-! #ifdef NTP_POSIX_SOURCE
-
- # if defined(HAVE_MEMORY_H)
- # include <memory.h>
---- 5,11 ----
- #ifndef _ntp_string_h
- #define _ntp_string_h
-
-! #if defined(NTP_POSIX_SOURCE)
-
- # if defined(HAVE_MEMORY_H)
- # include <memory.h>
-***************
-*** 13,29 ****
-
- # include <string.h>
-
-! #else /* NTP_POSIX_SOURCE */
-
- # include <strings.h>
--
- # define strchr(s,c) index(s,c)
- # define strrchr(s,c) rindex(s,c)
- # define memcmp(a,b,c) bcmp(a,b,c)
- # define memmove(t,f,c) bcopy(f,t,c)
-! # define memset(a,x,c) if (x == 0x00) bzero(a,c) else ntp_memset((char*)a,x,c)
- void ntp_memset P((char *, int, int));
-
-! #endif /* NTP_POSIX_SOURCE */
-
- #endif /* _ntp_string_h */
---- 13,35 ----
-
- # include <string.h>
-
-! #else
-
- # include <strings.h>
- # define strchr(s,c) index(s,c)
- # define strrchr(s,c) rindex(s,c)
-+ # ifndef NTP_NEED_BOPS
-+ # define NTP_NEED_BOPS
-+ # endif
-+ #endif /* NTP_POSIX_SOURCE */
-+
-+ #ifdef NTP_NEED_BOPS
-+
- # define memcmp(a,b,c) bcmp(a,b,c)
- # define memmove(t,f,c) bcopy(f,t,c)
-! # define memset(a,x,c) if (x == 0x00) bzero(a,c); else ntp_memset((char*)a,x,c)
- void ntp_memset P((char *, int, int));
-
-! #endif /* NTP_NEED_BOPS */
-
- #endif /* _ntp_string_h */
-diff -c -r ../yy/lib/machines.c ./lib/machines.c
-*** ../yy/lib/machines.c Thu Jan 27 15:03:35 1994
---- ./lib/machines.c Fri Jan 28 13:55:26 1994
-***************
-*** 31,37 ****
- }
- #endif
-
-! #if !defined(NTP_POSIX_SOURCE)
- void
- ntp_memset(a, x, c)
- char *a;
---- 31,37 ----
- }
- #endif
-
-! #if !defined(NTP_POSIX_SOURCE) || defined(NTP_NEED_BOPS)
- void
- ntp_memset(a, x, c)
- char *a;
-diff -c -r ../yy/parse/Makefile.tmpl ./parse/Makefile.tmpl
-*** ../yy/parse/Makefile.tmpl Fri Nov 26 05:28:30 1993
---- ./parse/Makefile.tmpl Fri Jan 28 13:47:30 1994
-***************
-*** 92,98 ****
-
- clean:
- -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
-! lintlib.errs lint.errs genassym assym.s parsestreams parse
- -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
-
- distclean: clean
---- 92,98 ----
-
- clean:
- -@rm -f $(LIBNAME).a $(KLIBNAME).a *.o *.out *.ln make.log Makefile.bak \
-! lintlib.errs lint.errs genassym assym.s parsestreams parse parsestreams.o.*
- -@cd util && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" -f Makefile.tmpl clean
-
- distclean: clean
-diff -c -r ../yy/parse/parse.c ./parse/parse.c
-*** ../yy/parse/parse.c Fri Jan 28 13:32:34 1994
---- ./parse/parse.c Fri Jan 28 13:08:01 1994
-***************
-*** 29,47 ****
- #include "sys/time.h"
- #include "sys/errno.h"
-
- #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
- /*
-! * Sorry, but in SunOS 4.x kernels there are no
- * mem* operations. I don't want them - bcopy, bzero
- * are fine in the kernel
- */
-! #define _ntp_string_h
-! extern void bcopy();
-! extern void bzero();
- #else
- #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
- #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
- #endif
-
- #include "ntp_fp.h"
- #include "ntp_unixtime.h"
---- 29,53 ----
- #include "sys/time.h"
- #include "sys/errno.h"
-
-+ #include "ntp_machine.h"
-+
- #if defined(PARSESTREAM) && (defined(SYS_SUNOS4) || defined(SYS_SOLARIS)) && defined(STREAM)
- /*
-! * Sorry, but in SunOS 4.x AND Solaris 2.x kernels there are no
- * mem* operations. I don't want them - bcopy, bzero
- * are fine in the kernel
- */
-! #ifndef NTP_NEED_BOPS
-! #define NTP_NEED_BOPS
-! #endif
- #else
-+ #ifndef NTP_NEED_BOPS
-+ #ifndef bzero
- #define bzero(_X_, _Y_) memset(_X_, 0, _Y_)
- #define bcopy(_X_, _Y_, _Z_) memmove(_Y_, _X_, _Z_)
- #endif
-+ #endif
-+ #endif
-
- #include "ntp_fp.h"
- #include "ntp_unixtime.h"
---
- Frank Kardel (kardel@informatik.uni-erlangen.de)
- All SCSI disks will from now on be required to send an email
- notice 24 hours prior to complete hardware failure!
-
diff --git a/usr.sbin/xntpd/patches/patch.8 b/usr.sbin/xntpd/patches/patch.8
deleted file mode 100644
index 52e928c..0000000
--- a/usr.sbin/xntpd/patches/patch.8
+++ /dev/null
@@ -1,44 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa21136; 28 Jan 94 9:30 EST
-Received: from relay1.uu.net by louie.udel.edu id aa09355; 28 Jan 94 9:29 EST
-Received: from outpost.wg.waii.com by relay1.UU.NET with SMTP
- (5.61/UUNET-internet-primary) id AAwaur00219; Fri, 28 Jan 94 09:29:28 -0500
-Received: from airgun.wg.waii.com by outpost.wg.waii.com with SMTP id AA18918
- (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:23 -0600
-Received: from merlin.london.waii.com by airgun.wg.waii.com with SMTP id AA18376
- (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 08:29:16 -0600
-Received: from phoenix.london.waii.com by merlin.london.waii.com with SMTP id AA21698
- (5.65c/IDA-1.4.4 for <mills@udel.edu>); Fri, 28 Jan 1994 14:24:29 GMT
-Received: by phoenix.london.waii.com (4.1/SMI-4.1)
- id AA21825; Fri, 28 Jan 94 14:29:12 GMT
-Date: Fri, 28 Jan 94 14:29:12 GMT
-From: Marc Brett <ltso@london.waii.com>
-Message-Id: <9401281429.AA21825@phoenix.london.waii.com>
-To: mills@udel.edu
-Subject: Bug in export version of xntp.3.3c
-
-Dave,
-
-The crippled DES routine fails to compile on my machine (SunOS 1.4.3, cc).
-It complains about U_LONG being unrecognized. Luckily, the fix is a
-one-liner.
-
-*** authdes.c.export Tue Aug 24 22:26:45 1993
---- authdes.c Fri Jan 28 12:18:40 1994
-***************
-*** 15,20 ****
---- 15,21 ----
- * to its exportable state, copy this file to authdes.c .
- */
- #include <sys/types.h>
-+ #include "ntp_stdlib.h"
-
- /*
- * This routine is normally called to compute the key schedule.
-
-
-Regards,
-
-Marc Brett marc.brett@london.waii.com
-Western Geophysical Tel: +44 81 560 3160
-
diff --git a/usr.sbin/xntpd/patches/patch.9 b/usr.sbin/xntpd/patches/patch.9
deleted file mode 100644
index 76b3309..0000000
--- a/usr.sbin/xntpd/patches/patch.9
+++ /dev/null
@@ -1,83 +0,0 @@
-
-Received: from louie.udel.edu by huey.udel.edu id aa04410; 31 Jan 94 4:58 EST
-Received: from gw.home.vix.com by louie.udel.edu id aa00370; 31 Jan 94 4:52 EST
-Received: by gw.home.vix.com id AA12643; Mon, 31 Jan 94 01:52:12 -0800
-Message-Id: <9401310952.AA12643@gw.home.vix.com>
-X-Btw: vix.com is also gw.home.vix.com and vixie.sf.ca.us
-To: Mills@udel.edu
-Cc: Frank.Kardel@informatik.uni-erlangen.de, Piete.Brooks@cl.cam.ac.uk
-Subject: diffs to yyy to make ultrix/GOES happy
-Date: Mon, 31 Jan 94 01:52:11 PST
-From: Paul A Vixie <vixie@vix.com>
-
-diff -r -c2 yyy.ref/adjtime/adjtimed.c xntp3.3yyy/adjtime/adjtimed.c
-*** yyy.ref/adjtime/adjtimed.c Thu Jan 27 06:03:11 1994
---- xntp3.3yyy/adjtime/adjtimed.c Mon Jan 31 01:24:49 1994
-***************
-*** 82,86 ****
---- 82,90 ----
- progname = argv[0];
-
-+ #ifdef LOG_LOCAL6
- openlog("adjtimed", LOG_PID, LOG_LOCAL6);
-+ #else
-+ openlog("adjtimed", LOG_PID);
-+ #endif
-
- while ((ch = ntp_getopt(argc, argv, "hkrvdfp:")) != EOF) {
-diff -r -c2 yyy.ref/include/ntp_machine.h xntp3.3yyy/include/ntp_machine.h
-*** yyy.ref/include/ntp_machine.h Fri Jan 28 07:26:11 1994
---- xntp3.3yyy/include/ntp_machine.h Mon Jan 31 01:01:11 1994
-***************
-*** 42,47 ****
-
-
-! WHICH TERMINAL MODEL TO USE - I would assume HAVE_POSIX_TTYS if
-! NTP_POSIX_SOURCE was set but cann't. The
- posix tty driver is too restrictive on most systems.
- It defined if you define STREAMS.
---- 42,47 ----
-
-
-! WHICH TERMINAL MODEL TO USE - I would assume HAVE_TERMIOS if
-! NTP_POSIX_SOURCE was set but can't. The
- posix tty driver is too restrictive on most systems.
- It defined if you define STREAMS.
-***************
-*** 50,54 ****
- HAVE_BSD_TTYS - Use BSD stty.h
- HAVE_TERMIOS - Use POSIX termios.h
-- HAVE_POSIX_TTYS - "struct termios" has c_line defined
-
- THIS MAKES PORTS TO NEW SYSTEMS EASY - You only have to wory about
---- 50,53 ----
-***************
-*** 268,272 ****
- */
- #if defined(SYS_ULTRIX)
-- #define NTP_NEED_BOPS
- #define S_CHAR_DEFINED
- #define HAVE_READKMEM
---- 267,270 ----
-***************
-*** 277,280 ****
---- 275,279 ----
- #define STR_SYSTEM "UNIX/Ultrix"
- #endif
-+ #define HAVE_TERMIOS
- #endif
-
-***************
-*** 565,568 ****
---- 564,573 ----
- && !defined(HAVE_NO_NICE)
- ERROR You_must_define_one_of_the_HAVE_xx_NICE_defines
-+ #endif
-+
-+ #if !defined(HAVE_SYSV_TTYS) \
-+ && !defined(HAVE_BSD_TTYS) \
-+ && !defined(HAVE_TERMIOS)
-+ ERROR no_tty_type_defined
- #endif
-
-
diff --git a/usr.sbin/xntpd/scripts/hpadjtime.sh b/usr.sbin/xntpd/scripts/hpadjtime.sh
deleted file mode 100644
index 07773dc..0000000
--- a/usr.sbin/xntpd/scripts/hpadjtime.sh
+++ /dev/null
@@ -1,18 +0,0 @@
-#! /bin/sh
-val=1
-if [ -f /bin/uname -o -f /usr/bin/uname ]; then
- set `uname -a | tr '[A-Z]' '[a-z]'`
- case "$1" in
- hp-ux) case "$3" in
- *.10.*) val=1 ;;
- *.09.03) case "$5" in
- 9000/3*) val=1 ;;
- *) val=0 ;;
- esac ;;
- *) val=0 ;;
- esac
- ;;
- *)
- esac
-fi
-exit $val
diff --git a/usr.sbin/xntpd/util/Makefile.tmpl b/usr.sbin/xntpd/util/Makefile.tmpl
deleted file mode 100644
index e30292f..0000000
--- a/usr.sbin/xntpd/util/Makefile.tmpl
+++ /dev/null
@@ -1,62 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= tickadj
-#
-# Makefile for utilities
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-DAEMONLIBS=
-RESLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-SOURCE= tickadj.c ntptime.c
-TKOBJS= tickadj.o
-NTOBJS= ntptime.o
-EXECS= ntptime jitter timetrim kern byteorder longsize precision
-
-all: $(PROGRAM)
-
-tickadj: $(TKOBJS)
- $(CC) $(COPTS) -o $@ $(TKOBJS) $(LIB) $(DAEMONLIBS) $(RESLIB) $(COMPAT)
-
-ntptime: $(NTOBJS)
- $(CC) $(COPTS) -o $@ $(NTOBJS) $(LIB)
-
-precision: precision.o
- $(CC) $(COPTS) -o $@ $@.o
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) $(EXECS) *.o *.out tags make.log Makefile.bak lint.errs
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
diff --git a/usr.sbin/xntpd/xntpd/Makefile.tmpl b/usr.sbin/xntpd/xntpd/Makefile.tmpl
deleted file mode 100644
index 919d2a0..0000000
--- a/usr.sbin/xntpd/xntpd/Makefile.tmpl
+++ /dev/null
@@ -1,168 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= xntpd
-#
-# xntpd - NTP daemon
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-CLOCKDEFS=
-DAEMONLIBS=
-RESLIB=
-ADJLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a ../parse/libparse.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-SOURCE= ntp_config.c ntp_control.c ntp_io.c ntp_leap.c \
- ntp_loopfilter.c ntp_monitor.c ntp_peer.c ntp_proto.c \
- ntp_refclock.c ntp_request.c ntp_restrict.c ntp_timer.c \
- ntp_unixclock.c ntp_util.c ntp_intres.c ntp_filegen.c ntpd.c \
- refclock_conf.c refclock_chu.c refclock_local.c \
- refclock_pst.c refclock_wwvb.c refclock_goes.c \
- refclock_mx4200.c refclock_parse.c refclock_as2201.c \
- refclock_omega.c refclock_tpro.c refclock_leitch.c \
- refclock_irig.c refclock_msfees.c refclock_gpstm.c \
- refclock_trak.c refclock_datum.c refclock_acts.c \
- refclock_heath.c, refclock_nmea.c refclock_moto.c \
- refclock_atom.c
-
-OBJS= ntp_config.o ntp_control.o ntp_io.o ntp_leap.o \
- ntp_loopfilter.o ntp_monitor.o ntp_peer.o ntp_proto.o \
- ntp_refclock.o ntp_request.o ntp_restrict.o ntp_timer.o \
- ntp_unixclock.o ntp_util.o ntp_intres.o ntp_filegen.o ntpd.o \
- refclock_conf.o refclock_chu.o refclock_local.o \
- refclock_pst.o refclock_wwvb.o refclock_goes.o \
- refclock_mx4200.o refclock_parse.o refclock_as2201.o \
- refclock_omega.o refclock_tpro.o refclock_leitch.o \
- refclock_irig.o refclock_msfees.o refclock_gpstm.o \
- refclock_trak.o refclock_datum.o refclock_acts.o \
- refclock_heath.o refclock_nmea.o refclock_moto.o \
- refclock_atom.o
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- -rm -f $(PROGRAM)
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(DAEMONLIBS) \
- $(RESLIB) $(ADJLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags oxntpd make.log Makefile.bak lint.errs
- -@rm -f .depend *~ .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-../parse/libparse.a:
- cd ../parse && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
-#
-# These guys require knowledge of our clock configuration
-#
-refclock_chu.o: refclock_chu.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_conf.o: refclock_conf.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_local.o: refclock_local.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_pst.o: refclock_pst.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_goes.o: refclock_goes.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_wwvb.o: refclock_wwvb.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_parse.o: refclock_parse.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_mx4200.o: refclock_mx4200.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_as2201.o: refclock_as2201.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_omega.o: refclock_omega.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_tpro.o: refclock_tpro.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_leitch.o: refclock_leitch.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_irig.o: refclock_irig.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_msfees.o: refclock_msfees.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_trak.o: refclock_trak.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_gpstm.o: refclock_gpstm.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_datum.o: refclock_datum.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_acts.o: refclock_acts.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_heath.o: refclock_heath.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_nmea.o: refclock_nmea.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_moto.o: refclock_moto.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
-
-refclock_atom.o: refclock_atom.c
- $(CC) $(COPTS) $(DEFS) $(DEFS_LOCAL) $(CLOCKDEFS) $(INCL) -c $*.c
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c
deleted file mode 100644
index 2ce53a7..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_datum.c
+++ /dev/null
@@ -1,593 +0,0 @@
-/*
- * refclock_datum.c - clock driver for the Datum/Bancomm
- * bc635VME Time and Frequency Processor.
- * R. Schmidt, Time Service, US Naval Obs. May 94
- * modelled after the TPRO NTP driver.
- *
- * This requires the Datum HP-UX V9.01 kernel driver and the HP-UX vme2
- * driver subsystem. It has been tested on an HP9000/747i at HP-UX 9.03.
- * There are no restrictions on release and use of the following code.
- * The refclock type has been defined as 16.
- */
-#if defined(REFCLOCK) && defined(DATUM)
-#include <stdio.h>
-#include <syslog.h>
-#include <ctype.h>
-#include <string.h>
-#include <strings.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "/etc/conf/machine/vme2.h"
-#include "/etc/conf/h/io.h"
-#include "ntp_datum.h"
-#include "ntp_stdlib.h"
-
-/*
- * Definitions
- */
-#define MAXUNITS 1 /* max number of VME units */
-#define BMAX 50 /* timecode buffer length */
-
-/*
- * VME interface parameters. The "IRIG" can be changed to "GPS" for the
- * VME-GPS.
- */
-#define VMEPRECISION (-21) /* precision assumed (1 us) */
-#define VMEREFID "IRIG" /* reference id */
-#define VMEDESCRIPTION "Datum/ VME IRIG-B Reader" /* who we are */
-#define VMEHSREFID 0x7f7f1000 /* 127.127.16.00 refid hi strata */
-#define GMT 0 /* hour offset from Greenwich */
-
-/*
- * Imported from ntp_timer module
- */
-extern u_long current_time; /* current time (s) */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * VME unit control structure.
- */
-struct vmeunit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- struct vmedate vmedata; /* data returned from vme read */
- l_fp lastrec; /* last local time */
- l_fp lastref; /* last timecode time */
- char lastcode[BMAX]; /* last timecode received */
- u_short lencode; /* length of last timecode */
- u_long lasttime; /* last time clock heard from */
- u_short unit; /* unit number for this guy */
- u_short status; /* clock status */
- u_short lastevent; /* last clock event */
- u_short year; /* year of eternity */
- u_short day; /* day of year */
- u_short hour; /* hour of day */
- u_short minute; /* minute of hour */
- u_short second; /* seconds of minute */
- u_long usec; /* microsecond of second */
- u_long yearstart; /* start of current year */
- u_short leap; /* leap indicators */
- /*
- * Status tallies
- */
- u_long polls; /* polls sent */
- u_long noreply; /* no replies to polls */
- u_long coderecv; /* timecodes received */
- u_long badformat; /* bad format */
- u_long baddata; /* bad data */
- u_long timestarted; /* time we started this */
-};
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct vmeunit *vmeunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char sloppyclockflag[MAXUNITS];
-
-/*
- * Function prototypes
- */
-static void vme_init P(());
-static int vme_start P((u_int, struct peer *));
-static void vme_shutdown P((int));
-static void vme_report_event P((struct vmeunit *, int));
-static void vme_receive P((struct recvbuf *));
-static void vme_poll P((int unit, struct peer *));
-static void vme_control P((u_int, struct refclockstat *, struct refclockstat *));
-static void vme_buginfo P((int, struct refclockbug *));
-struct vmedate *get_datumtime();
-
-/*
- * Transfer vector
- */
-struct refclock refclock_vme = {
- vme_start, vme_shutdown, vme_poll,
- vme_control, vme_init, vme_buginfo, NOFLAGS
-};
-
-int fd_vme; /* file descriptor for ioctls */
-int regvalue;
-
-/*
- * vme_init - initialize internal vme driver data
- */
-static void
-vme_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- /*
- bzero((char *)vmeunits, sizeof vmeunits);
- bzero((char *)unitinuse, sizeof unitinuse);
- */
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor[i].l_ui = 0;
- fudgefactor[i].l_uf = 0;
- stratumtouse[i] = 0;
- sloppyclockflag[i] = 0;
- }
-}
-
-/*
- * vme_start - open the VME device and initialize data for processing
- */
-static int
-vme_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct vmeunit *vme;
- register int i;
- int dummy;
- char vmedev[20];
-
- /*
- * Check configuration info.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "vme_start: unit %d invalid", unit);
- return (0);
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "vme_start: unit %d in use", unit);
- return (0);
- }
-
- /*
- * Open VME device
- */
-
- if ( (fd_vme = open(VMEFD, O_RDWR)) < 0) {
- syslog(LOG_ERR, "vme_start: failed open of %s: %m", vmedev);
- return (0);
- }
- else { /* Release capture lockout in case it was set from before. */
- if( ioctl( fd_vme, RUNLOCK, &dummy ) )
- syslog(LOG_ERR, "vme_start: RUNLOCK failed %m");
-
- regvalue = 0; /* More esoteric stuff to do... */
- if( ioctl( fd_vme, WCR0, &regvalue ) )
- syslog(LOG_ERR, "vme_start: WCR0 failed %m");
- }
-
- /*
- * Allocate unit structure
- */
- if (vmeunits[unit] != 0) {
- vme = vmeunits[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && vmeunits[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- vme = vmeunits[i];
- vmeunits[i] = 0;
- } else {
- vme = (struct vmeunit *)
- emalloc(sizeof(struct vmeunit));
- }
- }
- bzero((char *)vme, sizeof(struct vmeunit));
- vmeunits[unit] = vme;
-
- /*
- * Set up the structures
- */
- vme->peer = peer;
- vme->unit = (u_short)unit;
- vme->timestarted = current_time;
-
- vme->io.clock_recv = vme_receive;
- vme->io.srcclock = (caddr_t)vme;
- vme->io.datalen = 0;
- vme->io.fd = fd_vme;
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success. Note that root delay and root dispersion are
- * always zero for this clock.
- */
- peer->precision = VMEPRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
- bcopy(VMEREFID, (char *)&peer->refid, 4);
- else
- peer->refid = htonl(VMEHSREFID);
- unitinuse[unit] = 1;
- return (1);
-}
-
-
-/*
- * vme_shutdown - shut down a VME clock
- */
-static void
-vme_shutdown(unit)
- int unit;
-{
- register struct vmeunit *vme;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "vme_shutdown: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "vme_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- vme = vmeunits[unit];
- io_closeclock(&vme->io);
- unitinuse[unit] = 0;
-}
-
-/*
- * vme_report_event - note the occurance of an event
- *
- * This routine presently just remembers the report and logs it, but
- * does nothing heroic for the trap handler.
- */
-static void
-vme_report_event(vme, code)
- struct vmeunit *vme;
- int code;
-{
- struct peer *peer;
-
- peer = vme->peer;
- if (vme->status != (u_short)code) {
- vme->status = (u_short)code;
- if (code != CEVNT_NOMINAL)
- vme->lastevent = (u_short)code;
- syslog(LOG_INFO,
- "clock %s event %x", ntoa(&peer->srcadr), code);
- }
-}
-
-
-/*
- * vme_receive - receive data from the VME device.
- *
- * Note: This interface would be interrupt-driven. We don't use that
- * now, but include a dummy routine for possible future adventures.
- */
-static void
-vme_receive(rbufp)
- struct recvbuf *rbufp;
-{
-}
-
-/*
- * vme_poll - called by the transmit procedure
- */
-static void
-vme_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct vmedate *tptr;
- struct vmeunit *vme;
- l_fp tstmp;
- time_t tloc;
- struct tm *tadr;
-
-
- vme = (struct vmeunit *)emalloc(sizeof(struct vmeunit *));
- tptr = (struct vmedate *)emalloc(sizeof(struct vmedate *));
-
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "vme_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "vme_poll: unit %d not in use", unit);
- return;
- }
- vme = vmeunits[unit]; /* Here is the structure */
- vme->polls++;
-
- tptr = &vme->vmedata;
- if ((tptr = get_datumtime()) == NULL ) {
- vme_report_event(vme, CEVNT_BADREPLY);
- return;
- }
-
- gettstamp(&vme->lastrec);
- vme->lasttime = current_time;
-
- /*
- * Get VME time and convert to timestamp format.
- * The year must come from the system clock.
- */
-
- time(&tloc);
- tadr = gmtime(&tloc);
- tptr->year = (unsigned short)(tadr->tm_year + 1900);
-
- sprintf(vme->lastcode,
- "%3.3d %2.2d:%2.2d:%2.2d.%.6d %1d\0",
- tptr->doy, tptr->hr, tptr->mn,
- tptr->sec, tptr->frac, tptr->status);
-
- record_clock_stats(&(vme->peer->srcadr), vme->lastcode);
- vme->lencode = (u_short) strlen(vme->lastcode);
-
- vme->day = tptr->doy;
- vme->hour = tptr->hr;
- vme->minute = tptr->mn;
- vme->second = tptr->sec;
- vme->usec = tptr->frac;
-
-#ifdef DEBUG
- if (debug)
- printf("vme: %3d %02d:%02d:%02d.%06ld %1x\n",
- vme->day, vme->hour, vme->minute, vme->second,
- vme->usec, tptr->status);
-#endif
- if (tptr->status ) { /* Status 0 is locked to ref., 1 is not */
- vme_report_event(vme, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * Now, compute the reference time value. Use the heavy
- * machinery for the seconds and the millisecond field for the
- * fraction when present. If an error in conversion to internal
- * format is found, the program declares bad data and exits.
- * Note that this code does not yet know how to do the years and
- * relies on the clock-calendar chip for sanity.
- */
- if (!clocktime(vme->day, vme->hour, vme->minute,
- vme->second, GMT, vme->lastrec.l_ui,
- &vme->yearstart, &vme->lastref.l_ui)) {
- vme->baddata++;
- vme_report_event(vme, CEVNT_BADTIME);
- syslog(LOG_ERR, "refclock_datum: bad data!!");
- return;
- }
- TVUTOTSF(vme->usec, vme->lastref.l_uf);
- tstmp = vme->lastref;
-
- L_SUB(&tstmp, &vme->lastrec);
- vme->coderecv++;
-
- L_ADD(&tstmp, &(fudgefactor[vme->unit]));
-
- refclock_receive(vme->peer, &tstmp, GMT, 0,
- &vme->lastrec, &vme->lastrec, vme->leap);
-}
-
-/*
- * vme_control - set fudge factors, return statistics
- */
-static void
-vme_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct vmeunit *vme;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "vme_control: unit %d invalid)", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVEVAL1) {
- stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf);
- if (unitinuse[unit]) {
- struct peer *peer;
-
- /*
- * Should actually reselect clock, but
- * will wait for the next timecode
- */
- vme = vmeunits[unit];
- peer = vme->peer;
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1)
- bcopy(VMEREFID, (char *)&peer->refid,
- 4);
- else
- peer->refid = htonl(VMEHSREFID);
- }
- }
- if (in->haveflags & CLK_HAVEFLAG1) {
- sloppyclockflag[unit] = in->flags & CLK_FLAG1;
- }
- }
-
- if (out != 0) {
-/* out->type = REFCLK_IRIG_VME; */
- out->type = 16; /* made up by RES */
- out->haveflags
- = CLK_HAVETIME1|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1;
- out->clockdesc = VMEDESCRIPTION;
- out->fudgetime1 = fudgefactor[unit];
- out->fudgetime2.l_ui = 0;
- out->fudgetime2.l_uf = 0;
- out->fudgeval1 = (LONG)stratumtouse[unit];
- out->fudgeval2 = 0;
- out->flags = sloppyclockflag[unit];
- if (unitinuse[unit]) {
- vme = vmeunits[unit];
- out->lencode = vme->lencode;
- out->lastcode = vme->lastcode;
- out->timereset = current_time - vme->timestarted;
- out->polls = vme->polls;
- out->noresponse = vme->noreply;
- out->badformat = vme->badformat;
- out->baddata = vme->baddata;
- out->lastevent = vme->lastevent;
- out->currentstatus = vme->status;
- } else {
- out->lencode = 0;
- out->lastcode = "";
- out->polls = out->noresponse = 0;
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
- }
- }
-}
-
-/*
- * vme_buginfo - return clock dependent debugging info
- */
-static void
-vme_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct vmeunit *vme;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "vme_buginfo: unit %d invalid)", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- vme = vmeunits[unit];
-
- bug->nvalues = 11;
- bug->ntimes = 5;
- if (vme->lasttime != 0)
- bug->values[0] = current_time - vme->lasttime;
- else
- bug->values[0] = 0;
- bug->values[2] = (u_long)vme->year;
- bug->values[3] = (u_long)vme->day;
- bug->values[4] = (u_long)vme->hour;
- bug->values[5] = (u_long)vme->minute;
- bug->values[6] = (u_long)vme->second;
- bug->values[7] = (u_long)vme->usec;
- bug->values[9] = vme->yearstart;
- bug->stimes = 0x1c;
- bug->times[0] = vme->lastref;
- bug->times[1] = vme->lastrec;
-}
-
-struct vmedate *get_datumtime()
-{
- unsigned short status;
- char cbuf[7];
- struct vmedate *time_vme;
- struct btfp_time vts;
- time_vme = (struct vmedate *)malloc(sizeof(struct vmedate ));
-
- if( ioctl(fd_vme, READTIME, &vts))
- syslog(LOG_ERR, "get_datumtime error: %m");
-
-/* sprintf converts BCD to ASCII */
-/* Get doy */
- sprintf(cbuf,"%3.3x\0", ((vts.btfp_time[ 0 ] & 0x000f) <<8) +
- ((vts.btfp_time[ 1 ] & 0xff00) >> 8));
-
- if (isdigit(cbuf[0]) && isdigit(cbuf[1]) && isdigit(cbuf[2]) )
- time_vme->doy = (unsigned short)atoi(cbuf);
- else
- time_vme->doy = (unsigned short) 0;
-
-/* Get hour */
- sprintf(cbuf,"%2.2x\0", vts.btfp_time[ 1 ] & 0x00ff);
-
- if (isdigit(cbuf[0]) && isdigit(cbuf[1]))
- time_vme->hr = (unsigned short)atoi(cbuf);
- else
- time_vme->hr = (unsigned short) 0;
-
-/* Get minutes */
- sprintf(cbuf,"%2.2x\0", (vts.btfp_time[ 2 ] & 0xff00) >>8);
- if (isdigit(cbuf[0]) && isdigit(cbuf[1]))
- time_vme->mn = (unsigned short)atoi(cbuf);
- else
- time_vme->mn = (unsigned short) 0;
-
-/* Get seconds */
- sprintf(cbuf,"%2.2x\0", vts.btfp_time[ 2 ] & 0x00ff);
-
- if (isdigit(cbuf[0]) && isdigit(cbuf[1]))
- time_vme->sec = (unsigned short)atoi(cbuf);
- else
- time_vme->sec = (unsigned short) 0;
-
-/* Get microseconds. Yes, we ignore the 0.1 microsecond digit so we can
-use the TVTOTSF function later on...*/
-
- sprintf(cbuf,"%4.4x%2.2x\0", vts.btfp_time[ 3 ],
- vts.btfp_time[ 4 ]>>8);
-
- if (isdigit(cbuf[0]) && isdigit(cbuf[1]) && isdigit(cbuf[2])
- && isdigit(cbuf[3]) && isdigit(cbuf[4]) && isdigit(cbuf[5]))
- time_vme->frac = (u_long) atoi(cbuf);
- else
- time_vme->frac = (u_long) 0;
-
-/* Get status bit */
- status = (vts.btfp_time[0] & 0x0010) >>4;
- time_vme->status = status; /* Status=0 if locked to ref. */
- /* Status=1 if flywheeling */
- if (status) { /* lost lock ? */
- return ((void *)NULL);
- }
- else
- return (time_vme);
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c
deleted file mode 100644
index deab7f4..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_gpstm.c
+++ /dev/null
@@ -1,999 +0,0 @@
-/*
- * refclock_gpstm - clock driver for the Kinimetrics Truetime GPSTM/TMD rcvr
- * Version 1.0 (from Version 2.0 of the GOES driver, as of 03Jan94)
- */
-
-#if defined(REFCLOCK) && (defined(GPSTM) || defined(GPSTMCLK) \
- || defined(GPSTMPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#ifdef SYS_BSDI
-#undef HAVE_BSD_TTYS
-#include <sys/ioctl.h>
-#endif
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(GPSTMCLK)
-#include <clkdefs.h>
-#endif /* GPSTMCLK */
-#endif /* STREAM */
-
-#if defined(GPSTMPPS)
-#include <sys/ppsclock.h>
-#endif /* GPSTMPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Support for Kinemetrics Truetime GPS-TM/TMD Receiver
- *
- * Most of this code is copied from refclock_goes.c with thanks.
- *
- * the time code looks like follows:
- *
- * ADDD:HH:MM:SSQCL
- * A - control A
- * Q Quality indication: indicates possible error of
- * ? +/- 500 milliseconds # +/- 50 milliseconds
- * * +/- 5 milliseconds . +/- 1 millisecond
- * space less than 1 millisecond
- * C - Carriage return
- * L - Line feed
- * The carriage return start bit begins on 0 seconds and extends to 1 bit time.
- *
- * Flag1 set to 1 will silence the clock side of xntpd, just reading the
- * clock without trying to write to it. This is usefull if several
- * xntpds listen to the same clock. This has not been tested yet...
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* max number of GPSTM units */
-#define GPSTM232 "/dev/gpstm%d"
-#define SPEED232 B9600 /* 9600 baud */
-
-/*
- * Radio interface parameters
- */
-#define MAXDISPERSE (FP_SECOND>>1) /* max error for synchronized clock (0.5 s as an u_fp) */
-#define PRECISION (-20) /* precision assumed (about 1 ms) */
-#define REFID "GPS\0" /* reference id */
-#define DESCRIPTION "Kinemetrics GPS-TM/TMD Receiver" /* who we are */
-#define GMT 0 /* hour offset from Greenwich */
-#define NCODES 3 /* stages of median filter */
-#define BMAX 99 /* timecode buffer length */
-#define CODEDIFF 0x20000000 /* 0.125 seconds as an l_fp fraction */
-#define TIMEOUT 180 /* ping the clock if it's silent this long */
-
-/*
- * used by the state machine
- */
-enum gpstm_event {e_Init, e_F18, e_F50, e_F51, e_TS};
-static enum {Base, Start, F18, F50, F51, F08} State[MAXUNITS];
-static void gpstm_doevent P((int, enum gpstm_event));
-static void gpstm_initstate P((int));
-
-/*
- * Hack to avoid excercising the multiplier. I have no pride.
- */
-#define MULBY10(x) (((x)<<3) + ((x)<<1))
-
-/*
- * Imported from the timer module
- */
-extern u_long current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * GPSTM unit control structure
- */
-struct gpstm_unit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
- l_fp offset[NCODES]; /* recent sample offsets */
- char lastcode[BMAX]; /* last timecode received */
- u_short polled; /* Hand in a time sample? */
- u_char lencode; /* length of last timecode */
- u_long lasttime; /* last time clock heard from */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char year; /* year of eternity */
- u_short day; /* day of year */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- u_short msec; /* millisecond of second */
- u_char quality; /* quality character */
- u_long yearstart; /* start of current year */
- /*
- * Status tallies
- */
- u_long polls; /* polls sent */
- u_long noreply; /* no replies to polls */
- u_long coderecv; /* timecodes received */
- u_long badformat; /* bad format */
- u_long baddata; /* bad data */
- u_long timestarted; /* time we started this */
-};
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct gpstm_unit *gpstm_units[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor1[MAXUNITS];
-static l_fp fudgefactor2[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char readonlyclockflag[MAXUNITS];
-static u_long refid[MAXUNITS];
-
-/*
- * Function prototypes
- */
-static void gpstm_init P((void));
-static int gpstm_start P((u_int, struct peer *));
-static void gpstm_shutdown P((int));
-static void gpstm_rep_event P((struct gpstm_unit *, int));
-static void gpstm_receive P((struct recvbuf *));
-static char gpstm_process P((struct gpstm_unit *, l_fp *, u_fp *));
-static void gpstm_poll P((int, struct peer *));
-static void gpstm_control P((u_int, struct refclockstat *,
- struct refclockstat *));
-static void gpstm_buginfo P((int, struct refclockbug *));
-static void gpstm_send P((struct gpstm_unit *, char *));
-
-struct refclock refclock_gpstm = {
- gpstm_start, gpstm_shutdown, gpstm_poll,
- gpstm_control, gpstm_init, gpstm_buginfo, NOFLAGS
-};
-
-/*
- * gpstm_init - initialize internal driver data
- */
-static void
-gpstm_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- memset((char *)gpstm_units, 0, sizeof gpstm_units);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor1[i].l_ui = 0;
- fudgefactor1[i].l_uf = 0;
- fudgefactor2[i].l_ui = 0;
- fudgefactor2[i].l_uf = 0;
- stratumtouse[i] = 0;
- readonlyclockflag[i] = 0;
- memcpy((char *)&refid[i], REFID, 4);
- }
-}
-
-
-/*
- * gpstm_start - open the device and initialize data for processing
- */
-static int
-gpstm_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct gpstm_unit *gpstm;
- register int i;
- int fd232;
- char dev[20];
-
- /*
- * Check configuration info
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_start: unit %d invalid", unit);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_start: unit %d in use", unit);
- return 0;
- }
-
- /*
- * Open serial port
- */
- (void) sprintf(dev, GPSTM232, unit);
- fd232 = open(dev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "gpstm_start: open of %s: %m", dev);
- return 0;
- }
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TCGETA): %m", dev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TCSETA): %m", dev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The GPSTMCLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The GPSTMPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
- ttyp = &ttyb;
-
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcgetattr(%s): %m", dev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcsetattr(%s): %m", dev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcflush(%s): %m", dev);
- goto screwed;
- }
-#if defined(STREAM)
-#if defined(GPSTMCLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, I_PUSH, clk): %m", dev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, CLK_SETSTR): %m", dev);
-#endif /* GPSTMCLK */
-#if defined(GPSTMPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, I_PUSH, ppsclock): %m", dev);
- else
- fdpps = fd232;
-#endif /* GPSTMPPS */
-#endif /* STREAM */
- }
-#endif /* HAVE_TERMIOS */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The GPSTMCLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(GPSTMCLK)
- int ldisc = CLKLDISC;
-#endif /* GPSTMCLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCGETP): %m", dev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(GPSTMCLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* GPSTMCLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCSETP): %m", dev);
- goto screwed;
- }
-#if defined(GPSTMCLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCSETD): %m", dev);
- goto screwed;
- }
-#endif /* GPSTMCLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Allocate unit structure
- */
- if (gpstm_units[unit] != 0) {
- gpstm = gpstm_units[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && gpstm_units[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- gpstm = gpstm_units[i];
- gpstm_units[i] = 0;
- } else {
- gpstm = (struct gpstm_unit *)
- emalloc(sizeof(struct gpstm_unit));
- }
- }
- memset((char *)gpstm, 0, sizeof(struct gpstm_unit));
- gpstm_units[unit] = gpstm;
-
- /*
- * Set up the structures
- */
- gpstm->peer = peer;
- gpstm->unit = (u_char)unit;
- gpstm->timestarted = current_time;
-
- gpstm->io.clock_recv = gpstm_receive;
- gpstm->io.srcclock = (caddr_t)gpstm;
- gpstm->io.datalen = 0;
- gpstm->io.fd = fd232;
- if (!io_addclock(&gpstm->io)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success.
- */
- peer->precision = PRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- gpstm_initstate(unit);
- return 1;
-
- /*
- * Something broke; abandon ship
- */
-screwed:
- (void) close(fd232);
- return 0;
-}
-
-/*
- * gpstm_shutdown - shut down a clock
- */
-static void
-gpstm_shutdown(unit)
- int unit;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_shutdown: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- gpstm = gpstm_units[unit];
- io_closeclock(&gpstm->io);
- unitinuse[unit] = 0;
-}
-
-
-/*
- * gpstm_rep_event - note the occurance of an event
- */
-static void
-gpstm_rep_event(gpstm, code)
- struct gpstm_unit *gpstm;
- int code;
-{
- struct peer *peer;
-
- peer = gpstm->peer;
- if (gpstm->status != (u_char)code) {
- gpstm->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- gpstm->lastevent = (u_char)code;
- syslog(LOG_INFO,
- "clock %s event %x\n", ntoa(&peer->srcadr), code);
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_rep_event(gpstm%d, code %d)\n",
- gpstm->unit, code);
- }
-#endif
- }
- if (code == CEVNT_BADREPLY)
- gpstm_initstate(gpstm->unit);
-}
-
-
-/*
- * gpstm_receive - receive data from the serial interface on a clock
- */
-static void
-gpstm_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int i;
- register struct gpstm_unit *gpstm;
- register u_char *dpt;
- register char *cp;
- register u_char *dpend;
- l_fp tstmp;
- u_fp dispersion;
-
- /*
- * Get the clock this applies to and a pointers to the data
- */
- gpstm = (struct gpstm_unit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
-
- /*
- * Edit timecode to remove control chars
- */
- dpend = dpt + rbufp->recv_length;
- cp = gpstm->lastcode;
- while (dpt < dpend) {
- if ((*cp = 0x7f & *dpt++) >= ' ') cp++;
-#ifdef GPSTMCLK
- else if (*cp == '\r') {
- if (dpend - dpt < 8) {
- /* short timestamp */
- return;
- }
- if (!buftvtots(dpt,&gpstm->lastrec)) {
- /* screwy timestamp */
- return;
- }
- dpt += 8;
- }
-#endif
- }
- *cp = '\0';
- gpstm->lencode = cp - gpstm->lastcode;
- if (gpstm->lencode == 0)
- return;
-#ifndef GPSTMCLK
- gpstm->lastrec = rbufp->recv_time;
-#endif /* GPSTMCLK */
-#if !defined(GPSTMCLK) && !defined(GPSTMPPS) && defined(TIOCMODT)
- do {
- auto struct timeval cur, now;
- register long usec;
-
- if (ioctl(gpstm->io.fd, TIOCMODT, &cur) < 0) {
- syslog(LOG_ERR, "TIOCMODT: %m");
-#ifdef DEBUG
- if (debug) perror("TIOCMODT");
- break;
-#endif
- }
- if (cur.tv_sec == 0) {
- /* no timestamps yet */
- if (debug) printf("MODT tv_sec == 0\n");
- break;
- }
-
- gettimeofday(&now, NULL);
- usec = 1000000 * (now.tv_sec - cur.tv_sec)
- + (now.tv_usec - cur.tv_usec);
-#ifdef DEBUG
- if (debug) printf("lastmodem: delay=%d us\n", usec);
-#endif
- if (usec < 0 || usec > 10000) {
- /* time warp or stale timestamp */
- break;
- }
- if (!buftvtots((char *)&cur, &gpstm->lastrec)) {
- /* screwy timestamp */
- break;
- }
- } while (0);
-#endif /*TIOCMODT*/
-
-#ifdef DEBUG
- if (debug)
- printf("gpstm: timecode %d %s\n",
- gpstm->lencode, gpstm->lastcode);
-#endif
-
- cp = gpstm->lastcode;
- gpstm->leap = 0;
- if ((cp[0] == 'F' && isdigit(cp[1]) && isdigit(cp[2]))
- || (cp[0] == ' ' && cp[1] == 'T' && cp[2] == 'R')) {
- enum gpstm_event event;
-
- syslog(LOG_NOTICE, "gpstm%d: \"%s\"", gpstm->unit, cp);
- if (cp[1] == '5' && cp[2] == '0')
- event = e_F50;
- else if (cp[1] == '5' && cp[2] == '1')
- event = e_F51;
- else if (!strncmp(" TRUETIME Mk III", cp, 16))
- event = e_F18;
- else {
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
- gpstm_doevent(gpstm->unit, event);
- return;
- } else if (gpstm->lencode == 13) {
- /*
- * Check timecode format 0
- */
- if (!isdigit(cp[0]) /* day of year */
- || !isdigit(cp[1])
- || !isdigit(cp[2])
- || cp[3] != ':' /* : separator */
- || !isdigit(cp[4]) /* hours */
- || !isdigit(cp[5])
- || cp[6] != ':' /* : separator */
- || !isdigit(cp[7]) /* minutes */
- || !isdigit(cp[8])
- || cp[9] != ':' /* : separator */
- || !isdigit(cp[10]) /* seconds */
- || !isdigit(cp[11]))
- {
- gpstm->badformat++;
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * Convert format 0 and check values
- */
- gpstm->year = 0; /* fake */
- gpstm->day = cp[0] - '0';
- gpstm->day = MULBY10(gpstm->day) + cp[1] - '0';
- gpstm->day = MULBY10(gpstm->day) + cp[2] - '0';
- gpstm->hour = MULBY10(cp[4] - '0') + cp[5] - '0';
- gpstm->minute = MULBY10(cp[7] - '0') + cp[8] - '0';
- gpstm->second = MULBY10(cp[10] - '0') + cp[11] - '0';
- gpstm->msec = 0;
-
- if (cp[12] != ' ' && cp[12] != '.' && cp[12] != '*')
- gpstm->leap = LEAP_NOTINSYNC;
- else
- gpstm->lasttime = current_time;
-
- if (gpstm->day < 1 || gpstm->day > 366) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADDATE);
- return;
- }
- if (gpstm->hour > 23 || gpstm->minute > 59
- || gpstm->second > 59) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- gpstm_doevent(gpstm->unit, e_TS);
- } else {
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * The clock will blurt a timecode every second but we only
- * want one when polled. If we havn't been polled, bail out.
- */
- if (!gpstm->polled)
- return;
-
- /*
- * Now, compute the reference time value. Use the heavy
- * machinery for the seconds and the millisecond field for the
- * fraction when present.
- *
- * this code does not yet know how to do the years
- */
- tstmp = gpstm->lastrec;
- if (!clocktime(gpstm->day, gpstm->hour, gpstm->minute,
- gpstm->second, GMT, tstmp.l_ui,
- &gpstm->yearstart, &gpstm->lastref.l_ui))
- {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- MSUTOTSF(gpstm->msec, gpstm->lastref.l_uf);
-
- i = ((int)(gpstm->coderecv)) % NCODES;
- gpstm->offset[i] = gpstm->lastref;
- L_SUB(&gpstm->offset[i], &tstmp);
- if (gpstm->coderecv == 0)
- for (i = 1; i < NCODES; i++)
- gpstm->offset[i] = gpstm->offset[0];
-
- gpstm->coderecv++;
-
- /*
- * Process the median filter, and pass the
- * offset and dispersion along. We use lastrec as both the
- * reference time and receive time in order to avoid being cute,
- * like setting the reference time later than the receive time,
- * which may cause a paranoid protocol module to chuck out the
- * data.
- */
- if (!gpstm_process(gpstm, &tstmp, &dispersion)) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- refclock_receive(gpstm->peer, &tstmp, GMT, dispersion,
- &gpstm->lastrec, &gpstm->lastrec, gpstm->leap);
-
- /*
- * We have succedded in answering the poll. Turn off the flag
- */
- gpstm->polled = 0;
-}
-
-/*
- * gpstm_send - time to send the clock a signal to cough up a time sample
- */
-static void
-gpstm_send(gpstm, cmd)
- struct gpstm_unit *gpstm;
- char *cmd;
-{
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_send(gpstm%d): %s\n", gpstm->unit, cmd);
- }
-#endif
- if (!readonlyclockflag[gpstm->unit]) {
- register int len = strlen(cmd);
-
- if (write(gpstm->io.fd, cmd, len) != len) {
- syslog(LOG_ERR, "gpstm_send: unit %d: %m",
- gpstm->unit);
- gpstm_rep_event(gpstm, CEVNT_FAULT);
- }
- }
-}
-
-/*
- * state machine for initializing the clock
- */
-
-static void
-gpstm_doevent(unit, event)
- int unit;
- enum gpstm_event event;
-{
- struct gpstm_unit *gpstm = gpstm_units[unit];
-
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_doevent(gpstm%d, %d)\n", unit, (int)event);
- }
-#endif
- if (event == e_TS && State[unit] != F51 && State[unit] != F08) {
- gpstm_send(gpstm, "\03\r");
- }
-
- switch (event) {
- case e_Init:
- gpstm_send(gpstm, "F18\r");
- State[unit] = Start;
- break;
- case e_F18:
- gpstm_send(gpstm, "F50\r");
- State[unit] = F18;
- break;
- case e_F50:
- gpstm_send(gpstm, "F51\r");
- State[unit] = F50;
- break;
- case e_F51:
- gpstm_send(gpstm, "F08\r");
- State[unit] = F51;
- break;
- case e_TS:
- /* nothing to send - we like this mode */
- State[unit] = F08;
- break;
- }
-}
-
-static void
-gpstm_initstate(unit)
- int unit;
-{
- State[unit] = Base; /* just in case */
- gpstm_doevent(unit, e_Init);
-}
-
-/*
- * gpstm_process - process a pile of samples from the clock
- */
-static char
-gpstm_process(gpstm, offset, dispersion)
- struct gpstm_unit *gpstm;
- l_fp *offset;
- u_fp *dispersion;
-{
- register int i, j;
- register u_long tmp_ui, tmp_uf;
- int not_median1 = -1; /* XXX correct? */
- int not_median2 = -1; /* XXX correct? */
- int median;
- u_fp disp_tmp, disp_tmp2;
-
- /*
- * This code implements a three-stage median filter. First, we
- * check if the samples are within 125 ms of each other. If not,
- * dump the sample set. We take the median of the three offsets
- * and use that as the sample offset. We take the maximum
- * difference and use that as the sample dispersion. There
- * probably is not much to be gained by a longer filter, since
- * the clock filter in ntp_proto should do its thing.
- */
- disp_tmp2 = 0;
- for (i = 0; i < NCODES-1; i++) {
- for (j = i+1; j < NCODES; j++) {
- tmp_ui = gpstm->offset[i].l_ui;
- tmp_uf = gpstm->offset[i].l_uf;
- M_SUB(tmp_ui, tmp_uf, gpstm->offset[j].l_ui,
- gpstm->offset[j].l_uf);
- if (M_ISNEG(tmp_ui, tmp_uf)) {
- M_NEG(tmp_ui, tmp_uf);
- }
- if (tmp_ui != 0 || tmp_uf > CODEDIFF) {
- return 0;
- }
- disp_tmp = MFPTOFP(0, tmp_uf);
- if (disp_tmp > disp_tmp2) {
- disp_tmp2 = disp_tmp;
- not_median1 = i;
- not_median2 = j;
- }
- }
- }
-
- /*
- * It seems as if all are within 125 ms of each other.
- * Now to determine the median of the three. Whlie the
- * 125 ms check was going on, we also subtly catch the
- * dispersion and set-up for a very easy median calculation.
- * The largest difference between any two samples constitutes
- * the dispersion. The sample not involve in the dispersion is
- * the median sample. EASY!
- */
- if (gpstm->lasttime == 0 || disp_tmp2 > MAXDISPERSE)
- disp_tmp2 = MAXDISPERSE;
- if (not_median1 == 0) {
- if (not_median2 == 1)
- median = 2;
- else
- median = 1;
- } else {
- median = 0;
- }
- *offset = gpstm->offset[median];
- *dispersion = disp_tmp2;
- return 1;
-}
-
-/*
- * gpstm_poll - called by the transmit procedure
- */
-static void
-gpstm_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct gpstm_unit *gpstm;
-
- /*
- * You don't need to poll this clock. It puts out timecodes
- * once per second. If asked for a timestamp, take note.
- * The next time a timecode comes in, it will be fed back.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_poll: unit %d not in use", unit);
- return;
- }
- gpstm = gpstm_units[unit];
- if ((current_time - gpstm->lasttime) > 150) {
- gpstm->noreply++;
- gpstm_rep_event(gpstm_units[unit], CEVNT_TIMEOUT);
- gpstm_initstate(gpstm->unit);
- }
-
- /*
- * polled every 64 seconds. Ask our receiver to hand in a timestamp.
- */
- gpstm->polled = 1;
- gpstm->polls++;
-}
-
-/*
- * gpstm_control - set fudge factors, return statistics
- */
-static void
-gpstm_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_control: unit %d invalid", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor1[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- fudgefactor2[unit] = in->fudgetime2;
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (in->haveflags & CLK_HAVEFLAG1)
- readonlyclockflag[unit] = in->flags & CLK_FLAG1;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = gpstm_units[unit]->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out != 0) {
- memset((char *)out, 0, sizeof (struct refclockstat));
- out->type = REFCLK_GPSTM_TRUETIME;
- out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 |
- CLK_HAVEVAL2 | CLK_HAVEFLAG1;
- out->clockdesc = DESCRIPTION;
- out->fudgetime1 = fudgefactor1[unit];
- out->fudgetime2 = fudgefactor2[unit];
- out->fudgeval1 = stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->flags = readonlyclockflag[unit];
- if (unitinuse[unit]) {
- gpstm = gpstm_units[unit];
- out->lencode = gpstm->lencode;
- out->lastcode = gpstm->lastcode;
- out->timereset = current_time - gpstm->timestarted;
- out->polls = gpstm->polls;
- out->noresponse = gpstm->noreply;
- out->badformat = gpstm->badformat;
- out->baddata = gpstm->baddata;
- out->lastevent = gpstm->lastevent;
- out->currentstatus = gpstm->status;
- }
- }
-}
-
-/*
- * gpstm_buginfo - return clock dependent debugging info
- */
-static void
-gpstm_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_buginfo: unit %d invalid", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- gpstm = gpstm_units[unit];
-
- bug->nvalues = 11;
- bug->ntimes = 5;
- if (gpstm->lasttime != 0)
- bug->values[0] = current_time - gpstm->lasttime;
- else
- bug->values[0] = 0;
- bug->values[1] = gpstm->reason;
- bug->values[2] = gpstm->year;
- bug->values[3] = gpstm->day;
- bug->values[4] = gpstm->hour;
- bug->values[5] = gpstm->minute;
- bug->values[6] = gpstm->second;
- bug->values[7] = gpstm->msec;
- bug->values[8] = gpstm->noreply;
- bug->values[9] = gpstm->yearstart;
- bug->values[10] = gpstm->quality;
- bug->stimes = 0x1c;
- bug->times[0] = gpstm->lastref;
- bug->times[1] = gpstm->lastrec;
- bug->times[2] = gpstm->offset[0];
- bug->times[3] = gpstm->offset[1];
- bug->times[4] = gpstm->offset[2];
-}
-
-#endif /*GPSTM et al*/
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c
deleted file mode 100644
index b2a0e7f..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_leitch.c
+++ /dev/null
@@ -1,718 +0,0 @@
-/*
- * refclock_leitch - clock driver for the Leitch CSD-5300 Master Clock
- */
-#if defined(REFCLOCK) && (defined(LEITCH) || defined(LEITCHCLK) || defined(LEITCHPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#ifdef STREAM
-#include <stropts.h>
-#if defined(LEITCHCLK)
-#include <sys/clkdefs.h>
-#endif /* LEITCHCLK */
-#endif /* STREAM */
-
-#if defined (LEITCHPPS)
-#include <sys/ppsclock.h>
-#endif /* LEITCHPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Driver for Leitch CSD-5300 Master Clock System
- *
- * COMMANDS:
- * DATE: D <CR>
- * TIME: T <CR>
- * STATUS: S <CR>
- * LOOP: L <CR>
- *
- * FORMAT:
- * DATE: YYMMDD<CR>
- * TIME: <CR>/HHMMSS <CR>/HHMMSS <CR>/HHMMSS <CR>/
- * second bondaried on the stop bit of the <CR>
- * second boundaries at '/' above.
- * STATUS: G (good), D (diag fail), T (time not provided) or
- * P (last phone update failed)
- */
-#define MAXUNITS 1 /* max number of LEITCH units */
-#define LEITCHREFID "ATOM" /* reference id */
-#define LEITCH_DESCRIPTION "Leitch: CSD 5300 Master Clock System Driver"
-#define LEITCH232 "/dev/leitch%d" /* name of radio device */
-#define SPEED232 B300 /* uart speed (300 baud) */
-#define leitch_send(A,M) \
- if (debug) fprintf(stderr,"write leitch %s\n",M); \
- if ((write(A->leitchio.fd,M,sizeof(M)) < 0)) {\
- if (debug) \
- fprintf(stderr, "leitch_send: unit %d send failed\n", A->unit); \
- else \
- syslog(LOG_ERR, "leitch_send: unit %d send failed %m",A->unit);}
-
-#define STATE_IDLE 0
-#define STATE_DATE 1
-#define STATE_TIME1 2
-#define STATE_TIME2 3
-#define STATE_TIME3 4
-
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * LEITCH unit control structure
- */
-struct leitchunit {
- struct peer *peer;
- struct event leitchtimer;
- struct refclockio leitchio;
- u_char unit;
- short year;
- short yearday;
- short month;
- short day;
- short hour;
- short second;
- short minute;
- short state;
- u_short fudge1;
- l_fp reftime1;
- l_fp reftime2;
- l_fp reftime3;
- l_fp codetime1;
- l_fp codetime2;
- l_fp codetime3;
- u_long yearstart;
-};
-
-/*
- * Function prototypes
- */
-static void leitch_init P((void));
-static int leitch_start P((u_int, struct peer *));
-static void leitch_shutdown P((int));
-static void leitch_poll P((int, struct peer *));
-static void leitch_control P((u_int, struct refclockstat *, struct refclockstat *));
-#define leitch_buginfo noentry
-static void leitch_receive P((struct recvbuf *));
-static void leitch_process P((struct leitchunit *));
-static void leitch_timeout P((struct peer *));
-static int leitch_get_date P((struct recvbuf *, struct leitchunit *));
-static int leitch_get_time P((struct recvbuf *, struct leitchunit *, int));
-static int dysize P((int));
-
-static struct leitchunit leitchunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_long refid[MAXUNITS];
-
-static char days_in_month [] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-/*
- * Transfer vector
- */
-struct refclock refclock_leitch = {
- leitch_start, leitch_shutdown, leitch_poll,
- leitch_control, leitch_init, leitch_buginfo, NOFLAGS
-};
-
-/*
- * leitch_init - initialize internal leitch driver data
- */
-static void
-leitch_init()
-{
- int i;
-
- memset((char*)leitchunits, 0, sizeof(leitchunits));
- memset((char*)unitinuse, 0, sizeof(unitinuse));
- for (i = 0; i < MAXUNITS; i++)
- memcpy((char *)&refid[i], LEITCHREFID, 4);
-}
-
-/*
- * leitch_shutdown - shut down a LEITCH clock
- */
-static void
-leitch_shutdown(unit)
-int unit;
-{
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_shutdown()\n");
-#endif
-}
-
-/*
- * leitch_poll - called by the transmit procedure
- */
-static void
-leitch_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct leitchunit *leitch;
-
- /* start the state machine rolling */
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_poll()\n");
-#endif
- if (unit > MAXUNITS) {
- /* XXXX syslog it */
- return;
- }
-
- leitch = &leitchunits[unit];
-
- if (leitch->state != STATE_IDLE) {
- /* reset and wait for next poll */
- /* XXXX syslog it */
- leitch->state = STATE_IDLE;
- } else {
- leitch_send(leitch,"D\r");
- leitch->state = STATE_DATE;
- }
-}
-
-static void
-leitch_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "leitch_control: unit %d invalid", unit);
- return;
- }
-
- if (in) {
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = (&leitchunits[unit])->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out) {
- memset((char *)out, 0, sizeof (struct refclockstat));
- out->type = REFCLK_ATOM_LEITCH;
- out->haveflags = CLK_HAVEVAL1 | CLK_HAVEVAL2;
- out->fudgeval1 = stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->lastcode = "";
- out->clockdesc = LEITCH_DESCRIPTION;
- }
-}
-
-/*
- * leitch_start - open the LEITCH devices and initialize data for processing
- */
-static int
-leitch_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- struct leitchunit *leitch;
- int fd232;
- char leitchdev[20];
-
- /*
- * Check configuration info.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "leitch_start: unit %d invalid", unit);
- return (0);
- }
-
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "leitch_start: unit %d in use", unit);
- return (0);
- }
-
- /*
- * Open serial port.
- */
- (void) sprintf(leitchdev, LEITCH232, unit);
- fd232 = open(leitchdev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR,
- "leitch_start: open of %s: %m", leitchdev);
- return (0);
- }
-
- leitch = &leitchunits[unit];
- memset((char*)leitch, 0, sizeof(*leitch));
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TCGETA): %m", leitchdev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TCSETA): %m", leitchdev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The LEITCHCLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The LEITCHPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcgetattr(%s): %m", leitchdev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcsetattr(%s): %m", leitchdev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcflush(%s): %m", leitchdev);
- goto screwed;
- }
- }
-#endif /* HAVE_TERMIOS */
-#ifdef STREAM
-#if defined(LEITCHCLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, I_PUSH, clk): %m", leitchdev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, CLK_SETSTR): %m", leitchdev);
-#endif /* LEITCHCLK */
-#if defined(LEITCHPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, I_PUSH, ppsclock): %m", leitchdev);
- else
- fdpps = fd232;
-#endif /* LEITCHPPS */
-#endif /* STREAM */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The LEITCHCLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(LEITCHCLK)
- int ldisc = CLKLDISC;
-#endif /* LEITCHCLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCGETP): %m", leitchdev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(LEITCHCLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* LEITCHCLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCSETP): %m", leitchdev);
- goto screwed;
- }
-#if defined(LEITCHCLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCSETD): %m",leitchdev);
- goto screwed;
- }
-#endif /* LEITCHCLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Set up the structures
- */
- leitch->peer = peer;
- leitch->unit = unit;
- leitch->state = STATE_IDLE;
- leitch->fudge1 = 15; /* 15ms */
-
- leitch->leitchio.clock_recv = leitch_receive;
- leitch->leitchio.srcclock = (caddr_t) leitch;
- leitch->leitchio.datalen = 0;
- leitch->leitchio.fd = fd232;
- if (!io_addclock(&leitch->leitchio)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success. Note that root delay and root dispersion are
- * always zero for this clock.
- */
- peer->precision = 0;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- return(1);
-
- /*
- * Something broke; abandon ship.
- */
-screwed:
- close(fd232);
- return(0);
-}
-
-/*
- * leitch_receive - receive data from the serial interface on a leitch
- * clock
- */
-static void
-leitch_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct leitchunit *leitch = (struct leitchunit *)rbufp->recv_srcclock;
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_recieve(%*.*s)\n",
- rbufp->recv_length, rbufp->recv_length,
- rbufp->recv_buffer);
-#endif
- if (rbufp->recv_length != 7)
- return; /* The date is return with a trailing newline,
- discard it. */
-
- switch (leitch->state) {
- case STATE_IDLE: /* unexpected, discard and resync */
- return;
- case STATE_DATE:
- if (!leitch_get_date(rbufp,leitch)) {
- leitch->state = STATE_IDLE;
- break;
- }
- leitch_send(leitch,"T\r");
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%u\n",leitch->yearday);
-#endif
- leitch->state = STATE_TIME1;
- break;
- case STATE_TIME1:
- if (!leitch_get_time(rbufp,leitch,1)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime1.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%lu\n", (u_long)leitch->reftime1.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime1.l_uf);
- leitch->codetime1 = rbufp->recv_time;
- leitch->state = STATE_TIME2;
- break;
- case STATE_TIME2:
- if (!leitch_get_time(rbufp,leitch,2)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime2.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%lu\n", (u_long)leitch->reftime2.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime2.l_uf);
- leitch->codetime2 = rbufp->recv_time;
- leitch->state = STATE_TIME3;
- break;
- case STATE_TIME3:
- if (!leitch_get_time(rbufp,leitch,3)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime3.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%lu\n", (u_long)leitch->reftime3.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime3.l_uf);
- leitch->codetime3 = rbufp->recv_time;
- leitch_process(leitch);
- leitch->state = STATE_IDLE;
- break;
- default:
- syslog(LOG_ERR,
- "leitech_receive: invalid state %d unit %d",
- leitch->state, leitch->unit);
- }
-}
-
-/*
- * leitch_process - process a pile of samples from the clock
- *
- * This routine uses a three-stage median filter to calculate offset and
- * dispersion. reduce jitter. The dispersion is calculated as the span
- * of the filter (max - min), unless the quality character (format 2) is
- * non-blank, in which case the dispersion is calculated on the basis of
- * the inherent tolerance of the internal radio oscillator, which is
- * +-2e-5 according to the radio specifications.
- */
-static void
-leitch_process(leitch)
- struct leitchunit *leitch;
-{
- l_fp off;
- s_fp delay;
- l_fp codetime;
- l_fp tmp_fp;
- int isinsync = 1;
- u_fp dispersion = 10;
-
- delay = 20;
-
- codetime = leitch->codetime3;
-
- off = leitch->reftime1;
- L_SUB(&off,&leitch->codetime1);
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n",
- (u_long)leitch->codetime1.l_ui,
- (u_long)leitch->codetime1.l_uf,
- (u_long)leitch->reftime1.l_ui,
- (u_long)leitch->reftime1.l_uf,
- (u_long)off.l_i,
- (u_long)off.l_f);
-#endif
- tmp_fp = leitch->reftime2;
- L_SUB(&tmp_fp,&leitch->codetime2);
- if (L_ISGEQ(&off,&tmp_fp))
- off = tmp_fp;
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n",
- (u_long)leitch->codetime2.l_ui,
- (u_long)leitch->codetime2.l_uf,
- (u_long)leitch->reftime2.l_ui,
- (u_long)leitch->reftime2.l_uf,
- (u_long)off.l_i,
- (u_long)off.l_f);
-#endif
- tmp_fp = leitch->reftime3;
- L_SUB(&tmp_fp,&leitch->codetime3);
-
- if (L_ISGEQ(&off,&tmp_fp))
- off = tmp_fp;
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%lu %lu %lu %lu %ld %ld\n",
- (u_long)leitch->codetime3.l_ui,
- (u_long)leitch->codetime3.l_uf,
- (u_long)leitch->reftime3.l_ui,
- (u_long)leitch->reftime3.l_uf,
- (u_long)off.l_i,
- (u_long)off.l_f);
-#endif
- refclock_receive(leitch->peer, &off, 0, dispersion, &codetime,
- &codetime, isinsync);
-}
-
-/*
- * leitch_timeout
- */
-static void
-leitch_timeout(fp)
- struct peer *fp;
-{
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_timeout()\n");
-#endif
-
-#ifdef NOTYET
- { struct leitchunit *leitch = (struct leitchunit *)fp;
-
- switch(leitch->state) {
- case STATE_IDLE:
- leitch_send(leitch,"D\r");
- leitch->state = STATE_DATE;
- break;
- case STATE_DATE:
- leitch_send(leitch,"T\r");
- leitch->state = STATE_TIME1;
- break;
- case STATE_TIME1:
- case STATE_TIME2:
- case STATE_TIME3:
- default:
- break;
- }
-
- leitch->leitchtimer.event_time += 30;
- TIMER_ENQUEUE(timerqueue, &leitch->leitchtimer);
- }
-#endif /* NOTYET */
-}
-
-/*
- * dysize
- */
-static int
-dysize(year)
-int year;
-{
- if (year%4) { /* not a potential leap year */
- return (365);
- } else {
- if (year % 100) { /* is a leap year */
- return (366);
- } else {
- if (year % 400) {
- return (365);
- } else {
- return (366);
- }
- }
- }
-}
-
-static int
-leitch_get_date(rbufp,leitch)
- struct recvbuf *rbufp;
- struct leitchunit *leitch;
-{
- int i;
-
- if (rbufp->recv_length < 6)
- return(0);
-#define BAD(A) (rbufp->recv_buffer[A] < '0') || (rbufp->recv_buffer[A] > '9')
- if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5))
- return(0);
-#define ATOB(A) ((rbufp->recv_buffer[A])-'0')
- leitch->year = ATOB(0)*10 + ATOB(1);
- leitch->month = ATOB(2)*10 + ATOB(3);
- leitch->day = ATOB(4)*10 + ATOB(5);
-
- /* sanity checks */
- if (leitch->month > 12)
- return(0);
- if (leitch->day > days_in_month[leitch->month-1])
- return(0);
-
- /* calculate yearday */
- i = 0;
- leitch->yearday = leitch->day;
-
- while ( i < (leitch->month-1) )
- leitch->yearday += days_in_month[i++];
-
- if ((dysize((leitch->year>90?1900:2000)+leitch->year)==365) &&
- leitch->month > 2)
- leitch->yearday--;
-
- return(1);
-}
-
-/*
- * leitch_get_time
- */
-static int
-leitch_get_time(rbufp,leitch,which)
- struct recvbuf *rbufp;
- struct leitchunit *leitch;
- int which;
-{
- if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5))
- return(0);
- leitch->hour = ATOB(0)*10 +ATOB(1);
- leitch->minute = ATOB(2)*10 +ATOB(3);
- leitch->second = ATOB(4)*10 +ATOB(5);
-
- if ((leitch->hour > 23) || (leitch->minute > 60) ||
- (leitch->second > 60))
- return(0);
- return(1);
-}
-
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c
deleted file mode 100644
index 5a6307c..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_msfees.c
+++ /dev/null
@@ -1,1575 +0,0 @@
-/* refclock_ees - clock driver for the EES M201 receiver */
-
-#if defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM)
-
-/* Currently REQUIRES STREAM and PPSCD. CLK and CBREAK modes
- * were removed as the code was overly hairy, they weren't in use
- * (hence probably didn't work). Still in RCS file at cl.cam.ac.uk
- */
-
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_calendar.h"
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-#include <termios.h>
-#include <stropts.h>
-#include <sys/ppsclock.h>
-#include "ntp_stdlib.h"
-
- /*
- fudgefactor = fudgetime1;
- os_delay = fudgetime2;
- offset_fudge = os_delay + fudgefactor + inherent_delay;
- stratumtouse = fudgeval1 & 0xf
- debug = fudgeval2;
- sloppyclockflag = flags & CLK_FLAG1;
- 1 log smoothing summary when processing sample
- 4 dump the buffer from the clock
- 8 EIOGETKD the last n uS time stamps
- if (flags & CLK_FLAG2 && unitinuse) ees->leaphold = 0;
- ees->dump_vals = flags & CLK_FLAG3;
- ees->usealldata = flags & CLK_FLAG4;
-
-
- bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0;
- bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0;
- bug->values[2] = ees->status;
- bug->values[3] = ees->lastevent;
- bug->values[4] = ees->reason;
- bug->values[5] = ees->nsamples;
- bug->values[6] = ees->codestate;
- bug->values[7] = ees->day;
- bug->values[8] = ees->hour;
- bug->values[9] = ees->minute;
- bug->values[10] = ees->second;
- bug->values[11] = ees->tz;
- bug->values[12] = ees->yearstart;
- bug->values[13] = (ees->leaphold > current_time) ?
- ees->leaphold - current_time : 0;
- bug->values[14] = inherent_delay[unit].l_uf;
- bug->values[15] = offset_fudge[unit].l_uf;
-
- bug->times[0] = ees->reftime;
- bug->times[1] = ees->arrvtime;
- bug->times[2] = ees->lastsampletime;
- bug->times[3] = ees->offset;
- bug->times[4] = ees->lowoffset;
- bug->times[5] = ees->highoffset;
- bug->times[6] = inherent_delay[unit];
- bug->times[8] = os_delay[unit];
- bug->times[7] = fudgefactor[unit];
- bug->times[9] = offset_fudge[unit];
- bug->times[10]= ees->yearstart, 0;
- */
-
-/* This should support the use of an EES M201 receiver with RS232
- * output (modified to transmit time once per second).
- *
- * For the format of the message sent by the clock, see the EESM_
- * definitions below.
- *
- * It appears to run free for an integral number of minutes, until the error
- * reaches 4mS, at which point it steps at second = 01.
- * It appears that sometimes it steps 4mS (say at 7 min interval),
- * then the next minute it decides that it was an error, so steps back.
- * On the next minute it steps forward again :-(
- * This is typically 16.5uS/S then 3975uS at the 4min re-sync,
- * or 9.5uS/S then 3990.5uS at a 7min re-sync,
- * at which point it may loose the "00" second time stamp.
- * I assume that the most accurate time is just AFTER the re-sync.
- * Hence remember the last cycle interval,
- *
- * Can run in any one of:
- *
- * PPSCD PPS signal sets CD which interupts, and grabs the current TOD
- * (sun) *in the interupt code*, so as to avoid problems with
- * the STREAMS scheduling.
- *
- * It appears that it goes 16.5 uS slow each second, then every 4 mins it
- * generates no "00" second tick, and gains 3975 uS. Ho Hum ! (93/2/7)
- */
-
-/* Definitions */
-#ifndef MAXUNITS
-#define MAXUNITS 4 /* maximum number of EES units permitted */
-#endif
-
-#ifndef EES232
-#define EES232 "/dev/ees%d" /* Device to open to read the data */
-#endif
-
-/* Other constant stuff */
-#ifndef EESPRECISION
-#define EESPRECISION (-10) /* what the heck - 2**-10 = 1ms */
-#endif
-#ifndef EESREFID
-#define EESREFID "MSF\0" /* String to identify the clock */
-#endif
-#ifndef EESHSREFID
-#define EESHSREFID (0x7f7f0000 | ((REFCLK_MSF_EES) << 8)) /* Numeric refid */
-#endif
-
-/* Description of clock */
-#define EESDESCRIPTION "EES M201 MSF Receiver"
-
-/* Speed we run the clock port at. If this is changed the UARTDELAY
- * value should be recomputed to suit.
- */
-#ifndef SPEED232
-#define SPEED232 B9600 /* 9600 baud */
-#endif
-
-/* What is the inherent delay for this mode of working, i.e. when is the
- * data time stamped.
- */
-#define SAFETY_SHIFT 10 /* Split the shift to avoid overflow */
-#define BITS_TO_L_FP(bits, baud) \
- (((((bits)*2 +1) << (FRACTION_PREC-SAFETY_SHIFT)) / (2*baud)) << SAFETY_SHIFT)
-#define INH_DELAY_CBREAK BITS_TO_L_FP(119, 9600)
-#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
-
-#ifndef STREAM_PP1
-#define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
-#endif
-#ifndef STREAM_PP2
-#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
-#endif
-
-/* Offsets of the bytes of the serial line code. The clock gives
- * local time with a GMT/BST indication. The EESM_ definitions
- * give offsets into ees->lastcode.
- */
-#define EESM_CSEC 0 /* centiseconds - always zero in our clock */
-#define EESM_SEC 1 /* seconds in BCD */
-#define EESM_MIN 2 /* minutes in BCD */
-#define EESM_HOUR 3 /* hours in BCD */
-#define EESM_DAYWK 4 /* day of week (Sun = 0 etc) */
-#define EESM_DAY 5 /* day of month in BCD */
-#define EESM_MON 6 /* month in BCD */
-#define EESM_YEAR 7 /* year MOD 100 in BCD */
-#define EESM_LEAP 8 /* 0x0f if leap year, otherwise zero */
-#define EESM_BST 9 /* 0x03 if BST, 0x00 if GMT */
-#define EESM_MSFOK 10 /* 0x3f if radio good, otherwise zero */
- /* followed by a frame alignment byte (0xff) /
- / which is not put into the lastcode buffer*/
-
-/* Length of the serial time code, in characters. The first length
- * is less the frame alignment byte.
- */
-#define LENEESPRT (EESM_MSFOK+1)
-#define LENEESCODE (LENEESPRT+1)
-
-/* Code state. */
-#define EESCS_WAIT 0 /* waiting for start of timecode */
-#define EESCS_GOTSOME 1 /* have an incomplete time code buffered */
-
-/* Default fudge factor and character to receive */
-#define DEFFUDGETIME 0 /* Default user supplied fudge factor */
-#ifndef DEFOSTIME
-#define DEFOSTIME 0 /* Default OS delay -- passed by Make ? */
-#endif
-#define DEFINHTIME INH_DELAY_PPS /* inherent delay due to sample point*/
-
-/* Limits on things. Reduce the number of samples to SAMPLEREDUCE by median
- * elimination. If we're running with an accurate clock, chose the BESTSAMPLE
- * as the estimated offset, otherwise average the remainder.
- */
-#define FULLSHIFT 6 /* NCODES root 2 */
-#define NCODES (1<< FULLSHIFT) /* 64 */
-#define REDUCESHIFT (FULLSHIFT -1) /* SAMPLEREDUCE root 2 */
-
-/* Towards the high ( Why ?) end of half */
-#define BESTSAMPLE ((samplereduce * 3) /4) /* 24 */
-
-/* Leap hold time. After a leap second the clock will no longer be
- * reliable until it resynchronizes. Hope 40 minutes is enough. */
-#define EESLEAPHOLD (40 * 60)
-
-#define EES_STEP_F (1 << 24) /* the receiver steps in units of about 4ms */
-#define EES_STEP_F_GRACE (EES_STEP_F/8) /*Allow for slop of 1/8 which is .5ms*/
-#define EES_STEP_NOTE (1 << 21)/* Log any unexpected jumps, say .5 ms .... */
-#define EES_STEP_NOTES 50 /* Only do a limited number */
-#define MAX_STEP 16 /* Max number of steps to remember */
-
-/* debug is a bit mask of debugging that is wanted */
-#define DB_SYSLOG_SMPLI 0x0001
-#define DB_SYSLOG_SMPLE 0x0002
-#define DB_SYSLOG_SMTHI 0x0004
-#define DB_SYSLOG_NSMTHE 0x0008
-#define DB_SYSLOG_NSMTHI 0x0010
-#define DB_SYSLOG_SMTHE 0x0020
-#define DB_PRINT_EV 0x0040
-#define DB_PRINT_CDT 0x0080
-#define DB_PRINT_CDTC 0x0100
-#define DB_SYSLOG_KEEPD 0x0800
-#define DB_SYSLOG_KEEPE 0x1000
-#define DB_LOG_DELTAS 0x2000
-#define DB_PRINT_DELTAS 0x4000
-#define DB_LOG_AWAITMORE 0x8000
-#define DB_LOG_SAMPLES 0x10000
-#define DB_NO_PPS 0x20000
-#define DB_INC_PPS 0x40000
-#define DB_DUMP_DELTAS 0x80000
-
-struct eesunit { /* EES unit control structure. */
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp reftime; /* reference time */
- l_fp lastsampletime; /* time as in txt from last EES msg */
- l_fp arrvtime; /* Time at which pkt arrived */
- l_fp codeoffsets[NCODES]; /* the time of arrival of 232 codes */
- l_fp offset; /* chosen offset (for clkbug) */
- l_fp lowoffset; /* lowest sample offset (for clkbug) */
- l_fp highoffset; /* highest " " (for clkbug) */
- char lastcode[LENEESCODE+6]; /* last time code we received */
- u_long lasttime; /* last time clock heard from */
- u_long clocklastgood; /* last time good radio seen */
- u_char lencode; /* length of code in buffer */
- u_char nsamples; /* number of samples we've collected */
- u_char codestate; /* state of 232 code reception */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- char tz; /* timezone from clock */
- u_char ttytype; /* method used */
- u_char dump_vals; /* Should clock values be dumped */
- u_char usealldata; /* Use ALL samples */
- u_short day; /* day of year from last code */
- u_long yearstart; /* start of current year */
- u_long leaphold; /* time of leap hold expiry */
- u_long badformat; /* number of bad format codes */
- u_long baddata; /* number of invalid time codes */
- u_long timestarted; /* time we started this */
- long last_pps_no; /* The serial # of the last PPS */
- char fix_pending; /* Is a "sync to time" pending ? */
- /* Fine tuning - compensate for 4 mS ramping .... */
- l_fp last_l; /* last time stamp */
- u_char last_steps[MAX_STEP]; /* Most recent n steps */
- int best_av_step; /* Best guess at average step */
- char best_av_step_count; /* # of steps over used above */
- char this_step; /* Current pos in buffer */
- int last_step_late; /* How late the last step was (0-59) */
- long jump_fsecs; /* # of fractions of a sec last jump */
- u_long last_step; /* time of last step */
- int last_step_secs; /* Number of seconds in last step */
- int using_ramp; /* 1 -> noemal, -1 -> over stepped */
-};
-#define last_sec last_l.l_ui
-#define last_sfsec last_l.l_f
-#define this_uisec ((ees->arrvtime).l_ui)
-#define this_sfsec ((ees->arrvtime).l_f)
-#define msec(x) ((x) / (1<<22))
-#define LAST_STEPS (sizeof ees->last_steps / sizeof ees->last_steps[0])
-#define subms(x) ((((((x < 0) ? (-(x)) : (x)) % (1<<22))/2) * 625) / (1<<(22 -5)))
-
-/* Bitmask for what methods to try to use -- currently only PPS enabled */
-#define T_CBREAK 1
-#define T_PPS 8
-/* macros to test above */
-#define is_cbreak(x) ((x)->ttytype & T_CBREAK)
-#define is_pps(x) ((x)->ttytype & T_PPS)
-#define is_any(x) ((x)->ttytype)
-
-#define CODEREASON 20 /* reason codes */
-
-/* Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back. */
-static struct eesunit *eesunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/* Keep the fudge factors separately so they can be set even
- * when no clock is configured. */
-static l_fp inherent_delay[MAXUNITS]; /* when time stamp is taken */
-static l_fp fudgefactor[MAXUNITS]; /* fudgetime1 */
-static l_fp os_delay[MAXUNITS]; /* fudgetime2 */
-static l_fp offset_fudge[MAXUNITS]; /* Sum of above */
-static u_char stratumtouse[MAXUNITS];
-static u_char sloppyclockflag[MAXUNITS];
-
-static int deltas[60];
-
-static l_fp acceptable_slop; /* = { 0, 1 << (FRACTION_PREC -2) }; */
-static l_fp onesec; /* = { 1, 0 }; */
-
-/* Imported from the timer module */
-extern u_long current_time;
-
-#ifdef DEBUG
-static int debug;
-#endif
-
-#ifndef DUMP_BUF_SIZE /* Size of buffer to be used by dump_buf */
-#define DUMP_BUF_SIZE 10112
-#endif
-
-/* ees_reset - reset the count back to zero */
-#define ees_reset(ees) (ees)->nsamples = 0; \
- (ees)->codestate = EESCS_WAIT
-
-/* ees_event - record and report an event */
-#define ees_event(ees, evcode) if ((ees)->status != (u_char)(evcode)) \
- ees_report_event((ees), (evcode))
-
-/* Find the precision of the system clock by reading it */
-#define USECS 1000000
-#define MINSTEP 5 /* some systems increment uS on each call */
-#define MAXLOOPS (USECS/9)
-static int ees_get_precision()
-{
- struct timeval tp;
- struct timezone tzp;
- long last;
- int i;
- long diff;
- long val;
- gettimeofday(&tp, &tzp);
-
- last = tp.tv_usec;
- for (i=0; i< 100000; i++) {
- gettimeofday(&tp, &tzp);
- diff = tp.tv_usec - last;
- if (diff < 0) diff += USECS;
- if (diff > MINSTEP) break;
- last = tp.tv_usec;
- }
- syslog(LOG_INFO,
- "I: ees: precision calculation given %duS after %d loop%s",
- diff, i, (i==1) ? "" : "s");
-
- if (i == 0) return -20 /* assume 1uS */;
- if (i >= MAXLOOPS) return EESPRECISION /* Lies ! */;
- for (i=0, val=USECS; val > 0; i--, val /= 2) if (diff > val) return i;
- return EESPRECISION /* Lies ! */;
-}
-
-static void dump_buf(coffs, from, to, text)
-l_fp *coffs;
-int from;
-int to;
-char *text;
-{
- char buff[DUMP_BUF_SIZE + 80];
- int i;
- register char *ptr = buff;
- sprintf(ptr, text);
- for (i=from; i<to; i++)
- { while (*ptr) ptr++;
- if ((ptr-buff) > DUMP_BUF_SIZE) syslog(LOG_DEBUG, "D: %s", ptr=buff);
- sprintf(ptr, " %06d", ((int)coffs[i].l_f) / 4295);
- }
- syslog(LOG_DEBUG, "D: %s", buff);
-}
-
-/* msfees_init - initialize internal ees driver data */
-static void msfees_init()
-{
- register int i;
- /* Just zero the data arrays */
- memset((char *)eesunits, 0, sizeof eesunits);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- acceptable_slop.l_ui = 0;
- acceptable_slop.l_uf = 1 << (FRACTION_PREC -2);
-
- onesec.l_ui = 1;
- onesec.l_uf = 0;
-
- /* Initialize fudge factors to default. */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor[i].l_ui = 0;
- fudgefactor[i].l_uf = DEFFUDGETIME;
- os_delay[i].l_ui = 0;
- os_delay[i].l_uf = DEFOSTIME;
- inherent_delay[i].l_ui = 0;
- inherent_delay[i].l_uf = DEFINHTIME;
- offset_fudge[i] = os_delay[i];
- L_ADD(&offset_fudge[i], &fudgefactor[i]);
- L_ADD(&offset_fudge[i], &inherent_delay[i]);
- stratumtouse[i] = 0;
- sloppyclockflag[i] = 0;
- }
-}
-
-
-/* msfees_start - open the EES devices and initialize data for processing */
-static int msfees_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct eesunit *ees;
- register int i;
- int fd232 = -1;
- char eesdev[20];
- struct termios ttyb, *ttyp;
- static void ees_receive();
- extern int io_addclock();
- extern void io_closeclock();
- extern char *emalloc();
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit number %d invalid (max %d)",
- unit, MAXUNITS-1);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "ees clock: unit number %d in use", unit);
- return 0;
- }
-
- /* Unit okay, attempt to open the devices. We do them both at
- * once to make sure we can */
- (void) sprintf(eesdev, EES232, unit);
-
- fd232 = open(eesdev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "ees clock: open of %s failed: %m", eesdev);
- return 0;
- }
-
-#ifdef TIOCEXCL
- /* Set for exclusive use */
- if (ioctl(fd232, TIOCEXCL, (char *)0) < 0) {
- syslog(LOG_ERR, "ees clock: ioctl(%s, TIOCEXCL): %m", eesdev);
- goto screwed;
- }
-#endif
-
- /* STRIPPED DOWN VERSION: Only PPS CD is supported at the moment */
-
- /* Set port characteristics. If we don't have a STREAMS module or
- * a clock line discipline, cooked mode is just usable, even though it
- * strips the top bit. The only EES byte which uses the top
- * bit is the year, and we don't use that anyway. If we do
- * have the line discipline, we choose raw mode, and the
- * line discipline code will block up the messages.
- */
-
- /* STIPPED DOWN VERSION: Only PPS CD is supported at the moment */
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR, "msfees_start: tcgetattr(%s): %m", eesdev);
- goto screwed;
- }
-
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_oflag = 0;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR, "msfees_start: tcsetattr(%s): %m", eesdev);
- goto screwed;
- }
-
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR, "msfees_start: tcflush(%s): %m", eesdev);
- goto screwed;
- }
-
- inherent_delay[unit].l_uf = INH_DELAY_PPS;
-
- /* offset fudge (how *late* the timestamp is) = fudge + os delays */
- offset_fudge[unit] = os_delay[unit];
- L_ADD(&offset_fudge[unit], &fudgefactor[unit]);
- L_ADD(&offset_fudge[unit], &inherent_delay[unit]);
-
- /* Looks like this might succeed. Find memory for the structure.
- * Look to see if there are any unused ones, if not we malloc() one.
- */
- if (eesunits[unit] != 0) /* The one we want is okay */
- ees = eesunits[unit];
- else {
- /* Look for an unused, but allocated struct */
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && eesunits[i] != 0)
- break;
- }
-
- if (i < MAXUNITS) { /* Reclaim this one */
- ees = eesunits[i];
- eesunits[i] = 0;
- } /* no spare -- make a new one */
- else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
- }
- memset((char *)ees, 0, sizeof(struct eesunit));
- eesunits[unit] = ees;
-
- /* Set up the structures */
- ees->peer = peer;
- ees->unit = (u_char)unit;
- ees->timestarted= current_time;
- ees->ttytype = 0;
- ees->io.clock_recv= ees_receive;
- ees->io.srcclock= (caddr_t)ees;
- ees->io.datalen = 0;
- ees->io.fd = fd232;
-
- /* Okay. Push one of the two (linked into the kernel, or dynamically
- * loaded) STREAMS module, and give it to the I/O code to start
- * receiving stuff.
- */
-
- {
- int rc1;
- /* Pop any existing onews first ... */
- while (ioctl(fd232, I_POP, 0 ) >= 0) ;
-
- /* Now try pushing either of the possible modules */
- if ((rc1=ioctl(fd232, I_PUSH, STREAM_PP1)) < 0 &&
- ioctl(fd232, I_PUSH, STREAM_PP2) < 0) {
- syslog(LOG_ERR,
- "ees clock: Push of `%s' and `%s' to %s failed %m",
- STREAM_PP1, STREAM_PP2, eesdev);
- goto screwed;
- }
- else {
- syslog(LOG_INFO, "I: ees clock: PUSHed %s on %s",
- (rc1 >= 0) ? STREAM_PP1 : STREAM_PP2, eesdev);
- ees->ttytype |= T_PPS;
- }
- }
-
- /* Add the clock */
- if (!io_addclock(&ees->io)) {
- /* Oh shit. Just close and return. */
- syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev);
- goto screwed;
- }
-
-
- /* All done. Initialize a few random peer variables, then
- * return success. */
- peer->precision = ees_get_precision();
- peer->stratum = stratumtouse[unit];
- peer->rootdelay = 0; /* ++++ */
- peer->rootdispersion = 0; /* ++++ */
- if (stratumtouse[unit] <= 1) {
- memmove((char *)&peer->refid, EESREFID, 4);
- if (unit > 0 && unit < 10)
- ((char *)&peer->refid)[3] = '0' + unit;
- } else {
- peer->refid = htonl(EESHSREFID);
- }
- unitinuse[unit] = 1;
- syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
- return (1);
-
-screwed:
- if (fd232 != -1)
- (void) close(fd232);
- return (0);
-}
-
-
-/* msfees_shutdown - shut down a EES clock */
-static void msfees_shutdown(unit)
- int unit;
-{
- register struct eesunit *ees;
- extern void io_closeclock();
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "ees clock: INTERNAL ERROR, unit number %d invalid (max %d)",
- unit, MAXUNITS);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR,
- "ees clock: INTERNAL ERROR, unit number %d not in use", unit);
- return;
- }
-
- /* Tell the I/O module to turn us off. We're history. */
- ees = eesunits[unit];
- io_closeclock(&ees->io);
- unitinuse[unit] = 0;
-}
-
-
-/* ees_report_event - note the occurance of an event */
-static void ees_report_event(ees, code)
- struct eesunit *ees;
- int code;
-{
- if (ees->status != (u_char)code) {
- ees->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- ees->lastevent = (u_char)code;
- /* Should report event to trap handler in here.
- * Soon...
- */
- }
-}
-
-
-/* ees_receive - receive data from the serial interface on an EES clock */
-static void ees_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int n_sample;
- register int day;
- register struct eesunit *ees;
- register u_char *dpt; /* Data PoinTeR: move along ... */
- register u_char *dpend; /* Points just *after* last data char */
- register char *cp;
- l_fp tmp;
- static void ees_process();
- int call_pps_sample = 0;
- l_fp pps_arrvstamp;
- int sincelast;
- int pps_step = 0;
- int suspect_4ms_step = 0;
- struct ppsclockev ppsclockev;
- long *ptr = (long *) &ppsclockev;
- extern errno;
- int rc;
-
- /* Get the clock this applies to and a pointer to the data */
- ees = (struct eesunit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
- dpend = dpt + rbufp->recv_length;
- if ((debug & DB_LOG_AWAITMORE) && (rbufp->recv_length != LENEESCODE))
- printf("[%d] ", rbufp->recv_length);
-
- /* Check out our state and process appropriately */
- switch (ees->codestate) {
- case EESCS_WAIT:
- /* Set an initial guess at the timestamp as the recv time.
- * If just running in CBREAK mode, we can't improve this.
- * If we have the CLOCK Line Discipline, PPSCD, or sime such,
- * then we will do better later ....
- */
- ees->arrvtime = rbufp->recv_time;
- ees->codestate = EESCS_GOTSOME;
- ees->lencode = 0;
- /*FALLSTHROUGH*/
-
- case EESCS_GOTSOME:
- cp = &(ees->lastcode[ees->lencode]);
-
- /* Gobble the bytes until the final (possibly stripped) 0xff */
- while (dpt < dpend && (*dpt & 0x7f) != 0x7f) {
- *cp++ = (char)*dpt++;
- ees->lencode++;
- /* Oh dear -- too many bytes .. */
- if (ees->lencode > LENEESPRT) {
- syslog(LOG_INFO,
-"I: ees clock: %d + %d > %d [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x]",
- ees->lencode, dpend - dpt, LENEESPRT,
-#define D(x) (ees->lastcode[x])
- D(0), D(1), D(2), D(3), D(4), D(5), D(6),
- D(7), D(8), D(9), D(10), D(11), D(12));
-#undef D
- ees->badformat++;
- ees->reason = CODEREASON + 1;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
- }
- /* Gave up because it was end of the buffer, rather than ff */
- if (dpt == dpend) {
- /* Incomplete. Wait for more. */
- if (debug & DB_LOG_AWAITMORE) syslog(LOG_INFO,
- "I: ees clock %d: %d == %d: await more",
- ees->unit, dpt, dpend);
- return;
- }
-
- /* This shouldn't happen ... ! */
- if ((*dpt & 0x7f) != 0x7f) {
- syslog(LOG_INFO, "I: ees clock: %0x & 0x7f != 0x7f", *dpt);
- ees->badformat++;
- ees->reason = CODEREASON + 2;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* Skip the 0xff */
- dpt++;
-
- /* Finally, got a complete buffer. Mainline code will
- * continue on. */
- cp = ees->lastcode;
- break;
-
- default:
- syslog(LOG_ERR, "ees clock: INTERNAL ERROR: %d state %d",
- ees->unit, ees->codestate);
- ees->reason = CODEREASON + 5;
- ees_event(ees, CEVNT_FAULT);
- ees_reset(ees);
- return;
- }
-
- /* Boy! After all that crap, the lastcode buffer now contains
- * something we hope will be a valid time code. Do length
- * checks and sanity checks on constant data.
- */
- ees->codestate = EESCS_WAIT;
- ees->lasttime = current_time;
- if (ees->lencode != LENEESPRT) {
- ees->badformat++;
- ees->reason = CODEREASON + 6;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- cp = ees->lastcode;
-
- /* Check that centisecond is zero */
- if (cp[EESM_CSEC] != 0) {
- ees->baddata++;
- ees->reason = CODEREASON + 7;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* Check flag formats */
- if (cp[EESM_LEAP] != 0 && cp[EESM_LEAP] != 0x0f) {
- ees->badformat++;
- ees->reason = CODEREASON + 8;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- if (cp[EESM_BST] != 0 && cp[EESM_BST] != 0x03) {
- ees->badformat++;
- ees->reason = CODEREASON + 9;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- if (cp[EESM_MSFOK] != 0 && cp[EESM_MSFOK] != 0x3f) {
- ees->badformat++;
- ees->reason = CODEREASON + 10;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* So far, so good. Compute day, hours, minutes, seconds,
- * time zone. Do range checks on these.
- */
-
-#define bcdunpack(val) ( (((val)>>4) & 0x0f) * 10 + ((val) & 0x0f) )
-#define istrue(x) ((x)?1:0)
-
- ees->second = bcdunpack(cp[EESM_SEC]); /* second */
- ees->minute = bcdunpack(cp[EESM_MIN]); /* minute */
- ees->hour = bcdunpack(cp[EESM_HOUR]); /* hour */
-
- day = bcdunpack(cp[EESM_DAY]); /* day of month */
-
- switch (bcdunpack(cp[EESM_MON])) { /* month */
-
- /* Add in lengths of all previous months. Add one more
- if it is a leap year and after February.
- */
- case 12: day += NOV; /*FALLSTHROUGH*/
- case 11: day += OCT; /*FALLSTHROUGH*/
- case 10: day += SEP; /*FALLSTHROUGH*/
- case 9: day += AUG; /*FALLSTHROUGH*/
- case 8: day += JUL; /*FALLSTHROUGH*/
- case 7: day += JUN; /*FALLSTHROUGH*/
- case 6: day += MAY; /*FALLSTHROUGH*/
- case 5: day += APR; /*FALLSTHROUGH*/
- case 4: day += MAR; /*FALLSTHROUGH*/
- case 3: day += FEB;
- if (istrue(cp[EESM_LEAP])) day++; /*FALLSTHROUGH*/
- case 2: day += JAN; /*FALLSTHROUGH*/
- case 1: break;
- default: ees->baddata++;
- ees->reason = CODEREASON + 11;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
-
- ees->day = day;
-
- /* Get timezone. The clocktime routine wants the number
- * of hours to add to the delivered time to get UT.
- * Currently -1 if BST flag set, 0 otherwise. This
- * is the place to tweak things if double summer time
- * ever happens.
- */
- ees->tz = istrue(cp[EESM_BST]) ? -1 : 0;
-
- if (ees->day > 366 || ees->day < 1 ||
- ees->hour > 23 || ees->minute > 59 || ees->second > 59) {
- ees->baddata++;
- ees->reason = CODEREASON + 12;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
-
- n_sample = ees->nsamples;
-
- /* Now, compute the reference time value: text -> tmp.l_ui */
- if (!clocktime(ees->day, ees->hour, ees->minute, ees->second,
- ees->tz, rbufp->recv_time.l_ui, &ees->yearstart,
- &tmp.l_ui)) {
- ees->baddata++;
- ees->reason = CODEREASON + 13;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
- tmp.l_uf = 0;
-
- /* DON'T use ees->arrvtime -- it may be < reftime */
- ees->lastsampletime = tmp;
-
- /* If we are synchronised to the radio, update the reference time.
- * Also keep a note of when clock was last good.
- */
- if (istrue(cp[EESM_MSFOK])) {
- ees->reftime = tmp;
- ees->clocklastgood = current_time;
- }
-
-
- /* Compute the offset. For the fractional part of the
- * offset we use the expected delay for the message.
- */
- ees->codeoffsets[n_sample].l_ui = tmp.l_ui;
- ees->codeoffsets[n_sample].l_uf = 0;
-
- /* Number of seconds since the last step */
- sincelast = this_uisec - ees->last_step;
-
- memset(&ppsclockev, 0, sizeof ppsclockev);
-
- rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
- if (debug & DB_PRINT_EV) fprintf(stderr,
- "[%x] CIOGETEV u%d %d (%x %d) gave %d (%d): %08x %08x %d\n",
- DB_PRINT_EV, ees->unit, ees->io.fd, CIOGETEV, is_pps(ees),
- rc, errno, ptr[0], ptr[1], ptr[2]);
-
- /* If we managed to get the time of arrival, process the info */
- if (rc >= 0) {
- int conv = -1;
- pps_step = ppsclockev.serial - ees->last_pps_no;
-
- /* Possible that PPS triggered, but text message didn't */
- if (pps_step == 2) syslog(LOG_ERR, "pps step = 2 @ %02d", ees->second);
- if (pps_step == 2 && ees->second == 1) suspect_4ms_step |= 1;
- if (pps_step == 2 && ees->second == 2) suspect_4ms_step |= 4;
-
- /* allow for single loss of PPS only */
- if (pps_step != 1 && pps_step != 2)
- fprintf(stderr, "PPS step: %d too far off %d (%d)\n",
- ppsclockev.serial, ees->last_pps_no, pps_step);
- else if (!buftvtots((char *) &(ppsclockev.tv), &pps_arrvstamp))
- fprintf(stderr, "buftvtots failed\n");
- else { /* if ((ABS(time difference) - 0.25) < 0)
- * then believe it ...
- */
- l_fp diff;
- diff = pps_arrvstamp;
- conv = 0;
- L_SUB(&diff, &ees->arrvtime);
-if (debug & DB_PRINT_CDT) printf("[%x] Have %x.%08x and %x.%08x -> %x.%08x @ %s",
- DB_PRINT_CDT, ees->arrvtime.l_ui, ees->arrvtime.l_uf,
- pps_arrvstamp.l_ui, pps_arrvstamp.l_uf,
- diff.l_ui, diff.l_uf,
- ctime(&(ppsclockev.tv.tv_sec)));
- if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf);
- L_SUB(&diff, &acceptable_slop);
- if (L_ISNEG(&diff)) { /* AOK -- pps_sample */
- ees->arrvtime = pps_arrvstamp;
- conv++;
- call_pps_sample++;
- }
- /* Some loss of some signals around sec = 1 */
- else if (ees->second == 1) {
- diff = pps_arrvstamp;
- L_ADD(&diff, &onesec);
- L_SUB(&diff, &ees->arrvtime);
- if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf);
- L_SUB(&diff, &acceptable_slop);
-syslog(LOG_ERR, "Have sec==1 slip %ds a=%08x-p=%08x -> %x.%08x (u=%d) %s",
- pps_arrvstamp.l_ui - ees->arrvtime.l_ui,
- pps_arrvstamp.l_uf,
- ees->arrvtime.l_uf,
- diff.l_ui, diff.l_uf,
- ppsclockev.tv.tv_usec,
- ctime(&(ppsclockev.tv.tv_sec)));
- if (L_ISNEG(&diff)) { /* AOK -- pps_sample */
- suspect_4ms_step |= 2;
- ees->arrvtime = pps_arrvstamp;
- L_ADD(&ees->arrvtime, &onesec);
- conv++;
- call_pps_sample++;
- }
- }
- }
- ees->last_pps_no = ppsclockev.serial;
- if (debug & DB_PRINT_CDTC) printf(
- "[%x] %08x %08x %d u%d (%d %d)\n",
- DB_PRINT_CDTC, pps_arrvstamp.l_ui,
- pps_arrvstamp.l_uf, conv, ees->unit,
- call_pps_sample, pps_step);
- }
-
- /* See if there has been a 4ms jump at a minute boundry */
- { l_fp delta;
-#define delta_isec delta.l_ui
-#define delta_ssec delta.l_i
-#define delta_sfsec delta.l_f
- long delta_f_abs;
-
- delta.l_i = ees->arrvtime.l_i;
- delta.l_f = ees->arrvtime.l_f;
-
- L_SUB(&delta, &ees->last_l);
- delta_f_abs = delta_sfsec;
- if (delta_f_abs < 0) delta_f_abs = -delta_f_abs;
-
- /* Dump the deltas each minute */
- if (debug & DB_DUMP_DELTAS)
- { if (0 <= ees->second &&
- ees->second < ((sizeof deltas) / (sizeof deltas[0]))) deltas[ees->second] = delta_sfsec;
- /* Dump on second 1, as second 0 sometimes missed */
- if (ees->second == 1) {
- char text[16 * ((sizeof deltas) / (sizeof deltas[0]))];
- char *ptr=text;
- int i;
- for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) {
- sprintf(ptr, " %d.%04d",
- msec(deltas[i]), subms(deltas[i]));
- while (*ptr) ptr++;
- }
- syslog(LOG_ERR, "Deltas: %d.%04d<->%d.%04d: %s",
- msec(EES_STEP_F - EES_STEP_F_GRACE), subms(EES_STEP_F - EES_STEP_F_GRACE),
- msec(EES_STEP_F + EES_STEP_F_GRACE), subms(EES_STEP_F + EES_STEP_F_GRACE),
- text+1);
- for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) deltas[i] = 0;
- }
- }
-
- /* Lets see if we have a 4 mS step at a minute boundaary */
- if ( ((EES_STEP_F - EES_STEP_F_GRACE) < delta_f_abs) &&
- (delta_f_abs < (EES_STEP_F + EES_STEP_F_GRACE)) &&
- (ees->second == 0 || ees->second == 1 || ees->second == 2) &&
- (sincelast < 0 || sincelast > 122)
- ) { /* 4ms jump at min boundry */
- int old_sincelast;
- int count=0;
- int sum = 0;
- /* Yes -- so compute the ramp time */
- if (ees->last_step == 0) sincelast = 0;
- old_sincelast = sincelast;
-
- /* First time in, just set "ees->last_step" */
- if(ees->last_step) {
- int other_step = 0;
- int third_step = 0;
- int this_step = (sincelast + (60 /2)) / 60;
- int p_step = ees->this_step;
- int p;
- ees->last_steps[p_step] = this_step;
- p= p_step;
- p_step++;
- if (p_step >= LAST_STEPS) p_step = 0;
- ees->this_step = p_step;
- /* Find the "average" interval */
- while (p != p_step) {
- int this = ees->last_steps[p];
- if (this == 0) break;
- if (this != this_step) {
- if (other_step == 0 && (
- this== (this_step +2) ||
- this== (this_step -2) ||
- this== (this_step +1) ||
- this== (this_step -1)))
- other_step = this;
- if (other_step != this) {
- int delta = (this_step - other_step);
- if (delta < 0) delta = - delta;
- if (third_step == 0 && (
- (delta == 1) ? (
- this == (other_step +1) ||
- this == (other_step -1) ||
- this == (this_step +1) ||
- this == (this_step -1))
- :
- (
- this == (this_step + other_step)/2
- )
- )) third_step = this;
- if (third_step != this) break;
- }
- }
- sum += this;
- p--;
- if (p < 0) p += LAST_STEPS;
- count++;
- }
-syslog(LOG_ERR, "MSF%d: %d: This=%d (%d), other=%d/%d, sum=%d, count=%d, pps_step=%d, suspect=%x", ees->unit, p, ees->last_steps[p], this_step, other_step, third_step, sum, count, pps_step, suspect_4ms_step);
- if (count != 0) sum = ((sum * 60) + (count /2)) / count;
-#define SV(x) (ees->last_steps[(x + p_step) % LAST_STEPS])
-syslog(LOG_ERR, "MSF%d: %x steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
- ees->unit, suspect_4ms_step, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6),
- SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15));
-printf("MSF%d: steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
- ees->unit, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6),
- SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15));
-#undef SV
- ees->jump_fsecs = delta_sfsec;
- ees->using_ramp = 1;
- if (sincelast > 170)
- ees->last_step_late += sincelast - ((sum) ? sum : ees->last_step_secs);
- else ees->last_step_late = 30;
- if (ees->last_step_late < -60 || ees->last_step_late > 120) ees->last_step_late = 30;
- if (ees->last_step_late < 0) ees->last_step_late = 0;
- if (ees->last_step_late >= 60) ees->last_step_late = 59;
- sincelast = 0;
- }
- else { /* First time in -- just save info */
- ees->last_step_late = 30;
- ees->jump_fsecs = delta_sfsec;
- ees->using_ramp = 1;
- sum = 4 * 60;
- }
- ees->last_step = this_uisec;
-printf("MSF%d: d=%3d.%04d@%d :%d:%d:$%d:%d:%d\n",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs);
-syslog(LOG_ERR, "MSF%d: d=%3d.%04d@%d :%d:%d:%d:%d:%d",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs);
- if (sum) ees->last_step_secs = sum;
- }
- /* OK, so not a 4ms step at a minute boundry */
- else {
- if (suspect_4ms_step) syslog(LOG_ERR,
- "MSF%d: suspect = %x, but delta of %d.%04d [%d.%04d<%d.%04d<%d.%04d: %d %d]",
- ees->unit, suspect_4ms_step, msec(delta_sfsec), subms(delta_sfsec),
- msec(EES_STEP_F - EES_STEP_F_GRACE),
- subms(EES_STEP_F - EES_STEP_F_GRACE),
- msec(delta_f_abs),
- subms(delta_f_abs),
- msec(EES_STEP_F + EES_STEP_F_GRACE),
- subms(EES_STEP_F + EES_STEP_F_GRACE),
- ees->second,
- sincelast);
- if ((delta_f_abs > EES_STEP_NOTE) && ees->last_l.l_i) {
- static ees_step_notes = EES_STEP_NOTES;
- if (ees_step_notes > 0) {
- ees_step_notes--;
-printf("MSF%d: D=%3d.%04d@%02d :%d%s\n",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, sincelast, ees_step_notes ? "" : " -- NO MORE !");
-syslog(LOG_ERR, "MSF%d: D=%3d.%04d@%02d :%d%s",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, (ees->last_step) ? sincelast : -1, ees_step_notes ? "" : " -- NO MORE !");
- }
- }
- }
- }
- ees->last_l = ees->arrvtime;
-
- /* IF we have found that it's ramping
- * && it's within twice the expected ramp period
- * && there is a non zero step size (avoid /0 !)
- * THEN we twiddle things
- */
- if (ees->using_ramp &&
- sincelast < (ees->last_step_secs)*2 &&
- ees->last_step_secs)
- { long sec_of_ramp = sincelast + ees->last_step_late;
- long fsecs;
- l_fp inc;
-
- /* Ramp time may vary, so may ramp for longer than last time */
- if (sec_of_ramp > (ees->last_step_secs + 120))
- sec_of_ramp = ees->last_step_secs;
-
- /* sec_of_ramp * ees->jump_fsecs may overflow 2**32 */
- fsecs = sec_of_ramp * (ees->jump_fsecs / ees->last_step_secs);
-
- if (debug & DB_LOG_DELTAS) syslog(LOG_ERR,
- "[%x] MSF%d: %3d/%03d -> d=%11d (%d|%d)",
- DB_LOG_DELTAS,
- ees->unit, sec_of_ramp, ees->last_step_secs, fsecs,
- pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs);
- if (debug & DB_PRINT_DELTAS) printf(
- "MSF%d: %3d/%03d -> d=%11d (%d|%d)\n",
- ees->unit, sec_of_ramp, ees->last_step_secs, fsecs,
- pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs);
-
- /* Must sign extend the result */
- inc.l_i = (fsecs < 0) ? -1 : 0;
- inc.l_f = fsecs;
- if (debug & DB_INC_PPS)
- { L_SUB(&pps_arrvstamp, &inc);
- L_SUB(&ees->arrvtime, &inc);
- }
- else
- { L_ADD(&pps_arrvstamp, &inc);
- L_ADD(&ees->arrvtime, &inc);
- }
- }
- else {
- if (debug & DB_LOG_DELTAS) syslog(LOG_ERR,
- "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x",
- DB_LOG_DELTAS,
- ees->unit, ees->using_ramp,
- sincelast,
- (ees->last_step_secs)*2,
- ees->last_step_secs);
- if (debug & DB_PRINT_DELTAS) printf(
- "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x\n",
- DB_LOG_DELTAS,
- ees->unit, ees->using_ramp,
- sincelast,
- (ees->last_step_secs)*2,
- ees->last_step_secs);
- }
-
- L_SUB(&ees->arrvtime, &offset_fudge[ees->unit]);
- L_SUB(&pps_arrvstamp, &offset_fudge[ees->unit]);
-
- if (call_pps_sample && !(debug & DB_NO_PPS)) {
- /* Sigh -- it expects its args negated */
- L_NEG(&pps_arrvstamp);
- (void) pps_sample(&pps_arrvstamp);
- }
-
- /* Subtract off the local clock time stamp */
- L_SUB(&ees->codeoffsets[n_sample], &ees->arrvtime);
- if (debug & DB_LOG_SAMPLES) syslog(LOG_ERR,
- "MSF%d: [%x] %d (ees: %d %d) (pps: %d %d)%s",
- ees->unit, DB_LOG_DELTAS, n_sample,
- ees->codeoffsets[n_sample].l_f,
- ees->codeoffsets[n_sample].l_f / 4295,
- pps_arrvstamp.l_f,
- pps_arrvstamp.l_f /4295,
- (debug & DB_NO_PPS) ? " [no PPS]" : "");
-
- if (ees->nsamples++ == NCODES-1) ees_process(ees);
-
- /* Done! */
-}
-
-
-static void set_x(fp_offset)
-l_fp *fp_offset;
-{
- step_systime_real(fp_offset);
-}
-
-
-/* offcompare - auxiliary comparison routine for offset sort */
-
-static int
-offcompare(a, b)
-l_fp *a, *b;
-{
- return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1);
-}
-
-
-/* ees_process - process a pile of samples from the clock */
-static void ees_process(ees)
- struct eesunit *ees;
-{
- static last_samples = -1;
- register int i, j;
- register int noff;
- register l_fp *coffs = ees->codeoffsets;
- l_fp offset, tmp;
- u_fp dispersion; /* ++++ */
- int lostsync, isinsync;
- int samples = ees->nsamples;
- int samplelog;
- int samplereduce = (samples + 1) / 2;
-
- /* Reset things to zero so we don't have to worry later */
- ees_reset(ees);
-
- if (sloppyclockflag[ees->unit]) {
- samplelog = (samples < 2) ? 0 :
- (samples < 5) ? 1 :
- (samples < 9) ? 2 :
- (samples < 17) ? 3 :
- (samples < 33) ? 4 : 5;
- samplereduce = (1 << samplelog);
- }
-
- if (samples != last_samples &&
- ((samples != (last_samples-1)) || samples < 3)) {
- syslog(LOG_ERR, "Samples=%d (%d), samplereduce=%d ....",
- samples, last_samples, samplereduce);
- last_samples = samples;
- }
- if (samples < 1) return;
-
- /* If requested, dump the raw data we have in the buffer */
- if (ees->dump_vals) dump_buf(coffs, 0, samples, "Raw data is:");
-
- /* Sort the offsets, trim off the extremes, then choose one. */
- qsort((char *) coffs, samples, sizeof(l_fp), offcompare);
-
- noff = samples;
- i = 0;
- while ((noff - i) > samplereduce) {
- /* Trim off the sample which is further away
- * from the median. We work this out by doubling
- * the median, subtracting off the end samples, and
- * looking at the sign of the answer, using the
- * identity (c-b)-(b-a) == 2*b-a-c
- */
- tmp = coffs[(noff + i)/2];
- L_ADD(&tmp, &tmp);
- L_SUB(&tmp, &coffs[i]);
- L_SUB(&tmp, &coffs[noff-1]);
- if (L_ISNEG(&tmp)) noff--; else i++;
- }
-
- /* If requested, dump the reduce data we have in the buffer */
- if (ees->dump_vals) dump_buf(coffs, i, noff, "Reduced to:");
-
- /* What we do next depends on the setting of the sloppy clock flag.
- * If it is on, average the remainder to derive our estimate.
- * Otherwise, just pick a representative value from the remaining stuff
- */
- if (sloppyclockflag[ees->unit]) {
- offset.l_ui = offset.l_uf = 0;
- for (j = i; j < noff; j++)
- L_ADD(&offset, &coffs[j]);
- for (j = samplelog; j > 0; j--)
- L_RSHIFTU(&offset);
- }
- else offset = coffs[i+BESTSAMPLE];
-
- /* Compute the dispersion as the difference between the
- * lowest and highest offsets that remain in the
- * consideration list.
- *
- * It looks like MOST clocks have MOD (max error), so halve it !
- */
- tmp = coffs[noff-1];
- L_SUB(&tmp, &coffs[i]);
-#define FRACT_SEC(n) ((1 << 30) / (n/2))
- dispersion = LFPTOFP(&tmp) / 2; /* ++++ */
- if (debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE)) syslog(
- (debug & DB_SYSLOG_SMPLE) ? LOG_ERR : LOG_INFO,
- "I: [%x] Offset=%06d (%d), disp=%06d%s [%d], %d %d=%d %d:%d %d=%d %d",
- debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE),
- offset.l_f / 4295, offset.l_f,
- (dispersion * 1526) / 100,
- (sloppyclockflag[ees->unit]) ? " by averaging" : "",
- FRACT_SEC(10) / 4295,
- (coffs[0].l_f) / 4295,
- i,
- (coffs[i].l_f) / 4295,
- (coffs[samples/2].l_f) / 4295,
- (coffs[i+BESTSAMPLE].l_f) / 4295,
- noff-1,
- (coffs[noff-1].l_f) / 4295,
- (coffs[samples-1].l_f) / 4295);
-
- /* Are we playing silly wotsits ?
- * If we are using all data, see if there is a "small" delta,
- * and if so, blurr this with 3/4 of the delta from the last value
- */
- if (ees->usealldata && ees->offset.l_uf) {
- long diff = (long) (ees->offset.l_uf - offset.l_uf);
-
- /* is the delta small enough ? */
- if ((- FRACT_SEC(100)) < diff && diff < FRACT_SEC(100)) {
- int samd = (64 * 4) / samples;
- long new;
- if (samd < 2) samd = 2;
- new = offset.l_uf + ((diff * (samd -1)) / samd);
-
- /* Sign change -> need to fix up int part */
- if ((new & (1 << 31)) !=
- (((long) offset.l_uf) & ( 1 << 31)))
- { syslog(LOG_INFO, "I: %x != %x (%x %x), so add %d",
- new & (1 << 31),
- ((long) offset.l_uf) & ( 1 << 31),
- new, (long) offset.l_uf,
- (new < 0) ? -1 : 1);
- offset.l_ui += (new < 0) ? -1 : 1;
- }
- dispersion /= 4;
- if (debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE)) syslog(
- (debug & DB_SYSLOG_SMTHE) ? LOG_ERR : LOG_INFO,
- "I: [%x] Smooth data: %d -> %d, dispersion now %d",
- debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE),
- ((long) offset.l_uf) / 4295, new / 4295,
- (dispersion * 1526) / 100);
- offset.l_uf = new;
- }
- else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog(
- (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO,
- "[%x] No smooth as delta not %d < %d < %d",
- debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE),
- - FRACT_SEC(100), diff, FRACT_SEC(100));
- }
- else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog(
- (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO,
- "I: [%x] No smooth as flag=%x and old=%x=%d (%d:%d)",
- debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE),
- ees->usealldata, ees->offset.l_f, ees->offset.l_uf,
- offset.l_f, ees->offset.l_f - offset.l_f);
-
- /* Collect offset info for debugging info */
- ees->offset = offset;
- ees->lowoffset = coffs[i];
- ees->highoffset = coffs[noff-1];
-
- /* Determine synchronization status. Can be unsync'd either
- * by a report from the clock or by a leap hold.
- *
- * Loss of the radio signal for a short time does not cause
- * us to go unsynchronised, since the receiver keeps quite
- * good time on its own. The spec says 20ms in 4 hours; the
- * observed drift in our clock (Cambridge) is about a second
- * a day, but even that keeps us within the inherent tolerance
- * of the clock for about 15 minutes. Observation shows that
- * the typical "short" outage is 3 minutes, so to allow us
- * to ride out those, we will give it 5 minutes.
- */
- lostsync = current_time - ees->clocklastgood > 300 ? 1 : 0;
- isinsync = (lostsync || ees->leaphold > current_time) ? 0 : 1;
-
- /* Done. Use time of last good, synchronised code as the
- * reference time, and lastsampletime as the receive time.
- */
- if (ees->fix_pending) {
- syslog(LOG_ERR, "MSF%d: fix_pending=%d -> jump %x.%08x\n",
- ees->fix_pending, ees->unit, offset.l_i, offset.l_f);
- ees->fix_pending = 0;
- set_x(&offset);
- L_CLR(&offset);
- }
- refclock_receive(ees->peer,
- &offset,
- 0, /* delay */
- dispersion,
- &ees->reftime,
- &ees->lastsampletime, /* receive time */
- (isinsync) ? 0 : LEAP_NOTINSYNC);
- ees_event(ees, lostsync ? CEVNT_PROP : CEVNT_NOMINAL);
-}
-
-/* msfees_poll - called by the transmit procedure */
-static void msfees_poll(unit, peer)
- int unit;
- char *peer;
-{
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d invalid",
- unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d unused",
- unit);
- return;
- }
-
- ees_process(eesunits[unit]);
-
- if ((current_time - eesunits[unit]->lasttime) > 150)
- ees_event(eesunits[unit], CEVNT_FAULT);
-}
-
-/* msfees_leap - called when a leap second occurs */
-static void msfees_leap()
-{
- register int i;
-
- /* This routine should be entered a few seconds after
- * midnight UTC when a leap second occurs. To ensure we
- * don't believe foolish time from the clock(s) we set a
- * 40 minute hold on them. It shouldn't take anywhere
- * near this amount of time to adjust if the clock is getTING
- * data, but doing anything else is complicated.
- */
- for (i = 0; i < MAXUNITS; i++) if (unitinuse[i])
- eesunits[i]->leaphold = current_time + EESLEAPHOLD;
-}
-
-/* msfees_control - set fudge factors, return statistics */
-static void msfees_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct eesunit *ees = eesunits[unit];
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- os_delay[unit] = in->fudgetime2;
- offset_fudge[unit] = os_delay[unit];
- L_ADD(&offset_fudge[unit], &fudgefactor[unit]);
- L_ADD(&offset_fudge[unit], &inherent_delay[unit]);
- if (in->haveflags & CLK_HAVEVAL1) {
- stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf);
- if (unitinuse[unit]) {
- /* Should actually reselect clock, but
- * will wait for the next timecode
- */
- struct peer *peer = ees->peer;
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1) {
- memmove((char *)&peer->refid,
- EESREFID, 4);
- if (unit>0 && unit<10)
- ((char *)&peer->refid)[3] =
- '0' + unit;
- }
- else peer->refid = htonl(EESHSREFID);
- }
- }
- if (in->haveflags & CLK_HAVEVAL2) {
- printf("Debug: %x -> %x\n", debug, in->fudgeval2);
- syslog(LOG_ERR, "MSF%d: debug %x -> %x",
- unit, debug, in->fudgeval2);
- debug = in->fudgeval2;
- }
- if (in->haveflags & CLK_HAVEFLAG1) {
- sloppyclockflag[unit] = in->flags & CLK_FLAG1;
- }
- if (in->haveflags & CLK_HAVEFLAG2) {
- ees->fix_pending++;
- /* if (in->flags & CLK_FLAG2 && unitinuse[unit])
- ees->leaphold = 0; */
- }
- if (in->haveflags & CLK_HAVEFLAG3 && unitinuse[unit]) {
- printf("dump_vals: %x -> %x\n", ees->dump_vals, in->flags & CLK_FLAG3);
- ees->dump_vals = in->flags & CLK_FLAG3;
- }
- if (in->haveflags & CLK_HAVEFLAG4 && unitinuse[unit]) {
- ees->usealldata = in->flags & CLK_FLAG4;
- }
- }
-
- if (out != 0) {
- out->type = REFCLK_MSF_EES;
- out->haveflags
- = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1|CLK_HAVEFLAG3|CLK_HAVEFLAG4;
- out->clockdesc = EESDESCRIPTION;
- out->fudgetime1 = fudgefactor[unit];
- out->fudgetime2 = os_delay[unit];
- out->fudgeval1 = stratumtouse[unit];
- /*out->fudgeval2= debug*/;
- memmove((char *)&out->fudgeval2, EESREFID, 4);
- if (unit > 0 && unit < 10)
- ((char *)&out->fudgeval2)[3] = '0' + unit;
- out->flags = sloppyclockflag[unit];
- if (unitinuse[unit]) {
- out->flags |= ees->dump_vals | ees->usealldata;
- out->lencode = ees->lencode;
- out->lastcode = ees->lastcode;
- out->timereset = current_time - ees->timestarted;
- out->polls = 0; /* we don't poll */
- out->noresponse = 0; /* ditto */
- out->badformat = ees->badformat;
- out->baddata = ees->baddata;
- out->lastevent = ees->lastevent;
- out->currentstatus = ees->status;
- } else {
- out->lencode = 0;
- out->lastcode = "";
- out->polls = out->noresponse = 0;
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
- }
- }
-}
-
-
-/* msfees_buginfo - return clock dependent debugging info */
-static void msfees_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct eesunit *ees;
-
- bug->nvalues = bug->ntimes = 0;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- ees = eesunits[unit];
-
- bug->nvalues = 16;
- bug->svalues = 0x0800;
- bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0;
- bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0;
- bug->values[2] = ees->status;
- bug->values[3] = ees->lastevent;
- bug->values[4] = ees->reason;
- bug->values[5] = ees->nsamples;
- bug->values[6] = ees->codestate;
- bug->values[7] = ees->day;
- bug->values[8] = ees->hour;
- bug->values[9] = ees->minute;
- bug->values[10] = ees->second;
- bug->values[11] = ees->tz;
- bug->values[12] = ees->yearstart;
- bug->values[13] = (ees->leaphold > current_time) ?
- ees->leaphold - current_time : 0;
- bug->values[14] = inherent_delay[unit].l_uf;
- bug->values[15] = offset_fudge[unit].l_uf;
-
- bug->ntimes = 11;
- bug->stimes = 0x3f8;
- bug->times[0] = ees->reftime;
- bug->times[1] = ees->arrvtime;
- bug->times[2] = ees->lastsampletime;
- bug->times[3] = ees->offset;
- bug->times[4] = ees->lowoffset;
- bug->times[5] = ees->highoffset;
- bug->times[6] = inherent_delay[unit];
- bug->times[8] = os_delay[unit];
- bug->times[7] = fudgefactor[unit];
- bug->times[9] = offset_fudge[unit];
- bug->times[10].l_ui = ees->yearstart;
- bug->times[10].l_uf = 0;
-}
-
-struct refclock refclock_msfees = {
- msfees_start, msfees_shutdown, msfees_poll,
- msfees_control, msfees_init, msfees_buginfo, NOFLAGS
-};
-#endif /* defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) */
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c
deleted file mode 100644
index caf5951..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_mx4200.c
+++ /dev/null
@@ -1,977 +0,0 @@
-/*
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66.
- *
- * Copyright (c) 1992 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Lawrence Berkeley Laboratory.
- * 4. The name of the University may not be used to endorse or promote
- * products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED 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.
- */
-
-#if defined(REFCLOCK) && defined(MX4200)
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_calendar.h"
-#include "ntp_unixtime.h"
-
-#if __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#include <sys/ppsclock.h>
-
-#include "mx4200.h"
-#include "ntp_stdlib.h"
-
-/*
- * This driver supports the Magnavox Model MX4200 GPS Receiver.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 2 /* max number of mx4200 units */
-#define MX4200FD "/dev/gps%d"
-#define SPEED232 B4800 /* baud */
-
-/*
- * The number of raw samples which we acquire to derive a single estimate.
- */
-#define NSTMPS 64
-
-/*
- * Radio interface parameters
- */
-#define MX4200PRECISION (-18) /* precision assumed (about 4 us) */
-#define MX4200REFID "GPS" /* reference id */
-#define MX4200DESCRIPTION "Magnavox MX4200 GPS Receiver" /* WRU */
-#define DEFFUDGETIME 0 /* default fudge time (ms) */
-
-/* Leap stuff */
-extern u_long leap_hoursfromleap;
-extern u_long leap_happened;
-static int leap_debug;
-
-/*
- * mx4200_reset - reset the count back to zero
- */
-#define mx4200_reset(up) \
- do { \
- (up)->nsamples = 0; \
- } while (0)
-
-/*
- * Imported from the timer module
- */
-extern u_long current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * MX4200 unit control structure.
- */
-struct mx4200unit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- u_long gpssamples[NSTMPS]; /* the GPS time samples */
- l_fp unixsamples[NSTMPS]; /* the UNIX time samples */
-
-
- l_fp lastsampletime; /* time of last estimate */
- u_int lastserial; /* last pps serial number */
-#ifdef notdef
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
-#endif
- char lastcode[RX_BUFF_SIZE]; /* last timecode received */
- u_long lasttime; /* last time clock heard from */
- u_char nsamples; /* number of samples we've collected */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char lencode; /* length of last timecode */
- u_char year; /* year of eternity */
- u_short monthday; /* day of month */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- /*
- * Status tallies
- */
-#ifdef notdef
- u_long polls; /* polls sent */
- u_long noresponse; /* number of nonresponses */
-#endif
- u_long badformat; /* bad format */
- u_long baddata; /* bad data */
- u_long timestarted; /* time we started this */
-};
-
-/*
- * We demand that consecutive PPS samples are more than 0.995 seconds
- * and less than 1.005 seconds apart.
- */
-#define PPSLODIFF_UI 0 /* 0.900 as an l_fp */
-#define PPSLODIFF_UF 0xe6666610
-
-#define PPSHIDIFF_UI 1 /* 1.100 as an l_fp */
-#define PPSHIDIFF_UF 0x19999990
-
-/*
- * reason codes
- */
-#define PPSREASON 20
-#define CODEREASON 40
-#define PROCREASON 60
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct mx4200unit *mx4200units[MAXUNITS];
-
-static const char pmvxg[] = "PMVXG";
-
-/*
- * Function prototypes
- */
-static int mx4200_start P((int, struct peer *));
-static void mx4200_shutdown P((int, struct peer *));
-static void mx4200_receive P((struct recvbuf *));
-static void mx4200_process P((struct mx4200unit *));
-static void mx4200_poll P((int, struct peer *));
-
-static char * mx4200_parse P((char *, struct calendar *, int *, int *));
-static int mx4200_needconf P((char *));
-static void mx4200_config P((struct mx4200unit *));
-static void mx4200_send P((int, const char *, ...));
-static int mx4200_cmpl_fp P((void *, void *));
-static u_char cksum P((char *, u_int));
-
-#ifdef DEBUG
-static void opendfile P((int));
-static void checkdfile P((void));
-#endif /* DEBUG */
-
-/*
- * Transfer vector
- */
-struct refclock refclock_mx4200 = {
- mx4200_start, /* start up driver */
- mx4200_shutdown, /* shut down driver */
- mx4200_poll, /* transmit poll message */
- noentry, /* not used (old mx4200_control) */
- noentry, /* initialize driver (not used) */
- noentry, /* not used (old mx4200_buginfo) */
- NOFLAGS /* not used */
-};
-
-#ifdef DEBUG
-static char dfile[] = "/var/tmp/MX4200.debug";
-static FILE *df = NULL;
-
-static void
-opendfile(create)
- int create;
-{
- if (!create && access(dfile, F_OK) < 0) {
- syslog(LOG_ERR, "mx4200: open %s: %m", dfile);
- return;
- }
- df = fopen(dfile, "a");
- if (df == NULL)
- syslog(LOG_ERR, "mx4200: open %s: %m", dfile);
- else if (setvbuf(df, NULL, _IOLBF, 0) < 0)
- syslog(LOG_ERR, "mx4200: setvbuf %s: %m", dfile);
-}
-
-static void
-checkdfile()
-{
-
- if (df == NULL)
- return;
-
- if (access(dfile, F_OK) < 0) {
- fclose(df);
- opendfile(1);
- }
-}
-
-#endif
-
-
-/*
- * mx4200_start - open the devices and initialize data for processing
- */
-static int
-mx4200_start(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct mx4200unit *up;
- struct refclockproc *pp;
- int fd;
- char device[20];
-
- /*
- * Open serial port
- */
- (void)sprintf(device, MX4200FD, unit);
- if (!(fd = refclock_open(device, SPEED232, 0)))
- return (0);
-
- /*
- * Allocate and initialize unit structure
- */
- if (!(up = (struct mx4200unit *)
- emalloc(sizeof(struct mx4200unit)))) {
- (void) close(fd);
- return (0);
- }
- memset((char *)up, 0, sizeof(struct mx4200unit));
- up->io.clock_recv = mx4200_receive;
- up->io.srcclock = (caddr_t)up;
- up->io.datalen = 0;
- up->io.fd = fd;
- if (!io_addclock(&up->io)) {
- (void) close(fd);
- free(up);
- return (0);
- }
- up->peer = peer;
- pp = peer->procptr;
- pp->unitptr = (caddr_t)up;
-
- /*
- * Initialize miscellaneous variables
- */
- peer->precision = MX4200PRECISION;
- pp->clockdesc = MX4200DESCRIPTION;
- memcpy((char *)&pp->refid, MX4200REFID, 4);
-
- /* Insure the receiver is properly configured */
- mx4200_config(up);
-
-#ifdef DEBUG
- opendfile(0);
-#endif
- return (1);
-}
-
-
-/*
- * mx4200_shutdown - shut down the clock
- */
-static void
-mx4200_shutdown(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct mx4200unit *up;
- struct refclockproc *pp;
-
- pp = peer->procptr;
- up = (struct mx4200unit *)pp->unitptr;
- io_closeclock(&up->io);
- free(up);
-}
-
-
-static void
-mx4200_config(up)
- register struct mx4200unit *up;
-{
- register int fd = up->io.fd;
-
-syslog(LOG_DEBUG, "mx4200_config");
-
- /* Zero the output list (do it twice to flush possible junk) */
- mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1);
- mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1);
-
- /* Switch to 2d mode */
- mx4200_send(fd, "%s,%03d,%d,,%.1f,%.1f,,%d,%d,%c,%d",
- pmvxg, PMVXG_S_INITMODEB,
- 2, /* 2d mode */
- 0.1, /* hor accel fact as per Steve */
- 0.1, /* ver accel fact as per Steve */
- 10, /* hdop limit as per Steve */
- 5, /* elevation limit as per Steve */
- 'U', /* time output mode */
- 0); /* local time offset from gmt */
-
- /* Configure time recovery */
- mx4200_send(fd, "%s,%03d,%c,%c,%c,%d,%d,%d,",
- pmvxg, PMVXG_S_TRECOVCONF,
-#ifdef notdef
- 'K', /* known position */
- 'D', /* dynamic position */
-#else
- 'S', /* static position */
-#endif
- 'U', /* steer clock to gps time */
- 'A', /* always output time pulse */
- 500, /* max time error in ns */
- 0, /* user bias in ns */
- 1); /* output to control port */
-}
-
-
-/*
- * mx4200_poll - mx4200 watchdog routine
- */
-static void
-mx4200_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct mx4200unit *up;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_poll: unit %d invalid", unit);
- return;
- }
-
- up = mx4200units[unit];
- if ((current_time - up->lasttime) > 150) {
- refclock_report(peer, CEVNT_FAULT);
-
- /* Request a status message which should trigger a reconfig */
- mx4200_send(up->io.fd, "%s,%03d", "CDGPQ", PMVXG_D_STATUS);
- syslog(LOG_DEBUG, "mx4200_poll: request status");
- }
-}
-
-static const char char2hex[] = "0123456789ABCDEF";
-
-
-/*
- * mx4200_receive - receive gps data
- */
-static void
-mx4200_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register struct mx4200unit *up;
- struct peer *peer;
- register char *dpt, *cp;
- register u_long tmp_ui;
- register u_long tmp_uf;
- register u_long gpstime;
- struct ppsclockev ev;
- register struct calendar *jt;
- struct calendar sjt;
- register int n;
- int valid, leapsec;
- register u_char ck;
-
- up = (struct mx4200unit *)rbufp->recv_srcclock;
- peer = up->peer;
-#ifdef DEBUG
- if (debug > 3)
- printf("mx4200_receive: nsamples = %d\n", up->nsamples);
-#endif
-
- /* Record the time of this event */
- up->lasttime = current_time;
-
- /* Get the pps value */
- if (ioctl(up->io.fd, CIOGETEV, (char *)&ev) < 0) {
- /* XXX Actually, if this fails, we're pretty much screwed */
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "mx4200_receive: ");
- perror("CIOGETEV");
- }
-#endif
- refclock_report(peer, CEVNT_FAULT);
- mx4200_reset(up);
- return;
- }
- tmp_ui = ev.tv.tv_sec + JAN_1970;
- TVUTOTSF(ev.tv.tv_usec, tmp_uf);
-
- /* Get buffer and length; sock away last timecode */
- n = rbufp->recv_length;
- dpt = rbufp->recv_buffer;
- if (n <= 1)
- return;
- up->lencode = n;
- memmove(up->lastcode, dpt, n);
-
- /*
- * We expect to see something like:
- *
- * $PMVXG,830,T,1992,07,09,04:18:34,U,S,-02154,00019,000000,00*1D\n
- *
- * Reject if any important landmarks are missing.
- */
- cp = dpt + n - 4;
- if (cp < dpt || *dpt != '$' || cp[0] != '*' || cp[3] != '\n') {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad format\n");
-#endif
- refclock_report(peer, CEVNT_BADREPLY);
- mx4200_reset(up);
- return;
- }
-
- /* Check checksum */
- ck = cksum(&dpt[1], n - 5);
- if (char2hex[ck >> 4] != cp[1] || char2hex[ck & 0xf] != cp[2]) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad checksum\n");
-#endif
- refclock_report(peer, CEVNT_BADREPLY);
- mx4200_reset(up);
- return;
- }
-
- /* Truncate checksum (and the buffer for that matter) */
- *cp = '\0';
-
- /* Leap second debugging stuff */
- if ((leap_hoursfromleap && !leap_happened) || leap_debug > 0) {
- /* generate reports for awhile after leap */
- if (leap_hoursfromleap && !leap_happened)
- leap_debug = 3600;
- else
- --leap_debug;
- syslog(LOG_INFO, "mx4200 leap: %s \"%s\"",
- umfptoa(tmp_ui, tmp_uf, 6), dpt);
- }
-
- /* Parse time recovery message */
- jt = &sjt;
- if ((cp = mx4200_parse(dpt, jt, &valid, &leapsec)) != NULL) {
- /* Configure the receiver if necessary */
- if (mx4200_needconf(dpt))
- mx4200_config(up);
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: mx4200_parse: %s\n", cp);
-#endif
- refclock_report(peer, CEVNT_BADREPLY);
- mx4200_reset(up);
- return;
- }
-
- /* Setup leap second indicator */
- if (leapsec == 0)
- up->leap = LEAP_NOWARNING;
- else if (leapsec == 1)
- up->leap = LEAP_ADDSECOND;
- else if (leapsec == -1)
- up->leap = LEAP_DELSECOND;
- else
- up->leap = LEAP_NOTINSYNC; /* shouldn't happen */
-
- /* Check parsed time (allow for possible leap seconds) */
- if (jt->second >= 61 || jt->minute >= 60 || jt->hour >= 24) {
-#ifdef DEBUG
- if (debug) {
- printf("mx4200_receive: bad time %d:%02d:%02d",
- jt->hour, jt->minute, jt->second);
- if (leapsec != 0)
- printf(" (leap %+d)", leapsec);
- putchar('\n');
- }
-#endif
- refclock_report(peer, CEVNT_BADTIME);
- mx4200_reset(up);
- /* Eat the next pulse which the clock claims will be bad */
- up->nsamples = -1;
- return;
- }
-
- /* Check parsed date */
- if (jt->monthday > 31 || jt->month > 12 || jt->year < 1900) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad date (%d/%d/%d)\n",
- jt->monthday, jt->month, jt->year);
-#endif
- refclock_report(peer, CEVNT_BADDATE);
- mx4200_reset(up);
- return;
- }
-
- /* Convert to ntp time */
- gpstime = caltontp(jt);
-
- /* The gps message describes the *next* pulse; pretend it's this one */
- --gpstime;
-
- /* Debugging */
-#ifdef DEBUG
- checkdfile();
- if (df != NULL) {
- l_fp t;
-
- t.l_ui = gpstime;
- t.l_uf = 0;
- M_SUB(t.l_ui, t.l_uf, tmp_ui, tmp_uf);
- fprintf(df, "%s\t%s",
- umfptoa(tmp_ui, tmp_uf, 6), mfptoa(t.l_ui, t.l_uf, 6));
- if (debug > 3)
- fprintf(df, "\t(gps: %lu)", gpstime);
- if (leapsec != 0)
- fprintf(df, "\t(leap sec %+d)", leapsec);
- if (!valid)
- fprintf(df, "\t(pulse not valid)");
- fputc('\n', df);
- }
-#endif
-
- /* Check pps serial number against last one */
- if (up->lastserial + 1 != ev.serial && up->lastserial != 0) {
-#ifdef DEBUG
- if (debug) {
- if (ev.serial == up->lastserial)
- printf("mx4200_receive: no new pps event\n");
- else
- printf("mx4200_receive: missed %d pps events\n",
- ev.serial - up->lastserial - 1);
- }
-#endif
- refclock_report(peer, CEVNT_FAULT);
- mx4200_reset(up);
- /* fall through and this one collect as first sample */
- }
- up->lastserial = ev.serial;
-
-/*
- * XXX
- * Since this message is for the next pulse, it's really the next pulse
- * that the clock might be telling us will be invalid.
- */
- /* Toss if not designated "valid" by the gps */
- if (!valid) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: pps not valid\n");
-#endif
- refclock_report(peer, CEVNT_BADTIME);
- mx4200_reset(up);
- return;
- }
-
- /* Copy time into mx4200unit struct */
- /* XXX (why?) */
- up->year = jt->year;
- up->monthday = jt->monthday;
- up->hour = jt->hour;
- up->minute = jt->minute;
- up->second = jt->second;
-
- /* Sock away the GPS and UNIX timesamples */
- n = up->nsamples++;
- if (n < 0)
- return; /* oops, this pulse is bad */
- up->gpssamples[n] = gpstime;
- up->unixsamples[n].l_ui = up->lastsampletime.l_ui = tmp_ui;
- up->unixsamples[n].l_uf = up->lastsampletime.l_uf = tmp_uf;
- if (up->nsamples >= NSTMPS) {
- /*
- * Here we've managed to complete an entire NSTMPS
- * second cycle without major mishap. Process what has
- * been received.
- */
- mx4200_process(up);
- mx4200_reset(up);
- }
-}
-
-/*
- * Compare two l_fp's, used with qsort()
- */
-static int
-mx4200_cmpl_fp(p1, p2)
- register void *p1, *p2;
-{
-
- if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2))
- return (-1);
- if (L_ISEQU((l_fp *)p1, (l_fp *)p2))
- return (0);
- return (1);
-}
-
-/*
- * mx4200_process - process a pile of samples from the clock
- */
-static void
-mx4200_process(up)
- struct mx4200unit *up;
-{
- struct peer *peer;
- struct refclockproc *pp;
- register int i, n;
- register l_fp *fp, *op;
- register u_long *lp;
- l_fp off[NSTMPS];
- register u_long tmp_ui, tmp_uf;
- register u_long date_ui, date_uf;
- u_fp dispersion;
-
- /* Compute offsets from the raw data. */
- peer = up->peer;
- pp = peer->procptr;
- fp = up->unixsamples;
- op = off;
- lp = up->gpssamples;
- for (i = 0; i < NSTMPS; ++i, ++lp, ++op, ++fp) {
- op->l_ui = *lp;
- op->l_uf = 0;
- L_SUB(op, fp);
- }
-
- /* Sort offsets into ascending order. */
- qsort((char *)off, NSTMPS, sizeof(l_fp), mx4200_cmpl_fp);
-
- /*
- * Reject the furthest from the median until 8 samples left
- */
- i = 0;
- n = NSTMPS;
- while ((n - i) > 8) {
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- date_ui = off[(n+i)/2].l_ui;
- date_uf = off[(n+i)/2].l_uf;
- M_SUB(tmp_ui, tmp_uf, date_ui, date_uf);
- M_SUB(date_ui, date_uf, off[i].l_ui, off[i].l_uf);
- if (M_ISHIS(date_ui, date_uf, tmp_ui, tmp_uf)) {
- /*
- * reject low end
- */
- i++;
- } else {
- /*
- * reject high end
- */
- n--;
- }
- }
-
- /*
- * Compute the dispersion based on the difference between the
- * extremes of the remaining offsets.
- */
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- dispersion = MFPTOFP(tmp_ui, tmp_uf);
-
- /*
- * Now compute the offset estimate. If the sloppy clock
- * flag is set, average the remainder, otherwise pick the
- * median.
- */
- if (pp->sloppyclockflag) {
- tmp_ui = tmp_uf = 0;
- while (i < n) {
- M_ADD(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- i++;
- }
- M_RSHIFT(tmp_ui, tmp_uf);
- M_RSHIFT(tmp_ui, tmp_uf);
- M_RSHIFT(tmp_ui, tmp_uf);
- i = 0;
- off[0].l_ui = tmp_ui;
- off[0].l_uf = tmp_uf;
- } else {
- i = (n + i) / 2;
- }
-
- /*
- * Add the default MX4200 QT delay into this.
- */
-#ifdef notdef
- L_ADDUF(&off[i], MX4200QTFUDGE);
-#endif
-
- /*
- * Done. Use lastref as the reference time and lastrec
- * as the receive time. ** note this can result in tossing
- * out the peer in the protocol module if lastref > lastrec,
- * so last rec is used for both values - dlm ***
- */
- refclock_receive(up->peer, &off[i],
- (s_fp)0, /* delay */
- dispersion,
- &up->unixsamples[NSTMPS-1], /* reftime */
- &up->unixsamples[NSTMPS-1], /* rectime */
- up->leap);
-
- refclock_report(peer, CEVNT_NOMINAL);
-}
-
-
-/*
- * Returns true if the this is a status message. We use this as
- * an indication that the receiver needs to be initialized.
- */
-static int
-mx4200_needconf(buf)
- char *buf;
-{
- register long v;
- char *cp;
-
- cp = buf;
-
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Record type */
- v = strtol(cp, &cp, 10);
- if (v != PMVXG_D_STATUS)
- return (0);
- /*
- * XXX
- * Since we configure the receiver to not give us status
- * messages and since the receiver outputs status messages by
- * default after being reset to factory defaults when sent the
- * "$PMVXG,018,C\r\n" message, any status message we get
- * indicates the reciever needs to be initialized; thus, it is
- * not necessary to decode the status message.
- */
-#ifdef notdef
- ++cp;
-
- /* Receiver status */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Number of satellites which should be visible */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Number of satellites being tracked */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Time since last NAV */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Initialization status */
- v = strtol(cp, &cp, 10);
- if (v == 0)
-#endif
- return (1);
-}
-
-/* Parse a mx4200 time recovery message. Returns a string if error */
-static char *
-mx4200_parse(buf, jt, validp, leapsecp)
- register char *buf;
- register struct calendar *jt;
- register int *validp, *leapsecp;
-{
- register long v;
- char *cp;
-
- cp = buf;
- memset((char *)jt, 0, sizeof(*jt));
-
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no rec-type");
- ++cp;
-
- /* Record type */
- v = strtol(cp, &cp, 10);
- if (v != PMVXG_D_TRECOVOUT)
- return ("wrong rec-type");
-
- /* Pulse valid indicator */
- if (*cp++ != ',')
- return ("no pulse-valid");
- if (*cp == 'T')
- *validp = 1;
- else if (*cp == 'F')
- *validp = 0;
- else
- return ("bad pulse-valid");
- ++cp;
-
- /* Year */
- if (*cp++ != ',')
- return ("no year");
- jt->year = strtol(cp, &cp, 10);
-
- /* Month of year */
- if (*cp++ != ',')
- return ("no month");
- jt->month = strtol(cp, &cp, 10);
-
- /* Day of month */
- if (*cp++ != ',')
- return ("no month day");
- jt->monthday = strtol(cp, &cp, 10);
-
- /* Hour */
- if (*cp++ != ',')
- return ("no hour");
- jt->hour = strtol(cp, &cp, 10);
-
- /* Minute */
- if (*cp++ != ':')
- return ("no minute");
- jt->minute = strtol(cp, &cp, 10);
-
- /* Second */
- if (*cp++ != ':')
- return ("no second");
- jt->second = strtol(cp, &cp, 10);
-
- /* Time indicator */
- if (*cp++ != ',' || *cp++ == '\0')
- return ("no time indicator");
-
- /* Time recovery mode */
- if (*cp++ != ',' || *cp++ == '\0')
- return ("no time mode");
-
- /* Oscillator offset */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no osc off");
- ++cp;
-
- /* Time mark error */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no time mark err");
- ++cp;
-
- /* User time bias */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no user bias");
- ++cp;
-
- /* Leap second flag */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no leap");
- ++cp;
- *leapsecp = strtol(cp, &cp, 10);
-
- return (NULL);
-}
-
-/* Calculate the checksum */
-static u_char
-cksum(cp, n)
- register char *cp;
- register u_int n;
-{
- register u_char ck;
-
- for (ck = 0; n-- > 0; ++cp)
- ck ^= *cp;
- return (ck);
-}
-
-static void
-#if __STDC__
-mx4200_send(register int fd, const char *fmt, ...)
-#else
-mx4200_send(fd, fmt, va_alist)
- register int fd;
- const char *fmt;
- va_dcl
-#endif
-{
- register char *cp;
- register int n, m;
- va_list ap;
- char buf[1024];
- u_char ck;
-
-#if __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- cp = buf;
- *cp++ = '$';
-#ifdef notdef
- /* BSD is rational */
- n = vsnprintf(cp, sizeof(buf) - 1, fmt, ap);
-#else
- /* SunOS sucks */
- (void)vsprintf(cp, fmt, ap);
- n = strlen(cp);
-#endif
- ck = cksum(cp, n);
- cp += n;
- ++n;
-#ifdef notdef
- /* BSD is rational */
- n += snprintf(cp, sizeof(buf) - n - 5, "*%02X\r\n", ck);
-#else
- /* SunOS sucks */
- sprintf(cp, "*%02X\r\n", ck);
- n += strlen(cp);
-#endif
-
- m = write(fd, buf, n);
- if (m < 0)
- syslog(LOG_ERR, "mx4200_send: write: %m (%s)", buf);
- else if (m != n)
- syslog(LOG_ERR, "mx4200_send: write: %d != %d (%s)", m, n, buf);
- va_end(ap);
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c
deleted file mode 100644
index e62b668..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_omega.c
+++ /dev/null
@@ -1,999 +0,0 @@
-/*
- * refclock_omega - clock driver for the Kinemetrics Truetime OM-DC OMEGA
- * receiver.
- *
- * Version 1.0 11-Dec-92 Steve Clift (clift@ml.csiro.au)
- * Initial version, mostly lifted from refclock_goes.c.
- *
- * 1.1 03-May-93 Steve Clift
- * Tarted up the sample filtering mechanism to give improved
- * one-off measurements. Improved measurement dispersion code
- * to account for accumulated drift when the clock loses lock.
- *
- */
-
-#if defined(REFCLOCK) && (defined(OMEGA) || defined(OMEGACLK) || defined(OMEGAPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(OMEGACLK)
-#include <sys/clkdefs.h>
-#endif /* OMEGACLK */
-#endif /* STREAM */
-
-#if defined (OMEGAPPS)
-#include <sys/ppsclock.h>
-#endif /* OMEGAPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Support for Kinemetrics Truetime OM-DC OMEGA Receiver
- *
- * Most of this code is copied from refclock_goes.c with thanks.
- *
- * the time code looks like follows; Send the clock a R or C and once per
- * second a timestamp will appear that looks like this:
- * ADDD:HH:MM:SSQCL
- * A - control A
- * Q Quality indication: indicates possible error of
- * > >+- 5 seconds
- * ? >+/- 500 milliseconds # >+/- 50 milliseconds
- * * >+/- 5 milliseconds . >+/- 1 millisecond
- * A-H less than 1 millisecond. Character indicates which station
- * is being received as follows:
- * A = Norway, B = Liberia, C = Hawaii, D = North Dakota,
- * E = La Reunion, F = Argentina, G = Australia, H = Japan.
- * C - Carriage return
- * L - Line feed
- * The carriage return start bit begins on 0 seconds and extends to 1 bit time.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* max number of OMEGA units */
-#define OMEGA232 "/dev/omega%d"
-#define SPEED232 B9600 /* 9600 baud */
-
-/*
- * Radio interface parameters
- */
-#define OMEGADESCRIPTION "Kinemetrics OM-DC OMEGA Receiver" /* who we are */
-#define OMEGAMAXDISPERSE (FP_SECOND/32) /* max allowed sample dispersion */
-#define OMEGAPRECISION (-10) /* precision assumed (about 1 ms) */
-#define OMEGAREFID "VLF\0" /* reference id */
-#define LENOMEGA 13 /* length of standard response */
-#define GMT 0 /* hour offset from Greenwich */
-#define NSTAMPS 9 /* samples collected when polled */
-#define NSKEEP 5 /* samples to keep after discards */
-#define BMAX 50 /* timecode buffer length */
-
-/*
- * The OM-DC puts out the start bit of the <CR> on the second, but
- * we see the result after the <LF> is received, about 2ms later at
- * 9600 baud. Use this as the default fudge time, and let the user
- * fiddle it to account for driver latency etc.
- */
-#define DEFFUDGETIME 0x00830000 /* default fudge time (~2ms) */
-
-/*
- * Clock drift errors as u_fp values.
- */
-#define U_FP5000MS (5*FP_SECOND) /* 5 seconds */
-#define U_FP500MS (FP_SECOND/2) /* 500 msec */
-#define U_FP50MS (FP_SECOND/20) /* 50 msec */
-#define U_FP5MS (FP_SECOND/200) /* 5 msec */
-
-/*
- * Station codes
- */
-#define STATION_NONE 0
-#define STATION_NORWAY 1
-#define STATION_LIBERIA 2
-#define STATION_HAWAII 3
-#define STATION_N_DAKOTA 4
-#define STATION_LA_REUNION 5
-#define STATION_ARGENTINA 6
-#define STATION_AUSTRALIA 7
-#define STATION_JAPAN 8
-
-/*
- * Hack to avoid excercising the multiplier. I have no pride.
- */
-#define MULBY10(x) (((x)<<3) + ((x)<<1))
-
-/*
- * Imported from the timer module
- */
-extern u_long current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * OMEGA unit control structure
- */
-struct omegaunit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
- l_fp offset[NSTAMPS]; /* recent sample offsets */
- char lastcode[BMAX]; /* last timecode received */
- u_short station; /* which station we're locked to */
- u_short polled; /* Hand in a time sample? */
- u_long coderecv; /* timecodes received */
- u_char lencode; /* length of last timecode */
- u_long lasttime; /* last time clock heard from */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last failure */
- u_char year; /* year of eternity */
- u_short day; /* day of year */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- u_short msec; /* millisecond of second */
- u_char quality; /* quality char from last timecode */
- u_long yearstart; /* start of current year */
- /*
- * Status tallies
- */
- u_long polls; /* polls sent */
- u_long noreply; /* no replies to polls */
- u_long badformat; /* bad format */
- u_long baddata; /* bad data */
- u_long timestarted; /* time we started this */
-};
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct omegaunit *omegaunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor1[MAXUNITS];
-static l_fp fudgefactor2[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char readonlyclockflag[MAXUNITS];
-static u_long refid[MAXUNITS];
-
-/*
- * Function prototypes
- */
-static void omega_init P((void));
-static int omega_start P((u_int, struct peer *));
-static void omega_shutdown P((int));
-static void omega_report_event P((struct omegaunit *, int));
-static void omega_receive P((struct recvbuf *));
-static char omega_process P((struct omegaunit *, l_fp *, u_fp *));
-static void omega_poll P((int, struct peer *));
-static void omega_control P((u_int, struct refclockstat *, struct refclockstat *));
-static void omega_buginfo P((int, struct refclockbug *));
-static void omega_send P((struct omegaunit *, char *));
-
-/*
- * Transfer vector
- */
-struct refclock refclock_omega = {
- omega_start, omega_shutdown, omega_poll,
- omega_control, omega_init, omega_buginfo, NOFLAGS
-};
-
-/*
- * omega_init - initialize internal omega driver data
- */
-static void
-omega_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- memset((char *)omegaunits, 0, sizeof omegaunits);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor1[i].l_ui = 0;
- fudgefactor1[i].l_uf = DEFFUDGETIME;
- fudgefactor2[i].l_ui = 0;
- fudgefactor2[i].l_uf = 0;
- stratumtouse[i] = 0;
- readonlyclockflag[i] = 0;
- memcpy((char *)&refid[i], OMEGAREFID, 4);
- }
-}
-
-
-/*
- * omega_start - open the OMEGA devices and initialize data for processing
- */
-static int
-omega_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct omegaunit *omega;
- register int i;
- int fd232;
- char omegadev[20];
-
- /*
- * Check configuration info
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,"omega_start: unit %d invalid", unit);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "omega_start: unit %d in use", unit);
- return 0;
- }
-
- /*
- * Open serial port
- */
- (void) sprintf(omegadev, OMEGA232, unit);
- fd232 = open(omegadev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "omega_start: open of %s: %m", omegadev);
- return 0;
- }
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TCGETA): %m", omegadev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TCSETA): %m", omegadev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The OMEGACLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The OMEGAPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcgetattr(%s): %m", omegadev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcsetattr(%s): %m", omegadev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcflush(%s): %m", omegadev);
- goto screwed;
- }
- }
-#endif /* HAVE_TERMIOS */
-#ifdef STREAM
-#if defined(OMEGACLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, I_PUSH, clk): %m", omegadev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, CLK_SETSTR): %m", omegadev);
-#endif /* OMEGACLK */
-#if defined(OMEGAPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, I_PUSH, ppsclock): %m", omegadev);
- else
- fdpps = fd232;
-#endif /* OMEGAPPS */
-#endif /* STREAM */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The OMEGACLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(OMEGACLK)
- int ldisc = CLKLDISC;
-#endif /* OMEGACLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCGETP): %m", omegadev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(OMEGACLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* OMEGACLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCSETP): %m", omegadev);
- goto screwed;
- }
-#if defined(OMEGACLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCSETD): %m",omegadev);
- goto screwed;
- }
-#endif /* OMEGACLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Allocate unit structure
- */
- if (omegaunits[unit] != 0) {
- omega = omegaunits[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && omegaunits[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- omega = omegaunits[i];
- omegaunits[i] = 0;
- } else {
- omega = (struct omegaunit *)
- emalloc(sizeof(struct omegaunit));
- }
- }
- memset((char *)omega, 0, sizeof(struct omegaunit));
- omegaunits[unit] = omega;
-
- /*
- * Set up the structures
- */
- omega->peer = peer;
- omega->unit = (u_char)unit;
- omega->timestarted = current_time;
- omega->station = STATION_NONE;
-
- omega->io.clock_recv = omega_receive;
- omega->io.srcclock = (caddr_t)omega;
- omega->io.datalen = 0;
- omega->io.fd = fd232;
- if (!io_addclock(&omega->io)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success.
- */
- peer->precision = OMEGAPRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- return 1;
-
- /*
- * Something broke; abandon ship
- */
-screwed:
- (void) close(fd232);
- return 0;
-}
-
-
-/*
- * omega_shutdown - shut down a OMEGA clock
- */
-static void
-omega_shutdown(unit)
- int unit;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_shutdown: unit %d invalid",
- unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "omega_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- omega = omegaunits[unit];
- io_closeclock(&omega->io);
- unitinuse[unit] = 0;
-}
-
-
-/*
- * omega_report_event - note the occurance of an event
- */
-static void
-omega_report_event(omega, code)
- struct omegaunit *omega;
- int code;
-{
- struct peer *peer;
-
- peer = omega->peer;
- if (omega->status != (u_char)code) {
- omega->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- omega->lastevent = (u_char)code;
- syslog(LOG_INFO,
- "omega clock %s event %x\n", ntoa(&peer->srcadr), code);
- }
-}
-
-
-/*
- * omega_receive - receive data from the serial interface on a
- * Kinemetrics OM-DC OMEGA clock.
- */
-static void
-omega_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int i;
- register struct omegaunit *omega;
- register u_char *dpt;
- register char *cp, *cpend;
- register u_char *dpend;
- l_fp tstmp;
- u_fp dispersion, drift;
-
- /*
- * Get the clock this applies to and a pointers to the data
- */
- omega = (struct omegaunit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
-
-#ifndef PEDANTIC
- /*
- * The OM-DC outputs a timecode every second, but we only want
- * a set of NSTAMPS timecodes when polled (every 64 seconds).
- * Setting PEDANTIC causes a sanity check on every timecode.
- */
- if (!omega->polled)
- return;
-#endif
-
- /*
- * Edit timecode to remove control chars
- */
- dpend = dpt + rbufp->recv_length;
- cp = omega->lastcode;
- cpend = omega->lastcode + BMAX - 1;
- while (dpt < dpend && cp < cpend) {
- if ((*cp = 0x7f & *dpt++) >= ' ') cp++;
-#ifdef OMEGACLK
- else if (*cp == '\r') {
- if (dpend - dpt < 8) {
- /* short timestamp */
- return;
- }
- if (!buftvtots(dpt,&omega->lastrec)) {
- /* screwy timestamp */
- return;
- }
- dpt += 8;
- }
-#endif
- }
- *cp = '\0';
- omega->lencode = cp - omega->lastcode;
-
- if (omega->lencode == 0)
- return;
- else if (omega->lencode != LENOMEGA) {
- omega->badformat++;
- /* Sometimes get a lot of these, filling the log with noise */
- /* omega_report_event(omega, CEVNT_BADREPLY); */
- return;
- }
-
-#ifndef OMEGACLK
- omega->lastrec = rbufp->recv_time;
-#endif
-
-#ifdef DEBUG
- if (debug)
- printf("omega: timecode %d %s\n",
- omega->lencode, omega->lastcode);
-#endif
-
- /*
- * We get down to business, check the timecode format
- * and decode its contents.
- */
- cp = omega->lastcode;
- omega->leap = 0;
- /*
- * Check timecode format.
- */
- if (!isdigit(cp[0]) || /* day of year */
- !isdigit(cp[1]) ||
- !isdigit(cp[2]) ||
- cp[3] != ':' || /* <sp> */
- !isdigit(cp[4]) || /* hours */
- !isdigit(cp[5]) ||
- cp[6] != ':' || /* : separator */
- !isdigit(cp[7]) || /* minutes */
- !isdigit(cp[8]) ||
- cp[9] != ':' || /* : separator */
- !isdigit(cp[10]) || /* seconds */
- !isdigit(cp[11])) {
- omega->badformat++;
- omega_report_event(omega, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * Convert and check values.
- */
- omega->year = 0; /* fake */
- omega->day = cp[0] - '0';
- omega->day = MULBY10(omega->day) + cp[1] - '0';
- omega->day = MULBY10(omega->day) + cp[2] - '0';
- omega->hour = MULBY10(cp[4] - '0') + cp[5] - '0';
- omega->minute = MULBY10(cp[7] - '0') + cp[8] - '0';
- omega->second = MULBY10(cp[10] - '0') + cp[11] - '0';
- omega->msec = 0;
-
- if (omega->day < 1 || omega->day > 366) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADDATE);
- return;
- }
- if (omega->hour > 23 || omega->minute > 59 || omega->second > 59) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
-
- /*
- * Check quality/station-id flag. The OM-DC should normally stay
- * permanently locked to a station, and its time error should be less
- * than 1 msec. If it loses lock for any reason, it makes a worst
- * case drift estimate based on the internally stored stability figure
- * for its reference oscillator. The stability figure can be adjusted
- * by the user based on experience. The default value is 1E05, which
- * is pretty bad - 2E07 is about right for the unit I have.
- *
- * The following is arbitrary, change it if you're offended:
- * For errors less than 50 msec, just clear the station indicator.
- * For errors greater than 50 msec, flag loss of sync and report a
- * propagation problem. If the error is greater than 500 msec,
- * something is dreadfully wrong - report a clock fault.
- *
- * In each case, we set a drift estimate which is used below as an
- * estimate of measurement accuracy.
- */
- omega->quality = cp[12];
- if (cp[12] == '>' || cp[12] == '?') {
- /* Error 500 to 5000 msec */
- omega_report_event(omega, CEVNT_FAULT);
- omega->leap = LEAP_NOTINSYNC;
- omega->station = STATION_NONE;
- drift = U_FP5000MS;
- } else if (cp[12] == '#') {
- /* Error 50 to 500 msec */
- omega_report_event(omega, CEVNT_PROP);
- omega->leap = LEAP_NOTINSYNC;
- omega->station = STATION_NONE;
- drift = U_FP500MS;
- } else if (cp[12] == '*') {
- /* Error 5 to 50 msec */
- omega->lasttime = current_time;
- omega->station = STATION_NONE;
- drift = U_FP50MS;
- } else if (cp[12] == '.') {
- /* Error 1 to 5 msec */
- omega->lasttime = current_time;
- omega->station = STATION_NONE;
- drift = U_FP5MS;
- } else if ('A' <= cp[12] && cp[12] <= 'H') {
- /* Error less than 1 msec */
- omega->lasttime = current_time;
- omega->station = cp[12] - 'A' + 1;
- drift = 0;
- } else {
- omega->badformat++;
- omega_report_event(omega, CEVNT_BADREPLY);
- return;
- }
-
-#ifdef PEDANTIC
- /* If we haven't been polled, bail out. */
- if (!omega->polled)
- return;
-#endif
-
- /*
- * Now, compute the reference time value. Use the heavy
- * machinery for the seconds and the millisecond field for the
- * fraction when present.
- *
- * this code does not yet know how to do the years
- */
- tstmp = omega->lastrec;
- if (!clocktime(omega->day, omega->hour, omega->minute,
- omega->second, GMT, tstmp.l_ui,
- &omega->yearstart, &omega->lastref.l_ui)) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
- MSUTOTSF(omega->msec, omega->lastref.l_uf);
-
- /*
- * Adjust the read value by fudgefactor1 to correct RS232 delays.
- */
- L_ADD(&omega->lastref, &fudgefactor1[omega->unit]);
-
- /* Carousel of NSTAMPS offsets. */
- i = omega->coderecv % NSTAMPS;
- omega->offset[i] = omega->lastref;
- L_SUB(&omega->offset[i], &tstmp);
- omega->coderecv++;
-
- /* If we don't yet have a full set, return. */
- if (omega->coderecv < NSTAMPS)
- return;
-
- /*
- * Filter the samples, add the fudge factor and pass the
- * offset and dispersion along. We use lastrec as both the
- * reference time and receive time in order to avoid being cute,
- * like setting the reference time later than the receive time,
- * which may cause a paranoid protocol module to chuck out the
- * data. If the sample filter chokes because of excessive
- * dispersion or whatever, get a new sample (omega->coderecv
- * is still >= NSTAMPS) and try again.
- */
- if (!omega_process(omega, &tstmp, &dispersion)) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
-
- /*
- * Add accumulated clock drift to the dispersion to get
- * a (hopefully) meaningful measurement accuracy estimate.
- */
- dispersion += drift;
- refclock_receive(omega->peer, &tstmp, GMT, dispersion,
- &omega->lastrec, &omega->lastrec, omega->leap);
-
- /*
- * We have succeeded in answering the poll. If the clock
- * is locked, we're nominal.
- */
- omega->polled = 0;
- omega->coderecv = 0;
- if (omega->leap != LEAP_NOTINSYNC)
- omega_report_event(omega, CEVNT_NOMINAL);
-}
-
-
-/*
- * omega_send - time to send the clock a signal to cough up a time sample
- */
-static void
-omega_send(omega,cmd)
- struct omegaunit *omega;
- char *cmd;
-{
- if (!readonlyclockflag[omega->unit]) {
- /*
- * Send a command to the clock.
- */
- if (write(omega->io.fd, cmd, 1) != 1) {
- syslog(LOG_ERR, "omega_send: unit %d: %m", omega->unit);
- omega_report_event(omega, CEVNT_FAULT);
- }
- }
-}
-
-
-/*
- * Compare two l_fp's, used with qsort()
- */
-static int
-omega_cmpl_fp(p1, p2)
- register void *p1, *p2;
-{
-
- if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2))
- return (-1);
- if (L_ISEQU((l_fp *)p1, (l_fp *)p2))
- return (0);
- return (1);
-}
-
-
-/*
- * omega_process - process a pile of samples from the clock
- */
-static char
-omega_process(omega, offset, dispersion)
- struct omegaunit *omega;
- l_fp *offset;
- u_fp *dispersion;
-{
- register int i, n;
- register u_long med_ui, med_uf, tmp_ui, tmp_uf;
- l_fp off[NSTAMPS];
- u_fp disp;
-
- /* Copy in offsets and sort into ascending order */
- for (i = 0; i < NSTAMPS; i++)
- off[i] = omega->offset[i];
- qsort((char *)off, NSTAMPS, sizeof(l_fp), omega_cmpl_fp);
- /*
- * Reject the furthest from the median until NSKEEP samples remain
- */
- i = 0;
- n = NSTAMPS;
- while ((n - i) > NSKEEP) {
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- med_ui = off[(n+i)/2].l_ui;
- med_uf = off[(n+i)/2].l_uf;
- M_SUB(tmp_ui, tmp_uf, med_ui, med_uf);
- M_SUB(med_ui, med_uf, off[i].l_ui, off[i].l_uf);
- if (M_ISHIS(med_ui, med_uf, tmp_ui, tmp_uf)) {
- /* reject low end */
- i++;
- } else {
- /* reject high end */
- n--;
- }
- }
-
- /*
- * Compute the dispersion based on the difference between the
- * extremes of the remaining offsets. If this is greater than
- * the allowed sample set dispersion, bail out. Otherwise,
- * return the median offset and the dispersion.
- */
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- disp = MFPTOFP(tmp_ui, tmp_uf);
- if (disp > OMEGAMAXDISPERSE)
- return 0;
- *offset = off[(n+1)/2];
- *dispersion = disp;
- return 1;
-}
-
-
-/*
- * omega_poll - called by the transmit procedure
- */
-static void
-omega_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct omegaunit *omega;
-
- /*
- * You don't need to poll this clock. It puts out timecodes
- * once per second. If asked for a timestamp, take note.
- * The next time a timecode comes in, it will be fed back.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "omega_poll: unit %d not in use", unit);
- return;
- }
- omega = omegaunits[unit];
- if ((current_time - omega->lasttime) > 150) {
- omega->noreply++;
- omega_report_event(omegaunits[unit], CEVNT_TIMEOUT);
- }
-
- /*
- * polled every 64 seconds. Ask OMEGA_RECEIVE to hand in a timestamp.
- */
- omega->polled = 1;
- omega->polls++;
- /*
- * Ensure the clock is running in the correct mode - on-second
- * timestamps.
- */
- omega_send(omega,"C");
-}
-
-
-/*
- * omega_control - set fudge factors, return statistics
- */
-static void
-omega_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_control: unit %d invalid", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor1[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- fudgefactor2[unit] = in->fudgetime2;
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (in->haveflags & CLK_HAVEFLAG1)
- readonlyclockflag[unit] = in->flags & CLK_FLAG1;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = omegaunits[unit]->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out != 0) {
- out->type = REFCLK_OMEGA_TRUETIME;
- out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 |
- CLK_HAVEVAL2| CLK_HAVEFLAG1;
- out->clockdesc = OMEGADESCRIPTION;
- out->fudgetime1 = fudgefactor1[unit];
- out->fudgetime2 = fudgefactor2[unit];
- out->fudgeval1 = stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->flags = readonlyclockflag[unit];
- if (unitinuse[unit]) {
- omega = omegaunits[unit];
- out->flags |= omega->station << 1;
- out->lencode = omega->lencode;
- out->lastcode = omega->lastcode;
- out->timereset = current_time - omega->timestarted;
- out->polls = omega->polls;
- out->noresponse = omega->noreply;
- out->badformat = omega->badformat;
- out->baddata = omega->baddata;
- out->lastevent = omega->lastevent;
- out->currentstatus = omega->status;
- }
- }
-}
-
-
-/*
- * omega_buginfo - return clock dependent debugging info
- */
-static void
-omega_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_buginfo: unit %d invalid", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- omega = omegaunits[unit];
-
- bug->nvalues = 11;
- bug->ntimes = 5;
- if (omega->lasttime != 0)
- bug->values[0] = current_time - omega->lasttime;
- else
- bug->values[0] = 0;
- bug->values[1] = omega->reason;
- bug->values[2] = omega->year;
- bug->values[3] = omega->day;
- bug->values[4] = omega->hour;
- bug->values[5] = omega->minute;
- bug->values[6] = omega->second;
- bug->values[7] = omega->msec;
- bug->values[8] = omega->noreply;
- bug->values[9] = omega->yearstart;
- bug->values[10] = omega->quality;
- bug->stimes = 0x1c;
- bug->times[0] = omega->lastref;
- bug->times[1] = omega->lastrec;
- bug->times[2] = omega->offset[0];
- bug->times[3] = omega->offset[1];
- bug->times[4] = omega->offset[2];
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c b/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c
deleted file mode 100644
index 1b950a9..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_new/refclock_parse.c
+++ /dev/null
@@ -1,3617 +0,0 @@
-#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
-/*
- * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp
- *
- * refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp
- *
- * generic reference clock driver for receivers
- *
- * make use of a STREAMS module for input processing where
- * available and configured. Currently the STREAMS module
- * is only available for Suns running SunOS 4.x and SunOS5.x (new - careful!)
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-/*
- * Defines:
- * REFCLOCK && (PARSE||PARSEPPS)
- * - enable this mess
- * STREAM - allow for STREAMS modules
- * ("parse", "ppsclocd", "ppsclock")
- * PARSEPPS - provide PPS information to loopfilter (for
- * backward compatibilty only)
- * PPS - supply loopfilter with PPS samples (if configured)
- * PPSPPS - notify loopfilter of PPS file descriptor
- *
- * TTY defines:
- * HAVE_BSD_TTYS - currently unsupported
- * HAVE_SYSV_TTYS - will use termio.h
- * HAVE_TERMIOS - will use termios.h
- * STREAM - will use streams and implies HAVE_TERMIOS
- */
-
-/*
- * This driver currently provides the support for
- * - Meinberg DCF77 receiver DCF77 PZF 535 (TCXO version) (DCF)
- * - Meinberg DCF77 receiver DCF77 PZF 535 (OCXO version) (DCF)
- * - Meinberg DCF77 receiver U/A 31 (DCF)
- * - IGEL CLOCK (DCF)
- * - ELV DCF7000 (DCF)
- * - Schmid clock (DCF)
- * - Conrad DCF77 receiver module (DCF)
- * - FAU DCF77 NTP receiver (TimeBrick) (DCF)
- * - Meinberg GPS166 (GPS)
- * - Trimble SV6 (GPS)
- *
- */
-
-/*
- * Meinberg receivers are connected via a 9600 baud serial line
- *
- * Receivers that do NOT support:
- * - leap second indication
- * DCF U/A 31
- * DCF PZF535 (stock version)
- *
- * so...
- * - for PZF535 please ask for revision PZFUERL4.6 or higher
- * (support for leap second and alternate antenna)
- *
- * The Meinberg GPS receiver also has a special NTP time stamp
- * format. The firmware release is Uni-Erlangen. Only this
- * firmware release is supported by xntp3.
- *
- * Meinberg generic receiver setup:
- * output time code every second
- * Baud rate 9600 7E2S
- */
-
-#include "ntpd.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_control.h"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sys/errno.h>
-extern int errno;
-
-#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
-/* #error NEED TO DEFINE ONE OF "STREAM" or "HAVE_SYSV_TTYS" */
-NEED TO DEFINE ONE OF "STREAM", "HAVE_SYSV_TTYS" or "HAVE_TERMIOS"
-#endif
-
-#ifdef STREAM
-#include <sys/stream.h>
-#include <sys/stropts.h>
-#ifndef HAVE_TERMIOS
-#define HAVE_TERMIOS
-#endif
-#endif
-
-#ifdef HAVE_TERMIOS
-#include <termios.h>
-#define TTY_GETATTR(_FD_, _ARG_) tcgetattr((_FD_), (_ARG_))
-#define TTY_SETATTR(_FD_, _ARG_) tcsetattr((_FD_), TCSANOW, (_ARG_))
-#undef HAVE_SYSV_TTYS
-#endif
-
-#ifdef HAVE_SYSV_TTYS
-#include <termio.h>
-#define TTY_GETATTR(_FD_, _ARG_) ioctl((_FD_), TCGETA, (_ARG_))
-#define TTY_SETATTR(_FD_, _ARG_) ioctl((_FD_), TCSETAW, (_ARG_))
-#endif
-
-#ifdef HAVE_BSD_TTYS
-/* #error CURRENTLY NO BSD TTY SUPPORT */
-CURRENTLY NO BSD TTY SUPPORT
-#endif
-
-#if !defined(O_RDWR) /* XXX SOLARIS */
-#include <fcntl.h>
-#endif /* !def(O_RDWR) */
-
-#ifdef PPSPPS
-#include <sys/ppsclock.h>
-#endif
-
-#include "ntp_select.h"
-#include "ntp_stdlib.h"
-
-#include "parse.h"
-
-#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-static char rcsid[]="refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp";
-#endif
-
-/**===========================================================================
- ** external interface to xntp mechanism
- **/
-
-static void parse_init P((void));
-static int parse_start P((u_int, struct peer *));
-static void parse_shutdown P((int));
-static void parse_poll P((int, struct peer *));
-static void parse_control P((u_int, struct refclockstat *, struct refclockstat *));
-
-#define parse_buginfo noentry
-
-struct refclock refclock_parse = {
- parse_start,
- parse_shutdown,
- parse_poll,
- parse_control,
- parse_init,
- parse_buginfo,
- NOFLAGS
-};
-
-/*
- * the unit field selects for one the prototype to be used (lower 4 bits)
- * and for the other the clock type in case of different but similar
- * receivers (bits 4-6)
- * the most significant bit encodes PPS support
- * when the most significant bit is set the pps telegrams will be used
- * for controlling the local clock (ntp_loopfilter.c)
- * receiver specific configration data is kept in the clockinfo field.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* maximum number of "PARSE" units permitted */
-#define PARSEDEVICE "/dev/refclock-%d" /* device to open %d is unit number */
-
-/**===========================================================================
- ** function vector for dynamically binding io handling mechanism
- **/
-
-typedef struct bind
-{
- char *bd_description; /* name of type of binding */
- int (*bd_init)(); /* initialize */
- void (*bd_end)(); /* end */
- int (*bd_setcs)(); /* set character size */
- int (*bd_disable)(); /* disable */
- int (*bd_enable)(); /* enable */
- int (*bd_getfmt)(); /* get format */
- int (*bd_setfmt)(); /* setfmt */
- int (*bd_getstat)(); /* getstat */
- int (*bd_setstat)(); /* setstat */
- int (*bd_timecode)(); /* get time code */
- void (*bd_receive)(); /* receive operation */
- void (*bd_poll)(); /* poll operation */
-} bind_t;
-
-#define PARSE_END(_X_) (*(_X_)->binding->bd_end)(_X_)
-#define PARSE_SETCS(_X_, _CS_) (*(_X_)->binding->bd_setcs)(_X_, _CS_)
-#define PARSE_ENABLE(_X_) (*(_X_)->binding->bd_enable)(_X_)
-#define PARSE_DISABLE(_X_) (*(_X_)->binding->bd_disable)(_X_)
-#define PARSE_GETFMT(_X_, _DCT_) (*(_X_)->binding->bd_getfmt)(_X_, _DCT_)
-#define PARSE_SETFMT(_X_, _DCT_) (*(_X_)->binding->bd_setfmt)(_X_, _DCT_)
-#define PARSE_GETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_getstat)(_X_, _DCT_)
-#define PARSE_SETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_setstat)(_X_, _DCT_)
-#define PARSE_GETTIMECODE(_X_, _DCT_) (*(_X_)->binding->bd_timecode)(_X_, _DCT_)
-#define PARSE_POLL(_X_) (*(_X_)->binding->bd_poll)(_X_)
-
-/*
- * io modes
- */
-#define PARSE_F_NOPOLLONLY 0x0001 /* always do async io (possible PPS support via PARSE) */
-#define PARSE_F_POLLONLY 0x0002 /* never do async io (no PPS support via PARSE) */
-#define PARSE_F_PPSPPS 0x0004 /* use loopfilter PPS code (CIOGETEV) */
-#define PARSE_F_PPSONSECOND 0x0008 /* PPS pulses are on second */
-
-/**===========================================================================
- ** refclock instance data
- **/
-
-struct parseunit
-{
- /*
- * XNTP management
- */
- struct peer *peer; /* backlink to peer structure - refclock inactive if 0 */
- int fd; /* device file descriptor */
- u_char unit; /* encoded unit/type/PPS */
-
- /*
- * XNTP io
- */
- struct refclockio io; /* io system structure (used in PPS mode) */
- bind_t *binding; /* io handling binding */
-
- /*
- * parse state
- */
- parse_t parseio; /* io handling structure (user level parsing) */
-
- /*
- * type specific parameters
- */
- struct clockinfo *parse_type; /* link to clock description */
-
- /*
- * clock specific configuration
- */
- l_fp basedelay; /* clock local phase offset */
- l_fp ppsdelay; /* clock local pps phase offset */
-
- /*
- * clock state handling/reporting
- */
- u_char flags; /* flags (leap_control) */
- u_char status; /* current status */
- u_char lastevent; /* last not NORMAL status */
- u_long lastchange; /* time (xntp) when last state change accured */
- u_long statetime[CEVNT_MAX+1]; /* accumulated time of clock states */
- struct event stattimer; /* statistics timer */
- u_long polls; /* polls from NTP protocol machine */
- u_long noresponse; /* number of expected but not seen datagrams */
- u_long badformat; /* bad format (failed format conversions) */
- u_long baddata; /* usually bad receive length, bad format */
-
- u_char pollonly; /* 1 for polling only (no PPS mode) */
- u_char pollneeddata; /* 1 for receive sample expected in PPS mode */
- u_long laststatus; /* last packet status (error indication) */
- u_short lastformat; /* last format used */
- u_long lastsync; /* time (xntp) when clock was last seen fully synchronized */
- u_long timestarted; /* time (xntp) when peer clock was instantiated */
- u_long nosynctime; /* time (xntp) when last nosync message was posted */
- u_long lastmissed; /* time (xntp) when poll didn't get data (powerup heuristic) */
- u_long ppsserial; /* magic cookie for ppsclock serials (avoids stale ppsclock data) */
- parsetime_t time; /* last (parse module) data */
- void *localdata; /* optional local data */
-};
-
-
-/**===========================================================================
- ** Clockinfo section all parameter for specific clock types
- ** includes NTP paramaters, TTY parameters and IO handling parameters
- **/
-
-static void poll_dpoll P((struct parseunit *));
-static void poll_poll P((struct parseunit *));
-static int poll_init P((struct parseunit *));
-static void poll_end P((struct parseunit *));
-
-typedef struct poll_info
-{
- u_long rate; /* poll rate - once every "rate" seconds - 0 off */
- char * string; /* string to send for polling */
- u_long count; /* number of charcters in string */
-} poll_info_t;
-
-#define NO_FLAGS 0
-#define NO_POLL (void (*)())0
-#define NO_INIT (int (*)())0
-#define NO_END (void (*)())0
-#define NO_DATA (void *)0
-#define NO_FORMAT ""
-#define NO_PPSDELAY 0
-
-#define DCF_ID "DCF" /* generic DCF */
-#define DCF_A_ID "DCFa" /* AM demodulation */
-#define DCF_P_ID "DCFp" /* psuedo random phase shift */
-#define GPS_ID "GPS" /* GPS receiver */
-
-#define NOCLOCK_ROOTDELAY 0x00000000
-#define NOCLOCK_BASEDELAY 0x00000000
-#define NOCLOCK_DESCRIPTION ((char *)0)
-#define NOCLOCK_MAXUNSYNC 0
-#define NOCLOCK_CFLAG 0
-#define NOCLOCK_IFLAG 0
-#define NOCLOCK_OFLAG 0
-#define NOCLOCK_LFLAG 0
-#define NOCLOCK_ID "TILT"
-#define NOCLOCK_POLL NO_POLL
-#define NOCLOCK_INIT NO_INIT
-#define NOCLOCK_END NO_END
-#define NOCLOCK_DATA NO_DATA
-#define NOCLOCK_FORMAT NO_FORMAT
-#define NOCLOCK_TYPE CTL_SST_TS_UNSPEC
-
-#define DCF_TYPE CTL_SST_TS_LF
-#define GPS_TYPE CTL_SST_TS_UHF
-
-/*
- * receiver specific constants
- */
-#define MBG_CFLAG19200 (B19200|CS7|PARENB|CREAD|HUPCL)
-#define MBG_CFLAG (B9600|CS7|PARENB|CREAD|HUPCL)
-#define MBG_IFLAG (IGNBRK|IGNPAR|ISTRIP)
-#define MBG_OFLAG 0
-#define MBG_LFLAG 0
-/*
- * Meinberg DCF U/A 31 (AM) receiver
- */
-#define DCFUA31_ROOTDELAY 0x00000D00 /* 50.78125ms */
-#define DCFUA31_BASEDELAY 0x02C00000 /* 10.7421875ms: 10 ms (+/- 3 ms) */
-#define DCFUA31_DESCRIPTION "Meinberg DCF U/A 31"
-#define DCFUA31_MAXUNSYNC 60*30 /* only trust clock for 1/2 hour */
-#define DCFUA31_CFLAG MBG_CFLAG
-#define DCFUA31_IFLAG MBG_IFLAG
-#define DCFUA31_OFLAG MBG_OFLAG
-#define DCFUA31_LFLAG MBG_LFLAG
-
-/*
- * Meinberg DCF PZF535/TCXO (FM/PZF) receiver
- */
-#define DCFPZF535_ROOTDELAY 0x00000034 /* 800us */
-#define DCFPZF535_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define DCFPZF535_DESCRIPTION "Meinberg DCF PZF 535/TCXO"
-#define DCFPZF535_MAXUNSYNC 60*60*12 /* only trust clock for 12 hours
- * @ 5e-8df/f we have accumulated
- * at most 2.16 ms (thus we move to
- * NTP synchronisation */
-#define DCFPZF535_CFLAG MBG_CFLAG
-#define DCFPZF535_IFLAG MBG_IFLAG
-#define DCFPZF535_OFLAG MBG_OFLAG
-#define DCFPZF535_LFLAG MBG_LFLAG
-
-
-/*
- * Meinberg DCF PZF535/OCXO receiver
- */
-#define DCFPZF535OCXO_ROOTDELAY 0x00000034 /* 800us (max error * 10) */
-#define DCFPZF535OCXO_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define DCFPZF535OCXO_DESCRIPTION "Meinberg DCF PZF 535/OCXO"
-#define DCFPZF535OCXO_MAXUNSYNC 60*60*96 /* only trust clock for 4 days
- * @ 5e-9df/f we have accumulated
- * at most an error of 1.73 ms
- * (thus we move to NTP synchronisation) */
-#define DCFPZF535OCXO_CFLAG MBG_CFLAG
-#define DCFPZF535OCXO_IFLAG MBG_IFLAG
-#define DCFPZF535OCXO_OFLAG MBG_OFLAG
-#define DCFPZF535OCXO_LFLAG MBG_LFLAG
-
-/*
- * Meinberg GPS166 receiver
- */
-#define GPS166_ROOTDELAY 0x00000000 /* nothing here */
-#define GPS166_BASEDELAY 0x00800000 /* XXX to be fixed ! 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define GPS166_DESCRIPTION "Meinberg GPS166 receiver"
-#define GPS166_MAXUNSYNC 0 /* this clock is immediately lost */
-#define GPS166_CFLAG MBG_CFLAG
-#define GPS166_IFLAG MBG_IFLAG
-#define GPS166_OFLAG MBG_OFLAG
-#define GPS166_LFLAG MBG_LFLAG
-#define GPS166_POLL NO_POLL
-#define GPS166_INIT NO_INIT
-#define GPS166_END NO_END
-#define GPS166_DATA NO_DATA
-#define GPS166_ID GPS_ID
-#define GPS166_FORMAT NO_FORMAT
-
-/*
- * ELV DCF7000 Wallclock-Receiver/Switching Clock (Kit)
- *
- * This is really not the hottest clock - but before you have nothing ...
- */
-#define DCF7000_ROOTDELAY 0x00000364 /* 13 ms */
-#define DCF7000_BASEDELAY 0x67AE0000 /* 405 ms - slow blow */
-#define DCF7000_DESCRIPTION "ELV DCF7000"
-#define DCF7000_MAXUNSYNC (60*5) /* sorry - but it just was not build as a clock */
-#define DCF7000_CFLAG (B9600|CS8|CREAD|PARENB|PARODD|CLOCAL|HUPCL)
-#define DCF7000_IFLAG (IGNBRK)
-#define DCF7000_OFLAG 0
-#define DCF7000_LFLAG 0
-
-/*
- * Schmid DCF Receiver Kit
- *
- * When the WSDCF clock is operating optimally we want the primary clock
- * distance to come out at 300 ms. Thus, peer.distance in the WSDCF peer
- * structure is set to 290 ms and we compute delays which are at least
- * 10 ms long. The following are 290 ms and 10 ms expressed in u_fp format
- */
-#define WS_POLLRATE 1 /* every second - watch interdependency with poll routine */
-#define WS_POLLCMD "\163"
-#define WS_CMDSIZE 1
-
-static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE };
-
-#define WSDCF_INIT poll_init
-#define WSDCF_POLL poll_dpoll
-#define WSDCF_END poll_end
-#define WSDCF_DATA ((void *)(&wsdcf_pollinfo))
-#define WSDCF_ROOTDELAY 0X00004A3D /* ~ 290ms */
-#define WSDCF_BASEDELAY 0x028F5C29 /* ~ 10ms */
-#define WSDCF_DESCRIPTION "WS/DCF Receiver"
-#define WSDCF_FORMAT "Schmid"
-#define WSDCF_MAXUNSYNC (60*60) /* assume this beast hold at 1 h better than 2 ms XXX-must verify */
-#define WSDCF_CFLAG (B1200|CS8|CREAD|CLOCAL)
-#define WSDCF_IFLAG 0
-#define WSDCF_OFLAG 0
-#define WSDCF_LFLAG 0
-
-/*
- * RAW DCF77 - input of DCF marks via RS232 - many variants
- */
-#define RAWDCF_FLAGS PARSE_F_NOPOLLONLY
-#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
-#define RAWDCF_FORMAT "RAW DCF77 Timecode"
-#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
-#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL|PARENB)
-#define RAWDCF_IFLAG (IGNPAR)
-#define RAWDCF_OFLAG 0
-#define RAWDCF_LFLAG 0
-
-/*
- * RAW DCF variants
- */
-/*
- * Conrad receiver
- *
- * simplest (cheapest) DCF clock - e. g. DCF77 receiver by Conrad
- * (~40DM - roughly $30 ) followed by a level converter for RS232
- */
-#define CONRAD_BASEDELAY 0x420C49B0 /* ~258 ms - Conrad receiver @ 50 Baud on a Sun */
-#define CONRAD_DESCRIPTION "RAW DCF77 CODE (Conrad DCF77 receiver module)"
-
-/*
- * TimeBrick receiver
- */
-#define TIMEBRICK_BASEDELAY 0x35C29000 /* ~210 ms - TimeBrick @ 50 Baud on a Sun */
-#define TIMEBRICK_DESCRIPTION "RAW DCF77 CODE (TimeBrick)"
-
-/*
- * IGEL:clock receiver
- */
-#define IGELCLOCK_BASEDELAY 0x420C49B0 /* ~258 ms - IGEL:clock receiver */
-#define IGELCLOCK_DESCRIPTION "RAW DCF77 CODE (IGEL:clock)"
-#define IGELCLOCK_CFLAG (B1200|CS8|CREAD|HUPCL|CLOCAL)
-
-/*
- * Trimble SV6 GPS receiver
- */
-#ifndef TRIM_POLLRATE
-#define TRIM_POLLRATE 0 /* only true direct polling */
-#endif
-#define TRIM_POLLCMD ">SRM;FR_FLAG=F<>QTM<"
-#define TRIM_CMDSIZE 20
-
-static poll_info_t trimble_pollinfo = { TRIM_POLLRATE, TRIM_POLLCMD, TRIM_CMDSIZE };
-static int trimble_init P((struct parseunit *));
-
-#define TRIMBLESV6_CFLAG (B4800|CS8|CREAD)
-#define TRIMBLESV6_IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
-#define TRIMBLESV6_OFLAG (OPOST|ONLCR)
-#define TRIMBLESV6_LFLAG (ICANON|ECHOK)
-#define TRIMBLESV6_FLAGS (PARSE_F_PPSPPS|PARSE_F_PPSONSECOND)
-#define TRIMBLESV6_POLL poll_dpoll
-#define TRIMBLESV6_INIT trimble_init
-#define TRIMBLESV6_END poll_end
-#define TRIMBLESV6_DATA ((void *)(&trimble_pollinfo))
-#define TRIMBLESV6_ID GPS_ID
-#define TRIMBLESV6_FORMAT NO_FORMAT
-#define TRIMBLESV6_ROOTDELAY 0x0
-#define TRIMBLESV6_BASEDELAY 0x0
-#define TRIMBLESV6_DESCRIPTION "Trimble SV6 GPS receiver"
-#define TRIMBLESV6_MAXUNSYNC 0
-#define TRIMBLESV6_EOL '<'
-
-static struct clockinfo
-{
- u_long cl_flags; /* operation flags (io modes) */
- void (*cl_poll)(); /* active poll routine */
- int (*cl_init)(); /* active poll init routine */
- void (*cl_end)(); /* active poll end routine */
- void *cl_data; /* local data area for "poll" mechanism */
- u_fp cl_rootdelay; /* rootdelay */
- u_long cl_basedelay; /* current offset - unsigned l_fp fractional part */
- u_long cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */
- char *cl_id; /* ID code (usually "DCF") */
- char *cl_description; /* device name */
- char *cl_format; /* fixed format */
- u_char cl_type; /* clock type (ntp control) */
- u_long cl_maxunsync; /* time to trust oscillator after loosing synch */
- u_long cl_cflag; /* terminal io flags */
- u_long cl_iflag; /* terminal io flags */
- u_long cl_oflag; /* terminal io flags */
- u_long cl_lflag; /* terminal io flags */
-} clockinfo[] =
-{ /* 0. 0.0.128 - base offset for PPS support */
- { /* 127.127.8.<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFPZF535_ROOTDELAY,
- DCFPZF535_BASEDELAY,
- NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFPZF535_MAXUNSYNC,
- DCFPZF535_CFLAG,
- DCFPZF535_IFLAG,
- DCFPZF535_OFLAG,
- DCFPZF535_LFLAG
- },
- { /* 127.127.8.4+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFPZF535OCXO_ROOTDELAY,
- DCFPZF535OCXO_BASEDELAY,
- NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535OCXO_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFPZF535OCXO_MAXUNSYNC,
- DCFPZF535OCXO_CFLAG,
- DCFPZF535OCXO_IFLAG,
- DCFPZF535OCXO_OFLAG,
- DCFPZF535OCXO_LFLAG
- },
- { /* 127.127.8.8+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFUA31_ROOTDELAY,
- DCFUA31_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- DCFUA31_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFUA31_MAXUNSYNC,
- DCFUA31_CFLAG,
- DCFUA31_IFLAG,
- DCFUA31_OFLAG,
- DCFUA31_LFLAG
- },
- { /* 127.127.8.12+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCF7000_ROOTDELAY,
- DCF7000_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- DCF7000_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCF7000_MAXUNSYNC,
- DCF7000_CFLAG,
- DCF7000_IFLAG,
- DCF7000_OFLAG,
- DCF7000_LFLAG
- },
- { /* 127.127.8.16+<device> */
- NO_FLAGS,
- WSDCF_POLL,
- WSDCF_INIT,
- WSDCF_END,
- WSDCF_DATA,
- WSDCF_ROOTDELAY,
- WSDCF_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- WSDCF_DESCRIPTION,
- WSDCF_FORMAT,
- DCF_TYPE,
- WSDCF_MAXUNSYNC,
- WSDCF_CFLAG,
- WSDCF_IFLAG,
- WSDCF_OFLAG,
- WSDCF_LFLAG
- },
- { /* 127.127.8.20+<device> */
- RAWDCF_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- RAWDCF_ROOTDELAY,
- CONRAD_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- CONRAD_DESCRIPTION,
- RAWDCF_FORMAT,
- DCF_TYPE,
- RAWDCF_MAXUNSYNC,
- RAWDCF_CFLAG,
- RAWDCF_IFLAG,
- RAWDCF_OFLAG,
- RAWDCF_LFLAG
- },
- { /* 127.127.8.24+<device> */
- RAWDCF_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- RAWDCF_ROOTDELAY,
- TIMEBRICK_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- TIMEBRICK_DESCRIPTION,
- RAWDCF_FORMAT,
- DCF_TYPE,
- RAWDCF_MAXUNSYNC,
- RAWDCF_CFLAG,
- RAWDCF_IFLAG,
- RAWDCF_OFLAG,
- RAWDCF_LFLAG
- },
- { /* 127.127.8.28+<device> */
- NO_FLAGS,
- GPS166_POLL,
- GPS166_INIT,
- GPS166_END,
- GPS166_DATA,
- GPS166_ROOTDELAY,
- GPS166_BASEDELAY,
- NO_PPSDELAY,
- GPS166_ID,
- GPS166_DESCRIPTION,
- GPS166_FORMAT,
- GPS_TYPE,
- GPS166_MAXUNSYNC,
- GPS166_CFLAG,
- GPS166_IFLAG,
- GPS166_OFLAG,
- GPS166_LFLAG
- },
- { /* 127.127.8.32+<device> */
- TRIMBLESV6_FLAGS,
-#if TRIM_POLLRATE /* DHD940515: Allow user config */
- NO_POLL,
-#else
- TRIMBLESV6_POLL,
-#endif
- TRIMBLESV6_INIT,
- TRIMBLESV6_END,
- TRIMBLESV6_DATA,
- TRIMBLESV6_ROOTDELAY,
- TRIMBLESV6_BASEDELAY,
- NO_PPSDELAY,
- TRIMBLESV6_ID,
- TRIMBLESV6_DESCRIPTION,
- TRIMBLESV6_FORMAT,
- GPS_TYPE,
- TRIMBLESV6_MAXUNSYNC,
- TRIMBLESV6_CFLAG,
- TRIMBLESV6_IFLAG,
- TRIMBLESV6_OFLAG,
- TRIMBLESV6_LFLAG
- },
- { /* 127.127.8.36+<device> */
- RAWDCF_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- RAWDCF_ROOTDELAY,
- IGELCLOCK_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- IGELCLOCK_DESCRIPTION,
- RAWDCF_FORMAT,
- DCF_TYPE,
- RAWDCF_MAXUNSYNC,
- IGELCLOCK_CFLAG,
- RAWDCF_IFLAG,
- RAWDCF_OFLAG,
- RAWDCF_LFLAG
- }
-};
-
-static int ncltypes = sizeof(clockinfo) / sizeof(struct clockinfo);
-
-#define CL_REALTYPE(x) (((x) >> 2) & 0x1F)
-#define CL_TYPE(x) ((CL_REALTYPE(x) >= ncltypes) ? ~0 : CL_REALTYPE(x))
-#define CL_PPS(x) ((x) & 0x80)
-#define CL_UNIT(x) ((x) & 0x3)
-
-/*
- * Other constant stuff
- */
-#define PARSEHSREFID 0x7f7f08ff /* 127.127.8.255 refid for hi strata */
-
-#define PARSENOSYNCREPEAT (10*60) /* mention uninitialized clocks all 10 minutes */
-#define PARSESTATISTICS (60*60) /* output state statistics every hour */
-
-static struct parseunit *parseunits[MAXUNITS];
-
-extern u_long current_time;
-extern s_char sys_precision;
-extern struct event timerqueue[];
-#ifdef PPSPPS
-extern int fdpps;
-#endif
-
-static int notice = 0;
-
-#define PARSE_STATETIME(parse, i) ((parse->status == i) ? parse->statetime[i] + current_time - parse->lastchange : parse->statetime[i])
-
-static void parse_event P((struct parseunit *, int));
-static void parse_process P((struct parseunit *, parsetime_t *));
-
-/**===========================================================================
- ** implementation of i/o handling methods
- ** (all STREAM, partial STREAM, user level)
- **/
-
-/*
- * define possible io handling methods
- */
-#ifdef STREAM
-static int ppsclock_init P((struct parseunit *));
-static int stream_init P((struct parseunit *));
-static void stream_nop P((struct parseunit *));
-static int stream_enable P((struct parseunit *));
-static int stream_disable P((struct parseunit *));
-static int stream_setcs P((struct parseunit *, parsectl_t *));
-static int stream_getfmt P((struct parseunit *, parsectl_t *));
-static int stream_setfmt P((struct parseunit *, parsectl_t *));
-static int stream_getstat P((struct parseunit *, parsectl_t *));
-static int stream_setstat P((struct parseunit *, parsectl_t *));
-static int stream_timecode P((struct parseunit *, parsectl_t *));
-static void stream_receive P((struct recvbuf *));
-static void stream_poll P((struct parseunit *));
-#endif
-
-static int local_init P((struct parseunit *));
-static void local_end P((struct parseunit *));
-static int local_nop P((struct parseunit *));
-static int local_setcs P((struct parseunit *, parsectl_t *));
-static int local_getfmt P((struct parseunit *, parsectl_t *));
-static int local_setfmt P((struct parseunit *, parsectl_t *));
-static int local_getstat P((struct parseunit *, parsectl_t *));
-static int local_setstat P((struct parseunit *, parsectl_t *));
-static int local_timecode P((struct parseunit *, parsectl_t *));
-static void local_receive P((struct recvbuf *));
-static void local_poll P((struct parseunit *));
-
-static bind_t io_bindings[] =
-{
-#ifdef STREAM
- {
- "parse STREAM",
- stream_init,
- stream_nop,
- stream_setcs,
- stream_disable,
- stream_enable,
- stream_getfmt,
- stream_setfmt,
- stream_getstat,
- stream_setstat,
- stream_timecode,
- stream_receive,
- stream_poll
- },
- {
- "ppsclock STREAM",
- ppsclock_init,
- local_end,
- local_setcs,
- local_nop,
- local_nop,
- local_getfmt,
- local_setfmt,
- local_getstat,
- local_setstat,
- local_timecode,
- local_receive,
- local_poll
- },
-#endif
- {
- "normal",
- local_init,
- local_end,
- local_setcs,
- local_nop,
- local_nop,
- local_getfmt,
- local_setfmt,
- local_getstat,
- local_setstat,
- local_timecode,
- local_receive,
- local_poll
- },
- {
- (char *)0,
- }
-};
-
-#ifdef STREAM
-/*--------------------------------------------------
- * ppsclock STREAM init
- */
-static int
-ppsclock_init(parse)
- struct parseunit *parse;
-{
- /*
- * now push the parse streams module
- * it will ensure exclusive access to the device
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclocd") == -1 &&
- ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclock") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m",
- CL_UNIT(parse->unit));
- return 0;
- }
- if (!local_init(parse))
- {
- (void)ioctl(parse->fd, I_POP, (caddr_t)0);
- return 0;
- }
-
- parse->flags |= PARSE_PPSCLOCK;
- return 1;
-}
-
-/*--------------------------------------------------
- * parse STREAM init
- */
-static int
-stream_init(parse)
- struct parseunit *parse;
-{
- /*
- * now push the parse streams module
- * to test whether it is there (Oh boy - neat kernel interface)
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- while(ioctl(parse->fd, I_POP, (caddr_t)0) == 0)
- /* empty loop */;
-
- /*
- * now push it a second time after we have removed all
- * module garbage
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- return 1;
- }
- }
-}
-
- /*--------------------------------------------------
- * STREAM setcs
- */
-static int
-stream_setcs(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETCS;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setcs: ioctl(fd, I_STR, PARSEIOC_SETCS): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM nop
- */
-static void
-stream_nop(parse)
- struct parseunit *parse;
-{
-}
-
-/*--------------------------------------------------
- * STREAM enable
- */
-static int
-stream_enable(parse)
- struct parseunit *parse;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_ENABLE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)0;
- strioc.ic_len = 0;
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_enable: ioctl(fd, I_STR, PARSEIOC_ENABLE): %m", CL_UNIT(parse->unit));
- return 0;
- }
- parse->io.clock_recv = stream_receive; /* ok - parse input in kernel */
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM disable
- */
-static int
-stream_disable(parse)
- struct parseunit *parse;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_DISABLE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)0;
- strioc.ic_len = 0;
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_disable: ioctl(fd, I_STR, PARSEIOC_DISABLE): %m", CL_UNIT(parse->unit));
- return 0;
- }
- parse->io.clock_recv = local_receive; /* ok - parse input in daemon */
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM getfmt
- */
-static int
-stream_getfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_GETFMT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: ioctl(fd, I_STR, PARSEIOC_GETFMT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM setfmt
- */
-static int
-stream_setfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETFMT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setfmt: ioctl(fd, I_STR, PARSEIOC_SETFMT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM getstat
- */
-static int
-stream_getstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_GETSTAT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_getstat: ioctl(fd, I_STR, PARSEIOC_GETSTAT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM setstat
- */
-static int
-stream_setstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETSTAT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setstat: ioctl(fd, I_STR, PARSEIOC_SETSTAT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM timecode
- */
-static int
-stream_timecode(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_TIMECODE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_process: ioctl(fd, I_STR, PARSEIOC_TIMECODE): %m", CL_UNIT(parse->unit), parse->fd);
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM receive
- */
-static void
-stream_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
- parsetime_t parsetime;
-
- if (rbufp->recv_length != sizeof(parsetime_t))
- {
- syslog(LOG_ERR,"PARSE receiver #%d: parse_receive: bad size (got %d expected %d)",
- CL_UNIT(parse->unit), rbufp->recv_length, sizeof(parsetime_t));
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
- return;
- }
- memmove((caddr_t)&parsetime,
- (caddr_t)&rbufp->recv_space,
- sizeof(parsetime_t));
-
- /*
- * switch time stamp world - be sure to normalize small usec field
- * errors.
- */
-
-#define fix_ts(_X_) \
- if ((&(_X_))->tv.tv_usec >= 1000000) \
- { \
- (&(_X_))->tv.tv_usec -= 1000000; \
- (&(_X_))->tv.tv_sec += 1; \
- }
-
-#define cvt_ts(_X_, _Y_) \
- { \
- l_fp ts; \
- \
- fix_ts((_X_)); \
- if (!buftvtots((const char *)&(&(_X_))->tv, &ts)) \
- { \
- syslog(LOG_ERR,"parse: stream_receive: timestamp conversion error (buftvtots) (%s) (%d.%06d) ", (_Y_), (&(_X_))->tv.tv_sec, (&(_X_))->tv.tv_usec);\
- return; \
- } \
- else \
- { \
- (&(_X_))->fp = ts; \
- } \
- }
-
- if (PARSE_TIMECODE(parsetime.parse_state))
- {
- cvt_ts(parsetime.parse_time, "parse_time");
- cvt_ts(parsetime.parse_stime, "parse_stime");
- }
-
- if (PARSE_PPS(parsetime.parse_state))
- cvt_ts(parsetime.parse_ptime, "parse_ptime");
-
- parse_process(parse, &parsetime);
-}
-
-/*--------------------------------------------------
- * STREAM poll
- */
-static void
-stream_poll(parse)
- struct parseunit *parse;
-{
- register int fd, i, rtc;
- fd_set fdmask;
- struct timeval timeout, starttime, curtime, selecttime;
- parsetime_t parsetime;
-
- /*
- * now we do the following:
- * - read the first packet from the parse module (OLD !!!)
- * - read the second packet from the parse module (fresh)
- * - compute values for xntp
- */
-
- FD_ZERO(&fdmask);
- fd = parse->fd;
- FD_SET(fd, &fdmask);
- timeout.tv_sec = 0;
- timeout.tv_usec = 500000; /* 0.5 sec */
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (timercmp(&selecttime, &timeout, >))
- {
- /*
- * elapsed real time passed timeout value - consider it timed out
- */
- break;
- }
-
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device", CL_UNIT(parse->unit));
- }
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- return;
- }
-
- while (((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime)))
- {
- /* bad packet */
- if ( i == -1)
- {
- if (errno == EINTR)
- {
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
-
- return;
- }
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- timeout.tv_sec = 1;
- timeout.tv_usec = 500000; /* 1.500 sec */
- FD_ZERO(&fdmask);
- FD_SET(fd, &fdmask);
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (timercmp(&selecttime, &timeout, >))
- {
- /*
- * elapsed real time passed timeout value - consider it timed out
- */
- break;
- }
-
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device", CL_UNIT(parse->unit));
- }
-
- /*
- * we will return here iff we got a good old sample as this would
- * be misinterpreted. bad samples are passed on to be logged into the
- * state statistics
- */
- if ((parsetime.parse_status & CVT_MASK) == CVT_OK)
- {
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
- return;
- }
- }
-
- /*
- * we get here either by a possible read() (rtc == 1 - while assertion)
- * or by a timeout or a system call error. when a read() is possible we
- * get the new data, otherwise we stick with the old
- */
- if ((rtc == 1) && ((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime)))
- {
- /* bad packet */
- if ( i== -1)
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
-
- return;
- }
-
- /*
- * process what we got
- */
- parse_process(parse, &parsetime);
-}
-#endif
-
-/*--------------------------------------------------
- * local init
- */
-static int
-local_init(parse)
- struct parseunit *parse;
-{
- return parse_ioinit(&parse->parseio);
-}
-
-/*--------------------------------------------------
- * local end
- */
-static void
-local_end(parse)
- struct parseunit *parse;
-{
- parse_ioend(&parse->parseio);
-}
-
-
-/*--------------------------------------------------
- * local nop
- */
-static int
-local_nop(parse)
- struct parseunit *parse;
-{
- return 1;
-}
-
-/*--------------------------------------------------
- * local setcs
- */
-static int
-local_setcs(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setcs(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local getfmt
- */
-static int
-local_getfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_getfmt(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local setfmt
- */
-static int
-local_setfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setfmt(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local getstat
- */
-static int
-local_getstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_getstat(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local setstat
- */
-static int
-local_setstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setstat(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local timecode
- */
-static int
-local_timecode(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_timecode(tcl, &parse->parseio);
-}
-
-
-/*--------------------------------------------------
- * local receive
- */
-static void
-local_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
- register int count;
- register char *s;
- /*
- * eat all characters, parsing then and feeding complete samples
- */
- count = rbufp->recv_length;
- s = rbufp->recv_buffer;
-
- while (count--)
- {
- if (parse_ioread(&parse->parseio, *s++, &rbufp->recv_time))
- {
- /*
- * got something good to eat
- */
-#ifdef PPSPPS
- if (!PARSE_PPS(parse->parseio.parse_dtime.parse_state) &&
- (parse->flags & PARSE_PPSCLOCK))
- {
- l_fp ts;
- struct ppsclockev ev;
-
- if (ioctl(parse->fd, CIOGETEV, (caddr_t)&ev) == 0)
- {
- if (ev.serial != parse->ppsserial)
- {
- /*
- * add PPS time stamp if available via ppsclock module
- * and not supplied already.
- */
- if (!buftvtots((const char *)&ev.tv, &ts))
- {
- syslog(LOG_ERR,"parse: local_receive: timestamp conversion error (buftvtots) (ppsclockev.tv)");
- }
- else
- {
- parse->parseio.parse_dtime.parse_ptime.fp = ts;
- parse->parseio.parse_dtime.parse_state |= PARSEB_PPS|PARSEB_S_PPS;
- }
- }
- parse->ppsserial = ev.serial;
- }
- }
-#endif
- parse_process(parse, &parse->parseio.parse_dtime);
- parse_iodone(&parse->parseio);
- }
- }
-}
-
-/*--------------------------------------------------
- * local poll
- */
-static void
-local_poll(parse)
- struct parseunit *parse;
-{
- register int fd, i, rtc;
- fd_set fdmask;
- struct timeval timeout, starttime, curtime, selecttime;
- static struct timeval null_time = { 0, 0};
- timestamp_t ts;
-
- FD_ZERO(&fdmask);
- fd = parse->fd;
- FD_SET(fd, &fdmask);
- timeout.tv_sec = 1;
- timeout.tv_usec = 500000; /* 1.5 sec */
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- do
- {
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (!timercmp(&selecttime, &timeout, >))
- {
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device", CL_UNIT(parse->unit));
- }
-
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- return;
- }
-
- /*
- * at least 1 character is available - gobble everthing up that is available
- */
- do
- {
- char inbuf[256];
-
- register char *s = inbuf;
-
- rtc = i = read(fd, inbuf, sizeof(inbuf));
-
- get_systime(&ts.fp);
-
- while (i-- > 0)
- {
- if (parse_ioread(&parse->parseio, *s++, &ts))
- {
- /*
- * got something good to eat
- */
- parse_process(parse, &parse->parseio.parse_dtime);
- parse_iodone(&parse->parseio);
- /*
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
- if ((i == 0) &&
- (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
- return;
- }
- }
- FD_SET(fd, &fdmask);
- } while ((rtc = select(fd + 1, &fdmask, 0, 0, &null_time)) == 1);
- FD_SET(fd, &fdmask);
- } while (1);
-}
-
-/*--------------------------------------------------
- * init_iobinding - find and initialize lower layers
- */
-static bind_t *
-init_iobinding(parse)
- struct parseunit *parse;
-{
- register bind_t *b = io_bindings;
-
- while (b->bd_description != (char *)0)
- {
- if ((*b->bd_init)(parse))
- {
- return b;
- }
- b++;
- }
- return (bind_t *)0;
-}
-
-/**===========================================================================
- ** support routines
- **/
-
-/*--------------------------------------------------
- * convert a flag field to a string
- */
-static char *
-parsestate(state, buffer)
- u_long state;
- char *buffer;
-{
- static struct bits
- {
- u_long bit;
- char *name;
- } flagstrings[] =
- {
- { PARSEB_ANNOUNCE, "DST SWITCH WARNING" },
- { PARSEB_POWERUP, "NOT SYNCHRONIZED" },
- { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
- { PARSEB_DST, "DST" },
- { PARSEB_UTC, "UTC DISPLAY" },
- { PARSEB_LEAPADD, "LEAP ADD WARNING" },
- { PARSEB_LEAPDEL, "LEAP DELETE WARNING" },
- { PARSEB_LEAPSECOND, "LEAP SECOND" },
- { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
- { PARSEB_TIMECODE, "TIME CODE" },
- { PARSEB_PPS, "PPS" },
- { PARSEB_POSITION, "POSITION" },
- { 0 }
- };
-
- static struct sbits
- {
- u_long bit;
- char *name;
- } sflagstrings[] =
- {
- { PARSEB_S_LEAP, "LEAP INDICATION" },
- { PARSEB_S_PPS, "PPS SIGNAL" },
- { PARSEB_S_ANTENNA, "ANTENNA" },
- { PARSEB_S_POSITION, "POSITION" },
- { 0 }
- };
- int i;
-
- *buffer = '\0';
-
- i = 0;
- while (flagstrings[i].bit)
- {
- if (flagstrings[i].bit & state)
- {
- if (buffer[0])
- strcat(buffer, "; ");
- strcat(buffer, flagstrings[i].name);
- }
- i++;
- }
-
- if (state & (PARSEB_S_LEAP|PARSEB_S_ANTENNA|PARSEB_S_PPS|PARSEB_S_POSITION))
- {
- register char *s, *t;
-
- if (buffer[0])
- strcat(buffer, "; ");
-
- strcat(buffer, "(");
-
- t = s = buffer + strlen(buffer);
-
- i = 0;
- while (sflagstrings[i].bit)
- {
- if (sflagstrings[i].bit & state)
- {
- if (t != s)
- {
- strcpy(t, "; ");
- t += 2;
- }
-
- strcpy(t, sflagstrings[i].name);
- t += strlen(t);
- }
- i++;
- }
- strcpy(t, ")");
- }
- return buffer;
-}
-
-/*--------------------------------------------------
- * convert a status flag field to a string
- */
-static char *
-parsestatus(state, buffer)
- u_long state;
- char *buffer;
-{
- static struct bits
- {
- u_long bit;
- char *name;
- } flagstrings[] =
- {
- { CVT_OK, "CONVERSION SUCCESSFUL" },
- { CVT_NONE, "NO CONVERSION" },
- { CVT_FAIL, "CONVERSION FAILED" },
- { CVT_BADFMT, "ILLEGAL FORMAT" },
- { CVT_BADDATE, "DATE ILLEGAL" },
- { CVT_BADTIME, "TIME ILLEGAL" },
- { 0 }
- };
- int i;
-
- *buffer = '\0';
-
- i = 0;
- while (flagstrings[i].bit)
- {
- if (flagstrings[i].bit & state)
- {
- if (buffer[0])
- strcat(buffer, "; ");
- strcat(buffer, flagstrings[i].name);
- }
- i++;
- }
-
- return buffer;
-}
-
-/*--------------------------------------------------
- * convert a clock status flag field to a string
- */
-static char *
-clockstatus(state)
- u_long state;
-{
- static char buffer[20];
- static struct status
- {
- u_long value;
- char *name;
- } flagstrings[] =
- {
- { CEVNT_NOMINAL, "NOMINAL" },
- { CEVNT_TIMEOUT, "NO RESPONSE" },
- { CEVNT_BADREPLY,"BAD FORMAT" },
- { CEVNT_FAULT, "FAULT" },
- { CEVNT_PROP, "PROPAGATION DELAY" },
- { CEVNT_BADDATE, "ILLEGAL DATE" },
- { CEVNT_BADTIME, "ILLEGAL TIME" },
- { ~0 }
- };
- int i;
-
- i = 0;
- while (flagstrings[i].value != ~0)
- {
- if (flagstrings[i].value == state)
- {
- return flagstrings[i].name;
- }
- i++;
- }
-
- sprintf(buffer, "unknown #%ld", (u_long)state);
-
- return buffer;
-}
-
-/*--------------------------------------------------
- * mkascii - make a printable ascii string
- * assumes (unless defined better) 7-bit ASCII
- */
-#ifndef isprint
-#define isprint(_X_) (((_X_) > 0x1F) && ((_X_) < 0x7F))
-#endif
-
-static char *
-mkascii(buffer, blen, src, srclen)
- register char *buffer;
- register long blen;
- register char *src;
- register long srclen;
-{
- register char *b = buffer;
- register char *endb = (char *)0;
-
- if (blen < 4)
- return (char *)0; /* don't bother with mini buffers */
-
- endb = buffer + blen - 4;
-
- blen--; /* account for '\0' */
-
- while (blen && srclen--)
- {
- if ((*src != '\\') && isprint(*src))
- { /* printables are easy... */
- *buffer++ = *src++;
- blen--;
- }
- else
- {
- if (blen < 4)
- {
- while (blen--)
- {
- *buffer++ = '.';
- }
- *buffer = '\0';
- return b;
- }
- else
- {
- if (*src == '\\')
- {
- strcpy(buffer,"\\\\");
- buffer += 2;
- blen -= 2;
- }
- else
- {
- sprintf(buffer, "\\x%02x", *src++);
- blen -= 4;
- buffer += 4;
- }
- }
- }
- if (srclen && !blen && endb) /* overflow - set last chars to ... */
- strcpy(endb, "...");
- }
-
- *buffer = '\0';
- return b;
-}
-
-
-/*--------------------------------------------------
- * l_mktime - make representation of a relative time
- */
-static char *
-l_mktime(delta)
- u_long delta;
-{
- u_long tmp, m, s;
- static char buffer[40];
-
- buffer[0] = '\0';
-
- if ((tmp = delta / (60*60*24)) != 0)
- {
- sprintf(buffer, "%ldd+", (u_long)tmp);
- delta -= tmp * 60*60*24;
- }
-
- s = delta % 60;
- delta /= 60;
- m = delta % 60;
- delta /= 60;
-
- sprintf(buffer+strlen(buffer), "%02d:%02d:%02d",
- (int)delta, (int)m, (int)s);
-
- return buffer;
-}
-
-
-/*--------------------------------------------------
- * parse_statistics - list summary of clock states
- */
-static void
-parse_statistics(parse)
- register struct parseunit *parse;
-{
- register int i;
-
- syslog(LOG_INFO, "PARSE receiver #%d: running time: %s",
- CL_UNIT(parse->unit),
- l_mktime(current_time - parse->timestarted));
-
- syslog(LOG_INFO, "PARSE receiver #%d: current status: %s",
- CL_UNIT(parse->unit),
- clockstatus(parse->status));
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
- register u_long stime;
- register u_long percent, div = current_time - parse->timestarted;
-
- percent = stime = PARSE_STATETIME(parse, i);
-
- while (((u_long)(~0) / 10000) < percent)
- {
- percent /= 10;
- div /= 10;
- }
-
- if (div)
- percent = (percent * 10000) / div;
- else
- percent = 10000;
-
- if (stime)
- syslog(LOG_INFO, "PARSE receiver #%d: state %18s: %13s (%3d.%02d%%)",
- CL_UNIT(parse->unit),
- clockstatus(i),
- l_mktime(stime),
- percent / 100, percent % 100);
- }
-}
-
-/*--------------------------------------------------
- * cparse_statistics - wrapper for statistics call
- */
-static void
-cparse_statistics(peer)
- register struct peer *peer;
-{
- register struct parseunit *parse = (struct parseunit *)peer;
-
- parse_statistics(parse);
- parse->stattimer.event_time = current_time + PARSESTATISTICS;
- TIMER_ENQUEUE(timerqueue, &parse->stattimer);
-}
-
-/**===========================================================================
- ** xntp interface routines
- **/
-
-/*--------------------------------------------------
- * parse_init - initialize internal parse driver data
- */
-static void
-parse_init()
-{
- memset((caddr_t)parseunits, 0, sizeof parseunits);
-}
-
-
-/*--------------------------------------------------
- * parse_shutdown - shut down a PARSE clock
- */
-static void
-parse_shutdown(unit)
- int unit;
-{
- register struct parseunit *parse;
-
- unit = CL_UNIT(unit);
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit invalid (max %d)",
- unit,MAXUNITS);
- return;
- }
-
- parse = parseunits[unit];
-
- if (parse && !parse->peer) {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit not in use", unit);
- return;
- }
-
- /*
- * print statistics a last time and
- * stop statistics machine
- */
- parse_statistics(parse);
- TIMER_DEQUEUE(&parse->stattimer);
-
-#if PPSPPS
- {
- /*
- * kill possible PPS association
- */
- if (fdpps == parse->fd)
- fdpps = -1;
- }
-#endif
-
- if (parse->parse_type->cl_end)
- {
- parse->parse_type->cl_end(parse);
- }
-
- if (parse->binding)
- PARSE_END(parse);
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- if (!parse->pollonly)
- io_closeclock(&parse->io);
- else
- (void) close(parse->fd);
-
- syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" removed",
- CL_UNIT(parse->unit), parse->parse_type->cl_description);
-
- parse->peer = (struct peer *)0; /* unused now */
-}
-
-/*--------------------------------------------------
- * parse_start - open the PARSE devices and initialize data for processing
- */
-static int
-parse_start(sysunit, peer)
- u_int sysunit;
- struct peer *peer;
-{
- u_int unit;
- int fd232, i;
-#ifdef HAVE_TERMIOS
- struct termios tm; /* NEEDED FOR A LONG TIME ! */
-#endif
-#ifdef HAVE_SYSV_TTYS
- struct termio tm; /* NEEDED FOR A LONG TIME ! */
-#endif
- struct parseunit * parse;
- char parsedev[sizeof(PARSEDEVICE)+20];
- parsectl_t tmp_ctl;
- u_int type;
-
- type = CL_TYPE(sysunit);
- unit = CL_UNIT(sysunit);
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit number invalid (max %d)",
- unit, MAXUNITS-1);
- return 0;
- }
-
- if ((type == ~0) || (clockinfo[type].cl_description == (char *)0))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unsupported clock type %d (max %d)",
- unit, CL_REALTYPE(sysunit), ncltypes-1);
- return 0;
- }
-
- if (parseunits[unit] && parseunits[unit]->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit in use", unit);
- return 0;
- }
-
- /*
- * Unit okay, attempt to open the device.
- */
- (void) sprintf(parsedev, PARSEDEVICE, unit);
-
-#ifndef O_NOCTTY
-#define O_NOCTTY 0
-#endif
-
- fd232 = open(parsedev, O_RDWR|O_NOCTTY, 0777);
- if (fd232 == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: open of %s failed: %m", unit, parsedev);
- return 0;
- }
-
- /*
- * Looks like this might succeed. Find memory for the structure.
- * Look to see if there are any unused ones, if not we malloc()
- * one.
- */
- if (parseunits[unit])
- {
- parse = parseunits[unit]; /* The one we want is okay - and free */
- }
- else
- {
- for (i = 0; i < MAXUNITS; i++)
- {
- if (parseunits[i] && !parseunits[i]->peer)
- break;
- }
- if (i < MAXUNITS)
- {
- /*
- * Reclaim this one
- */
- parse = parseunits[i];
- parseunits[i] = (struct parseunit *)0;
- }
- else
- {
- parse = (struct parseunit *)
- emalloc(sizeof(struct parseunit));
- }
- }
-
- memset((char *)parse, 0, sizeof(struct parseunit));
- parseunits[unit] = parse;
-
- /*
- * Set up the structures
- */
- parse->unit = (u_char)sysunit;
- parse->timestarted = current_time;
- parse->lastchange = current_time;
- /*
- * we want to filter input for the sake of
- * getting an impression on dispersion
- * also we like to average the median range
- */
- parse->flags = PARSE_STAT_FILTER|PARSE_STAT_AVG;
- parse->pollneeddata = 0;
- parse->pollonly = 1; /* go for default polling mode */
- parse->lastformat = ~0; /* assume no format known */
- parse->status = CEVNT_TIMEOUT; /* expect the worst */
- parse->laststatus = ~0; /* be sure to mark initial status change */
- parse->nosynctime = 0; /* assume clock reasonable */
- parse->lastmissed = 0; /* assume got everything */
- parse->ppsserial = 0;
- parse->localdata = (void *)0;
-
- parse->parse_type = &clockinfo[type];
-
- parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
- parse->basedelay.l_uf = parse->parse_type->cl_basedelay;
-
- parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
- parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay;
-
- peer->rootdelay = parse->parse_type->cl_rootdelay;
- peer->sstclktype = parse->parse_type->cl_type;
- peer->precision = sys_precision;
- peer->stratum = STRATUM_REFCLOCK;
- if (peer->stratum <= 1)
- memmove((char *)&peer->refid, parse->parse_type->cl_id, 4);
- else
- peer->refid = htonl(PARSEHSREFID);
-
- parse->fd = fd232;
-
- parse->peer = peer; /* marks it also as busy */
-
- parse->binding = init_iobinding(parse);
-
- if (parse->binding == (bind_t *)0)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: io sub system initialisation failed.");
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
- /*
- * configure terminal line
- */
- if (TTY_GETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcgetattr(%d, &tm): %m", unit, fd232);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- else
- {
-#ifndef _PC_VDISABLE
- memset((char *)tm.c_cc, 0, sizeof(tm.c_cc));
-#else
- int disablec;
- errno = 0; /* pathconf can deliver -1 without changing errno ! */
-
- disablec = fpathconf(parse->fd, _PC_VDISABLE);
- if (disablec == -1 && errno)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: fpathconf(fd, _PC_VDISABLE): %m", CL_UNIT(parse->unit));
- memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); /* best guess */
- }
- else
- if (disablec != -1)
- memset((char *)tm.c_cc, disablec, sizeof(tm.c_cc));
-#endif
-
- tm.c_cflag = clockinfo[type].cl_cflag;
- tm.c_iflag = clockinfo[type].cl_iflag;
- tm.c_oflag = clockinfo[type].cl_oflag;
- tm.c_lflag = clockinfo[type].cl_lflag;
-
- if (TTY_SETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- }
-
- /*
- * as we always(?) get 8 bit chars we want to be
- * sure, that the upper bits are zero for less
- * than 8 bit I/O - so we pass that information on.
- * note that there can be only one bit count format
- * per file descriptor
- */
-
- switch (tm.c_cflag & CSIZE)
- {
- case CS5:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS5;
- break;
-
- case CS6:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS6;
- break;
-
- case CS7:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS7;
- break;
-
- case CS8:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS8;
- break;
- }
-
- if (!PARSE_SETCS(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setcs() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
- strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
- tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
-
- if (!PARSE_SETFMT(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setfmt() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
-#ifdef TCFLSH
- /*
- * get rid of all IO accumulated so far
- */
- {
-#ifndef TCIOFLUSH
-#define TCIOFLUSH 2
-#endif
- int flshcmd = TCIOFLUSH;
-
- (void) ioctl(parse->fd, TCFLSH, (caddr_t)&flshcmd);
- }
-#endif
-
- tmp_ctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS;
-
- if (!PARSE_SETSTAT(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setstat() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
- /*
- * try to do any special initializations
- */
- if (parse->parse_type->cl_init)
- {
- if (parse->parse_type->cl_init(parse))
- {
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
- }
-
- if (!(parse->parse_type->cl_flags & PARSE_F_POLLONLY) &&
- (CL_PPS(parse->unit) || (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY)))
- {
- /*
- * Insert in async io device list.
- */
- parse->io.clock_recv = parse->binding->bd_receive; /* pick correct receive routine */
- parse->io.srcclock = (caddr_t)parse;
- parse->io.datalen = 0;
- parse->io.fd = parse->fd; /* replicated, but what the heck */
- if (!io_addclock(&parse->io))
- {
- if (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY)
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_start: addclock %s fails (ABORT - clock type requires async io)", CL_UNIT(parse->unit), parsedev);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- else
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_start: addclock %s fails (switching to polling mode)", CL_UNIT(parse->unit), parsedev);
- }
- }
- else
- {
- parse->pollonly = 0; /*
- * update at receipt of time_stamp - also
- * supports PPS processing
- */
- }
- }
-
-#ifdef PPSPPS
- if (parse->pollonly && (parse->parse_type->cl_flags & PARSE_F_PPSPPS))
- {
- if (fdpps == -1)
- {
- fdpps = parse->fd;
- if (!PARSE_DISABLE(parse))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_disable() FAILED", CL_UNIT(parse->unit));
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- }
- else
- {
- syslog(LOG_NOTICE, "PARSE receiver #%d: parse_start: loopfilter PPS already active - no PPS via CIOGETEV", CL_UNIT(parse->unit));
- }
- }
-#endif
-
- /*
- * wind up statistics timer
- */
- parse->stattimer.peer = (struct peer *)parse; /* we know better, but what the heck */
- parse->stattimer.event_handler = cparse_statistics;
- parse->stattimer.event_time = current_time + PARSESTATISTICS;
- TIMER_ENQUEUE(timerqueue, &parse->stattimer);
-
- /*
- * get out Copyright information once
- */
- if (!notice)
- {
- syslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-1993, Frank Kardel");
- notice = 1;
- }
-
- /*
- * print out configuration
- */
- syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" (device %s) added",
- CL_UNIT(parse->unit),
- parse->parse_type->cl_description, parsedev);
-
- syslog(LOG_INFO, "PARSE receiver #%d: Stratum %d, %sPPS support, trust time %s, precision %d",
- CL_UNIT(parse->unit),
- parse->peer->stratum, (parse->pollonly || !CL_PPS(parse->unit)) ? "no " : "",
- l_mktime(parse->parse_type->cl_maxunsync), parse->peer->precision);
-
- syslog(LOG_INFO, "PARSE receiver #%d: rootdelay %s s, phaseadjust %s s, %s IO handling",
- CL_UNIT(parse->unit),
- ufptoa(parse->parse_type->cl_rootdelay, 6),
- lfptoa(&parse->basedelay, 8),
- parse->binding->bd_description);
-
- syslog(LOG_INFO, "PARSE receiver #%d: Format recognition: %s", CL_UNIT(parse->unit),
- !(*parse->parse_type->cl_format) ? "<AUTOMATIC>" : parse->parse_type->cl_format);
-
-#ifdef PPSPPS
- syslog(LOG_INFO, "PARSE receiver #%d: %sCD PPS support",
- CL_UNIT(parse->unit),
- (fdpps == parse->fd) ? "" : "NO ");
-#endif
-
- return 1;
-}
-
-/*--------------------------------------------------
- * parse_poll - called by the transmit procedure
- */
-static void
-parse_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct parseunit *parse;
-
- unit = CL_UNIT(unit);
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit invalid",
- unit);
- return;
- }
-
- parse = parseunits[unit];
-
- if (!parse->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit unused",
- unit);
- return;
- }
-
- if (peer != parse->peer)
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: poll: INTERNAL: peer incorrect",
- unit);
- return;
- }
-
- /*
- * Update clock stat counters
- */
- parse->polls++;
-
- /*
- * in PPS mode we just mark that we want the next sample
- * for the clock filter
- */
- if (!parse->pollonly)
- {
- if (parse->pollneeddata)
- {
- /*
- * bad news - didn't get a response last time
- */
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device within poll interval", CL_UNIT(parse->unit));
- }
- parse->pollneeddata = 1;
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
- return;
- }
-
- /*
- * the following code is only executed only when polling is used
- */
-
- PARSE_POLL(parse);
-}
-
-/*--------------------------------------------------
- * parse_leap - called when a leap second occurs
- */
-
-static void
-parse_leap()
-{
- /*
- * PARSE encodes the LEAP correction direction.
- * For timecodes that do not pass on the leap correction direction
- * the default PARSEB_LEAPADD must be used. It may then be modified
- * with a fudge flag (flag2).
- */
-}
-
-
-/*--------------------------------------------------
- * parse_control - set fudge factors, return statistics
- */
-static void
-parse_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct parseunit *parse;
- parsectl_t tmpctl;
- u_long type;
- static char outstatus[400]; /* status output buffer */
-
- type = CL_TYPE(unit);
- unit = CL_UNIT(unit);
-
- if (out)
- {
- out->lencode = 0;
- out->lastcode = 0;
- out->polls = out->noresponse = 0;
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
- out->kv_list = (struct ctl_var *)0;
- }
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- parse = parseunits[unit];
-
- if (!parse || !parse->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (UNIT INACTIVE)",
- unit);
- return;
- }
-
- if (in)
- {
- if (in->haveflags & CLK_HAVETIME1)
- parse->basedelay = in->fudgetime1;
-
- if (in->haveflags & CLK_HAVETIME2)
- {
- parse->ppsdelay = in->fudgetime2;
- }
-
- if (in->haveflags & CLK_HAVEVAL1)
- {
- parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
- if (parse->peer->stratum <= 1)
- memmove((char *)&parse->peer->refid,
- parse->parse_type->cl_id,
- 4);
- else
- parse->peer->refid = htonl(PARSEHSREFID);
- }
-
- if (in->haveflags & CLK_HAVEVAL2)
- {
- parse->peer->refid = in->fudgeval2;
- }
-
- if (in->haveflags & (CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4))
- {
- parse->flags = (in->flags & (CLK_FLAG1|CLK_FLAG2|CLK_FLAG3|CLK_FLAG4)) |
- (parse->flags & ~PARSE_STAT_FLAGS);
- }
-
- if (in->haveflags & (CLK_HAVEVAL2|CLK_HAVETIME2|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4))
- {
- parsectl_t tmpctl;
- tmpctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS;
-
- if (!PARSE_SETSTAT(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_setstat() FAILED", unit);
- }
- }
- }
-
- if (out)
- {
- register u_long sum = 0;
- register char *t, *tt;
- register struct tm *tm;
- register short utcoff;
- register char sign;
- register int i;
- time_t tim;
-
- outstatus[0] = '\0';
-
- out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
- out->clockdesc = parse->parse_type->cl_description;
-
- out->fudgetime1 = parse->basedelay;
-
- out->fudgetime2 = parse->ppsdelay;
-
- out->fudgeval1 = parse->peer->stratum;
-
- out->fudgeval2 = parse->peer->refid;
-
- out->flags = parse->flags & PARSE_STAT_FLAGS;
-
- out->type = REFCLK_PARSE;
-
- /*
- * figure out skew between PPS and RS232 - just for informational
- * purposes - returned in time2 value
- */
- if (PARSE_SYNC(parse->time.parse_state))
- {
- if (PARSE_PPS(parse->time.parse_state) && PARSE_TIMECODE(parse->time.parse_state))
- {
- l_fp off;
-
- /*
- * we have a PPS and RS232 signal - calculate the skew
- * WARNING: assumes on TIMECODE == PULSE (timecode after pulse)
- */
- off = parse->time.parse_stime.fp;
- L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
- tt = add_var(&out->kv_list, 40, RO);
- sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6));
- }
- }
-
- if (PARSE_PPS(parse->time.parse_state))
- {
- tt = add_var(&out->kv_list, 80, RO|DEF);
- sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp));
- }
-
- /*
- * all this for just finding out the +-xxxx part (there are always
- * new and changing fields in the standards 8-().
- *
- * but we do it for the human user...
- */
- tim = parse->time.parse_time.fp.l_ui - JAN_1970;
- tm = gmtime(&tim);
- utcoff = tm->tm_hour * 60 + tm->tm_min;
- tm = localtime(&tim);
- utcoff = tm->tm_hour * 60 + tm->tm_min - utcoff + 12 * 60;
- utcoff += 24 * 60;
- utcoff %= 24 * 60;
- utcoff -= 12 * 60;
- if (utcoff < 0)
- {
- utcoff = -utcoff;
- sign = '-';
- }
- else
- {
- sign = '+';
- }
-
- tt = add_var(&out->kv_list, 128, RO|DEF);
- sprintf(tt, "refclock_time=\"");
- tt += strlen(tt);
-
- if (parse->time.parse_time.fp.l_ui == 0)
- {
- strcpy(tt, "<UNDEFINED>\"");
- }
- else
- {
- strcpy(tt, prettydate(&parse->time.parse_time.fp));
- t = tt + strlen(tt);
-
- sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60);
- }
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_timecode() FAILED", unit);
- }
- else
- {
- tt = add_var(&out->kv_list, 128, RO|DEF);
- sprintf(tt, "refclock_status=\"");
- tt += strlen(tt);
-
- /*
- * copy PPS flags from last read transaction (informational only)
- */
- tmpctl.parsegettc.parse_state |= parse->time.parse_state &
- (PARSEB_PPS|PARSEB_S_PPS);
-
- (void) parsestate(tmpctl.parsegettc.parse_state, tt);
-
- strcat(tt, "\"");
-
- if (tmpctl.parsegettc.parse_count)
- mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1,
- tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
-
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
-
- tmpctl.parseformat.parse_format = tmpctl.parsegettc.parse_format;
-
- if (!PARSE_GETFMT(parse, &tmpctl))
- {
- syslog (LOG_ERR, "PARSE receiver #%d: parse_control: parse_getfmt() FAILED", unit);
- }
- else
- {
- tt = add_var(&out->kv_list, 80, RO|DEF);
- sprintf(tt, "refclock_format=\"");
-
- strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
- strcat(tt,"\"");
- }
-
- /*
- * gather state statistics
- */
-
- tt = add_var(&out->kv_list, 200, RO|DEF);
- strcpy(tt, "refclock_states=\"");
- tt += strlen(tt);
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
- register u_long stime;
- register u_long div = current_time - parse->timestarted;
- register u_long percent;
-
- percent = stime = PARSE_STATETIME(parse, i);
-
- while (((u_long)(~0) / 10000) < percent)
- {
- percent /= 10;
- div /= 10;
- }
-
- if (div)
- percent = (percent * 10000) / div;
- else
- percent = 10000;
-
- if (stime)
- {
- sprintf(tt, "%s%s%s: %s (%d.%02d%%)",
- sum ? "; " : "",
- (parse->status == i) ? "*" : "",
- clockstatus(i),
- l_mktime(stime),
- (int)(percent / 100), (int)(percent % 100));
- sum += stime;
- tt += strlen(tt);
- }
- }
-
- sprintf(tt, "; running time: %s\"", l_mktime(sum));
-
- tt = add_var(&out->kv_list, 32, RO);
- sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id);
-
- tt = add_var(&out->kv_list, 80, RO);
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
- sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.59 1994/05/23 16:29:27 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
- out->timereset = parse->timestarted;
- out->polls = parse->polls;
- out->noresponse = parse->noresponse;
- out->badformat = parse->badformat;
- out->baddata = parse->baddata;
- out->lastevent = parse->lastevent;
- out->currentstatus = parse->status;
- }
-}
-
-/**===========================================================================
- ** processing routines
- **/
-
-/*--------------------------------------------------
- * event handling - note that nominal events will also be posted
- */
-static void
-parse_event(parse, event)
- struct parseunit *parse;
- int event;
-{
- if (parse->status != (u_char) event)
- {
- parse->statetime[parse->status] += current_time - parse->lastchange;
- parse->lastchange = current_time;
-
- parse->status = (u_char)event;
- if (event != CEVNT_NOMINAL)
- parse->lastevent = parse->status;
-
- report_event(EVNT_PEERCLOCK, parse->peer);
- }
-}
-
-/*--------------------------------------------------
- * process a PARSE time sample
- */
-static void
-parse_process(parse, parsetime)
- struct parseunit *parse;
- parsetime_t *parsetime;
-{
- unsigned char leap;
- struct timeval usecdisp;
- l_fp off, rectime, reftime, dispersion;
-
- /*
- * check for changes in conversion status
- * (only one for each new status !)
- */
- if (parse->laststatus != parsetime->parse_status)
- {
- char buffer[200];
-
- syslog(LOG_WARNING, "PARSE receiver #%d: conversion status \"%s\"",
- CL_UNIT(parse->unit), parsestatus(parsetime->parse_status, buffer));
-
- if ((parsetime->parse_status & CVT_MASK) == CVT_FAIL)
- {
- /*
- * tell more about the story - list time code
- * there is a slight change for a race condition and
- * the time code might be overwritten by the next packet
- */
- parsectl_t tmpctl;
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_process: parse_timecode() FAILED", CL_UNIT(parse->unit));
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: FAILED TIMECODE: \"%s\"",
- CL_UNIT(parse->unit), mkascii(buffer, sizeof buffer, tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1));
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
- }
-
- parse->laststatus = parsetime->parse_status;
- }
-
- /*
- * examine status and post appropriate events
- */
- if ((parsetime->parse_status & CVT_MASK) != CVT_OK)
- {
- /*
- * got bad data - tell the rest of the system
- */
- switch (parsetime->parse_status & CVT_MASK)
- {
- case CVT_NONE:
- break; /* well, still waiting - timeout is handled at higher levels */
-
- case CVT_FAIL:
- parse->badformat++;
- if (parsetime->parse_status & CVT_BADFMT)
- {
- parse_event(parse, CEVNT_BADREPLY);
- }
- else
- if (parsetime->parse_status & CVT_BADDATE)
- {
- parse_event(parse, CEVNT_BADDATE);
- }
- else
- if (parsetime->parse_status & CVT_BADTIME)
- {
- parse_event(parse, CEVNT_BADTIME);
- }
- else
- {
- parse_event(parse, CEVNT_BADREPLY); /* for the lack of something better */
- }
- }
- return; /* skip the rest - useless */
- }
-
- /*
- * check for format changes
- * (in case somebody has swapped clocks 8-)
- */
- if (parse->lastformat != parsetime->parse_format)
- {
- parsectl_t tmpctl;
-
- tmpctl.parseformat.parse_format = parsetime->parse_format;
-
- if (!PARSE_GETFMT(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_getfmt() FAILED", CL_UNIT(parse->unit));
- }
- else
- {
- syslog(LOG_INFO, "PARSE receiver #%d: new packet format \"%s\"",
- CL_UNIT(parse->unit), tmpctl.parseformat.parse_buffer);
- }
- parse->lastformat = parsetime->parse_format;
- }
-
- /*
- * now, any changes ?
- */
- if (parse->time.parse_state != parsetime->parse_state)
- {
- char tmp1[200];
- char tmp2[200];
- /*
- * something happend
- */
-
- (void) parsestate(parsetime->parse_state, tmp1);
- (void) parsestate(parse->time.parse_state, tmp2);
-
- syslog(LOG_INFO,"PARSE receiver #%d: STATE CHANGE: %s -> %s",
- CL_UNIT(parse->unit), tmp2, tmp1);
- }
-
- /*
- * remember for future
- */
- parse->time = *parsetime;
-
- /*
- * check to see, whether the clock did a complete powerup or lost PZF signal
- * and post correct events for current condition
- */
- if (PARSE_POWERUP(parsetime->parse_state))
- {
- /*
- * this is bad, as we have completely lost synchronisation
- * well this is a problem with the receiver here
- * for PARSE U/A 31 the lost synchronisation ist true
- * as it is the powerup state and the time is taken
- * from a crude real time clock chip
- * for the PZF series this is only partly true, as
- * PARSE_POWERUP only means that the pseudo random
- * phase shift sequence cannot be found. this is only
- * bad, if we have never seen the clock in the SYNC
- * state, where the PHASE and EPOCH are correct.
- * for reporting events the above business does not
- * really matter, but we can use the time code
- * even in the POWERUP state after having seen
- * the clock in the synchronized state (PZF class
- * receivers) unless we have had a telegram disruption
- * after having seen the clock in the SYNC state. we
- * thus require having seen the clock in SYNC state
- * *after* having missed telegrams (noresponse) from
- * the clock. one problem remains: we might use erroneously
- * POWERUP data if the disruption is shorter than 1 polling
- * interval. fortunately powerdowns last usually longer than 64
- * seconds and the receiver is at least 2 minutes in the
- * POWERUP or NOSYNC state before switching to SYNC
- */
- parse_event(parse, CEVNT_FAULT);
- if (parse->nosynctime)
- {
- /*
- * repeated POWERUP/NOSYNC state - look whether
- * the message should be repeated
- */
- if (current_time - parse->nosynctime > PARSENOSYNCREPEAT)
- {
- syslog(LOG_ERR,"PARSE receiver #%d: *STILL* NOT SYNCHRONIZED (POWERUP or no PZF signal)",
- CL_UNIT(parse->unit));
- parse->nosynctime = current_time;
- }
- }
- else
- {
- syslog(LOG_ERR,"PARSE receiver #%d: NOT SYNCHRONIZED",
- CL_UNIT(parse->unit));
- parse->nosynctime = current_time;
- }
- }
- else
- {
- /*
- * we have two states left
- *
- * SYNC:
- * this state means that the EPOCH (timecode) and PHASE
- * information has be read correctly (at least two
- * successive PARSE timecodes were received correctly)
- * this is the best possible state - full trust
- *
- * NOSYNC:
- * The clock should be on phase with respect to the second
- * signal, but the timecode has not been received correctly within
- * at least the last two minutes. this is a sort of half baked state
- * for PARSE U/A 31 this is bad news (clock running without timecode
- * confirmation)
- * PZF 535 has also no time confirmation, but the phase should be
- * very precise as the PZF signal can be decoded
- */
- parse->nosynctime = 0; /* current state is better than worst state */
-
- if (PARSE_SYNC(parsetime->parse_state))
- {
- /*
- * currently completely synchronized - best possible state
- */
- parse->lastsync = current_time;
- /*
- * log OK status
- */
- parse_event(parse, CEVNT_NOMINAL);
- }
- else
- {
- /*
- * we have had some problems receiving the time code
- */
- parse_event(parse, CEVNT_PROP);
- }
- }
-
- if (PARSE_TIMECODE(parsetime->parse_state))
- {
- l_fp offset;
-
- /*
- * calculate time offset including systematic delays
- * off = PARSE-timestamp + propagation delay - kernel time stamp
- */
- offset = parse->basedelay;
-
- off = parsetime->parse_time.fp;
-
- reftime = off;
-
- L_ADD(&off, &offset);
- rectime = off; /* this makes org time and xmt time somewhat artificial */
-
- L_SUB(&off, &parsetime->parse_stime.fp);
-
- if ((parse->flags & PARSE_STAT_FILTER) &&
- (off.l_i > -60) &&
- (off.l_i < 60)) /* take usec error only if within +- 60 secs */
- {
- struct timeval usecerror;
- /*
- * offset is already calculated
- */
- usecerror.tv_sec = parsetime->parse_usecerror / 1000000;
- usecerror.tv_usec = parsetime->parse_usecerror % 1000000;
-
- sTVTOTS(&usecerror, &off);
- L_ADD(&off, &offset);
- }
- }
-
- if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
- {
- l_fp offset;
-
- /*
- * we have a PPS signal - much better than the RS232 stuff (we hope)
- */
- offset = parsetime->parse_ptime.fp;
-
- L_ADD(&offset, &parse->ppsdelay);
-
- if (PARSE_TIMECODE(parsetime->parse_state))
- {
- if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) &&
- M_ISGEQ(0, 0x7fffffff, off.l_i, off.l_f))
- {
- /*
- * RS232 offsets within [-0.5..0.5[ - take PPS offsets
- */
-
- if (parse->parse_type->cl_flags & PARSE_F_PPSONSECOND)
- {
- reftime = off = offset;
- rectime = offset;
- /*
- * implied on second offset
- */
- off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */
- off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */
- }
- else
- {
- /*
- * time code describes pulse
- */
- off = parsetime->parse_time.fp;
-
- rectime = reftime = off; /* take reference time - fake rectime */
-
- L_SUB(&off, &offset); /* true offset */
- }
- }
- /*
- * take RS232 offset when PPS when out of bounds
- */
- }
- else
- {
- /*
- * Well, no time code to guide us - assume on second pulse
- * and pray, that we are within [-0.5..0.5[
- */
- reftime = off = offset;
- rectime = offset;
- /*
- * implied on second offset
- */
- off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */
- off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */
- }
- }
- else
- {
- if (!PARSE_TIMECODE(parsetime->parse_state))
- {
- /*
- * Well, no PPS, no TIMECODE, no more work ...
- */
- return;
- }
- }
-
-
-#if defined(PPS) || defined(PPSCLK) || defined(PPSPPS) || defined(PARSEPPS)
- if (CL_PPS(parse->unit) && !parse->pollonly && PARSE_SYNC(parsetime->parse_state))
- {
- /*
- * only provide PPS information when clock
- * is in sync
- * thus PHASE and EPOCH are correct and PPS is not
- * done via the CIOGETEV loopfilter mechanism
- */
-#ifdef PPSPPS
- if (fdpps != parse->fd)
-#endif
- (void) pps_sample(&off);
- }
-#endif /* PPS || PPSCLK || PPSPPS || PARSEPPS */
-
- /*
- * ready, unless the machine wants a sample
- */
- if (!parse->pollonly && !parse->pollneeddata)
- return;
-
- parse->pollneeddata = 0;
-
- if (PARSE_PPS(parsetime->parse_state))
- {
- L_CLR(&dispersion);
- }
- else
- {
- /*
- * convert usec dispersion into NTP TS world
- */
-
- usecdisp.tv_sec = parsetime->parse_usecdisp / 1000000;
- usecdisp.tv_usec = parsetime->parse_usecdisp % 1000000;
-
- TVTOTS(&usecdisp, &dispersion);
- }
-
- /*
- * and now stick it into the clock machine
- * samples are only valid iff lastsync is not too old and
- * we have seen the clock in sync at least once
- * after the last time we didn't see an expected data telegram
- * see the clock states section above for more reasoning
- */
- if (((current_time - parse->lastsync) > parse->parse_type->cl_maxunsync) ||
- (parse->lastsync <= parse->lastmissed))
- {
- leap = LEAP_NOTINSYNC;
- }
- else
- {
- if (PARSE_LEAPADD(parsetime->parse_state))
- {
- /*
- * we pick this state also for time code that pass leap warnings
- * without direction information (as earth is currently slowing
- * down).
- */
- leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
- }
- else
- if (PARSE_LEAPDEL(parsetime->parse_state))
- {
- leap = LEAP_DELSECOND;
- }
- else
- {
- leap = LEAP_NOWARNING;
- }
- }
-
- refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
-}
-
-/**===========================================================================
- ** clock polling support
- **/
-
-struct poll_timer
-{
- struct event timer; /* we'd like to poll a a higher rate than 1/64s */
-};
-
-typedef struct poll_timer poll_timer_t;
-
-/*--------------------------------------------------
- * direct poll routine
- */
-static void
-poll_dpoll(parse)
- struct parseunit *parse;
-{
- register int rtc;
- register char *ps = ((poll_info_t *)parse->parse_type->cl_data)->string;
- register int ct = ((poll_info_t *)parse->parse_type->cl_data)->count;
-
- rtc = write(parse->fd, ps, ct);
- if (rtc < 0)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd to clock: %m", CL_UNIT(parse->unit));
- }
- else
- if (rtc != ct)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd incomplete (%d of %d bytes sent)", CL_UNIT(parse->unit), rtc, ct);
- }
-}
-
-/*--------------------------------------------------
- * periodic poll routine
- */
-static void
-poll_poll(parse)
- struct parseunit *parse;
-{
- register poll_timer_t *pt = (poll_timer_t *)parse->localdata;
-
- poll_dpoll(parse);
-
- if (pt != (poll_timer_t *)0)
- {
- pt->timer.event_time = current_time + ((poll_info_t *)parse->parse_type->cl_data)->rate;
- TIMER_ENQUEUE(timerqueue, &pt->timer);
- }
-}
-
-/*--------------------------------------------------
- * init routine - setup timer
- */
-static int
-poll_init(parse)
- struct parseunit *parse;
-{
- register poll_timer_t *pt;
-
- if (((poll_info_t *)parse->parse_type->cl_data)->rate)
- {
- parse->localdata = (void *)malloc(sizeof(poll_timer_t));
- memset((char *)parse->localdata, 0, sizeof(poll_timer_t));
-
- pt = (poll_timer_t *)parse->localdata;
-
- pt->timer.peer = (struct peer *)parse; /* well, only we know what it is */
- pt->timer.event_handler = poll_poll;
- poll_poll(parse);
- }
- else
- {
- parse->localdata = (void *)0;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------
- * end routine - clean up timer
- */
-static void
-poll_end(parse)
- struct parseunit *parse;
-{
- if (parse->localdata != (void *)0)
- {
- TIMER_DEQUEUE(&((poll_timer_t *)parse->localdata)->timer);
- free((char *)parse->localdata);
- parse->localdata = (void *)0;
- }
-}
-
-/**===========================================================================
- ** special code for special clocks
- **/
-
-/*--------------------------------------------------
- * trimble init routine - setup EOL and then do poll_init.
- */
-static int
-trimble_init(parse)
- struct parseunit *parse;
-{
-#ifdef HAVE_TERMIOS
- struct termios tm;
-#endif
-#ifdef HAVE_SYSV_TTYS
- struct termio tm;
-#endif
- /*
- * configure terminal line for trimble receiver
- */
- if (TTY_GETATTR(parse->fd, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcgetattr(fd, &tm): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- tm.c_cc[VEOL] = TRIMBLESV6_EOL;
-
- if (TTY_SETATTR(parse->fd, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcsetattr(fd, &tm): %m", CL_UNIT(parse->unit));
- return 0;
- }
- }
- return poll_init(parse);
-}
-#endif /* defined(REFCLOCK) && defined(PARSE) */
-
-/*
- * History:
- *
- * refclock_parse.c,v
- * Revision 3.59 1994/05/23 16:29:27 kardel
- * IGEL clock - Trimble update
- *
- * Revision 3.58 1994/05/12 21:03:39 kardel
- * adhere to new standard that fudgeval2 is refid
- *
- * Revision 3.57 1994/05/12 12:50:47 kardel
- * printf fmt/arg cleanup
- *
- * Revision 3.56 1994/05/10 21:15:51 kardel
- * var reference level bug, kernel disable fix
- *
- * Revision 3.55 1994/05/02 00:37:01 kardel
- * 3.3t reconcilation + bug fixes (PPS simulation - old kpll)
- *
- * Revision 3.54 1994/04/11 19:34:42 kardel
- * longer input characters for DCF77 raw input (8Bit+parity ignored)
- *
- * Revision 3.53 1994/03/25 13:07:39 kardel
- * fixed offset calculation for large (>4 Min) offsets
- *
- * Revision 3.52 1994/03/03 09:58:00 kardel
- * stick -kv in cvs is no fun
- *
- * Revision 3.49 1994/02/20 13:26:00 kardel
- * rcs id cleanup
- *
- * Revision 3.48 1994/02/20 13:04:56 kardel
- * parse add/delete second support
- *
- * Revision 3.47 1994/02/02 17:44:30 kardel
- * rcs ids fixed
- *
- * Revision 3.45 1994/01/25 19:06:27 kardel
- * 94/01/23 reconcilation
- *
- * Revision 3.44 1994/01/25 17:32:23 kardel
- * settable extended variables
- *
- * Revision 3.43 1994/01/23 16:28:39 kardel
- * HAVE_TERMIOS introduced
- *
- * Revision 3.42 1994/01/22 11:35:04 kardel
- * added HAVE_TERMIOS
- *
- * Revision 3.41 1993/11/27 18:44:37 kardel
- * can't trust GPS166 on unsync
- *
- * Revision 3.40 1993/11/21 18:03:36 kardel
- * useless declaration deleted
- *
- * Revision 3.39 1993/11/21 15:30:15 kardel
- * static funcitions may be declared only at outer level
- *
- * Revision 3.38 1993/11/15 21:26:49 kardel
- * conditional define comments fixed
- *
- * Revision 3.37 1993/11/11 11:20:49 kardel
- * declaration fixes
- *
- * Revision 3.36 1993/11/10 12:17:14 kardel
- * #ifdef glitch
- *
- * Revision 3.35 1993/11/01 21:15:06 kardel
- * comments updated
- *
- * Revision 3.34 1993/11/01 20:01:08 kardel
- * parse Solaris support (initial version)
- *
- * Revision 3.33 1993/10/30 09:44:58 kardel
- * conditional compilation flag cleanup
- *
- * Revision 3.32 1993/10/22 14:28:43 kardel
- * Oct. 22nd 1993 reconcilation
- *
- * Revision 3.31 1993/10/10 21:19:10 kardel
- * compilation cleanup - (minimal porting tests)
- *
- * Revision 3.30 1993/10/09 21:44:35 kardel
- * syslog strings fixed
- *
- * Revision 3.29 1993/10/09 14:40:15 kardel
- * default precision setting fixed
- *
- * Revision 3.28 1993/10/08 14:48:22 kardel
- * Changed offset determination logic:
- * Take the PPS offset if it is available and the time
- * code offset is within [-0.5..0.5[, otherwise stick
- * to the time code offset
- *
- * Revision 3.27 1993/10/08 00:53:17 kardel
- * announce also simulated PPS via CIOGETEV in ntpq cl
- *
- * Revision 3.26 1993/10/07 23:29:35 kardel
- * trimble fixes
- *
- * Revision 3.25 1993/10/06 21:13:35 kardel
- * test reversed (CIOGETEV support)
- *
- * Revision 3.24 1993/10/03 20:18:26 kardel
- * Well, values > 999999 in the usec field from uniqtime() timestamps
- * can prove harmful.
- *
- * Revision 3.23 1993/10/03 19:49:54 kardel
- * buftvtots where failing on uninitialized time stamps
- *
- * Revision 3.22 1993/10/03 19:11:09 kardel
- * restructured I/O handling
- *
- * Revision 3.21 1993/09/29 11:30:18 kardel
- * special init for trimble to set EOL
- *
- * Revision 3.20 1993/09/27 22:46:28 kardel
- * preserve module stack if I_PUSH parse fails
- *
- * Revision 3.19 1993/09/27 21:10:11 kardel
- * wrong structure member
- *
- * Revision 3.18 1993/09/27 13:05:06 kardel
- * Trimble is true polling only
- *
- * Revision 3.17 1993/09/27 12:47:10 kardel
- * poll string support generalized
- *
- * Revision 3.16 1993/09/26 23:40:56 kardel
- * new parse driver logic
- *
- * Revision 3.15 1993/09/24 15:00:51 kardel
- * Sep 23rd distribution...
- *
- * Revision 3.14 1993/09/22 18:21:15 kardel
- * support ppsclock streams module (-DSTREAM -DPPSPPS -DPARSEPPS -UPARSESTREAM)
- *
- * Revision 3.13 1993/09/05 15:38:33 kardel
- * not every cpp understands #error...
- *
- * Revision 3.12 1993/09/02 20:04:19 kardel
- * TTY cleanup
- *
- * Revision 3.11 1993/09/01 21:48:47 kardel
- * conditional cleanup
- *
- * Revision 3.10 1993/09/01 11:32:45 kardel
- * assuming HAVE_POSIX_TTYS when STREAM defined
- *
- * Revision 3.9 1993/08/31 22:31:46 kardel
- * SINIX-M SysVR4 integration
- *
- * Revision 3.8 1993/08/27 00:29:50 kardel
- * compilation cleanup
- *
- * Revision 3.7 1993/08/24 22:27:30 kardel
- * cleaned up AUTOCONF DCF77 mess 8-) - wasn't too bad
- *
- * Revision 3.6 1993/08/24 21:36:23 kardel
- * casting and ifdefs
- *
- * Revision 3.5 1993/07/09 23:36:59 kardel
- * HAVE_POSIX_TTYS used to produce errors 8-( - BSD driver support still lacking
- *
- * Revision 3.4 1993/07/09 12:42:29 kardel
- * RAW DCF now officially released
- *
- * Revision 3.3 1993/07/09 11:50:37 kardel
- * running GPS also on 960 to be able to switch GPS/DCF77
- *
- * Revision 3.2 1993/07/09 11:37:34 kardel
- * Initial restructured version + GPS support
- *
- * Revision 3.1 1993/07/06 10:01:07 kardel
- * DCF77 driver goes generic...
- *
- */
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c
deleted file mode 100644
index 680f104..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_datum.c
+++ /dev/null
@@ -1,645 +0,0 @@
-/*
- * refclock_datum - clock driver for the Datum watchayamacallit
- */
-#if defined(REFCLOCK) && (defined(DATUM) || defined(DATUMCLK) || defined(DATUMPPS))
-/* */
-/*...... Include Files .................................................*/
-/* */
-
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-#include <sys/errno.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(WWVBCLK)
-#include <sys/clkdefs.h>
-#endif /* WWVBCLK */
-#endif /* STREAM */
-
-#if defined (WWVBPPS)
-#include <sys/ppsclock.h>
-#endif /* WWVBPPS */
-
-#include "ntp_stdlib.h"
-
-/*
-#include "temp.c"
-void set_logfile();
-*/
-
-
-#define DEBUG_DATUM_PTC
-
-
-/* */
-/*...... #defines ......................................................*/
-/* */
-
-/*
-#define refclock_datum_pts refclock_wwvb
-*/
-
-#define MAXUNITS 4
-#define PTSPRECISION (-13) /* precision assumed (about 100 us) */
-#define GMT 7
-#define DATUM_MAX_ERROR 0.100
-#define DATUM_MAX_ERROR2 DATUM_MAX_ERROR*DATUM_MAX_ERROR
-
-/* */
-/*...... externals .....................................................*/
-/* */
-
-extern U_LONG current_time; /* current time (s) */
-extern int debug; /* global debug flag */
-
-
-/* */
-/*...... My structure ..................................................*/
-/* */
-
-struct datum_pts_unit {
- struct peer *peer; /* peer used by xntp */
- struct refclockio io; /* io structure used by xntp */
- int PTS_fd; /* file descriptor for PTS */
- int PTS_START; /* ? */
- u_int unit; /* id for unit */
- U_LONG timestarted; /* time started */
- int inuse; /* in use flag */
- l_fp lastrec;
- l_fp lastref;
- int yearstart;
- int coderecv;
- int day; /* day */
- int hour; /* hour */
- int minute; /* minutes */
- int second; /* seconds */
- int msec; /* miliseconds */
- int usec; /* miliseconds */
- u_char leap;
- char retbuf[8]; /* returned time from the datum pts */
- char nbytes; /* number of bytes received from datum pts */
- double sigma2; /* average squared error (roughly) */
-};
-
-
-/* */
-/*...... pts static constant variables for internal use ................*/
-/* */
-
-static char STOP_GENERATOR[6];
-static char START_GENERATOR[6];
-static char TIME_REQUEST[6];
-
-static int nunits;
-static struct datum_pts_unit **datum_pts_unit;
-static u_char stratumtouse[MAXUNITS];
-static l_fp fudgefactor[MAXUNITS];
-
-static FILE *logfile;
-
-/* */
-/*...... callback functions that xntp knows about ......................*/
-/* */
-
-static int datum_pts_start P((u_int, struct peer *));
-static void datum_pts_shutdown P((int));
-static void datum_pts_poll P((int, struct peer *));
-static void datum_pts_control P((u_int, struct refclockstat *,
- struct refclockstat *));
-static void datum_pts_init P((void));
-static void datum_pts_buginfo P((int, struct refclockbug *));
-
-struct refclock refclock_datum = {
- datum_pts_start,
- datum_pts_shutdown,
- datum_pts_poll,
- datum_pts_control,
- datum_pts_init,
- datum_pts_buginfo,
- NOFLAGS
-};
-
-/*
-struct refclock refclock_wvvb = {
- datum_pts_start,
- datum_pts_shutdown,
- datum_pts_poll,
- datum_pts_control,
- datum_pts_init,
- datum_pts_buginfo,
- NOFLAGS
-};
-*/
-
-/* */
-/*...... receive callback functions for xntp ..........................*/
-/* */
-
-static void datum_pts_receive P((struct recvbuf *));
-
-
-/*......................................................................*/
-/* datum_pts_start */
-/*......................................................................*/
-
-static int datum_pts_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- struct datum_pts_unit **temp_datum_pts_unit;
- struct datum_pts_unit *datum_pts;
- struct termios arg;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile, "Starting Datum PTS unit %d\n", unit);
- fflush(logfile);
-#endif
-
-/* */
-/*...... create the memory for the new unit ............................*/
-/* */
-
- temp_datum_pts_unit = (struct datum_pts_unit **)
- malloc((nunits+1)*sizeof(struct datum_pts_unit *));
- if (nunits > 0) memcpy(temp_datum_pts_unit, datum_pts_unit,
- nunits*sizeof(struct datum_pts_unit *));
- free(datum_pts_unit);
- datum_pts_unit = temp_datum_pts_unit;
- datum_pts_unit[nunits] = (struct datum_pts_unit *)
- malloc(sizeof(struct datum_pts_unit));
- datum_pts = datum_pts_unit[nunits];
-
- datum_pts->unit = unit;
- datum_pts->yearstart = 0;
- datum_pts->sigma2 = 0.0;
-
-/* */
-/*...... open the datum pts device .....................................*/
-/* */
-
- datum_pts->PTS_fd = open("/dev/ttya",O_RDWR);
-
- fcntl(datum_pts->PTS_fd, F_SETFL, 0);
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Opening RS232 port ttya with file descriptor %d\n",
- datum_pts->PTS_fd);
- fflush(logfile);
-#endif
-
-/* */
-/*...... set up the RS232 terminal device information ..................*/
-/* */
-
- arg.c_iflag = IGNBRK;
- arg.c_oflag = 0;
- arg.c_cflag = B9600 | CS8 | CREAD | PARENB | CLOCAL;
- arg.c_lflag = 0;
- arg.c_line = 0;
- arg.c_cc[VMIN] = 0; /* start timeout timer right away */
- arg.c_cc[VTIME] = 30; /* this is a 3 second timout on reads */
-
- tcsetattr(datum_pts->PTS_fd, TCSANOW, &arg);
-
-/* */
-/*...... initialize the io structure ...................................*/
-/* */
-
- datum_pts->peer = peer;
- datum_pts->timestarted = current_time;
-
- datum_pts->io.clock_recv = datum_pts_receive;
- datum_pts->io.srcclock = (caddr_t)datum_pts;
- datum_pts->io.datalen = 0;
- datum_pts->io.fd = datum_pts->PTS_fd;
-
- if (!io_addclock(&(datum_pts->io))) {
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Problem adding clock\n");
- fflush(logfile);
-#endif
- syslog(LOG_ERR, "Datum_PTS: Problem adding clock");
- }
-
- peer->precision = PTSPRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
-
-/* */
-/*...... now add one to the number of units ............................*/
-/* */
-
- nunits++;
-
-/* */
-/*...... return successful code ........................................*/
-/* */
-
- return 1;
-
-}
-
-
-/*......................................................................*/
-/* datum_pts_shutdown */
-/*......................................................................*/
-
-static void datum_pts_shutdown(unit)
- int unit;
-{
- int i,j;
- struct datum_pts_unit **temp_datum_pts_unit;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Shutdown Datum PTS\n");
- fflush(logfile);
-#endif
- syslog(LOG_ERR, "Datum_PTS: Shutdown Datum PTS");
-
-/* */
-/*...... loop until the right unit is found ............................*/
-/* */
-
- for (i=0; i<nunits; i++) {
- if (datum_pts_unit[i]->unit == unit) {
-
-/* */
-/*...... found it so close the file descriptor and free up memory .....*/
-/* */
-
- io_closeclock(&datum_pts_unit[i]->io);
- close(datum_pts_unit[i]->PTS_fd);
- free(datum_pts_unit[i]);
-
-/* */
-/*...... clean up the datum_pts_unit array (no holes) ..................*/
-/* */
-
- if (nunits > 1) {
-
- temp_datum_pts_unit = (struct datum_pts_unit **)
- malloc((nunits-1)*sizeof(struct datum_pts_unit *));
- if (i!= 0) memcpy(temp_datum_pts_unit, datum_pts_unit,
- i*sizeof(struct datum_pts_unit *));
-
- for (j=i+1; j<nunits; j++) {
- temp_datum_pts_unit[j-1] = datum_pts_unit[j];
- }
-
- free(datum_pts_unit);
- datum_pts_unit = temp_datum_pts_unit;
-
- }else{
-
- free(datum_pts_unit);
- datum_pts_unit = NULL;
-
- }
-
- return;
-
- }
- }
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Error, could not shut down unit %d\n",unit);
- fflush(logfile);
-#endif
- syslog(LOG_ERR, "Datum_PTS: Could not shut down Datum PTS unit %d",unit);
-
-}
-
-
-/*......................................................................*/
-/* datum_pts_poll */
-/*......................................................................*/
-
-static void datum_pts_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- int i;
- int index;
- int error_code;
- l_fp tstmp;
- struct datum_pts_unit *datum_pts;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Poll Datum PTS\n");
- fflush(logfile);
-#endif
-
-/* */
-/*...... find the unit and send out a time request .....................*/
-/* */
-
- index = -1;
- for (i=0; i<nunits; i++) {
- if (datum_pts_unit[i]->unit == unit) {
- index = i;
- datum_pts = datum_pts_unit[i];
- error_code = write(datum_pts->PTS_fd, TIME_REQUEST, 6);
- if (error_code != 6) perror("TIME_REQUEST");
- datum_pts->nbytes = 0;
- break;
- }
- }
-
- if (index == -1) {
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Error, could not poll unit %d\n",unit);
- fflush(logfile);
-#endif
- syslog(LOG_ERR, "Datum_PTS: Could not poll unit %d",unit);
- return;
- }
-
-}
-
-
-/*......................................................................*/
-/* datum_pts_control */
-/*......................................................................*/
-
-static void datum_pts_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Control Datum PTS\n");
- fflush(logfile);
-#endif
-}
-
-
-/*......................................................................*/
-/* datum_pts_init */
-/*......................................................................*/
-
-static void datum_pts_init()
-{
-
-#ifdef DEBUG_DATUM_PTC
- logfile = fopen("xntpd.log", "w");
- fprintf(logfile,"Init Datum PTS\n");
- fflush(logfile);
-#endif
-
- memcpy(START_GENERATOR, "//kk01",6);
- memcpy(STOP_GENERATOR, "//kk00",6);
- memcpy(TIME_REQUEST, "//k/mn",6);
-
- datum_pts_unit = NULL;
- nunits = 0;
-}
-
-
-/*......................................................................*/
-/* datum_pts_buginfo */
-/*......................................................................*/
-
-static void datum_pts_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Buginfo Datum PTS\n");
- fflush(logfile);
-#endif
-}
-
-
-/*......................................................................*/
-/* datum_pts_receive */
-/*......................................................................*/
-
-static void datum_pts_receive(rbufp)
- struct recvbuf *rbufp;
-{
- int i;
- l_fp tstmp, trtmp, tstmp1;
- struct datum_pts_unit *datum_pts;
- char *dpt;
- int dpend;
- time_t tim;
- struct tm *loctm;
- int tzoff;
- int timerr;
- double ftimerr, abserr;
-
- datum_pts = (struct datum_pts_unit *)rbufp->recv_srcclock;
- dpt = (char *)&rbufp->recv_space;
- dpend = rbufp->recv_length;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Receive Datum PTS: %d bytes\n", dpend);
- fflush(logfile);
-#endif
-
- for (i=0; i<dpend; i++) {
- datum_pts->retbuf[datum_pts->nbytes+i] = dpt[i];
- }
- datum_pts->nbytes += dpend;
-
- if (datum_pts->nbytes != 7) {
- return;
- }
-
-
-/* */
-/*...... save the ntp system time ......................................*/
-/* */
-
- trtmp = rbufp->recv_time;
- datum_pts->lastrec = trtmp;
-
-/* */
-/*...... convert the time from the buffer ..............................*/
-/* */
-
- datum_pts->day = 100*(datum_pts->retbuf[0] & 0x0f) +
- 10*((datum_pts->retbuf[1] & 0xf0)>>4) +
- (datum_pts->retbuf[1] & 0x0f);
-
- datum_pts->hour = 10*((datum_pts->retbuf[2] & 0x30)>>4) +
- (datum_pts->retbuf[2] & 0x0f);
-
- datum_pts->minute = 10*((datum_pts->retbuf[3] & 0x70)>>4) +
- (datum_pts->retbuf[3] & 0x0f);
-
- datum_pts->second = 10*((datum_pts->retbuf[4] & 0x70)>>4) +
- (datum_pts->retbuf[4] & 0x0f);
-
- datum_pts->msec = 100*((datum_pts->retbuf[5] & 0xf0) >> 4) +
- 10*(datum_pts->retbuf[5] & 0x0f) +
- ((datum_pts->retbuf[6] & 0xf0)>>4);
-
- datum_pts->usec = 1000*datum_pts->msec;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"day %d, hour %d, minute %d, second %d, msec %d\n",
- datum_pts->day,
- datum_pts->hour,
- datum_pts->minute,
- datum_pts->second,
- datum_pts->msec);
- fflush(logfile);
-#endif
-
-/* */
-/*...... get the GMT time zone offset ..................................*/
-/* */
-
- tim = trtmp.l_ui - JAN_1970;
- loctm = localtime(&tim);
- tzoff = -loctm->tm_gmtoff/3600;
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Time Zone = %d, time (sec) since 1970 = %d\n",tzoff, tim);
- fflush(logfile);
-#endif
-
-/* */
-/*...... make sure that we have a good time from the Datum PTS .........*/
-/* */
-
- if (!clocktime( datum_pts->day,
- datum_pts->hour,
- datum_pts->minute,
- datum_pts->second,
- tzoff,
- datum_pts->lastrec.l_ui,
- &datum_pts->yearstart,
- &datum_pts->lastref.l_ui) ) {
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Error: bad clocktime\n");
- fprintf(logfile,"GMT %d, lastrec %d, yearstart %d, lastref %d\n",
- tzoff,
- datum_pts->lastrec.l_ui,
- datum_pts->yearstart,
- datum_pts->lastref.l_ui);
- fflush(logfile);
-#endif
- syslog(LOG_ERR, "Datum_PTS: Bad clocktime");
-
- return;
-
- }else{
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Good clocktime\n");
- fflush(logfile);
-#endif
-
- }
-
-/* */
-/*...... we have datum_pts->lastref.l_ui set, get useconds now .........*/
-/* */
-
- TVUTOTSF(datum_pts->usec, datum_pts->lastref.l_uf);
-
-/* */
-/*...... pass the new time to xntpd ....................................*/
-/* */
-
- tstmp = datum_pts->lastref;
- L_SUB(&tstmp, &datum_pts->lastrec); /* tstmp is the time correction */
- datum_pts->coderecv++;
-
-/*
- set_logfile(logfile);
-*/
-
- refclock_receive( datum_pts->peer,
- &tstmp,
- tzoff,
- 0,
- &datum_pts->lastrec,
- &datum_pts->lastrec,
- datum_pts->leap );
- timerr = tstmp.l_ui<<20;
- timerr |= (tstmp.l_uf>>12) & 0x000fffff;
- ftimerr = timerr;
- ftimerr /= 1024*1024;
- abserr = ftimerr;
- if (ftimerr < 0.0) abserr = -ftimerr;
-
- if (datum_pts->sigma2 == 0.0) {
- if (abserr < DATUM_MAX_ERROR) {
- datum_pts->sigma2 = abserr*abserr;
- }else{
- datum_pts->sigma2 = DATUM_MAX_ERROR2;
- }
- }else{
- if (abserr < DATUM_MAX_ERROR) {
- datum_pts->sigma2 = 0.95*datum_pts->sigma2 + 0.05*abserr*abserr;
- }else{
- datum_pts->sigma2 = 0.95*datum_pts->sigma2 + 0.05*DATUM_MAX_ERROR2;
- }
- }
-
-#ifdef DEBUG_DATUM_PTC
- fprintf(logfile,"Time error = %f seconds, Sigma Squared = %f\n",
- ftimerr, datum_pts->sigma2);
- fflush(logfile);
-#endif
-
-/* */
-/*...... make sure that we understand the format for xntp time .........*/
-/* */
-
-#ifdef DEBUG_DATUM_PTC
- tstmp.l_ui = 2;
- TVUTOTSF(123456, tstmp.l_uf);
-
- timerr = tstmp.l_ui<<20;
- timerr |= (tstmp.l_uf>>12) & 0x000fffff;
- ftimerr = timerr;
- ftimerr /= 1024*1024;
- fprintf(logfile,"Test1 2.123456 = %f\n",ftimerr);
- fflush(logfile);
-
- tstmp1.l_ui = 3;
- TVUTOTSF(223456, tstmp1.l_uf);
- timerr = tstmp1.l_ui<<20;
- timerr |= (tstmp1.l_uf>>12) & 0x000fffff;
- ftimerr = timerr;
- ftimerr /= 1024*1024;
- fprintf(logfile,"Test2 3.223456 = %f\n",ftimerr);
- fflush(logfile);
-
- L_SUB(&tstmp, &tstmp1);
- timerr = tstmp.l_ui<<20;
- timerr |= (tstmp.l_uf>>12) & 0x000fffff;
- ftimerr = timerr;
- ftimerr /= 1024*1024;
- fprintf(logfile,"Test3 -1.100000 = %f\n",ftimerr);
- fflush(logfile);
-#endif
-
-
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c
deleted file mode 100644
index 2e81e52..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_gpstm.c
+++ /dev/null
@@ -1,998 +0,0 @@
-/*
- * refclock_gpstm - clock driver for the Kinimetrics Truetime GPSTM/TMD rcvr
- * Version 1.0 (from Version 2.0 of the GOES driver, as of 03Jan94)
- */
-
-#if defined(REFCLOCK) && (defined(GPSTM) || defined(GPSTMCLK) \
- || defined(GPSTMPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#ifdef SYS_BSDI
-#undef HAVE_BSD_TTYS
-#include <sys/ioctl.h>
-#endif
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(GPSTMCLK)
-#include <clkdefs.h>
-#endif /* GPSTMCLK */
-#endif /* STREAM */
-
-#if defined(GPSTMPPS)
-#include <sys/ppsclock.h>
-#endif /* GPSTMPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Support for Kinemetrics Truetime GPS-TM/TMD Receiver
- *
- * Most of this code is copied from refclock_goes.c with thanks.
- *
- * the time code looks like follows:
- *
- * ADDD:HH:MM:SSQCL
- * A - control A
- * Q Quality indication: indicates possible error of
- * ? +/- 500 milliseconds # +/- 50 milliseconds
- * * +/- 5 milliseconds . +/- 1 millisecond
- * space less than 1 millisecond
- * C - Carriage return
- * L - Line feed
- * The carriage return start bit begins on 0 seconds and extends to 1 bit time.
- *
- * Flag1 set to 1 will silence the clock side of xntpd, just reading the
- * clock without trying to write to it. This is usefull if several
- * xntpds listen to the same clock. This has not been tested yet...
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* max number of GPSTM units */
-#define GPSTM232 "/dev/gpstm%d"
-#define SPEED232 B9600 /* 9600 baud */
-
-/*
- * Radio interface parameters
- */
-#define MAXDISPERSE (FP_SECOND>>1) /* max error for synchronized clock (0.5 s as an u_fp) */
-#define PRECISION (-20) /* precision assumed (about 1 ms) */
-#define REFID "GPS\0" /* reference id */
-#define DESCRIPTION "Kinemetrics GPS-TM/TMD Receiver" /* who we are */
-#define GMT 0 /* hour offset from Greenwich */
-#define NCODES 3 /* stages of median filter */
-#define BMAX 99 /* timecode buffer length */
-#define CODEDIFF 0x20000000 /* 0.125 seconds as an l_fp fraction */
-#define TIMEOUT 180 /* ping the clock if it's silent this long */
-
-/*
- * used by the state machine
- */
-enum gpstm_event {e_Init, e_F18, e_F50, e_F51, e_TS};
-static enum {Base, Start, F18, F50, F51, F08} State[MAXUNITS];
-static time_t Last[MAXUNITS];
-static void gpstm_doevent P((int, enum gpstm_event));
-static void gpstm_initstate P((int));
-
-/*
- * Hack to avoid excercising the multiplier. I have no pride.
- */
-#define MULBY10(x) (((x)<<3) + ((x)<<1))
-
-/*
- * Imported from the timer module
- */
-extern U_LONG current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * GPSTM unit control structure
- */
-struct gpstm_unit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
- l_fp offset[NCODES]; /* recent sample offsets */
- char lastcode[BMAX]; /* last timecode received */
- u_short polled; /* Hand in a time sample? */
- u_char lencode; /* length of last timecode */
- U_LONG lasttime; /* last time clock heard from */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char year; /* year of eternity */
- u_short day; /* day of year */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- u_short msec; /* millisecond of second */
- u_char quality; /* quality character */
- U_LONG yearstart; /* start of current year */
- /*
- * Status tallies
- */
- U_LONG polls; /* polls sent */
- U_LONG noreply; /* no replies to polls */
- U_LONG coderecv; /* timecodes received */
- U_LONG badformat; /* bad format */
- U_LONG baddata; /* bad data */
- U_LONG timestarted; /* time we started this */
-};
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct gpstm_unit *gpstm_units[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor1[MAXUNITS];
-static l_fp fudgefactor2[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char readonlyclockflag[MAXUNITS];
-static U_LONG refid[MAXUNITS];
-
-/*
- * Function prototypes
- */
-static void gpstm_init P((void));
-static int gpstm_start P((u_int, struct peer *));
-static void gpstm_shutdown P((int));
-static void gpstm_rep_event P((struct gpstm_unit *, int));
-static void gpstm_receive P((struct recvbuf *));
-static char gpstm_process P((struct gpstm_unit *, l_fp *, u_fp *));
-static void gpstm_poll P((int, struct peer *));
-static void gpstm_control P((u_int, struct refclockstat *,
- struct refclockstat *));
-static void gpstm_buginfo P((int, struct refclockbug *));
-static void gpstm_send P((struct gpstm_unit *, char *));
-
-struct refclock refclock_gpstm = {
- gpstm_start, gpstm_shutdown, gpstm_poll,
- gpstm_control, gpstm_init, gpstm_buginfo, NOFLAGS
-};
-
-/*
- * gpstm_init - initialize internal driver data
- */
-static void
-gpstm_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- memset((char *)gpstm_units, 0, sizeof gpstm_units);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor1[i].l_ui = 0;
- fudgefactor1[i].l_uf = 0;
- fudgefactor2[i].l_ui = 0;
- fudgefactor2[i].l_uf = 0;
- stratumtouse[i] = 0;
- readonlyclockflag[i] = 0;
- memcpy((char *)&refid[i], REFID, 4);
- }
-}
-
-
-/*
- * gpstm_start - open the device and initialize data for processing
- */
-static int
-gpstm_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct gpstm_unit *gpstm;
- register int i;
- int fd232;
- char dev[20];
-
- /*
- * Check configuration info
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_start: unit %d invalid", unit);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_start: unit %d in use", unit);
- return 0;
- }
-
- /*
- * Open serial port
- */
- (void) sprintf(dev, GPSTM232, unit);
- fd232 = open(dev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "gpstm_start: open of %s: %m", dev);
- return 0;
- }
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TCGETA): %m", dev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TCSETA): %m", dev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The GPSTMCLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The GPSTMPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
- ttyp = &ttyb;
-
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcgetattr(%s): %m", dev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcsetattr(%s): %m", dev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: tcflush(%s): %m", dev);
- goto screwed;
- }
-#if defined(STREAM)
-#if defined(GPSTMCLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, I_PUSH, clk): %m", dev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, CLK_SETSTR): %m", dev);
-#endif /* GPSTMCLK */
-#if defined(GPSTMPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, I_PUSH, ppsclock): %m", dev);
- else
- fdpps = fd232;
-#endif /* GPSTMPPS */
-#endif /* STREAM */
- }
-#endif /* HAVE_TERMIOS */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The GPSTMCLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(GPSTMCLK)
- int ldisc = CLKLDISC;
-#endif /* GPSTMCLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCGETP): %m", dev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(GPSTMCLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* GPSTMCLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCSETP): %m", dev);
- goto screwed;
- }
-#if defined(GPSTMCLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "gpstm_start: ioctl(%s, TIOCSETD): %m", dev);
- goto screwed;
- }
-#endif /* GPSTMCLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Allocate unit structure
- */
- if (gpstm_units[unit] != 0) {
- gpstm = gpstm_units[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && gpstm_units[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- gpstm = gpstm_units[i];
- gpstm_units[i] = 0;
- } else {
- gpstm = (struct gpstm_unit *)
- emalloc(sizeof(struct gpstm_unit));
- }
- }
- memset((char *)gpstm, 0, sizeof(struct gpstm_unit));
- gpstm_units[unit] = gpstm;
-
- /*
- * Set up the structures
- */
- gpstm->peer = peer;
- gpstm->unit = (u_char)unit;
- gpstm->timestarted = current_time;
-
- gpstm->io.clock_recv = gpstm_receive;
- gpstm->io.srcclock = (caddr_t)gpstm;
- gpstm->io.datalen = 0;
- gpstm->io.fd = fd232;
- if (!io_addclock(&gpstm->io)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success.
- */
- peer->precision = PRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- gpstm_initstate(unit);
- return 1;
-
- /*
- * Something broke; abandon ship
- */
-screwed:
- (void) close(fd232);
- return 0;
-}
-
-/*
- * gpstm_shutdown - shut down a clock
- */
-static void
-gpstm_shutdown(unit)
- int unit;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_shutdown: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- gpstm = gpstm_units[unit];
- io_closeclock(&gpstm->io);
- unitinuse[unit] = 0;
-}
-
-
-/*
- * gpstm_rep_event - note the occurance of an event
- */
-static void
-gpstm_rep_event(gpstm, code)
- struct gpstm_unit *gpstm;
- int code;
-{
- struct peer *peer;
-
- peer = gpstm->peer;
- if (gpstm->status != (u_char)code) {
- gpstm->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- gpstm->lastevent = (u_char)code;
- syslog(LOG_INFO,
- "clock %s event %x\n", ntoa(&peer->srcadr), code);
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_rep_event(gpstm%d, code %d)\n",
- gpstm->unit, code);
- }
-#endif
- }
- if (code == CEVNT_BADREPLY)
- gpstm_initstate(gpstm->unit);
-}
-
-
-/*
- * gpstm_receive - receive data from the serial interface on a clock
- */
-static void
-gpstm_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int i;
- register struct gpstm_unit *gpstm;
- register u_char *dpt;
- register char *cp;
- register u_char *dpend;
- l_fp tstmp;
- u_fp dispersion;
-
- /*
- * Get the clock this applies to and a pointers to the data
- */
- gpstm = (struct gpstm_unit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
-
- /*
- * Edit timecode to remove control chars
- */
- dpend = dpt + rbufp->recv_length;
- cp = gpstm->lastcode;
- while (dpt < dpend) {
- if ((*cp = 0x7f & *dpt++) >= ' ') cp++;
-#ifdef GPSTMCLK
- else if (*cp == '\r') {
- if (dpend - dpt < 8) {
- /* short timestamp */
- return;
- }
- if (!buftvtots(dpt,&gpstm->lastrec)) {
- /* screwy timestamp */
- return;
- }
- dpt += 8;
- }
-#endif
- }
- *cp = '\0';
- gpstm->lencode = cp - gpstm->lastcode;
- if (gpstm->lencode == 0)
- return;
-#ifndef GPSTMCLK
- gpstm->lastrec = rbufp->recv_time;
-#endif /* GPSTMCLK */
-#if !defined(GPSTMCLK) && !defined(GPSTMPPS) && defined(TIOCMODT)
- do {
- auto struct timeval cur, now;
- register long usec;
-
- if (ioctl(gpstm->io.fd, TIOCMODT, &cur) < 0) {
- syslog(LOG_ERR, "TIOCMODT: %m");
-#ifdef DEBUG
- if (debug) perror("TIOCMODT");
- break;
-#endif
- }
- if (cur.tv_sec == 0) {
- /* no timestamps yet */
- if (debug) printf("MODT tv_sec == 0\n");
- break;
- }
-
- gettimeofday(&now, NULL);
- usec = 1000000 * (now.tv_sec - cur.tv_sec)
- + (now.tv_usec - cur.tv_usec);
-#ifdef DEBUG
- if (debug) printf("lastmodem: delay=%d us\n", usec);
-#endif
- if (usec < 0 || usec > 10000) {
- /* time warp or stale timestamp */
- break;
- }
- if (!buftvtots((char *)&cur, &gpstm->lastrec)) {
- /* screwy timestamp */
- break;
- }
- } while (0);
-#endif /*TIOCMODT*/
-
-#ifdef DEBUG
- if (debug)
- printf("gpstm: timecode %d %s\n",
- gpstm->lencode, gpstm->lastcode);
-#endif
-
- cp = gpstm->lastcode;
- gpstm->leap = 0;
- if ((cp[0] == 'F' && isdigit(cp[1]) && isdigit(cp[2]))
- || (cp[0] == ' ' && cp[1] == 'T' && cp[2] == 'R')) {
- enum gpstm_event event;
-
- syslog(LOG_NOTICE, "gpstm%d: \"%s\"", gpstm->unit, cp);
- if (cp[1] == '5' && cp[2] == '0')
- event = e_F50;
- else if (cp[1] == '5' && cp[2] == '1')
- event = e_F51;
- else if (!strncmp(" TRUETIME Mk III", cp, 16))
- event = e_F18;
- else {
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
- gpstm_doevent(gpstm->unit, event);
- return;
- } else if (gpstm->lencode == 13) {
- /*
- * Check timecode format 0
- */
- if (!isdigit(cp[0]) /* day of year */
- || !isdigit(cp[1])
- || !isdigit(cp[2])
- || cp[3] != ':' /* : separator */
- || !isdigit(cp[4]) /* hours */
- || !isdigit(cp[5])
- || cp[6] != ':' /* : separator */
- || !isdigit(cp[7]) /* minutes */
- || !isdigit(cp[8])
- || cp[9] != ':' /* : separator */
- || !isdigit(cp[10]) /* seconds */
- || !isdigit(cp[11]))
- {
- gpstm->badformat++;
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * Convert format 0 and check values
- */
- gpstm->year = 0; /* fake */
- gpstm->day = cp[0] - '0';
- gpstm->day = MULBY10(gpstm->day) + cp[1] - '0';
- gpstm->day = MULBY10(gpstm->day) + cp[2] - '0';
- gpstm->hour = MULBY10(cp[4] - '0') + cp[5] - '0';
- gpstm->minute = MULBY10(cp[7] - '0') + cp[8] - '0';
- gpstm->second = MULBY10(cp[10] - '0') + cp[11] - '0';
- gpstm->msec = 0;
-
- if (cp[12] != ' ' && cp[12] != '.' && cp[12] != '*')
- gpstm->leap = LEAP_NOTINSYNC;
- else
- gpstm->lasttime = current_time;
-
- if (gpstm->day < 1 || gpstm->day > 366) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADDATE);
- return;
- }
- if (gpstm->hour > 23 || gpstm->minute > 59
- || gpstm->second > 59) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- gpstm_doevent(gpstm->unit, e_TS);
- } else {
- gpstm_rep_event(gpstm, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * The clock will blurt a timecode every second but we only
- * want one when polled. If we havn't been polled, bail out.
- */
- if (!gpstm->polled)
- return;
-
- /*
- * Now, compute the reference time value. Use the heavy
- * machinery for the seconds and the millisecond field for the
- * fraction when present.
- *
- * this code does not yet know how to do the years
- */
- tstmp = gpstm->lastrec;
- if (!clocktime(gpstm->day, gpstm->hour, gpstm->minute,
- gpstm->second, GMT, tstmp.l_ui,
- &gpstm->yearstart, &gpstm->lastref.l_ui))
- {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- MSUTOTSF(gpstm->msec, gpstm->lastref.l_uf);
-
- i = ((int)(gpstm->coderecv)) % NCODES;
- gpstm->offset[i] = gpstm->lastref;
- L_SUB(&gpstm->offset[i], &tstmp);
- if (gpstm->coderecv == 0)
- for (i = 1; i < NCODES; i++)
- gpstm->offset[i] = gpstm->offset[0];
-
- gpstm->coderecv++;
-
- /*
- * Process the median filter, and pass the
- * offset and dispersion along. We use lastrec as both the
- * reference time and receive time in order to avoid being cute,
- * like setting the reference time later than the receive time,
- * which may cause a paranoid protocol module to chuck out the
- * data.
- */
- if (!gpstm_process(gpstm, &tstmp, &dispersion)) {
- gpstm->baddata++;
- gpstm_rep_event(gpstm, CEVNT_BADTIME);
- return;
- }
- refclock_receive(gpstm->peer, &tstmp, GMT, dispersion,
- &gpstm->lastrec, &gpstm->lastrec, gpstm->leap);
-
- /*
- * We have succedded in answering the poll. Turn off the flag
- */
- gpstm->polled = 0;
-}
-
-/*
- * gpstm_send - time to send the clock a signal to cough up a time sample
- */
-static void
-gpstm_send(gpstm, cmd)
- struct gpstm_unit *gpstm;
- char *cmd;
-{
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_send(gpstm%d): %s\n", gpstm->unit, cmd);
- }
-#endif
- if (!readonlyclockflag[gpstm->unit]) {
- register int len = strlen(cmd);
-
- if (write(gpstm->io.fd, cmd, len) != len) {
- syslog(LOG_ERR, "gpstm_send: unit %d: %m",
- gpstm->unit);
- gpstm_rep_event(gpstm, CEVNT_FAULT);
- }
- }
-}
-
-/*
- * state machine for initializing the clock
- */
-
-static void
-gpstm_doevent(unit, event)
- int unit;
- enum gpstm_event event;
-{
- struct gpstm_unit *gpstm = gpstm_units[unit];
-
-#ifdef DEBUG
- if (debug) {
- printf("gpstm_doevent(gpstm%d, %d)\n", unit, (int)event);
- }
-#endif
- if (event == e_TS && State[unit] != F51 && State[unit] != F08) {
- gpstm_send(gpstm, "\03\r");
- }
-
- switch (event) {
- case e_Init:
- gpstm_send(gpstm, "F18\r");
- State[unit] = Start;
- break;
- case e_F18:
- gpstm_send(gpstm, "F50\r");
- State[unit] = F18;
- break;
- case e_F50:
- gpstm_send(gpstm, "F51\r");
- State[unit] = F50;
- break;
- case e_F51:
- gpstm_send(gpstm, "F08\r");
- State[unit] = F51;
- break;
- case e_TS:
- /* nothing to send - we like this mode */
- State[unit] = F08;
- break;
- }
-}
-
-static void
-gpstm_initstate(unit) {
- State[unit] = Base; /* just in case */
- gpstm_doevent(unit, e_Init);
-}
-
-/*
- * gpstm_process - process a pile of samples from the clock
- */
-static char
-gpstm_process(gpstm, offset, dispersion)
- struct gpstm_unit *gpstm;
- l_fp *offset;
- u_fp *dispersion;
-{
- register int i, j;
- register U_LONG tmp_ui, tmp_uf;
- int not_median1 = -1; /* XXX correct? */
- int not_median2 = -1; /* XXX correct? */
- int median;
- u_fp disp_tmp, disp_tmp2;
-
- /*
- * This code implements a three-stage median filter. First, we
- * check if the samples are within 125 ms of each other. If not,
- * dump the sample set. We take the median of the three offsets
- * and use that as the sample offset. We take the maximum
- * difference and use that as the sample dispersion. There
- * probably is not much to be gained by a longer filter, since
- * the clock filter in ntp_proto should do its thing.
- */
- disp_tmp2 = 0;
- for (i = 0; i < NCODES-1; i++) {
- for (j = i+1; j < NCODES; j++) {
- tmp_ui = gpstm->offset[i].l_ui;
- tmp_uf = gpstm->offset[i].l_uf;
- M_SUB(tmp_ui, tmp_uf, gpstm->offset[j].l_ui,
- gpstm->offset[j].l_uf);
- if (M_ISNEG(tmp_ui, tmp_uf)) {
- M_NEG(tmp_ui, tmp_uf);
- }
- if (tmp_ui != 0 || tmp_uf > CODEDIFF) {
- return 0;
- }
- disp_tmp = MFPTOFP(0, tmp_uf);
- if (disp_tmp > disp_tmp2) {
- disp_tmp2 = disp_tmp;
- not_median1 = i;
- not_median2 = j;
- }
- }
- }
-
- /*
- * It seems as if all are within 125 ms of each other.
- * Now to determine the median of the three. Whlie the
- * 125 ms check was going on, we also subtly catch the
- * dispersion and set-up for a very easy median calculation.
- * The largest difference between any two samples constitutes
- * the dispersion. The sample not involve in the dispersion is
- * the median sample. EASY!
- */
- if (gpstm->lasttime == 0 || disp_tmp2 > MAXDISPERSE)
- disp_tmp2 = MAXDISPERSE;
- if (not_median1 == 0) {
- if (not_median2 == 1)
- median = 2;
- else
- median = 1;
- } else {
- median = 0;
- }
- *offset = gpstm->offset[median];
- *dispersion = disp_tmp2;
- return 1;
-}
-
-/*
- * gpstm_poll - called by the transmit procedure
- */
-static void
-gpstm_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct gpstm_unit *gpstm;
-
- /*
- * You don't need to poll this clock. It puts out timecodes
- * once per second. If asked for a timestamp, take note.
- * The next time a timecode comes in, it will be fed back.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "gpstm_poll: unit %d not in use", unit);
- return;
- }
- gpstm = gpstm_units[unit];
- if ((current_time - gpstm->lasttime) > 150) {
- gpstm->noreply++;
- gpstm_rep_event(gpstm_units[unit], CEVNT_TIMEOUT);
- gpstm_initstate(gpstm->unit);
- }
-
- /*
- * polled every 64 seconds. Ask our receiver to hand in a timestamp.
- */
- gpstm->polled = 1;
- gpstm->polls++;
-}
-
-/*
- * gpstm_control - set fudge factors, return statistics
- */
-static void
-gpstm_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_control: unit %d invalid", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor1[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- fudgefactor2[unit] = in->fudgetime2;
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (in->haveflags & CLK_HAVEFLAG1)
- readonlyclockflag[unit] = in->flags & CLK_FLAG1;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = gpstm_units[unit]->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out != 0) {
- memset((char *)out, 0, sizeof (struct refclockstat));
- out->type = REFCLK_GPSTM_TRUETIME;
- out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 |
- CLK_HAVEVAL2 | CLK_HAVEFLAG1;
- out->clockdesc = DESCRIPTION;
- out->fudgetime1 = fudgefactor1[unit];
- out->fudgetime2 = fudgefactor2[unit];
- out->fudgeval1 = (LONG)stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->flags = readonlyclockflag[unit];
- if (unitinuse[unit]) {
- gpstm = gpstm_units[unit];
- out->lencode = gpstm->lencode;
- out->lastcode = gpstm->lastcode;
- out->timereset = current_time - gpstm->timestarted;
- out->polls = gpstm->polls;
- out->noresponse = gpstm->noreply;
- out->badformat = gpstm->badformat;
- out->baddata = gpstm->baddata;
- out->lastevent = gpstm->lastevent;
- out->currentstatus = gpstm->status;
- }
- }
-}
-
-/*
- * gpstm_buginfo - return clock dependent debugging info
- */
-static void
-gpstm_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct gpstm_unit *gpstm;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "gpstm_buginfo: unit %d invalid", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- gpstm = gpstm_units[unit];
-
- bug->nvalues = 11;
- bug->ntimes = 5;
- if (gpstm->lasttime != 0)
- bug->values[0] = current_time - gpstm->lasttime;
- else
- bug->values[0] = 0;
- bug->values[1] = (U_LONG)gpstm->reason;
- bug->values[2] = (U_LONG)gpstm->year;
- bug->values[3] = (U_LONG)gpstm->day;
- bug->values[4] = (U_LONG)gpstm->hour;
- bug->values[5] = (U_LONG)gpstm->minute;
- bug->values[6] = (U_LONG)gpstm->second;
- bug->values[7] = (U_LONG)gpstm->msec;
- bug->values[8] = gpstm->noreply;
- bug->values[9] = gpstm->yearstart;
- bug->values[10] = gpstm->quality;
- bug->stimes = 0x1c;
- bug->times[0] = gpstm->lastref;
- bug->times[1] = gpstm->lastrec;
- bug->times[2] = gpstm->offset[0];
- bug->times[3] = gpstm->offset[1];
- bug->times[4] = gpstm->offset[2];
-}
-
-#endif /*GPSTM et al*/
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c
deleted file mode 100644
index 808f65b..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_leitch.c
+++ /dev/null
@@ -1,709 +0,0 @@
-/*
- * refclock_leitch - clock driver for the Leitch CSD-5300 Master Clock
- */
-#if defined(REFCLOCK) && (defined(LEITCH) || defined(LEITCHCLK) || defined(LEITCHPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#ifdef STREAM
-#include <stropts.h>
-#if defined(LEITCHCLK)
-#include <sys/clkdefs.h>
-#endif /* LEITCHCLK */
-#endif /* STREAM */
-
-#if defined (LEITCHPPS)
-#include <sys/ppsclock.h>
-#endif /* LEITCHPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Driver for Leitch CSD-5300 Master Clock System
- *
- * COMMANDS:
- * DATE: D <CR>
- * TIME: T <CR>
- * STATUS: S <CR>
- * LOOP: L <CR>
- *
- * FORMAT:
- * DATE: YYMMDD<CR>
- * TIME: <CR>/HHMMSS <CR>/HHMMSS <CR>/HHMMSS <CR>/
- * second bondaried on the stop bit of the <CR>
- * second boundaries at '/' above.
- * STATUS: G (good), D (diag fail), T (time not provided) or
- * P (last phone update failed)
- */
-#define MAXUNITS 1 /* max number of LEITCH units */
-#define LEITCHREFID "ATOM" /* reference id */
-#define LEITCH_DESCRIPTION "Leitch: CSD 5300 Master Clock System Driver"
-#define LEITCH232 "/dev/leitch%d" /* name of radio device */
-#define SPEED232 B300 /* uart speed (300 baud) */
-#define leitch_send(A,M) \
- if (debug) fprintf(stderr,"write leitch %s\n",M); \
- if ((write(A->leitchio.fd,M,sizeof(M)) < 0)) {\
- if (debug) \
- fprintf(stderr, "leitch_send: unit %d send failed\n", A->unit); \
- else \
- syslog(LOG_ERR, "leitch_send: unit %d send failed %m",A->unit);}
-
-#define STATE_IDLE 0
-#define STATE_DATE 1
-#define STATE_TIME1 2
-#define STATE_TIME2 3
-#define STATE_TIME3 4
-
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * LEITCH unit control structure
- */
-struct leitchunit {
- struct peer *peer;
- struct event leitchtimer;
- struct refclockio leitchio;
- u_char unit;
- short year;
- short yearday;
- short month;
- short day;
- short hour;
- short second;
- short minute;
- short state;
- u_short fudge1;
- l_fp reftime1;
- l_fp reftime2;
- l_fp reftime3;
- l_fp codetime1;
- l_fp codetime2;
- l_fp codetime3;
- U_LONG yearstart;
-};
-
-/*
- * Function prototypes
- */
-static void leitch_init P((void));
-static int leitch_start P((u_int, struct peer *));
-static void leitch_shutdown P((int));
-static void leitch_poll P((int, struct peer *));
-static void leitch_control P((u_int, struct refclockstat *, struct refclockstat *));
-#define leitch_buginfo noentry
-static void leitch_receive P((struct recvbuf *));
-static void leitch_process P((struct leitchunit *));
-static void leitch_timeout P((struct peer *));
-static int leitch_get_date P((struct recvbuf *, struct leitchunit *));
-static int leitch_get_time P((struct recvbuf *, struct leitchunit *, int));
-static int dysize P((int));
-
-static struct leitchunit leitchunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static U_LONG refid[MAXUNITS];
-
-static char days_in_month [] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
-
-/*
- * Transfer vector
- */
-struct refclock refclock_leitch = {
- leitch_start, leitch_shutdown, leitch_poll,
- leitch_control, leitch_init, leitch_buginfo, NOFLAGS
-};
-
-/*
- * leitch_init - initialize internal leitch driver data
- */
-static void
-leitch_init()
-{
- int i;
-
- memset((char*)leitchunits, 0, sizeof(leitchunits));
- memset((char*)unitinuse, 0, sizeof(unitinuse));
- for (i = 0; i < MAXUNITS; i++)
- memcpy((char *)&refid[i], LEITCHREFID, 4);
-}
-
-/*
- * leitch_shutdown - shut down a LEITCH clock
- */
-static void
-leitch_shutdown(unit)
-int unit;
-{
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_shutdown()\n");
-#endif
-}
-
-/*
- * leitch_poll - called by the transmit procedure
- */
-static void
-leitch_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct leitchunit *leitch;
-
- /* start the state machine rolling */
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_poll()\n");
-#endif
- if (unit > MAXUNITS) {
- /* XXXX syslog it */
- return;
- }
-
- leitch = &leitchunits[unit];
-
- if (leitch->state != STATE_IDLE) {
- /* reset and wait for next poll */
- /* XXXX syslog it */
- leitch->state = STATE_IDLE;
- } else {
- leitch_send(leitch,"D\r");
- leitch->state = STATE_DATE;
- }
-}
-
-static void
-leitch_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "leitch_control: unit %d invalid", unit);
- return;
- }
-
- if (in) {
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = (&leitchunits[unit])->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out) {
- memset((char *)out, 0, sizeof (struct refclockstat));
- out->type = REFCLK_ATOM_LEITCH;
- out->haveflags = CLK_HAVEVAL1 | CLK_HAVEVAL2;
- out->fudgeval1 = (LONG)stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->lastcode = "";
- out->clockdesc = LEITCH_DESCRIPTION;
- }
-}
-
-/*
- * leitch_start - open the LEITCH devices and initialize data for processing
- */
-static int
-leitch_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- struct leitchunit *leitch;
- int fd232;
- char leitchdev[20];
-
- /*
- * Check configuration info.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "leitch_start: unit %d invalid", unit);
- return (0);
- }
-
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "leitch_start: unit %d in use", unit);
- return (0);
- }
-
- /*
- * Open serial port.
- */
- (void) sprintf(leitchdev, LEITCH232, unit);
- fd232 = open(leitchdev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR,
- "leitch_start: open of %s: %m", leitchdev);
- return (0);
- }
-
- leitch = &leitchunits[unit];
- memset((char*)leitch, 0, sizeof(*leitch));
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TCGETA): %m", leitchdev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TCSETA): %m", leitchdev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The LEITCHCLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The LEITCHPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcgetattr(%s): %m", leitchdev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcsetattr(%s): %m", leitchdev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "leitch_start: tcflush(%s): %m", leitchdev);
- goto screwed;
- }
- }
-#endif /* HAVE_TERMIOS */
-#ifdef STREAM
-#if defined(LEITCHCLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, I_PUSH, clk): %m", leitchdev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, CLK_SETSTR): %m", leitchdev);
-#endif /* LEITCHCLK */
-#if defined(LEITCHPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, I_PUSH, ppsclock): %m", leitchdev);
- else
- fdpps = fd232;
-#endif /* LEITCHPPS */
-#endif /* STREAM */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The LEITCHCLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(LEITCHCLK)
- int ldisc = CLKLDISC;
-#endif /* LEITCHCLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCGETP): %m", leitchdev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(LEITCHCLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* LEITCHCLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCSETP): %m", leitchdev);
- goto screwed;
- }
-#if defined(LEITCHCLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "leitch_start: ioctl(%s, TIOCSETD): %m",leitchdev);
- goto screwed;
- }
-#endif /* LEITCHCLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Set up the structures
- */
- leitch->peer = peer;
- leitch->unit = unit;
- leitch->state = STATE_IDLE;
- leitch->fudge1 = 15; /* 15ms */
-
- leitch->leitchio.clock_recv = leitch_receive;
- leitch->leitchio.srcclock = (caddr_t) leitch;
- leitch->leitchio.datalen = 0;
- leitch->leitchio.fd = fd232;
- if (!io_addclock(&leitch->leitchio)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success. Note that root delay and root dispersion are
- * always zero for this clock.
- */
- peer->precision = 0;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- return(1);
-
- /*
- * Something broke; abandon ship.
- */
-screwed:
- close(fd232);
- return(0);
-}
-
-/*
- * leitch_receive - receive data from the serial interface on a leitch
- * clock
- */
-static void
-leitch_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct leitchunit *leitch = (struct leitchunit *)rbufp->recv_srcclock;
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_recieve(%*.*s)\n",
- rbufp->recv_length, rbufp->recv_length,
- rbufp->recv_buffer);
-#endif
- if (rbufp->recv_length != 7)
- return; /* The date is return with a trailing newline,
- discard it. */
-
- switch (leitch->state) {
- case STATE_IDLE: /* unexpected, discard and resync */
- return;
- case STATE_DATE:
- if (!leitch_get_date(rbufp,leitch)) {
- leitch->state = STATE_IDLE;
- break;
- }
- leitch_send(leitch,"T\r");
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%u\n",leitch->yearday);
-#endif
- leitch->state = STATE_TIME1;
- break;
- case STATE_TIME1:
- if (!leitch_get_time(rbufp,leitch,1)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime1.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%u\n", leitch->reftime1.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime1.l_uf);
- leitch->codetime1 = rbufp->recv_time;
- leitch->state = STATE_TIME2;
- break;
- case STATE_TIME2:
- if (!leitch_get_time(rbufp,leitch,2)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime2.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%u\n", leitch->reftime2.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime2.l_uf);
- leitch->codetime2 = rbufp->recv_time;
- leitch->state = STATE_TIME3;
- break;
- case STATE_TIME3:
- if (!leitch_get_time(rbufp,leitch,3)) {
- }
- if (!clocktime(leitch->yearday,leitch->hour,leitch->minute,
- leitch->second, 0, rbufp->recv_time.l_ui,
- &leitch->yearstart, &leitch->reftime3.l_ui)) {
- leitch->state = STATE_IDLE;
- break;
- }
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "%u\n", leitch->reftime3.l_ui);
-#endif
- MSUTOTSF(leitch->fudge1, leitch->reftime3.l_uf);
- leitch->codetime3 = rbufp->recv_time;
- leitch_process(leitch);
- leitch->state = STATE_IDLE;
- break;
- default:
- syslog(LOG_ERR,
- "leitech_receive: invalid state %d unit %d",
- leitch->state, leitch->unit);
- }
-}
-
-/*
- * leitch_process - process a pile of samples from the clock
- *
- * This routine uses a three-stage median filter to calculate offset and
- * dispersion. reduce jitter. The dispersion is calculated as the span
- * of the filter (max - min), unless the quality character (format 2) is
- * non-blank, in which case the dispersion is calculated on the basis of
- * the inherent tolerance of the internal radio oscillator, which is
- * +-2e-5 according to the radio specifications.
- */
-static void
-leitch_process(leitch)
- struct leitchunit *leitch;
-{
- l_fp off;
- s_fp delay;
- l_fp codetime;
- l_fp tmp_fp;
- int isinsync = 1;
- u_fp dispersion = 10;
-
- delay = 20;
-
- codetime = leitch->codetime3;
-
- off = leitch->reftime1;
- L_SUB(&off,&leitch->codetime1);
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%u %u %u %u %d %d\n",
- leitch->codetime1.l_ui, leitch->codetime1.l_uf,
- leitch->reftime1.l_ui, leitch->reftime1.l_uf,
- off.l_ui, off.l_uf);
-#endif
- tmp_fp = leitch->reftime2;
- L_SUB(&tmp_fp,&leitch->codetime2);
- if (L_ISGEQ(&off,&tmp_fp))
- off = tmp_fp;
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%u %u %u %u %d %d\n",
- leitch->codetime2.l_ui, leitch->codetime2.l_uf,
- leitch->reftime2.l_ui, leitch->reftime2.l_uf,
- off.l_ui, off.l_uf);
-#endif
- tmp_fp = leitch->reftime3;
- L_SUB(&tmp_fp,&leitch->codetime3);
-
- if (L_ISGEQ(&off,&tmp_fp))
- off = tmp_fp;
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr,"%u %u %u %u %d %d\n",
- leitch->codetime3.l_ui, leitch->codetime3.l_uf,
- leitch->reftime3.l_ui, leitch->reftime3.l_uf,
- off.l_ui, off.l_uf);
-#endif
- refclock_receive(leitch->peer, &off, 0, dispersion, &codetime,
- &codetime, isinsync);
-}
-
-/*
- * leitch_timeout
- */
-static void
-leitch_timeout(fp)
- struct peer *fp;
-{
-
-#ifdef DEBUG
- if (debug)
- fprintf(stderr, "leitch_timeout()\n");
-#endif
-
-#ifdef NOTYET
- { struct leitchunit *leitch = (struct leitchunit *)fp;
-
- switch(leitch->state) {
- case STATE_IDLE:
- leitch_send(leitch,"D\r");
- leitch->state = STATE_DATE;
- break;
- case STATE_DATE:
- leitch_send(leitch,"T\r");
- leitch->state = STATE_TIME1;
- break;
- case STATE_TIME1:
- case STATE_TIME2:
- case STATE_TIME3:
- default:
- break;
- }
-
- leitch->leitchtimer.event_time += 30;
- TIMER_ENQUEUE(timerqueue, &leitch->leitchtimer);
- }
-#endif /* NOTYET */
-}
-
-/*
- * dysize
- */
-static int
-dysize(year)
-int year;
-{
- if (year%4) { /* not a potential leap year */
- return (365);
- } else {
- if (year % 100) { /* is a leap year */
- return (366);
- } else {
- if (year % 400) {
- return (365);
- } else {
- return (366);
- }
- }
- }
-}
-
-static int
-leitch_get_date(rbufp,leitch)
- struct recvbuf *rbufp;
- struct leitchunit *leitch;
-{
- int i;
-
- if (rbufp->recv_length < 6)
- return(0);
-#define BAD(A) (rbufp->recv_buffer[A] < '0') || (rbufp->recv_buffer[A] > '9')
- if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5))
- return(0);
-#define ATOB(A) ((rbufp->recv_buffer[A])-'0')
- leitch->year = ATOB(0)*10 + ATOB(1);
- leitch->month = ATOB(2)*10 + ATOB(3);
- leitch->day = ATOB(4)*10 + ATOB(5);
-
- /* sanity checks */
- if (leitch->month > 12)
- return(0);
- if (leitch->day > days_in_month[leitch->month-1])
- return(0);
-
- /* calculate yearday */
- i = 0;
- leitch->yearday = leitch->day;
-
- while ( i < (leitch->month-1) )
- leitch->yearday += days_in_month[i++];
-
- if ((dysize((leitch->year>90?1900:2000)+leitch->year)==365) &&
- leitch->month > 2)
- leitch->yearday--;
-
- return(1);
-}
-
-/*
- * leitch_get_time
- */
-static int
-leitch_get_time(rbufp,leitch,which)
- struct recvbuf *rbufp;
- struct leitchunit *leitch;
- int which;
-{
- if (BAD(0)||BAD(1)||BAD(2)||BAD(3)||BAD(4)||BAD(5))
- return(0);
- leitch->hour = ATOB(0)*10 +ATOB(1);
- leitch->minute = ATOB(2)*10 +ATOB(3);
- leitch->second = ATOB(4)*10 +ATOB(5);
-
- if ((leitch->hour > 23) || (leitch->minute > 60) ||
- (leitch->second > 60))
- return(0);
- return(1);
-}
-
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c
deleted file mode 100644
index 255d74f..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_msfees.c
+++ /dev/null
@@ -1,1575 +0,0 @@
-/* refclock_ees - clock driver for the EES M201 receiver */
-
-#if defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM)
-
-/* Currently REQUIRES STREAM and PPSCD. CLK and CBREAK modes
- * were removed as the code was overly hairy, they weren't in use
- * (hence probably didn't work). Still in RCS file at cl.cam.ac.uk
- */
-
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_calendar.h"
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-#include <termios.h>
-#include <stropts.h>
-#include <sys/ppsclock.h>
-#include "ntp_stdlib.h"
-
- /*
- fudgefactor = fudgetime1;
- os_delay = fudgetime2;
- offset_fudge = os_delay + fudgefactor + inherent_delay;
- stratumtouse = fudgeval1 & 0xf
- debug = fudgeval2;
- sloppyclockflag = flags & CLK_FLAG1;
- 1 log smoothing summary when processing sample
- 4 dump the buffer from the clock
- 8 EIOGETKD the last n uS time stamps
- if (flags & CLK_FLAG2 && unitinuse) ees->leaphold = 0;
- ees->dump_vals = flags & CLK_FLAG3;
- ees->usealldata = flags & CLK_FLAG4;
-
-
- bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0;
- bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0;
- bug->values[2] = (u_long)ees->status;
- bug->values[3] = (u_long)ees->lastevent;
- bug->values[4] = (u_long)ees->reason;
- bug->values[5] = (u_long)ees->nsamples;
- bug->values[6] = (u_long)ees->codestate;
- bug->values[7] = (u_long)ees->day;
- bug->values[8] = (u_long)ees->hour;
- bug->values[9] = (u_long)ees->minute;
- bug->values[10] = (u_long)ees->second;
- bug->values[11] = (u_long)ees->tz;
- bug->values[12] = ees->yearstart;
- bug->values[13] = (ees->leaphold > current_time) ?
- ees->leaphold - current_time : 0;
- bug->values[14] = inherent_delay[unit].l_uf;
- bug->values[15] = offset_fudge[unit].l_uf;
-
- bug->times[0] = ees->reftime;
- bug->times[1] = ees->arrvtime;
- bug->times[2] = ees->lastsampletime;
- bug->times[3] = ees->offset;
- bug->times[4] = ees->lowoffset;
- bug->times[5] = ees->highoffset;
- bug->times[6] = inherent_delay[unit];
- bug->times[8] = os_delay[unit];
- bug->times[7] = fudgefactor[unit];
- bug->times[9] = offset_fudge[unit];
- bug->times[10]= ees->yearstart, 0;
- */
-
-/* This should support the use of an EES M201 receiver with RS232
- * output (modified to transmit time once per second).
- *
- * For the format of the message sent by the clock, see the EESM_
- * definitions below.
- *
- * It appears to run free for an integral number of minutes, until the error
- * reaches 4mS, at which point it steps at second = 01.
- * It appears that sometimes it steps 4mS (say at 7 min interval),
- * then the next minute it decides that it was an error, so steps back.
- * On the next minute it steps forward again :-(
- * This is typically 16.5uS/S then 3975uS at the 4min re-sync,
- * or 9.5uS/S then 3990.5uS at a 7min re-sync,
- * at which point it may loose the "00" second time stamp.
- * I assume that the most accurate time is just AFTER the re-sync.
- * Hence remember the last cycle interval,
- *
- * Can run in any one of:
- *
- * PPSCD PPS signal sets CD which interupts, and grabs the current TOD
- * (sun) *in the interupt code*, so as to avoid problems with
- * the STREAMS scheduling.
- *
- * It appears that it goes 16.5 uS slow each second, then every 4 mins it
- * generates no "00" second tick, and gains 3975 uS. Ho Hum ! (93/2/7)
- */
-
-/* Definitions */
-#ifndef MAXUNITS
-#define MAXUNITS 4 /* maximum number of EES units permitted */
-#endif
-
-#ifndef EES232
-#define EES232 "/dev/ees%d" /* Device to open to read the data */
-#endif
-
-/* Other constant stuff */
-#ifndef EESPRECISION
-#define EESPRECISION (-10) /* what the heck - 2**-10 = 1ms */
-#endif
-#ifndef EESREFID
-#define EESREFID "MSF\0" /* String to identify the clock */
-#endif
-#ifndef EESHSREFID
-#define EESHSREFID (0x7f7f0000 | ((REFCLK_MSF_EES) << 8)) /* Numeric refid */
-#endif
-
-/* Description of clock */
-#define EESDESCRIPTION "EES M201 MSF Receiver"
-
-/* Speed we run the clock port at. If this is changed the UARTDELAY
- * value should be recomputed to suit.
- */
-#ifndef SPEED232
-#define SPEED232 B9600 /* 9600 baud */
-#endif
-
-/* What is the inherent delay for this mode of working, i.e. when is the
- * data time stamped.
- */
-#define SAFETY_SHIFT 10 /* Split the shift to avoid overflow */
-#define BITS_TO_L_FP(bits, baud) \
- (((((bits)*2 +1) << (FRACTION_PREC-SAFETY_SHIFT)) / (2*baud)) << SAFETY_SHIFT)
-#define INH_DELAY_CBREAK BITS_TO_L_FP(119, 9600)
-#define INH_DELAY_PPS BITS_TO_L_FP( 0, 9600)
-
-#ifndef STREAM_PP1
-#define STREAM_PP1 "ppsclocd\0<-- patch space for module name1 -->"
-#endif
-#ifndef STREAM_PP2
-#define STREAM_PP2 "ppsclock\0<-- patch space for module name2 -->"
-#endif
-
-/* Offsets of the bytes of the serial line code. The clock gives
- * local time with a GMT/BST indication. The EESM_ definitions
- * give offsets into ees->lastcode.
- */
-#define EESM_CSEC 0 /* centiseconds - always zero in our clock */
-#define EESM_SEC 1 /* seconds in BCD */
-#define EESM_MIN 2 /* minutes in BCD */
-#define EESM_HOUR 3 /* hours in BCD */
-#define EESM_DAYWK 4 /* day of week (Sun = 0 etc) */
-#define EESM_DAY 5 /* day of month in BCD */
-#define EESM_MON 6 /* month in BCD */
-#define EESM_YEAR 7 /* year MOD 100 in BCD */
-#define EESM_LEAP 8 /* 0x0f if leap year, otherwise zero */
-#define EESM_BST 9 /* 0x03 if BST, 0x00 if GMT */
-#define EESM_MSFOK 10 /* 0x3f if radio good, otherwise zero */
- /* followed by a frame alignment byte (0xff) /
- / which is not put into the lastcode buffer*/
-
-/* Length of the serial time code, in characters. The first length
- * is less the frame alignment byte.
- */
-#define LENEESPRT (EESM_MSFOK+1)
-#define LENEESCODE (LENEESPRT+1)
-
-/* Code state. */
-#define EESCS_WAIT 0 /* waiting for start of timecode */
-#define EESCS_GOTSOME 1 /* have an incomplete time code buffered */
-
-/* Default fudge factor and character to receive */
-#define DEFFUDGETIME 0 /* Default user supplied fudge factor */
-#ifndef DEFOSTIME
-#define DEFOSTIME 0 /* Default OS delay -- passed by Make ? */
-#endif
-#define DEFINHTIME INH_DELAY_PPS /* inherent delay due to sample point*/
-
-/* Limits on things. Reduce the number of samples to SAMPLEREDUCE by median
- * elimination. If we're running with an accurate clock, chose the BESTSAMPLE
- * as the estimated offset, otherwise average the remainder.
- */
-#define FULLSHIFT 6 /* NCODES root 2 */
-#define NCODES (1<< FULLSHIFT) /* 64 */
-#define REDUCESHIFT (FULLSHIFT -1) /* SAMPLEREDUCE root 2 */
-
-/* Towards the high ( Why ?) end of half */
-#define BESTSAMPLE ((samplereduce * 3) /4) /* 24 */
-
-/* Leap hold time. After a leap second the clock will no longer be
- * reliable until it resynchronizes. Hope 40 minutes is enough. */
-#define EESLEAPHOLD (40 * 60)
-
-#define EES_STEP_F (1 << 24) /* the receiver steps in units of about 4ms */
-#define EES_STEP_F_GRACE (EES_STEP_F/8) /*Allow for slop of 1/8 which is .5ms*/
-#define EES_STEP_NOTE (1 << 21)/* Log any unexpected jumps, say .5 ms .... */
-#define EES_STEP_NOTES 50 /* Only do a limited number */
-#define MAX_STEP 16 /* Max number of steps to remember */
-
-/* debug is a bit mask of debugging that is wanted */
-#define DB_SYSLOG_SMPLI 0x0001
-#define DB_SYSLOG_SMPLE 0x0002
-#define DB_SYSLOG_SMTHI 0x0004
-#define DB_SYSLOG_NSMTHE 0x0008
-#define DB_SYSLOG_NSMTHI 0x0010
-#define DB_SYSLOG_SMTHE 0x0020
-#define DB_PRINT_EV 0x0040
-#define DB_PRINT_CDT 0x0080
-#define DB_PRINT_CDTC 0x0100
-#define DB_SYSLOG_KEEPD 0x0800
-#define DB_SYSLOG_KEEPE 0x1000
-#define DB_LOG_DELTAS 0x2000
-#define DB_PRINT_DELTAS 0x4000
-#define DB_LOG_AWAITMORE 0x8000
-#define DB_LOG_SAMPLES 0x10000
-#define DB_NO_PPS 0x20000
-#define DB_INC_PPS 0x40000
-#define DB_DUMP_DELTAS 0x80000
-
-struct eesunit { /* EES unit control structure. */
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp reftime; /* reference time */
- l_fp lastsampletime; /* time as in txt from last EES msg */
- l_fp arrvtime; /* Time at which pkt arrived */
- l_fp codeoffsets[NCODES]; /* the time of arrival of 232 codes */
- l_fp offset; /* chosen offset (for clkbug) */
- l_fp lowoffset; /* lowest sample offset (for clkbug) */
- l_fp highoffset; /* highest " " (for clkbug) */
- char lastcode[LENEESCODE+6]; /* last time code we received */
- u_long lasttime; /* last time clock heard from */
- u_long clocklastgood; /* last time good radio seen */
- u_char lencode; /* length of code in buffer */
- u_char nsamples; /* number of samples we've collected */
- u_char codestate; /* state of 232 code reception */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- char tz; /* timezone from clock */
- u_char ttytype; /* method used */
- u_char dump_vals; /* Should clock values be dumped */
- u_char usealldata; /* Use ALL samples */
- u_short day; /* day of year from last code */
- u_long yearstart; /* start of current year */
- u_long leaphold; /* time of leap hold expiry */
- u_long badformat; /* number of bad format codes */
- u_long baddata; /* number of invalid time codes */
- u_long timestarted; /* time we started this */
- long last_pps_no; /* The serial # of the last PPS */
- char fix_pending; /* Is a "sync to time" pending ? */
- /* Fine tuning - compensate for 4 mS ramping .... */
- l_fp last_l; /* last time stamp */
- u_char last_steps[MAX_STEP]; /* Most recent n steps */
- int best_av_step; /* Best guess at average step */
- char best_av_step_count; /* # of steps over used above */
- char this_step; /* Current pos in buffer */
- int last_step_late; /* How late the last step was (0-59) */
- long jump_fsecs; /* # of fractions of a sec last jump */
- u_long last_step; /* time of last step */
- int last_step_secs; /* Number of seconds in last step */
- int using_ramp; /* 1 -> noemal, -1 -> over stepped */
-};
-#define last_sec last_l.l_ui
-#define last_sfsec last_l.l_f
-#define this_uisec ((ees->arrvtime).l_ui)
-#define this_sfsec ((ees->arrvtime).l_f)
-#define msec(x) ((x) / (1<<22))
-#define LAST_STEPS (sizeof ees->last_steps / sizeof ees->last_steps[0])
-#define subms(x) ((((((x < 0) ? (-(x)) : (x)) % (1<<22))/2) * 625) / (1<<(22 -5)))
-
-/* Bitmask for what methods to try to use -- currently only PPS enabled */
-#define T_CBREAK 1
-#define T_PPS 8
-/* macros to test above */
-#define is_cbreak(x) ((x)->ttytype & T_CBREAK)
-#define is_pps(x) ((x)->ttytype & T_PPS)
-#define is_any(x) ((x)->ttytype)
-
-#define CODEREASON 20 /* reason codes */
-
-/* Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back. */
-static struct eesunit *eesunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/* Keep the fudge factors separately so they can be set even
- * when no clock is configured. */
-static l_fp inherent_delay[MAXUNITS]; /* when time stamp is taken */
-static l_fp fudgefactor[MAXUNITS]; /* fudgetime1 */
-static l_fp os_delay[MAXUNITS]; /* fudgetime2 */
-static l_fp offset_fudge[MAXUNITS]; /* Sum of above */
-static u_char stratumtouse[MAXUNITS];
-static u_char sloppyclockflag[MAXUNITS];
-
-static int deltas[60];
-
-static l_fp acceptable_slop; /* = { 0, 1 << (FRACTION_PREC -2) }; */
-static l_fp onesec; /* = { 1, 0 }; */
-
-/* Imported from the timer module */
-extern u_long current_time;
-
-#ifdef DEBUG
-static int debug;
-#endif
-
-#ifndef DUMP_BUF_SIZE /* Size of buffer to be used by dump_buf */
-#define DUMP_BUF_SIZE 10112
-#endif
-
-/* ees_reset - reset the count back to zero */
-#define ees_reset(ees) (ees)->nsamples = 0; \
- (ees)->codestate = EESCS_WAIT
-
-/* ees_event - record and report an event */
-#define ees_event(ees, evcode) if ((ees)->status != (u_char)(evcode)) \
- ees_report_event((ees), (evcode))
-
-/* Find the precision of the system clock by reading it */
-#define USECS 1000000
-#define MINSTEP 5 /* some systems increment uS on each call */
-#define MAXLOOPS (USECS/9)
-static int ees_get_precision()
-{
- struct timeval tp;
- struct timezone tzp;
- long last;
- int i;
- long diff;
- long val;
- gettimeofday(&tp, &tzp);
-
- last = tp.tv_usec;
- for (i=0; i< 100000; i++) {
- gettimeofday(&tp, &tzp);
- diff = tp.tv_usec - last;
- if (diff < 0) diff += USECS;
- if (diff > MINSTEP) break;
- last = tp.tv_usec;
- }
- syslog(LOG_INFO,
- "I: ees: precision calculation given %duS after %d loop%s",
- diff, i, (i==1) ? "" : "s");
-
- if (i == 0) return -20 /* assume 1uS */;
- if (i >= MAXLOOPS) return EESPRECISION /* Lies ! */;
- for (i=0, val=USECS; val > 0; i--, val /= 2) if (diff > val) return i;
- return EESPRECISION /* Lies ! */;
-}
-
-static void dump_buf(coffs, from, to, text)
-l_fp *coffs;
-int from;
-int to;
-char *text;
-{
- char buff[DUMP_BUF_SIZE + 80];
- int i;
- register char *ptr = buff;
- sprintf(ptr, text);
- for (i=from; i<to; i++)
- { while (*ptr) ptr++;
- if ((ptr-buff) > DUMP_BUF_SIZE) syslog(LOG_DEBUG, "D: %s", ptr=buff);
- sprintf(ptr, " %06d", ((int)coffs[i].l_f) / 4295);
- }
- syslog(LOG_DEBUG, "D: %s", buff);
-}
-
-/* msfees_init - initialize internal ees driver data */
-static void msfees_init()
-{
- register int i;
- /* Just zero the data arrays */
- memset((char *)eesunits, 0, sizeof eesunits);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- acceptable_slop.l_ui = 0;
- acceptable_slop.l_uf = 1 << (FRACTION_PREC -2);
-
- onesec.l_ui = 1;
- onesec.l_uf = 0;
-
- /* Initialize fudge factors to default. */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor[i].l_ui = 0;
- fudgefactor[i].l_uf = DEFFUDGETIME;
- os_delay[i].l_ui = 0;
- os_delay[i].l_uf = DEFOSTIME;
- inherent_delay[i].l_ui = 0;
- inherent_delay[i].l_uf = DEFINHTIME;
- offset_fudge[i] = os_delay[i];
- L_ADD(&offset_fudge[i], &fudgefactor[i]);
- L_ADD(&offset_fudge[i], &inherent_delay[i]);
- stratumtouse[i] = 0;
- sloppyclockflag[i] = 0;
- }
-}
-
-
-/* msfees_start - open the EES devices and initialize data for processing */
-static int msfees_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct eesunit *ees;
- register int i;
- int fd232 = -1;
- char eesdev[20];
- struct termios ttyb, *ttyp;
- static void ees_receive();
- extern int io_addclock();
- extern void io_closeclock();
- extern char *emalloc();
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit number %d invalid (max %d)",
- unit, MAXUNITS-1);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "ees clock: unit number %d in use", unit);
- return 0;
- }
-
- /* Unit okay, attempt to open the devices. We do them both at
- * once to make sure we can */
- (void) sprintf(eesdev, EES232, unit);
-
- fd232 = open(eesdev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "ees clock: open of %s failed: %m", eesdev);
- return 0;
- }
-
-#ifdef TIOCEXCL
- /* Set for exclusive use */
- if (ioctl(fd232, TIOCEXCL, (char *)0) < 0) {
- syslog(LOG_ERR, "ees clock: ioctl(%s, TIOCEXCL): %m", eesdev);
- goto screwed;
- }
-#endif
-
- /* STRIPPED DOWN VERSION: Only PPS CD is supported at the moment */
-
- /* Set port characteristics. If we don't have a STREAMS module or
- * a clock line discipline, cooked mode is just usable, even though it
- * strips the top bit. The only EES byte which uses the top
- * bit is the year, and we don't use that anyway. If we do
- * have the line discipline, we choose raw mode, and the
- * line discipline code will block up the messages.
- */
-
- /* STIPPED DOWN VERSION: Only PPS CD is supported at the moment */
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR, "msfees_start: tcgetattr(%s): %m", eesdev);
- goto screwed;
- }
-
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_oflag = 0;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR, "msfees_start: tcsetattr(%s): %m", eesdev);
- goto screwed;
- }
-
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR, "msfees_start: tcflush(%s): %m", eesdev);
- goto screwed;
- }
-
- inherent_delay[unit].l_uf = INH_DELAY_PPS;
-
- /* offset fudge (how *late* the timestamp is) = fudge + os delays */
- offset_fudge[unit] = os_delay[unit];
- L_ADD(&offset_fudge[unit], &fudgefactor[unit]);
- L_ADD(&offset_fudge[unit], &inherent_delay[unit]);
-
- /* Looks like this might succeed. Find memory for the structure.
- * Look to see if there are any unused ones, if not we malloc() one.
- */
- if (eesunits[unit] != 0) /* The one we want is okay */
- ees = eesunits[unit];
- else {
- /* Look for an unused, but allocated struct */
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && eesunits[i] != 0)
- break;
- }
-
- if (i < MAXUNITS) { /* Reclaim this one */
- ees = eesunits[i];
- eesunits[i] = 0;
- } /* no spare -- make a new one */
- else ees = (struct eesunit *) emalloc(sizeof(struct eesunit));
- }
- memset((char *)ees, 0, sizeof(struct eesunit));
- eesunits[unit] = ees;
-
- /* Set up the structures */
- ees->peer = peer;
- ees->unit = (u_char)unit;
- ees->timestarted= current_time;
- ees->ttytype = 0;
- ees->io.clock_recv= ees_receive;
- ees->io.srcclock= (caddr_t)ees;
- ees->io.datalen = 0;
- ees->io.fd = fd232;
-
- /* Okay. Push one of the two (linked into the kernel, or dynamically
- * loaded) STREAMS module, and give it to the I/O code to start
- * receiving stuff.
- */
-
- {
- int rc1;
- /* Pop any existing onews first ... */
- while (ioctl(fd232, I_POP, 0 ) >= 0) ;
-
- /* Now try pushing either of the possible modules */
- if ((rc1=ioctl(fd232, I_PUSH, STREAM_PP1)) < 0 &&
- ioctl(fd232, I_PUSH, STREAM_PP2) < 0) {
- syslog(LOG_ERR,
- "ees clock: Push of `%s' and `%s' to %s failed %m",
- STREAM_PP1, STREAM_PP2, eesdev);
- goto screwed;
- }
- else {
- syslog(LOG_INFO, "I: ees clock: PUSHed %s on %s",
- (rc1 >= 0) ? STREAM_PP1 : STREAM_PP2, eesdev);
- ees->ttytype |= T_PPS;
- }
- }
-
- /* Add the clock */
- if (!io_addclock(&ees->io)) {
- /* Oh shit. Just close and return. */
- syslog(LOG_ERR, "ees clock: io_addclock(%s): %m", eesdev);
- goto screwed;
- }
-
-
- /* All done. Initialize a few random peer variables, then
- * return success. */
- peer->precision = ees_get_precision();
- peer->stratum = stratumtouse[unit];
- peer->rootdelay = 0; /* ++++ */
- peer->rootdispersion = 0; /* ++++ */
- if (stratumtouse[unit] <= 1) {
- memmove((char *)&peer->refid, EESREFID, 4);
- if (unit > 0 && unit < 10)
- ((char *)&peer->refid)[3] = '0' + unit;
- } else {
- peer->refid = htonl(EESHSREFID);
- }
- unitinuse[unit] = 1;
- syslog(LOG_ERR, "ees clock: %s OK on %d", eesdev, unit);
- return (1);
-
-screwed:
- if (fd232 != -1)
- (void) close(fd232);
- return (0);
-}
-
-
-/* msfees_shutdown - shut down a EES clock */
-static void msfees_shutdown(unit)
- int unit;
-{
- register struct eesunit *ees;
- extern void io_closeclock();
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "ees clock: INTERNAL ERROR, unit number %d invalid (max %d)",
- unit, MAXUNITS);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR,
- "ees clock: INTERNAL ERROR, unit number %d not in use", unit);
- return;
- }
-
- /* Tell the I/O module to turn us off. We're history. */
- ees = eesunits[unit];
- io_closeclock(&ees->io);
- unitinuse[unit] = 0;
-}
-
-
-/* ees_report_event - note the occurance of an event */
-static void ees_report_event(ees, code)
- struct eesunit *ees;
- int code;
-{
- if (ees->status != (u_char)code) {
- ees->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- ees->lastevent = (u_char)code;
- /* Should report event to trap handler in here.
- * Soon...
- */
- }
-}
-
-
-/* ees_receive - receive data from the serial interface on an EES clock */
-static void ees_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int n_sample;
- register int day;
- register struct eesunit *ees;
- register u_char *dpt; /* Data PoinTeR: move along ... */
- register u_char *dpend; /* Points just *after* last data char */
- register char *cp;
- l_fp tmp;
- static void ees_process();
- int call_pps_sample = 0;
- l_fp pps_arrvstamp;
- int sincelast;
- int pps_step = 0;
- int suspect_4ms_step = 0;
- struct ppsclockev ppsclockev;
- long *ptr = (long *) &ppsclockev;
- extern errno;
- int rc;
-
- /* Get the clock this applies to and a pointer to the data */
- ees = (struct eesunit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
- dpend = dpt + rbufp->recv_length;
- if ((debug & DB_LOG_AWAITMORE) && (rbufp->recv_length != LENEESCODE))
- printf("[%d] ", rbufp->recv_length);
-
- /* Check out our state and process appropriately */
- switch (ees->codestate) {
- case EESCS_WAIT:
- /* Set an initial guess at the timestamp as the recv time.
- * If just running in CBREAK mode, we can't improve this.
- * If we have the CLOCK Line Discipline, PPSCD, or sime such,
- * then we will do better later ....
- */
- ees->arrvtime = rbufp->recv_time;
- ees->codestate = EESCS_GOTSOME;
- ees->lencode = 0;
- /*FALLSTHROUGH*/
-
- case EESCS_GOTSOME:
- cp = &(ees->lastcode[ees->lencode]);
-
- /* Gobble the bytes until the final (possibly stripped) 0xff */
- while (dpt < dpend && (*dpt & 0x7f) != 0x7f) {
- *cp++ = (char)*dpt++;
- ees->lencode++;
- /* Oh dear -- too many bytes .. */
- if (ees->lencode > LENEESPRT) {
- syslog(LOG_INFO,
-"I: ees clock: %d + %d > %d [%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x]",
- ees->lencode, dpend - dpt, LENEESPRT,
-#define D(x) (ees->lastcode[x])
- D(0), D(1), D(2), D(3), D(4), D(5), D(6),
- D(7), D(8), D(9), D(10), D(11), D(12));
-#undef D
- ees->badformat++;
- ees->reason = CODEREASON + 1;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
- }
- /* Gave up because it was end of the buffer, rather than ff */
- if (dpt == dpend) {
- /* Incomplete. Wait for more. */
- if (debug & DB_LOG_AWAITMORE) syslog(LOG_INFO,
- "I: ees clock %d: %d == %d: await more",
- ees->unit, dpt, dpend);
- return;
- }
-
- /* This shouldn't happen ... ! */
- if ((*dpt & 0x7f) != 0x7f) {
- syslog(LOG_INFO, "I: ees clock: %0x & 0x7f != 0x7f", *dpt);
- ees->badformat++;
- ees->reason = CODEREASON + 2;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* Skip the 0xff */
- dpt++;
-
- /* Finally, got a complete buffer. Mainline code will
- * continue on. */
- cp = ees->lastcode;
- break;
-
- default:
- syslog(LOG_ERR, "ees clock: INTERNAL ERROR: %d state %d",
- ees->unit, ees->codestate);
- ees->reason = CODEREASON + 5;
- ees_event(ees, CEVNT_FAULT);
- ees_reset(ees);
- return;
- }
-
- /* Boy! After all that crap, the lastcode buffer now contains
- * something we hope will be a valid time code. Do length
- * checks and sanity checks on constant data.
- */
- ees->codestate = EESCS_WAIT;
- ees->lasttime = current_time;
- if (ees->lencode != LENEESPRT) {
- ees->badformat++;
- ees->reason = CODEREASON + 6;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- cp = ees->lastcode;
-
- /* Check that centisecond is zero */
- if (cp[EESM_CSEC] != 0) {
- ees->baddata++;
- ees->reason = CODEREASON + 7;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* Check flag formats */
- if (cp[EESM_LEAP] != 0 && cp[EESM_LEAP] != 0x0f) {
- ees->badformat++;
- ees->reason = CODEREASON + 8;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- if (cp[EESM_BST] != 0 && cp[EESM_BST] != 0x03) {
- ees->badformat++;
- ees->reason = CODEREASON + 9;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- if (cp[EESM_MSFOK] != 0 && cp[EESM_MSFOK] != 0x3f) {
- ees->badformat++;
- ees->reason = CODEREASON + 10;
- ees_event(ees, CEVNT_BADREPLY);
- ees_reset(ees);
- return;
- }
-
- /* So far, so good. Compute day, hours, minutes, seconds,
- * time zone. Do range checks on these.
- */
-
-#define bcdunpack(val) ( (((val)>>4) & 0x0f) * 10 + ((val) & 0x0f) )
-#define istrue(x) ((x)?1:0)
-
- ees->second = bcdunpack(cp[EESM_SEC]); /* second */
- ees->minute = bcdunpack(cp[EESM_MIN]); /* minute */
- ees->hour = bcdunpack(cp[EESM_HOUR]); /* hour */
-
- day = bcdunpack(cp[EESM_DAY]); /* day of month */
-
- switch (bcdunpack(cp[EESM_MON])) { /* month */
-
- /* Add in lengths of all previous months. Add one more
- if it is a leap year and after February.
- */
- case 12: day += NOV; /*FALLSTHROUGH*/
- case 11: day += OCT; /*FALLSTHROUGH*/
- case 10: day += SEP; /*FALLSTHROUGH*/
- case 9: day += AUG; /*FALLSTHROUGH*/
- case 8: day += JUL; /*FALLSTHROUGH*/
- case 7: day += JUN; /*FALLSTHROUGH*/
- case 6: day += MAY; /*FALLSTHROUGH*/
- case 5: day += APR; /*FALLSTHROUGH*/
- case 4: day += MAR; /*FALLSTHROUGH*/
- case 3: day += FEB;
- if (istrue(cp[EESM_LEAP])) day++; /*FALLSTHROUGH*/
- case 2: day += JAN; /*FALLSTHROUGH*/
- case 1: break;
- default: ees->baddata++;
- ees->reason = CODEREASON + 11;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
-
- ees->day = day;
-
- /* Get timezone. The clocktime routine wants the number
- * of hours to add to the delivered time to get UT.
- * Currently -1 if BST flag set, 0 otherwise. This
- * is the place to tweak things if double summer time
- * ever happens.
- */
- ees->tz = istrue(cp[EESM_BST]) ? -1 : 0;
-
- if (ees->day > 366 || ees->day < 1 ||
- ees->hour > 23 || ees->minute > 59 || ees->second > 59) {
- ees->baddata++;
- ees->reason = CODEREASON + 12;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
-
- n_sample = ees->nsamples;
-
- /* Now, compute the reference time value: text -> tmp.l_ui */
- if (!clocktime(ees->day, ees->hour, ees->minute, ees->second,
- ees->tz, rbufp->recv_time.l_ui, &ees->yearstart,
- &tmp.l_ui)) {
- ees->baddata++;
- ees->reason = CODEREASON + 13;
- ees_event(ees, CEVNT_BADDATE);
- ees_reset(ees);
- return;
- }
- tmp.l_uf = 0;
-
- /* DON'T use ees->arrvtime -- it may be < reftime */
- ees->lastsampletime = tmp;
-
- /* If we are synchronised to the radio, update the reference time.
- * Also keep a note of when clock was last good.
- */
- if (istrue(cp[EESM_MSFOK])) {
- ees->reftime = tmp;
- ees->clocklastgood = current_time;
- }
-
-
- /* Compute the offset. For the fractional part of the
- * offset we use the expected delay for the message.
- */
- ees->codeoffsets[n_sample].l_ui = tmp.l_ui;
- ees->codeoffsets[n_sample].l_uf = 0;
-
- /* Number of seconds since the last step */
- sincelast = this_uisec - ees->last_step;
-
- memset(&ppsclockev, 0, sizeof ppsclockev);
-
- rc = ioctl(ees->io.fd, CIOGETEV, (char *) &ppsclockev);
- if (debug & DB_PRINT_EV) fprintf(stderr,
- "[%x] CIOGETEV u%d %d (%x %d) gave %d (%d): %08x %08x %d\n",
- DB_PRINT_EV, ees->unit, ees->io.fd, CIOGETEV, is_pps(ees),
- rc, errno, ptr[0], ptr[1], ptr[2]);
-
- /* If we managed to get the time of arrival, process the info */
- if (rc >= 0) {
- int conv = -1;
- pps_step = ppsclockev.serial - ees->last_pps_no;
-
- /* Possible that PPS triggered, but text message didn't */
- if (pps_step == 2) syslog(LOG_ERR, "pps step = 2 @ %02d", ees->second);
- if (pps_step == 2 && ees->second == 1) suspect_4ms_step |= 1;
- if (pps_step == 2 && ees->second == 2) suspect_4ms_step |= 4;
-
- /* allow for single loss of PPS only */
- if (pps_step != 1 && pps_step != 2)
- fprintf(stderr, "PPS step: %d too far off %d (%d)\n",
- ppsclockev.serial, ees->last_pps_no, pps_step);
- else if (!buftvtots((char *) &(ppsclockev.tv), &pps_arrvstamp))
- fprintf(stderr, "buftvtots failed\n");
- else { /* if ((ABS(time difference) - 0.25) < 0)
- * then believe it ...
- */
- l_fp diff;
- diff = pps_arrvstamp;
- conv = 0;
- L_SUB(&diff, &ees->arrvtime);
-if (debug & DB_PRINT_CDT) printf("[%x] Have %x.%08x and %x.%08x -> %x.%08x @ %s",
- DB_PRINT_CDT, ees->arrvtime.l_ui, ees->arrvtime.l_uf,
- pps_arrvstamp.l_ui, pps_arrvstamp.l_uf,
- diff.l_ui, diff.l_uf,
- ctime(&(ppsclockev.tv.tv_sec)));
- if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf);
- L_SUB(&diff, &acceptable_slop);
- if (L_ISNEG(&diff)) { /* AOK -- pps_sample */
- ees->arrvtime = pps_arrvstamp;
- conv++;
- call_pps_sample++;
- }
- /* Some loss of some signals around sec = 1 */
- else if (ees->second == 1) {
- diff = pps_arrvstamp;
- L_ADD(&diff, &onesec);
- L_SUB(&diff, &ees->arrvtime);
- if (L_ISNEG(&diff)) M_NEG(diff.l_ui, diff.l_uf);
- L_SUB(&diff, &acceptable_slop);
-syslog(LOG_ERR, "Have sec==1 slip %ds a=%08x-p=%08x -> %x.%08x (u=%d) %s",
- pps_arrvstamp.l_ui - ees->arrvtime.l_ui,
- pps_arrvstamp.l_uf,
- ees->arrvtime.l_uf,
- diff.l_ui, diff.l_uf,
- ppsclockev.tv.tv_usec,
- ctime(&(ppsclockev.tv.tv_sec)));
- if (L_ISNEG(&diff)) { /* AOK -- pps_sample */
- suspect_4ms_step |= 2;
- ees->arrvtime = pps_arrvstamp;
- L_ADD(&ees->arrvtime, &onesec);
- conv++;
- call_pps_sample++;
- }
- }
- }
- ees->last_pps_no = ppsclockev.serial;
- if (debug & DB_PRINT_CDTC) printf(
- "[%x] %08x %08x %d u%d (%d %d)\n",
- DB_PRINT_CDTC, pps_arrvstamp.l_ui,
- pps_arrvstamp.l_uf, conv, ees->unit,
- call_pps_sample, pps_step);
- }
-
- /* See if there has been a 4ms jump at a minute boundry */
- { l_fp delta;
-#define delta_isec delta.l_ui
-#define delta_ssec delta.l_i
-#define delta_sfsec delta.l_f
- long delta_f_abs;
-
- delta.l_i = ees->arrvtime.l_i;
- delta.l_f = ees->arrvtime.l_f;
-
- L_SUB(&delta, &ees->last_l);
- delta_f_abs = delta_sfsec;
- if (delta_f_abs < 0) delta_f_abs = -delta_f_abs;
-
- /* Dump the deltas each minute */
- if (debug & DB_DUMP_DELTAS)
- { if (0 <= ees->second &&
- ees->second < ((sizeof deltas) / (sizeof deltas[0]))) deltas[ees->second] = delta_sfsec;
- /* Dump on second 1, as second 0 sometimes missed */
- if (ees->second == 1) {
- char text[16 * ((sizeof deltas) / (sizeof deltas[0]))];
- char *ptr=text;
- int i;
- for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) {
- sprintf(ptr, " %d.%04d",
- msec(deltas[i]), subms(deltas[i]));
- while (*ptr) ptr++;
- }
- syslog(LOG_ERR, "Deltas: %d.%04d<->%d.%04d: %s",
- msec(EES_STEP_F - EES_STEP_F_GRACE), subms(EES_STEP_F - EES_STEP_F_GRACE),
- msec(EES_STEP_F + EES_STEP_F_GRACE), subms(EES_STEP_F + EES_STEP_F_GRACE),
- text+1);
- for (i=0; i<((sizeof deltas) / (sizeof deltas[0])); i++) deltas[i] = 0;
- }
- }
-
- /* Lets see if we have a 4 mS step at a minute boundaary */
- if ( ((EES_STEP_F - EES_STEP_F_GRACE) < delta_f_abs) &&
- (delta_f_abs < (EES_STEP_F + EES_STEP_F_GRACE)) &&
- (ees->second == 0 || ees->second == 1 || ees->second == 2) &&
- (sincelast < 0 || sincelast > 122)
- ) { /* 4ms jump at min boundry */
- int old_sincelast;
- int count=0;
- int sum = 0;
- /* Yes -- so compute the ramp time */
- if (ees->last_step == 0) sincelast = 0;
- old_sincelast = sincelast;
-
- /* First time in, just set "ees->last_step" */
- if(ees->last_step) {
- int other_step = 0;
- int third_step = 0;
- int this_step = (sincelast + (60 /2)) / 60;
- int p_step = ees->this_step;
- int p;
- ees->last_steps[p_step] = this_step;
- p= p_step;
- p_step++;
- if (p_step >= LAST_STEPS) p_step = 0;
- ees->this_step = p_step;
- /* Find the "average" interval */
- while (p != p_step) {
- int this = ees->last_steps[p];
- if (this == 0) break;
- if (this != this_step) {
- if (other_step == 0 && (
- this== (this_step +2) ||
- this== (this_step -2) ||
- this== (this_step +1) ||
- this== (this_step -1)))
- other_step = this;
- if (other_step != this) {
- int delta = (this_step - other_step);
- if (delta < 0) delta = - delta;
- if (third_step == 0 && (
- (delta == 1) ? (
- this == (other_step +1) ||
- this == (other_step -1) ||
- this == (this_step +1) ||
- this == (this_step -1))
- :
- (
- this == (this_step + other_step)/2
- )
- )) third_step = this;
- if (third_step != this) break;
- }
- }
- sum += this;
- p--;
- if (p < 0) p += LAST_STEPS;
- count++;
- }
-syslog(LOG_ERR, "MSF%d: %d: This=%d (%d), other=%d/%d, sum=%d, count=%d, pps_step=%d, suspect=%x", ees->unit, p, ees->last_steps[p], this_step, other_step, third_step, sum, count, pps_step, suspect_4ms_step);
- if (count != 0) sum = ((sum * 60) + (count /2)) / count;
-#define SV(x) (ees->last_steps[(x + p_step) % LAST_STEPS])
-syslog(LOG_ERR, "MSF%d: %x steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d",
- ees->unit, suspect_4ms_step, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6),
- SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15));
-printf("MSF%d: steps %d: %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d %d\n",
- ees->unit, p_step, SV(0), SV(1), SV(2), SV(3), SV(4), SV(5), SV(6),
- SV(7), SV(8), SV(9), SV(10), SV(11), SV(12), SV(13), SV(14), SV(15));
-#undef SV
- ees->jump_fsecs = delta_sfsec;
- ees->using_ramp = 1;
- if (sincelast > 170)
- ees->last_step_late += sincelast - ((sum) ? sum : ees->last_step_secs);
- else ees->last_step_late = 30;
- if (ees->last_step_late < -60 || ees->last_step_late > 120) ees->last_step_late = 30;
- if (ees->last_step_late < 0) ees->last_step_late = 0;
- if (ees->last_step_late >= 60) ees->last_step_late = 59;
- sincelast = 0;
- }
- else { /* First time in -- just save info */
- ees->last_step_late = 30;
- ees->jump_fsecs = delta_sfsec;
- ees->using_ramp = 1;
- sum = 4 * 60;
- }
- ees->last_step = this_uisec;
-printf("MSF%d: d=%3d.%04d@%d :%d:%d:$%d:%d:%d\n",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs);
-syslog(LOG_ERR, "MSF%d: d=%3d.%04d@%d :%d:%d:%d:%d:%d",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, old_sincelast, ees->last_step_late, count, sum, ees->last_step_secs);
- if (sum) ees->last_step_secs = sum;
- }
- /* OK, so not a 4ms step at a minute boundry */
- else {
- if (suspect_4ms_step) syslog(LOG_ERR,
- "MSF%d: suspect = %x, but delta of %d.%04d [%d.%04d<%d.%04d<%d.%04d: %d %d]",
- ees->unit, suspect_4ms_step, msec(delta_sfsec), subms(delta_sfsec),
- msec(EES_STEP_F - EES_STEP_F_GRACE),
- subms(EES_STEP_F - EES_STEP_F_GRACE),
- msec(delta_f_abs),
- subms(delta_f_abs),
- msec(EES_STEP_F + EES_STEP_F_GRACE),
- subms(EES_STEP_F + EES_STEP_F_GRACE),
- ees->second,
- sincelast);
- if ((delta_f_abs > EES_STEP_NOTE) && ees->last_l.l_i) {
- static ees_step_notes = EES_STEP_NOTES;
- if (ees_step_notes > 0) {
- ees_step_notes--;
-printf("MSF%d: D=%3d.%04d@%02d :%d%s\n",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, sincelast, ees_step_notes ? "" : " -- NO MORE !");
-syslog(LOG_ERR, "MSF%d: D=%3d.%04d@%02d :%d%s",
-ees->unit, msec(delta_sfsec), subms(delta_sfsec), ees->second, (ees->last_step) ? sincelast : -1, ees_step_notes ? "" : " -- NO MORE !");
- }
- }
- }
- }
- ees->last_l = ees->arrvtime;
-
- /* IF we have found that it's ramping
- * && it's within twice the expected ramp period
- * && there is a non zero step size (avoid /0 !)
- * THEN we twiddle things
- */
- if (ees->using_ramp &&
- sincelast < (ees->last_step_secs)*2 &&
- ees->last_step_secs)
- { long sec_of_ramp = sincelast + ees->last_step_late;
- long fsecs;
- l_fp inc;
-
- /* Ramp time may vary, so may ramp for longer than last time */
- if (sec_of_ramp > (ees->last_step_secs + 120))
- sec_of_ramp = ees->last_step_secs;
-
- /* sec_of_ramp * ees->jump_fsecs may overflow 2**32 */
- fsecs = sec_of_ramp * (ees->jump_fsecs / ees->last_step_secs);
-
- if (debug & DB_LOG_DELTAS) syslog(LOG_ERR,
- "[%x] MSF%d: %3d/%03d -> d=%11d (%d|%d)",
- DB_LOG_DELTAS,
- ees->unit, sec_of_ramp, ees->last_step_secs, fsecs,
- pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs);
- if (debug & DB_PRINT_DELTAS) printf(
- "MSF%d: %3d/%03d -> d=%11d (%d|%d)\n",
- ees->unit, sec_of_ramp, ees->last_step_secs, fsecs,
- pps_arrvstamp.l_f, pps_arrvstamp.l_f + fsecs);
-
- /* Must sign extend the result */
- inc.l_i = (fsecs < 0) ? -1 : 0;
- inc.l_f = fsecs;
- if (debug & DB_INC_PPS)
- { L_SUB(&pps_arrvstamp, &inc);
- L_SUB(&ees->arrvtime, &inc);
- }
- else
- { L_ADD(&pps_arrvstamp, &inc);
- L_ADD(&ees->arrvtime, &inc);
- }
- }
- else {
- if (debug & DB_LOG_DELTAS) syslog(LOG_ERR,
- "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x",
- DB_LOG_DELTAS,
- ees->unit, ees->using_ramp,
- sincelast,
- (ees->last_step_secs)*2,
- ees->last_step_secs);
- if (debug & DB_PRINT_DELTAS) printf(
- "[%x] MSF%d: ees->using_ramp=%d, sincelast=%x / %x, ees->last_step_secs=%x\n",
- DB_LOG_DELTAS,
- ees->unit, ees->using_ramp,
- sincelast,
- (ees->last_step_secs)*2,
- ees->last_step_secs);
- }
-
- L_SUB(&ees->arrvtime, &offset_fudge[ees->unit]);
- L_SUB(&pps_arrvstamp, &offset_fudge[ees->unit]);
-
- if (call_pps_sample && !(debug & DB_NO_PPS)) {
- /* Sigh -- it expects its args negated */
- L_NEG(&pps_arrvstamp);
- (void) pps_sample(&pps_arrvstamp);
- }
-
- /* Subtract off the local clock time stamp */
- L_SUB(&ees->codeoffsets[n_sample], &ees->arrvtime);
- if (debug & DB_LOG_SAMPLES) syslog(LOG_ERR,
- "MSF%d: [%x] %d (ees: %d %d) (pps: %d %d)%s",
- ees->unit, DB_LOG_DELTAS, n_sample,
- ees->codeoffsets[n_sample].l_f,
- ees->codeoffsets[n_sample].l_f / 4295,
- pps_arrvstamp.l_f,
- pps_arrvstamp.l_f /4295,
- (debug & DB_NO_PPS) ? " [no PPS]" : "");
-
- if (ees->nsamples++ == NCODES-1) ees_process(ees);
-
- /* Done! */
-}
-
-
-static void set_x(fp_offset)
-l_fp *fp_offset;
-{
- step_systime_real(fp_offset);
-}
-
-
-/* offcompare - auxiliary comparison routine for offset sort */
-
-static int
-offcompare(a, b)
-l_fp *a, *b;
-{
- return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1);
-}
-
-
-/* ees_process - process a pile of samples from the clock */
-static void ees_process(ees)
- struct eesunit *ees;
-{
- static last_samples = -1;
- register int i, j;
- register int noff;
- register l_fp *coffs = ees->codeoffsets;
- l_fp offset, tmp;
- u_fp dispersion; /* ++++ */
- int lostsync, isinsync;
- int samples = ees->nsamples;
- int samplelog;
- int samplereduce = (samples + 1) / 2;
-
- /* Reset things to zero so we don't have to worry later */
- ees_reset(ees);
-
- if (sloppyclockflag[ees->unit]) {
- samplelog = (samples < 2) ? 0 :
- (samples < 5) ? 1 :
- (samples < 9) ? 2 :
- (samples < 17) ? 3 :
- (samples < 33) ? 4 : 5;
- samplereduce = (1 << samplelog);
- }
-
- if (samples != last_samples &&
- ((samples != (last_samples-1)) || samples < 3)) {
- syslog(LOG_ERR, "Samples=%d (%d), samplereduce=%d ....",
- samples, last_samples, samplereduce);
- last_samples = samples;
- }
- if (samples < 1) return;
-
- /* If requested, dump the raw data we have in the buffer */
- if (ees->dump_vals) dump_buf(coffs, 0, samples, "Raw data is:");
-
- /* Sort the offsets, trim off the extremes, then choose one. */
- qsort((char *) coffs, samples, sizeof(l_fp), offcompare);
-
- noff = samples;
- i = 0;
- while ((noff - i) > samplereduce) {
- /* Trim off the sample which is further away
- * from the median. We work this out by doubling
- * the median, subtracting off the end samples, and
- * looking at the sign of the answer, using the
- * identity (c-b)-(b-a) == 2*b-a-c
- */
- tmp = coffs[(noff + i)/2];
- L_ADD(&tmp, &tmp);
- L_SUB(&tmp, &coffs[i]);
- L_SUB(&tmp, &coffs[noff-1]);
- if (L_ISNEG(&tmp)) noff--; else i++;
- }
-
- /* If requested, dump the reduce data we have in the buffer */
- if (ees->dump_vals) dump_buf(coffs, i, noff, "Reduced to:");
-
- /* What we do next depends on the setting of the sloppy clock flag.
- * If it is on, average the remainder to derive our estimate.
- * Otherwise, just pick a representative value from the remaining stuff
- */
- if (sloppyclockflag[ees->unit]) {
- offset.l_ui = offset.l_uf = 0;
- for (j = i; j < noff; j++)
- L_ADD(&offset, &coffs[j]);
- for (j = samplelog; j > 0; j--)
- L_RSHIFTU(&offset);
- }
- else offset = coffs[i+BESTSAMPLE];
-
- /* Compute the dispersion as the difference between the
- * lowest and highest offsets that remain in the
- * consideration list.
- *
- * It looks like MOST clocks have MOD (max error), so halve it !
- */
- tmp = coffs[noff-1];
- L_SUB(&tmp, &coffs[i]);
-#define FRACT_SEC(n) ((1 << 30) / (n/2))
- dispersion = LFPTOFP(&tmp) / 2; /* ++++ */
- if (debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE)) syslog(
- (debug & DB_SYSLOG_SMPLE) ? LOG_ERR : LOG_INFO,
- "I: [%x] Offset=%06d (%d), disp=%06d%s [%d], %d %d=%d %d:%d %d=%d %d",
- debug & (DB_SYSLOG_SMPLI | DB_SYSLOG_SMPLE),
- offset.l_f / 4295, offset.l_f,
- (dispersion * 1526) / 100,
- (sloppyclockflag[ees->unit]) ? " by averaging" : "",
- FRACT_SEC(10) / 4295,
- (coffs[0].l_f) / 4295,
- i,
- (coffs[i].l_f) / 4295,
- (coffs[samples/2].l_f) / 4295,
- (coffs[i+BESTSAMPLE].l_f) / 4295,
- noff-1,
- (coffs[noff-1].l_f) / 4295,
- (coffs[samples-1].l_f) / 4295);
-
- /* Are we playing silly wotsits ?
- * If we are using all data, see if there is a "small" delta,
- * and if so, blurr this with 3/4 of the delta from the last value
- */
- if (ees->usealldata && ees->offset.l_uf) {
- long diff = (long) (ees->offset.l_uf - offset.l_uf);
-
- /* is the delta small enough ? */
- if ((- FRACT_SEC(100)) < diff && diff < FRACT_SEC(100)) {
- int samd = (64 * 4) / samples;
- long new;
- if (samd < 2) samd = 2;
- new = offset.l_uf + ((diff * (samd -1)) / samd);
-
- /* Sign change -> need to fix up int part */
- if ((new & (1 << 31)) !=
- (((long) offset.l_uf) & ( 1 << 31)))
- { syslog(LOG_INFO, "I: %x != %x (%x %x), so add %d",
- new & (1 << 31),
- ((long) offset.l_uf) & ( 1 << 31),
- new, (long) offset.l_uf,
- (new < 0) ? -1 : 1);
- offset.l_ui += (new < 0) ? -1 : 1;
- }
- dispersion /= 4;
- if (debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE)) syslog(
- (debug & DB_SYSLOG_SMTHE) ? LOG_ERR : LOG_INFO,
- "I: [%x] Smooth data: %d -> %d, dispersion now %d",
- debug & (DB_SYSLOG_SMTHI | DB_SYSLOG_SMTHE),
- ((long) offset.l_uf) / 4295, new / 4295,
- (dispersion * 1526) / 100);
- offset.l_uf = (unsigned long) new;
- }
- else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog(
- (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO,
- "[%x] No smooth as delta not %d < %d < %d",
- debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE),
- - FRACT_SEC(100), diff, FRACT_SEC(100));
- }
- else if (debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE)) syslog(
- (debug & DB_SYSLOG_NSMTHE) ? LOG_ERR : LOG_INFO,
- "I: [%x] No smooth as flag=%x and old=%x=%d (%d:%d)",
- debug & (DB_SYSLOG_NSMTHI | DB_SYSLOG_NSMTHE),
- ees->usealldata, ees->offset.l_f, ees->offset.l_uf,
- offset.l_f, ees->offset.l_f - offset.l_f);
-
- /* Collect offset info for debugging info */
- ees->offset = offset;
- ees->lowoffset = coffs[i];
- ees->highoffset = coffs[noff-1];
-
- /* Determine synchronization status. Can be unsync'd either
- * by a report from the clock or by a leap hold.
- *
- * Loss of the radio signal for a short time does not cause
- * us to go unsynchronised, since the receiver keeps quite
- * good time on its own. The spec says 20ms in 4 hours; the
- * observed drift in our clock (Cambridge) is about a second
- * a day, but even that keeps us within the inherent tolerance
- * of the clock for about 15 minutes. Observation shows that
- * the typical "short" outage is 3 minutes, so to allow us
- * to ride out those, we will give it 5 minutes.
- */
- lostsync = current_time - ees->clocklastgood > 300 ? 1 : 0;
- isinsync = (lostsync || ees->leaphold > current_time) ? 0 : 1;
-
- /* Done. Use time of last good, synchronised code as the
- * reference time, and lastsampletime as the receive time.
- */
- if (ees->fix_pending) {
- syslog(LOG_ERR, "MSF%d: fix_pending=%d -> jump %x.%08x\n",
- ees->fix_pending, ees->unit, offset.l_i, offset.l_f);
- ees->fix_pending = 0;
- set_x(&offset);
- L_CLR(&offset);
- }
- refclock_receive(ees->peer,
- &offset,
- 0, /* delay */
- dispersion,
- &ees->reftime,
- &ees->lastsampletime, /* receive time */
- (isinsync) ? 0 : LEAP_NOTINSYNC);
- ees_event(ees, lostsync ? CEVNT_PROP : CEVNT_NOMINAL);
-}
-
-/* msfees_poll - called by the transmit procedure */
-static void msfees_poll(unit, peer)
- int unit;
- char *peer;
-{
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d invalid",
- unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "ees clock poll: INTERNAL: unit %d unused",
- unit);
- return;
- }
-
- ees_process(eesunits[unit]);
-
- if ((current_time - eesunits[unit]->lasttime) > 150)
- ees_event(eesunits[unit], CEVNT_FAULT);
-}
-
-/* msfees_leap - called when a leap second occurs */
-static void msfees_leap()
-{
- register int i;
-
- /* This routine should be entered a few seconds after
- * midnight UTC when a leap second occurs. To ensure we
- * don't believe foolish time from the clock(s) we set a
- * 40 minute hold on them. It shouldn't take anywhere
- * near this amount of time to adjust if the clock is getTING
- * data, but doing anything else is complicated.
- */
- for (i = 0; i < MAXUNITS; i++) if (unitinuse[i])
- eesunits[i]->leaphold = current_time + EESLEAPHOLD;
-}
-
-/* msfees_control - set fudge factors, return statistics */
-static void msfees_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct eesunit *ees = eesunits[unit];
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- os_delay[unit] = in->fudgetime2;
- offset_fudge[unit] = os_delay[unit];
- L_ADD(&offset_fudge[unit], &fudgefactor[unit]);
- L_ADD(&offset_fudge[unit], &inherent_delay[unit]);
- if (in->haveflags & CLK_HAVEVAL1) {
- stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf);
- if (unitinuse[unit]) {
- /* Should actually reselect clock, but
- * will wait for the next timecode
- */
- struct peer *peer = ees->peer;
- peer->stratum = stratumtouse[unit];
- if (stratumtouse[unit] <= 1) {
- memmove((char *)&peer->refid,
- EESREFID, 4);
- if (unit>0 && unit<10)
- ((char *)&peer->refid)[3] =
- '0' + unit;
- }
- else peer->refid = htonl(EESHSREFID);
- }
- }
- if (in->haveflags & CLK_HAVEVAL2) {
- printf("Debug: %x -> %x\n", debug, in->fudgeval2);
- syslog(LOG_ERR, "MSF%d: debug %x -> %x",
- unit, debug, in->fudgeval2);
- debug = in->fudgeval2;
- }
- if (in->haveflags & CLK_HAVEFLAG1) {
- sloppyclockflag[unit] = in->flags & CLK_FLAG1;
- }
- if (in->haveflags & CLK_HAVEFLAG2) {
- ees->fix_pending++;
- /* if (in->flags & CLK_FLAG2 && unitinuse[unit])
- ees->leaphold = 0; */
- }
- if (in->haveflags & CLK_HAVEFLAG3 && unitinuse[unit]) {
- printf("dump_vals: %x -> %x\n", ees->dump_vals, in->flags & CLK_FLAG3);
- ees->dump_vals = in->flags & CLK_FLAG3;
- }
- if (in->haveflags & CLK_HAVEFLAG4 && unitinuse[unit]) {
- ees->usealldata = in->flags & CLK_FLAG4;
- }
- }
-
- if (out != 0) {
- out->type = REFCLK_MSF_EES;
- out->haveflags
- = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEVAL2|CLK_HAVEFLAG1|CLK_HAVEFLAG3|CLK_HAVEFLAG4;
- out->clockdesc = EESDESCRIPTION;
- out->fudgetime1 = fudgefactor[unit];
- out->fudgetime2 = os_delay[unit];
- out->fudgeval1 = (long)stratumtouse[unit];
- /*out->fudgeval2= debug*/;
- memmove((char *)&out->fudgeval2, EESREFID, 4);
- if (unit > 0 && unit < 10)
- ((char *)&out->fudgeval2)[3] = '0' + unit;
- out->flags = sloppyclockflag[unit];
- if (unitinuse[unit]) {
- out->flags |= ees->dump_vals | ees->usealldata;
- out->lencode = ees->lencode;
- out->lastcode = ees->lastcode;
- out->timereset = current_time - ees->timestarted;
- out->polls = 0; /* we don't poll */
- out->noresponse = 0; /* ditto */
- out->badformat = ees->badformat;
- out->baddata = ees->baddata;
- out->lastevent = ees->lastevent;
- out->currentstatus = ees->status;
- } else {
- out->lencode = 0;
- out->lastcode = "";
- out->polls = out->noresponse = 0;
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
- }
- }
-}
-
-
-/* msfees_buginfo - return clock dependent debugging info */
-static void msfees_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct eesunit *ees;
-
- bug->nvalues = bug->ntimes = 0;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "ees clock: unit %d invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- ees = eesunits[unit];
-
- bug->nvalues = 16;
- bug->svalues = 0x0800;
- bug->values[0] = (ees->lasttime) ? current_time - ees->lasttime : 0;
- bug->values[1] = (ees->clocklastgood)?current_time-ees->clocklastgood:0;
- bug->values[2] = (u_long)ees->status;
- bug->values[3] = (u_long)ees->lastevent;
- bug->values[4] = (u_long)ees->reason;
- bug->values[5] = (u_long)ees->nsamples;
- bug->values[6] = (u_long)ees->codestate;
- bug->values[7] = (u_long)ees->day;
- bug->values[8] = (u_long)ees->hour;
- bug->values[9] = (u_long)ees->minute;
- bug->values[10] = (u_long)ees->second;
- bug->values[11] = (u_long)ees->tz;
- bug->values[12] = ees->yearstart;
- bug->values[13] = (ees->leaphold > current_time) ?
- ees->leaphold - current_time : 0;
- bug->values[14] = inherent_delay[unit].l_uf;
- bug->values[15] = offset_fudge[unit].l_uf;
-
- bug->ntimes = 11;
- bug->stimes = 0x3f8;
- bug->times[0] = ees->reftime;
- bug->times[1] = ees->arrvtime;
- bug->times[2] = ees->lastsampletime;
- bug->times[3] = ees->offset;
- bug->times[4] = ees->lowoffset;
- bug->times[5] = ees->highoffset;
- bug->times[6] = inherent_delay[unit];
- bug->times[8] = os_delay[unit];
- bug->times[7] = fudgefactor[unit];
- bug->times[9] = offset_fudge[unit];
- bug->times[10].l_ui = ees->yearstart;
- bug->times[10].l_uf = 0;
-}
-
-struct refclock refclock_msfees = {
- msfees_start, msfees_shutdown, msfees_poll,
- msfees_control, msfees_init, msfees_buginfo, NOFLAGS
-};
-#endif /* defined(REFCLOCK) && defined(MSFEESPPS) && defined(STREAM) */
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c
deleted file mode 100644
index 7cfa3cf..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_mx4200.c
+++ /dev/null
@@ -1,1342 +0,0 @@
-/*
- * This software was developed by the Computer Systems Engineering group
- * at Lawrence Berkeley Laboratory under DARPA contract BG 91-66.
- *
- * Copyright (c) 1992 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. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by the University of
- * California, Lawrence Berkeley Laboratory.
- * 4. The name of the University may not be used to endorse or promote
- * products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED 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.
- */
-
-#if defined(REFCLOCK) && (defined(MX4200) || defined(MX4200CLK) || defined(MX4200PPS))
-
-#if !defined(lint) && !defined(__GNUC__)
-static char rcsid[] =
- "@(#) /src/master/xntp-930612/xntpd/refclock_mx4200.c,v 1.5 1993/06/18 21:19:54 jbj Exp (LBL) ";
-#endif
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_calendar.h"
-#include "ntp_unixtime.h"
-
-#if __STDC__
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(MX4200CLK)
-#include <sys/clkdefs.h>
-#endif /* MX4200CLK */
-#endif /* STREAM */
-
-#include <sys/ppsclock.h>
-
-#include "mx4200.h"
-#include "ntp_stdlib.h"
-
-/*
- * This driver supports the Magnavox Model MX4200 GPS Receiver.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 2 /* max number of mx4200 units */
-#define MX4200232 "/dev/gps%d"
-#define SPEED232 B4800 /* baud */
-
-/*
- * The number of raw samples which we acquire to derive a single estimate.
- */
-#define NSTAMPS 64
-
-/*
- * Radio interface parameters
- */
-#define MX4200PRECISION (-18) /* precision assumed (about 4 us) */
-#define MX4200REFID "GPS" /* reference id */
-#define MX4200DESCRIPTION "Magnavox MX4200 GPS Receiver" /* who we are */
-#define DEFFUDGETIME 0 /* default fudge time (ms) */
-
-/* Leap stuff */
-extern U_LONG leap_hoursfromleap;
-extern U_LONG leap_happened;
-static int leap_debug;
-
-/*
- * mx4200_reset - reset the count back to zero
- */
-#define mx4200_reset(mx4200) \
- do { \
- (mx4200)->nsamples = 0; \
- } while (0)
-
-/*
- * mx4200_event - record and report an event
- */
-#define mx4200_event(mx4200, evcode) \
- do { \
- if ((mx4200)->status != (u_char)(evcode)) \
- mx4200_report_event((mx4200), (evcode)); \
- } while (0)
-
-/*
- * Imported from the timer module
- */
-extern U_LONG current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * MX4200 unit control structure.
- */
-struct mx4200unit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- U_LONG gpssamples[NSTAMPS]; /* the GPS time samples */
- l_fp unixsamples[NSTAMPS]; /* the UNIX time samples */
-
-
- l_fp lastsampletime; /* time of last estimate */
- u_int lastserial; /* last pps serial number */
-#ifdef notdef
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
-#endif
- char lastcode[RX_BUFF_SIZE]; /* last timecode received */
- U_LONG lasttime; /* last time clock heard from */
- u_char nsamples; /* number of samples we've collected */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last abort */
- u_char lencode; /* length of last timecode */
- u_char year; /* year of eternity */
- u_short monthday; /* day of month */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- /*
- * Status tallies
- */
-#ifdef notdef
- U_LONG polls; /* polls sent */
- U_LONG noresponse; /* number of nonresponses */
-#endif
- U_LONG badformat; /* bad format */
- U_LONG baddata; /* bad data */
- U_LONG timestarted; /* time we started this */
-};
-
-/*
- * We demand that consecutive PPS samples are more than 0.995 seconds
- * and less than 1.005 seconds apart.
- */
-#define PPSLODIFF_UI 0 /* 0.900 as an l_fp */
-#define PPSLODIFF_UF 0xe6666610
-
-#define PPSHIDIFF_UI 1 /* 1.100 as an l_fp */
-#define PPSHIDIFF_UF 0x19999990
-
-/*
- * reason codes
- */
-#define PPSREASON 20
-#define CODEREASON 40
-#define PROCREASON 60
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct mx4200unit *mx4200units[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char sloppyclockflag[MAXUNITS];
-static U_LONG refid[MAXUNITS];
-
-static const char pmvxg[] = "PMVXG";
-
-/*
- * Function prototypes
- */
-static void mx4200_init P((void));
-static int mx4200_start P((u_int, struct peer *));
-static void mx4200_shutdown P((int));
-static void mx4200_receive P((struct recvbuf *));
-static void mx4200_process P((struct mx4200unit *));
-static void mx4200_report_event P((struct mx4200unit *, int));
-static void mx4200_poll P((int, struct peer *));
-static void mx4200_control P((u_int, struct refclockstat *, struct refclockstat *));
-static void mx4200_buginfo P((int, struct refclockbug *));
-
-static char * mx4200_parse P((char *, struct calendar *, int *, int *));
-static int mx4200_needconf P((char *));
-static void mx4200_config P((struct mx4200unit *));
-static void mx4200_send P((int, const char *, ...));
-static int mx4200_cmpl_fp P((void *, void *));
-static u_char cksum P((char *, u_int));
-
-#ifdef DEBUG
-static void opendfile P((int));
-static void checkdfile P((void));
-#endif /* DEBUG */
-
-/*
- * Transfer vector
- */
-struct refclock refclock_mx4200 = {
- mx4200_start, mx4200_shutdown, mx4200_poll,
- mx4200_control, mx4200_init, mx4200_buginfo, NOFLAGS
-};
-
-/*
- * mx4200_init - initialize internal mx4200 driver data
- */
-static void
-mx4200_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- memset((char *)mx4200units, 0, sizeof mx4200units);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor[i].l_ui = 0;
- fudgefactor[i].l_uf = DEFFUDGETIME;
- stratumtouse[i] = 0;
- sloppyclockflag[i] = 0;
- memcpy((char *)&refid[i], MX4200REFID, 4);
- }
-}
-
-#ifdef DEBUG
-static char dfile[] = "/var/tmp/MX4200.debug";
-static FILE *df = NULL;
-
-static void
-opendfile(create)
- int create;
-{
- if (!create && access(dfile, F_OK) < 0) {
- syslog(LOG_ERR, "mx4200: open %s: %m", dfile);
- return;
- }
- df = fopen(dfile, "a");
- if (df == NULL)
- syslog(LOG_ERR, "mx4200: open %s: %m", dfile);
- else if (setvbuf(df, NULL, _IOLBF, 0) < 0)
- syslog(LOG_ERR, "mx4200: setvbuf %s: %m", dfile);
-}
-
-static void
-checkdfile()
-{
-
- if (df == NULL)
- return;
-
- if (access(dfile, F_OK) < 0) {
- fclose(df);
- opendfile(1);
- }
-}
-
-#endif
-
-
-/*
- * mx4200_start - open the MX4200 devices and initialize data for processing
- */
-static int
-mx4200_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct mx4200unit *mx4200;
- register int i;
- int fd232;
- char mx4200dev[20];
-
- /*
- * Check configuration info
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_start: unit %d invalid", unit);
- return (0);
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "mx4200_start: unit %d in use", unit);
- return (0);
- }
-
- /*
- * Open serial port
- */
- (void) sprintf(mx4200dev, MX4200232, unit);
- fd232 = open(mx4200dev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR,
- "mx4200_start: open of %s: %m", mx4200dev);
- return (0);
- }
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, TCGETA): %m", mx4200dev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, TCSETA): %m", mx4200dev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The MX4200CLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The MX4200PPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: tcgetattr(%s): %m", mx4200dev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: tcsetattr(%s): %m", mx4200dev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: tcflush(%s): %m", mx4200dev);
- goto screwed;
- }
- }
-#endif /* HAVE_TERMIOS */
-#ifdef STREAM
-#if defined(MX4200CLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, I_PUSH, clk): %m", mx4200dev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, CLK_SETSTR): %m", mx4200dev);
-#endif /* MX4200CLK */
-#if defined(MX4200PPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, I_PUSH, ppsclock): %m", mx4200dev);
- else
- fdpps = fd232;
-#endif /* MX4200PPS */
-#endif /* STREAM */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The MX4200CLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(MX4200CLK)
- int ldisc = CLKLDISC;
-#endif /* MX4200CLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, TIOCGETP): %m", mx4200dev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(MX4200CLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* MX4200CLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, TIOCSETP): %m", mx4200dev);
- goto screwed;
- }
-#if defined(MX4200CLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "mx4200_start: ioctl(%s, TIOCSETD): %m",mx4200dev);
- goto screwed;
- }
-#endif /* MX4200CLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Allocate unit structure
- */
- if (mx4200units[unit] != 0) {
- mx4200 = mx4200units[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && mx4200units[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- mx4200 = mx4200units[i];
- mx4200units[i] = 0;
- } else {
- mx4200 = (struct mx4200unit *)
- emalloc(sizeof(struct mx4200unit));
- }
- }
-
- memset((char *)mx4200, 0, sizeof(struct mx4200unit));
- mx4200units[unit] = mx4200;
-
- /*
- * Set up the structures
- */
- mx4200->peer = peer;
- mx4200->unit = (u_char)unit;
- mx4200->timestarted = current_time;
-
- mx4200->io.clock_recv = mx4200_receive;
- mx4200->io.srcclock = (caddr_t)mx4200;
- mx4200->io.datalen = 0;
- mx4200->io.fd = fd232;
- if (!io_addclock(&mx4200->io))
- goto screwed;
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success.
- */
- peer->precision = MX4200PRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
-
- /* Insure the receiver is properly configured */
- mx4200_config(mx4200);
-
-#ifdef DEBUG
- opendfile(0);
-#endif
- return (1);
-
- /*
- * Something broke; abandon ship
- */
-screwed:
- (void) close(fd232);
- return (0);
-}
-
-/*
- * mx4200_shutdown - shut down a MX4200 clock
- */
-static void
-mx4200_shutdown(unit)
- int unit;
-{
- register struct mx4200unit *mx4200;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_shutdown: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "mx4200_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- mx4200 = mx4200units[unit];
- io_closeclock(&mx4200->io);
- unitinuse[unit] = 0;
-}
-
-static void
-mx4200_config(mx4200)
- register struct mx4200unit *mx4200;
-{
- register int fd = mx4200->io.fd;
-
-syslog(LOG_DEBUG, "mx4200_config");
-
- /* Zero the output list (do it twice to flush possible junk) */
- mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1);
- mx4200_send(fd, "%s,%03d,,%d,,,,,,", pmvxg, PMVXG_S_PORTCONF, 1);
-
- /* Switch to 2d mode */
- mx4200_send(fd, "%s,%03d,%d,,%.1f,%.1f,,%d,%d,%c,%d",
- pmvxg, PMVXG_S_INITMODEB,
- 2, /* 2d mode */
- 0.1, /* hor accel fact as per Steve */
- 0.1, /* ver accel fact as per Steve */
- 10, /* hdop limit as per Steve */
- 5, /* elevation limit as per Steve */
- 'U', /* time output mode */
- 0); /* local time offset from gmt */
-
- /* Configure time recovery */
- mx4200_send(fd, "%s,%03d,%c,%c,%c,%d,%d,%d,",
- pmvxg, PMVXG_S_TRECOVCONF,
-#ifdef notdef
- 'K', /* known position */
- 'D', /* dynamic position */
-#else
- 'S', /* static position */
-#endif
- 'U', /* steer clock to gps time */
- 'A', /* always output time pulse */
- 500, /* max time error in ns */
- 0, /* user bias in ns */
- 1); /* output to control port */
-}
-
-/*
- * mx4200_report_event - note the occurrence of an event
- */
-static void
-mx4200_report_event(mx4200, code)
- struct mx4200unit *mx4200;
- int code;
-{
- struct peer *peer;
-
- peer = mx4200->peer;
- if (mx4200->status != (u_char)code) {
- mx4200->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- mx4200->lastevent = (u_char)code;
- syslog(LOG_INFO,
- "mx4200 clock %s event %x", ntoa(&peer->srcadr), code);
- }
-}
-
-/*
- * mx4200_poll - mx4200 watchdog routine
- */
-static void
-mx4200_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct mx4200unit *mx4200;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "mx4200_poll: unit %d not used", unit);
- return;
- }
-
- mx4200 = mx4200units[unit];
- if ((current_time - mx4200->lasttime) > 150) {
- mx4200_event(mx4200, CEVNT_FAULT);
-
- /* Request a status message which should trigger a reconfig */
- mx4200_send(mx4200->io.fd, "%s,%03d", "CDGPQ", PMVXG_D_STATUS);
- syslog(LOG_DEBUG, "mx4200_poll: request status");
- }
-}
-
-static const char char2hex[] = "0123456789ABCDEF";
-
-/*
- * mx4200_receive - receive gps data
- */
-static void
-mx4200_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register struct mx4200unit *mx4200;
- register char *dpt, *cp;
- register U_LONG tmp_ui;
- register U_LONG tmp_uf;
- register U_LONG gpstime;
- struct ppsclockev ev;
- register struct calendar *jt;
- struct calendar sjt;
- register int n;
- int valid, leapsec;
- register u_char ck;
-
- mx4200 = (struct mx4200unit *)rbufp->recv_srcclock;
-
-#ifdef DEBUG
- if (debug > 3)
- printf("mx4200_receive: nsamples = %d\n", mx4200->nsamples);
-#endif
-
- /* Record the time of this event */
- mx4200->lasttime = current_time;
-
- /* Get the pps value */
- if (ioctl(mx4200->io.fd, CIOGETEV, (char *)&ev) < 0) {
- /* XXX Actually, if this fails, we're pretty much screwed */
-#ifdef DEBUG
- if (debug) {
- fprintf(stderr, "mx4200_receive: ");
- perror("CIOGETEV");
- }
-#endif
- mx4200->reason = PPSREASON + 1;
- mx4200_event(mx4200, CEVNT_FAULT);
- mx4200_reset(mx4200);
- return;
- }
- tmp_ui = ev.tv.tv_sec + (U_LONG)JAN_1970;
- TVUTOTSF(ev.tv.tv_usec, tmp_uf);
-
- /* Get buffer and length; sock away last timecode */
- n = rbufp->recv_length;
- dpt = rbufp->recv_buffer;
- if (n <= 1)
- return;
- mx4200->lencode = n;
- memmove(mx4200->lastcode, dpt, n);
-
- /*
- * We expect to see something like:
- *
- * $PMVXG,830,T,1992,07,09,04:18:34,U,S,-02154,00019,000000,00*1D\n
- *
- * Reject if any important landmarks are missing.
- */
- cp = dpt + n - 4;
- if (cp < dpt || *dpt != '$' || cp[0] != '*' || cp[3] != '\n') {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad format\n");
-#endif
- mx4200->badformat++;
- mx4200->reason = PPSREASON + 2;
- mx4200_event(mx4200, CEVNT_BADREPLY);
- mx4200_reset(mx4200);
- return;
- }
-
- /* Check checksum */
- ck = cksum(&dpt[1], n - 5);
- if (char2hex[ck >> 4] != cp[1] || char2hex[ck & 0xf] != cp[2]) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad checksum\n");
-#endif
- mx4200->badformat++;
- mx4200->reason = PPSREASON + 3;
- mx4200_event(mx4200, CEVNT_BADREPLY);
- mx4200_reset(mx4200);
- return;
- }
-
- /* Truncate checksum (and the buffer for that matter) */
- *cp = '\0';
-
- /* Leap second debugging stuff */
- if ((leap_hoursfromleap && !leap_happened) || leap_debug > 0) {
- /* generate reports for awhile after leap */
- if (leap_hoursfromleap && !leap_happened)
- leap_debug = 3600;
- else
- --leap_debug;
- syslog(LOG_INFO, "mx4200 leap: %s \"%s\"",
- umfptoa(tmp_ui, tmp_uf, 6), dpt);
- }
-
- /* Parse time recovery message */
- jt = &sjt;
- if ((cp = mx4200_parse(dpt, jt, &valid, &leapsec)) != NULL) {
- /* Configure the receiver if necessary */
- if (mx4200_needconf(dpt))
- mx4200_config(mx4200);
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: mx4200_parse: %s\n", cp);
-#endif
- mx4200->badformat++;
- mx4200->reason = PPSREASON + 5;
- mx4200_event(mx4200, CEVNT_BADREPLY);
- mx4200_reset(mx4200);
- return;
- }
-
- /* Setup leap second indicator */
- if (leapsec == 0)
- mx4200->leap = LEAP_NOWARNING;
- else if (leapsec == 1)
- mx4200->leap = LEAP_ADDSECOND;
- else if (leapsec == -1)
- mx4200->leap = LEAP_DELSECOND;
- else
- mx4200->leap = LEAP_NOTINSYNC; /* shouldn't happen */
-
- /* Check parsed time (allow for possible leap seconds) */
- if (jt->second >= 61 || jt->minute >= 60 || jt->hour >= 24) {
-#ifdef DEBUG
- if (debug) {
- printf("mx4200_receive: bad time %d:%02d:%02d",
- jt->hour, jt->minute, jt->second);
- if (leapsec != 0)
- printf(" (leap %+d)", leapsec);
- putchar('\n');
- }
-#endif
- mx4200->baddata++;
- mx4200->reason = PPSREASON + 6;
- mx4200_event(mx4200, CEVNT_BADTIME);
- mx4200_reset(mx4200);
- /* Eat the next pulse which the clock claims will be bad */
- mx4200->nsamples = -1;
- return;
- }
-
- /* Check parsed date */
- if (jt->monthday > 31 || jt->month > 12 || jt->year < 1900) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: bad date (%d/%d/%d)\n",
- jt->monthday, jt->month, jt->year);
-#endif
- mx4200->baddata++;
- mx4200->reason = PPSREASON + 7;
- mx4200_event(mx4200, CEVNT_BADDATE);
- mx4200_reset(mx4200);
- return;
- }
-
- /* Convert to ntp time */
- gpstime = caltontp(jt);
-
- /* The gps message describes the *next* pulse; pretend it's this one */
- --gpstime;
-
- /* Debugging */
-#ifdef DEBUG
- checkdfile();
- if (df != NULL) {
- l_fp t;
-
- t.l_ui = gpstime;
- t.l_uf = 0;
- M_SUB(t.l_ui, t.l_uf, tmp_ui, tmp_uf);
- fprintf(df, "%s\t%s",
- umfptoa(tmp_ui, tmp_uf, 6), mfptoa(t.l_ui, t.l_uf, 6));
- if (debug > 3)
- fprintf(df, "\t(gps: %lu)", gpstime);
- if (leapsec != 0)
- fprintf(df, "\t(leap sec %+d)", leapsec);
- if (!valid)
- fprintf(df, "\t(pulse not valid)");
- fputc('\n', df);
- }
-#endif
-
- /* Check pps serial number against last one */
- if (mx4200->lastserial + 1 != ev.serial && mx4200->lastserial != 0) {
-#ifdef DEBUG
- if (debug) {
- if (ev.serial == mx4200->lastserial)
- printf("mx4200_receive: no new pps event\n");
- else
- printf("mx4200_receive: missed %d pps events\n",
- ev.serial - mx4200->lastserial - 1);
- }
-#endif
- mx4200->reason = PPSREASON + 8;
- mx4200_event(mx4200, CEVNT_FAULT);
- mx4200_reset(mx4200);
- /* fall through and this one collect as first sample */
- }
- mx4200->lastserial = ev.serial;
-
-/*
- * XXX
- * Since this message is for the next pulse, it's really the next pulse
- * that the clock might be telling us will be invalid.
- */
- /* Toss if not designated "valid" by the gps */
- if (!valid) {
-#ifdef DEBUG
- if (debug)
- printf("mx4200_receive: pps not valid\n");
-#endif
- mx4200->reason = PPSREASON + 9;
- mx4200_event(mx4200, CEVNT_BADTIME);
- mx4200_reset(mx4200);
- return;
- }
-
- /* Copy time into mx4200unit struct */
- /* XXX (why?) */
- mx4200->year = jt->year;
- mx4200->monthday = jt->monthday;
- mx4200->hour = jt->hour;
- mx4200->minute = jt->minute;
- mx4200->second = jt->second;
-
- /* Sock away the GPS and UNIX timesamples */
- n = mx4200->nsamples++;
- if (n < 0)
- return; /* oops, this pulse is bad */
- mx4200->gpssamples[n] = gpstime;
- mx4200->unixsamples[n].l_ui = mx4200->lastsampletime.l_ui = tmp_ui;
- mx4200->unixsamples[n].l_uf = mx4200->lastsampletime.l_uf = tmp_uf;
- if (mx4200->nsamples >= NSTAMPS) {
- /*
- * Here we've managed to complete an entire NSTAMPS
- * second cycle without major mishap. Process what has
- * been received.
- */
- mx4200_process(mx4200);
- mx4200_reset(mx4200);
- }
-}
-
-/* Compare two l_fp's, used with qsort() */
-static int
-mx4200_cmpl_fp(p1, p2)
- register void *p1, *p2;
-{
-
- if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2))
- return (-1);
- if (L_ISEQU((l_fp *)p1, (l_fp *)p2))
- return (0);
- return (1);
-}
-
-/*
- * mx4200_process - process a pile of samples from the clock
- */
-static void
-mx4200_process(mx4200)
- struct mx4200unit *mx4200;
-{
- register int i, n;
- register l_fp *fp, *op;
- register U_LONG *lp;
- l_fp off[NSTAMPS];
- register U_LONG tmp_ui, tmp_uf;
- register U_LONG date_ui, date_uf;
- u_fp dispersion;
-
- /* Compute offsets from the raw data. */
- fp = mx4200->unixsamples;
- op = off;
- lp = mx4200->gpssamples;
- for (i = 0; i < NSTAMPS; ++i, ++lp, ++op, ++fp) {
- op->l_ui = *lp;
- op->l_uf = 0;
- L_SUB(op, fp);
- }
-
- /* Sort offsets into ascending order. */
- qsort((char *)off, NSTAMPS, sizeof(l_fp), mx4200_cmpl_fp);
-
- /*
- * Reject the furthest from the median until 8 samples left
- */
- i = 0;
- n = NSTAMPS;
- while ((n - i) > 8) {
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- date_ui = off[(n+i)/2].l_ui;
- date_uf = off[(n+i)/2].l_uf;
- M_SUB(tmp_ui, tmp_uf, date_ui, date_uf);
- M_SUB(date_ui, date_uf, off[i].l_ui, off[i].l_uf);
- if (M_ISHIS(date_ui, date_uf, tmp_ui, tmp_uf)) {
- /*
- * reject low end
- */
- i++;
- } else {
- /*
- * reject high end
- */
- n--;
- }
- }
-
- /*
- * Compute the dispersion based on the difference between the
- * extremes of the remaining offsets.
- */
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- dispersion = MFPTOFP(tmp_ui, tmp_uf);
-
- /*
- * Now compute the offset estimate. If the sloppy clock
- * flag is set, average the remainder, otherwise pick the
- * median.
- */
- if (sloppyclockflag[mx4200->unit]) {
- tmp_ui = tmp_uf = 0;
- while (i < n) {
- M_ADD(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- i++;
- }
- M_RSHIFT(tmp_ui, tmp_uf);
- M_RSHIFT(tmp_ui, tmp_uf);
- M_RSHIFT(tmp_ui, tmp_uf);
- i = 0;
- off[0].l_ui = tmp_ui;
- off[0].l_uf = tmp_uf;
- } else {
- i = (n + i) / 2;
- }
-
- /*
- * Add the default MX4200 QT delay into this.
- */
-#ifdef notdef
- L_ADDUF(&off[i], MX4200QTFUDGE);
-#endif
-
- /*
- * Done. Use lastref as the reference time and lastrec
- * as the receive time. ** note this can result in tossing
- * out the peer in the protocol module if lastref > lastrec,
- * so last rec is used for both values - dlm ***
- */
- refclock_receive(mx4200->peer, &off[i],
- (s_fp)0, /* delay */
- dispersion,
- &mx4200->unixsamples[NSTAMPS-1], /* reftime */
- &mx4200->unixsamples[NSTAMPS-1], /* rectime */
- mx4200->leap);
-
- mx4200_event(mx4200, CEVNT_NOMINAL);
-}
-
-/*
- * mx4200_control - set fudge factors, return statistics
- */
-static void
-mx4200_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct mx4200unit *mx4200;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_control: unit %d invalid", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (in->haveflags & CLK_HAVEFLAG1)
- sloppyclockflag[unit] = in->flags & CLK_FLAG1;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = mx4200units[unit]->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out != 0) {
- memset((char *)out, 0, sizeof (struct refclockstat));
- out->type = REFCLK_GPS_MX4200;
- out->haveflags = CLK_HAVETIME1 | CLK_HAVEVAL1 | CLK_HAVEVAL2 |
- CLK_HAVEFLAG1;
- out->clockdesc = MX4200DESCRIPTION;
- out->fudgetime1 = fudgefactor[unit];
- out->fudgeval1 = (LONG)stratumtouse[unit];
- out->fudgeval2 = refid[unit];;
- out->flags = sloppyclockflag[unit];
- if (unitinuse[unit]) {
- mx4200 = mx4200units[unit];
- out->lencode = mx4200->lencode;
- out->lastcode = mx4200->lastcode;
- out->lastevent = mx4200->lastevent;
- out->currentstatus = mx4200->status;
-
- out->polls = 0; /* mx4200->polls; */
- out->noresponse = 0; /* mx4200->noresponse; */
- out->badformat = mx4200->badformat;
- out->baddata = mx4200->baddata;
- out->timereset = current_time - mx4200->timestarted;
- }
- }
-}
-
-/*
- * mx4200_buginfo - return clock dependent debugging info
- */
-static void
-mx4200_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct mx4200unit *mx4200;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "mx4200_buginfo: unit %d invalid", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- mx4200 = mx4200units[unit];
-
- memset((char *)bug, 0, sizeof(*bug));
- bug->nvalues = 10;
- bug->ntimes = 2;
- if (mx4200->lasttime != 0)
- bug->values[0] = current_time - mx4200->lasttime;
- else
- bug->values[0] = 0;
- bug->values[1] = (U_LONG)mx4200->reason;
- bug->values[2] = (U_LONG)mx4200->year;
- bug->values[3] = (U_LONG)mx4200->monthday;
- bug->values[4] = (U_LONG)mx4200->hour;
- bug->values[5] = (U_LONG)mx4200->minute;
- bug->values[6] = (U_LONG)mx4200->second;
-#ifdef notdef
- bug->values[7] = mx4200->msec;
- bug->values[8] = mx4200->noreply;
- bug->values[9] = mx4200->yearstart;
-#endif
- bug->stimes = 0x1c;
-#ifdef notdef
- bug->times[0] = mx4200->lastref;
- bug->times[1] = mx4200->lastrec;
-#endif
-}
-
-/*
- * Returns true if the this is a status message. We use this as
- * an indication that the receiver needs to be initialized.
- */
-static int
-mx4200_needconf(buf)
- char *buf;
-{
- register LONG v;
- char *cp;
-
- cp = buf;
-
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Record type */
- v = strtol(cp, &cp, 10);
- if (v != PMVXG_D_STATUS)
- return (0);
- /*
- * XXX
- * Since we configure the receiver to not give us status
- * messages and since the receiver outputs status messages by
- * default after being reset to factory defaults when sent the
- * "$PMVXG,018,C\r\n" message, any status message we get
- * indicates the reciever needs to be initialized; thus, it is
- * not necessary to decode the status message.
- */
-#ifdef notdef
- ++cp;
-
- /* Receiver status */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Number of satellites which should be visible */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Number of satellites being tracked */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Time since last NAV */
- if ((cp = strchr(cp, ',')) == NULL)
- return (0);
- ++cp;
-
- /* Initialization status */
- v = strtol(cp, &cp, 10);
- if (v == 0)
-#endif
- return (1);
-}
-
-/* Parse a mx4200 time recovery message. Returns a string if error */
-static char *
-mx4200_parse(buf, jt, validp, leapsecp)
- register char *buf;
- register struct calendar *jt;
- register int *validp, *leapsecp;
-{
- register LONG v;
- char *cp;
-
- cp = buf;
- memset((char *)jt, 0, sizeof(*jt));
-
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no rec-type");
- ++cp;
-
- /* Record type */
- v = strtol(cp, &cp, 10);
- if (v != PMVXG_D_TRECOVOUT)
- return ("wrong rec-type");
-
- /* Pulse valid indicator */
- if (*cp++ != ',')
- return ("no pulse-valid");
- if (*cp == 'T')
- *validp = 1;
- else if (*cp == 'F')
- *validp = 0;
- else
- return ("bad pulse-valid");
- ++cp;
-
- /* Year */
- if (*cp++ != ',')
- return ("no year");
- jt->year = strtol(cp, &cp, 10);
-
- /* Month of year */
- if (*cp++ != ',')
- return ("no month");
- jt->month = strtol(cp, &cp, 10);
-
- /* Day of month */
- if (*cp++ != ',')
- return ("no month day");
- jt->monthday = strtol(cp, &cp, 10);
-
- /* Hour */
- if (*cp++ != ',')
- return ("no hour");
- jt->hour = strtol(cp, &cp, 10);
-
- /* Minute */
- if (*cp++ != ':')
- return ("no minute");
- jt->minute = strtol(cp, &cp, 10);
-
- /* Second */
- if (*cp++ != ':')
- return ("no second");
- jt->second = strtol(cp, &cp, 10);
-
- /* Time indicator */
- if (*cp++ != ',' || *cp++ == '\0')
- return ("no time indicator");
-
- /* Time recovery mode */
- if (*cp++ != ',' || *cp++ == '\0')
- return ("no time mode");
-
- /* Oscillator offset */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no osc off");
- ++cp;
-
- /* Time mark error */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no time mark err");
- ++cp;
-
- /* User time bias */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no user bias");
- ++cp;
-
- /* Leap second flag */
- if ((cp = strchr(cp, ',')) == NULL)
- return ("no leap");
- ++cp;
- *leapsecp = strtol(cp, &cp, 10);
-
- return (NULL);
-}
-
-/* Calculate the checksum */
-static u_char
-cksum(cp, n)
- register char *cp;
- register u_int n;
-{
- register u_char ck;
-
- for (ck = 0; n-- > 0; ++cp)
- ck ^= *cp;
- return (ck);
-}
-
-static void
-#if __STDC__
-mx4200_send(register int fd, const char *fmt, ...)
-#else
-mx4200_send(fd, fmt, va_alist)
- register int fd;
- const char *fmt;
- va_dcl
-#endif
-{
- register char *cp;
- register int n, m;
- va_list ap;
- char buf[1024];
- u_char ck;
-
-#if __STDC__
- va_start(ap, fmt);
-#else
- va_start(ap);
-#endif
- cp = buf;
- *cp++ = '$';
-#ifdef notdef
- /* BSD is rational */
- n = vsnprintf(cp, sizeof(buf) - 1, fmt, ap);
-#else
- /* SunOS sucks */
- (void)vsprintf(cp, fmt, ap);
- n = strlen(cp);
-#endif
- ck = cksum(cp, n);
- cp += n;
- ++n;
-#ifdef notdef
- /* BSD is rational */
- n += snprintf(cp, sizeof(buf) - n - 5, "*%02X\r\n", ck);
-#else
- /* SunOS sucks */
- sprintf(cp, "*%02X\r\n", ck);
- n += strlen(cp);
-#endif
-
- m = write(fd, buf, n);
- if (m < 0)
- syslog(LOG_ERR, "mx4200_send: write: %m (%s)", buf);
- else if (m != n)
- syslog(LOG_ERR, "mx4200_send: write: %d != %d (%s)", m, n, buf);
- va_end(ap);
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c
deleted file mode 100644
index 95a20a0..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_omega.c
+++ /dev/null
@@ -1,999 +0,0 @@
-/*
- * refclock_omega - clock driver for the Kinemetrics Truetime OM-DC OMEGA
- * receiver.
- *
- * Version 1.0 11-Dec-92 Steve Clift (clift@ml.csiro.au)
- * Initial version, mostly lifted from refclock_goes.c.
- *
- * 1.1 03-May-93 Steve Clift
- * Tarted up the sample filtering mechanism to give improved
- * one-off measurements. Improved measurement dispersion code
- * to account for accumulated drift when the clock loses lock.
- *
- */
-
-#if defined(REFCLOCK) && (defined(OMEGA) || defined(OMEGACLK) || defined(OMEGAPPS))
-
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/time.h>
-
-#include "ntpd.h"
-#include "ntp_io.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-
-#if defined(HAVE_BSD_TTYS)
-#include <sgtty.h>
-#endif /* HAVE_BSD_TTYS */
-
-#if defined(HAVE_SYSV_TTYS)
-#include <termio.h>
-#endif /* HAVE_SYSV_TTYS */
-
-#if defined(HAVE_TERMIOS)
-#include <termios.h>
-#endif
-#if defined(STREAM)
-#include <stropts.h>
-#if defined(OMEGACLK)
-#include <sys/clkdefs.h>
-#endif /* OMEGACLK */
-#endif /* STREAM */
-
-#if defined (OMEGAPPS)
-#include <sys/ppsclock.h>
-#endif /* OMEGAPPS */
-
-#include "ntp_stdlib.h"
-
-/*
- * Support for Kinemetrics Truetime OM-DC OMEGA Receiver
- *
- * Most of this code is copied from refclock_goes.c with thanks.
- *
- * the time code looks like follows; Send the clock a R or C and once per
- * second a timestamp will appear that looks like this:
- * ADDD:HH:MM:SSQCL
- * A - control A
- * Q Quality indication: indicates possible error of
- * > >+- 5 seconds
- * ? >+/- 500 milliseconds # >+/- 50 milliseconds
- * * >+/- 5 milliseconds . >+/- 1 millisecond
- * A-H less than 1 millisecond. Character indicates which station
- * is being received as follows:
- * A = Norway, B = Liberia, C = Hawaii, D = North Dakota,
- * E = La Reunion, F = Argentina, G = Australia, H = Japan.
- * C - Carriage return
- * L - Line feed
- * The carriage return start bit begins on 0 seconds and extends to 1 bit time.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* max number of OMEGA units */
-#define OMEGA232 "/dev/omega%d"
-#define SPEED232 B9600 /* 9600 baud */
-
-/*
- * Radio interface parameters
- */
-#define OMEGADESCRIPTION "Kinemetrics OM-DC OMEGA Receiver" /* who we are */
-#define OMEGAMAXDISPERSE (FP_SECOND/32) /* max allowed sample dispersion */
-#define OMEGAPRECISION (-10) /* precision assumed (about 1 ms) */
-#define OMEGAREFID "VLF\0" /* reference id */
-#define LENOMEGA 13 /* length of standard response */
-#define GMT 0 /* hour offset from Greenwich */
-#define NSTAMPS 9 /* samples collected when polled */
-#define NSKEEP 5 /* samples to keep after discards */
-#define BMAX 50 /* timecode buffer length */
-
-/*
- * The OM-DC puts out the start bit of the <CR> on the second, but
- * we see the result after the <LF> is received, about 2ms later at
- * 9600 baud. Use this as the default fudge time, and let the user
- * fiddle it to account for driver latency etc.
- */
-#define DEFFUDGETIME 0x00830000 /* default fudge time (~2ms) */
-
-/*
- * Clock drift errors as u_fp values.
- */
-#define U_FP5000MS (5*FP_SECOND) /* 5 seconds */
-#define U_FP500MS (FP_SECOND/2) /* 500 msec */
-#define U_FP50MS (FP_SECOND/20) /* 50 msec */
-#define U_FP5MS (FP_SECOND/200) /* 5 msec */
-
-/*
- * Station codes
- */
-#define STATION_NONE 0
-#define STATION_NORWAY 1
-#define STATION_LIBERIA 2
-#define STATION_HAWAII 3
-#define STATION_N_DAKOTA 4
-#define STATION_LA_REUNION 5
-#define STATION_ARGENTINA 6
-#define STATION_AUSTRALIA 7
-#define STATION_JAPAN 8
-
-/*
- * Hack to avoid excercising the multiplier. I have no pride.
- */
-#define MULBY10(x) (((x)<<3) + ((x)<<1))
-
-/*
- * Imported from the timer module
- */
-extern U_LONG current_time;
-extern struct event timerqueue[];
-
-/*
- * Imported from ntp_loopfilter module
- */
-extern int fdpps; /* pps file descriptor */
-
-/*
- * Imported from ntpd module
- */
-extern int debug; /* global debug flag */
-
-/*
- * OMEGA unit control structure
- */
-struct omegaunit {
- struct peer *peer; /* associated peer structure */
- struct refclockio io; /* given to the I/O handler */
- l_fp lastrec; /* last receive time */
- l_fp lastref; /* last timecode time */
- l_fp offset[NSTAMPS]; /* recent sample offsets */
- char lastcode[BMAX]; /* last timecode received */
- u_short station; /* which station we're locked to */
- u_short polled; /* Hand in a time sample? */
- U_LONG coderecv; /* timecodes received */
- u_char lencode; /* length of last timecode */
- U_LONG lasttime; /* last time clock heard from */
- u_char unit; /* unit number for this guy */
- u_char status; /* clock status */
- u_char lastevent; /* last clock event */
- u_char reason; /* reason for last failure */
- u_char year; /* year of eternity */
- u_short day; /* day of year */
- u_char hour; /* hour of day */
- u_char minute; /* minute of hour */
- u_char second; /* seconds of minute */
- u_char leap; /* leap indicators */
- u_short msec; /* millisecond of second */
- u_char quality; /* quality char from last timecode */
- U_LONG yearstart; /* start of current year */
- /*
- * Status tallies
- */
- U_LONG polls; /* polls sent */
- U_LONG noreply; /* no replies to polls */
- U_LONG badformat; /* bad format */
- U_LONG baddata; /* bad data */
- U_LONG timestarted; /* time we started this */
-};
-
-/*
- * Data space for the unit structures. Note that we allocate these on
- * the fly, but never give them back.
- */
-static struct omegaunit *omegaunits[MAXUNITS];
-static u_char unitinuse[MAXUNITS];
-
-/*
- * Keep the fudge factors separately so they can be set even
- * when no clock is configured.
- */
-static l_fp fudgefactor1[MAXUNITS];
-static l_fp fudgefactor2[MAXUNITS];
-static u_char stratumtouse[MAXUNITS];
-static u_char readonlyclockflag[MAXUNITS];
-static U_LONG refid[MAXUNITS];
-
-/*
- * Function prototypes
- */
-static void omega_init P((void));
-static int omega_start P((u_int, struct peer *));
-static void omega_shutdown P((int));
-static void omega_report_event P((struct omegaunit *, int));
-static void omega_receive P((struct recvbuf *));
-static char omega_process P((struct omegaunit *, l_fp *, u_fp *));
-static void omega_poll P((int, struct peer *));
-static void omega_control P((u_int, struct refclockstat *, struct refclockstat *));
-static void omega_buginfo P((int, struct refclockbug *));
-static void omega_send P((struct omegaunit *, char *));
-
-/*
- * Transfer vector
- */
-struct refclock refclock_omega = {
- omega_start, omega_shutdown, omega_poll,
- omega_control, omega_init, omega_buginfo, NOFLAGS
-};
-
-/*
- * omega_init - initialize internal omega driver data
- */
-static void
-omega_init()
-{
- register int i;
- /*
- * Just zero the data arrays
- */
- memset((char *)omegaunits, 0, sizeof omegaunits);
- memset((char *)unitinuse, 0, sizeof unitinuse);
-
- /*
- * Initialize fudge factors to default.
- */
- for (i = 0; i < MAXUNITS; i++) {
- fudgefactor1[i].l_ui = 0;
- fudgefactor1[i].l_uf = DEFFUDGETIME;
- fudgefactor2[i].l_ui = 0;
- fudgefactor2[i].l_uf = 0;
- stratumtouse[i] = 0;
- readonlyclockflag[i] = 0;
- memcpy((char *)&refid[i], OMEGAREFID, 4);
- }
-}
-
-
-/*
- * omega_start - open the OMEGA devices and initialize data for processing
- */
-static int
-omega_start(unit, peer)
- u_int unit;
- struct peer *peer;
-{
- register struct omegaunit *omega;
- register int i;
- int fd232;
- char omegadev[20];
-
- /*
- * Check configuration info
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,"omega_start: unit %d invalid", unit);
- return 0;
- }
- if (unitinuse[unit]) {
- syslog(LOG_ERR, "omega_start: unit %d in use", unit);
- return 0;
- }
-
- /*
- * Open serial port
- */
- (void) sprintf(omegadev, OMEGA232, unit);
- fd232 = open(omegadev, O_RDWR, 0777);
- if (fd232 == -1) {
- syslog(LOG_ERR, "omega_start: open of %s: %m", omegadev);
- return 0;
- }
-
-#if defined(HAVE_SYSV_TTYS)
- /*
- * System V serial line parameters (termio interface)
- *
- */
- { struct termio ttyb;
- if (ioctl(fd232, TCGETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TCGETA): %m", omegadev);
- goto screwed;
- }
- ttyb.c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyb.c_oflag = 0;
- ttyb.c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyb.c_lflag = ICANON;
- ttyb.c_cc[VERASE] = ttyb.c_cc[VKILL] = '\0';
- if (ioctl(fd232, TCSETA, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TCSETA): %m", omegadev);
- goto screwed;
- }
- }
-#endif /* HAVE_SYSV_TTYS */
-#if defined(HAVE_TERMIOS)
- /*
- * POSIX serial line parameters (termios interface)
- *
- * The OMEGACLK option provides timestamping at the driver level.
- * It requires the tty_clk streams module.
- *
- * The OMEGAPPS option provides timestamping at the driver level.
- * It uses a 1-pps signal and level converter (gadget box) and
- * requires the ppsclock streams module and SunOS 4.1.1 or
- * later.
- */
- { struct termios ttyb, *ttyp;
-
- ttyp = &ttyb;
- if (tcgetattr(fd232, ttyp) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcgetattr(%s): %m", omegadev);
- goto screwed;
- }
- ttyp->c_iflag = IGNBRK|IGNPAR|ICRNL;
- ttyp->c_oflag = 0;
- ttyp->c_cflag = SPEED232|CS8|CLOCAL|CREAD;
- ttyp->c_lflag = ICANON;
- ttyp->c_cc[VERASE] = ttyp->c_cc[VKILL] = '\0';
- if (tcsetattr(fd232, TCSANOW, ttyp) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcsetattr(%s): %m", omegadev);
- goto screwed;
- }
- if (tcflush(fd232, TCIOFLUSH) < 0) {
- syslog(LOG_ERR,
- "omega_start: tcflush(%s): %m", omegadev);
- goto screwed;
- }
- }
-#endif /* HAVE_TERMIOS */
-#ifdef STREAM
-#if defined(OMEGACLK)
- if (ioctl(fd232, I_PUSH, "clk") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, I_PUSH, clk): %m", omegadev);
- if (ioctl(fd232, CLK_SETSTR, "\n") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, CLK_SETSTR): %m", omegadev);
-#endif /* OMEGACLK */
-#if defined(OMEGAPPS)
- if (ioctl(fd232, I_PUSH, "ppsclock") < 0)
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, I_PUSH, ppsclock): %m", omegadev);
- else
- fdpps = fd232;
-#endif /* OMEGAPPS */
-#endif /* STREAM */
-#if defined(HAVE_BSD_TTYS)
- /*
- * 4.3bsd serial line parameters (sgttyb interface)
- *
- * The OMEGACLK option provides timestamping at the driver level.
- * It requires the tty_clk line discipline and 4.3bsd or later.
- */
- { struct sgttyb ttyb;
-#if defined(OMEGACLK)
- int ldisc = CLKLDISC;
-#endif /* OMEGACLK */
-
- if (ioctl(fd232, TIOCGETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCGETP): %m", omegadev);
- goto screwed;
- }
- ttyb.sg_ispeed = ttyb.sg_ospeed = SPEED232;
-#if defined(OMEGACLK)
- ttyb.sg_erase = ttyb.sg_kill = '\r';
- ttyb.sg_flags = RAW;
-#else
- ttyb.sg_erase = ttyb.sg_kill = '\0';
- ttyb.sg_flags = EVENP|ODDP|CRMOD;
-#endif /* OMEGACLK */
- if (ioctl(fd232, TIOCSETP, &ttyb) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCSETP): %m", omegadev);
- goto screwed;
- }
-#if defined(OMEGACLK)
- if (ioctl(fd232, TIOCSETD, &ldisc) < 0) {
- syslog(LOG_ERR,
- "omega_start: ioctl(%s, TIOCSETD): %m",omegadev);
- goto screwed;
- }
-#endif /* OMEGACLK */
- }
-#endif /* HAVE_BSD_TTYS */
-
- /*
- * Allocate unit structure
- */
- if (omegaunits[unit] != 0) {
- omega = omegaunits[unit]; /* The one we want is okay */
- } else {
- for (i = 0; i < MAXUNITS; i++) {
- if (!unitinuse[i] && omegaunits[i] != 0)
- break;
- }
- if (i < MAXUNITS) {
- /*
- * Reclaim this one
- */
- omega = omegaunits[i];
- omegaunits[i] = 0;
- } else {
- omega = (struct omegaunit *)
- emalloc(sizeof(struct omegaunit));
- }
- }
- memset((char *)omega, 0, sizeof(struct omegaunit));
- omegaunits[unit] = omega;
-
- /*
- * Set up the structures
- */
- omega->peer = peer;
- omega->unit = (u_char)unit;
- omega->timestarted = current_time;
- omega->station = STATION_NONE;
-
- omega->io.clock_recv = omega_receive;
- omega->io.srcclock = (caddr_t)omega;
- omega->io.datalen = 0;
- omega->io.fd = fd232;
- if (!io_addclock(&omega->io)) {
- goto screwed;
- }
-
- /*
- * All done. Initialize a few random peer variables, then
- * return success.
- */
- peer->precision = OMEGAPRECISION;
- peer->rootdelay = 0;
- peer->rootdispersion = 0;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- unitinuse[unit] = 1;
- return 1;
-
- /*
- * Something broke; abandon ship
- */
-screwed:
- (void) close(fd232);
- return 0;
-}
-
-
-/*
- * omega_shutdown - shut down a OMEGA clock
- */
-static void
-omega_shutdown(unit)
- int unit;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_shutdown: unit %d invalid",
- unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "omega_shutdown: unit %d not in use", unit);
- return;
- }
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- omega = omegaunits[unit];
- io_closeclock(&omega->io);
- unitinuse[unit] = 0;
-}
-
-
-/*
- * omega_report_event - note the occurance of an event
- */
-static void
-omega_report_event(omega, code)
- struct omegaunit *omega;
- int code;
-{
- struct peer *peer;
-
- peer = omega->peer;
- if (omega->status != (u_char)code) {
- omega->status = (u_char)code;
- if (code != CEVNT_NOMINAL)
- omega->lastevent = (u_char)code;
- syslog(LOG_INFO,
- "omega clock %s event %x\n", ntoa(&peer->srcadr), code);
- }
-}
-
-
-/*
- * omega_receive - receive data from the serial interface on a
- * Kinemetrics OM-DC OMEGA clock.
- */
-static void
-omega_receive(rbufp)
- struct recvbuf *rbufp;
-{
- register int i;
- register struct omegaunit *omega;
- register u_char *dpt;
- register char *cp, *cpend;
- register u_char *dpend;
- l_fp tstmp;
- u_fp dispersion, drift;
-
- /*
- * Get the clock this applies to and a pointers to the data
- */
- omega = (struct omegaunit *)rbufp->recv_srcclock;
- dpt = (u_char *)&rbufp->recv_space;
-
-#ifndef PEDANTIC
- /*
- * The OM-DC outputs a timecode every second, but we only want
- * a set of NSTAMPS timecodes when polled (every 64 seconds).
- * Setting PEDANTIC causes a sanity check on every timecode.
- */
- if (!omega->polled)
- return;
-#endif
-
- /*
- * Edit timecode to remove control chars
- */
- dpend = dpt + rbufp->recv_length;
- cp = omega->lastcode;
- cpend = omega->lastcode + BMAX - 1;
- while (dpt < dpend && cp < cpend) {
- if ((*cp = 0x7f & *dpt++) >= ' ') cp++;
-#ifdef OMEGACLK
- else if (*cp == '\r') {
- if (dpend - dpt < 8) {
- /* short timestamp */
- return;
- }
- if (!buftvtots(dpt,&omega->lastrec)) {
- /* screwy timestamp */
- return;
- }
- dpt += 8;
- }
-#endif
- }
- *cp = '\0';
- omega->lencode = cp - omega->lastcode;
-
- if (omega->lencode == 0)
- return;
- else if (omega->lencode != LENOMEGA) {
- omega->badformat++;
- /* Sometimes get a lot of these, filling the log with noise */
- /* omega_report_event(omega, CEVNT_BADREPLY); */
- return;
- }
-
-#ifndef OMEGACLK
- omega->lastrec = rbufp->recv_time;
-#endif
-
-#ifdef DEBUG
- if (debug)
- printf("omega: timecode %d %s\n",
- omega->lencode, omega->lastcode);
-#endif
-
- /*
- * We get down to business, check the timecode format
- * and decode its contents.
- */
- cp = omega->lastcode;
- omega->leap = 0;
- /*
- * Check timecode format.
- */
- if (!isdigit(cp[0]) || /* day of year */
- !isdigit(cp[1]) ||
- !isdigit(cp[2]) ||
- cp[3] != ':' || /* <sp> */
- !isdigit(cp[4]) || /* hours */
- !isdigit(cp[5]) ||
- cp[6] != ':' || /* : separator */
- !isdigit(cp[7]) || /* minutes */
- !isdigit(cp[8]) ||
- cp[9] != ':' || /* : separator */
- !isdigit(cp[10]) || /* seconds */
- !isdigit(cp[11])) {
- omega->badformat++;
- omega_report_event(omega, CEVNT_BADREPLY);
- return;
- }
-
- /*
- * Convert and check values.
- */
- omega->year = 0; /* fake */
- omega->day = cp[0] - '0';
- omega->day = MULBY10(omega->day) + cp[1] - '0';
- omega->day = MULBY10(omega->day) + cp[2] - '0';
- omega->hour = MULBY10(cp[4] - '0') + cp[5] - '0';
- omega->minute = MULBY10(cp[7] - '0') + cp[8] - '0';
- omega->second = MULBY10(cp[10] - '0') + cp[11] - '0';
- omega->msec = 0;
-
- if (omega->day < 1 || omega->day > 366) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADDATE);
- return;
- }
- if (omega->hour > 23 || omega->minute > 59 || omega->second > 59) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
-
- /*
- * Check quality/station-id flag. The OM-DC should normally stay
- * permanently locked to a station, and its time error should be less
- * than 1 msec. If it loses lock for any reason, it makes a worst
- * case drift estimate based on the internally stored stability figure
- * for its reference oscillator. The stability figure can be adjusted
- * by the user based on experience. The default value is 1E05, which
- * is pretty bad - 2E07 is about right for the unit I have.
- *
- * The following is arbitrary, change it if you're offended:
- * For errors less than 50 msec, just clear the station indicator.
- * For errors greater than 50 msec, flag loss of sync and report a
- * propagation problem. If the error is greater than 500 msec,
- * something is dreadfully wrong - report a clock fault.
- *
- * In each case, we set a drift estimate which is used below as an
- * estimate of measurement accuracy.
- */
- omega->quality = cp[12];
- if (cp[12] == '>' || cp[12] == '?') {
- /* Error 500 to 5000 msec */
- omega_report_event(omega, CEVNT_FAULT);
- omega->leap = LEAP_NOTINSYNC;
- omega->station = STATION_NONE;
- drift = U_FP5000MS;
- } else if (cp[12] == '#') {
- /* Error 50 to 500 msec */
- omega_report_event(omega, CEVNT_PROP);
- omega->leap = LEAP_NOTINSYNC;
- omega->station = STATION_NONE;
- drift = U_FP500MS;
- } else if (cp[12] == '*') {
- /* Error 5 to 50 msec */
- omega->lasttime = current_time;
- omega->station = STATION_NONE;
- drift = U_FP50MS;
- } else if (cp[12] == '.') {
- /* Error 1 to 5 msec */
- omega->lasttime = current_time;
- omega->station = STATION_NONE;
- drift = U_FP5MS;
- } else if ('A' <= cp[12] && cp[12] <= 'H') {
- /* Error less than 1 msec */
- omega->lasttime = current_time;
- omega->station = cp[12] - 'A' + 1;
- drift = 0;
- } else {
- omega->badformat++;
- omega_report_event(omega, CEVNT_BADREPLY);
- return;
- }
-
-#ifdef PEDANTIC
- /* If we haven't been polled, bail out. */
- if (!omega->polled)
- return;
-#endif
-
- /*
- * Now, compute the reference time value. Use the heavy
- * machinery for the seconds and the millisecond field for the
- * fraction when present.
- *
- * this code does not yet know how to do the years
- */
- tstmp = omega->lastrec;
- if (!clocktime(omega->day, omega->hour, omega->minute,
- omega->second, GMT, tstmp.l_ui,
- &omega->yearstart, &omega->lastref.l_ui)) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
- MSUTOTSF(omega->msec, omega->lastref.l_uf);
-
- /*
- * Adjust the read value by fudgefactor1 to correct RS232 delays.
- */
- L_ADD(&omega->lastref, &fudgefactor1[omega->unit]);
-
- /* Carousel of NSTAMPS offsets. */
- i = omega->coderecv % NSTAMPS;
- omega->offset[i] = omega->lastref;
- L_SUB(&omega->offset[i], &tstmp);
- omega->coderecv++;
-
- /* If we don't yet have a full set, return. */
- if (omega->coderecv < NSTAMPS)
- return;
-
- /*
- * Filter the samples, add the fudge factor and pass the
- * offset and dispersion along. We use lastrec as both the
- * reference time and receive time in order to avoid being cute,
- * like setting the reference time later than the receive time,
- * which may cause a paranoid protocol module to chuck out the
- * data. If the sample filter chokes because of excessive
- * dispersion or whatever, get a new sample (omega->coderecv
- * is still >= NSTAMPS) and try again.
- */
- if (!omega_process(omega, &tstmp, &dispersion)) {
- omega->baddata++;
- omega_report_event(omega, CEVNT_BADTIME);
- return;
- }
-
- /*
- * Add accumulated clock drift to the dispersion to get
- * a (hopefully) meaningful measurement accuracy estimate.
- */
- dispersion += drift;
- refclock_receive(omega->peer, &tstmp, GMT, dispersion,
- &omega->lastrec, &omega->lastrec, omega->leap);
-
- /*
- * We have succeeded in answering the poll. If the clock
- * is locked, we're nominal.
- */
- omega->polled = 0;
- omega->coderecv = 0;
- if (omega->leap != LEAP_NOTINSYNC)
- omega_report_event(omega, CEVNT_NOMINAL);
-}
-
-
-/*
- * omega_send - time to send the clock a signal to cough up a time sample
- */
-static void
-omega_send(omega,cmd)
- struct omegaunit *omega;
- char *cmd;
-{
- if (!readonlyclockflag[omega->unit]) {
- /*
- * Send a command to the clock.
- */
- if (write(omega->io.fd, cmd, 1) != 1) {
- syslog(LOG_ERR, "omega_send: unit %d: %m", omega->unit);
- omega_report_event(omega, CEVNT_FAULT);
- }
- }
-}
-
-
-/*
- * Compare two l_fp's, used with qsort()
- */
-static int
-omega_cmpl_fp(p1, p2)
- register void *p1, *p2;
-{
-
- if (!L_ISGEQ((l_fp *)p1, (l_fp *)p2))
- return (-1);
- if (L_ISEQU((l_fp *)p1, (l_fp *)p2))
- return (0);
- return (1);
-}
-
-
-/*
- * omega_process - process a pile of samples from the clock
- */
-static char
-omega_process(omega, offset, dispersion)
- struct omegaunit *omega;
- l_fp *offset;
- u_fp *dispersion;
-{
- register int i, n;
- register U_LONG med_ui, med_uf, tmp_ui, tmp_uf;
- l_fp off[NSTAMPS];
- u_fp disp;
-
- /* Copy in offsets and sort into ascending order */
- for (i = 0; i < NSTAMPS; i++)
- off[i] = omega->offset[i];
- qsort((char *)off, NSTAMPS, sizeof(l_fp), omega_cmpl_fp);
- /*
- * Reject the furthest from the median until NSKEEP samples remain
- */
- i = 0;
- n = NSTAMPS;
- while ((n - i) > NSKEEP) {
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- med_ui = off[(n+i)/2].l_ui;
- med_uf = off[(n+i)/2].l_uf;
- M_SUB(tmp_ui, tmp_uf, med_ui, med_uf);
- M_SUB(med_ui, med_uf, off[i].l_ui, off[i].l_uf);
- if (M_ISHIS(med_ui, med_uf, tmp_ui, tmp_uf)) {
- /* reject low end */
- i++;
- } else {
- /* reject high end */
- n--;
- }
- }
-
- /*
- * Compute the dispersion based on the difference between the
- * extremes of the remaining offsets. If this is greater than
- * the allowed sample set dispersion, bail out. Otherwise,
- * return the median offset and the dispersion.
- */
- tmp_ui = off[n-1].l_ui;
- tmp_uf = off[n-1].l_uf;
- M_SUB(tmp_ui, tmp_uf, off[i].l_ui, off[i].l_uf);
- disp = MFPTOFP(tmp_ui, tmp_uf);
- if (disp > OMEGAMAXDISPERSE)
- return 0;
- *offset = off[(n+1)/2];
- *dispersion = disp;
- return 1;
-}
-
-
-/*
- * omega_poll - called by the transmit procedure
- */
-static void
-omega_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- struct omegaunit *omega;
-
- /*
- * You don't need to poll this clock. It puts out timecodes
- * once per second. If asked for a timestamp, take note.
- * The next time a timecode comes in, it will be fed back.
- */
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_poll: unit %d invalid", unit);
- return;
- }
- if (!unitinuse[unit]) {
- syslog(LOG_ERR, "omega_poll: unit %d not in use", unit);
- return;
- }
- omega = omegaunits[unit];
- if ((current_time - omega->lasttime) > 150) {
- omega->noreply++;
- omega_report_event(omegaunits[unit], CEVNT_TIMEOUT);
- }
-
- /*
- * polled every 64 seconds. Ask OMEGA_RECEIVE to hand in a timestamp.
- */
- omega->polled = 1;
- omega->polls++;
- /*
- * Ensure the clock is running in the correct mode - on-second
- * timestamps.
- */
- omega_send(omega,"C");
-}
-
-
-/*
- * omega_control - set fudge factors, return statistics
- */
-static void
-omega_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_control: unit %d invalid", unit);
- return;
- }
-
- if (in != 0) {
- if (in->haveflags & CLK_HAVETIME1)
- fudgefactor1[unit] = in->fudgetime1;
- if (in->haveflags & CLK_HAVETIME2)
- fudgefactor2[unit] = in->fudgetime2;
- if (in->haveflags & CLK_HAVEVAL1)
- stratumtouse[unit] = (u_char)(in->fudgeval1);
- if (in->haveflags & CLK_HAVEVAL2)
- refid[unit] = in->fudgeval2;
- if (in->haveflags & CLK_HAVEFLAG1)
- readonlyclockflag[unit] = in->flags & CLK_FLAG1;
- if (unitinuse[unit]) {
- struct peer *peer;
-
- peer = omegaunits[unit]->peer;
- peer->stratum = stratumtouse[unit];
- peer->refid = refid[unit];
- }
- }
-
- if (out != 0) {
- out->type = REFCLK_OMEGA_TRUETIME;
- out->haveflags = CLK_HAVETIME1 | CLK_HAVETIME2 | CLK_HAVEVAL1 |
- CLK_HAVEVAL2| CLK_HAVEFLAG1;
- out->clockdesc = OMEGADESCRIPTION;
- out->fudgetime1 = fudgefactor1[unit];
- out->fudgetime2 = fudgefactor2[unit];
- out->fudgeval1 = (LONG)stratumtouse[unit];
- out->fudgeval2 = refid[unit];
- out->flags = readonlyclockflag[unit];
- if (unitinuse[unit]) {
- omega = omegaunits[unit];
- out->flags |= omega->station << 1;
- out->lencode = omega->lencode;
- out->lastcode = omega->lastcode;
- out->timereset = current_time - omega->timestarted;
- out->polls = omega->polls;
- out->noresponse = omega->noreply;
- out->badformat = omega->badformat;
- out->baddata = omega->baddata;
- out->lastevent = omega->lastevent;
- out->currentstatus = omega->status;
- }
- }
-}
-
-
-/*
- * omega_buginfo - return clock dependent debugging info
- */
-static void
-omega_buginfo(unit, bug)
- int unit;
- register struct refclockbug *bug;
-{
- register struct omegaunit *omega;
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR, "omega_buginfo: unit %d invalid", unit);
- return;
- }
-
- if (!unitinuse[unit])
- return;
- omega = omegaunits[unit];
-
- bug->nvalues = 11;
- bug->ntimes = 5;
- if (omega->lasttime != 0)
- bug->values[0] = current_time - omega->lasttime;
- else
- bug->values[0] = 0;
- bug->values[1] = (U_LONG)omega->reason;
- bug->values[2] = (U_LONG)omega->year;
- bug->values[3] = (U_LONG)omega->day;
- bug->values[4] = (U_LONG)omega->hour;
- bug->values[5] = (U_LONG)omega->minute;
- bug->values[6] = (U_LONG)omega->second;
- bug->values[7] = (U_LONG)omega->msec;
- bug->values[8] = omega->noreply;
- bug->values[9] = omega->yearstart;
- bug->values[10] = omega->quality;
- bug->stimes = 0x1c;
- bug->times[0] = omega->lastref;
- bug->times[1] = omega->lastrec;
- bug->times[2] = omega->offset[0];
- bug->times[3] = omega->offset[1];
- bug->times[4] = omega->offset[2];
-}
-#endif
diff --git a/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c b/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c
deleted file mode 100644
index 0d95d18..0000000
--- a/usr.sbin/xntpd/xntpd/refclock_old/refclock_parse.c
+++ /dev/null
@@ -1,3605 +0,0 @@
-#if defined(REFCLOCK) && (defined(PARSE) || defined(PARSEPPS))
-/*
- * /src/NTP/REPOSITORY/v3/xntpd/refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
- *
- * refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp
- *
- * generic reference clock driver for receivers
- *
- * make use of a STREAMS module for input processing where
- * available and configured. Currently the STREAMS module
- * is only available for Suns running SunOS 4.x and SunOS5.x (new - careful!)
- *
- * Copyright (c) 1989,1990,1991,1992,1993,1994
- * Frank Kardel Friedrich-Alexander Universitaet Erlangen-Nuernberg
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- *
- */
-
-/*
- * Defines:
- * REFCLOCK && (PARSE||PARSEPPS)
- * - enable this mess
- * STREAM - allow for STREAMS modules
- * ("parse", "ppsclocd", "ppsclock")
- * PARSEPPS - provide PPS information to loopfilter (for
- * backward compatibilty only)
- * PPS - supply loopfilter with PPS samples (if configured)
- * PPSPPS - notify loopfilter of PPS file descriptor
- *
- * FREEBSD_CONRAD - Make very cheap "Conrad DCF77 RS-232" gadget work
- * with FreeBSD.
- * TTY defines:
- * HAVE_BSD_TTYS - currently unsupported
- * HAVE_SYSV_TTYS - will use termio.h
- * HAVE_TERMIOS - will use termios.h
- * STREAM - will use streams and implies HAVE_TERMIOS
- */
-
-/*
- * This driver currently provides the support for
- * - Meinberg DCF77 receiver DCF77 PZF 535 (TCXO version) (DCF)
- * - Meinberg DCF77 receiver DCF77 PZF 535 (OCXO version) (DCF)
- * - Meinberg DCF77 receiver U/A 31 (DCF)
- * - ELV DCF7000 (DCF)
- * - Schmid clock (DCF)
- * - Conrad DCF77 receiver module (DCF)
- * - FAU DCF77 NTP receiver (TimeBrick) (DCF)
- * - Meinberg GPS166 (GPS)
- * - Trimble SV6 (GPS)
- *
- */
-
-/*
- * Meinberg receivers are connected via a 9600 baud serial line
- *
- * Receivers that do NOT support:
- * - leap second indication
- * DCF U/A 31
- * DCF PZF535 (stock version)
- *
- * so...
- * - for PZF535 please ask for revision PZFUERL4.6 or higher
- * (support for leap second and alternate antenna)
- *
- * The Meinberg GPS receiver also has a special NTP time stamp
- * format. The firmware release is Uni-Erlangen. Only this
- * firmware release is supported by xntp3.
- *
- * Meinberg generic receiver setup:
- * output time code every second
- * Baud rate 9600 7E2S
- */
-
-#include "ntpd.h"
-#include "ntp_refclock.h"
-#include "ntp_unixtime.h"
-#include "ntp_control.h"
-
-#include <stdio.h>
-#include <ctype.h>
-#include <time.h>
-
-#include <sys/errno.h>
-#ifdef FREEBSD_CONRAD
-#include <sys/ioctl.h>
-#endif
-extern int errno;
-
-#if !defined(STREAM) && !defined(HAVE_SYSV_TTYS) && !defined(HAVE_BSD_TTYS) && !defined(HAVE_TERMIOS)
-/* #error NEED TO DEFINE ONE OF "STREAM" or "HAVE_SYSV_TTYS" */
-NEED TO DEFINE ONE OF "STREAM", "HAVE_SYSV_TTYS" or "HAVE_TERMIOS"
-#endif
-
-#ifdef STREAM
-#include <sys/stream.h>
-#include <sys/stropts.h>
-#ifndef HAVE_TERMIOS
-#define HAVE_TERMIOS
-#endif
-#endif
-
-#ifdef HAVE_TERMIOS
-#include <termios.h>
-#define TTY_GETATTR(_FD_, _ARG_) tcgetattr((_FD_), (_ARG_))
-#define TTY_SETATTR(_FD_, _ARG_) tcsetattr((_FD_), TCSANOW, (_ARG_))
-#undef HAVE_SYSV_TTYS
-#endif
-
-#ifdef HAVE_SYSV_TTYS
-#include <termio.h>
-#define TTY_GETATTR(_FD_, _ARG_) ioctl((_FD_), TCGETA, (_ARG_))
-#define TTY_SETATTR(_FD_, _ARG_) ioctl((_FD_), TCSETAW, (_ARG_))
-#endif
-
-#ifdef HAVE_BSD_TTYS
-/* #error CURRENTLY NO BSD TTY SUPPORT */
-CURRENTLY NO BSD TTY SUPPORT
-#endif
-
-#if !defined(O_RDWR) /* XXX SOLARIS */
-#include <fcntl.h>
-#endif /* !def(O_RDWR) */
-
-#ifdef PPSPPS
-#include <sys/ppsclock.h>
-#endif
-
-#include "ntp_select.h"
-#include "ntp_stdlib.h"
-
-#include "parse.h"
-
-#if !defined(NO_SCCSID) && !defined(lint) && !defined(__GNUC__)
-static char rcsid[]="refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp";
-#endif
-
-/**===========================================================================
- ** external interface to xntp mechanism
- **/
-
-static void parse_init P((void));
-static int parse_start P((u_int, struct peer *));
-static void parse_shutdown P((int));
-static void parse_poll P((int, struct peer *));
-static void parse_control P((u_int, struct refclockstat *, struct refclockstat *));
-
-#define parse_buginfo noentry
-
-struct refclock refclock_parse = {
- parse_start,
- parse_shutdown,
- parse_poll,
- parse_control,
- parse_init,
- parse_buginfo,
- NOFLAGS
-};
-
-/*
- * the unit field selects for one the prototype to be used (lower 4 bits)
- * and for the other the clock type in case of different but similar
- * receivers (bits 4-6)
- * the most significant bit encodes PPS support
- * when the most significant bit is set the pps telegrams will be used
- * for controlling the local clock (ntp_loopfilter.c)
- * receiver specific configration data is kept in the clockinfo field.
- */
-
-/*
- * Definitions
- */
-#define MAXUNITS 4 /* maximum number of "PARSE" units permitted */
-#define PARSEDEVICE "/dev/refclock-%d" /* device to open %d is unit number */
-
-/**===========================================================================
- ** function vector for dynamically binding io handling mechanism
- **/
-
-typedef struct bind
-{
- char *bd_description; /* name of type of binding */
- int (*bd_init)(); /* initialize */
- void (*bd_end)(); /* end */
- int (*bd_setcs)(); /* set character size */
- int (*bd_disable)(); /* disable */
- int (*bd_enable)(); /* enable */
- int (*bd_getfmt)(); /* get format */
- int (*bd_setfmt)(); /* setfmt */
- int (*bd_getstat)(); /* getstat */
- int (*bd_setstat)(); /* setstat */
- int (*bd_timecode)(); /* get time code */
- void (*bd_receive)(); /* receive operation */
- void (*bd_poll)(); /* poll operation */
-} bind_t;
-
-#define PARSE_END(_X_) (*(_X_)->binding->bd_end)(_X_)
-#define PARSE_SETCS(_X_, _CS_) (*(_X_)->binding->bd_setcs)(_X_, _CS_)
-#define PARSE_ENABLE(_X_) (*(_X_)->binding->bd_enable)(_X_)
-#define PARSE_DISABLE(_X_) (*(_X_)->binding->bd_disable)(_X_)
-#define PARSE_GETFMT(_X_, _DCT_) (*(_X_)->binding->bd_getfmt)(_X_, _DCT_)
-#define PARSE_SETFMT(_X_, _DCT_) (*(_X_)->binding->bd_setfmt)(_X_, _DCT_)
-#define PARSE_GETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_getstat)(_X_, _DCT_)
-#define PARSE_SETSTAT(_X_, _DCT_) (*(_X_)->binding->bd_setstat)(_X_, _DCT_)
-#define PARSE_GETTIMECODE(_X_, _DCT_) (*(_X_)->binding->bd_timecode)(_X_, _DCT_)
-#define PARSE_POLL(_X_) (*(_X_)->binding->bd_poll)(_X_)
-
-/*
- * io modes
- */
-#define PARSE_F_NOPOLLONLY 0x0001 /* always do async io (possible PPS support via PARSE) */
-#define PARSE_F_POLLONLY 0x0002 /* never do async io (no PPS support via PARSE) */
-#define PARSE_F_PPSPPS 0x0004 /* use loopfilter PPS code (CIOGETEV) */
-#define PARSE_F_PPSONSECOND 0x0008 /* PPS pulses are on second */
-
-/**===========================================================================
- ** refclock instance data
- **/
-
-struct parseunit
-{
- /*
- * XNTP management
- */
- struct peer *peer; /* backlink to peer structure - refclock inactive if 0 */
- int fd; /* device file descriptor */
- u_char unit; /* encoded unit/type/PPS */
-
- /*
- * XNTP io
- */
- struct refclockio io; /* io system structure (used in PPS mode) */
- bind_t *binding; /* io handling binding */
-
- /*
- * parse state
- */
- parse_t parseio; /* io handling structure (user level parsing) */
-
- /*
- * type specific parameters
- */
- struct clockinfo *parse_type; /* link to clock description */
-
- /*
- * clock specific configuration
- */
- l_fp basedelay; /* clock local phase offset */
- l_fp ppsdelay; /* clock local pps phase offset */
-
- /*
- * clock state handling/reporting
- */
- u_char flags; /* flags (leap_control) */
- u_char status; /* current status */
- u_char lastevent; /* last not NORMAL status */
- U_LONG lastchange; /* time (xntp) when last state change accured */
- U_LONG statetime[CEVNT_MAX+1]; /* accumulated time of clock states */
- struct event stattimer; /* statistics timer */
- U_LONG polls; /* polls from NTP protocol machine */
- U_LONG noresponse; /* number of expected but not seen datagrams */
- U_LONG badformat; /* bad format (failed format conversions) */
- U_LONG baddata; /* usually bad receive length, bad format */
-
- u_char pollonly; /* 1 for polling only (no PPS mode) */
- u_char pollneeddata; /* 1 for receive sample expected in PPS mode */
- U_LONG laststatus; /* last packet status (error indication) */
- u_short lastformat; /* last format used */
- U_LONG lastsync; /* time (xntp) when clock was last seen fully synchronized */
- U_LONG timestarted; /* time (xntp) when peer clock was instantiated */
- U_LONG nosynctime; /* time (xntp) when last nosync message was posted */
- U_LONG lastmissed; /* time (xntp) when poll didn't get data (powerup heuristic) */
- U_LONG ppsserial; /* magic cookie for ppsclock serials (avoids stale ppsclock data) */
- parsetime_t time; /* last (parse module) data */
- void *localdata; /* optional local data */
-};
-
-
-/**===========================================================================
- ** Clockinfo section all parameter for specific clock types
- ** includes NTP paramaters, TTY parameters and IO handling parameters
- **/
-
-static void poll_dpoll P((struct parseunit *));
-static void poll_poll P((struct parseunit *));
-static int poll_init P((struct parseunit *));
-static void poll_end P((struct parseunit *));
-
-typedef struct poll_info
-{
- U_LONG rate; /* poll rate - once every "rate" seconds - 0 off */
- char * string; /* string to send for polling */
- U_LONG count; /* number of charcters in string */
-} poll_info_t;
-
-#define NO_FLAGS 0
-#define NO_POLL (void (*)())0
-#define NO_INIT (int (*)())0
-#define NO_END (void (*)())0
-#define NO_DATA (void *)0
-#define NO_FORMAT ""
-#define NO_PPSDELAY 0
-
-#define DCF_ID "DCF" /* generic DCF */
-#define DCF_A_ID "DCFa" /* AM demodulation */
-#define DCF_P_ID "DCFp" /* psuedo random phase shift */
-#define GPS_ID "GPS" /* GPS receiver */
-
-#define NOCLOCK_ROOTDELAY 0x00000000
-#define NOCLOCK_BASEDELAY 0x00000000
-#define NOCLOCK_DESCRIPTION ((char *)0)
-#define NOCLOCK_MAXUNSYNC 0
-#define NOCLOCK_CFLAG 0
-#define NOCLOCK_IFLAG 0
-#define NOCLOCK_OFLAG 0
-#define NOCLOCK_LFLAG 0
-#define NOCLOCK_ID "TILT"
-#define NOCLOCK_POLL NO_POLL
-#define NOCLOCK_INIT NO_INIT
-#define NOCLOCK_END NO_END
-#define NOCLOCK_DATA NO_DATA
-#define NOCLOCK_FORMAT NO_FORMAT
-#define NOCLOCK_TYPE CTL_SST_TS_UNSPEC
-
-#define DCF_TYPE CTL_SST_TS_LF
-#define GPS_TYPE CTL_SST_TS_UHF
-
-/*
- * receiver specific constants
- */
-#define MBG_CFLAG19200 (B19200|CS7|PARENB|CREAD|HUPCL)
-#define MBG_CFLAG (B9600|CS7|PARENB|CREAD|HUPCL)
-#define MBG_IFLAG (IGNBRK|IGNPAR|ISTRIP)
-#define MBG_OFLAG 0
-#define MBG_LFLAG 0
-/*
- * Meinberg DCF U/A 31 (AM) receiver
- */
-#define DCFUA31_ROOTDELAY 0x00000D00 /* 50.78125ms */
-#define DCFUA31_BASEDELAY 0x02C00000 /* 10.7421875ms: 10 ms (+/- 3 ms) */
-#define DCFUA31_DESCRIPTION "Meinberg DCF U/A 31"
-#define DCFUA31_MAXUNSYNC 60*30 /* only trust clock for 1/2 hour */
-#define DCFUA31_CFLAG MBG_CFLAG
-#define DCFUA31_IFLAG MBG_IFLAG
-#define DCFUA31_OFLAG MBG_OFLAG
-#define DCFUA31_LFLAG MBG_LFLAG
-
-/*
- * Meinberg DCF PZF535/TCXO (FM/PZF) receiver
- */
-#define DCFPZF535_ROOTDELAY 0x00000034 /* 800us */
-#define DCFPZF535_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define DCFPZF535_DESCRIPTION "Meinberg DCF PZF 535/TCXO"
-#define DCFPZF535_MAXUNSYNC 60*60*12 /* only trust clock for 12 hours
- * @ 5e-8df/f we have accumulated
- * at most 2.16 ms (thus we move to
- * NTP synchronisation */
-#define DCFPZF535_CFLAG MBG_CFLAG
-#define DCFPZF535_IFLAG MBG_IFLAG
-#define DCFPZF535_OFLAG MBG_OFLAG
-#define DCFPZF535_LFLAG MBG_LFLAG
-
-
-/*
- * Meinberg DCF PZF535/OCXO receiver
- */
-#define DCFPZF535OCXO_ROOTDELAY 0x00000034 /* 800us (max error * 10) */
-#define DCFPZF535OCXO_BASEDELAY 0x00800000 /* 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define DCFPZF535OCXO_DESCRIPTION "Meinberg DCF PZF 535/OCXO"
-#define DCFPZF535OCXO_MAXUNSYNC 60*60*96 /* only trust clock for 4 days
- * @ 5e-9df/f we have accumulated
- * at most an error of 1.73 ms
- * (thus we move to NTP synchronisation) */
-#define DCFPZF535OCXO_CFLAG MBG_CFLAG
-#define DCFPZF535OCXO_IFLAG MBG_IFLAG
-#define DCFPZF535OCXO_OFLAG MBG_OFLAG
-#define DCFPZF535OCXO_LFLAG MBG_LFLAG
-
-/*
- * Meinberg GPS166 receiver
- */
-#define GPS166_ROOTDELAY 0x00000000 /* nothing here */
-#define GPS166_BASEDELAY 0x00800000 /* XXX to be fixed ! 1.968ms +- 104us (oscilloscope) - relative to start (end of STX) */
-#define GPS166_DESCRIPTION "Meinberg GPS166 receiver"
-#define GPS166_MAXUNSYNC 0 /* this clock is immediately lost */
-#define GPS166_CFLAG MBG_CFLAG
-#define GPS166_IFLAG MBG_IFLAG
-#define GPS166_OFLAG MBG_OFLAG
-#define GPS166_LFLAG MBG_LFLAG
-#define GPS166_POLL NO_POLL
-#define GPS166_INIT NO_INIT
-#define GPS166_END NO_END
-#define GPS166_DATA NO_DATA
-#define GPS166_ID GPS_ID
-#define GPS166_FORMAT NO_FORMAT
-
-/*
- * ELV DCF7000 Wallclock-Receiver/Switching Clock (Kit)
- *
- * This is really not the hottest clock - but before you have nothing ...
- */
-#define DCF7000_ROOTDELAY 0x00000364 /* 13 ms */
-#define DCF7000_BASEDELAY 0x67AE0000 /* 405 ms - slow blow */
-#define DCF7000_DESCRIPTION "ELV DCF7000"
-#define DCF7000_MAXUNSYNC (60*5) /* sorry - but it just was not build as a clock */
-#define DCF7000_CFLAG (B9600|CS8|CREAD|PARENB|PARODD|CLOCAL|HUPCL)
-#define DCF7000_IFLAG (IGNBRK)
-#define DCF7000_OFLAG 0
-#define DCF7000_LFLAG 0
-
-/*
- * Schmid DCF Receiver Kit
- *
- * When the WSDCF clock is operating optimally we want the primary clock
- * distance to come out at 300 ms. Thus, peer.distance in the WSDCF peer
- * structure is set to 290 ms and we compute delays which are at least
- * 10 ms long. The following are 290 ms and 10 ms expressed in u_fp format
- */
-#define WS_POLLRATE 1 /* every second - watch interdependency with poll routine */
-#define WS_POLLCMD "\163"
-#define WS_CMDSIZE 1
-
-static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE };
-
-#define WSDCF_INIT poll_init
-#define WSDCF_POLL poll_dpoll
-#define WSDCF_END poll_end
-#define WSDCF_DATA ((void *)(&wsdcf_pollinfo))
-#define WSDCF_ROOTDELAY 0X00004A3D /* ~ 290ms */
-#define WSDCF_BASEDELAY 0x028F5C29 /* ~ 10ms */
-#define WSDCF_DESCRIPTION "WS/DCF Receiver"
-#define WSDCF_FORMAT "Schmid"
-#define WSDCF_MAXUNSYNC (60*60) /* assume this beast hold at 1 h better than 2 ms XXX-must verify */
-#define WSDCF_CFLAG (B1200|CS8|CREAD|CLOCAL)
-#define WSDCF_IFLAG 0
-#define WSDCF_OFLAG 0
-#define WSDCF_LFLAG 0
-
-/*
- * RAW DCF77 - input of DCF marks via RS232 - many variants
- */
-#define RAWDCF_FLAGS PARSE_F_NOPOLLONLY
-#define RAWDCF_ROOTDELAY 0x00000364 /* 13 ms */
-#define RAWDCF_FORMAT "RAW DCF77 Timecode"
-#define RAWDCF_MAXUNSYNC (0) /* sorry - its a true receiver - no signal - no time */
-
-#ifdef FREEBSD_CONRAD
-#define RAWDCF_CFLAG (CS8|CREAD|CLOCAL)
-#else
-#define RAWDCF_CFLAG (B50|CS8|CREAD|CLOCAL)
-#endif
-#define RAWDCF_IFLAG 0
-#define RAWDCF_OFLAG 0
-#define RAWDCF_LFLAG 0
-
-/*
- * RAW DCF variants
- */
-/*
- * Conrad receiver
- *
- * simplest (cheapest) DCF clock - e. g. DCF77 receiver by Conrad
- * (~40DM - roughly $30 ) followed by a level converter for RS232
- */
-#define CONRAD_BASEDELAY 0x420C49B0 /* ~258 ms - Conrad receiver @ 50 Baud on a Sun */
-#define CONRAD_DESCRIPTION "RAW DCF77 CODE (Conrad DCF77 receiver module)"
-
-/*
- * TimeBrick receiver
- */
-#define TIMEBRICK_BASEDELAY 0x35C29000 /* ~210 ms - TimeBrick @ 50 Baud on a Sun */
-#define TIMEBRICK_DESCRIPTION "RAW DCF77 CODE (TimeBrick)"
-
-/*
- * Trimble SV6 GPS receiver
- */
-#define TRIM_POLLRATE 0 /* only true direct polling */
-#define TRIM_POLLCMD ">QTM<"
-#define TRIM_CMDSIZE 5
-
-static poll_info_t trimble_pollinfo = { TRIM_POLLRATE, TRIM_POLLCMD, TRIM_CMDSIZE };
-static int trimble_init P((struct parseunit *));
-
-#define TRIMBLESV6_CFLAG (B4800|CS8|CREAD)
-#define TRIMBLESV6_IFLAG (BRKINT|IGNPAR|ISTRIP|ICRNL|IXON)
-#define TRIMBLESV6_OFLAG (OPOST|ONLCR)
-#define TRIMBLESV6_LFLAG (ICANON|ECHOK)
-#define TRIMBLESV6_FLAGS (PARSE_F_PPSPPS|PARSE_F_PPSONSECOND)
-#define TRIMBLESV6_POLL poll_dpoll
-#define TRIMBLESV6_INIT trimble_init
-#define TRIMBLESV6_END poll_end
-#define TRIMBLESV6_DATA ((void *)(&trimble_pollinfo))
-#define TRIMBLESV6_ID GPS_ID
-#define TRIMBLESV6_FORMAT NO_FORMAT
-#define TRIMBLESV6_ROOTDELAY 0x0
-#define TRIMBLESV6_BASEDELAY 0x0
-#define TRIMBLESV6_DESCRIPTION "Trimble SV6 GPS receiver"
-#define TRIMBLESV6_MAXUNSYNC 0
-#define TRIMBLESV6_EOL '<'
-
-static struct clockinfo
-{
- U_LONG cl_flags; /* operation flags (io modes) */
- void (*cl_poll)(); /* active poll routine */
- int (*cl_init)(); /* active poll init routine */
- void (*cl_end)(); /* active poll end routine */
- void *cl_data; /* local data area for "poll" mechanism */
- u_fp cl_rootdelay; /* rootdelay */
- U_LONG cl_basedelay; /* current offset - unsigned l_fp fractional part */
- U_LONG cl_ppsdelay; /* current PPS offset - unsigned l_fp fractional part */
- char *cl_id; /* ID code (usually "DCF") */
- char *cl_description; /* device name */
- char *cl_format; /* fixed format */
- u_char cl_type; /* clock type (ntp control) */
- U_LONG cl_maxunsync; /* time to trust oscillator after loosing synch */
- U_LONG cl_cflag; /* terminal io flags */
- U_LONG cl_iflag; /* terminal io flags */
- U_LONG cl_oflag; /* terminal io flags */
- U_LONG cl_lflag; /* terminal io flags */
-} clockinfo[] =
-{ /* 0. 0.0.128 - base offset for PPS support */
- { /* 127.127.8.<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFPZF535_ROOTDELAY,
- DCFPZF535_BASEDELAY,
- NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFPZF535_MAXUNSYNC,
- DCFPZF535_CFLAG,
- DCFPZF535_IFLAG,
- DCFPZF535_OFLAG,
- DCFPZF535_LFLAG
- },
- { /* 127.127.8.4+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFPZF535OCXO_ROOTDELAY,
- DCFPZF535OCXO_BASEDELAY,
- NO_PPSDELAY,
- DCF_P_ID,
- DCFPZF535OCXO_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFPZF535OCXO_MAXUNSYNC,
- DCFPZF535OCXO_CFLAG,
- DCFPZF535OCXO_IFLAG,
- DCFPZF535OCXO_OFLAG,
- DCFPZF535OCXO_LFLAG
- },
- { /* 127.127.8.8+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCFUA31_ROOTDELAY,
- DCFUA31_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- DCFUA31_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCFUA31_MAXUNSYNC,
- DCFUA31_CFLAG,
- DCFUA31_IFLAG,
- DCFUA31_OFLAG,
- DCFUA31_LFLAG
- },
- { /* 127.127.8.12+<device> */
- NO_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- DCF7000_ROOTDELAY,
- DCF7000_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- DCF7000_DESCRIPTION,
- NO_FORMAT,
- DCF_TYPE,
- DCF7000_MAXUNSYNC,
- DCF7000_CFLAG,
- DCF7000_IFLAG,
- DCF7000_OFLAG,
- DCF7000_LFLAG
- },
- { /* 127.127.8.16+<device> */
- NO_FLAGS,
- WSDCF_POLL,
- WSDCF_INIT,
- WSDCF_END,
- WSDCF_DATA,
- WSDCF_ROOTDELAY,
- WSDCF_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- WSDCF_DESCRIPTION,
- WSDCF_FORMAT,
- DCF_TYPE,
- WSDCF_MAXUNSYNC,
- WSDCF_CFLAG,
- WSDCF_IFLAG,
- WSDCF_OFLAG,
- WSDCF_LFLAG
- },
- { /* 127.127.8.20+<device> */
- RAWDCF_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- RAWDCF_ROOTDELAY,
- CONRAD_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- CONRAD_DESCRIPTION,
- RAWDCF_FORMAT,
- DCF_TYPE,
- RAWDCF_MAXUNSYNC,
- RAWDCF_CFLAG,
- RAWDCF_IFLAG,
- RAWDCF_OFLAG,
- RAWDCF_LFLAG
- },
- { /* 127.127.8.24+<device> */
- RAWDCF_FLAGS,
- NO_POLL,
- NO_INIT,
- NO_END,
- NO_DATA,
- RAWDCF_ROOTDELAY,
- TIMEBRICK_BASEDELAY,
- NO_PPSDELAY,
- DCF_A_ID,
- TIMEBRICK_DESCRIPTION,
- RAWDCF_FORMAT,
- DCF_TYPE,
- RAWDCF_MAXUNSYNC,
- RAWDCF_CFLAG,
- RAWDCF_IFLAG,
- RAWDCF_OFLAG,
- RAWDCF_LFLAG
- },
- { /* 127.127.8.28+<device> */
- NO_FLAGS,
- GPS166_POLL,
- GPS166_INIT,
- GPS166_END,
- GPS166_DATA,
- GPS166_ROOTDELAY,
- GPS166_BASEDELAY,
- NO_PPSDELAY,
- GPS166_ID,
- GPS166_DESCRIPTION,
- GPS166_FORMAT,
- GPS_TYPE,
- GPS166_MAXUNSYNC,
- GPS166_CFLAG,
- GPS166_IFLAG,
- GPS166_OFLAG,
- GPS166_LFLAG
- },
- { /* 127.127.8.32+<device> */
- TRIMBLESV6_FLAGS,
- TRIMBLESV6_POLL,
- TRIMBLESV6_INIT,
- TRIMBLESV6_END,
- TRIMBLESV6_DATA,
- TRIMBLESV6_ROOTDELAY,
- TRIMBLESV6_BASEDELAY,
- NO_PPSDELAY,
- TRIMBLESV6_ID,
- TRIMBLESV6_DESCRIPTION,
- TRIMBLESV6_FORMAT,
- GPS_TYPE,
- TRIMBLESV6_MAXUNSYNC,
- TRIMBLESV6_CFLAG,
- TRIMBLESV6_IFLAG,
- TRIMBLESV6_OFLAG,
- TRIMBLESV6_LFLAG
- }
-};
-
-static int ncltypes = sizeof(clockinfo) / sizeof(struct clockinfo);
-
-#define CL_REALTYPE(x) (((x) >> 2) & 0x1F)
-#define CL_TYPE(x) ((CL_REALTYPE(x) >= ncltypes) ? ~0 : CL_REALTYPE(x))
-#define CL_PPS(x) ((x) & 0x80)
-#define CL_UNIT(x) ((x) & 0x3)
-
-/*
- * Other constant stuff
- */
-#define PARSEHSREFID 0x7f7f08ff /* 127.127.8.255 refid for hi strata */
-
-#define PARSENOSYNCREPEAT (10*60) /* mention uninitialized clocks all 10 minutes */
-#define PARSESTATISTICS (60*60) /* output state statistics every hour */
-
-static struct parseunit *parseunits[MAXUNITS];
-
-extern U_LONG current_time;
-extern s_char sys_precision;
-extern struct event timerqueue[];
-#ifdef PPSPPS
-extern int fdpps;
-#endif
-
-static int notice = 0;
-
-#define PARSE_STATETIME(parse, i) ((parse->status == i) ? parse->statetime[i] + current_time - parse->lastchange : parse->statetime[i])
-
-static void parse_event P((struct parseunit *, int));
-static void parse_process P((struct parseunit *, parsetime_t *));
-
-/**===========================================================================
- ** implementation of i/o handling methods
- ** (all STREAM, partial STREAM, user level)
- **/
-
-/*
- * define possible io handling methods
- */
-#ifdef STREAM
-static int ppsclock_init P((struct parseunit *));
-static int stream_init P((struct parseunit *));
-static void stream_nop P((struct parseunit *));
-static int stream_enable P((struct parseunit *));
-static int stream_disable P((struct parseunit *));
-static int stream_setcs P((struct parseunit *, parsectl_t *));
-static int stream_getfmt P((struct parseunit *, parsectl_t *));
-static int stream_setfmt P((struct parseunit *, parsectl_t *));
-static int stream_getstat P((struct parseunit *, parsectl_t *));
-static int stream_setstat P((struct parseunit *, parsectl_t *));
-static int stream_timecode P((struct parseunit *, parsectl_t *));
-static void stream_receive P((struct recvbuf *));
-static void stream_poll P((struct parseunit *));
-#endif
-
-static int local_init P((struct parseunit *));
-static void local_end P((struct parseunit *));
-static int local_nop P((struct parseunit *));
-static int local_setcs P((struct parseunit *, parsectl_t *));
-static int local_getfmt P((struct parseunit *, parsectl_t *));
-static int local_setfmt P((struct parseunit *, parsectl_t *));
-static int local_getstat P((struct parseunit *, parsectl_t *));
-static int local_setstat P((struct parseunit *, parsectl_t *));
-static int local_timecode P((struct parseunit *, parsectl_t *));
-static void local_receive P((struct recvbuf *));
-static void local_poll P((struct parseunit *));
-
-static bind_t io_bindings[] =
-{
-#ifdef STREAM
- {
- "parse STREAM",
- stream_init,
- stream_nop,
- stream_setcs,
- stream_disable,
- stream_enable,
- stream_getfmt,
- stream_setfmt,
- stream_getstat,
- stream_setstat,
- stream_timecode,
- stream_receive,
- stream_poll
- },
- {
- "ppsclock STREAM",
- ppsclock_init,
- local_end,
- local_setcs,
- local_nop,
- local_nop,
- local_getfmt,
- local_setfmt,
- local_getstat,
- local_setstat,
- local_timecode,
- local_receive,
- local_poll
- },
-#endif
- {
- "normal",
- local_init,
- local_end,
- local_setcs,
- local_nop,
- local_nop,
- local_getfmt,
- local_setfmt,
- local_getstat,
- local_setstat,
- local_timecode,
- local_receive,
- local_poll
- },
- {
- (char *)0,
- }
-};
-
-#ifdef STREAM
-/*--------------------------------------------------
- * ppsclock STREAM init
- */
-static int
-ppsclock_init(parse)
- struct parseunit *parse;
-{
- /*
- * now push the parse streams module
- * it will ensure exclusive access to the device
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclocd") == -1 &&
- ioctl(parse->fd, I_PUSH, (caddr_t)"ppsclock") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m",
- CL_UNIT(parse->unit));
- return 0;
- }
- if (!local_init(parse))
- {
- (void)ioctl(parse->fd, I_POP, (caddr_t)0);
- return 0;
- }
-
- parse->flags |= PARSE_PPSCLOCK;
- return 1;
-}
-
-/*--------------------------------------------------
- * parse STREAM init
- */
-static int
-stream_init(parse)
- struct parseunit *parse;
-{
- /*
- * now push the parse streams module
- * to test whether it is there (Oh boy - neat kernel interface)
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- while(ioctl(parse->fd, I_POP, (caddr_t)0) == 0)
- /* empty loop */;
-
- /*
- * now push it a second time after we have removed all
- * module garbage
- */
- if (ioctl(parse->fd, I_PUSH, (caddr_t)"parse") == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- return 1;
- }
- }
-}
-
- /*--------------------------------------------------
- * STREAM setcs
- */
-static int
-stream_setcs(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETCS;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setcs: ioctl(fd, I_STR, PARSEIOC_SETCS): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM nop
- */
-static void
-stream_nop(parse)
- struct parseunit *parse;
-{
-}
-
-/*--------------------------------------------------
- * STREAM enable
- */
-static int
-stream_enable(parse)
- struct parseunit *parse;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_ENABLE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)0;
- strioc.ic_len = 0;
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_enable: ioctl(fd, I_STR, PARSEIOC_ENABLE): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM disable
- */
-static int
-stream_disable(parse)
- struct parseunit *parse;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_DISABLE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)0;
- strioc.ic_len = 0;
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_disable: ioctl(fd, I_STR, PARSEIOC_DISABLE): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM getfmt
- */
-static int
-stream_getfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_GETFMT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: ioctl(fd, I_STR, PARSEIOC_GETFMT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM setfmt
- */
-static int
-stream_setfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETFMT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setfmt: ioctl(fd, I_STR, PARSEIOC_SETFMT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM getstat
- */
-static int
-stream_getstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_GETSTAT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_getstat: ioctl(fd, I_STR, PARSEIOC_GETSTAT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM setstat
- */
-static int
-stream_setstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_SETSTAT;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: stream_setstat: ioctl(fd, I_STR, PARSEIOC_SETSTAT): %m", CL_UNIT(parse->unit));
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM timecode
- */
-static int
-stream_timecode(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- struct strioctl strioc;
-
- strioc.ic_cmd = PARSEIOC_TIMECODE;
- strioc.ic_timout = 0;
- strioc.ic_dp = (char *)tcl;
- strioc.ic_len = sizeof (*tcl);
-
- if (ioctl(parse->fd, I_STR, (caddr_t)&strioc) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_process: ioctl(fd, I_STR, PARSEIOC_TIMECODE): %m", CL_UNIT(parse->unit), parse->fd);
- return 0;
- }
- return 1;
-}
-
-/*--------------------------------------------------
- * STREAM receive
- */
-static void
-stream_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
- parsetime_t parsetime;
-
- if (rbufp->recv_length != sizeof(parsetime_t))
- {
- syslog(LOG_ERR,"PARSE receiver #%d: parse_receive: bad size (got %d expected %d)",
- CL_UNIT(parse->unit), rbufp->recv_length, sizeof(parsetime_t));
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
- return;
- }
- memmove((caddr_t)&parsetime,
- (caddr_t)&rbufp->recv_space,
- sizeof(parsetime_t));
-
- /*
- * switch time stamp world - be sure to normalize small usec field
- * errors.
- */
-
-#define fix_ts(_X_) \
- if ((&(_X_))->tv.tv_usec >= 1000000) \
- { \
- (&(_X_))->tv.tv_usec -= 1000000; \
- (&(_X_))->tv.tv_sec += 1; \
- }
-
-#define cvt_ts(_X_, _Y_) \
- { \
- l_fp ts; \
- \
- fix_ts((_X_)); \
- if (!buftvtots((const char *)&(&(_X_))->tv, &ts)) \
- { \
- syslog(LOG_ERR,"parse: stream_receive: timestamp conversion error (buftvtots) (%s) (%d.%06d) ", (_Y_), (&(_X_))->tv.tv_sec, (&(_X_))->tv.tv_usec);\
- return; \
- } \
- else \
- { \
- (&(_X_))->fp = ts; \
- } \
- }
-
- if (PARSE_TIMECODE(parsetime.parse_state))
- {
- cvt_ts(parsetime.parse_time, "parse_time");
- cvt_ts(parsetime.parse_stime, "parse_stime");
- }
-
- if (PARSE_PPS(parsetime.parse_state))
- cvt_ts(parsetime.parse_ptime, "parse_ptime");
-
- parse_process(parse, &parsetime);
-}
-
-/*--------------------------------------------------
- * STREAM poll
- */
-static void
-stream_poll(parse)
- struct parseunit *parse;
-{
- register int fd, i, rtc;
- fd_set fdmask;
- struct timeval timeout, starttime, curtime, selecttime;
- parsetime_t parsetime;
-
- /*
- * now we do the following:
- * - read the first packet from the parse module (OLD !!!)
- * - read the second packet from the parse module (fresh)
- * - compute values for xntp
- */
-
- FD_ZERO(&fdmask);
- fd = parse->fd;
- FD_SET(fd, &fdmask);
- timeout.tv_sec = 0;
- timeout.tv_usec = 500000; /* 0.5 sec */
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (timercmp(&selecttime, &timeout, >))
- {
- /*
- * elapsed real time passed timeout value - consider it timed out
- */
- break;
- }
-
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[old] from device", CL_UNIT(parse->unit));
- }
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- return;
- }
-
- while (((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime)))
- {
- /* bad packet */
- if ( i == -1)
- {
- if (errno == EINTR)
- {
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[old] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
-
- return;
- }
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- timeout.tv_sec = 1;
- timeout.tv_usec = 500000; /* 1.500 sec */
- FD_ZERO(&fdmask);
- FD_SET(fd, &fdmask);
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (timercmp(&selecttime, &timeout, >))
- {
- /*
- * elapsed real time passed timeout value - consider it timed out
- */
- break;
- }
-
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data[new] from device", CL_UNIT(parse->unit));
- }
-
- /*
- * we will return here iff we got a good old sample as this would
- * be misinterpreted. bad samples are passed on to be logged into the
- * state statistics
- */
- if ((parsetime.parse_status & CVT_MASK) == CVT_OK)
- {
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
- return;
- }
- }
-
- /*
- * we get here either by a possible read() (rtc == 1 - while assertion)
- * or by a timeout or a system call error. when a read() is possible we
- * get the new data, otherwise we stick with the old
- */
- if ((rtc == 1) && ((i = read(fd, (char *)&parsetime, sizeof(parsetime))) < sizeof(parsetime)))
- {
- /* bad packet */
- if ( i== -1)
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (read() error: %m)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: bad read[new] from streams module (got %d bytes - expected %d bytes)", CL_UNIT(parse->unit), i, sizeof(parsetime));
- }
- parse->baddata++;
- parse_event(parse, CEVNT_BADREPLY);
-
- return;
- }
-
- /*
- * process what we got
- */
- parse_process(parse, &parsetime);
-}
-#endif
-
-/*--------------------------------------------------
- * local init
- */
-static int
-local_init(parse)
- struct parseunit *parse;
-{
- return parse_ioinit(&parse->parseio);
-}
-
-/*--------------------------------------------------
- * local end
- */
-static void
-local_end(parse)
- struct parseunit *parse;
-{
- parse_ioend(&parse->parseio);
-}
-
-
-/*--------------------------------------------------
- * local nop
- */
-static int
-local_nop(parse)
- struct parseunit *parse;
-{
- return 1;
-}
-
-/*--------------------------------------------------
- * local setcs
- */
-static int
-local_setcs(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setcs(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local getfmt
- */
-static int
-local_getfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_getfmt(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local setfmt
- */
-static int
-local_setfmt(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setfmt(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local getstat
- */
-static int
-local_getstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_getstat(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local setstat
- */
-static int
-local_setstat(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_setstat(tcl, &parse->parseio);
-}
-
-/*--------------------------------------------------
- * local timecode
- */
-static int
-local_timecode(parse, tcl)
- struct parseunit *parse;
- parsectl_t *tcl;
-{
- return parse_timecode(tcl, &parse->parseio);
-}
-
-
-/*--------------------------------------------------
- * local receive
- */
-static void
-local_receive(rbufp)
- struct recvbuf *rbufp;
-{
- struct parseunit *parse = (struct parseunit *)rbufp->recv_srcclock;
- register int count;
- register char *s;
-#ifdef FREEBSD_CONRAD
- struct timeval foo;
-#endif
-
- /*
- * eat all characters, parsing then and feeding complete samples
- */
- count = rbufp->recv_length;
- s = rbufp->recv_buffer;
-#ifdef FREEBSD_CONRAD
- ioctl(parse->fd,TIOCTIMESTAMP,&foo);
- TVTOTS(&foo, &rbufp->recv_time);
- rbufp->recv_time.l_uf += TS_ROUNDBIT;
- rbufp->recv_time.l_ui += JAN_1970;
- rbufp->recv_time.l_uf &= TS_MASK;
-#endif
-
- while (count--)
- {
- if (parse_ioread(&parse->parseio, *s++, &rbufp->recv_time))
- {
- /*
- * got something good to eat
- */
-#ifdef PPSPPS
- if (!PARSE_PPS(parse->parseio.parse_dtime.parse_state) &&
- (parse->flags & PARSE_PPSCLOCK))
- {
- l_fp ts;
- struct ppsclockev ev;
-
- if (ioctl(parse->fd, CIOGETEV, (caddr_t)&ev) == 0)
- {
- if (ev.serial != parse->ppsserial)
- {
- /*
- * add PPS time stamp if available via ppsclock module
- * and not supplied already.
- */
- if (!buftvtots((const char *)&ev.tv, &ts))
- {
- syslog(LOG_ERR,"parse: local_receive: timestamp conversion error (buftvtots) (ppsclockev.tv)");
- }
- else
- {
- parse->parseio.parse_dtime.parse_ptime.fp = ts;
- parse->parseio.parse_dtime.parse_state |= PARSEB_PPS|PARSEB_S_PPS;
- }
- }
- parse->ppsserial = ev.serial;
- }
- }
-#endif
- parse_process(parse, &parse->parseio.parse_dtime);
- parse_iodone(&parse->parseio);
- }
- }
-}
-
-/*--------------------------------------------------
- * local poll
- */
-static void
-local_poll(parse)
- struct parseunit *parse;
-{
- register int fd, i, rtc;
- fd_set fdmask;
- struct timeval timeout, starttime, curtime, selecttime;
- static struct timeval null_time = { 0, 0};
- timestamp_t ts;
-
- FD_ZERO(&fdmask);
- fd = parse->fd;
- FD_SET(fd, &fdmask);
- timeout.tv_sec = 1;
- timeout.tv_usec = 500000; /* 1.5 sec */
-
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
-
- if (GETTIMEOFDAY(&starttime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
-
- selecttime = timeout;
-
- do
- {
- while ((rtc = select(fd + 1, &fdmask, 0, 0, &selecttime)) != 1)
- {
- /* no data from the radio clock */
-
- if (rtc == -1)
- {
- if (errno == EINTR)
- {
- if (GETTIMEOFDAY(&curtime, 0L) == -1)
- {
- syslog(LOG_ERR,"gettimeofday failed: %m");
- exit(1);
- }
- selecttime.tv_sec = curtime.tv_sec - starttime.tv_sec;
- if (curtime.tv_usec < starttime.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + curtime.tv_usec - starttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = curtime.tv_usec - starttime.tv_usec;
- }
-
-
- if (!timercmp(&selecttime, &timeout, >))
- {
- /*
- * calculate residual timeout value
- */
- selecttime.tv_sec = timeout.tv_sec - selecttime.tv_sec;
-
- if (selecttime.tv_usec > timeout.tv_usec)
- {
- selecttime.tv_sec -= 1;
- selecttime.tv_usec = 1000000 + timeout.tv_usec - selecttime.tv_usec;
- }
- else
- {
- selecttime.tv_usec = timeout.tv_usec - selecttime.tv_usec;
- }
-
- FD_SET(fd, &fdmask);
- continue;
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device (select() error: %m)", CL_UNIT(parse->unit));
- }
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device", CL_UNIT(parse->unit));
- }
-
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- return;
- }
-
- /*
- * at least 1 character is available - gobble everthing up that is available
- */
- do
- {
- char inbuf[256];
-
- register char *s = inbuf;
-
- rtc = i = read(fd, inbuf, sizeof(inbuf));
-
- get_systime(&ts.fp);
-
- while (i-- > 0)
- {
- if (parse_ioread(&parse->parseio, *s++, ts))
- {
- /*
- * got something good to eat
- */
- parse_process(parse, &parse->parseio.parse_dtime);
- parse_iodone(&parse->parseio);
- /*
- * done if no more characters are available
- */
- FD_SET(fd, &fdmask);
- if ((i == 0) &&
- (select(fd + 1, &fdmask, 0, 0, &null_time) == 0))
- return;
- }
- }
- FD_SET(fd, &fdmask);
- } while ((rtc = select(fd + 1, &fdmask, 0, 0, &null_time)) == 1);
- FD_SET(fd, &fdmask);
- } while (1);
-}
-
-/*--------------------------------------------------
- * init_iobinding - find and initialize lower layers
- */
-static bind_t *
-init_iobinding(parse)
- struct parseunit *parse;
-{
- register bind_t *b = io_bindings;
-
- while (b->bd_description != (char *)0)
- {
- if ((*b->bd_init)(parse))
- {
- return b;
- }
- b++;
- }
- return (bind_t *)0;
-}
-
-/**===========================================================================
- ** support routines
- **/
-
-/*--------------------------------------------------
- * convert a flag field to a string
- */
-static char *
-parsestate(state, buffer)
- unsigned LONG state;
- char *buffer;
-{
- static struct bits
- {
- unsigned LONG bit;
- char *name;
- } flagstrings[] =
- {
- { PARSEB_ANNOUNCE, "DST SWITCH WARNING" },
- { PARSEB_POWERUP, "NOT SYNCHRONIZED" },
- { PARSEB_NOSYNC, "TIME CODE NOT CONFIRMED" },
- { PARSEB_DST, "DST" },
- { PARSEB_UTC, "UTC DISPLAY" },
- { PARSEB_LEAPADD, "LEAP ADD WARNING" },
- { PARSEB_LEAPDEL, "LEAP DELETE WARNING" },
- { PARSEB_LEAPSECOND, "LEAP SECOND" },
- { PARSEB_ALTERNATE,"ALTERNATE ANTENNA" },
- { PARSEB_TIMECODE, "TIME CODE" },
- { PARSEB_PPS, "PPS" },
- { PARSEB_POSITION, "POSITION" },
- { 0 }
- };
-
- static struct sbits
- {
- unsigned LONG bit;
- char *name;
- } sflagstrings[] =
- {
- { PARSEB_S_LEAP, "LEAP INDICATION" },
- { PARSEB_S_PPS, "PPS SIGNAL" },
- { PARSEB_S_ANTENNA, "ANTENNA" },
- { PARSEB_S_POSITION, "POSITION" },
- { 0 }
- };
- int i;
-
- *buffer = '\0';
-
- i = 0;
- while (flagstrings[i].bit)
- {
- if (flagstrings[i].bit & state)
- {
- if (buffer[0])
- strcat(buffer, "; ");
- strcat(buffer, flagstrings[i].name);
- }
- i++;
- }
-
- if (state & (PARSEB_S_LEAP|PARSEB_S_ANTENNA|PARSEB_S_PPS|PARSEB_S_POSITION))
- {
- register char *s, *t;
-
- if (buffer[0])
- strcat(buffer, "; ");
-
- strcat(buffer, "(");
-
- t = s = buffer + strlen(buffer);
-
- i = 0;
- while (sflagstrings[i].bit)
- {
- if (sflagstrings[i].bit & state)
- {
- if (t != s)
- {
- strcpy(t, "; ");
- t += 2;
- }
-
- strcpy(t, sflagstrings[i].name);
- t += strlen(t);
- }
- i++;
- }
- strcpy(t, ")");
- }
- return buffer;
-}
-
-/*--------------------------------------------------
- * convert a status flag field to a string
- */
-static char *
-parsestatus(state, buffer)
- unsigned LONG state;
- char *buffer;
-{
- static struct bits
- {
- unsigned LONG bit;
- char *name;
- } flagstrings[] =
- {
- { CVT_OK, "CONVERSION SUCCESSFUL" },
- { CVT_NONE, "NO CONVERSION" },
- { CVT_FAIL, "CONVERSION FAILED" },
- { CVT_BADFMT, "ILLEGAL FORMAT" },
- { CVT_BADDATE, "DATE ILLEGAL" },
- { CVT_BADTIME, "TIME ILLEGAL" },
- { 0 }
- };
- int i;
-
- *buffer = '\0';
-
- i = 0;
- while (flagstrings[i].bit)
- {
- if (flagstrings[i].bit & state)
- {
- if (buffer[0])
- strcat(buffer, "; ");
- strcat(buffer, flagstrings[i].name);
- }
- i++;
- }
-
- return buffer;
-}
-
-/*--------------------------------------------------
- * convert a clock status flag field to a string
- */
-static char *
-clockstatus(state)
- unsigned LONG state;
-{
- static char buffer[20];
- static struct status
- {
- unsigned LONG value;
- char *name;
- } flagstrings[] =
- {
- { CEVNT_NOMINAL, "NOMINAL" },
- { CEVNT_TIMEOUT, "NO RESPONSE" },
- { CEVNT_BADREPLY,"BAD FORMAT" },
- { CEVNT_FAULT, "FAULT" },
- { CEVNT_PROP, "PROPAGATION DELAY" },
- { CEVNT_BADDATE, "ILLEGAL DATE" },
- { CEVNT_BADTIME, "ILLEGAL TIME" },
- { ~0 }
- };
- int i;
-
- i = 0;
- while (flagstrings[i].value != ~0)
- {
- if (flagstrings[i].value == state)
- {
- return flagstrings[i].name;
- }
- i++;
- }
-
- sprintf(buffer, "unknown #%d", state);
-
- return buffer;
-}
-
-/*--------------------------------------------------
- * mkascii - make a printable ascii string
- * assumes (unless defined better) 7-bit ASCII
- */
-#ifndef isprint
-#define isprint(_X_) (((_X_) > 0x1F) && ((_X_) < 0x7F))
-#endif
-
-static char *
-mkascii(buffer, blen, src, srclen)
- register char *buffer;
- register LONG blen;
- register char *src;
- register LONG srclen;
-{
- register char *b = buffer;
- register char *endb = (char *)0;
-
- if (blen < 4)
- return (char *)0; /* don't bother with mini buffers */
-
- endb = buffer + blen - 4;
-
- blen--; /* account for '\0' */
-
- while (blen && srclen--)
- {
- if ((*src != '\\') && isprint(*src))
- { /* printables are easy... */
- *buffer++ = *src++;
- blen--;
- }
- else
- {
- if (blen < 4)
- {
- while (blen--)
- {
- *buffer++ = '.';
- }
- *buffer = '\0';
- return b;
- }
- else
- {
- if (*src == '\\')
- {
- strcpy(buffer,"\\\\");
- buffer += 2;
- blen -= 2;
- }
- else
- {
- sprintf(buffer, "\\x%02x", *src++);
- blen -= 4;
- buffer += 4;
- }
- }
- }
- if (srclen && !blen && endb) /* overflow - set last chars to ... */
- strcpy(endb, "...");
- }
-
- *buffer = '\0';
- return b;
-}
-
-
-/*--------------------------------------------------
- * l_mktime - make representation of a relative time
- */
-static char *
-l_mktime(delta)
- unsigned LONG delta;
-{
- unsigned LONG tmp, m, s;
- static char buffer[40];
-
- buffer[0] = '\0';
-
- if ((tmp = delta / (60*60*24)) != 0)
- {
- sprintf(buffer, "%dd+", tmp);
- delta -= tmp * 60*60*24;
- }
-
- s = delta % 60;
- delta /= 60;
- m = delta % 60;
- delta /= 60;
-
- sprintf(buffer+strlen(buffer), "%02d:%02d:%02d",
- delta, m, s);
-
- return buffer;
-}
-
-
-/*--------------------------------------------------
- * parse_statistics - list summary of clock states
- */
-static void
-parse_statistics(parse)
- register struct parseunit *parse;
-{
- register int i;
-
- syslog(LOG_INFO, "PARSE receiver #%d: running time: %s",
- CL_UNIT(parse->unit),
- l_mktime(current_time - parse->timestarted));
-
- syslog(LOG_INFO, "PARSE receiver #%d: current status: %s",
- CL_UNIT(parse->unit),
- clockstatus(parse->status));
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
- register unsigned LONG stime;
- register unsigned LONG percent, div = current_time - parse->timestarted;
-
- percent = stime = PARSE_STATETIME(parse, i);
-
- while (((unsigned LONG)(~0) / 10000) < percent)
- {
- percent /= 10;
- div /= 10;
- }
-
- if (div)
- percent = (percent * 10000) / div;
- else
- percent = 10000;
-
- if (stime)
- syslog(LOG_INFO, "PARSE receiver #%d: state %18s: %13s (%3d.%02d%%)",
- CL_UNIT(parse->unit),
- clockstatus(i),
- l_mktime(stime),
- percent / 100, percent % 100);
- }
-}
-
-/*--------------------------------------------------
- * cparse_statistics - wrapper for statistics call
- */
-static void
-cparse_statistics(peer)
- register struct peer *peer;
-{
- register struct parseunit *parse = (struct parseunit *)peer;
-
- parse_statistics(parse);
- parse->stattimer.event_time = current_time + PARSESTATISTICS;
- TIMER_ENQUEUE(timerqueue, &parse->stattimer);
-}
-
-/**===========================================================================
- ** xntp interface routines
- **/
-
-/*--------------------------------------------------
- * parse_init - initialize internal parse driver data
- */
-static void
-parse_init()
-{
- memset((caddr_t)parseunits, 0, sizeof parseunits);
-}
-
-
-/*--------------------------------------------------
- * parse_shutdown - shut down a PARSE clock
- */
-static void
-parse_shutdown(unit)
- int unit;
-{
- register struct parseunit *parse;
-
- unit = CL_UNIT(unit);
-
- if (unit >= MAXUNITS) {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit invalid (max %d)",
- unit,MAXUNITS);
- return;
- }
-
- parse = parseunits[unit];
-
- if (parse && !parse->peer) {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_shutdown: INTERNAL ERROR, unit not in use", unit);
- return;
- }
-
- /*
- * print statistics a last time and
- * stop statistics machine
- */
- parse_statistics(parse);
- TIMER_DEQUEUE(&parse->stattimer);
-
-#if PPSPPS
- {
- /*
- * kill possible PPS association
- */
- if (fdpps == parse->fd)
- fdpps = -1;
- }
-#endif
-
- if (parse->parse_type->cl_end)
- {
- parse->parse_type->cl_end(parse);
- }
-
- if (parse->binding)
- PARSE_END(parse);
-
- /*
- * Tell the I/O module to turn us off. We're history.
- */
- if (!parse->pollonly)
- io_closeclock(&parse->io);
- else
- (void) close(parse->fd);
-
- syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" removed",
- CL_UNIT(parse->unit), parse->parse_type->cl_description);
-
- parse->peer = (struct peer *)0; /* unused now */
-}
-
-/*--------------------------------------------------
- * parse_start - open the PARSE devices and initialize data for processing
- */
-static int
-parse_start(sysunit, peer)
- u_int sysunit;
- struct peer *peer;
-{
- u_int unit;
- int fd232, i;
-#ifdef HAVE_TERMIOS
- struct termios tm; /* NEEDED FOR A LONG TIME ! */
-#endif
-#ifdef HAVE_SYSV_TTYS
- struct termio tm; /* NEEDED FOR A LONG TIME ! */
-#endif
- struct parseunit * parse;
- char parsedev[sizeof(PARSEDEVICE)+20];
- parsectl_t tmp_ctl;
- u_int type;
-
- type = CL_TYPE(sysunit);
- unit = CL_UNIT(sysunit);
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit number invalid (max %d)",
- unit, MAXUNITS-1);
- return 0;
- }
-
- if ((type == ~0) || (clockinfo[type].cl_description == (char *)0))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unsupported clock type %d (max %d)",
- unit, CL_REALTYPE(sysunit), ncltypes-1);
- return 0;
- }
-
- if (parseunits[unit] && parseunits[unit]->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: unit in use", unit);
- return 0;
- }
-
- /*
- * Unit okay, attempt to open the device.
- */
- (void) sprintf(parsedev, PARSEDEVICE, unit);
-
-#ifndef O_NOCTTY
-#define O_NOCTTY 0
-#endif
-
- fd232 = open(parsedev, O_RDWR|O_NOCTTY, 0777);
- if (fd232 == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: open of %s failed: %m", unit, parsedev);
- return 0;
- }
-
- /*
- * Looks like this might succeed. Find memory for the structure.
- * Look to see if there are any unused ones, if not we malloc()
- * one.
- */
- if (parseunits[unit])
- {
- parse = parseunits[unit]; /* The one we want is okay - and free */
- }
- else
- {
- for (i = 0; i < MAXUNITS; i++)
- {
- if (parseunits[i] && !parseunits[i]->peer)
- break;
- }
- if (i < MAXUNITS)
- {
- /*
- * Reclaim this one
- */
- parse = parseunits[i];
- parseunits[i] = (struct parseunit *)0;
- }
- else
- {
- parse = (struct parseunit *)
- emalloc(sizeof(struct parseunit));
- }
- }
-
- memset((char *)parse, 0, sizeof(struct parseunit));
- parseunits[unit] = parse;
-
- /*
- * Set up the structures
- */
- parse->unit = (u_char)sysunit;
- parse->timestarted = current_time;
- parse->lastchange = current_time;
- /*
- * we want to filter input for the sake of
- * getting an impression on dispersion
- * also we like to average the median range
- */
- parse->flags = PARSE_STAT_FILTER|PARSE_STAT_AVG;
- parse->pollneeddata = 0;
- parse->pollonly = 1; /* go for default polling mode */
- parse->lastformat = ~0; /* assume no format known */
- parse->status = CEVNT_TIMEOUT; /* expect the worst */
- parse->laststatus = ~0; /* be sure to mark initial status change */
- parse->nosynctime = 0; /* assume clock reasonable */
- parse->lastmissed = 0; /* assume got everything */
- parse->ppsserial = 0;
- parse->localdata = (void *)0;
-
- parse->parse_type = &clockinfo[type];
-
- parse->basedelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
- parse->basedelay.l_uf = parse->parse_type->cl_basedelay;
-
- parse->ppsdelay.l_ui = 0; /* we can only pre-configure delays less than 1 second */
- parse->ppsdelay.l_uf = parse->parse_type->cl_ppsdelay;
-
- peer->rootdelay = parse->parse_type->cl_rootdelay;
- peer->sstclktype = parse->parse_type->cl_type;
- peer->precision = sys_precision;
- peer->stratum = STRATUM_REFCLOCK;
- if (peer->stratum <= 1)
- memmove((char *)&peer->refid, parse->parse_type->cl_id, 4);
- else
- peer->refid = htonl(PARSEHSREFID);
-
- parse->fd = fd232;
-
- parse->peer = peer; /* marks it also as busy */
-
- parse->binding = init_iobinding(parse);
-
- if (parse->binding == (bind_t *)0)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: io sub system initialisation failed.");
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
- /*
- * configure terminal line
- */
- if (TTY_GETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcgetattr(%d, &tm): %m", unit, fd232);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- else
- {
-#ifndef _PC_VDISABLE
- memset((char *)tm.c_cc, 0, sizeof(tm.c_cc));
-#else
- int disablec;
- errno = 0; /* pathconf can deliver -1 without changing errno ! */
-
- disablec = fpathconf(parse->fd, _PC_VDISABLE);
- if (disablec == -1 && errno)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: fpathconf(fd, _PC_VDISABLE): %m", CL_UNIT(parse->unit));
- memset((char *)tm.c_cc, 0, sizeof(tm.c_cc)); /* best guess */
- }
- else
- if (disablec != -1)
- memset((char *)tm.c_cc, disablec, sizeof(tm.c_cc));
-#endif
-
- tm.c_cflag = clockinfo[type].cl_cflag;
- tm.c_iflag = clockinfo[type].cl_iflag;
- tm.c_oflag = clockinfo[type].cl_oflag;
- tm.c_lflag = clockinfo[type].cl_lflag;
-#ifdef FREEBSD_CONRAD
- tm.c_ispeed = 50;
- tm.c_ospeed = 50;
-#endif
- if (TTY_SETATTR(fd232, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: tcsetattr(%d, &tm): %m", unit, fd232);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- }
-
- /*
- * as we always(?) get 8 bit chars we want to be
- * sure, that the upper bits are zero for less
- * than 8 bit I/O - so we pass that information on.
- * note that there can be only one bit count format
- * per file descriptor
- */
-
- switch (tm.c_cflag & CSIZE)
- {
- case CS5:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS5;
- break;
-
- case CS6:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS6;
- break;
-
- case CS7:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS7;
- break;
-
- case CS8:
- tmp_ctl.parsesetcs.parse_cs = PARSE_IO_CS8;
- break;
- }
-
- if (!PARSE_SETCS(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setcs() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
-#ifdef FREEBSD_CONRAD
- {
- int i,j;
- struct timeval tv;
- ioctl(parse->fd,TIOCTIMESTAMP,&tv);
- j = TIOCM_RTS;
- i = ioctl(fd232, TIOCMBIC, &j);
- if (i < 0) {
- syslog(LOG_ERR,
- "PARSE receiver #%d: lowrts_poll: failed to lower RTS: %m",
- CL_UNIT(parse->unit));
- }
- }
-#endif
-
- strcpy(tmp_ctl.parseformat.parse_buffer, parse->parse_type->cl_format);
- tmp_ctl.parseformat.parse_count = strlen(tmp_ctl.parseformat.parse_buffer);
-
- if (!PARSE_SETFMT(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setfmt() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
-#ifdef TCFLSH
- /*
- * get rid of all IO accumulated so far
- */
- {
-#ifndef TCIOFLUSH
-#define TCIOFLUSH 2
-#endif
- int flshcmd = TCIOFLUSH;
-
- (void) ioctl(parse->fd, TCFLSH, (caddr_t)&flshcmd);
- }
-#endif
-
- tmp_ctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS;
-
- if (!PARSE_SETSTAT(parse, &tmp_ctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_setstat() FAILED.", unit);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
-
- /*
- * try to do any special initializations
- */
- if (parse->parse_type->cl_init)
- {
- if (parse->parse_type->cl_init(parse))
- {
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0; /* well, ok - special initialisation broke */
- }
- }
-
- if (!(parse->parse_type->cl_flags & PARSE_F_POLLONLY) &&
- (CL_PPS(parse->unit) || (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY)))
- {
- /*
- * Insert in async io device list.
- */
- parse->io.clock_recv = parse->binding->bd_receive; /* pick correct receive routine */
- parse->io.srcclock = (caddr_t)parse;
- parse->io.datalen = 0;
- parse->io.fd = parse->fd; /* replicated, but what the heck */
- if (!io_addclock(&parse->io))
- {
- if (parse->parse_type->cl_flags & PARSE_F_NOPOLLONLY)
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_start: addclock %s fails (ABORT - clock type requires async io)", CL_UNIT(parse->unit), parsedev);
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- else
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: parse_start: addclock %s fails (switching to polling mode)", CL_UNIT(parse->unit), parsedev);
- }
- }
- else
- {
- parse->pollonly = 0; /*
- * update at receipt of time_stamp - also
- * supports PPS processing
- */
- }
- }
-
-#ifdef PPSPPS
- if (parse->pollonly || (parse->parse_type->cl_flags & PARSE_F_PPSPPS))
- {
- if (fdpps == -1)
- {
- fdpps = parse->fd;
- if (!PARSE_DISABLE(parse))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_start: parse_disable() FAILED", CL_UNIT(parse->unit));
- parse_shutdown(parse->unit); /* let our cleaning staff do the work */
- return 0;
- }
- }
- else
- {
- syslog(LOG_NOTICE, "PARSE receiver #%d: parse_start: loopfilter PPS already active - no PPS via CIOGETEV", CL_UNIT(parse->unit));
- }
- }
-#endif
-
- /*
- * wind up statistics timer
- */
- parse->stattimer.peer = (struct peer *)parse; /* we know better, but what the heck */
- parse->stattimer.event_handler = cparse_statistics;
- parse->stattimer.event_time = current_time + PARSESTATISTICS;
- TIMER_ENQUEUE(timerqueue, &parse->stattimer);
-
- /*
- * get out Copyright information once
- */
- if (!notice)
- {
- syslog(LOG_INFO, "NTP PARSE support: Copyright (c) 1989-1993, Frank Kardel");
- notice = 1;
- }
-
- /*
- * print out configuration
- */
- syslog(LOG_INFO, "PARSE receiver #%d: reference clock \"%s\" (device %s) added",
- CL_UNIT(parse->unit),
- parse->parse_type->cl_description, parsedev);
-
- syslog(LOG_INFO, "PARSE receiver #%d: Stratum %d, %sPPS support, trust time %s, precision %d",
- CL_UNIT(parse->unit),
- parse->peer->stratum, (parse->pollonly || !CL_PPS(parse->unit)) ? "no " : "",
- l_mktime(parse->parse_type->cl_maxunsync), parse->peer->precision);
-
- syslog(LOG_INFO, "PARSE receiver #%d: rootdelay %s s, phaseadjust %s s, %s IO handling",
- CL_UNIT(parse->unit),
- ufptoa(parse->parse_type->cl_rootdelay, 6),
- lfptoa(&parse->basedelay, 8),
- parse->binding->bd_description);
-
- syslog(LOG_INFO, "PARSE receiver #%d: Format recognition: %s", CL_UNIT(parse->unit),
- !(*parse->parse_type->cl_format) ? "<AUTOMATIC>" : parse->parse_type->cl_format);
-
-#ifdef PPSPPS
- syslog(LOG_INFO, "PARSE receiver #%d: %sCD PPS support",
- CL_UNIT(parse->unit),
- (fdpps == parse->fd) ? "" : "NO ");
-#endif
-
- return 1;
-}
-
-/*--------------------------------------------------
- * parse_poll - called by the transmit procedure
- */
-static void
-parse_poll(unit, peer)
- int unit;
- struct peer *peer;
-{
- register struct parseunit *parse;
-
- unit = CL_UNIT(unit);
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit invalid",
- unit);
- return;
- }
-
- parse = parseunits[unit];
-
- if (!parse->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll: INTERNAL: unit unused",
- unit);
- return;
- }
-
- if (peer != parse->peer)
- {
- syslog(LOG_ERR,
- "PARSE receiver #%d: poll: INTERNAL: peer incorrect",
- unit);
- return;
- }
-
- /*
- * Update clock stat counters
- */
- parse->polls++;
-
- /*
- * in PPS mode we just mark that we want the next sample
- * for the clock filter
- */
- if (!parse->pollonly)
- {
- if (parse->pollneeddata)
- {
- /*
- * bad news - didn't get a response last time
- */
- parse->noresponse++;
- parse->lastmissed = current_time;
- parse_event(parse, CEVNT_TIMEOUT);
-
- syslog(LOG_WARNING, "PARSE receiver #%d: no data from device within poll interval", CL_UNIT(parse->unit));
- }
- parse->pollneeddata = 1;
- if (parse->parse_type->cl_poll)
- {
- parse->parse_type->cl_poll(parse);
- }
- return;
- }
-
- /*
- * the following code is only executed only when polling is used
- */
-
- PARSE_POLL(parse);
-}
-
-/*--------------------------------------------------
- * parse_leap - called when a leap second occurs
- */
-
-static void
-parse_leap()
-{
- /*
- * PARSE encodes the LEAP correction direction.
- * For timecodes that do not pass on the leap correction direction
- * the default PARSEB_LEAPADD must be used. It may then be modified
- * with a fudge flag (flag2).
- */
-}
-
-
-/*--------------------------------------------------
- * parse_control - set fudge factors, return statistics
- */
-static void
-parse_control(unit, in, out)
- u_int unit;
- struct refclockstat *in;
- struct refclockstat *out;
-{
- register struct parseunit *parse;
- parsectl_t tmpctl;
- unsigned LONG type;
- static char outstatus[400]; /* status output buffer */
-
- type = CL_TYPE(unit);
- unit = CL_UNIT(unit);
-
- if (out)
- {
- out->lencode = 0;
- out->lastcode = 0;
- out->polls = out->noresponse = 0;
- out->badformat = out->baddata = 0;
- out->timereset = 0;
- out->currentstatus = out->lastevent = CEVNT_NOMINAL;
- out->kv_list = (struct ctl_var *)0;
- }
-
- if (unit >= MAXUNITS)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (max %d)",
- unit, MAXUNITS-1);
- return;
- }
-
- parse = parseunits[unit];
-
- if (!parse || !parse->peer)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: unit invalid (UNIT INACTIVE)",
- unit);
- return;
- }
-
- if (in)
- {
- if (in->haveflags & CLK_HAVETIME1)
- parse->basedelay = in->fudgetime1;
-
- if (in->haveflags & CLK_HAVETIME2)
- {
- parse->ppsdelay = in->fudgetime2;
- }
-
- if (in->haveflags & CLK_HAVEVAL1)
- {
- parse->peer->stratum = (u_char)(in->fudgeval1 & 0xf);
- if (parse->peer->stratum <= 1)
- memmove((char *)&parse->peer->refid,
- parse->parse_type->cl_id,
- 4);
- else
- parse->peer->refid = htonl(PARSEHSREFID);
- }
-
- /*
- * NOT USED - yet
- *
- if (in->haveflags & CLK_HAVEVAL2)
- {
- }
- */
- if (in->haveflags & (CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4))
- {
- parse->flags = (in->flags & (CLK_FLAG1|CLK_FLAG2|CLK_FLAG3|CLK_FLAG4)) |
- (parse->flags & ~PARSE_STAT_FLAGS);
- }
-
- if (in->haveflags & (CLK_HAVEVAL2|CLK_HAVETIME2|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3|CLK_HAVEFLAG4))
- {
- parsectl_t tmpctl;
- tmpctl.parsestatus.flags = parse->flags & PARSE_STAT_FLAGS;
-
- if (!PARSE_SETSTAT(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_setstat() FAILED", unit);
- }
- }
- }
-
- if (out)
- {
- register unsigned LONG sum = 0;
- register char *t, *tt;
- register struct tm *tm;
- register short utcoff;
- register char sign;
- register int i;
- time_t tim;
-
- outstatus[0] = '\0';
-
- out->haveflags = CLK_HAVETIME1|CLK_HAVETIME2|CLK_HAVEVAL1|CLK_HAVEFLAG1|CLK_HAVEFLAG2|CLK_HAVEFLAG3;
- out->clockdesc = parse->parse_type->cl_description;
-
- out->fudgetime1 = parse->basedelay;
-
- out->fudgetime2 = parse->ppsdelay;
-
- out->fudgeval1 = (LONG)parse->peer->stratum;
-
- out->fudgeval2 = 0;
-
- out->flags = parse->flags & PARSE_STAT_FLAGS;
-
- out->type = REFCLK_PARSE;
-
- /*
- * figure out skew between PPS and RS232 - just for informational
- * purposes - returned in time2 value
- */
- if (PARSE_SYNC(parse->time.parse_state))
- {
- if (PARSE_PPS(parse->time.parse_state) && PARSE_TIMECODE(parse->time.parse_state))
- {
- l_fp off;
-
- /*
- * we have a PPS and RS232 signal - calculate the skew
- * WARNING: assumes on TIMECODE == PULSE (timecode after pulse)
- */
- off = parse->time.parse_stime.fp;
- L_SUB(&off, &parse->time.parse_ptime.fp); /* true offset */
- tt = add_var(&out->kv_list, 40, RO);
- sprintf(tt, "refclock_ppsskew=%s", lfptoms(&off, 6));
- }
- }
-
- if (PARSE_PPS(parse->time.parse_state))
- {
- tt = add_var(&out->kv_list, 80, RO|DEF);
- sprintf(tt, "refclock_ppstime=\"%s\"", prettydate(&parse->time.parse_ptime.fp));
- }
-
- /*
- * all this for just finding out the +-xxxx part (there are always
- * new and changing fields in the standards 8-().
- *
- * but we do it for the human user...
- */
- tim = parse->time.parse_time.fp.l_ui - JAN_1970;
- tm = gmtime(&tim);
- utcoff = tm->tm_hour * 60 + tm->tm_min;
- tm = localtime(&tim);
- utcoff = tm->tm_hour * 60 + tm->tm_min - utcoff + 12 * 60;
- utcoff += 24 * 60;
- utcoff %= 24 * 60;
- utcoff -= 12 * 60;
- if (utcoff < 0)
- {
- utcoff = -utcoff;
- sign = '-';
- }
- else
- {
- sign = '+';
- }
-
- tt = add_var(&out->kv_list, 128, RO|DEF);
- sprintf(tt, "refclock_time=\"");
- tt += strlen(tt);
-
- if (parse->time.parse_time.fp.l_ui == 0)
- {
- strcpy(tt, "<UNDEFINED>\"");
- }
- else
- {
- strcpy(tt, prettydate(&parse->time.parse_time.fp));
- t = tt + strlen(tt);
-
- sprintf(t, " (%c%02d%02d)\"", sign, utcoff / 60, utcoff % 60);
- }
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_control: parse_timecode() FAILED", unit);
- }
- else
- {
- tt = add_var(&out->kv_list, 128, RO|DEF);
- sprintf(tt, "refclock_status=\"");
- tt += strlen(tt);
-
- /*
- * copy PPS flags from last read transaction (informational only)
- */
- tmpctl.parsegettc.parse_state |= parse->time.parse_state &
- (PARSEB_PPS|PARSEB_S_PPS);
-
- (void) parsestate(tmpctl.parsegettc.parse_state, tt);
-
- strcat(tt, "\"");
-
- if (tmpctl.parsegettc.parse_count)
- mkascii(outstatus+strlen(outstatus), sizeof(outstatus)- strlen(outstatus) - 1,
- tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1);
-
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
-
- tmpctl.parseformat.parse_format = tmpctl.parsegettc.parse_format;
-
- if (!PARSE_GETFMT(parse, &tmpctl))
- {
- syslog (LOG_ERR, "PARSE receiver #%d: parse_control: parse_getfmt() FAILED", unit);
- }
- else
- {
- tt = add_var(&out->kv_list, 80, RO|DEF);
- sprintf(tt, "refclock_format=\"");
-
- strncat(tt, tmpctl.parseformat.parse_buffer, tmpctl.parseformat.parse_count);
- strcat(tt,"\"");
- }
-
- /*
- * gather state statistics
- */
-
- tt = add_var(&out->kv_list, 200, RO|DEF);
- strcpy(tt, "refclock_states=\"");
- tt += strlen(tt);
-
- for (i = 0; i <= CEVNT_MAX; i++)
- {
- register unsigned LONG stime;
- register unsigned LONG div = current_time - parse->timestarted;
- register unsigned LONG percent;
-
- percent = stime = PARSE_STATETIME(parse, i);
-
- while (((unsigned LONG)(~0) / 10000) < percent)
- {
- percent /= 10;
- div /= 10;
- }
-
- if (div)
- percent = (percent * 10000) / div;
- else
- percent = 10000;
-
- if (stime)
- {
- sprintf(tt, "%s%s%s: %s (%d.%02d%%)",
- sum ? "; " : "",
- (parse->status == i) ? "*" : "",
- clockstatus(i),
- l_mktime(stime),
- percent / 100, percent % 100);
- sum += stime;
- tt += strlen(tt);
- }
- }
-
- sprintf(tt, "; running time: %s\"", l_mktime(sum));
-
- tt = add_var(&out->kv_list, 32, RO);
- sprintf(tt, "refclock_id=\"%s\"", parse->parse_type->cl_id);
-
- tt = add_var(&out->kv_list, 80, RO);
- sprintf(tt, "refclock_iomode=\"%s\"", parse->binding->bd_description);
-
- tt = add_var(&out->kv_list, 128, RO);
- sprintf(tt, "refclock_driver_version=\"refclock_parse.c,v 3.53 1994/03/25 13:07:39 kardel Exp\"");
-
- out->lencode = strlen(outstatus);
- out->lastcode = outstatus;
- out->timereset = parse->timestarted;
- out->polls = parse->polls;
- out->noresponse = parse->noresponse;
- out->badformat = parse->badformat;
- out->baddata = parse->baddata;
- out->lastevent = parse->lastevent;
- out->currentstatus = parse->status;
- }
-}
-
-/**===========================================================================
- ** processing routines
- **/
-
-/*--------------------------------------------------
- * event handling - note that nominal events will also be posted
- */
-static void
-parse_event(parse, event)
- struct parseunit *parse;
- int event;
-{
- if (parse->status != (u_char) event)
- {
- parse->statetime[parse->status] += current_time - parse->lastchange;
- parse->lastchange = current_time;
-
- parse->status = (u_char)event;
- if (event != CEVNT_NOMINAL)
- parse->lastevent = parse->status;
-
- report_event(EVNT_PEERCLOCK, parse->peer);
- }
-}
-
-/*--------------------------------------------------
- * process a PARSE time sample
- */
-static void
-parse_process(parse, parsetime)
- struct parseunit *parse;
- parsetime_t *parsetime;
-{
- unsigned char leap;
- struct timeval usecdisp;
- l_fp off, rectime, reftime, dispersion;
-
- /*
- * check for changes in conversion status
- * (only one for each new status !)
- */
- if (parse->laststatus != parsetime->parse_status)
- {
- char buffer[200];
-
- syslog(LOG_WARNING, "PARSE receiver #%d: conversion status \"%s\"",
- CL_UNIT(parse->unit), parsestatus(parsetime->parse_status, buffer));
-
- if ((parsetime->parse_status & CVT_MASK) == CVT_FAIL)
- {
- /*
- * tell more about the story - list time code
- * there is a slight change for a race condition and
- * the time code might be overwritten by the next packet
- */
- parsectl_t tmpctl;
-
- if (!PARSE_GETTIMECODE(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_process: parse_timecode() FAILED", CL_UNIT(parse->unit));
- }
- else
- {
- syslog(LOG_WARNING, "PARSE receiver #%d: FAILED TIMECODE: \"%s\"",
- CL_UNIT(parse->unit), mkascii(buffer, sizeof buffer, tmpctl.parsegettc.parse_buffer, tmpctl.parsegettc.parse_count - 1));
- parse->badformat += tmpctl.parsegettc.parse_badformat;
- }
- }
-
- parse->laststatus = parsetime->parse_status;
- }
-
- /*
- * examine status and post appropriate events
- */
- if ((parsetime->parse_status & CVT_MASK) != CVT_OK)
- {
- /*
- * got bad data - tell the rest of the system
- */
- switch (parsetime->parse_status & CVT_MASK)
- {
- case CVT_NONE:
- break; /* well, still waiting - timeout is handled at higher levels */
-
- case CVT_FAIL:
- parse->badformat++;
- if (parsetime->parse_status & CVT_BADFMT)
- {
- parse_event(parse, CEVNT_BADREPLY);
- }
- else
- if (parsetime->parse_status & CVT_BADDATE)
- {
- parse_event(parse, CEVNT_BADDATE);
- }
- else
- if (parsetime->parse_status & CVT_BADTIME)
- {
- parse_event(parse, CEVNT_BADTIME);
- }
- else
- {
- parse_event(parse, CEVNT_BADREPLY); /* for the lack of something better */
- }
- }
- return; /* skip the rest - useless */
- }
-
- /*
- * check for format changes
- * (in case somebody has swapped clocks 8-)
- */
- if (parse->lastformat != parsetime->parse_format)
- {
- parsectl_t tmpctl;
-
- tmpctl.parseformat.parse_format = parsetime->parse_format;
-
- if (!PARSE_GETFMT(parse, &tmpctl))
- {
- syslog(LOG_ERR, "PARSE receiver #%d: parse_getfmt() FAILED", CL_UNIT(parse->unit));
- }
- else
- {
- syslog(LOG_INFO, "PARSE receiver #%d: new packet format \"%s\"",
- CL_UNIT(parse->unit), tmpctl.parseformat.parse_buffer);
- }
- parse->lastformat = parsetime->parse_format;
- }
-
- /*
- * now, any changes ?
- */
- if (parse->time.parse_state != parsetime->parse_state)
- {
- char tmp1[200];
- char tmp2[200];
- /*
- * something happend
- */
-
- (void) parsestate(parsetime->parse_state, tmp1);
- (void) parsestate(parse->time.parse_state, tmp2);
-
- syslog(LOG_INFO,"PARSE receiver #%d: STATE CHANGE: %s -> %s",
- CL_UNIT(parse->unit), tmp2, tmp1);
- }
-
- /*
- * remember for future
- */
- parse->time = *parsetime;
-
- /*
- * check to see, whether the clock did a complete powerup or lost PZF signal
- * and post correct events for current condition
- */
- if (PARSE_POWERUP(parsetime->parse_state))
- {
- /*
- * this is bad, as we have completely lost synchronisation
- * well this is a problem with the receiver here
- * for PARSE U/A 31 the lost synchronisation ist true
- * as it is the powerup state and the time is taken
- * from a crude real time clock chip
- * for the PZF series this is only partly true, as
- * PARSE_POWERUP only means that the pseudo random
- * phase shift sequence cannot be found. this is only
- * bad, if we have never seen the clock in the SYNC
- * state, where the PHASE and EPOCH are correct.
- * for reporting events the above business does not
- * really matter, but we can use the time code
- * even in the POWERUP state after having seen
- * the clock in the synchronized state (PZF class
- * receivers) unless we have had a telegram disruption
- * after having seen the clock in the SYNC state. we
- * thus require having seen the clock in SYNC state
- * *after* having missed telegrams (noresponse) from
- * the clock. one problem remains: we might use erroneously
- * POWERUP data if the disruption is shorter than 1 polling
- * interval. fortunately powerdowns last usually longer than 64
- * seconds and the receiver is at least 2 minutes in the
- * POWERUP or NOSYNC state before switching to SYNC
- */
- parse_event(parse, CEVNT_FAULT);
- if (parse->nosynctime)
- {
- /*
- * repeated POWERUP/NOSYNC state - look whether
- * the message should be repeated
- */
- if (current_time - parse->nosynctime > PARSENOSYNCREPEAT)
- {
- syslog(LOG_ERR,"PARSE receiver #%d: *STILL* NOT SYNCHRONIZED (POWERUP or no PZF signal)",
- CL_UNIT(parse->unit));
- parse->nosynctime = current_time;
- }
- }
- else
- {
- syslog(LOG_ERR,"PARSE receiver #%d: NOT SYNCHRONIZED",
- CL_UNIT(parse->unit));
- parse->nosynctime = current_time;
- }
- }
- else
- {
- /*
- * we have two states left
- *
- * SYNC:
- * this state means that the EPOCH (timecode) and PHASE
- * information has be read correctly (at least two
- * successive PARSE timecodes were received correctly)
- * this is the best possible state - full trust
- *
- * NOSYNC:
- * The clock should be on phase with respect to the second
- * signal, but the timecode has not been received correctly within
- * at least the last two minutes. this is a sort of half baked state
- * for PARSE U/A 31 this is bad news (clock running without timecode
- * confirmation)
- * PZF 535 has also no time confirmation, but the phase should be
- * very precise as the PZF signal can be decoded
- */
- parse->nosynctime = 0; /* current state is better than worst state */
-
- if (PARSE_SYNC(parsetime->parse_state))
- {
- /*
- * currently completely synchronized - best possible state
- */
- parse->lastsync = current_time;
- /*
- * log OK status
- */
- parse_event(parse, CEVNT_NOMINAL);
- }
- else
- {
- /*
- * we have had some problems receiving the time code
- */
- parse_event(parse, CEVNT_PROP);
- }
- }
-
- if (PARSE_TIMECODE(parsetime->parse_state))
- {
- l_fp offset;
-
- /*
- * calculate time offset including systematic delays
- * off = PARSE-timestamp + propagation delay - kernel time stamp
- */
- offset = parse->basedelay;
-
- off = parsetime->parse_time.fp;
-
- reftime = off;
-
- L_ADD(&off, &offset);
- rectime = off; /* this makes org time and xmt time somewhat artificial */
-
- L_SUB(&off, &parsetime->parse_stime.fp);
-
- if ((parse->flags & PARSE_STAT_FILTER) &&
- (off.l_i > -60) &&
- (off.l_i < 60)) /* take usec error only if within +- 60 secs */
- {
- struct timeval usecerror;
- /*
- * offset is already calculated
- */
- usecerror.tv_sec = parsetime->parse_usecerror / 1000000;
- usecerror.tv_usec = parsetime->parse_usecerror % 1000000;
-
- sTVTOTS(&usecerror, &off);
- L_ADD(&off, &offset);
- }
- }
-
- if (PARSE_PPS(parsetime->parse_state) && CL_PPS(parse->unit))
- {
- l_fp offset;
-
- /*
- * we have a PPS signal - much better than the RS232 stuff (we hope)
- */
- offset = parsetime->parse_ptime.fp;
-
- L_ADD(&offset, &parse->ppsdelay);
-
- if (PARSE_TIMECODE(parsetime->parse_state))
- {
- if (M_ISGEQ(off.l_i, off.l_f, -1, 0x80000000) &&
- M_ISGEQ(0, 0x7fffffff, off.l_i, off.l_f))
- {
- /*
- * RS232 offsets within [-0.5..0.5[ - take PPS offsets
- */
-
- if (parse->parse_type->cl_flags & PARSE_F_PPSONSECOND)
- {
- reftime = off = offset;
- rectime = offset;
- /*
- * implied on second offset
- */
- off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */
- off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */
- }
- else
- {
- /*
- * time code describes pulse
- */
- off = parsetime->parse_time.fp;
-
- rectime = reftime = off; /* take reference time - fake rectime */
-
- L_SUB(&off, &offset); /* true offset */
- }
- }
- /*
- * take RS232 offset when PPS when out of bounds
- */
- }
- else
- {
- /*
- * Well, no time code to guide us - assume on second pulse
- * and pray, that we are within [-0.5..0.5[
- */
- reftime = off = offset;
- rectime = offset;
- /*
- * implied on second offset
- */
- off.l_uf = ~off.l_uf; /* map [0.5..1[ -> [-0.5..0[ */
- off.l_ui = (off.l_f < 0) ? ~0 : 0; /* sign extend */
- }
- }
- else
- {
- if (!PARSE_TIMECODE(parsetime->parse_state))
- {
- /*
- * Well, no PPS, no TIMECODE, no more work ...
- */
- return;
- }
- }
-
-
-#if defined(PPS) || defined(PPSCLK) || defined(PPSPPS) || defined(PARSEPPS)
- if (CL_PPS(parse->unit) && !parse->pollonly && PARSE_SYNC(parsetime->parse_state))
- {
- /*
- * only provide PPS information when clock
- * is in sync
- * thus PHASE and EPOCH are correct and PPS is not
- * done via the CIOGETEV loopfilter mechanism
- */
-#ifdef PPSPPS
- if (fdpps != parse->fd)
-#endif
- (void) pps_sample(&off);
- }
-#endif /* PPS || PPSCLK || PPSPPS || PARSEPPS */
-
- /*
- * ready, unless the machine wants a sample
- */
- if (!parse->pollonly && !parse->pollneeddata)
- return;
-
- parse->pollneeddata = 0;
-
- if (PARSE_PPS(parsetime->parse_state))
- {
- L_CLR(&dispersion);
- }
- else
- {
- /*
- * convert usec dispersion into NTP TS world
- */
-
- usecdisp.tv_sec = parsetime->parse_usecdisp / 1000000;
- usecdisp.tv_usec = parsetime->parse_usecdisp % 1000000;
-
- TVTOTS(&usecdisp, &dispersion);
- }
-
- /*
- * and now stick it into the clock machine
- * samples are only valid iff lastsync is not too old and
- * we have seen the clock in sync at least once
- * after the last time we didn't see an expected data telegram
- * see the clock states section above for more reasoning
- */
- if (((current_time - parse->lastsync) > parse->parse_type->cl_maxunsync) ||
- (parse->lastsync <= parse->lastmissed))
- {
- leap = LEAP_NOTINSYNC;
- }
- else
- {
- if (PARSE_LEAPADD(parsetime->parse_state))
- {
- /*
- * we pick this state also for time code that pass leap warnings
- * without direction information (as earth is currently slowing
- * down).
- */
- leap = (parse->flags & PARSE_LEAP_DELETE) ? LEAP_DELSECOND : LEAP_ADDSECOND;
- }
- else
- if (PARSE_LEAPDEL(parsetime->parse_state))
- {
- leap = LEAP_DELSECOND;
- }
- else
- {
- leap = LEAP_NOWARNING;
- }
- }
-
- refclock_receive(parse->peer, &off, 0, LFPTOFP(&dispersion), &reftime, &rectime, leap);
-}
-
-/**===========================================================================
- ** clock polling support
- **/
-
-struct poll_timer
-{
- struct event timer; /* we'd like to poll a a higher rate than 1/64s */
-};
-
-typedef struct poll_timer poll_timer_t;
-
-/*--------------------------------------------------
- * direct poll routine
- */
-static void
-poll_dpoll(parse)
- struct parseunit *parse;
-{
- register int rtc;
- register char *ps = ((poll_info_t *)parse->parse_type->cl_data)->string;
- register int ct = ((poll_info_t *)parse->parse_type->cl_data)->count;
-
- rtc = write(parse->fd, ps, ct);
- if (rtc < 0)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd to clock: %m", CL_UNIT(parse->unit));
- }
- else
- if (rtc != ct)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: poll_dpoll: failed to send cmd incomplete (%d of %d bytes sent)", CL_UNIT(parse->unit), rtc, ct);
- }
-}
-
-/*--------------------------------------------------
- * periodic poll routine
- */
-static void
-poll_poll(parse)
- struct parseunit *parse;
-{
- register poll_timer_t *pt = (poll_timer_t *)parse->localdata;
-
- poll_dpoll(parse);
-
- if (pt != (poll_timer_t *)0)
- {
- pt->timer.event_time = current_time + ((poll_info_t *)parse->parse_type->cl_data)->rate;
- TIMER_ENQUEUE(timerqueue, &pt->timer);
- }
-}
-
-/*--------------------------------------------------
- * init routine - setup timer
- */
-static int
-poll_init(parse)
- struct parseunit *parse;
-{
- register poll_timer_t *pt;
-
- if (((poll_info_t *)parse->parse_type->cl_data)->rate)
- {
- parse->localdata = (void *)malloc(sizeof(poll_timer_t));
- memset((char *)parse->localdata, 0, sizeof(poll_timer_t));
-
- pt = (poll_timer_t *)parse->localdata;
-
- pt->timer.peer = (struct peer *)parse; /* well, only we know what it is */
- pt->timer.event_handler = poll_poll;
- poll_poll(parse);
- }
- else
- {
- parse->localdata = (void *)0;
- }
-
- return 0;
-}
-
-/*--------------------------------------------------
- * end routine - clean up timer
- */
-static void
-poll_end(parse)
- struct parseunit *parse;
-{
- if (parse->localdata != (void *)0)
- {
- TIMER_DEQUEUE(&((poll_timer_t *)parse->localdata)->timer);
- free((char *)parse->localdata);
- parse->localdata = (void *)0;
- }
-}
-
-/**===========================================================================
- ** special code for special clocks
- **/
-
-/*--------------------------------------------------
- * trimble init routine - setup EOL and then do poll_init.
- */
-static int
-trimble_init(parse)
- struct parseunit *parse;
-{
-#ifdef HAVE_TERMIOS
- struct termios tm;
-#endif
-#ifdef HAVE_SYSV_TTYS
- struct termio tm;
-#endif
- /*
- * configure terminal line for trimble receiver
- */
- if (TTY_GETATTR(parse->fd, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcgetattr(fd, &tm): %m", CL_UNIT(parse->unit));
- return 0;
- }
- else
- {
- tm.c_cc[VEOL] = TRIMBLESV6_EOL;
-
- if (TTY_SETATTR(parse->fd, &tm) == -1)
- {
- syslog(LOG_ERR, "PARSE receiver #%d: trimble_init: tcsetattr(fd, &tm): %m", CL_UNIT(parse->unit));
- return 0;
- }
- }
- return poll_init(parse);
-}
-#endif /* defined(REFCLOCK) && defined(PARSE) */
-
-/*
- * History:
- *
- * refclock_parse.c,v
- * Revision 3.53 1994/03/25 13:07:39 kardel
- * fixed offset calculation for large (>4 Min) offsets
- *
- * Revision 3.52 1994/03/03 09:58:00 kardel
- * stick -kv in cvs is no fun
- *
- * Revision 3.49 1994/02/20 13:26:00 kardel
- * rcs id cleanup
- *
- * Revision 3.48 1994/02/20 13:04:56 kardel
- * parse add/delete second support
- *
- * Revision 3.47 1994/02/02 17:44:30 kardel
- * rcs ids fixed
- *
- * Revision 3.45 1994/01/25 19:06:27 kardel
- * 94/01/23 reconcilation
- *
- * Revision 3.44 1994/01/25 17:32:23 kardel
- * settable extended variables
- *
- * Revision 3.43 1994/01/23 16:28:39 kardel
- * HAVE_TERMIOS introduced
- *
- * Revision 3.42 1994/01/22 11:35:04 kardel
- * added HAVE_TERMIOS
- *
- * Revision 3.41 1993/11/27 18:44:37 kardel
- * can't trust GPS166 on unsync
- *
- * Revision 3.40 1993/11/21 18:03:36 kardel
- * useless declaration deleted
- *
- * Revision 3.39 1993/11/21 15:30:15 kardel
- * static funcitions may be declared only at outer level
- *
- * Revision 3.38 1993/11/15 21:26:49 kardel
- * conditional define comments fixed
- *
- * Revision 3.37 1993/11/11 11:20:49 kardel
- * declaration fixes
- *
- * Revision 3.36 1993/11/10 12:17:14 kardel
- * #ifdef glitch
- *
- * Revision 3.35 1993/11/01 21:15:06 kardel
- * comments updated
- *
- * Revision 3.34 1993/11/01 20:01:08 kardel
- * parse Solaris support (initial version)
- *
- * Revision 3.33 1993/10/30 09:44:58 kardel
- * conditional compilation flag cleanup
- *
- * Revision 3.32 1993/10/22 14:28:43 kardel
- * Oct. 22nd 1993 reconcilation
- *
- * Revision 3.31 1993/10/10 21:19:10 kardel
- * compilation cleanup - (minimal porting tests)
- *
- * Revision 3.30 1993/10/09 21:44:35 kardel
- * syslog strings fixed
- *
- * Revision 3.29 1993/10/09 14:40:15 kardel
- * default precision setting fixed
- *
- * Revision 3.28 1993/10/08 14:48:22 kardel
- * Changed offset determination logic:
- * Take the PPS offset if it is available and the time
- * code offset is within [-0.5..0.5[, otherwise stick
- * to the time code offset
- *
- * Revision 3.27 1993/10/08 00:53:17 kardel
- * announce also simulated PPS via CIOGETEV in ntpq cl
- *
- * Revision 3.26 1993/10/07 23:29:35 kardel
- * trimble fixes
- *
- * Revision 3.25 1993/10/06 21:13:35 kardel
- * test reversed (CIOGETEV support)
- *
- * Revision 3.24 1993/10/03 20:18:26 kardel
- * Well, values > 999999 in the usec field from uniqtime() timestamps
- * can prove harmful.
- *
- * Revision 3.23 1993/10/03 19:49:54 kardel
- * buftvtots where failing on uninitialized time stamps
- *
- * Revision 3.22 1993/10/03 19:11:09 kardel
- * restructured I/O handling
- *
- * Revision 3.21 1993/09/29 11:30:18 kardel
- * special init for trimble to set EOL
- *
- * Revision 3.20 1993/09/27 22:46:28 kardel
- * preserve module stack if I_PUSH parse fails
- *
- * Revision 3.19 1993/09/27 21:10:11 kardel
- * wrong structure member
- *
- * Revision 3.18 1993/09/27 13:05:06 kardel
- * Trimble is true polling only
- *
- * Revision 3.17 1993/09/27 12:47:10 kardel
- * poll string support generalized
- *
- * Revision 3.16 1993/09/26 23:40:56 kardel
- * new parse driver logic
- *
- * Revision 3.15 1993/09/24 15:00:51 kardel
- * Sep 23rd distribution...
- *
- * Revision 3.14 1993/09/22 18:21:15 kardel
- * support ppsclock streams module (-DSTREAM -DPPSPPS -DPARSEPPS -UPARSESTREAM)
- *
- * Revision 3.13 1993/09/05 15:38:33 kardel
- * not every cpp understands #error...
- *
- * Revision 3.12 1993/09/02 20:04:19 kardel
- * TTY cleanup
- *
- * Revision 3.11 1993/09/01 21:48:47 kardel
- * conditional cleanup
- *
- * Revision 3.10 1993/09/01 11:32:45 kardel
- * assuming HAVE_POSIX_TTYS when STREAM defined
- *
- * Revision 3.9 1993/08/31 22:31:46 kardel
- * SINIX-M SysVR4 integration
- *
- * Revision 3.8 1993/08/27 00:29:50 kardel
- * compilation cleanup
- *
- * Revision 3.7 1993/08/24 22:27:30 kardel
- * cleaned up AUTOCONF DCF77 mess 8-) - wasn't too bad
- *
- * Revision 3.6 1993/08/24 21:36:23 kardel
- * casting and ifdefs
- *
- * Revision 3.5 1993/07/09 23:36:59 kardel
- * HAVE_POSIX_TTYS used to produce errors 8-( - BSD driver support still lacking
- *
- * Revision 3.4 1993/07/09 12:42:29 kardel
- * RAW DCF now officially released
- *
- * Revision 3.3 1993/07/09 11:50:37 kardel
- * running GPS also on 960 to be able to switch GPS/DCF77
- *
- * Revision 3.2 1993/07/09 11:37:34 kardel
- * Initial restructured version + GPS support
- *
- * Revision 3.1 1993/07/06 10:01:07 kardel
- * DCF77 driver goes generic...
- *
- */
diff --git a/usr.sbin/xntpd/xntpdc/Makefile.tmpl b/usr.sbin/xntpd/xntpdc/Makefile.tmpl
deleted file mode 100644
index 80c8f93..0000000
--- a/usr.sbin/xntpd/xntpdc/Makefile.tmpl
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Makefile.tmpl
-#
-PROGRAM= xntpdc
-#
-# xntpdc - private mode query program for xntp
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-RESLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-OBJS= ntpdc.o ntpdc_ops.o
-SOURCE= ntpdc.c ntpdc_ops.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
diff --git a/usr.sbin/xntpd/xntpres/Makefile.tmpl b/usr.sbin/xntpd/xntpres/Makefile.tmpl
deleted file mode 100644
index 8f0742b..0000000
--- a/usr.sbin/xntpd/xntpres/Makefile.tmpl
+++ /dev/null
@@ -1,68 +0,0 @@
-#
-# Makefile.tmpl,v 3.1 1993/07/06 01:12:07 jbj Exp
-#
-PROGRAM= xntpres
-#
-# xntpres - name resolver support for xntpd
-#
-COMPILER= cc
-COPTS= -O
-BINDIR= /usr/local
-INSTALL= install
-DEFS=
-DEFS_OPT=
-DEFS_LOCAL=
-RESLIB=
-COMPAT=
-#
-INCL= -I../include
-CFLAGS= $(COPTS) $(DEFS) $(DEFS_LOCAL) $(INCL)
-CC= $(COMPILER)
-LIB= ../lib/libntp.a
-LINTLIB= ../lib/llib-llibntp.ln
-MAKE= make
-TOP=../
-#
-OBJS= xntpres.o
-SOURCE= xntpres.c
-
-all: $(PROGRAM)
-
-$(PROGRAM): $(OBJS) $(LIB) version.o
- $(CC) $(COPTS) -o $@ $(OBJS) version.o $(LIB) $(RESLIB) $(COMPAT)
-
-install: $(BINDIR)/$(PROGRAM)
-
-$(BINDIR)/$(PROGRAM): $(PROGRAM)
- $(INSTALL) -c -m 0755 $(PROGRAM) $(BINDIR)
-
-tags:
- ctags *.c *.h
-
-depend:
- mkdep $(CFLAGS) $(SOURCE)
-
-clean:
- -@rm -f $(PROGRAM) *.o *.out tags make.log Makefile.bak lint.errs .version
-
-distclean: clean
- -@rm -f *.orig *.rej .version Makefile
-
-lint: $(LINTLIB)
- lint -x -u $(DEFS) $(DEFS_LOCAL) $(INCL) $(LINTLIB) $(SOURCE) >lint.errs
-
-../lib/llib-llibntp.ln:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)" lintlib
-
-../lib/libntp.a:
- cd ../lib && $(MAKE) $(MFLAGS) MFLAGS="$(MFLAGS)"
-
-#
-# we want to build the current version string here
-#
-version.o: ../VERSION
- ../scripts/mkversion $(PROGRAM)
- $(CC) $(COPTS) $(INCL) -c version.c
-
-../VERSION:
- -@rm -f .version
diff --git a/usr.sbin/xntpd/xntpres/README b/usr.sbin/xntpd/xntpres/README
deleted file mode 100644
index 06d7266..0000000
--- a/usr.sbin/xntpd/xntpres/README
+++ /dev/null
@@ -1,6 +0,0 @@
-README file for directory ./xntpres of the NTP Version 3 distribution
-
-This directory contains the sources for the xntpres utility program. See
-the README and RELNOTES files in the parent directory for directions on
-how to make and install this program. The current version number of this
-program is in the version.c file.
diff --git a/usr.sbin/xntpd/xntpres/xntpres.c b/usr.sbin/xntpd/xntpres/xntpres.c
deleted file mode 100644
index 47c6eda..0000000
--- a/usr.sbin/xntpd/xntpres/xntpres.c
+++ /dev/null
@@ -1,850 +0,0 @@
-/* xntpres.c,v 3.1 1993/07/06 01:12:09 jbj Exp
- * xntpres - process configuration entries which require use of the resolver
- *
- * This is meant to be run by xntpd on the fly. It is not guaranteed
- * to work properly if run by hand. This is actually a quick hack to
- * stave off violence from people who hate using numbers in the
- * configuration file (at least I hope the rest of the daemon is
- * better than this). Also might provide some ideas about how one
- * might go about autoconfiguring an NTP distribution network.
- *
- * Usage is:
- * xntpres [-d] [-r] keyid keyfile configuration_data
- */
-#include <stdio.h>
-#include <ctype.h>
-#include <sys/types.h>
-#include <sys/time.h>
-#include <netdb.h>
-#include <signal.h>
-#include <errno.h>
-
-#include "ntp_select.h"
-#include "ntp_fp.h"
-#include "ntp.h"
-#include "ntp_io.h"
-#include "ntp_malloc.h"
-#include "ntp_request.h"
-#include "ntp_string.h"
-#include "ntp_stdlib.h"
-#include "ntp_syslog.h"
-
-#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-
-/*
- * Each item we are to resolve and configure gets one of these
- * structures defined for it.
- */
-struct conf_entry {
- struct conf_entry *ce_next;
- char *ce_name; /* name we are trying to resolve */
- struct conf_peer ce_config; /* configuration info for peer */
-};
-#define ce_peeraddr ce_config.peeraddr
-#define ce_hmode ce_config.hmode
-#define ce_version ce_config.version
-#define ce_minpoll ce_config.minpoll
-#define ce_maxpoll ce_config.maxpoll
-#define ce_flags ce_config.flags
-#define ce_ttl ce_config.ttl
-#define ce_keyid ce_config.keyid
-
-/*
- * confentries is a pointer to the list of configuration entries
- * we have left to do.
- */
-struct conf_entry *confentries = NULL;
-
-/*
- * We take an interrupt every thirty seconds, at which time we decrement
- * config_timer and resolve_timer. The former is set to 2, so we retry
- * unsucessful reconfigurations every minute. The latter is set to
- * an exponentially increasing value which starts at 2 and increases to
- * 32. When this expires we retry failed name resolutions.
- *
- * We sleep SLEEPTIME seconds before doing anything, to give the server
- * time to arrange itself.
- */
-#define MINRESOLVE 2
-#define MAXRESOLVE 32
-#define CONFIG_TIME 2
-#define ALARM_TIME 30
-
-#define SLEEPTIME 2
-
-int config_timer = 0;
-int resolve_timer = 0;
-
-int resolve_value; /* next value of resolve timer */
-
-/*
- * Big hack attack
- */
-#define LOCALHOST 0x7f000001 /* 127.0.0.1, in hex, of course */
-#define SKEWTIME 0x08000000 /* 0.03125 seconds as a l_fp fraction */
-
-/*
- * Select time out. Set to 2 seconds. The server is on the local machine,
- * after all.
- */
-#define TIMEOUT_SEC 2
-#define TIMEOUT_USEC 0
-
-
-/*
- * Input processing. The data on each line in the configuration file
- * is supposed to consist of entries in the following order
- */
-#define TOK_HOSTNAME 0
-#define TOK_HMODE 1
-#define TOK_VERSION 2
-#define TOK_MINPOLL 3
-#define TOK_MAXPOLL 4
-#define TOK_FLAGS 5
-#define TOK_TTL 6
-#define TOK_KEYID 7
-#define NUMTOK 8
-
-#define MAXLINESIZE 512
-
-
-/*
- * File descriptor for ntp request code.
- */
-int sockfd = -1;
-
-/*
- * Misc. data from argument processing
- */
-int removefile = 0; /* remove configuration file when done */
-
-U_LONG req_keyid; /* request keyid */
-char *keyfile; /* file where keys are kept */
-char *conffile; /* name of the file with configuration info */
-
-char *progname;
-int debug = 0;
-extern char *Version;
-extern int errno;
-
-static RETSIGTYPE bong P((int));
-static void checkparent P((void));
-static void removeentry P((struct conf_entry *));
-static void addentry P((char *, int, int, int, int, int, int, U_LONG));
-static int findhostaddr P((struct conf_entry *));
-static void openntp P((void));
-static int request P((struct conf_peer *));
-static char * nexttoken P((char **));
-static void readconf P((FILE *, char *));
-static void doconfigure P((int));
-
-/*
- * main - parse arguments and handle options
- */
-void
-main(argc, argv)
- int argc;
- char *argv[];
-{
- int c;
- int errflg = 0;
- char *cp;
- FILE *in;
- extern int ntp_optind;
-
- progname = argv[0];
-
- /*
- * Better get syslog open early since stderr messages are likely
- * ending up in the twilight zone
- */
- cp = strrchr(argv[0], '/');
- if (cp == 0)
- cp = argv[0];
- else
- cp++;
-
-#ifndef LOG_DAEMON
- openlog(cp, LOG_PID);
-#else
-
-#ifndef LOG_NTP
-#define LOG_NTP LOG_DAEMON
-#endif
- openlog(cp, LOG_PID | LOG_NDELAY, LOG_NTP);
-#ifdef DEBUG
- if (debug)
- setlogmask(LOG_UPTO(LOG_DEBUG));
- else
-#endif /* DEBUG */
- setlogmask(LOG_UPTO(LOG_INFO));
-#endif /* LOG_DAEMON */
-
- syslog(LOG_NOTICE, Version);
-
- while ((c = ntp_getopt(argc, argv, "dr")) != EOF)
- switch (c) {
- case 'd':
- ++debug;
- break;
- case 'r':
- ++removefile;
- break;
- default:
- errflg++;
- break;
- }
- if (errflg || (ntp_optind + 3) != argc) {
- (void) fprintf(stderr,
- "usage: %s [-d] [-r] keyid keyfile conffile\n", progname);
- syslog(LOG_ERR, "exiting due to usage error");
- exit(2);
- }
-
- if (!atouint(argv[ntp_optind], &req_keyid)) {
- syslog(LOG_ERR, "undecodeable keyid %s", argv[ntp_optind]);
- exit(1);
- }
-
- keyfile = argv[ntp_optind+1];
- conffile = argv[ntp_optind+2];
-
- /*
- * Make sure we have the key we need
- */
- if (!authreadkeys(keyfile))
- exit(1);
- if (!authhavekey(req_keyid)) {
- syslog(LOG_ERR, "request keyid %lu not found in %s",
- req_keyid, keyfile);
- exit(1);
- }
-
- /*
- * Read the configuration info
- */
- if ((in = fopen(conffile, "r")) == NULL) {
- syslog(LOG_ERR, "can't open configuration file %s: %m",
- conffile);
- exit(1);
- }
- readconf(in, conffile);
- (void) fclose(in);
- if (removefile)
- (void) unlink(conffile);
-
- /*
- * Sleep a little to make sure the server is completely up
- */
- sleep(SLEEPTIME);
-
- /*
- * Make a first cut at resolving the bunch
- */
- doconfigure(1);
- if (confentries == NULL)
- exit(0); /* done that quick */
-
- /*
- * Here we've got some problem children. Set up the timer
- * and wait for it.
- */
- resolve_value = resolve_timer = MINRESOLVE;
- config_timer = CONFIG_TIME;
- (void) signal(SIGALRM, bong);
- alarm(ALARM_TIME);
-
- for (;;) {
- if (confentries == NULL)
- exit(0);
- checkparent();
- if (resolve_timer == 0) {
- if (resolve_value < MAXRESOLVE)
- resolve_value <<= 1;
- resolve_timer = resolve_value;
- config_timer = CONFIG_TIME;
- doconfigure(1);
- continue;
- } else if (config_timer == 0) {
- config_timer = CONFIG_TIME;
- doconfigure(0);
- continue;
- }
- /*
- * There is a race in here. Is okay, though, since
- * all it does is delay things by 30 seconds.
- */
- (void) pause();
- }
-}
-
-
-/*
- * bong - service and reschedule an alarm() interrupt
- */
-static RETSIGTYPE
-bong(sig)
-int sig;
-{
- if (config_timer > 0)
- config_timer--;
- if (resolve_timer > 0)
- resolve_timer--;
- alarm(ALARM_TIME);
-}
-
-
-/*
- * checkparent - see if our parent process is still running
- */
-static void
-checkparent()
-{
- /*
- * If our parent (the server) has died we will have been
- * inherited by init. If so, exit.
- */
- if (getppid() == 1) {
- syslog(LOG_INFO, "parent died before we finished, exiting");
- exit(0);
- }
-}
-
-
-/*
- * removeentry - we are done with an entry, remove it from the list
- */
-static void
-removeentry(entry)
- struct conf_entry *entry;
-{
- register struct conf_entry *ce;
-
- ce = confentries;
- if (ce == entry) {
- confentries = ce->ce_next;
- return;
- }
-
- while (ce != NULL) {
- if (ce->ce_next == entry) {
- ce->ce_next = entry->ce_next;
- return;
- }
- ce = ce->ce_next;
- }
-}
-
-
-/*
- * addentry - add an entry to the configuration list
- */
-static void
-addentry(name, mode, version, minpoll, maxpoll, flags, ttl, keyid)
- char *name;
- int mode;
- int version;
- int minpoll;
- int maxpoll;
- int flags;
- int ttl;
- U_LONG keyid;
-{
- register char *cp;
- register struct conf_entry *ce;
- int len;
-
- len = strlen(name) + 1;
- cp = emalloc((unsigned)len);
- memmove(cp, name, len);
-
- ce = (struct conf_entry *)emalloc(sizeof(struct conf_entry));
- ce->ce_name = cp;
- ce->ce_peeraddr = 0;
- ce->ce_hmode = (u_char)mode;
- ce->ce_version = (u_char)version;
- ce->ce_minpoll = (u_char)minpoll;
- ce->ce_maxpoll = (u_char)maxpoll;
- ce->ce_flags = (u_char)flags;
- ce->ce_ttl = (u_char)ttl;
- ce->ce_keyid = htonl(keyid);
- ce->ce_next = NULL;
-
- if (confentries == NULL) {
- confentries = ce;
- } else {
- register struct conf_entry *cep;
-
- for (cep = confentries; cep->ce_next != NULL;
- cep = cep->ce_next)
- /* nothing */;
- cep->ce_next = ce;
- }
-}
-
-
-/*
- * findhostaddr - resolve a host name into an address
- *
- * The routine sticks the address into the entry's ce_peeraddr if it
- * gets one. It returns 1 for "success" and 0 for an uncorrectable
- * failure. Note that "success" includes try again errors. You can
- * tell that you got a try again since ce_peeraddr will still be zero.
- */
-static int
-findhostaddr(entry)
- struct conf_entry *entry;
-{
- struct hostent *hp;
-
- checkparent(); /* make sure our guy is still running */
-
- hp = gethostbyname(entry->ce_name);
-
- if (hp == NULL) {
-#ifndef NODNS
- /*
- * If the resolver is in use, see if the failure is
- * temporary. If so, return success.
- */
- extern int h_errno;
-
- if (h_errno == TRY_AGAIN)
- return 1;
-#endif
- return (0);
- }
-
- /*
- * Use the first address. We don't have any way to
- * tell preferences and older gethostbyname() implementations
- * only return one.
- */
- memmove((char *)&(entry->ce_peeraddr),
- hp->h_addr,
- sizeof(struct in_addr));
- return (1);
-}
-
-
-/*
- * openntp - open a socket to the ntp server
- */
-static void
-openntp()
-{
- struct sockaddr_in saddr;
-
- if (sockfd >= 0)
- return;
-
- sockfd = socket(AF_INET, SOCK_DGRAM, 0);
- if (sockfd == -1) {
- syslog(LOG_ERR, "socket() failed: %m");
- exit(1);
- }
-
- memset((char *)&saddr, 0, sizeof(saddr));
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons(NTP_PORT); /* trash */
- saddr.sin_addr.s_addr = htonl(LOCALHOST); /* garbage */
-
-
- /*
- * Make the socket non-blocking. We'll wait with select()
- */
-#if defined(O_NONBLOCK)
- if (fcntl(sockfd, F_SETFL, O_NONBLOCK) == -1) {
- syslog(LOG_ERR, "fcntl(O_NONBLOCK) failed: %m");
- exit(1);
- }
-#else
-#if defined(FNDELAY)
- if (fcntl(sockfd, F_SETFL, FNDELAY) == -1) {
- syslog(LOG_ERR, "fcntl(FNDELAY) failed: %m");
- exit(1);
- }
-#else
-NEED NON BLOCKING IO
-#endif
-#endif
-
- if (connect(sockfd, (struct sockaddr *)&saddr, sizeof(saddr)) == -1) {
- syslog(LOG_ERR, "connect() failed: %m");
- exit(1);
- }
-}
-
-
-/*
- * request - send a configuration request to the server, wait for a response
- */
-static int
-request(conf)
- struct conf_peer *conf;
-{
- fd_set fdset;
- struct timeval tvout;
- struct req_pkt reqpkt;
- l_fp ts;
- int n;
-
- checkparent(); /* make sure our guy is still running */
-
- if (sockfd < 0)
- openntp();
-
- /*
- * Try to clear out any previously received traffic so it
- * doesn't fool us. Note the socket is nonblocking.
- */
- while (read(sockfd, (char *)&reqpkt, REQ_LEN_MAC) > 0)
- /* nothing */;
-
- /*
- * Make up a request packet with the configuration info
- */
- memset((char *)&reqpkt, 0, sizeof(reqpkt));
-
- reqpkt.rm_vn_mode = RM_VN_MODE(0, 0);
- reqpkt.auth_seq = AUTH_SEQ(1, 0); /* authenticated, no seq */
- reqpkt.implementation = IMPL_XNTPD; /* local implementation */
- reqpkt.request = REQ_CONFIG; /* configure a new peer */
- reqpkt.err_nitems = ERR_NITEMS(0, 1); /* one item */
- reqpkt.mbz_itemsize = MBZ_ITEMSIZE(sizeof(struct conf_peer));
- memmove(reqpkt.data, (char *)conf, sizeof(struct conf_peer));
- reqpkt.keyid = htonl(req_keyid);
-
- auth1crypt(req_keyid, (U_LONG *)&reqpkt, REQ_LEN_NOMAC);
- gettstamp(&ts);
- M_ADDUF(ts.l_ui, ts.l_uf, SKEWTIME);
- HTONL_FP(&ts, &reqpkt.tstamp);
- n = auth2crypt(req_keyid, (U_LONG *)&reqpkt, REQ_LEN_NOMAC);
-
- /*
- * Done. Send it.
- */
- n = write(sockfd, (char *)&reqpkt, REQ_LEN_NOMAC + n);
- if (n < 0) {
- syslog(LOG_ERR, "send to NTP server failed: %m");
- return 0; /* maybe should exit */
- }
-
- /*
- * Wait for a response. A weakness of the mode 7 protocol used
- * is that there is no way to associate a response with a
- * particular request, i.e. the response to this configuration
- * request is indistinguishable from that to any other. I should
- * fix this some day. In any event, the time out is fairly
- * pessimistic to make sure that if an answer is coming back
- * at all, we get it.
- */
- for (;;) {
- FD_ZERO(&fdset);
- FD_SET(sockfd, &fdset);
- tvout.tv_sec = TIMEOUT_SEC;
- tvout.tv_usec = TIMEOUT_USEC;
-
- n = select(sockfd + 1, &fdset, (fd_set *)0,
- (fd_set *)0, &tvout);
-
- if (n <= 0) {
- if (n < 0)
- syslog(LOG_ERR, "select() fails: %m");
- return 0;
- }
-
- n = read(sockfd, (char *)&reqpkt, REQ_LEN_MAC);
- if (n <= 0) {
- if (n < 0) {
- syslog(LOG_ERR, "read() fails: %m");
- return 0;
- }
- continue;
- }
-
- /*
- * Got one. Check through to make sure it is what
- * we expect.
- */
- if (n < RESP_HEADER_SIZE) {
- syslog(LOG_ERR, "received runt response (%d octets)",
- n);
- continue;
- }
-
- if (!ISRESPONSE(reqpkt.rm_vn_mode)) {
-#ifdef DEBUG
- if (debug > 1)
- printf("received non-response packet\n");
-#endif
- continue;
- }
-
- if (ISMORE(reqpkt.rm_vn_mode)) {
-#ifdef DEBUG
- if (debug > 1)
- printf("received fragmented packet\n");
-#endif
- continue;
- }
-
- if (INFO_VERSION(reqpkt.rm_vn_mode) != NTP_VERSION
- || INFO_MODE(reqpkt.rm_vn_mode) != MODE_PRIVATE) {
-#ifdef DEBUG
- if (debug > 1)
- printf("version (%d) or mode (%d) incorrect\n",
- INFO_VERSION(reqpkt.rm_vn_mode),
- INFO_MODE(reqpkt.rm_vn_mode));
-#endif
- continue;
- }
-
- if (INFO_SEQ(reqpkt.auth_seq) != 0) {
-#ifdef DEBUG
- if (debug > 1)
- printf("nonzero sequence number (%d)\n",
- INFO_SEQ(reqpkt.auth_seq));
-#endif
- continue;
- }
-
- if (reqpkt.implementation != IMPL_XNTPD ||
- reqpkt.request != REQ_CONFIG) {
-#ifdef DEBUG
- if (debug > 1)
- printf(
- "implementation (%d) or request (%d) incorrect\n",
- reqpkt.implementation, reqpkt.request);
-#endif
- continue;
- }
-
- if (INFO_NITEMS(reqpkt.err_nitems) != 0 ||
- INFO_MBZ(reqpkt.mbz_itemsize) != 0 ||
- INFO_ITEMSIZE(reqpkt.mbz_itemsize != 0)) {
-#ifdef DEBUG
- if (debug > 1)
- printf(
- "nitems (%d) mbz (%d) or itemsize (%d) nonzero\n",
- INFO_NITEMS(reqpkt.err_nitems),
- INFO_MBZ(reqpkt.mbz_itemsize),
- INFO_ITEMSIZE(reqpkt.mbz_itemsize));
-#endif
- continue;
- }
-
- n = INFO_ERR(reqpkt.err_nitems);
- switch (n) {
- case INFO_OKAY:
- /* success */
- return 1;
-
- case INFO_ERR_IMPL:
- syslog(LOG_ERR,
- "server reports implementation mismatch!!");
- return 0;
-
- case INFO_ERR_REQ:
- syslog(LOG_ERR,
- "server claims configuration request is unknown");
- return 0;
-
- case INFO_ERR_FMT:
- syslog(LOG_ERR,
- "server indicates a format error occured(!!)");
- return 0;
-
- case INFO_ERR_NODATA:
- syslog(LOG_ERR,
- "server indicates no data available (shouldn't happen)");
- return 0;
-
- case INFO_ERR_AUTH:
- syslog(LOG_ERR,
- "server returns a permission denied error");
- return 0;
-
- default:
- syslog(LOG_ERR,
- "server returns unknown error code %d", n);
- return 0;
- }
- }
-}
-
-
-/*
- * nexttoken - return the next token from a line
- */
-static char *
-nexttoken(lptr)
- char **lptr;
-{
- register char *cp;
- register char *tstart;
-
- cp = *lptr;
-
- /*
- * Skip leading white space
- */
- while (*cp == ' ' || *cp == '\t')
- cp++;
-
- /*
- * If this is the end of the line, return nothing.
- */
- if (*cp == '\n' || *cp == '\0') {
- *lptr = cp;
- return NULL;
- }
-
- /*
- * Must be the start of a token. Record the pointer and look
- * for the end.
- */
- tstart = cp++;
- while (*cp != ' ' && *cp != '\t' && *cp != '\n' && *cp != '\0')
- cp++;
-
- /*
- * Terminate the token with a \0. If this isn't the end of the
- * line, space to the next character.
- */
- if (*cp == '\n' || *cp == '\0')
- *cp = '\0';
- else
- *cp++ = '\0';
-
- *lptr = cp;
- return tstart;
-}
-
-
-/*
- * readconf - read the configuration information out of the file we
- * were passed. Note that since the file is supposed to be
- * machine generated, we bail out at the first sign of trouble.
- */
-static void
-readconf(fp, name)
- FILE *fp;
- char *name;
-{
- register int i;
- char *token[NUMTOK];
- U_LONG intval[NUMTOK];
- int flags;
- char buf[MAXLINESIZE];
- char *bp;
-
- while (fgets(buf, MAXLINESIZE, fp) != NULL) {
-
- bp = buf;
- for (i = 0; i < NUMTOK; i++) {
- if ((token[i] = nexttoken(&bp)) == NULL) {
- syslog(LOG_ERR,
- "tokenizing error in file `%s', quitting",
- name);
- exit(1);
- }
- }
-
- for (i = 1; i < NUMTOK; i++) {
- if (!atouint(token[i], &intval[i])) {
- syslog(LOG_ERR,
- "format error for integer token `%s', file `%s', quitting",
- token[i], name);
- exit(1);
- }
- }
-
- if (intval[TOK_HMODE] != MODE_ACTIVE &&
- intval[TOK_HMODE] != MODE_CLIENT &&
- intval[TOK_HMODE] != MODE_BROADCAST) {
- syslog(LOG_ERR, "invalid mode (%d) in file %s",
- intval[TOK_HMODE], name);
- exit(1);
- }
-
- if (intval[TOK_VERSION] > NTP_VERSION ||
- intval[TOK_VERSION] < NTP_OLDVERSION) {
- syslog(LOG_ERR, "invalid version (%d) in file %s",
- intval[TOK_VERSION], name);
- exit(1);
- }
-
- if (intval[TOK_MINPOLL] < NTP_MINPOLL ||
- intval[TOK_MINPOLL] > NTP_MAXPOLL) {
- syslog(LOG_ERR, "invalid MINPOLL value (%d) in file %s",
- intval[TOK_MINPOLL], name);
- exit(1);
- }
-
- if (intval[TOK_MAXPOLL] < NTP_MINPOLL ||
- intval[TOK_MAXPOLL] > NTP_MAXPOLL) {
- syslog(LOG_ERR, "invalid MAXPOLL value (%d) in file %s",
- intval[TOK_MAXPOLL], name);
- exit(1);
- }
-
- if ((intval[TOK_FLAGS] & ~(FLAG_AUTHENABLE|FLAG_PREFER))
- != 0) {
- syslog(LOG_ERR, "invalid flags (%d) in file %s",
- intval[TOK_FLAGS], name);
- exit(1);
- }
-
- flags = 0;
- if (intval[TOK_FLAGS] & FLAG_AUTHENABLE)
- flags |= CONF_FLAG_AUTHENABLE;
- if (intval[TOK_FLAGS] & FLAG_PREFER)
- flags |= CONF_FLAG_PREFER;
-
- /*
- * This is as good as we can check it. Add it in.
- */
- addentry(token[TOK_HOSTNAME], (int)intval[TOK_HMODE],
- (int)intval[TOK_VERSION], (int)intval[TOK_MINPOLL],
- (int)intval[TOK_MAXPOLL], flags, (int)intval[TOK_TTL],
- intval[TOK_KEYID]);
- }
-}
-
-
-/*
- * doconfigure - attempt to resolve names and configure the server
- */
-static void
-doconfigure(dores)
- int dores;
-{
- register struct conf_entry *ce;
- register struct conf_entry *ceremove;
-
- ce = confentries;
- while (ce != NULL) {
- if (dores && ce->ce_peeraddr == 0) {
- if (!findhostaddr(ce)) {
- syslog(LOG_ERR,
- "couldn't resolve `%s', giving up on it",
- ce->ce_name);
- ceremove = ce;
- ce = ceremove->ce_next;
- removeentry(ceremove);
- continue;
- }
- }
-
- if (ce->ce_peeraddr != 0) {
- if (request(&ce->ce_config)) {
- ceremove = ce;
- ce = ceremove->ce_next;
- removeentry(ceremove);
- continue;
- }
- }
- ce = ce->ce_next;
- }
-}
diff --git a/usr.sbin/xten/Install.notes b/usr.sbin/xten/Install.notes
deleted file mode 100644
index 9725ba4..0000000
--- a/usr.sbin/xten/Install.notes
+++ /dev/null
@@ -1,222 +0,0 @@
-Installation Notes for X-10 software
-Eugene W. Stark (stark@cs.sunysb.edu)
-October 30, 1993
-
-The TW523 is a carrier-current modem for home control/automation purposes.
-It is made by:
-
- X-10 Inc.
- 185A LeGrand Ave.
- Northvale, NJ 07647
- USA
- (201) 784-9700 or 1-800-526-0027
-
- X-10 Home Controls Inc.
- 1200 Aerowood Drive, Unit 20
- Mississauga, Ontario
- (416) 624-4446 or 1-800-387-3346
-
-The TW523 is designed for communications using the X-10 protocol,
-which is compatible with a number of home control systems, including
-Radio Shack "Plug 'n Power(tm)" and Stanley "Lightmaker(tm)."
-I bought my TW523 from:
-
- Home Control Concepts
- 9353-C Activity Road
- San Diego, CA 92126
- (619) 693-8887
-
-They supplied me with the TW523 (which has an RJ-11 four-wire modular
-telephone connector), a modular cable, an RJ-11 to DB-25 connector with
-internal wiring, documentation from X-10 on the TW523 (very good),
-an instruction manual by Home Control Concepts (not very informative),
-and a floppy disk containing binary object code of some demonstration/test
-programs and of a C function library suitable for controlling the TW523
-by an IBM PC under MS-DOS (not useful to me other than to verify that
-the unit worked). I suggest saving money and buying the bare TW523
-rather than the TW523 development kit (what I bought), because if you
-are running 386BSD you don't really care about the DOS binaries.
-For details on the X-10 protocol itself, refer to the documentation from
-X-10 Inc.
-
-The interface to the TW-523 consists of four wires on the RJ-11 connector,
-which are jumpered to somewhat more wires on the DB-25 connector, which
-in turn is intended to plug into the PC parallel printer port. I dismantled
-the DB-25 connector to find out what they had done:
-
- Signal RJ-11 pin DB-25 pin(s) Parallel Port
- Transmit TX 4 (Y) 2, 4, 6, 8 Data out
- Receive RX 3 (G) 10, 14 -ACK, -AutoFeed
- Common 2 (R) 25 Common
- Zero crossing 1 (B) 17 -Select Input
-
-I use the TW-523 and this software in the USA with 120V/60Hz power.
-Phil Sampson (vk2jnt@gw.vk2jnt.ampr.org OR sampson@gidday.enet.dec.com)
-in Australia has reported success in using a TW-7223 (a local version
-of the TW-523) and Tandy modules with this software under 240V/50Hz power.
-For reasons explained in the comments in the driver, it will probably not
-work if you have three-phase power, but this is usually not the case for
-normal residences and offices.
-
-
-1. Installing the TW523 Device Driver
-
-I assume that you are running FreeBSD. If you are running some other
-system, you are more or less on your own, though I can try to help if you
-have problems.
-
-Check the configuration parameters at the beginning of the file
-
- /sys/i386/isa/tw.c
-
-Probably the only thing you might need to change is to change the
-definition of HALFCYCLE from 8333 to 10000 if you are using 50Hz power.
-The driver assumes that the TW523 device is connected to a parallel port.
-See the comments near the beginning of the file to find out where to
-get a TW523 if you don't have one, and how to make a cable for it to
-connect to your parallel port.
-
-Add a line like the following
-
- device tw0 at isa? port 0x278 tty irq 5 vector twintr
-
-to /sys/i386/conf/YOURSYSTEM, but make sure to change the I/O port and
-interrupt to match your hardware configuration.
-
-Cd to /sys/i386/conf and do "config YOURSYSTEM".
-Cd to /sys/compile/YOURSYSTEM and do "make depend", then "make".
-(If you have any troubles, I suggest starting fresh by doing a full
-"make clean; make depend; make".) Assuming the make works correctly, do
-
- mv /386bsd /386bsd.old
- mv 386bsd /386bsd
-
-(If you are not a trusting person, or you don't have any spare fixit
-floppies with working kernels lying around, don't do this without testing
-the kernel first by copying it to a fixit floppy and booting from that.)
-
-Reboot the system. You should see a line indicating that the TW523 has
-been configured as the system comes up. If you see this line, then probably
-everything is going to work OK, because the TW523 will only get configured
-if the driver is able to sync to the power line. If the TW523 is not plugged
-in, or the driver is not getting sync for some reason, then you won't see
-any message on bootup.
-
-NOTE: I have received a report that some multi IDE/SIO/PARALLEL cards
-"cheat" and use TTL outputs rather than pullup open collector outputs,
-and this can mess up the scheme by which sync gets to the driver.
-If you are having trouble getting the driver to work, you might want to
-look into this possibility.
-
-In directory /dev, execute the command
-
- MAKEDEV tw0
-
-
-2. Installing the X-10 Daemon
-
-Go to the xten source directory (probably /usr/src/contrib/xten).
-Check over the file "paths.h", if desired, to make sure that the entries
-are reasonable for your system. On my system, I have a special UID "xten"
-for the daemon. If you want to do this, too, you will have to add this UID
-to your /etc/master.passwd in the usual way. Otherwise, use "root" or
-"daemon" or something. You should change the ownership of /dev/tw0 to
-match this UID, so that the daemon will be able to access the TW-523.
-Edit the file Makefile.inc in the source directory to specify this UID:
-
- xtenuser= xten
-
-Then run "make". If everything is OK, run
-
- make install
-
-This should install the daemon "xtend" and the command "xten".
-
-Make sure the directory /var/spool/xten exists and is owned by the UID
-you selected above. This directory is used by the daemon for its log and
-device status files. When it is run, the daemon will also create a socket
-/var/run/tw523 and it will put its pid in /var/run/xtend.pid so that it can
-be signalled from shell scripts.
-
-Add the following lines to your /etc/rc.local file:
-
- if [ -x /usr/libexec/xtend ]; then
- echo -n ' xtend'; /usr/libexec/xtend
- fi
-
-This will cause the X-10 daemon to be invoked automatically when you boot
-the system. To test the installation, you can either reboot now, or
-you can just run "xtend" by hand. The daemon should start up, and it should
-create files in /var/spool/xten. Check the file /var/spool/xten/Log to
-make sure that the daemon started up without any errors.
-
-Now you are ready to start trying X-10 commands. Try doing
-
- xten A 1 Off
- xten A 1 On 1 Dim:10
-
-etc. The "xten" program expects a house code as its first argument, then
-a series of key codes, which are either unit names ("1" through "16") or
-else are command names. You can find the list of command names by looking
-at the table in the file "xten.c". Each key code can optionally be followed
-by a colon : then a number specifying the number of times that command is
-to be transmitted without gaps between packets. The default is 2, and this
-is the normal case, but some commands like Bright and Dim are designed to
-be transmitted with counts other than 2. See the X-10 documentation for
-more detail.
-
-The "xten" program works by connecting to "xtend" through a socket, and
-asking that the X-10 codes be transmitted over the TW523. All activity
-on the TW523 is logged by the daemon in /var/spool/xten/Log. The daemon
-also attempts to track the state of all devices. (Of course, most X-10
-devices do not transmit when they are operated manually, so if somebody
-operates a device manually there is no way the X-10 daemon will know
-about it.)
-
-3. Low-level Programming of the TW523 Driver
-
-Normally, you would never operate the TW523 directly, rather you would
-use the shell command "xten" or you would connect to "xtend" through its
-socket. However, if you don't want to run "xtend", you can manipulate
-the TW523 directly through the device /dev/tw0. Have a look at the
-xtend code for a programming example.
-
-The driver supports read(), write(), and select() system calls.
-The driver allows multiple processes to read and write simultaneously,
-but there is probably not much sense in having more than one reader or more
-than one writer at a time, and in fact there may currently be a race
-condition in the driver if two processes try to transmit simultaneously
-(due to unsynchronized access to the sc_pkt structure in tw_sc).
-
-Transmission is done by calling write() to send three byte packets of data.
-The first byte contains a four bit house code (0=A to 15=P). The second byte
-contains five bit unit/key code (0=unit 1 to 15=unit 16, 16=All Units Off
-to 31 = Status Request). The third byte specifies the number of times the
-packet is to be transmitted without any gaps between successive transmissions.
-Normally this is 2, as per the X-10 documentation, but sometimes (e.g. for
-bright and dim codes) it can be another value. Each call to write can specify
-an arbitrary number of data bytes, but at most one packet will actually be
-processed in any call. Any incomplete packet is buffered until a subsequent
-call to write() provides data to complete it. Successive calls to write()
-leave a three-cycle gap between transmissions, per the X-10 documentation.
-The driver transmits each bit only once per half cycle, not three times as
-the X-10 documentation states, because the TW523 only provides sync on
-each power line zero crossing. So, the driver will probably not work
-properly if you have three-phase service. Most residences use a two-wire
-system, for which the driver does work.
-
-Reception is done using read(). The driver produces a series of three
-character packets. In each packet, the first character consists of flags,
-the second character is a four bit house code (0-15), and the third character
-is a five bit key/function code (0-31). The flags are the following:
-
-#define TW_RCV_LOCAL 1 /* The packet arrived during a local transmission */
-#define TW_RCV_ERROR 2 /* An invalid/corrupted packet was received */
-
-The select() system call can be used in the usual way to determine if there
-is data ready for reading.
-
-
- Happy Controlling!
- Gene Stark
- stark@cs.sunysb.edu
OpenPOWER on IntegriCloud