Virgin import of ntpd 4.0.99b
This commit is contained in:
parent
c0b746e5e8
commit
a151a66c2a
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/vendor/ntp/dist/; revision=56746
@ -4,14 +4,15 @@ This file is automatically generated from html/copyright.htm
|
||||
|
||||
[INLINE] "Clone me," says Dolly sheepishly
|
||||
_________________________________________________________________
|
||||
|
||||
|
||||
The following copyright notice applies to all files collectively
|
||||
called the Network Time Protocol Version 4 Distribution. Unless
|
||||
specifically declared otherwise in an individual file, this notice
|
||||
applies as if the text was explicitly included in the file.
|
||||
|
||||
/***********************************************************************
|
||||
* *
|
||||
* Copyright (c) David L. Mills 1992-1999 *
|
||||
* Copyright (c) David L. Mills 1992-2000 *
|
||||
* *
|
||||
* Permission to use, copy, modify, and distribute this software and *
|
||||
* its documentation for any purpose and without fee is hereby *
|
||||
@ -24,7 +25,9 @@ This file is automatically generated from html/copyright.htm
|
||||
* representations about the suitability this software for any *
|
||||
* purpose. It is provided "as is" without express or implied *
|
||||
* warranty. *
|
||||
**********************************************************************/
|
||||
* *
|
||||
***********************************************************************
|
||||
*/
|
||||
|
||||
The following individuals contributed in part to the Network Time
|
||||
Protocol Distribution Version 4 and are acknowledged as authors of
|
||||
@ -33,119 +36,128 @@ This file is automatically generated from html/copyright.htm
|
||||
controller
|
||||
2. [2]Viraj Bais <vbais@mailman1.intel.com> and [3]Clayton Kirkwood
|
||||
<kirkwood@striderfm.intel.com> port to WindowsNT 3.5
|
||||
3. [4]Karl Berry <karl@owl.HQ.ileaf.com> syslog to file option
|
||||
4. [5]Piete Brooks <Piete.Brooks@cl.cam.ac.uk> MSF clock driver,
|
||||
3. [4]Michael Barone <michael,barone@lmco.com> GPSVME fixes
|
||||
4. [5]Karl Berry <karl@owl.HQ.ileaf.com> syslog to file option
|
||||
5. [6]Greg Brackley <greg.brackley@bigfoot.com> Major rework of WINNT
|
||||
port. Clean up recvbuf and iosignal code into separate modules.
|
||||
6. [7]Piete Brooks <Piete.Brooks@cl.cam.ac.uk> MSF clock driver,
|
||||
Trimble PARSE support
|
||||
5. [6]Steve Clift <clift@ml.csiro.au> OMEGA clock driver
|
||||
6. [7]Casey Crellin <casey@csc.co.za> vxWorks (Tornado) port and help
|
||||
7. [8]Steve Clift <clift@ml.csiro.au> OMEGA clock driver
|
||||
8. [9]Casey Crellin <casey@csc.co.za> vxWorks (Tornado) port and help
|
||||
with target configuration
|
||||
7. [8]Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> Linux port
|
||||
8. [9]John A. Dundas III <dundas@salt.jpl.nasa.gov> Apple A/UX port
|
||||
9. [10]Dennis Ferguson <dennis@mrbill.canet.ca> foundation code for
|
||||
9. [10]Sven Dietrich <sven_dietrich@trimble.com> Palisade reference
|
||||
clock driver, NT adj. residuals, integrated Greg's Winnt port.
|
||||
10. [11]John A. Dundas III <dundas@salt.jpl.nasa.gov> Apple A/UX port
|
||||
11. [12]Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de> Linux
|
||||
port
|
||||
12. [13]Dennis Ferguson <dennis@mrbill.canet.ca> foundation code for
|
||||
NTP Version 2 as specified in RFC-1119
|
||||
10. [11]Glenn Hollinger <glenn@herald.usask.ca> GOES clock driver
|
||||
11. [12]Mike Iglesias <iglesias@uci.edu> DEC Alpha port
|
||||
12. [13]Jim Jagielski <jim@jagubox.gsfc.nasa.gov> A/UX port
|
||||
13. [14]Jeff Johnson <jbj@chatham.usdesign.com> massive prototyping
|
||||
13. [14]Glenn Hollinger <glenn@herald.usask.ca> GOES clock driver
|
||||
14. [15]Mike Iglesias <iglesias@uci.edu> DEC Alpha port
|
||||
15. [16]Jim Jagielski <jim@jagubox.gsfc.nasa.gov> A/UX port
|
||||
16. [17]Jeff Johnson <jbj@chatham.usdesign.com> massive prototyping
|
||||
overhaul
|
||||
14. [15]William L. Jones <jones@hermes.chpc.utexas.edu> RS/6000 AIX
|
||||
17. [18]William L. Jones <jones@hermes.chpc.utexas.edu> RS/6000 AIX
|
||||
modifications, HPUX modifications
|
||||
15. [16]Dave Katz <dkatz@cisco.com> RS/6000 AIX port
|
||||
16. [17]Craig Leres <leres@ee.lbl.gov> 4.4BSD port, ppsclock,
|
||||
Maganavox GPS clock driver
|
||||
17. [18]George Lindholm <lindholm@ucs.ubc.ca> SunOS 5.1 port
|
||||
18. [19]Louis A. Mamakos <louie@ni.umd.edu> MD5-based authentication
|
||||
19. [20]Derek Mulcahy <derek@toybox.demon.co.uk> and [21]Damon
|
||||
Hart-Davis <d@hd.org> ARCRON MSF clock driver
|
||||
20. [22]Lars H. Mathiesen <thorinn@diku.dk> adaptation of foundation
|
||||
code for Version 3 as specified in RFC-1305
|
||||
21. [23]David L. Mills <mills@udel.edu> Version 4 foundation,
|
||||
Spectractom WWVB, Austron GPS, Arbiter GPS, CHU, Heath, ATOM,
|
||||
ACTS, KSI/Odetics, IRIG clock drivers; PPS support; precision
|
||||
kernel; NTPv4 changes
|
||||
22. [24]Wolfgang Moeller <moeller@gwdgv1.dnet.gwdg.de> VMS port
|
||||
23. [25]Jeffrey Mogul <mogul@pa.dec.com> ntptrace utility
|
||||
24. [26]Tom Moore <tmoore@fievel.daytonoh.ncr.com> i386 svr4 port
|
||||
25. [27]Rainer Pruy <Rainer.Pruy@informatik.uni-erlangen.de>
|
||||
monitoring/trap scripts, statistics file handling
|
||||
26. [28]Dirce Richards <dirce@zk3.dec.com> Digital UNIX V4.0 port
|
||||
27. [29]Nick Sayer <mrapple@quack.kfu.com> SunOS streams modules
|
||||
28. [30]Frank Kardel [31]<Frank.Kardel@informatik.uni-erlangen.de>
|
||||
18. [19]Hans Lambermont <Hans.Lambermont@nl.origin-it.com> or
|
||||
[20]<H.Lambermont@chello.nl> ntpsweep
|
||||
19. [21]Frank Kardel [22]<Frank.Kardel@informatik.uni-erlangen.de>
|
||||
PARSE <GENERIC> driver (14 reference clocks), STREAMS modules for
|
||||
PARSE, support scripts, syslog cleanup
|
||||
29. [32]Ray Schnitzler <schnitz@unipress.com> Unixware1 port
|
||||
30. [33]Michael Shields <shields@tembel.org> USNO clock driver
|
||||
31. [34]Jeff Steinman <jss@pebbles.jpl.nasa.gov> Datum PTS clock
|
||||
driver
|
||||
32. [35]Harlan Stenn <harlan@pfcs.com> GNU automake/autoconfigure
|
||||
makeover
|
||||
33. [36]Kenneth Stone <ken@sdd.hp.com> HP-UX port
|
||||
34. [37]Ajit Thyagarajan <ajit@ee.udel.edu>IP multicast support
|
||||
35. [38]Tomoaki TSURUOKA <tsuruoka@nc.fukuoka-u.ac.jp>TRAK clock
|
||||
driver
|
||||
36. [39]Paul A Vixie <vixie@vix.com> TrueTime GPS driver, generic
|
||||
TrueTime clock driver
|
||||
37. [40]Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> corrected and
|
||||
validated HTML documents according to the HTML DTD
|
||||
38. [41]Greg Brackley <greg.brackley@bigfoot.com> Major rework of
|
||||
WINNT port. Clean up recvbuf and iosignal code into separate
|
||||
modules.
|
||||
39. [42]Sven Dietrich <sven_dietrich@trimble.com> Palisade reference
|
||||
clock driver, NT adj. residuals, integrated Greg's Winnt port.
|
||||
40. [43]Wilfredo Sánchez <wsanchez@apple.com> added support for
|
||||
20. [23]Dave Katz <dkatz@cisco.com> RS/6000 AIX port
|
||||
21. [24]Craig Leres <leres@ee.lbl.gov> 4.4BSD port, ppsclock,
|
||||
Maganavox GPS clock driver
|
||||
22. [25]George Lindholm <lindholm@ucs.ubc.ca> SunOS 5.1 port
|
||||
23. [26]Louis A. Mamakos <louie@ni.umd.edu> MD5-based authentication
|
||||
24. [27]Lars H. Mathiesen <thorinn@diku.dk> adaptation of foundation
|
||||
code for Version 3 as specified in RFC-1305
|
||||
25. [28]David L. Mills <mills@udel.edu> Version 4 foundation: clock
|
||||
discipline, authentication, precision kernel; clock drivers:
|
||||
Spectracom, Austron, Arbiter, Heath, ATOM, ACTS, KSI/Odetics;
|
||||
audio clock drivers: CHU, WWV/H, IRIG
|
||||
26. [29]Wolfgang Moeller <moeller@gwdgv1.dnet.gwdg.de> VMS port
|
||||
27. [30]Jeffrey Mogul <mogul@pa.dec.com> ntptrace utility
|
||||
28. [31]Tom Moore <tmoore@fievel.daytonoh.ncr.com> i386 svr4 port
|
||||
29. [32]Derek Mulcahy <derek@toybox.demon.co.uk> and [33]Damon
|
||||
Hart-Davis <d@hd.org> ARCRON MSF clock driver
|
||||
30. [34]Rainer Pruy <Rainer.Pruy@informatik.uni-erlangen.de>
|
||||
monitoring/trap scripts, statistics file handling
|
||||
31. [35]Dirce Richards <dirce@zk3.dec.com> Digital UNIX V4.0 port
|
||||
32. [36]Wilfredo Sánchez <wsanchez@apple.com> added support for
|
||||
NetInfo
|
||||
|
||||
33. [37]Nick Sayer <mrapple@quack.kfu.com> SunOS streams modules
|
||||
34. [38]Jack Sasportas <jack@innovativeinternet.com> Saved a Lot of
|
||||
space on the stuff in the html/pic/ subdirectory
|
||||
35. [39]Ray Schnitzler <schnitz@unipress.com> Unixware1 port
|
||||
36. [40]Michael Shields <shields@tembel.org> USNO clock driver
|
||||
37. [41]Jeff Steinman <jss@pebbles.jpl.nasa.gov> Datum PTS clock
|
||||
driver
|
||||
38. [42]Harlan Stenn <harlan@pfcs.com> GNU automake/autoconfigure
|
||||
makeover, various other bits (see the ChangeLog)
|
||||
39. [43]Kenneth Stone <ken@sdd.hp.com> HP-UX port
|
||||
40. [44]Ajit Thyagarajan <ajit@ee.udel.edu>IP multicast/anycast
|
||||
support
|
||||
41. [45]Tomoaki TSURUOKA <tsuruoka@nc.fukuoka-u.ac.jp>TRAK clock
|
||||
driver
|
||||
42. [46]Paul A Vixie <vixie@vix.com> TrueTime GPS driver, generic
|
||||
TrueTime clock driver
|
||||
43. [47]Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> corrected and
|
||||
validated HTML documents according to the HTML DTD
|
||||
_________________________________________________________________
|
||||
|
||||
[44][LINK]
|
||||
|
||||
[48][LINK]
|
||||
|
||||
|
||||
[45]David L. Mills <mills@udel.edu>
|
||||
[49]David L. Mills <mills@udel.edu>
|
||||
|
||||
References
|
||||
|
||||
1. mailto: marka@syd.dms.csiro.au
|
||||
2. mailto: vbais@mailman1.intel.co
|
||||
3. mailto: kirkwood@striderfm.intel.com
|
||||
4. mailto: karl@owl.HQ.ileaf.com
|
||||
5. mailto: Piete.Brooks@cl.cam.ac.uk
|
||||
6. mailto: clift@ml.csiro.au
|
||||
7. mailto:casey@csc.co.za
|
||||
8. mailto: duwe@immd4.informatik.uni-erlangen.de
|
||||
9. mailto: dundas@salt.jpl.nasa.gov
|
||||
10. mailto: dennis@mrbill.canet.ca
|
||||
11. mailto: glenn@herald.usask.ca
|
||||
12. mailto: iglesias@uci.edu
|
||||
13. mailto: jagubox.gsfc.nasa.gov
|
||||
14. mailto: jbj@chatham.usdesign.com
|
||||
15. mailto: jones@hermes.chpc.utexas.edu
|
||||
16. mailto: dkatz@cisco.com
|
||||
17. mailto: leres@ee.lbl.gov
|
||||
18. mailto: lindholm@ucs.ubc.ca
|
||||
19. mailto: louie@ni.umd.edu
|
||||
20. mailto: derek@toybox.demon.co.uk
|
||||
21. mailto: d@hd.org
|
||||
22. mailto: thorinn@diku.dk
|
||||
23. mailto: mills@udel.edu
|
||||
24. mailto: moeller@gwdgv1.dnet.gwdg.de
|
||||
25. mailto: mogul@pa.dec.com
|
||||
26. mailto: tmoore@fievel.daytonoh.ncr.com
|
||||
27. mailto: Rainer.Pruy@informatik.uni-erlangen.de
|
||||
28. mailto: dirce@zk3.dec.com
|
||||
29. mailto: mrapple@quack.kfu.com
|
||||
30. http://www4.informatik.uni-erlangen.de/~kardel
|
||||
31. mailto: Frank.Kardel@informatik.uni-erlangen.de
|
||||
32. mailto: schnitz@unipress.com
|
||||
33. mailto: shields@tembel.org
|
||||
34. mailto: pebbles.jpl.nasa.gov
|
||||
35. mailto: harlan@pfcs.com
|
||||
36. mailto: ken@sdd.hp.com
|
||||
37. mailto: ajit@ee.udel.edu
|
||||
38. mailto: tsuruoka@nc.fukuoka-u.ac.jp
|
||||
39. mailto: vixie@vix.com
|
||||
40. mailto: Ulrich.Windl@rz.uni-regensburg.de
|
||||
41. mailto: greg.brackley@bigfoot.com
|
||||
42. mailto: Sven_Dietrich@trimble.COM
|
||||
43. mailto: wsanchez@apple.com
|
||||
44. file://localhost/backroom/ntp4/html/index.htm
|
||||
45. mailto:mills@udel.edu
|
||||
1. mailto:marka@syd.dms.csiro.au
|
||||
2. mailto:vbais@mailman1.intel.co
|
||||
3. mailto:kirkwood@striderfm.intel.com
|
||||
4. mailto:michael.barone@lmco.com
|
||||
5. mailto:karl@owl.HQ.ileaf.com
|
||||
6. mailto:greg.brackley@bigfoot.com
|
||||
7. mailto:Piete.Brooks@cl.cam.ac.uk
|
||||
8. mailto:clift@ml.csiro.au
|
||||
9. mailto:casey@csc.co.za
|
||||
10. mailto:Sven_Dietrich@trimble.COM
|
||||
11. mailto:dundas@salt.jpl.nasa.gov
|
||||
12. mailto:duwe@immd4.informatik.uni-erlangen.de
|
||||
13. mailto:dennis@mrbill.canet.ca
|
||||
14. mailto:glenn@herald.usask.ca
|
||||
15. mailto:iglesias@uci.edu
|
||||
16. mailto:jagubox.gsfc.nasa.gov
|
||||
17. mailto:jbj@chatham.usdesign.com
|
||||
18. mailto:jones@hermes.chpc.utexas.edu
|
||||
19. mailto:Hans.Lambermont@nl.origin-it.com
|
||||
20. mailto:H.Lambermont@chello.nl
|
||||
21. http://www4.informatik.uni-erlangen.de/~kardel
|
||||
22. mailto:Frank.Kardel@informatik.uni-erlangen.de
|
||||
23. mailto:dkatz@cisco.com
|
||||
24. mailto:leres@ee.lbl.gov
|
||||
25. mailto:lindholm@ucs.ubc.ca
|
||||
26. mailto:louie@ni.umd.edu
|
||||
27. mailto:thorinn@diku.dk
|
||||
28. mailto:mills@udel.edu
|
||||
29. mailto:moeller@gwdgv1.dnet.gwdg.de
|
||||
30. mailto:mogul@pa.dec.com
|
||||
31. mailto:tmoore@fievel.daytonoh.ncr.com
|
||||
32. mailto:derek@toybox.demon.co.uk
|
||||
33. mailto:d@hd.org
|
||||
34. mailto:Rainer.Pruy@informatik.uni-erlangen.de
|
||||
35. mailto:dirce@zk3.dec.com
|
||||
36. mailto:wsanchez@apple.com
|
||||
37. mailto:mrapple@quack.kfu.com
|
||||
38. mailto:jack@innovativeinternet.com
|
||||
39. mailto:schnitz@unipress.com
|
||||
40. mailto:shields@tembel.org
|
||||
41. mailto:pebbles.jpl.nasa.gov
|
||||
42. mailto:harlan@pfcs.com
|
||||
43. mailto:ken@sdd.hp.com
|
||||
44. mailto:ajit@ee.udel.edu
|
||||
45. mailto:tsuruoka@nc.fukuoka-u.ac.jp
|
||||
46. mailto:vixie@vix.com
|
||||
47. mailto:Ulrich.Windl@rz.uni-regensburg.de
|
||||
48. file://localhost/backroom/ntp4+/html/index.htm
|
||||
49. mailto:mills@udel.edu
|
||||
|
@ -1,9 +1,627 @@
|
||||
2000-01-19 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.99b
|
||||
|
||||
2000-01-18 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_chu.c: NCHAN is used with generic ICOM.
|
||||
|
||||
* ntpd/refclock_wwv.c: Use new auido stuff
|
||||
* ntpd/refclock_irig.c: Use new audio stuff
|
||||
* ntpd/refclock_chu.c: Use new audio stuff
|
||||
* ntpd/ntp_proto.c: Clean up
|
||||
* ntpd/ntp_loopfilter.c (local_clock): Clean up error message
|
||||
* include/icom.h: Number of arguments changed
|
||||
* libntp/Makefile.am (libntp_a_SOURCES): Added audio.c
|
||||
* libntp/audio.c: New file
|
||||
* include/Makefile.am (noinst_HEADERS): audio.h added
|
||||
* include/audio.h: New file
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* scripts/freq_adj: Added. FreeBSD frequency adjustment script.
|
||||
|
||||
* configure.in: Do a better job on my oncore_ok check for SCO.
|
||||
|
||||
2000-01-15 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.99a
|
||||
|
||||
* scripts/ntpsweep: New version
|
||||
* html/copyright.htm: Added Hans Lambermont
|
||||
From: Hans Lambermont <Hans.Lambermont@nl.origin-it.com>
|
||||
|
||||
2000-01-14 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_oncore.c (oncore_start): Only dance with the
|
||||
pps_device if it's there.
|
||||
From: reg@dwf.com
|
||||
|
||||
* configure.in: ONCORE is OK if ac_cv_hdr_def_tiocdcdtimestamp=yes
|
||||
|
||||
* build: Just overwrite the log file each time; sometimes NFS goes
|
||||
a little goofy.
|
||||
|
||||
* ntpd/refclock_fg.c: Syntax/punctuation cleanup
|
||||
|
||||
2000-01-13 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* scripts/ntpsweep: New version
|
||||
From: Hans Lambermont <Hans.Lambermont@nl.origin-it.com>
|
||||
|
||||
* ntpd/refclock_fg.c: New version
|
||||
* html/driver37.htm: New version
|
||||
From: Dmitry Smirnov <das@online.nsk.su>
|
||||
|
||||
2000-01-12 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* README.des: Cleanup
|
||||
|
||||
2000-01-12 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.99
|
||||
|
||||
* html/driver36.htm: Cleanup
|
||||
* html/monopt.htm: Ditto
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* ntpd/ntp_intres.c (ntp_intres): Put "NTP_INTRES running" at a
|
||||
higher debug level
|
||||
|
||||
2000-01-11 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c: More improvements
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
2000-01-10 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c: Bugfixes/improvements
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* configure.in: Get the quoting right on the sys_errlist check.
|
||||
From documentation by: Akim Demaille <akim@epita.fr>
|
||||
|
||||
2000-01-08 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: <netinet/ip.h> cannot be detected...
|
||||
* ntpd/ntp_io.h: ...but every OS has it
|
||||
* ntpd/refclock_oncore.c: Lint removal
|
||||
* ntpq/ntpq_ops.c: Lint removal
|
||||
* ntpq/refclock_chu.c: chu_major() is not an audio routine (?), lint
|
||||
* libntp/icom.c: AIX doesn't have <sys/termios.h>
|
||||
From: Marc.Brett@westgeo.com
|
||||
|
||||
* ntpd/refclock_chu.c: NetBSD needs sys/ioctl.h
|
||||
(chu_debug): NetBSED-specific debug output.
|
||||
From: Frederick Bruckman <fb@enteract.com>
|
||||
|
||||
2000-01-06 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98m
|
||||
I skipped `l' - it looks like a `1'.
|
||||
|
||||
* html/driver7.htm: Doc update
|
||||
* html/driver36.htm: Ditto
|
||||
* html/audio.htm: Ditto
|
||||
|
||||
* ntpd/refclock_wwv.c: Dvae snuck another fix/change in on me.
|
||||
|
||||
* configure.in: 4.0.98k
|
||||
|
||||
* ntpd/refclock_chu.c (chu_start): Call icom_init with the speed
|
||||
* ntpd/refclock_wwv.c (wwv_start): Ditto, plus other improvements.
|
||||
* libntp/icom.c (icom_init): Add speed parameter
|
||||
* include/icom.h: Update declaration
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* include/Makefile.am (noinst_HEADERS): Added icom.h
|
||||
From: Frederick Bruckman <fb@enteract.com>
|
||||
|
||||
2000-01-05 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98j
|
||||
|
||||
* ntpd/refclock_wwv.c (timecode): Make definition == declaration
|
||||
(wwv_newchan): Ditto
|
||||
(wwv_corr4): Dave fixed the declaration.
|
||||
|
||||
* flock-build: Add rackety to the flock - it runs SunOS 4.1.3/cc
|
||||
|
||||
* ntpd/refclock_wwv.c: Undo that declaration cleanup for now...
|
||||
|
||||
* ntpd/ntp_io.c (open_socket): TOS support
|
||||
From: Marc.Brett@westgeo.com
|
||||
|
||||
2000-01-04 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c: Declaration cleanup
|
||||
* ntpd/refclock_fg.c (fg_receive): Not all sprintf's are created
|
||||
equal...
|
||||
From: Marc.Brett@westgeo.com
|
||||
|
||||
* ntpd/refclock_wwv.c: Dave Cleaned and Improved things.
|
||||
* ntpd/ntp_loopfilter.c (local_clock): Dave fixed something.
|
||||
|
||||
* ntpd/refclock_wwv.c: Rename max to p_max or s_max as appropriate
|
||||
to avoid native SunOS compiler collision.
|
||||
(wwv_epoch): Make declaration == definition
|
||||
(wwv_rsec): Ditto
|
||||
(wwv_newchan): Ditto
|
||||
(wwv_qsy): Ditto
|
||||
(timecode): Ditto
|
||||
|
||||
* ntpd/refclock_oncore.c (oncore_init_shmem): Use a cast to widen
|
||||
mmap's NIL offset.
|
||||
|
||||
* ntpd/refclock_chu.c (chu_rf): Make declaration == definition.
|
||||
Rename min/max to es_min/es_max to avoid native SunOS compiler
|
||||
collision.
|
||||
(chu_uart): Make declaration == definition.
|
||||
|
||||
* libntp/icom.c (sndpkt): Make declaration and definition equivalent.
|
||||
(doublefreq): Ditto.
|
||||
|
||||
* ntpd/refclock_oncore.c (MAP_FAILED): Some systems do not #define
|
||||
this.
|
||||
|
||||
* ntpd/refclock_wwv.c:
|
||||
* ntpd/refclock_chu.c:
|
||||
* libntp/icom.c:
|
||||
* libntp/Makefile.am:
|
||||
* include/icom.h:
|
||||
* html/driver7.htm:
|
||||
* html/driver36.htm:
|
||||
Support for ICOM. The WWV/H driver, by the way, is getting truly
|
||||
awesome. The CHU autotune function works okay as it is. I'd like
|
||||
to find somebody else to test the audio drivers just to make sure
|
||||
I haven't done something stupid. There is a new define ICOM
|
||||
intended for the driver autotune function; however, I crafted the
|
||||
thing in much the same way as the refclock_atom.c thing - it tries
|
||||
to open /dev/icom and, if that fails, goes quietly to sleep.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
2000-01-03 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_oncore.c (oncore_read_config): Patches and cleanup
|
||||
From: Poul-Henning Kamp <phk@critter.freebsd.dk>
|
||||
more isascii() stuff from HMS.
|
||||
|
||||
* ntpd/refclock_fg.c (fg_receive): Cast.
|
||||
From: Tom Smith <smith@cag.lkg.dec.com>
|
||||
|
||||
* ntpd/map_vme.c (map_vme): tx.access_result indicates failure on
|
||||
< 0, not <= 0. A fix that apparently did not get brought over
|
||||
from the ntp3 base.
|
||||
From: Michael Barone <michael.barone@lmco.com>
|
||||
|
||||
* configure.in: Move the ONCORE_SHMEM_STATUS check and definition
|
||||
here.
|
||||
|
||||
* ntpd/refclock_oncore.c (oncore_init_shmem): Some systems do not
|
||||
have MAP_HASSEMAPHORE.
|
||||
|
||||
* ntpd/refclock_oncore.c: Drive ONCORE_SHMEM_STATUS based on
|
||||
HAVE_SYS_MMAN_H . If this needs finer checks, do it in
|
||||
configure.in .
|
||||
(oncore_read_config): Add the isascii() checks; older versions of
|
||||
Unix don't guarantee correct behavior of is*() without it.
|
||||
|
||||
* ntpd/refclock_oncore.c: Add proof-of-concept support for
|
||||
delivering receiver data stream to other processes through
|
||||
a memory-mapped file.
|
||||
From: Poul-Henning Kamp <phk@FreeBSD.org>
|
||||
|
||||
2000-01-02 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in (ac_refclock_chu): Provide the CHU driver by
|
||||
default, and by default prefer the AUDIO version. We used to
|
||||
limit this to SunOS or Solaris; now we drive by the availability
|
||||
of the audioio header file.
|
||||
Select the IRIG and WWV audio drivers the same way.
|
||||
|
||||
* flock-build: build ignores the -l flag; lose it.
|
||||
(BUILD_ARGS): added.
|
||||
* build: Remove unused -l stuff (LOG variable).
|
||||
|
||||
* ntpd/ntp_refclock.c: HAVE_PPSAPI header cleanup
|
||||
From: Reg Clemens <reg@dwf.com>
|
||||
|
||||
2000-01-01 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in (CLOCK_WWV): Require <sys/audioio.h> or <sun/audioio.h>
|
||||
|
||||
1999-12-29 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98i
|
||||
|
||||
* ntpd/refclock_gpsvme.c: Fixes
|
||||
From: Michael Barone <michael.barone@lmco.com>
|
||||
Patch severely hacked by HMS to "make it conform". I hope I
|
||||
didn't break anything.
|
||||
|
||||
* scripts/ntpsweep: Nifty utility
|
||||
From: Hans.Lambermont@nl.origin-it.com
|
||||
|
||||
* ntpd/refclock_fg.c:
|
||||
* ntpd/refclock_conf.c:
|
||||
* ntpd/ntp_control.c:
|
||||
* ntpd/Makefile.am:
|
||||
* libntp/clocktypes.c:
|
||||
* include/ntp.h:
|
||||
* html/refclock.htm:
|
||||
* html/driver37.htm:
|
||||
* configure.in:
|
||||
* acconfig.h:
|
||||
Forum Graphic GPS clock support
|
||||
From: Dmitry Smirnov <das@online.nsk.su>
|
||||
|
||||
* configure.in: Default to compile the IRIG, CHU and WWV/H
|
||||
drivers and compile the CHU driver for audio, not modem.
|
||||
Requested by Dave Mills.
|
||||
|
||||
* html/audio.htm:
|
||||
* html/driver36.htm:
|
||||
* html/qth.htm:
|
||||
Dave wrote these to go along with the changes I checked in yesterday.
|
||||
|
||||
1999-12-28 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c:
|
||||
* ntpd/refclock_conf.c:
|
||||
* ntpd/refclock_chu.c:
|
||||
* ntpd/ntp_refclock.c:
|
||||
* ntpd/ntp_loopfilter.c:
|
||||
* html/refclock.htm:
|
||||
* html/pps.htm:
|
||||
* html/index.htm:
|
||||
* html/driver7.htm:
|
||||
* html/driver6.htm:
|
||||
* html/copyright.htm:
|
||||
|
||||
I indulged an old agenda to polish up some programs originally
|
||||
written for a DSP evaluation board. The result is a really hot
|
||||
audio driver for the NIST WWV/WWVH time/frequency station plus a
|
||||
makeover for the CHU audio driver. Currently, they and their IRIG
|
||||
audio driver buddy use the SunOS/Solaris audio interface, which is
|
||||
clean and simple. I hook the line in jack to a shortwave radio and
|
||||
these drivers (driver 7 for CHU and driver 36 for WWV) and the
|
||||
drivers do the rest. The WWV/H driver is really hot - I am
|
||||
currently watching the ionosphere move from the doppler that shows
|
||||
up on the tick modulation tracked by the program. During midday
|
||||
when the F2 layer settles down, the program closes in on a few
|
||||
tens of microseconds of spare jitter and wander. This watch on
|
||||
whichever 15/20 MHz signal sounds the best. At night on 5/10 MHz
|
||||
and even 2.5 HMz where the multipath, interference and noise are
|
||||
much worse, the driver bangs around somewhat more.
|
||||
|
||||
The CHU driver makeover discovered a few broken bones after all
|
||||
these years, but its majority decoder is back in business. For
|
||||
various reasons to icky to reveal here, its 103-modem demodulator
|
||||
is not quite as good as the chip, but it comes close and hey,
|
||||
2025/2125 FSK is just not a good idea for HF radio. This driver is
|
||||
not nearly as sophisitcated as the WWV/H driver, but here a few
|
||||
hundred miles south of Ottawa, it does a passably good job.
|
||||
|
||||
I tell you this in the hopes of getting somebody interested in
|
||||
porting the audio interface to other machines, in particular
|
||||
Linux, FreeBSD and anything else with a sound card. When the
|
||||
ionosphere stays cool, the WWV/H driver is as good as anything
|
||||
else around here and with much less jitter than a serial port. The
|
||||
only downside is all the audio drivers chew up a modest fraction
|
||||
of cycles for the DSP routines - a few percent on the newer
|
||||
silicon, up to half the cycles on an old Sparc IPC. Whattheheck,
|
||||
these old machines aren't doing anything else around here except
|
||||
serving time, and even when sucking cycles for DSP they still mind
|
||||
the PPS microseconds.
|
||||
|
||||
The audio driver documentation had a makeover, too.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
1999-12-20 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98h
|
||||
|
||||
1999-12-19 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* libntp/syssignal.c: Small cleanup to Marc's patch.
|
||||
|
||||
* ntpd/ntp_refclock.c:
|
||||
* ntpd/refclock_atom.c: Header cleanup
|
||||
* html/driver30.htm: Cleanup and improvements.
|
||||
From: Reg Clemens <reg@dwf.com>
|
||||
|
||||
* ntpd/ntp_refclock.c:
|
||||
* ntpd/refclock_jupiter.c:
|
||||
* ntpd/refclock_msfees.c:
|
||||
* ntpd/refclock_mx4200.c:
|
||||
Portability (Solaris) patches
|
||||
* ntpd/refclock_mx4200.c:
|
||||
Self-survey improvements, cleanup for, PPS re-activation
|
||||
* libntp/syssignal.c:
|
||||
Fix for "interrupted system call" (EINTR) failure of the PPS
|
||||
ioctl(TIOCGPPSEV) call in Solaris. Not sure why it was
|
||||
interrupted, but this works around the failure. Not sure if
|
||||
the (now silent) interrupt affects the timing accuracy.
|
||||
THERE IS A CHANCE THIS PART OF THE PATCH MAY ADVERSELY
|
||||
AFFECT OTHER SYSTEMS!
|
||||
* scripts/ntp-status: Added.
|
||||
From: Marc.Brett@westgeo.com
|
||||
|
||||
* ntpdate/ntpdate.c: Deal with multiple addresses.
|
||||
From: Jeffrey C Honig <jch@bsdi.com>
|
||||
|
||||
* ntpd/refclock_conf.c: Replaced macro SHM with CLOCK_SHM.
|
||||
* ntpd/refclock_shm.c (shm_poll): Take clock time in UTC.
|
||||
pp->day starts at 1, t->tm_yday starts at 0.
|
||||
From: Jakob Stoklund Olesen <stoklund@taxidriver.dk>
|
||||
|
||||
1999-12-16 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* NEWS: Updated ONCORE instructions
|
||||
From: Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
1999-12-13 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98g
|
||||
|
||||
* ntpd/refclock_oncore.c: Cleanup and fixes
|
||||
From: Reg Clemens <reg@dwf.com> and Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
1999-12-11 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c: Cleanup/checkin of the current state of affairs.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* ntpd/refclock_oncore.c: #elif conversion. I can only hope I did
|
||||
it right.
|
||||
|
||||
* ntpd/refclock_oncore.c: Various patches
|
||||
From: Reg Clemens <reg@dwf.com> and Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
1999-12-09 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/ntp_proto.c (default_get_precision): Use the right arg type
|
||||
to pass "sizeof freq" to sysctlbyname().
|
||||
From: Ollivier Robert <roberto@eurocontrol.fr>
|
||||
|
||||
* ntpd/refclock_wwv.c: Cleanup and fixes.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
1999-12-08 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/refclock_wwv.c: Cleanup and fixes
|
||||
* ntpd/refclock_conf.c: WWV declaration cleanup.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
1999-12-07 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* libparse/clk_rawdcf.c (cvt_rawdcf): Buglet.
|
||||
From: Frank Kardel <kardel@acm.org>
|
||||
|
||||
1999-12-06 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/Makefile.am (ntpd_SOURCES): Added refclock_wwv.c
|
||||
|
||||
* ntpd/refclock_wwvb.c:
|
||||
* ntpd/refclock_wwv.c:
|
||||
* ntpd/refclock_conf.c:
|
||||
* ntpd/refclock_chu.c:
|
||||
* libntp/clocktypes.c:
|
||||
* include/ntp.h: Dave cleaned some things up
|
||||
Dave cleaned some things up (WWVB -> SPECTRACOM, CHU -> CHU_AUDIO,
|
||||
WWV_AUDIO)
|
||||
|
||||
* acconfig.h: REFCLOCK_WWVB -> REFCLOCK_SPECTRACOM, added REFCLOCK_WWV
|
||||
* configure.in: Deal with it.
|
||||
|
||||
1999-12-05 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/ntp_refclock.c (refclock_open): More PPS cleanup
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* ntpq/ntpq.c:
|
||||
* ntpq/ntpq_ops.c:
|
||||
Make `ntpq -pn' independent of DNS, ad advertised.
|
||||
From: Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
* ntpd/refclock_mx4200.c (mx4200_start): make missing 3rd
|
||||
parameter a 0.
|
||||
|
||||
1999-12-04 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpd/ntp_refclock.c (refclock_open): "flags" processing cleanup
|
||||
(refclock_open): PPS device initialization cleanup
|
||||
* include/ntp_refclock.h (LDISC_CHU):
|
||||
(LDISC_PPS): Clean up comments
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
1999-12-03 Sven Dietrich <sven_dietrich@trimble.com>
|
||||
|
||||
* libntp/mexit.c: Moved WINNT port specific file to ports/winnt/libntp
|
||||
* ports/winnt/libntp/libntp.dsp: Fix WinNT makefile for new source loc.
|
||||
|
||||
1999-12-03 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* libntp/Makefile.am (libntp_a_SOURCES): Lose mexit.c - Sven will
|
||||
move it to the winnt port area.
|
||||
|
||||
1999-12-03 Sven Dietrich <sven_dietrich@trimble.com>
|
||||
|
||||
* libntp/systime.c: Removed adjtime hack for WINNT
|
||||
* ports/winnt/ntpd/nt_clockstuff.c: Winnt double precision adjtime
|
||||
* ports/winnt/inlcude/clockstuff.h: Remove no longer needed externs
|
||||
|
||||
1999-12-02 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* libparse/Makefile.in: Manually hacked to remove the
|
||||
libparse_kernel.a.[co] cruft
|
||||
|
||||
* libparse/Makefile.am (k*.o): Generate these form the Makefile,
|
||||
not from separate .c files
|
||||
|
||||
* html/tickadj.htm:
|
||||
* html/notes.htm:
|
||||
* html/hints/solaris.html:
|
||||
Point to the new dosynctodr report.
|
||||
|
||||
* html/hints/solaris.xtra.S99ntpd:
|
||||
Update. Should be rewritten to take advantage of the new -g
|
||||
switch and perhaps a loop to wait until ntpd hits a reasonable
|
||||
"state".
|
||||
|
||||
* html/hints/solaris-dosynctodr.html: New information
|
||||
From: "John W. Sopko Jr." <sopko@cs.unc.edu>
|
||||
|
||||
1999-12-01 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* libntp/authkeys.c (auth_moremem): Clear memory allocated for sk.
|
||||
From: Hugo Mildenberger <hugo.mildenberger@topmail.de>
|
||||
|
||||
1999-12-01 Sven Dietrich <sven_dietrich@trimble.com>
|
||||
|
||||
* libntp/recvbuff.c: Unused functions cleanup
|
||||
* ntpd/ntpd.c: ProcessorAffinity, IO cleanup
|
||||
* ports/winnt/instsrv/instsrv.c: Service name changed to NTP
|
||||
|
||||
NT port shouldn;t hop between CPUs. Set affinity to first processor.
|
||||
Service name was NetworkTimeProtocol. Too long. Now NTP.
|
||||
|
||||
1999-12-01 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* scripts/plot_summary.pl: Improved option parsing. Fixed one
|
||||
minor Perl compatibility error.
|
||||
* scripts/summary.pl: Official revision for NTPv4: Parse new
|
||||
statistic file formats correctly, provide error checking for bad
|
||||
input files, and guard against negative arguments to sqrt()
|
||||
because of numeric effects. Use one pattern to select valid
|
||||
statistic files. Add selectable output directory
|
||||
(``--output-directory'') and improved option parsing. Directory
|
||||
with statistic files (now settable also with
|
||||
``--input-directory'') defaults to ``/var/log/ntp''.
|
||||
From: Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de>
|
||||
|
||||
* html/driver8.htm:
|
||||
* libparse/clk_computime.c:
|
||||
* libparse/clk_dcf7000.c:
|
||||
* libparse/clk_hopf6021.c:
|
||||
* libparse/clk_meinberg.c:
|
||||
* libparse/clk_rawdcf.c:
|
||||
* libparse/clk_rcc8000.c:
|
||||
* libparse/clk_schmid.c:
|
||||
* libparse/clk_trimtaip.c:
|
||||
* libparse/clk_trimtsip.c:
|
||||
* libparse/data_mbg.c:
|
||||
* libparse/kclk_computime.c:
|
||||
* libparse/kclk_dcf7000.c:
|
||||
* libparse/kclk_hopf6021.c:
|
||||
* libparse/kclk_meinberg.c:
|
||||
* libparse/kclk_rawdcf.c:
|
||||
* libparse/kclk_rcc8000.c:
|
||||
* libparse/kclk_schmid.c:
|
||||
* libparse/kclk_trimtaip.c:
|
||||
* libparse/kclk_trimtsip.c:
|
||||
* libparse/kparse.c:
|
||||
* libparse/kparse_conf.c:
|
||||
* libparse/parse.c:
|
||||
* libparse/parse_conf.c:
|
||||
* libparse/parsesolaris.c:
|
||||
* libparse/parsestreams.c:
|
||||
* ntpd/refclock_parse.c:
|
||||
Mods and updates
|
||||
From: Frank Kardel <kardel@acm.org>
|
||||
|
||||
* acconfig.h: PCF refclock
|
||||
* configure.in:
|
||||
* html/driver35.htm:
|
||||
* html/refclock.htm:
|
||||
* include/ntp.h:
|
||||
* libntp/clocktypes.c:
|
||||
* ntpd/Makefile.am:
|
||||
* ntpd/ntp_control.c:
|
||||
* ntpd/refclock_conf.c:
|
||||
* ntpd/refclock_pcf.c:
|
||||
From: Andreas Voegele <andreas.voegele@gmx.de>
|
||||
|
||||
* acconfig.h: DECL_STIME_1
|
||||
|
||||
* configure.in (iCFLAGS): Use -std1 for alpha*-dec-osf* if we are
|
||||
using "cc".
|
||||
Reported by: Tom Smith <smith@cag.lkg.dec.com>
|
||||
|
||||
1999-11-30 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* include/l_stdlib.h: DECL_SYSTIME_1 --- a long *
|
||||
* configure.in: Use it for DEC OSF[45]
|
||||
Reported by: Tom Smith <smith@cag.lkg.dec.com>
|
||||
|
||||
* ntpd/refclock_parse.c: Add missing declarations
|
||||
* ntptrace/ntptrace.c: Ditto
|
||||
* ntpd/ntp_proto.c: Ditto
|
||||
* ntpd/refclock_palisade.c: Ditto
|
||||
From: Jonathan Stone <jonathan@dsg.stanford.edu>
|
||||
|
||||
1999-11-18 Sven Dietrich <sven_dietrich@trimble.com>
|
||||
* Win NT port updates
|
||||
* ntpd.dsp: makefile only builds supported refclocks
|
||||
* config.h: cleanup, undefine unsupported clock_atom
|
||||
* win32_io, clock_NMEA: foundation for future refclock support
|
||||
* recvbuff, transmitbuff, IOcompletionport: streamline packet handler
|
||||
* html/hints/winnt.htm: Added up-to-date html docs for WINNT
|
||||
|
||||
1999-11-17 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* html/copyright.htm: Credit Jack for his work.
|
||||
|
||||
* html/pic/*: Save a *ton* of space on the pictures.
|
||||
From: Jack Sasportas <jack@innovativeinternet.com>
|
||||
|
||||
1999-11-16 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in : changequote for osf[45] test.
|
||||
Reported by: Tom Smith <smith@cag.lkg.dec.com>
|
||||
|
||||
* ntp_update: Ignore stuff in any A.* directory.
|
||||
|
||||
1999-11-15 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: Clean up header checks for sys/syssgi.h and
|
||||
sys/select.h . Originally, we did not check for sys/select.h
|
||||
under some versions of SCO (see xntp3-5). Somewhere in ntp4 we
|
||||
dropped the SCO check and added the check for sys/syssgi.h,
|
||||
exclusive of checking for sys/select.h. Marc Brett can't think of
|
||||
a reason why we should not be checking for sys/select.h, so let's
|
||||
look for it now.
|
||||
|
||||
1999-11-13 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* ntpdate/ntpdate.c: Add the ability for ntpdate to query a
|
||||
multicast address. We use the response to the multicast address
|
||||
to learn new servers which we then add to the peer list and query.
|
||||
In changing this I made the list of peers a linked list.
|
||||
|
||||
To be complete I should detect a broadcast address and make it
|
||||
behave the same way. But that requires a scan of the interface
|
||||
list which is more complicated that I want to deal with...
|
||||
|
||||
Fix a bug, allowing ntpdate to compile if SLEWALWAYS and STEP_SLEW
|
||||
are both defined.
|
||||
|
||||
From: Jeffrey C Honig <jch@bsdi.com>
|
||||
|
||||
* ntpd/ntp_refclock.c: sys/sio.h and SCO5_CLOCK cleanup
|
||||
From: Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
* ntpd/ntp_loopfilter.c: Let -g do a "correct any" for the first
|
||||
time adjustment.
|
||||
From: Dave Mills <mills@udel.edu>
|
||||
|
||||
* configure.in: sys/sio.h needs to be checked independently.
|
||||
Reported by: Kamal A Mostafa <kamal@whence.com>
|
||||
|
||||
1999-11-11 Harlan Stenn <stenn@whimsy.udel.edu>
|
||||
|
||||
* configure.in: 4.0.98f
|
||||
|
||||
* configure.in: DECL_PLOCK_0 and DECL_STIME_0 are for dec-osf5*, too
|
||||
|
||||
* ntpd/ntpd.c: DEC OSF cleanup (editorial comments by HMS)
|
||||
From: Tom Smith <smith@cag.lkg.dec.com>
|
||||
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = foreign dist-tarZ #distdir=$(PACKAGE)$(VERSION)
|
||||
#AUTOMAKE_OPTIONS = util/ansi2knr foreign dist-tarZ no-dependencies
|
||||
@ -141,7 +145,8 @@ CONFIG_CLEAN_FILES =
|
||||
DIST_SOURCES =
|
||||
DIST_COMMON = README ./stamp-h.in ChangeLog INSTALL Makefile.am \
|
||||
Makefile.in NEWS TODO acconfig.h aclocal.m4 config.guess config.h.in \
|
||||
config.sub configure configure.in install-sh missing mkinstalldirs
|
||||
config.sub configure configure.in depcomp install-sh missing \
|
||||
mkinstalldirs
|
||||
|
||||
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
@ -150,9 +155,9 @@ GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --foreign --include-deps Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -253,15 +258,17 @@ tags-recursive:
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -269,12 +276,14 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) $(LI
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)config.h.in$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags config.h.in $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -288,50 +297,69 @@ maintainer-clean-tags:
|
||||
distdir = $(PACKAGE)-$(VERSION)
|
||||
top_distdir = $(distdir)
|
||||
|
||||
|
||||
# This target untars the dist file and tries a VPATH configuration. Then
|
||||
# it guarantees that the distribution is self-contained by making another
|
||||
# tarfile.
|
||||
distcheck: dist
|
||||
-rm -rf $(distdir)
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
|
||||
chmod -R a-w $(distdir); chmod a+w $(distdir)
|
||||
mkdir $(distdir)/=build
|
||||
mkdir $(distdir)/=inst
|
||||
dc_install_base=`cd $(distdir)/=inst && pwd`; \
|
||||
cd $(distdir)/=build \
|
||||
chmod a-w $(distdir)
|
||||
dc_install_base=`CDPATH=: && cd $(distdir)/=inst && pwd` \
|
||||
&& cd $(distdir)/=build \
|
||||
&& ../configure --srcdir=.. --prefix=$$dc_install_base \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dvi \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) check \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) install \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) installcheck \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist
|
||||
-rm -rf $(distdir)
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) uninstall \
|
||||
&& test `find $$dc_install_base -type f -print | wc -l` -le 1 \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) dist \
|
||||
&& $(MAKE) $(AM_MAKEFLAGS) distclean \
|
||||
&& rm -f $(distdir).tar.gz \
|
||||
&& test `find . -type f -print | wc -l` -eq 0
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
@banner="$(distdir).tar.gz is ready for distribution"; \
|
||||
dashes=`echo "$$banner" | sed s/./=/g`; \
|
||||
echo "$$dashes"; \
|
||||
echo "$$banner"; \
|
||||
echo "$$dashes"
|
||||
dist: distdir
|
||||
-chmod -R a+r $(distdir)
|
||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||
-rm -rf $(distdir)
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
dist-tarZ: distdir
|
||||
-chmod -R a+r $(distdir)
|
||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | compress -c > $(distdir).tar.Z
|
||||
-rm -rf $(distdir)
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
$(AMTAR) chof - $(distdir) | compress -c > $(distdir).tar.Z
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
dist-all: distdir
|
||||
-chmod -R a+r $(distdir)
|
||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||
$(AMTAR) ch$(AMTARFLAGS)f - $(distdir) | compress -c > $(distdir).tar.Z
|
||||
-rm -rf $(distdir)
|
||||
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
|
||||
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
|
||||
! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} \; \
|
||||
|| chmod -R a+r $(distdir)
|
||||
$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c > $(distdir).tar.gz
|
||||
$(AMTAR) chof - $(distdir) | compress -c > $(distdir).tar.Z
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
distdir: $(DISTFILES)
|
||||
-rm -rf $(distdir)
|
||||
-chmod -R a+w $(distdir) > /dev/null 2>&1; rm -rf $(distdir)
|
||||
mkdir $(distdir)
|
||||
-chmod 777 $(distdir)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@ -343,7 +371,6 @@ distdir: $(DISTFILES)
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
chmod 777 $(distdir)/$$subdir; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(distdir) distdir=../$(distdir)/$$subdir distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
@ -388,6 +415,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean-am: mostlyclean-hdr mostlyclean-tags mostlyclean-generic
|
||||
|
||||
|
@ -1,3 +1,18 @@
|
||||
* algorithmic improvements, bugfixes
|
||||
* Solaris dosynctodr info update
|
||||
* html/pic/* is *lots* smaller
|
||||
* New drivers: Forum Graphic GPS, WWV/H
|
||||
* Rewrite of the audio drivers
|
||||
* Driver updates: CHU, DCF, GPS/VME, Oncore, PCF, Ulink, WWVB, burst
|
||||
If you use the ONCORE driver with a HARDPPS kernel module,
|
||||
you *must* have a properly specified:
|
||||
pps <filename> [assert/clear] [hardpps]
|
||||
line in the /etc/ntp.conf file.
|
||||
* PARSE cleanup
|
||||
* PPS cleanup
|
||||
* ntpd, ntpq, ntpdate cleanup and fixes
|
||||
* NT port improvements
|
||||
* AIX, BSDI, DEC OSF, FreeBSD, NetBSD, Reliant, SCO, Solaris port improvements
|
||||
(4.0.98)
|
||||
* Solaris kernel FLL bug is fixed in 106541-07
|
||||
* Bug/lint cleanup
|
||||
|
@ -8,6 +8,7 @@ If you *need* DES support:
|
||||
- first see if you can simply "want" DES support instead
|
||||
- Get RSAREF or RSAEURO (or a reasonable facsimile thereof)
|
||||
- - Unpack it in the top-level source directory of the NTP distribution
|
||||
in a directory named rsaref2
|
||||
(You should see directories like ports, rsaref2, scripts)
|
||||
|
||||
When you run configure, the Right Thing will happen.
|
||||
|
@ -25,6 +25,9 @@
|
||||
/* Audio CHU? */
|
||||
#undef AUDIO_CHU
|
||||
|
||||
/* PARSE kernel PLL PPS support */
|
||||
#undef PPS_SYNC
|
||||
|
||||
/* ACTS modem service */
|
||||
#undef CLOCK_ACTS
|
||||
|
||||
@ -46,48 +49,33 @@
|
||||
/* Datum/Bancomm bc635/VME interface */
|
||||
#undef CLOCK_BANC
|
||||
|
||||
/* ELV/DCF7000 clock */
|
||||
#undef CLOCK_DCF7000
|
||||
|
||||
/* HOPF 6021 clock */
|
||||
#undef CLOCK_HOPF6021
|
||||
|
||||
/* Meinberg clocks */
|
||||
#undef CLOCK_MEINBERG
|
||||
|
||||
/* DCF77 raw time code */
|
||||
#undef CLOCK_RAWDCF
|
||||
|
||||
/* RCC 8000 clock */
|
||||
#undef CLOCK_RCC8000
|
||||
|
||||
/* Schmid DCF77 clock */
|
||||
#undef CLOCK_SCHMID
|
||||
|
||||
/* Trimble GPS receiver/TAIP protocol */
|
||||
#undef CLOCK_TRIMTAIP
|
||||
|
||||
/* Trimble GPS receiver/TSIP protocol */
|
||||
#undef CLOCK_TRIMTSIP
|
||||
|
||||
/* WHARTON 400A Series protocol */
|
||||
#undef CLOCK_WHARTON_400A
|
||||
|
||||
/* VARITEXT protocol */
|
||||
#undef CLOCK_VARITEXT
|
||||
|
||||
/* Diems Computime Radio Clock */
|
||||
#undef CLOCK_COMPUTIME
|
||||
|
||||
/* Chronolog K-series WWVB receiver */
|
||||
#undef CLOCK_CHRONOLOG
|
||||
|
||||
/* Datum Programmable Time System */
|
||||
#undef CLOCK_DATUM
|
||||
|
||||
/* ELV/DCF7000 clock */
|
||||
#undef CLOCK_DCF7000
|
||||
|
||||
/* Dumb generic hh:mm:ss local clock */
|
||||
#undef CLOCK_DUMBCLOCK
|
||||
|
||||
/* Forum Graphic GPS datating station driver */
|
||||
#undef CLOCK_FG
|
||||
|
||||
/* TrueTime GPS receiver/VME interface */
|
||||
#undef CLOCK_GPSVME
|
||||
|
||||
/* Heath GC-1000 WWV/WWVH receiver */
|
||||
#undef CLOCK_HEATH
|
||||
|
||||
/* HOPF 6021 clock */
|
||||
#undef CLOCK_HOPF6021
|
||||
|
||||
/* HP 58503A GPS receiver */
|
||||
#undef CLOCK_HPGPS
|
||||
|
||||
@ -103,6 +91,9 @@
|
||||
/* local clock reference */
|
||||
#undef CLOCK_LOCAL
|
||||
|
||||
/* Meinberg clocks */
|
||||
#undef CLOCK_MEINBERG
|
||||
|
||||
/* EES M201 MSF receiver */
|
||||
#undef CLOCK_MSFEES
|
||||
|
||||
@ -112,14 +103,17 @@
|
||||
/* NMEA GPS receiver */
|
||||
#undef CLOCK_NMEA
|
||||
|
||||
/* Motorola UT Oncore GPS */
|
||||
#undef CLOCK_ONCORE
|
||||
|
||||
/* Palisade clock */
|
||||
#undef CLOCK_PALISADE
|
||||
|
||||
/* PARSE driver interface */
|
||||
#undef CLOCK_PARSE
|
||||
|
||||
/* PARSE kernel PLL PPS support */
|
||||
#undef PPS_SYNC
|
||||
/* Conrad parallel port radio clock */
|
||||
#undef CLOCK_PCF
|
||||
|
||||
/* PCL 720 clock support */
|
||||
#undef CLOCK_PPS720
|
||||
@ -130,11 +124,20 @@
|
||||
/* PTB modem service */
|
||||
#undef CLOCK_PTBACTS
|
||||
|
||||
/* DCF77 raw time code */
|
||||
#undef CLOCK_RAWDCF
|
||||
|
||||
/* RCC 8000 clock */
|
||||
#undef CLOCK_RCC8000
|
||||
|
||||
/* Schmid DCF77 clock */
|
||||
#undef CLOCK_SCHMID
|
||||
|
||||
/* clock thru shared memory */
|
||||
#undef CLOCK_SHM
|
||||
|
||||
/* Motorola UT Oncore GPS */
|
||||
#undef CLOCK_ONCORE
|
||||
/* Spectracom 8170/Netclock/2 WWVB receiver */
|
||||
#undef CLOCK_SPECTRACOM
|
||||
|
||||
/* KSI/Odetics TPRO/S GPS receiver/IRIG interface */
|
||||
#undef CLOCK_TPRO
|
||||
@ -142,23 +145,29 @@
|
||||
/* TRAK 8810 GPS receiver */
|
||||
#undef CLOCK_TRAK
|
||||
|
||||
/* Trimble GPS receiver/TAIP protocol */
|
||||
#undef CLOCK_TRIMTAIP
|
||||
|
||||
/* Trimble GPS receiver/TSIP protocol */
|
||||
#undef CLOCK_TRIMTSIP
|
||||
|
||||
/* Kinemetrics/TrueTime receivers */
|
||||
#undef CLOCK_TRUETIME
|
||||
|
||||
/* USNO modem service */
|
||||
#undef CLOCK_USNO
|
||||
|
||||
/* Spectracom 8170/Netclock/2 WWVB receiver */
|
||||
#undef CLOCK_WWVB
|
||||
|
||||
/* Ultralink M320 WWVB receiver */
|
||||
#undef CLOCK_ULINK
|
||||
|
||||
/* Chronolog K-series WWVB receiver */
|
||||
#undef CLOCK_CHRONOLOG
|
||||
/* USNO modem service */
|
||||
#undef CLOCK_USNO
|
||||
|
||||
/* Dumb generic hh:mm:ss local clock */
|
||||
#undef CLOCK_DUMBCLOCK
|
||||
/* WHARTON 400A Series protocol */
|
||||
#undef CLOCK_WHARTON_400A
|
||||
|
||||
/* WWV audio driver */
|
||||
#undef CLOCK_WWV
|
||||
|
||||
/* VARITEXT protocol */
|
||||
#undef CLOCK_VARITEXT
|
||||
|
||||
/* define if we need to declare int errno; */
|
||||
#undef DECL_ERRNO
|
||||
@ -319,6 +328,10 @@
|
||||
/* Might nlist() values require an extra level of indirection (AIX)? */
|
||||
#undef NLIST_EXTRA_INDIRECTION
|
||||
|
||||
/* Other needed NLIST stuff */
|
||||
#undef NLIST_STRUCT
|
||||
#undef NLIST_NAME_UNION
|
||||
|
||||
/* Should we recommend a minimum value for tickadj? */
|
||||
#undef MIN_REC_TICKADJ
|
||||
|
||||
@ -370,6 +383,9 @@
|
||||
/* Do we need to #define _SVID3 when we #include <termios.h>? */
|
||||
#undef TERMIOS_NEEDS__SVID3
|
||||
|
||||
/* Do we have support for SHMEM_STATUS? */
|
||||
#undef ONCORE_SHMEM_STATUS
|
||||
|
||||
/***/
|
||||
|
||||
/* Which way should we declare... */
|
||||
@ -437,6 +453,7 @@
|
||||
|
||||
/* stime()? */
|
||||
#undef DECL_STIME_0
|
||||
#undef DECL_STIME_1
|
||||
|
||||
/* strtol()? */
|
||||
#undef DECL_STRTOL_0
|
||||
|
242
contrib/ntp/aclocal.m4
vendored
242
contrib/ntp/aclocal.m4
vendored
@ -1,4 +1,4 @@
|
||||
dnl aclocal.m4 generated automatically by aclocal 1.4
|
||||
dnl aclocal.m4 generated automatically by aclocal 1.4a
|
||||
|
||||
dnl Copyright (C) 1994, 1995-8, 1999 Free Software Foundation, Inc.
|
||||
dnl This file is free software; the Free Software Foundation
|
||||
@ -51,7 +51,8 @@ AC_SUBST(PACKAGE)
|
||||
VERSION=[$2]
|
||||
AC_SUBST(VERSION)
|
||||
dnl test to see if srcdir already configured
|
||||
if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then
|
||||
if test "`CDPATH=: && cd $srcdir && pwd`" != "`pwd`" &&
|
||||
test -f $srcdir/config.status; then
|
||||
AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
|
||||
fi
|
||||
ifelse([$3],,
|
||||
@ -59,27 +60,24 @@ AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
|
||||
AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package]))
|
||||
AC_REQUIRE([AM_SANITY_CHECK])
|
||||
AC_REQUIRE([AC_ARG_PROGRAM])
|
||||
dnl FIXME This is truly gross.
|
||||
missing_dir=`cd $ac_aux_dir && pwd`
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake, $missing_dir)
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader, $missing_dir)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo, $missing_dir)
|
||||
dnl We check for tar when the user configures the end package.
|
||||
dnl This is sad, since we only need this for "dist". However,
|
||||
dnl there's no other good way to do it. We prefer GNU tar if
|
||||
dnl we can find it. If we can't find a tar, it doesn't really matter.
|
||||
AC_CHECK_PROGS(AMTAR, gnutar gtar tar)
|
||||
AMTARFLAGS=
|
||||
if test -n "$AMTAR"; then
|
||||
if $SHELL -c "$AMTAR --version" > /dev/null 2>&1; then
|
||||
dnl We have GNU tar.
|
||||
AMTARFLAGS=o
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(AMTARFLAGS)
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])])
|
||||
AM_MISSING_PROG(ACLOCAL, aclocal)
|
||||
AM_MISSING_PROG(AUTOCONF, autoconf)
|
||||
AM_MISSING_PROG(AUTOMAKE, automake)
|
||||
AM_MISSING_PROG(AUTOHEADER, autoheader)
|
||||
AM_MISSING_PROG(MAKEINFO, makeinfo)
|
||||
AM_MISSING_PROG(AMTAR, tar)
|
||||
AM_MISSING_INSTALL_SH
|
||||
dnl We need awk for the "check" target. The system "awk" is bad on
|
||||
dnl some platforms.
|
||||
AC_REQUIRE([AC_PROG_AWK])
|
||||
AC_REQUIRE([AC_PROG_MAKE_SET])
|
||||
AC_REQUIRE([AM_DEP_TRACK])
|
||||
AC_REQUIRE([AM_SET_DEPDIR])
|
||||
ifdef([AC_PROVIDE_AC_PROG_CC], [AM_DEPENDENCIES(CC)], [
|
||||
define([AC_PROG_CC], defn([AC_PROG_CC])[AM_DEPENDENCIES(CC)])])
|
||||
ifdef([AC_PROVIDE_AC_PROG_CXX], [AM_DEPENDENCIES(CXX)], [
|
||||
define([AC_PROG_CXX], defn([AC_PROG_CXX])[AM_DEPENDENCIES(CXX)])])
|
||||
])
|
||||
|
||||
#
|
||||
# Check to make sure that the build environment is sane.
|
||||
@ -124,22 +122,192 @@ fi
|
||||
rm -f conftest*
|
||||
AC_MSG_RESULT(yes)])
|
||||
|
||||
dnl AM_MISSING_PROG(NAME, PROGRAM, DIRECTORY)
|
||||
dnl The program must properly implement --version.
|
||||
AC_DEFUN(AM_MISSING_PROG,
|
||||
[AC_MSG_CHECKING(for working $2)
|
||||
# Run test in a subshell; some versions of sh will print an error if
|
||||
# an executable is not found, even if stderr is redirected.
|
||||
# Redirect stdin to placate older versions of autoconf. Sigh.
|
||||
if ($2 --version) < /dev/null > /dev/null 2>&1; then
|
||||
$1=$2
|
||||
AC_MSG_RESULT(found)
|
||||
else
|
||||
$1="$3/missing $2"
|
||||
AC_MSG_RESULT(missing)
|
||||
fi
|
||||
dnl AM_MISSING_PROG(NAME, PROGRAM)
|
||||
AC_DEFUN(AM_MISSING_PROG, [
|
||||
AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
$1=${$1-"${am_missing_run}$2"}
|
||||
AC_SUBST($1)])
|
||||
|
||||
dnl Like AM_MISSING_PROG, but only looks for install-sh.
|
||||
dnl AM_MISSING_INSTALL_SH()
|
||||
AC_DEFUN(AM_MISSING_INSTALL_SH, [
|
||||
AC_REQUIRE([AM_MISSING_HAS_RUN])
|
||||
if test -z "$install_sh"; then
|
||||
install_sh="$ac_aux_dir/install-sh"
|
||||
test -f "$install_sh" || install_sh="$ac_aux_dir/install.sh"
|
||||
test -f "$install_sh" || install_sh="${am_missing_run}${ac_auxdir}/install-sh"
|
||||
dnl FIXME: an evil hack: we remove the SHELL invocation from
|
||||
dnl install_sh because automake adds it back in. Sigh.
|
||||
install_sh="`echo $install_sh | sed -e 's/\${SHELL}//'`"
|
||||
fi
|
||||
AC_SUBST(install_sh)])
|
||||
|
||||
dnl AM_MISSING_HAS_RUN.
|
||||
dnl Define MISSING if not defined so far and test if it supports --run.
|
||||
dnl If it does, set am_missing_run to use it, otherwise, to nothing.
|
||||
AC_DEFUN([AM_MISSING_HAS_RUN], [
|
||||
test x"${MISSING+set}" = xset || \
|
||||
MISSING="\${SHELL} `CDPATH=: && cd $ac_aux_dir && pwd`/missing"
|
||||
dnl Use eval to expand $SHELL
|
||||
if eval "$MISSING --run :"; then
|
||||
am_missing_run="$MISSING --run "
|
||||
else
|
||||
am_missing_run=
|
||||
AC_MSG_WARN([\`missing' script is too old or missing])
|
||||
fi
|
||||
])
|
||||
|
||||
dnl See how the compiler implements dependency checking.
|
||||
dnl Usage:
|
||||
dnl AM_DEPENDENCIES(NAME)
|
||||
dnl NAME is "CC", "CXX" or "OBJC".
|
||||
|
||||
dnl We try a few techniques and use that to set a single cache variable.
|
||||
|
||||
AC_DEFUN(AM_DEPENDENCIES,[
|
||||
AC_REQUIRE([AM_SET_DEPDIR])
|
||||
AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])
|
||||
ifelse([$1],CC,[
|
||||
AC_REQUIRE([AC_PROG_CC])
|
||||
AC_REQUIRE([AC_PROG_CPP])
|
||||
depcc="$CC"
|
||||
depcpp="$CPP"],[$1],CXX,[
|
||||
AC_REQUIRE([AC_PROG_CXX])
|
||||
AC_REQUIRE([AC_PROG_CXXCPP])
|
||||
depcc="$CXX"
|
||||
depcpp="$CXXCPP"],[$1],OBJC,[
|
||||
am_cv_OBJC_dependencies_compiler_type=gcc],[
|
||||
AC_REQUIRE([AC_PROG_][$1])
|
||||
depcc="$[$1]"
|
||||
depcpp=""])
|
||||
AC_MSG_CHECKING([dependency style of $depcc])
|
||||
AC_CACHE_VAL(am_cv_[$1]_dependencies_compiler_type,[
|
||||
if test -z "$AMDEP"; then
|
||||
echo '#include "conftest.h"' > conftest.c
|
||||
echo 'int i;' > conftest.h
|
||||
|
||||
am_cv_[$1]_dependencies_compiler_type=none
|
||||
for depmode in `sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < "$am_depcomp"`; do
|
||||
case "$depmode" in
|
||||
nosideeffect)
|
||||
# after this tag, mechanisms are not by side-effect, so they'll
|
||||
# only be used when explicitly requested
|
||||
if test "x$enable_dependency_tracking" = xyes; then
|
||||
continue
|
||||
else
|
||||
break
|
||||
fi
|
||||
;;
|
||||
none) break ;;
|
||||
esac
|
||||
if depmode="$depmode" \
|
||||
source=conftest.c object=conftest.o \
|
||||
depfile=conftest.Po tmpdepfile=conftest.TPo \
|
||||
$SHELL $am_depcomp $depcc -c conftest.c 2>/dev/null &&
|
||||
grep conftest.h conftest.Po > /dev/null 2>&1; then
|
||||
am_cv_[$1]_dependencies_compiler_type="$depmode"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
rm -f conftest.*
|
||||
else
|
||||
am_cv_[$1]_dependencies_compiler_type=none
|
||||
fi
|
||||
])
|
||||
AC_MSG_RESULT($am_cv_[$1]_dependencies_compiler_type)
|
||||
[$1]DEPMODE="depmode=$am_cv_[$1]_dependencies_compiler_type"
|
||||
AC_SUBST([$1]DEPMODE)
|
||||
])
|
||||
|
||||
dnl Choose a directory name for dependency files.
|
||||
dnl This macro is AC_REQUIREd in AM_DEPENDENCIES
|
||||
|
||||
AC_DEFUN(AM_SET_DEPDIR,[
|
||||
if test -d .deps || mkdir .deps 2> /dev/null || test -d .deps; then
|
||||
DEPDIR=.deps
|
||||
else
|
||||
DEPDIR=_deps
|
||||
fi
|
||||
AC_SUBST(DEPDIR)
|
||||
])
|
||||
|
||||
AC_DEFUN(AM_DEP_TRACK,[
|
||||
AC_ARG_ENABLE(dependency-tracking,
|
||||
[ --disable-dependency-tracking Speeds up one-time builds
|
||||
--enable-dependency-tracking Do not reject slow dependency extractors])
|
||||
if test "x$enable_dependency_tracking" = xno; then
|
||||
AMDEP="#"
|
||||
else
|
||||
am_depcomp="$ac_aux_dir/depcomp"
|
||||
if test ! -f "$am_depcomp"; then
|
||||
AMDEP="#"
|
||||
else
|
||||
AMDEP=
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(AMDEP)
|
||||
if test -z "$AMDEP"; then
|
||||
AMDEPBACKSLASH='\'
|
||||
else
|
||||
AMDEPBACKSLASH=
|
||||
fi
|
||||
pushdef([subst], defn([AC_SUBST]))
|
||||
subst(AMDEPBACKSLASH)
|
||||
popdef([subst])
|
||||
])
|
||||
|
||||
dnl Generate code to set up dependency tracking.
|
||||
dnl This macro should only be invoked once -- use via AC_REQUIRE.
|
||||
dnl Usage:
|
||||
dnl AM_OUTPUT_DEPENDENCY_COMMANDS
|
||||
|
||||
dnl
|
||||
dnl This code is only required when automatic dependency tracking
|
||||
dnl is enabled. FIXME. This creates each `.P' file that we will
|
||||
dnl need in order to bootstrap the dependency handling code.
|
||||
AC_DEFUN(AM_OUTPUT_DEPENDENCY_COMMANDS,[
|
||||
AC_OUTPUT_COMMANDS([
|
||||
test x"$AMDEP" != x"" ||
|
||||
for mf in $CONFIG_FILES; do
|
||||
case "$mf" in
|
||||
Makefile) dirpart=.;;
|
||||
*/Makefile) dirpart=`echo "$mf" | sed -e 's|/[^/]*$||'`;;
|
||||
*) continue;;
|
||||
esac
|
||||
grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
|
||||
# Extract the definition of DEP_FILES from the Makefile without
|
||||
# running `make'.
|
||||
DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
|
||||
test -z "$DEPDIR" && continue
|
||||
# When using ansi2knr, U may be empty or an underscore; expand it
|
||||
U=`sed -n -e '/^U = / s///p' < "$mf"`
|
||||
test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
|
||||
# We invoke sed twice because it is the simplest approach to
|
||||
# changing $(DEPDIR) to its actual value in the expansion.
|
||||
for file in `sed -n -e '
|
||||
/^DEP_FILES = .*\\\\$/ {
|
||||
s/^DEP_FILES = //
|
||||
:loop
|
||||
s/\\\\$//
|
||||
p
|
||||
n
|
||||
/\\\\$/ b loop
|
||||
p
|
||||
}
|
||||
/^DEP_FILES = / s/^DEP_FILES = //p' < "$mf" | \
|
||||
sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
|
||||
# Make sure the directory exists.
|
||||
test -f "$dirpart/$file" && continue
|
||||
fdir=`echo "$file" | sed -e 's|/[^/]*$||'`
|
||||
$ac_aux_dir/mkinstalldirs "$dirpart/$fdir" > /dev/null 2>&1
|
||||
# echo "creating $dirpart/$file"
|
||||
echo '# dummy' > "$dirpart/$file"
|
||||
done
|
||||
done
|
||||
], [AMDEP="$AMDEP"
|
||||
ac_aux_dir="$ac_aux_dir"])])
|
||||
|
||||
|
||||
# serial 1
|
||||
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../ansi2knr #no-dependencies
|
||||
|
||||
@ -130,6 +134,8 @@ DIST_COMMON = README Makefile.am Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/adjtimed$U.Po
|
||||
SOURCES = adjtimed.c
|
||||
OBJECTS = adjtimed$U.o
|
||||
|
||||
@ -137,9 +143,9 @@ all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps adjtimed/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu adjtimed/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -172,9 +178,6 @@ uninstall-binPROGRAMS:
|
||||
rm -f $(DESTDIR)$(bindir)/$$f; \
|
||||
done
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -199,7 +202,6 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
adjtimed$U.o:
|
||||
|
||||
adjtimed: $(adjtimed_OBJECTS) $(adjtimed_DEPENDENCIES)
|
||||
@rm -f adjtimed
|
||||
@ -210,23 +212,27 @@ adjtimed_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -243,18 +249,32 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
adjtimed.o adjtimed.lo: adjtimed.c ../include/ntp_syslog.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/adjtime.h
|
||||
|
||||
@AMDEP@include $(DEPDIR)/adjtimed$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
@ -292,25 +312,28 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
|
||||
mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-compile clean-kr clean-tags \
|
||||
clean-generic mostlyclean-am
|
||||
clean-depend clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-binPROGRAMS distclean-compile distclean-kr \
|
||||
distclean-tags distclean-generic clean-am
|
||||
distclean-tags distclean-depend distclean-generic \
|
||||
clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-binPROGRAMS \
|
||||
maintainer-clean-compile maintainer-clean-kr \
|
||||
maintainer-clean-tags maintainer-clean-generic \
|
||||
distclean-am
|
||||
maintainer-clean-tags maintainer-clean-depend \
|
||||
maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -321,8 +344,9 @@ maintainer-clean-binPROGRAMS uninstall-binPROGRAMS install-binPROGRAMS \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
|
||||
maintainer-clean-kr tags mostlyclean-tags distclean-tags clean-tags \
|
||||
maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-am install-exec \
|
||||
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
|
||||
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
|
||||
check-am installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
|
@ -1,13 +1,6 @@
|
||||
#! /bin/sh
|
||||
|
||||
LOGF=make.log
|
||||
case "$1" in
|
||||
-l) LOG=1
|
||||
shift
|
||||
;;
|
||||
*) LOG=0
|
||||
;;
|
||||
esac
|
||||
|
||||
CONFIG_ARGS="$@"
|
||||
|
||||
@ -52,8 +45,6 @@ BDIR="$BDIR$CCSUF"
|
||||
cd $BDIR
|
||||
|
||||
(
|
||||
cp /dev/null $LOGF
|
||||
|
||||
[ -f config.status ] || ../configure $CONFIG_ARGS
|
||||
|
||||
case "$MAKE" in
|
||||
@ -62,5 +53,4 @@ case "$MAKE" in
|
||||
*) $MAKE && $MAKE check
|
||||
;;
|
||||
esac
|
||||
) >> $LOGF 2>&1
|
||||
|
||||
) > $LOGF 2>&1
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../ansi2knr no-dependencies
|
||||
|
||||
@ -140,6 +144,9 @@ DIST_COMMON = README Makefile.am Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/chutest$U.Po $(DEPDIR)/clktest$U.Po \
|
||||
$(DEPDIR)/propdelay$U.Po
|
||||
SOURCES = chutest.c clktest.c propdelay.c
|
||||
OBJECTS = chutest$U.o clktest$U.o propdelay$U.o
|
||||
|
||||
@ -147,9 +154,9 @@ all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps clockstuff/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu clockstuff/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -163,9 +170,6 @@ distclean-noinstPROGRAMS:
|
||||
|
||||
maintainer-clean-noinstPROGRAMS:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -190,9 +194,6 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
chutest$U.o:
|
||||
clktest$U.o:
|
||||
propdelay$U.o:
|
||||
|
||||
propdelay: $(propdelay_OBJECTS) $(propdelay_DEPENDENCIES)
|
||||
@rm -f propdelay
|
||||
@ -207,23 +208,27 @@ chutest_.o clktest_.o propdelay_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -240,25 +245,34 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
chutest.o chutest.lo: chutest.c ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp.h \
|
||||
../include/ntp_unixtime.h
|
||||
clktest.o clktest.lo: clktest.c ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp.h \
|
||||
../include/ntp_unixtime.h
|
||||
propdelay.o propdelay.lo: propdelay.c ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
|
||||
@AMDEP@include $(DEPDIR)/chutest$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clktest$U.Po
|
||||
@AMDEP@include $(DEPDIR)/propdelay$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
@ -295,25 +309,28 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-noinstPROGRAMS mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
|
||||
mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-noinstPROGRAMS clean-compile clean-kr clean-tags \
|
||||
clean-generic mostlyclean-am
|
||||
clean-depend clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-noinstPROGRAMS distclean-compile distclean-kr \
|
||||
distclean-tags distclean-generic clean-am
|
||||
distclean-tags distclean-depend distclean-generic \
|
||||
clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-noinstPROGRAMS \
|
||||
maintainer-clean-compile maintainer-clean-kr \
|
||||
maintainer-clean-tags maintainer-clean-generic \
|
||||
distclean-am
|
||||
maintainer-clean-tags maintainer-clean-depend \
|
||||
maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -324,8 +341,9 @@ clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
|
||||
maintainer-clean-kr tags mostlyclean-tags distclean-tags clean-tags \
|
||||
maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-am install-exec \
|
||||
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
|
||||
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
|
||||
check-am installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
|
18
contrib/ntp/config.guess
vendored
18
contrib/ntp/config.guess
vendored
@ -550,7 +550,7 @@ EOF
|
||||
echo t90-cray-unicos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY*T3E:*:*:*)
|
||||
echo t3e-cray-unicosmk${UNAME_RELEASE}
|
||||
echo alpha-cray-unicosmk${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
CRAY-2:*:*:*)
|
||||
echo cray2-cray-unicos
|
||||
@ -636,14 +636,15 @@ EOF
|
||||
s/ .*//
|
||||
p'`
|
||||
case "$ld_supported_emulations" in
|
||||
*ia64) echo "${UNAME_MACHINE}-unknown-linux" ; exit 0 ;;
|
||||
i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
|
||||
i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
|
||||
sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
|
||||
elf32ppc)
|
||||
elf32ppc | elf32ppclinux)
|
||||
# Determine Lib Version
|
||||
cat >dummy.c <<EOF
|
||||
cat >$dummy.c <<EOF
|
||||
#include <features.h>
|
||||
#if defined(__GLIBC__)
|
||||
extern char __libc_version[];
|
||||
@ -662,14 +663,14 @@ main(argc, argv)
|
||||
}
|
||||
EOF
|
||||
LIBC=""
|
||||
${CC-cc} dummy.c -o dummy 2>/dev/null
|
||||
$CC_FOR_BUILD $dummy.c -o $dummy 2>/dev/null
|
||||
if test "$?" = 0 ; then
|
||||
./dummy | grep 1\.99 > /dev/null
|
||||
./$dummy | grep 1\.99 > /dev/null
|
||||
if test "$?" = 0 ; then
|
||||
LIBC="libc1"
|
||||
fi
|
||||
fi
|
||||
rm -f dummy.c dummy
|
||||
rm -f $dummy.c $dummy
|
||||
echo powerpc-unknown-linux-gnu${LIBC} ; exit 0 ;;
|
||||
esac
|
||||
|
||||
@ -915,7 +916,7 @@ EOF
|
||||
news*:NEWS-OS:*:6*)
|
||||
echo mips-sony-newsos6
|
||||
exit 0 ;;
|
||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
|
||||
R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
|
||||
if [ -d /usr/nec ]; then
|
||||
echo mips-nec-sysv${UNAME_RELEASE}
|
||||
else
|
||||
@ -943,9 +944,6 @@ EOF
|
||||
*:Rhapsody:*:*)
|
||||
echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
*:"Mac OS":*:*)
|
||||
echo `uname -p`-apple-macos${UNAME_RELEASE}
|
||||
exit 0 ;;
|
||||
esac
|
||||
|
||||
#echo '(No uname command or uname output not recognized.)' 1>&2
|
||||
|
@ -83,6 +83,9 @@
|
||||
/* Audio CHU? */
|
||||
#undef AUDIO_CHU
|
||||
|
||||
/* PARSE kernel PLL PPS support */
|
||||
#undef PPS_SYNC
|
||||
|
||||
/* ACTS modem service */
|
||||
#undef CLOCK_ACTS
|
||||
|
||||
@ -104,48 +107,33 @@
|
||||
/* Datum/Bancomm bc635/VME interface */
|
||||
#undef CLOCK_BANC
|
||||
|
||||
/* ELV/DCF7000 clock */
|
||||
#undef CLOCK_DCF7000
|
||||
|
||||
/* HOPF 6021 clock */
|
||||
#undef CLOCK_HOPF6021
|
||||
|
||||
/* Meinberg clocks */
|
||||
#undef CLOCK_MEINBERG
|
||||
|
||||
/* DCF77 raw time code */
|
||||
#undef CLOCK_RAWDCF
|
||||
|
||||
/* RCC 8000 clock */
|
||||
#undef CLOCK_RCC8000
|
||||
|
||||
/* Schmid DCF77 clock */
|
||||
#undef CLOCK_SCHMID
|
||||
|
||||
/* Trimble GPS receiver/TAIP protocol */
|
||||
#undef CLOCK_TRIMTAIP
|
||||
|
||||
/* Trimble GPS receiver/TSIP protocol */
|
||||
#undef CLOCK_TRIMTSIP
|
||||
|
||||
/* WHARTON 400A Series protocol */
|
||||
#undef CLOCK_WHARTON_400A
|
||||
|
||||
/* VARITEXT protocol */
|
||||
#undef CLOCK_VARITEXT
|
||||
|
||||
/* Diems Computime Radio Clock */
|
||||
#undef CLOCK_COMPUTIME
|
||||
|
||||
/* Chronolog K-series WWVB receiver */
|
||||
#undef CLOCK_CHRONOLOG
|
||||
|
||||
/* Datum Programmable Time System */
|
||||
#undef CLOCK_DATUM
|
||||
|
||||
/* ELV/DCF7000 clock */
|
||||
#undef CLOCK_DCF7000
|
||||
|
||||
/* Dumb generic hh:mm:ss local clock */
|
||||
#undef CLOCK_DUMBCLOCK
|
||||
|
||||
/* Forum Graphic GPS datating station driver */
|
||||
#undef CLOCK_FG
|
||||
|
||||
/* TrueTime GPS receiver/VME interface */
|
||||
#undef CLOCK_GPSVME
|
||||
|
||||
/* Heath GC-1000 WWV/WWVH receiver */
|
||||
#undef CLOCK_HEATH
|
||||
|
||||
/* HOPF 6021 clock */
|
||||
#undef CLOCK_HOPF6021
|
||||
|
||||
/* HP 58503A GPS receiver */
|
||||
#undef CLOCK_HPGPS
|
||||
|
||||
@ -161,6 +149,9 @@
|
||||
/* local clock reference */
|
||||
#undef CLOCK_LOCAL
|
||||
|
||||
/* Meinberg clocks */
|
||||
#undef CLOCK_MEINBERG
|
||||
|
||||
/* EES M201 MSF receiver */
|
||||
#undef CLOCK_MSFEES
|
||||
|
||||
@ -170,14 +161,17 @@
|
||||
/* NMEA GPS receiver */
|
||||
#undef CLOCK_NMEA
|
||||
|
||||
/* Motorola UT Oncore GPS */
|
||||
#undef CLOCK_ONCORE
|
||||
|
||||
/* Palisade clock */
|
||||
#undef CLOCK_PALISADE
|
||||
|
||||
/* PARSE driver interface */
|
||||
#undef CLOCK_PARSE
|
||||
|
||||
/* PARSE kernel PLL PPS support */
|
||||
#undef PPS_SYNC
|
||||
/* Conrad parallel port radio clock */
|
||||
#undef CLOCK_PCF
|
||||
|
||||
/* PCL 720 clock support */
|
||||
#undef CLOCK_PPS720
|
||||
@ -188,11 +182,20 @@
|
||||
/* PTB modem service */
|
||||
#undef CLOCK_PTBACTS
|
||||
|
||||
/* DCF77 raw time code */
|
||||
#undef CLOCK_RAWDCF
|
||||
|
||||
/* RCC 8000 clock */
|
||||
#undef CLOCK_RCC8000
|
||||
|
||||
/* Schmid DCF77 clock */
|
||||
#undef CLOCK_SCHMID
|
||||
|
||||
/* clock thru shared memory */
|
||||
#undef CLOCK_SHM
|
||||
|
||||
/* Motorola UT Oncore GPS */
|
||||
#undef CLOCK_ONCORE
|
||||
/* Spectracom 8170/Netclock/2 WWVB receiver */
|
||||
#undef CLOCK_SPECTRACOM
|
||||
|
||||
/* KSI/Odetics TPRO/S GPS receiver/IRIG interface */
|
||||
#undef CLOCK_TPRO
|
||||
@ -200,23 +203,29 @@
|
||||
/* TRAK 8810 GPS receiver */
|
||||
#undef CLOCK_TRAK
|
||||
|
||||
/* Trimble GPS receiver/TAIP protocol */
|
||||
#undef CLOCK_TRIMTAIP
|
||||
|
||||
/* Trimble GPS receiver/TSIP protocol */
|
||||
#undef CLOCK_TRIMTSIP
|
||||
|
||||
/* Kinemetrics/TrueTime receivers */
|
||||
#undef CLOCK_TRUETIME
|
||||
|
||||
/* USNO modem service */
|
||||
#undef CLOCK_USNO
|
||||
|
||||
/* Spectracom 8170/Netclock/2 WWVB receiver */
|
||||
#undef CLOCK_WWVB
|
||||
|
||||
/* Ultralink M320 WWVB receiver */
|
||||
#undef CLOCK_ULINK
|
||||
|
||||
/* Chronolog K-series WWVB receiver */
|
||||
#undef CLOCK_CHRONOLOG
|
||||
/* USNO modem service */
|
||||
#undef CLOCK_USNO
|
||||
|
||||
/* Dumb generic hh:mm:ss local clock */
|
||||
#undef CLOCK_DUMBCLOCK
|
||||
/* WHARTON 400A Series protocol */
|
||||
#undef CLOCK_WHARTON_400A
|
||||
|
||||
/* WWV audio driver */
|
||||
#undef CLOCK_WWV
|
||||
|
||||
/* VARITEXT protocol */
|
||||
#undef CLOCK_VARITEXT
|
||||
|
||||
/* define if we need to declare int errno; */
|
||||
#undef DECL_ERRNO
|
||||
@ -371,6 +380,10 @@
|
||||
/* Might nlist() values require an extra level of indirection (AIX)? */
|
||||
#undef NLIST_EXTRA_INDIRECTION
|
||||
|
||||
/* Other needed NLIST stuff */
|
||||
#undef NLIST_STRUCT
|
||||
#undef NLIST_NAME_UNION
|
||||
|
||||
/* Should we recommend a minimum value for tickadj? */
|
||||
#undef MIN_REC_TICKADJ
|
||||
|
||||
@ -422,6 +435,9 @@
|
||||
/* Do we need to #define _SVID3 when we #include <termios.h>? */
|
||||
#undef TERMIOS_NEEDS__SVID3
|
||||
|
||||
/* Do we have support for SHMEM_STATUS? */
|
||||
#undef ONCORE_SHMEM_STATUS
|
||||
|
||||
/* adjtime()? */
|
||||
#undef DECL_ADJTIME_0
|
||||
|
||||
@ -482,6 +498,7 @@
|
||||
|
||||
/* stime()? */
|
||||
#undef DECL_STIME_0
|
||||
#undef DECL_STIME_1
|
||||
|
||||
/* strtol()? */
|
||||
#undef DECL_STRTOL_0
|
||||
@ -702,8 +719,8 @@
|
||||
/* Define if you have the <netinet/in.h> header file. */
|
||||
#undef HAVE_NETINET_IN_H
|
||||
|
||||
/* Define if you have the <netinet/ip.h> header file. */
|
||||
#undef HAVE_NETINET_IP_H
|
||||
/* Define if you have the <netinet/in_systm.h> header file. */
|
||||
#undef HAVE_NETINET_IN_SYSTM_H
|
||||
|
||||
/* Define if you have the <netinfo/ni.h> header file. */
|
||||
#undef HAVE_NETINFO_NI_H
|
||||
|
11
contrib/ntp/config.sub
vendored
11
contrib/ntp/config.sub
vendored
@ -162,7 +162,7 @@ esac
|
||||
case $basic_machine in
|
||||
# Recognize the basic CPU types without company name.
|
||||
# Some are omitted here because they have special meanings below.
|
||||
tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
tahoe | i860 | ia64 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
|
||||
| arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
|
||||
| 580 | i960 | h8300 \
|
||||
| hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w | hppa2.0n \
|
||||
@ -171,7 +171,7 @@ case $basic_machine in
|
||||
| 1750a | dsp16xx | pdp11 | mips16 | mips64 | mipsel | mips64el \
|
||||
| mips64orion | mips64orionel | mipstx39 | mipstx39el \
|
||||
| mips64vr4300 | mips64vr4300el | mips64vr4100 | mips64vr4100el \
|
||||
| mips64vr5000 | miprs64vr5000el \
|
||||
| mips64vr5000 | miprs64vr5000el | mcore \
|
||||
| sparc | sparclet | sparclite | sparc64 | sparcv9 | v850 | c4x \
|
||||
| thumb | d10v)
|
||||
basic_machine=$basic_machine-unknown
|
||||
@ -191,7 +191,8 @@ case $basic_machine in
|
||||
exit 1
|
||||
;;
|
||||
# Recognize the basic CPU types with company name.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
|
||||
# FIXME: clean up the formatting here.
|
||||
vax-* | tahoe-* | i[34567]86-* | i860-* | ia64-* | m32r-* | m68k-* | m68000-* \
|
||||
| m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
|
||||
| mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
|
||||
| power-* | none-* | 580-* | cray2-* | h8300-* | h8500-* | i960-* \
|
||||
@ -204,7 +205,7 @@ case $basic_machine in
|
||||
| sparc64-* | sparcv9-* | sparc86x-* | mips16-* | mips64-* | mipsel-* \
|
||||
| mips64el-* | mips64orion-* | mips64orionel-* \
|
||||
| mips64vr4100-* | mips64vr4100el-* | mips64vr4300-* | mips64vr4300el-* \
|
||||
| mipstx39-* | mipstx39el-* \
|
||||
| mipstx39-* | mipstx39el-* | mcore-* \
|
||||
| f301-* | armv*-* | t3e-* \
|
||||
| m88110-* | m680[01234]0-* | m683?2-* | m68360-* | z8k-* | d10v-* \
|
||||
| thumb-* | v850-* | d30v-* | tic30-* | c30-* )
|
||||
@ -907,7 +908,7 @@ case $os in
|
||||
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
|
||||
| -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
|
||||
| -mingw32* | -linux-gnu* | -uxpv* | -beos* | -mpeix* | -udk* \
|
||||
| -interix* | -uwin* | -rhapsody* | -macos* | -openstep* | -oskit*)
|
||||
| -interix* | -uwin* | -rhapsody* | -openstep* | -oskit*)
|
||||
# Remember, each alternative MUST END IN *, to match a version number.
|
||||
;;
|
||||
-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
|
||||
|
2306
contrib/ntp/configure
vendored
2306
contrib/ntp/configure
vendored
File diff suppressed because it is too large
Load Diff
@ -5,7 +5,7 @@ AC_CANONICAL_SYSTEM
|
||||
AC_DEFINE_UNQUOTED(STR_SYSTEM, "$target")
|
||||
AM_CONFIG_HEADER(config.h)
|
||||
AC_ARG_PROGRAM
|
||||
AM_INIT_AUTOMAKE(ntp, 4.0.98f)
|
||||
AM_INIT_AUTOMAKE(ntp, 4.0.99b)
|
||||
AC_PREREQ(2.13)
|
||||
|
||||
ac_cv_var_oncore_ok=no
|
||||
@ -27,6 +27,14 @@ case "$target" in
|
||||
CFLAGS="$CFLAGS -Wc,+Abi-socket"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
alpha*-dec-osf*)
|
||||
case "$CC" in
|
||||
cc)
|
||||
CFLAGS="$CFLAGS -std1"
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$host" in
|
||||
@ -181,7 +189,7 @@ AC_HEADER_STDC
|
||||
AC_CHECK_HEADERS(bstring.h errno.h fcntl.h memory.h netdb.h poll.h resolv.h)
|
||||
AC_CHECK_HEADERS(sched.h sgtty.h stdlib.h string.h termio.h termios.h)
|
||||
AC_CHECK_HEADERS(timepps.h timex.h unistd.h utmp.h utmpx.h)
|
||||
AC_CHECK_HEADERS(arpa/nameser.h net/if.h netinet/in.h netinet/ip.h)
|
||||
AC_CHECK_HEADERS(arpa/nameser.h net/if.h netinet/in_systm.h netinet/in.h)
|
||||
AC_CHECK_HEADERS(netinfo/ni.h, [AC_DEFINE(HAVE_NETINFO)])
|
||||
AC_CHECK_HEADERS(sun/audioio.h sys/audioio.h)
|
||||
dnl AC_CHECK_HEADERS(sys/chudefs.h)
|
||||
@ -197,15 +205,10 @@ case "$target" in
|
||||
*-*-sco*)
|
||||
AC_CHECK_HEADERS(sys/sio.h)
|
||||
;;
|
||||
*sgi*)
|
||||
AC_CHECK_HEADERS(sys/syssgi.h)
|
||||
;;
|
||||
*)
|
||||
AC_CHECK_HEADERS(sys/select.h)
|
||||
;;
|
||||
esac
|
||||
AC_CHECK_HEADERS(sys/sockio.h sys/stat.h sys/stream.h sys/stropts.h)
|
||||
AC_CHECK_HEADERS(sys/sysctl.h sys/termios.h sys/time.h)
|
||||
AC_CHECK_HEADERS(sys/select.h sys/sockio.h sys/stat.h sys/stream.h)
|
||||
AC_CHECK_HEADERS(sys/stropts.h sys/sysctl.h sys/syssgi.h sys/termios.h)
|
||||
AC_CHECK_HEADERS(sys/time.h)
|
||||
AC_EGREP_CPP(yes,
|
||||
[#include <sys/timepps.h>
|
||||
#ifdef PPS_API_VERS_1
|
||||
@ -726,7 +729,7 @@ esac
|
||||
|
||||
dnl See if char *sys_errlist[] is OK.
|
||||
dnl If you get the quoting right on the next line, you tried something I didn't.
|
||||
AC_CACHE_CHECK(if declaring 'char *sys_errlist[]' is ok, ac_cv_decl_sys_errlist,
|
||||
AC_CACHE_CHECK([[if declaring 'char *sys_errlist[]' is ok]], ac_cv_decl_sys_errlist,
|
||||
[AC_TRY_COMPILE([#include <stdio.h>
|
||||
#ifdef HAVE_ERRNO_H
|
||||
#include <errno.h>
|
||||
@ -760,9 +763,11 @@ case "$ac_cv_decl_syscall" in
|
||||
esac
|
||||
|
||||
case "$target" in
|
||||
changequote(<<, >>)dnl
|
||||
*-*-osf[45]*)
|
||||
changequote([, ])dnl
|
||||
AC_DEFINE(DECL_PLOCK_0)
|
||||
AC_DEFINE(DECL_STIME_0)
|
||||
AC_DEFINE(DECL_STIME_1)
|
||||
;;
|
||||
*-*-riscos4*)
|
||||
AC_DEFINE(DECL_ADJTIME_0)
|
||||
@ -1171,6 +1176,12 @@ case "$ac_cv_header_sys_sio_h" in
|
||||
;;
|
||||
esac
|
||||
|
||||
case "$ac_cv_hdr_def_tiocdcdtimestamp" in
|
||||
yes)
|
||||
ac_cv_var_oncore_ok=yes
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CACHE_CHECK(if nlist() values might require extra indirection,
|
||||
ac_cv_var_nlist_extra_indirection,
|
||||
[ans=no
|
||||
@ -1359,7 +1370,6 @@ if test "$ac_cv_header_termios_h" = "yes"; then
|
||||
else
|
||||
ntp_ok=no
|
||||
fi
|
||||
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
AC_DEFINE(HAVE_TIOCGPPSEV)
|
||||
ac_cv_var_oncore_ok=yes
|
||||
@ -1396,7 +1406,6 @@ if test "$ac_cv_header_sys_ppsclock_h" = "yes"; then
|
||||
else
|
||||
ntp_ok=no
|
||||
fi
|
||||
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ac_cv_var_oncore_ok=yes
|
||||
AC_DEFINE(HAVE_CIOGETEV)
|
||||
@ -1444,12 +1453,22 @@ typedef int u_int;
|
||||
ntp_ok=no
|
||||
;;
|
||||
esac
|
||||
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
AC_DEFINE(HAVE_TIO_SERIAL_STUFF)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
# Check for SHMEM_STATUS support
|
||||
AC_MSG_CHECKING(SHMEM_STATUS support)
|
||||
case "$ac_cv_header_sys_mman_h" in
|
||||
yes) ntp_ok=yes ;;
|
||||
*) ntp_ok=no ;;
|
||||
esac
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
AC_DEFINE(ONCORE_SHMEM_STATUS)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
dnl dnl These are for OPT_PROGRAMS in authstuff/
|
||||
dnl AC_SUBST(AUTHCERT)
|
||||
dnl AC_SUBST(AUTHSPEED)
|
||||
@ -1529,6 +1548,13 @@ case "$ac_cv_header_termio_h$ac_cv_header_termios_h" in
|
||||
esac
|
||||
AC_MSG_RESULT($ntp_canparse)
|
||||
|
||||
AC_MSG_CHECKING([if we have support for audio clocks])
|
||||
case "$ac_cv_header_sun_audioio_h$ac_cv_header_sys_audioio_h" in
|
||||
*yes*) ntp_canaudio=yes ;;
|
||||
*) ntp_canaudio=no ;;
|
||||
esac
|
||||
AC_MSG_RESULT($ntp_canaudio)
|
||||
|
||||
# Requires modem control
|
||||
AC_MSG_CHECKING(ACTS modem service)
|
||||
AC_ARG_ENABLE(ACTS, [ --enable-ACTS + ACTS modem service],
|
||||
@ -1585,7 +1611,7 @@ fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(CHU modem/decoder)
|
||||
AC_ARG_ENABLE(CHU, [ --enable-CHU + CHU modem/decoder],
|
||||
AC_ARG_ENABLE(CHU, [ --enable-CHU - CHU modem/decoder],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
@ -1595,16 +1621,19 @@ AC_MSG_RESULT($ntp_ok)
|
||||
ac_refclock_chu=$ntp_ok
|
||||
|
||||
AC_MSG_CHECKING(CHU audio/decoder)
|
||||
AC_ARG_ENABLE(AUDIO-CHU, [ --enable-AUDIO-CHU s - CHU audio/decoder],
|
||||
[ntp_ok=$enableval], [ntp_ok=no])
|
||||
AC_ARG_ENABLE(AUDIO-CHU, [ --enable-AUDIO-CHU s CHU audio/decoder],
|
||||
[ntp_ok=$enableval],
|
||||
[case "$ntp_eac$ac_refclock_chu$ntp_canaudio" in
|
||||
*no*) ntp_ok=no ;;
|
||||
*) ntp_ok=yes ;;
|
||||
esac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
AC_DEFINE(AUDIO_CHU)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
case "$ntp_ok$ac_refclock_chu$target" in
|
||||
yesyes*-*-sunos*) ;;
|
||||
yesyes*-*-solaris*) ;;
|
||||
yes*) AC_WARN(*** But the expected answer is...no ***) ;;
|
||||
# We used to check for sunos/solaris target...
|
||||
case "$ntp_ok$ac_refclock_chu$ntp_canaudio" in
|
||||
yes*no*) AC_WARN(*** But the expected answer is...no ***) ;;
|
||||
esac
|
||||
|
||||
# Not under HP-UX
|
||||
@ -1624,6 +1653,15 @@ if test "$ntp_ok" = "yes"; then
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(Forum Graphic GPS)
|
||||
AC_ARG_ENABLE(FG, [ --enable-FG + Forum Graphic GPS],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_FG)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
# Requires modem control
|
||||
AC_MSG_CHECKING(Heath GC-1000 WWV/WWVH receiver)
|
||||
AC_ARG_ENABLE(HEATH, [ --enable-HEATH s Heath GC-1000 WWV/WWVH receiver],
|
||||
@ -1655,20 +1693,17 @@ AC_MSG_RESULT($ntp_ok)
|
||||
AC_MSG_CHECKING(Sun IRIG audio decoder)
|
||||
AC_ARG_ENABLE(IRIG, [ --enable-IRIG s Sun IRIG audio decoder],
|
||||
[ntp_ok=$enableval],
|
||||
[case "$ac_cv_header_sun_audioio_h$ac_cv_header_sys_audioio_h" in
|
||||
*yes*)
|
||||
ntp_ok=$ntp_eac
|
||||
;;
|
||||
*) ntp_ok=no
|
||||
;;
|
||||
[case "$ntp_eac$ntp_canaudio" in
|
||||
*no*) ntp_ok=no ;;
|
||||
*) ntp_ok=yes ;;
|
||||
esac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_IRIG)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
case "$ntp_ok$ac_cv_header_sun_audioio_h$ac_cv_header_sys_audioio_h" in
|
||||
yesnono) AC_WARN(*** But the expected answer is... no ***) ;;
|
||||
case "$ntp_ok$ntp_canaudio" in
|
||||
yesno) AC_WARN(*** But the expected answer is... no ***) ;;
|
||||
esac
|
||||
|
||||
AC_MSG_CHECKING(Leitch CSD 5300 Master Clock System Driver)
|
||||
@ -1848,6 +1883,24 @@ if test "$ntp_ok" = "yes"; then
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(Conrad parallel port radio clock)
|
||||
AC_ARG_ENABLE(PCF, [ --enable-PCF + Conrad parallel port radio clock],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_PCF)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(Spectracom 8170/Netclock/2 WWVB receiver)
|
||||
AC_ARG_ENABLE(SPECTRACOM, [ --enable-SPECTRACOM + Spectracom 8170/Netclock/2 WWVB receiver],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_SPECTRACOM)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
# Not on a vax-dec-bsd
|
||||
AC_MSG_CHECKING(Kinemetrics/TrueTime receivers)
|
||||
AC_ARG_ENABLE(TRUETIME, [ --enable-TRUETIME s Kinemetrics/TrueTime receivers],
|
||||
@ -1869,17 +1922,8 @@ case "$ntp_ok$target" in
|
||||
yesvax-dec-bsd) AC_WARN(*** But the expected answer is... no ***) ;;
|
||||
esac
|
||||
|
||||
AC_MSG_CHECKING(Spectracom 8170/Netclock/2 WWVB receiver)
|
||||
AC_ARG_ENABLE(WWVB, [ --enable-WWVB + Spectracom 8170/Netclock/2 WWVB receiver],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_WWVB)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(Ultralink M320 WWVB receiver)
|
||||
AC_ARG_ENABLE(ULINK, [ --enable-ULINK + Ultralink WWVB receiver],
|
||||
AC_ARG_ENABLE(ULINK, [ --enable-ULINK + Ultralink WWVB receiver],
|
||||
[ntp_ok=$enableval], [ntp_ok=$ntp_eac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
@ -1887,6 +1931,22 @@ if test "$ntp_ok" = "yes"; then
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
|
||||
AC_MSG_CHECKING(WWV receiver)
|
||||
AC_ARG_ENABLE(WWV, [ --enable-WWV + WWV Audio receiver],
|
||||
[ntp_ok=$enableval],
|
||||
[case "$ntp_eac$ntp_canaudio" in
|
||||
*no*) ntp_ok=no ;;
|
||||
*) ntp_ok=yes ;;
|
||||
esac])
|
||||
if test "$ntp_ok" = "yes"; then
|
||||
ntp_refclock=yes
|
||||
AC_DEFINE(CLOCK_WWV)
|
||||
fi
|
||||
AC_MSG_RESULT($ntp_ok)
|
||||
case "$ntp_ok$ntp_canaudio" in
|
||||
yesno) AC_WARN(*** But the expected answer is... no ***) ;;
|
||||
esac
|
||||
|
||||
# Requires modem control
|
||||
AC_MSG_CHECKING(USNO modem service)
|
||||
AC_ARG_ENABLE(USNO, [ --enable-USNO s USNO modem service],
|
||||
|
269
contrib/ntp/depcomp
Executable file
269
contrib/ntp/depcomp
Executable file
@ -0,0 +1,269 @@
|
||||
#! /bin/sh
|
||||
|
||||
# depcomp - compile a program generating dependencies as side-effects
|
||||
# Copyright (C) 1999 Free Software Foundation, Inc.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# 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. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
# 02111-1307, USA.
|
||||
|
||||
# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
|
||||
|
||||
if test -z "$depmode" || test -z "$source" || test -z "$object"; then
|
||||
echo "depcomp: Variables source, object and depmode must be set" 1>&2
|
||||
exit 1
|
||||
fi
|
||||
# `libtool' can also be set to `yes' or `no'.
|
||||
|
||||
depfile=${depfile-`echo "$object" | sed 's,\([^/]*\)$,.deps/\1,;s/\.\([^.]*\)$/.P\1/'`}
|
||||
tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
|
||||
|
||||
rm -f "$tmpdepfile"
|
||||
|
||||
# Some modes work just like other modes, but use different flags. We
|
||||
# parameterize here, but still list the modes in the big case below,
|
||||
# to make depend.m4 easier to write. Note that we *cannot* use a case
|
||||
# here, because this file can only contain one case statement.
|
||||
if test "$depmode" = hp; then
|
||||
# HP compiler uses -M and no extra arg.
|
||||
gccflag=-M
|
||||
depmode=gcc
|
||||
fi
|
||||
|
||||
if test "$depmode" = dashXmstdout; then
|
||||
# This is just like dashmstdout with a different argument.
|
||||
dashmflag=-xM
|
||||
depmode=dashmstdout
|
||||
fi
|
||||
|
||||
case "$depmode" in
|
||||
gcc)
|
||||
## There are various ways to get dependency output from gcc. Here's
|
||||
## why we pick this rather obscure method:
|
||||
## - Don't want to use -MD because we'd like the dependencies to end
|
||||
## up in a subdir. Having to rename by hand is ugly.
|
||||
## (We might end up doing this anyway to support other compilers.)
|
||||
## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
|
||||
## -MM, not -M (despite what the docs say).
|
||||
## - Using -M directly means running the compiler twice (even worse
|
||||
## than renaming).
|
||||
if test -z "$gccflag"; then
|
||||
gccflag=-MD,
|
||||
fi
|
||||
if "$@" -Wp,"$gccflag$tmpdepfile"; then :
|
||||
else
|
||||
stat=$?
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed 's/^[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
## This next piece of magic avoids the `deleted header file' problem.
|
||||
## The problem is that when a header file which appears in a .P file
|
||||
## is deleted, the dependency causes make to die (because there is
|
||||
## typically no way to rebuild the header). We avoid this by adding
|
||||
## dummy dependencies for each header file. Too bad gcc doesn't do
|
||||
## this for us directly.
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" |
|
||||
## Some versions of gcc put a space before the `:'. On the theory
|
||||
## that the space means something, we add a space to the output as
|
||||
## well.
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
hp)
|
||||
# This case exists only to let depend.m4 do its work. It works by
|
||||
# looking at the text of this script. This case will never be run,
|
||||
# since it is checked for above.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
dashmd)
|
||||
# The Java front end to gcc doesn't run cpp, so we can't use the -Wp
|
||||
# trick. Instead we must use -M and then rename the resulting .d
|
||||
# file. This is also the case for older versions of gcc, which
|
||||
# don't implement -Wp.
|
||||
if "$@" -MD; then :
|
||||
else
|
||||
stat=$?
|
||||
rm -f FIXME
|
||||
exit $stat
|
||||
fi
|
||||
FIXME: rewrite the file
|
||||
;;
|
||||
|
||||
sgi)
|
||||
if test "$libtool" = yes; then
|
||||
"$@" "-Wc,-MDupdate,$tmpdepfile"
|
||||
else
|
||||
"$@" -MDupdate "$tmpdepfile"
|
||||
fi
|
||||
stat=$?
|
||||
if test $stat -eq 0; then :
|
||||
else
|
||||
stat=$?
|
||||
rm -f "$tmpdepfile"
|
||||
exit $stat
|
||||
fi
|
||||
rm -f "$depfile"
|
||||
echo "$object : \\" > "$depfile"
|
||||
sed 's/^[^:]*: / /' < "$tmpdepfile" >> "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
#nosideeffect)
|
||||
# This comment above is used by automake to tell side-effect
|
||||
# dependency tracking mechanisms from slower ones.
|
||||
|
||||
dashmstdout)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the proprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
test -z "$dashmflag" && dashmflag=-M
|
||||
( IFS=" "
|
||||
case " $* " in
|
||||
*" --mode=compile "*) # this is libtool, let us make it quiet
|
||||
for arg
|
||||
do # cycle over the arguments
|
||||
case "$arg" in
|
||||
"--mode=compile")
|
||||
# insert --quiet before "--mode=compile"
|
||||
set fnord "$@" --quiet
|
||||
shift # fnord
|
||||
;;
|
||||
esac
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # "$arg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
"$@" $dashmflag | sed 's:^[^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tr ' ' '
|
||||
' < "$tmpdepfile" | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
dashXmstdout)
|
||||
# This case only exists to satisfy depend.m4. It is never actually
|
||||
# run, as this mode is specially recognized in the preamble.
|
||||
exit 1
|
||||
;;
|
||||
|
||||
makedepend)
|
||||
# X makedepend
|
||||
(
|
||||
shift
|
||||
cleared=no
|
||||
for arg in "$@"; do
|
||||
case $cleared in no)
|
||||
set ""; shift
|
||||
cleared=yes
|
||||
esac
|
||||
case "$arg" in
|
||||
-D*|-I*)
|
||||
set fnord "$@" "$arg"; shift;;
|
||||
-*)
|
||||
;;
|
||||
*)
|
||||
set fnord "$@" "$arg"; shift;;
|
||||
esac
|
||||
done
|
||||
obj_suffix="`echo $object | sed 's/^.*\././'`"
|
||||
touch "$tmpdepfile"
|
||||
${MAKEDEPEND-makedepend} 2>/dev/null -o"$obj_suffix" -f"$tmpdepfile" "$@"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
tail +3 "$tmpdepfile" | tr ' ' '
|
||||
' | \
|
||||
## Some versions of the HPUX 10.20 sed can't process this invocation
|
||||
## correctly. Breaking it into two sed invocations is a workaround.
|
||||
sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile" "$tmpdepfile".bak
|
||||
;;
|
||||
|
||||
cpp)
|
||||
# Important note: in order to support this mode, a compiler *must*
|
||||
# always write the proprocessed file to stdout, regardless of -o,
|
||||
# because we must use -o when running libtool.
|
||||
( IFS=" "
|
||||
case " $* " in
|
||||
*" --mode=compile "*)
|
||||
for arg
|
||||
do # cycle over the arguments
|
||||
case "$arg" in
|
||||
"--mode=compile")
|
||||
# insert --quiet before "--mode=compile"
|
||||
set fnord "$@" --quiet
|
||||
shift # fnord
|
||||
;;
|
||||
esac
|
||||
set fnord "$@" "$arg"
|
||||
shift # fnord
|
||||
shift # "$arg"
|
||||
done
|
||||
;;
|
||||
esac
|
||||
"$@" -E |
|
||||
sed -n '/^# [0-9][0-9]* "\([^"]*\)"/ s::'"$object"'\: \1:p' > "$tmpdepfile"
|
||||
) &
|
||||
proc=$!
|
||||
"$@"
|
||||
stat=$?
|
||||
wait "$proc"
|
||||
if test "$stat" != 0; then exit $stat; fi
|
||||
rm -f "$depfile"
|
||||
cat < "$tmpdepfile" > "$depfile"
|
||||
sed < "$tmpdepfile" -e 's/^[^:]*: //' -e 's/$/ :/' >> "$depfile"
|
||||
rm -f "$tmpdepfile"
|
||||
;;
|
||||
|
||||
none)
|
||||
exec "$@"
|
||||
;;
|
||||
|
||||
*)
|
||||
echo "Unknown depmode $depmode" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
153
contrib/ntp/html/audio.htm
Normal file
153
contrib/ntp/html/audio.htm
Normal file
@ -0,0 +1,153 @@
|
||||
<html><head><title>
|
||||
Reference Clock Audio Drivers
|
||||
</title></head><body><h3>
|
||||
Reference Clock Audio Drivers
|
||||
</h3><hr>
|
||||
|
||||
<p>There are some applications in which the computer time can be
|
||||
disciplined to an audio signal, rather than a serial timecode and
|
||||
communications port or special purpose bus peripheral. This is useful in
|
||||
such cases where the audio signal is sent over a telephone circuit, for
|
||||
example, or received directly from a shortwave receiver. In such cases
|
||||
the audio signal can be connected via an ordinary sound card or
|
||||
baseboard audio codec. The suite of NTP reference clock drivers
|
||||
currently includes three drivers suitable for these applications. They
|
||||
include a driver for the Inter Range Instrumentation Group (IRIG)
|
||||
signals produced by most radio clocks and timing devices, another for
|
||||
the Canadian time/frequency radio station CHU and a third for the NIST
|
||||
time/frequency radio stations WWV and WWVH. The radio drivers are
|
||||
designed to work with ordinary inexpensive shortwave radios and may be
|
||||
one of the least expensive ways to build a good primary time server.
|
||||
|
||||
<p>All three drivers make ample use of sophisticated digital signal
|
||||
processing algorithms designed to efficiently extract timing signals
|
||||
from noise and interference. The radio station drivers in particular
|
||||
implement optimum linear demodulation and decoding techniques, including
|
||||
maximum likelihood and soft-decision methods. The documentation page for
|
||||
each driver contains an in-depth discussion on the algorithms and
|
||||
performance expectations. In some cases the algorithms are further
|
||||
analyzed, modelled and evaluated in a technical report.
|
||||
|
||||
<p>Currently, the audio drivers are compatible with Sun operating
|
||||
systems, including Solaris and SunOS, and the native audio codec
|
||||
interface supported by these systems. In fact, the interface is quite
|
||||
generic and support for other systems, in particular the various Unix
|
||||
generics, should not be difficult. Volunteers are solicited.
|
||||
|
||||
<p>The audio drivers include a number of common features designed to
|
||||
groom input signals, suppress spikes and normalize signal levels. An
|
||||
automatic gain control (AGC) feature provides protection against
|
||||
overdriven or underdriven input signals. It is designed to maintain
|
||||
adequate demodulator signal amplitude while avoiding occasional noise
|
||||
spikes. In order to assure reliable operation, the signal level must be
|
||||
in the range where the audio gain control is effective. In general, this
|
||||
means the input signal level must be such as to cause the AGC to set the
|
||||
gain somewhere in the middle of the range from 0 to 255, as indicated in
|
||||
the timecode displayed by the <tt>ntpq</tt> program.
|
||||
|
||||
<p>The drivers operate by disciplining a logical clock based on the
|
||||
codec sample clock to the audio signal as received. This is done by
|
||||
stuffing or slipping samples as required to maintain exact frequency to
|
||||
the order of 0.1 PPM. In order for the driver to reliably lock on the
|
||||
audio signal, the sample clock frequency tolerance must be less than 250
|
||||
PPM (.025 percent) for the IRIG driver and half that for the radio
|
||||
drivers. The largest error observed so far is about 60 PPM, but it is
|
||||
possible some sound cards or codecs may exceed that value.
|
||||
|
||||
<p>The drivers include provisions to select the input port and to
|
||||
monitor the input signal. The <tt>fudge flag 2</tt> selects the
|
||||
microphone port if set to zero or the line-in port if set to one. It
|
||||
does not seem useful to specify the compact disc player port. The
|
||||
<tt>fudge flag 3</tt> enables the input signal monitor using the
|
||||
previously selected output port and output gain. Both of these flags can
|
||||
be set in the configuration file or remotely using the <tt>ntpdc</tt>
|
||||
utility program.
|
||||
|
||||
<H4>Shortwave Radio Drivers</H4>
|
||||
|
||||
<p>The WWV/H and CHU audio drivers require an external shortwave radio
|
||||
with the radio output - speaker or headphone jack - connected to either
|
||||
the microphone or line-in port on the computer. There is some degree of
|
||||
art in setting up the radio and antenna and getting the setup to work.
|
||||
While the drivers are highly sophisticated and efficient in extracting
|
||||
timing signals from noise and interference, it always helps to have as
|
||||
clear a signal as possible.
|
||||
|
||||
<p>The most important factor affecting the radio signal is the antenna.
|
||||
It need not be long - even 15 feet is enough if it is located outside of
|
||||
a metal frame building, preferably on the roof, and away from metallic
|
||||
objects. An ordinary CB whip mounted on a PVC pipe and wooden X-frame on
|
||||
the roof should work well with most portable radios, as they are
|
||||
optimized for small antennas.
|
||||
|
||||
<p>The radio need not be located near the computer; in fact, it
|
||||
generally works better if the radio is outside the near field of
|
||||
computers and other electromagnetic noisemakers. It can be in the
|
||||
elevator penthouse connected by house wiring, which can also be used to
|
||||
power the radio. A couple of center-tapped audio transformers will
|
||||
minimize noise pickup and provide phantom power to the radio with return
|
||||
via the AC neutral wire.
|
||||
|
||||
<p>The WWV/H and CHU transmitters operate on several frequencies
|
||||
simultaneously, so that in most parts of North America at least one
|
||||
frequency supports propagation to the receiver location at any given
|
||||
hour. While both drivers support the ICOM CI-V radio interface and can tune the radio automatically, computer-tunable radios are expensive and probably not cost effective compared to a GPS receiver. So, the radio frequency must usually be fixed and chosen by compromise.
|
||||
|
||||
<p>Shortwave (3-30 MHz) radio propagation phenomena are well known to
|
||||
shortwave enthusiasts. The phenomena generally obey the following rules:
|
||||
|
||||
<ul>
|
||||
|
||||
<p><li>The optimum frequency is higher in daytime than nighttime, stays
|
||||
high longer on summer days and low longer on winter nights.
|
||||
|
||||
<p><li>Transitions between daytime and nightime conditions generally
|
||||
occur somewhat after sunrise and sunset at the midpoint of the path from
|
||||
transmitter to receiver.
|
||||
|
||||
<p><li>Ambient noise (static) on the lower frequencies follows the
|
||||
thunderstorm season, so is higher on summer afternoons and evenings.
|
||||
|
||||
<p><li>The lower frequency bands are best for shorter distances, while
|
||||
the higher bands are best for longer distances.
|
||||
|
||||
<p><li>The optimum frequencies are higher at the peak of the 11-year
|
||||
sunspot cycle and lower at the trough. The current sunspot cycle should
|
||||
peak in the first couple of years beginning the century.
|
||||
|
||||
</ul>
|
||||
|
||||
The best way to choose a frequency is to listen at various times over
|
||||
the day and determine the best highest (daytime) and lowest (nighttime)
|
||||
frequencies. Then, assuming one is available, choose the highest
|
||||
frequency between these frequencies. This strategy assumes that the high
|
||||
frequency is more problematic than the low, that the low frequency
|
||||
probably comes with severe multipath and static, and insures that
|
||||
probably twice a day the chosen frequency will work. For instance, on
|
||||
the east coast the best compromise CHU frequency is probably 7335 kHz
|
||||
and the best WWV frequency is probably 15 MHz.
|
||||
|
||||
<h4>Debugging Aids</h4>
|
||||
|
||||
<p>The audio drivers include extensive debugging support to help hook up
|
||||
the audio signals and monitor the driver operations. The documentation
|
||||
page for each driver describes the various messages that can be produced
|
||||
either in real-time or written to the <tt>clockstats</tt> file for
|
||||
later analysis. Of particular help in verifying signal connections and
|
||||
compatibility is a provision to monitor the signal via headphones or
|
||||
speaker.
|
||||
|
||||
|
||||
<p>The drivers write a synthesized timecode to the <tt>clockstats</tt>
|
||||
file each time the clock is set or verified and at other times if verbose monitoring is enabled. The format includes several fixed-length fields defining the Gregorian time to the millisecond, together with additional variable-length fields specific to each driver. The data include the intervals since the clock was last set or verified, the audio gain and various state variables and counters specific to each driver.
|
||||
|
||||
<H4>Additional Information</H4>
|
||||
|
||||
<A HREF="refclock.htm">Reference Clock Drivers</A>
|
||||
<br><A HREF="driver7.htm">Radio CHU Audio Demodulator/Decoder</A>
|
||||
<br><A HREF="driver36.htm">Radio WWV/H Audio Demodulator/Decoder</A>
|
||||
<br><A HREF="driver6.htm">IRIG Audio Decoder</A>
|
||||
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
@ -177,28 +177,8 @@ function.</DD>
|
||||
</DL>
|
||||
|
||||
<H4>Building and Installing under Windows NT</H4>
|
||||
|
||||
Under Windows NT, you will need <TT>Visual C++ 5.0</TT> or above,
|
||||
<TT>InstallShield</TT> SDK, <TT>Perl5</TT> and some version of the
|
||||
archiving program <TT>ZIP</TT>. Note that the version of
|
||||
<TT>InstallShield</TT> that comes with VC++5.0 is not useable here,
|
||||
since it does not include the command line tools.
|
||||
|
||||
<P>See the <TT>./scripts/wininstall/readme.nt</TT> file for directions
|
||||
to compile the sources, build the libraries and link the executables.
|
||||
Initiate the build by running either <TT>bldrel.bat</TT> or
|
||||
<TT>blddbg.bat</TT> to compile all of the source and create an
|
||||
<TT>InstallShield</TT> based graphical installation package.
|
||||
|
||||
<P>To install the executables, make sure that you are logged in as a
|
||||
system account, or one with administrator privileges such as the
|
||||
"administrator" account. As part of the build an <TT>InstallShield</TT>
|
||||
based graphical installer was created. Run
|
||||
<TT>\ntp\scripts\wininstall\intel\disk1\setup.exe</TT> to begin the
|
||||
installation. This installer will prompt for basic defaults,
|
||||
copy the binaries, install the service, and start it up. The other
|
||||
option is to run <TT>\ntp\scripts\wininstall\distrib\install.bat</TT>
|
||||
which will do the basic installation from the command line.
|
||||
See <tt><a href="hints/winnt.htm">hints/winnt.htm</a> </tt>for directions
|
||||
to compile the sources and install the executables.
|
||||
|
||||
<hr><a href=index.htm><img align=left
|
||||
src=pic/home.gif></a><address><a href="mailto:mills@udel.edu"> David L.
|
||||
|
@ -1,123 +1,202 @@
|
||||
<HTML><HEAD><TITLE>
|
||||
<html><head><title>
|
||||
Copyright Notice
|
||||
</TITLE></HEAD><BODY><H3>
|
||||
</title></head><body><h3>
|
||||
Copyright Notice
|
||||
</H3>
|
||||
</h3>
|
||||
|
||||
<IMG align=left HEIGHT=264 WIDTH=206 SRC=pic/sheepb.jpg >"Clone
|
||||
me," says Dolly sheepishly
|
||||
<br clear=left><hr>
|
||||
|
||||
<P>The following copyright notice applies to all files collectively called the Network Time Protocol Version 4 Distribution. Unless specifically declared otherwise in an individual file, this notice applies as if the text was explicitly included in the file.
|
||||
<P>The following copyright notice applies to all files collectively
|
||||
called the Network Time Protocol Version 4 Distribution. Unless
|
||||
specifically declared otherwise in an individual file, this notice
|
||||
applies as if the text was explicitly included in the file.
|
||||
<br>
|
||||
|
||||
<PRE>/***********************************************************************
|
||||
* *
|
||||
* Copyright (c) David L. Mills 1992-1999 *
|
||||
* *
|
||||
* 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 appears in all *
|
||||
* copies and that both the copyright notice and this permission *
|
||||
* notice appear in supporting documentation, and that the name *
|
||||
* University of Delaware not be used in advertising or publicity *
|
||||
* pertaining to distribution of the software without specific, *
|
||||
* written prior permission. The University of Delaware makes no *
|
||||
* representations about the suitability this software for any *
|
||||
* purpose. It is provided "as is" without express or implied *
|
||||
* warranty. *
|
||||
**********************************************************************/</PRE>
|
||||
<PRE>
|
||||
/***********************************************************************
|
||||
* *
|
||||
* Copyright (c) David L. Mills 1992-2000 *
|
||||
* *
|
||||
* 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 appears in all *
|
||||
* copies and that both the copyright notice and this permission *
|
||||
* notice appear in supporting documentation, and that the name *
|
||||
* University of Delaware not be used in advertising or publicity *
|
||||
* pertaining to distribution of the software without specific, *
|
||||
* written prior permission. The University of Delaware makes no *
|
||||
* representations about the suitability this software for any *
|
||||
* purpose. It is provided "as is" without express or implied *
|
||||
* warranty. *
|
||||
* *
|
||||
***********************************************************************
|
||||
*/
|
||||
</PRE>
|
||||
|
||||
The following individuals contributed in part to the Network Time Protocol Distribution Version 4 and are acknowledged as authors of this work.
|
||||
The following individuals contributed in part to the Network Time
|
||||
Protocol Distribution Version 4 and are acknowledged as authors of this
|
||||
work.
|
||||
|
||||
<OL>
|
||||
|
||||
<LI><A HREF="mailto: marka@syd.dms.csiro.au">Mark Andrews <marka@syd.dms.csiro.au></a> Leitch atomic clock controller</LI>
|
||||
<LI><A HREF="mailto: marka@syd.dms.csiro.au">Mark Andrews
|
||||
<marka@syd.dms.csiro.au></a> Leitch atomic clock controller</LI>
|
||||
|
||||
<LI><A HREF="mailto: vbais@mailman1.intel.co">Viraj Bais <vbais@mailman1.intel.com></a> and <A HREF="mailto: kirkwood@striderfm.intel.com">Clayton Kirkwood <kirkwood@striderfm.intel.com></a> port to WindowsNT 3.5</LI>
|
||||
<LI><A HREF="mailto: vbais@mailman1.intel.co">Viraj Bais
|
||||
<vbais@mailman1.intel.com></a> and <A HREF="mailto:
|
||||
kirkwood@striderfm.intel.com">Clayton Kirkwood
|
||||
<kirkwood@striderfm.intel.com></a> port to WindowsNT 3.5</LI>
|
||||
|
||||
<LI><A HREF="mailto: karl@owl.HQ.ileaf.com">Karl Berry <karl@owl.HQ.ileaf.com></a> syslog to file option</LI>
|
||||
<LI><A HREF="mailto: michael.barone@lmco.com">Michael Barone
|
||||
<michael,barone@lmco.com></a> GPSVME fixes</LI>
|
||||
|
||||
<LI><A HREF="mailto: Piete.Brooks@cl.cam.ac.uk">Piete Brooks <Piete.Brooks@cl.cam.ac.uk></a> MSF clock driver, Trimble PARSE support</LI>
|
||||
<LI><A HREF="mailto: karl@owl.HQ.ileaf.com">Karl Berry
|
||||
<karl@owl.HQ.ileaf.com></a> syslog to file option</LI>
|
||||
|
||||
<LI><A HREF="mailto: clift@ml.csiro.au">Steve Clift <clift@ml.csiro.au></a> OMEGA clock driver</LI>
|
||||
<LI><A HREF="mailto: greg.brackley@bigfoot.com">Greg Brackley
|
||||
<greg.brackley@bigfoot.com></a> Major rework of WINNT port. Clean
|
||||
up recvbuf and iosignal code into separate modules.</LI>
|
||||
|
||||
<LI><A HREF="mailto:casey@csc.co.za">Casey Crellin <casey@csc.co.za></a> vxWorks (Tornado) port and help with target configuration</LI>
|
||||
<LI><A HREF="mailto: Piete.Brooks@cl.cam.ac.uk">Piete Brooks
|
||||
<Piete.Brooks@cl.cam.ac.uk></a> MSF clock driver, Trimble PARSE
|
||||
support</LI>
|
||||
|
||||
<LI><A HREF="mailto: duwe@immd4.informatik.uni-erlangen.de">Torsten Duwe <duwe@immd4.informatik.uni-erlangen.de></a> Linux port</LI>
|
||||
<LI><A HREF="mailto: clift@ml.csiro.au">Steve Clift
|
||||
<clift@ml.csiro.au></a> OMEGA clock driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: dundas@salt.jpl.nasa.gov">John A. Dundas III <dundas@salt.jpl.nasa.gov></a> Apple A/UX port</LI>
|
||||
<LI><A HREF="mailto:casey@csc.co.za">Casey Crellin
|
||||
<casey@csc.co.za></a> vxWorks (Tornado) port and help with target
|
||||
configuration</LI>
|
||||
|
||||
<LI><A HREF="mailto: dennis@mrbill.canet.ca">Dennis Ferguson <dennis@mrbill.canet.ca></a> foundation code for NTP Version 2 as specified in RFC-1119</LI>
|
||||
<LI><A HREF="mailto: Sven_Dietrich@trimble.COM">Sven Dietrich
|
||||
<sven_dietrich@trimble.com></a> Palisade reference clock driver,
|
||||
NT adj. residuals, integrated Greg's Winnt port.</LI>
|
||||
|
||||
<LI><A HREF="mailto: glenn@herald.usask.ca">Glenn Hollinger <glenn@herald.usask.ca></a> GOES clock driver</LI>
|
||||
<LI><A HREF="mailto: dundas@salt.jpl.nasa.gov">John A. Dundas III
|
||||
<dundas@salt.jpl.nasa.gov></a> Apple A/UX port</LI>
|
||||
|
||||
<LI><A HREF="mailto: iglesias@uci.edu">Mike Iglesias <iglesias@uci.edu></a> DEC Alpha port</LI>
|
||||
<LI><A HREF="mailto: duwe@immd4.informatik.uni-erlangen.de">Torsten Duwe
|
||||
<duwe@immd4.informatik.uni-erlangen.de></a> Linux port</LI>
|
||||
|
||||
<LI><A HREF="mailto: jagubox.gsfc.nasa.gov">Jim Jagielski <jim@jagubox.gsfc.nasa.gov></a> A/UX port</LI>
|
||||
<LI><A HREF="mailto: dennis@mrbill.canet.ca">Dennis Ferguson
|
||||
<dennis@mrbill.canet.ca></a> foundation code for NTP Version 2 as
|
||||
specified in RFC-1119</LI>
|
||||
|
||||
<LI><A HREF="mailto: jbj@chatham.usdesign.com">Jeff Johnson <jbj@chatham.usdesign.com></a> massive prototyping overhaul</LI>
|
||||
<LI><A HREF="mailto: glenn@herald.usask.ca">Glenn Hollinger
|
||||
<glenn@herald.usask.ca></a> GOES clock driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: jones@hermes.chpc.utexas.edu">William L. Jones <jones@hermes.chpc.utexas.edu></a> RS/6000 AIX modifications, HPUX modifications</LI>
|
||||
<LI><A HREF="mailto: iglesias@uci.edu">Mike Iglesias
|
||||
<iglesias@uci.edu></a> DEC Alpha port</LI>
|
||||
|
||||
<LI><A HREF="mailto: dkatz@cisco.com">Dave Katz <dkatz@cisco.com></a> RS/6000 AIX port</LI>
|
||||
<LI><A HREF="mailto: jagubox.gsfc.nasa.gov">Jim Jagielski
|
||||
<jim@jagubox.gsfc.nasa.gov></a> A/UX port</LI>
|
||||
|
||||
<LI><A HREF="mailto: leres@ee.lbl.gov">Craig Leres <leres@ee.lbl.gov></a> 4.4BSD port, ppsclock, Maganavox GPS clock driver</LI>
|
||||
<LI><A HREF="mailto: jbj@chatham.usdesign.com">Jeff Johnson
|
||||
<jbj@chatham.usdesign.com></a> massive prototyping overhaul</LI>
|
||||
|
||||
<LI><A HREF="mailto: lindholm@ucs.ubc.ca">George Lindholm <lindholm@ucs.ubc.ca></a> SunOS 5.1 port</LI>
|
||||
<LI><A HREF="mailto: jones@hermes.chpc.utexas.edu">William L. Jones
|
||||
<jones@hermes.chpc.utexas.edu></a> RS/6000 AIX modifications, HPUX
|
||||
modifications</LI>
|
||||
|
||||
<LI>
|
||||
<A HREF="mailto: louie@ni.umd.edu">Louis A. Mamakos <louie@ni.umd.edu></a>
|
||||
MD5-based authentication</LI>
|
||||
<LI><A HREF="mailto:Hans.Lambermont@nl.origin-it.com">Hans Lambermont
|
||||
<Hans.Lambermont@nl.origin-it.com></A> or <A
|
||||
HREF="mailto:H.Lambermont@chello.nl"><H.Lambermont@chello.nl></A>
|
||||
ntpsweep</LI>
|
||||
|
||||
<LI><A HREF="mailto: derek@toybox.demon.co.uk">Derek Mulcahy <derek@toybox.demon.co.uk></a> and <A HREF="mailto: d@hd.org">Damon Hart-Davis <d@hd.org></a> ARCRON MSF clock driver</LI>
|
||||
<LI><A HREF="http://www4.informatik.uni-erlangen.de/~kardel">Frank
|
||||
Kardel</A> <A HREF="mailto: Frank.Kardel@informatik.uni-erlangen.de">
|
||||
<Frank.Kardel@informatik.uni-erlangen.de></a> PARSE
|
||||
<GENERIC> driver (14 reference clocks), STREAMS modules for PARSE,
|
||||
support scripts, syslog cleanup</LI>
|
||||
|
||||
<LI><A HREF="mailto: thorinn@diku.dk">Lars H. Mathiesen <thorinn@diku.dk></a> adaptation of foundation code for Version 3 as specified in RFC-1305</LI>
|
||||
<LI><A HREF="mailto: dkatz@cisco.com">Dave Katz
|
||||
<dkatz@cisco.com></a> RS/6000 AIX port</LI>
|
||||
|
||||
<LI><A HREF="mailto: mills@udel.edu">David L. Mills <mills@udel.edu></a> Version 4 foundation, Spectractom WWVB, Austron GPS, Arbiter GPS, CHU, Heath, ATOM, ACTS, KSI/Odetics, IRIG clock drivers; PPS support; precision kernel; NTPv4 changes</LI>
|
||||
<LI><A HREF="mailto: leres@ee.lbl.gov">Craig Leres
|
||||
<leres@ee.lbl.gov></a> 4.4BSD port, ppsclock, Maganavox GPS clock
|
||||
driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: moeller@gwdgv1.dnet.gwdg.de">Wolfgang Moeller <moeller@gwdgv1.dnet.gwdg.de></a> VMS port</LI>
|
||||
<LI><A HREF="mailto: lindholm@ucs.ubc.ca">George Lindholm
|
||||
<lindholm@ucs.ubc.ca></a> SunOS 5.1 port</LI>
|
||||
|
||||
<LI><A HREF="mailto: mogul@pa.dec.com">Jeffrey Mogul <mogul@pa.dec.com></a> ntptrace utility</LI>
|
||||
<LI><A HREF="mailto: louie@ni.umd.edu">Louis A. Mamakos
|
||||
<louie@ni.umd.edu></a> MD5-based authentication</LI>
|
||||
|
||||
<LI><A HREF="mailto: tmoore@fievel.daytonoh.ncr.com">Tom Moore <tmoore@fievel.daytonoh.ncr.com></a> i386 svr4 port</LI>
|
||||
<LI><A HREF="mailto: thorinn@diku.dk">Lars H. Mathiesen
|
||||
<thorinn@diku.dk></a> adaptation of foundation code for Version 3
|
||||
as specified in RFC-1305</LI>
|
||||
|
||||
<LI><A HREF="mailto: Rainer.Pruy@informatik.uni-erlangen.de">Rainer Pruy <Rainer.Pruy@informatik.uni-erlangen.de></a> monitoring/trap scripts, statistics file handling</LI>
|
||||
<LI><A HREF="mailto: mills@udel.edu">David L. Mills
|
||||
<mills@udel.edu></a> Version 4 foundation: clock discipline,
|
||||
authentication, precision kernel; clock drivers: Spectracom, Austron,
|
||||
Arbiter, Heath, ATOM, ACTS, KSI/Odetics; audio clock drivers: CHU,
|
||||
WWV/H, IRIG</LI>
|
||||
|
||||
<LI><A HREF="mailto: dirce@zk3.dec.com">Dirce Richards <dirce@zk3.dec.com></a> Digital UNIX V4.0 port</LI>
|
||||
<LI><A HREF="mailto: moeller@gwdgv1.dnet.gwdg.de">Wolfgang Moeller
|
||||
<moeller@gwdgv1.dnet.gwdg.de></a> VMS port</LI>
|
||||
|
||||
<LI><A HREF="mailto: mrapple@quack.kfu.com">Nick Sayer <mrapple@quack.kfu.com></a> SunOS streams modules</LI>
|
||||
<LI><A HREF="mailto: mogul@pa.dec.com">Jeffrey Mogul
|
||||
<mogul@pa.dec.com></a> ntptrace utility</LI>
|
||||
|
||||
<LI><A HREF="http://www4.informatik.uni-erlangen.de/~kardel">Frank Kardel</A> <A HREF="mailto:
|
||||
Frank.Kardel@informatik.uni-erlangen.de">
|
||||
<Frank.Kardel@informatik.uni-erlangen.de></a>
|
||||
PARSE <GENERIC> driver (14 reference clocks), STREAMS modules for PARSE, support scripts, syslog cleanup</LI>
|
||||
<LI><A HREF="mailto: tmoore@fievel.daytonoh.ncr.com">Tom Moore
|
||||
<tmoore@fievel.daytonoh.ncr.com></a> i386 svr4 port</LI>
|
||||
|
||||
<LI><A HREF="mailto: schnitz@unipress.com">Ray Schnitzler <schnitz@unipress.com></a> Unixware1 port</LI>
|
||||
<LI><A HREF="mailto: derek@toybox.demon.co.uk">Derek Mulcahy
|
||||
<derek@toybox.demon.co.uk></a> and <A HREF="mailto:
|
||||
d@hd.org">Damon Hart-Davis <d@hd.org></a> ARCRON MSF clock
|
||||
driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: shields@tembel.org">Michael Shields <shields@tembel.org></a> USNO clock driver</LI>
|
||||
<LI><A HREF="mailto: Rainer.Pruy@informatik.uni-erlangen.de">Rainer Pruy
|
||||
<Rainer.Pruy@informatik.uni-erlangen.de></a> monitoring/trap
|
||||
scripts, statistics file handling</LI>
|
||||
|
||||
<LI><A HREF="mailto: pebbles.jpl.nasa.gov">Jeff Steinman <jss@pebbles.jpl.nasa.gov></a> Datum PTS clock driver</LI>
|
||||
<LI><A HREF="mailto: dirce@zk3.dec.com">Dirce Richards
|
||||
<dirce@zk3.dec.com></a> Digital UNIX V4.0 port</LI>
|
||||
|
||||
<LI><A HREF="mailto: harlan@pfcs.com">Harlan Stenn <harlan@pfcs.com></a> GNU automake/autoconfigure makeover</LI>
|
||||
<LI><A HREF="mailto: wsanchez@apple.com">Wilfredo Sánchez
|
||||
<wsanchez@apple.com></A> added support for NetInfo</LI>
|
||||
|
||||
<LI><A HREF="mailto: ken@sdd.hp.com">Kenneth Stone <ken@sdd.hp.com></a> HP-UX port</LI>
|
||||
<LI><A HREF="mailto: mrapple@quack.kfu.com">Nick Sayer
|
||||
<mrapple@quack.kfu.com></a> SunOS streams modules</LI>
|
||||
|
||||
<LI><A HREF="mailto: ajit@ee.udel.edu">Ajit Thyagarajan <ajit@ee.udel.edu></a>IP multicast support</LI>
|
||||
<LI><A HREF="mailto: jack@innovativeinternet.com">Jack Sasportas
|
||||
<jack@innovativeinternet.com></A> Saved a Lot of space on the
|
||||
stuff in the html/pic/ subdirectory</LI>
|
||||
|
||||
<LI><A HREF="mailto: tsuruoka@nc.fukuoka-u.ac.jp">Tomoaki TSURUOKA <tsuruoka@nc.fukuoka-u.ac.jp></a>TRAK clock driver</LI>
|
||||
<LI><A HREF="mailto: schnitz@unipress.com">Ray Schnitzler
|
||||
<schnitz@unipress.com></a> Unixware1 port</LI>
|
||||
|
||||
<LI><A HREF="mailto: vixie@vix.com">Paul A Vixie <vixie@vix.com></a> TrueTime GPS driver, generic TrueTime clock driver</LI>
|
||||
<LI><A HREF="mailto: shields@tembel.org">Michael Shields
|
||||
<shields@tembel.org></a> USNO clock driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: Ulrich.Windl@rz.uni-regensburg.de">Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de></a> corrected and validated HTML documents according to the HTML DTD</LI>
|
||||
<LI><A HREF="mailto: pebbles.jpl.nasa.gov">Jeff Steinman
|
||||
<jss@pebbles.jpl.nasa.gov></a> Datum PTS clock driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: greg.brackley@bigfoot.com">Greg Brackley <greg.brackley@bigfoot.com></a> Major rework of WINNT port. Clean up recvbuf and iosignal code into separate modules.</LI>
|
||||
<LI><A HREF="mailto: harlan@pfcs.com">Harlan Stenn
|
||||
<harlan@pfcs.com></a> GNU automake/autoconfigure makeover, various
|
||||
other bits (see the ChangeLog)</LI>
|
||||
|
||||
<LI><A HREF="mailto: Sven_Dietrich@trimble.COM">Sven Dietrich <sven_dietrich@trimble.com></a> Palisade reference clock driver, NT adj. residuals, integrated Greg's Winnt port.</LI>
|
||||
<LI><A HREF="mailto: ken@sdd.hp.com">Kenneth Stone
|
||||
<ken@sdd.hp.com></a> HP-UX port</LI>
|
||||
|
||||
<LI><A HREF="mailto: ajit@ee.udel.edu">Ajit Thyagarajan
|
||||
<ajit@ee.udel.edu></a>IP multicast/anycast support</LI>
|
||||
|
||||
<LI><A HREF="mailto: tsuruoka@nc.fukuoka-u.ac.jp">Tomoaki TSURUOKA
|
||||
<tsuruoka@nc.fukuoka-u.ac.jp></a>TRAK clock driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: vixie@vix.com">Paul A Vixie
|
||||
<vixie@vix.com></a> TrueTime GPS driver, generic TrueTime clock
|
||||
driver</LI>
|
||||
|
||||
<LI><A HREF="mailto: Ulrich.Windl@rz.uni-regensburg.de">Ulrich Windl
|
||||
<Ulrich.Windl@rz.uni-regensburg.de></a> corrected and validated
|
||||
HTML documents according to the HTML DTD</LI>
|
||||
|
||||
<LI><A HREF="mailto: wsanchez@apple.com">Wilfredo Sánchez <wsanchez@apple.com></A> added support for NetInfo</LI>
|
||||
</OL>
|
||||
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
||||
</address></a></body></html>
|
||||
|
@ -17,24 +17,32 @@ Motorola Oncore GPS receiver</H3>
|
||||
<H4>
|
||||
Synopsis</H4>
|
||||
|
||||
Address: 127.127.30.0
|
||||
<BR>Reference ID: <TT>GPS</TT>
|
||||
<BR>Driver ID: ONCORE
|
||||
<BR>Serial Port: <TT>/dev/cuaa0</TT>; 9600 baud, 8-bits, no parity
|
||||
<BR>PPS Port: <TT>/dev/xpps0</TT>; <TT>PPS_CAPTUREASSERT</TT>
|
||||
required, <TT>PPS_OFFSETASSERT</TT> supported.
|
||||
Address: 127.127.30.0<BR>
|
||||
Reference ID: <TT>GPS</TT><BR>
|
||||
Driver ID: ONCORE<BR>
|
||||
Serial Port: <TT>/dev/oncore.serial.0</TT>; 9600 baud, 8-bits,
|
||||
no parity.<BR>
|
||||
PPS Port: <TT>/dev/oncore.pps.0</TT>; <TT>PPS_CAPTUREASSERT</TT>
|
||||
required, <TT>PPS_OFFSETASSERT</TT> supported.
|
||||
<H4>
|
||||
Description</H4>
|
||||
This driver supports various models of the <A
|
||||
HREF="http://www.mot.com/AECS/PNSB/products">Motorola Oncore GPS
|
||||
receivers</A>. as long as they support the <I>Motorola Binary
|
||||
receivers</A> as long as they support the <I>Motorola Binary
|
||||
Protocol</I>.
|
||||
|
||||
<P>The two most interesting version of the Oncore are the "UT+"
|
||||
and the "Remote" which is a prepackaged "UT+". The evaluation kit
|
||||
<P>The three most interesting versions of the Oncore are the "VP",
|
||||
the "UT+",
|
||||
and the "Remote" which is a prepackaged "UT+".
|
||||
The "VP" is no longer available.
|
||||
|
||||
<P>The evaluation kit
|
||||
can also be recommended, it interfaces to a PC straightaway, using the
|
||||
parallel port for PPS input (supported under FreeBSD), and packs the
|
||||
serial (DCD) or parallel port for PPS input and packs the
|
||||
receiver in a nice and sturdy box.
|
||||
Two less expensive interface kits are available from
|
||||
<A HREF="http://www.tapr.org">TAPR </A>.
|
||||
|
||||
<BR>
|
||||
<CENTER><TABLE NOSAVE >
|
||||
<TR NOSAVE>
|
||||
@ -61,18 +69,22 @@ WIDTH=210></TD>
|
||||
</TR>
|
||||
</TABLE></CENTER>
|
||||
|
||||
<P>The driver requires a standard <TT>PPS</TT> interface for the pulse-
|
||||
per-second output from the receiver. The serial data stream alone
|
||||
<P>The driver requires a standard <TT>PPS</TT> interface for the
|
||||
pulse-per-second output from the receiver. The serial data stream alone
|
||||
does not provide precision time stamps (0-50msec variance, according to
|
||||
the manual), whereas the PPS output is precise down to 50 nsec (1 sigma)
|
||||
for the UT models. <P>The driver will use the "position hold" mode if
|
||||
available, with either the receivers built-in site-survey or a similar
|
||||
algorithm implemented in this driver.
|
||||
for the VP/UT models.
|
||||
|
||||
<P>The driver will use the "position hold" mode with
|
||||
user provided coordinates,
|
||||
the receivers built-in site-survey,
|
||||
or a similar algorithm implemented in this driver.
|
||||
<H4>
|
||||
Monitor Data</H4>
|
||||
The driver is quite chatty on stdout if ntpd is run with
|
||||
debugging.
|
||||
A manual will be required though.
|
||||
Additional information is written to the clockstats file, if configured.
|
||||
<H4>
|
||||
Fudge Factors</H4>
|
||||
|
||||
@ -114,7 +126,7 @@ Not used by this driver.</DD>
|
||||
<TT>flag2 0 | 1</TT></DT>
|
||||
|
||||
<DD>
|
||||
Assume GPS receiver is on a mobile platform if set.</DD>
|
||||
Not used by this driver.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>flag3 0 | 1</TT></DT>
|
||||
@ -128,26 +140,40 @@ Not used by this driver.</DD>
|
||||
<DD>
|
||||
Not used by this driver.</DD>
|
||||
</DL>
|
||||
<B>Additional Information</B><B></B>
|
||||
<P>The driver has been developed under FreeBSD, and may still be pretty
|
||||
FreeBSD centric. Patches are most welcome.
|
||||
<P><B>Performance</B><B></B>
|
||||
<P>Really good. With the UT+, the generated PPS pulse is
|
||||
referenced
|
||||
<B>Additional Information</B>
|
||||
<P>The driver has been tested on FreeBSD, Linux and SunOS.
|
||||
|
||||
<P>There is a driver specific configuration file <TT>/etc/ntp.oncore</TT>
|
||||
that contains information on the startup mode, the location of the GPS
|
||||
receiver, an offset of the PPS signal from zero, and the cable delay.
|
||||
The offset shifts the PPS signal to avoid interrupt pileups `on' the second,
|
||||
and adjust the timestamp accordingly.
|
||||
See the driver source for information on this file.
|
||||
The default with no file is: no delay, no offset, and a site survey is done
|
||||
to get the location of the gps receiver.
|
||||
|
||||
<P>The <TT>/etc/ntp.conf</TT> file will need a line of the form<BR>
|
||||
|
||||
<TT> pps /dev/oncore.pps.0 [ assert/clear ] hardpps</TT><BR>
|
||||
if you want the oncore driver to control the kernel PLL.
|
||||
For more information, see the <A HREF=clockopt.htm>Reference Clock
|
||||
Options</A> page.
|
||||
|
||||
<P><B>Performance</B>
|
||||
<P>Really good. With the VP/UT+, the generated PPS pulse is referenced
|
||||
to UTC(GPS) with better than 50 nsec (1 sigma) accuracy. The
|
||||
limiting factor will be the timebase of the computer and the precision
|
||||
with which you can timestamp the rising flank of the
|
||||
PPS signal.
|
||||
Using FreeBSD, a FPGA based Timecounter/PPS interface
|
||||
and
|
||||
an ovenized quartz oscillator, that performance has been reproduced.
|
||||
For
|
||||
more details on this aspect: <A
|
||||
and an ovenized quartz oscillator, that performance has been reproduced.
|
||||
For more details on this aspect: <A
|
||||
HREF="http://phk.freebsd.dk/rover.html">Sub-Microsecond
|
||||
timekeeping under FreeBSD</A>
|
||||
<HR>
|
||||
<ADDRESS>
|
||||
Poul-Henning Kamp (phk@FreeBSD.org)</ADDRESS>
|
||||
|
||||
Poul-Henning Kamp (phk@FreeBSD.org),
|
||||
Reg Clemens (reg@dwf.com)
|
||||
</ADDRESS>
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
82
contrib/ntp/html/driver35.htm
Normal file
82
contrib/ntp/html/driver35.htm
Normal file
@ -0,0 +1,82 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Conrad parallel port radio clock</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h3>Conrad parallel port radio clock</h3>
|
||||
<hr>
|
||||
|
||||
<h4>Synopsis</h4>
|
||||
|
||||
<p>Address: 127.127.35.<i>u</i><br>
|
||||
Reference ID: <tt>PCF</tt><br>
|
||||
Driver ID: <tt>PCF</tt><br>
|
||||
Parallel Port: <tt>/dev/pcfclock<i>u</i></tt>
|
||||
</p>
|
||||
|
||||
<h4>Description</h4>
|
||||
|
||||
<p>This driver supports the parallel port radio clocks sold by <a
|
||||
href="http://www.conrad-electronic.com/">Conrad Electronic</a> under
|
||||
order numbers 967602 and 642002. The battery-powered radio clock is
|
||||
put between a parallel port and your printer. It receives the legal
|
||||
German time, which is either CET or CEST, from the DCF77 transmitter
|
||||
and uses it to set internal quartz clock. The DCF77 transmitter is
|
||||
located near to Frankfurt/Main and covers a radius of more than 1500
|
||||
kilometers.
|
||||
|
||||
<p>The driver requires that the pcfclock device driver be installed.
|
||||
A device driver for Linux 2.2 is available at
|
||||
<a href="http://home.pages.de/~voegele/pcf.html">the pcfclock driver
|
||||
page</a>.
|
||||
</p>
|
||||
|
||||
<p>The driver uses C library functions to convert the received
|
||||
timecode to UTC and therefore requires that the local timezone be
|
||||
CET/CEST. If your server is not located in Central Europe, you have
|
||||
to set the environment variable TZ to CET before <tt>ntpd</tt> is
|
||||
started.</p>
|
||||
|
||||
<h4>Monitor Data</h4>
|
||||
|
||||
<p>Each timecode is written to the <tt>clockstats</tt> file in the format
|
||||
<tt>YYYY MM DD HH MI SS</tt>.</p>
|
||||
|
||||
<h4>Fudge Factors</h4>
|
||||
|
||||
<dl>
|
||||
<dt><tt>time1 <i>time</i></tt></dt>
|
||||
<dd>Specifies the time offset calibration factor, in seconds and fraction,
|
||||
with default 0.0.</dd>
|
||||
|
||||
<dt><tt>time2 <i>time</i></tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>stratum <i>number</i></tt></dt>
|
||||
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0.
|
||||
</dd>
|
||||
|
||||
<dt><tt>refid <i>string</i></tt></dt>
|
||||
<dd>Specifies the driver reference identifier, an ASCII string from one to
|
||||
four characters, with default <tt>PCF</tt>.</dd>
|
||||
|
||||
<dt><tt>flag1 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag2 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag3 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag4 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
</dl>
|
||||
|
||||
<hr>
|
||||
<address>Andreas Voegele (andreas.voegele@gmx.de)</address>
|
||||
|
||||
</body>
|
||||
</html>
|
839
contrib/ntp/html/driver36.htm
Normal file
839
contrib/ntp/html/driver36.htm
Normal file
@ -0,0 +1,839 @@
|
||||
<html><head><title>
|
||||
Radio WWV/H Audio Demodulator/Decoder
|
||||
</title></head><body><h3>
|
||||
Radio WWV/H Audio Demodulator/Decoder
|
||||
</h3><hr>
|
||||
|
||||
<h4>Synopsis</h4>
|
||||
|
||||
Address: 127.127.36.<I>u</I>
|
||||
<br>Reference ID: <tt>WWV</tt> or <tt>WWVH</tt>
|
||||
<br>Driver ID: <tt>WWV_AUDIO</tt>
|
||||
<br>Autotune Port: <tt>/dev/icom</tt>; 9600 baud, 8-bits, no parity
|
||||
<br>Audio Device: <tt>/dev/audio</tt> and <tt>/dev/audioctl</tt>
|
||||
|
||||
<h4>Description</h4>
|
||||
|
||||
This driver synchronizes the computer time using data encoded in
|
||||
shortwave radio transmissions from NIST time/frequency stations WWV in
|
||||
Ft. Collins, CO, and WWVH in Kauai, HI. Transmissions are made
|
||||
continuously on 2.5, 5, 10, 15 and 20 MHz. An ordinary shortwave
|
||||
receiver can be tuned manually to one of these frequencies or, in the
|
||||
case of ICOM receivers, the receiver can be tuned automatically by the
|
||||
driver as propagation conditions change throughout the day and night.
|
||||
The performance of this driver when tracking one of the stations is
|
||||
ordinarily better than 1 ms in time with frequency drift less than 0.5
|
||||
PPM when not tracking either station.
|
||||
|
||||
<p>The demodulation and decoding algorithms used by this driver are
|
||||
based on a machine language program developed for the TAPR DSP93 DSP
|
||||
unit, which uses the TI 320C25 DSP chip. The analysis, design and
|
||||
performance of the program running on this unit is described in: Mills,
|
||||
D.L. A precision radio clock for WWV transmissions. Electrical
|
||||
Engineering Report 97-8-1, University of Delaware, August 1997, 25 pp.
|
||||
Available from <a href=http://www.eecis.udel.edu/~mills/reports.htm>
|
||||
www.eecis.udel.edu/~mills/reports.htm</a>. For use in this driver, the
|
||||
original program was rebuilt in the C language and adapted to the NTP
|
||||
driver interface. The algorithms have been modified somewhat to improve
|
||||
performance under weak signal conditions and to provide an automatic
|
||||
station identification feature.
|
||||
|
||||
<p>This driver incorporates several features in common with other audio
|
||||
drivers such as described in the <a href=driver7.htm>Radio CHU Audio
|
||||
Demodulator/Decoder</a> and the <a href=driver6.htm>IRIG Audio
|
||||
Decoder</a> pages. They include automatic gain control (AGC), selectable
|
||||
audio codec port and signal monitoring capabilities. For a discussion of
|
||||
these common features, as well as a guide to hookup, debugging and
|
||||
monitoring, see the <a href=audio.htm>Reference Clock Audio Drivers</a>
|
||||
page.
|
||||
|
||||
<p>The WWV signal format is described in NIST Special Publication 432
|
||||
(Revised 1990). It consists of three elements, a 5-ms, 1000-Hz pulse,
|
||||
which occurs at the beginning of each second, a 800-ms, 1000-Hz pulse,
|
||||
which occurs at the beginning of each minute, and a pulse-width
|
||||
modulated 100-Hz subcarrier for the data bits, one bit per second. The
|
||||
WWVH format is identical, except that the 1000-Hz pulses are sent at
|
||||
1200 Hz. Each minute encodes nine BCD digits for the time of century
|
||||
plus seven bits for the daylight savings time (DST) indicator, leap
|
||||
warning indicator and DUT1 correction.
|
||||
|
||||
<h4>Program Architecture</h4>
|
||||
|
||||
<p>As in the original program, the clock discipline is modelled as a
|
||||
Markov process, with probabilistic state transitions corresponding to a
|
||||
conventional clock and the probabilities of received decimal digits. The
|
||||
result is a performance level which results in very high accuracy and
|
||||
reliability, even under conditions when the minute beep of the signal,
|
||||
normally its most prominent feature, can barely be detected by ear with
|
||||
a shortwave receiver.
|
||||
|
||||
<p>The analog audio signal from the shortwave radio is sampled at 8000
|
||||
Hz and converted to digital representation. The 1000/1200-Hz pulses and
|
||||
100-Hz subcarrier are first separated using two IIR filters, a 600-Hz
|
||||
bandpass filter centered on 1100 Hz and a 150-Hz lowpass filter. The
|
||||
minute sync pulse is extracted using a 800-ms synchronous matched filter
|
||||
and pulse grooming logic which discriminates between WWV and WWVH
|
||||
signals and noise. The second sync pulse is extracted using a 5-ms FIR
|
||||
matched filter and 8000-stage comb filter.
|
||||
|
||||
<p>The phase of the 100-Hz subcarrier relative to the second sync pulse
|
||||
is fixed at the transmitter; however, the audio highpass filter in most
|
||||
radios affects the phase response at 100 Hz in unpredictable ways. The
|
||||
driver adjusts for each radio using two 170-ms synchronous matched
|
||||
filters. The I (in-phase) filter is used to demodulate the subcarrier
|
||||
envelope, while the Q (quadrature-phase) filter is used in a tracking
|
||||
loop to discipline the codec sample clock and thus the demodulator
|
||||
phase.
|
||||
|
||||
<p>The data bit probabilities are determined from the subcarrier
|
||||
envelope using a threshold-corrected slicer. The averaged envelope
|
||||
amplitude 30 ms from the beginning of the second establishes the minimum
|
||||
(noise floor) value, while the amplitude 200 ms from the beginning
|
||||
establishes the maximum (signal peak) value. The slice level is midway
|
||||
between these two values. The negative-going envelope transition at the
|
||||
slice level establishes the length of the data pulse, which in turn
|
||||
establish probabilities for binary zero (P0) or binary one (P1). The
|
||||
values are established by linear interpolation between the pulse lengths
|
||||
for P0 (300 ms) and P1 (500 ms) so that the sum is equal to one. If the
|
||||
driver has not synchronized to the minute pulse, or if the data bit
|
||||
amplitude, signal/noise ratio (SNR) or length are below thresholds, the
|
||||
bit is considered invalid and all three probabilities are set to zero.
|
||||
|
||||
<p>The difference between the P1 and P0 probabilities, or likelihood,
|
||||
for each data bit is exponentially averaged in a set of 60 accumulators,
|
||||
one for each second, to determine the semi-static miscellaneous bits,
|
||||
such as DST indicator, leap second warning and DUT1 correction. In this
|
||||
design, an average value larger than a positive threshold is interpreted
|
||||
as a hit on one and a value smaller than a negative threshold as a hit
|
||||
on zero. Values between the two thresholds, which can occur due to
|
||||
signal fades or loss of signal, are interpreted as a miss, and result in
|
||||
no change of indication.
|
||||
|
||||
<p>The BCD digit in each digit position of the timecode is represented
|
||||
as four data bits, all of which must be valid for the digit itself to be
|
||||
considered valid. If so, the bits are correlated with the bits
|
||||
corresponding to each of the valid decimal digits in this position. If
|
||||
the digit is invalid, the correlated value for all digits in this
|
||||
position is assumed zero. In either case, the values for all digits are
|
||||
exponentially averaged in a likelihood vector associated with this
|
||||
position. The digit associated with the maximum over all of the averaged
|
||||
values then becomes the maximum likelihood selection for this position
|
||||
and the ratio of the maximum over the next lower value becomes the
|
||||
likelihood ratio.
|
||||
|
||||
<p>The decoding matrix contains nine row vectors, one for each digit
|
||||
position. Each row vector includes the maximum likelihood digit,
|
||||
likelihood vector and other related data. The maximum likelihood digit
|
||||
for each of the nine digit positions becomes the maximum likelihood time
|
||||
of the century. A built-in transition function implements a conventional
|
||||
clock with decimal digits that count the minutes, hours, days and years,
|
||||
as corrected for leap seconds and leap years. The counting operation
|
||||
also rotates the likelihood vector corresponding to each digit as it
|
||||
advances. Thus, once the clock is set, each clock digit should
|
||||
correspond to the maximum likelihood digit as transmitted.
|
||||
|
||||
<p>Each row of the decoding matrix also includes a compare counter and
|
||||
the difference (modulo the radix) between the current clock digit and
|
||||
most recently determined maximum likelihood digit. If a digit likelihood
|
||||
exceeds the decision level and the difference is constant for a number
|
||||
of successive minutes in any row, the maximum likelihood digit replaces
|
||||
the clock digit in that row. When this condition is true for all rows
|
||||
and the second epoch has been reliably determined, the clock is set (or
|
||||
verified if it has already been set) and delivers correct time to the
|
||||
integral second. The fraction within the second is derived from the
|
||||
logical master clock, which runs at 8000 Hz and drives all system timing
|
||||
functions.
|
||||
|
||||
<p>The logical master clock is derived from the audio codec clock. Its
|
||||
frequency is disciplined by a frequency-lock loop (FLL) which operates
|
||||
independently of the data recovery functions. At averaging intervals
|
||||
determined by the measured jitter, the frequency error is calculated as
|
||||
the difference between the most recent and the current second epoch
|
||||
divided by the interval. The sample clock frequency is then corrected by
|
||||
this amount using an exponential average. When first started, the
|
||||
frequency averaging interval is eight seconds, in order to compensate
|
||||
for intrinsic codec clock frequency offsets up to 125 PPM. Under most
|
||||
conditions, the averaging interval doubles in stages from the initial
|
||||
value to over 1000 seconds, which results in an ultimate frequency
|
||||
precision of 0.125 PPM, or about 11 ms/day.
|
||||
|
||||
<p>It is important that the logical clock frequency is stable and
|
||||
accurately determined, since in most applications the shortwave radio
|
||||
will be tuned to a fixed frequency where WWV or WWVH signals are not
|
||||
available throughout the day. In addition, in some parts of the US,
|
||||
especially on the west coast, signals from either or both WWV and WWVH
|
||||
may be available at different times or even at the same time. Since the
|
||||
propagation times from either station are almost always different, each
|
||||
station must be reliably identified before attempting to set the clock.
|
||||
|
||||
<p>Station identification uses the 800-ms minute pulse transmitted by
|
||||
each station. In the acquisition phase the entire minute is searched
|
||||
using both the WWV and WWVH using matched filters and a pulse gate
|
||||
discriminator similar to that found in radar acquisition and tracking
|
||||
receivers. The peak amplitude found determines a range gate and window
|
||||
where the next pulse is expected to be found. The minute is scanned
|
||||
again to verify the peak is indeed in the window and with acceptable
|
||||
amplitude, SNR and jitter. At this point the receiver begins to track
|
||||
the second sync pulse and operate as above until the clock is set.
|
||||
|
||||
<p>Once the minute is synchronized, the range gate is fixed and only
|
||||
energy within the window is considered for the minute sync pulse. A
|
||||
compare counter increments by one if the minute pulse has acceptable
|
||||
amplitude, SNR and jitter and decrements otherwise. This is used as a
|
||||
quality indicator and reported in the timecode and also for the autotune
|
||||
function described below.
|
||||
|
||||
<h4>Performance</h4>
|
||||
|
||||
<p>It is the intent of the design that the accuracy and stability of the
|
||||
indicated time be limited only by the characteristics of the propagation
|
||||
medium. Conventional wisdom is that synchronization via the HF medium is
|
||||
good only to a millisecond under the best propagation conditions. The
|
||||
performance of the NTP daemon disciplined by the driver is clearly
|
||||
better than this, even under marginal conditions. Ordinarily, with
|
||||
marginal to good signals and a frequency averaging interval of 1024 s,
|
||||
the frequency is stabilized within 0.1 PPM and the time within 125 <font
|
||||
face=Symbol>m</font>s. The frequency stability characteristic is highly
|
||||
important, since the clock may have to free-run for several hours before
|
||||
reacquiring the WWV/H signal.
|
||||
|
||||
<p>The expected accuracy over a typical day was determined using the
|
||||
DSP93 and an oscilloscope and cesium oscillator calibrated with a GPS
|
||||
receiver. With marginal signals and allowing 15 minutes for initial
|
||||
synchronization and frequency compensation, the time accuracy determined
|
||||
from the WWV/H second sync pulse was reliably within 125 <font
|
||||
face=Symbol>m</font>s. In the particular DSP-93 used for program
|
||||
development, the uncorrected CPU clock frequency offset was
|
||||
45.8±0.1 PPM. Over the first hour after initial synchronization,
|
||||
the clock frequency drifted about 1 PPM as the frequency averaging
|
||||
interval increased to the maximum 1024 s. Once reaching the maximum, the
|
||||
frequency wandered over the day up to 1 PPM, but it is not clear whether
|
||||
this is due to the stability of the DSP-93 clock oscillator or the
|
||||
changing height of the ionosphere. Once the frequency had stabilized and
|
||||
after loss of the WWV/H signal, the frequency drift was less than 0.5
|
||||
PPM, which is equivalent to 1.8 ms/h or 43 ms/d. This resulted in a step
|
||||
phase correction up to several milliseconds when the signal returned.
|
||||
|
||||
<p>The measured propagation delay from the WWV transmitter at Boulder,
|
||||
CO, to the receiver at Newark, DE, is 23.5±0.1 ms. This is
|
||||
measured to the peak of the pulse after the second sync comb filter and
|
||||
includes components due to the ionospheric propagation delay, nominally
|
||||
8.9 ms, communications receiver delay and program delay. The propagation
|
||||
delay can be expected to change about 0.2 ms over the day, as the result
|
||||
of changing ionosphere height. The DSP93 program delay was measured at
|
||||
5.5 ms, most of which is due to the 400-Hz bandpass filter and 5-ms
|
||||
matched filter. Similar delays can be expected of this driver.
|
||||
|
||||
<h4>Program Operation</h4>
|
||||
|
||||
The driver begins operation immediately upon startup. It first searches
|
||||
for one or both of the stations WWV and WWVH and attempts to acquire
|
||||
minute sync. This may take some fits and starts, as the driver expects
|
||||
to see three consecutive minutes with good signals and low jitter. If
|
||||
the autotune function is active, the driver will rotate over all five
|
||||
frequencies and both WWV and WWVH stations until three good minutes are
|
||||
found.
|
||||
|
||||
<p>The driver then acquires second sync, which can take up to several
|
||||
minutes, depending on signal quality. At the same time the driver
|
||||
accumulates likelihood values for each of the nine digits of the clock,
|
||||
plus the seven miscellaneous bits included in the WWV/H transmission
|
||||
format. The minute units digit is decoded first and, when five
|
||||
repetitions have compared correctly, the remaining eight digits are
|
||||
decoded. When five repetitions of all nine digits have decoded
|
||||
correctly, which normally takes 15 minutes with good signals and up to
|
||||
an hour when buried in noise, and the second sync alarm has not been
|
||||
raised for two minutes, the clock is set (or verified) and is selectable
|
||||
to discipline the system clock.
|
||||
|
||||
<p>As long as the clock is set or verified, the system clock offsets are
|
||||
provided once each second to the reference clock interface, where they
|
||||
are saved in a buffer. At the end of each minute, the buffer samples are
|
||||
groomed by the median filter and trimmed-mean averaging functions. Using
|
||||
these functions, the system clock can in principle be disciplined to a
|
||||
much finer resolution than the 125-<font face=Symbol>m</font>s sample
|
||||
interval would suggest, although the ultimate accuracy is probably
|
||||
limited by propagation delay variations as the ionspheric height varies
|
||||
throughout the day and night.
|
||||
|
||||
<p>As long as signals are available, the clock frequency is disciplined
|
||||
for use during times when the signals are unavailable. The algorithm
|
||||
refines the frequency offset using increasingly longer averaging
|
||||
intervals to 1024 s, where the precision is about 0.1 PPM. With good
|
||||
signals, it takes well over two hours to reach this degree of precision;
|
||||
however, it can take many more hours than this in case of marginal
|
||||
signals. Once reaching the limit, the algorithm will follow frequency
|
||||
variations due to temperature fluctuations and ionospheric height
|
||||
variations.
|
||||
|
||||
<p>It may happen as the hours progress around the clock that WWV and
|
||||
WWVH signals may appear alone, together or not at all. When the driver
|
||||
is first started, the NTP reference identifier appears as <tt>NONE</tt>.
|
||||
When the driver has acquired one or both stations and mitigated which
|
||||
one is best, it sets the station identifier in the timecode as described
|
||||
below. In addition, the NTP reference identifier is set to the station
|
||||
callsign. If the propagation delays has been properly set with the
|
||||
<tt>fudge time1</tt> (WWV) and <tt>fudge time2</tt> (WWVH) commands in
|
||||
the configuration file, handover from one station to the other will be
|
||||
seamless.
|
||||
|
||||
<p>Once the clock has been set for the first time, it will appear
|
||||
reachable and selectable to discipline the system clock, even if the
|
||||
broadcast signal fades to obscurity. A consequence of this design is
|
||||
that, once the clock is set, the time and frequency are disciplined only
|
||||
by the second sync pulse and the clock digits themselves are driven by
|
||||
the clock state machine and ordinarily never changed. However, as long
|
||||
as the clock is set correctly, it will continue to read correctly after
|
||||
a period of signal loss, as long as it does not drift more than 500 ms
|
||||
from the correct time. Assuming the clock frequency can be disciplined
|
||||
within 1 PPM, the clock could coast without signals for some 5.8 days
|
||||
without exceeding that limit. If for some reason this did happen, the
|
||||
clock would be in the wrong second and would never resynchronize. To
|
||||
protect against this most unlikely situation, if after four days with no
|
||||
signals, the clock is considered unset and resumes the synchronization
|
||||
procedure from the beginning.
|
||||
|
||||
<p>To work well, the driver needs a communications receiver with good
|
||||
audio response at 100 Hz. Most shortwave and communications receivers
|
||||
roll off the audio response below 250 Hz, so this can be a problem,
|
||||
especially with receivers using DSP technology, since DSP filters can
|
||||
have very fast rolloff outside the passband. Some DSP transceivers, in
|
||||
particular the ICOM 775, have a programmable low frequency cutoff which
|
||||
can be set as low as 80 Hz. However, this particular radio has a strong
|
||||
low frequency buzz at about 10 Hz which appears in the audio output and
|
||||
can affect data recovery under marginal conditions. Although not tested,
|
||||
it would seem very likely that a cheap shortwave receiver could function
|
||||
just as well as an expensive communications receiver.
|
||||
|
||||
<h4>Autotune</h4>
|
||||
|
||||
<p>The driver includes provisions to automatically tune the radio in
|
||||
response to changing radio propagation conditions throughout the day and
|
||||
night. The radio interface is compatible with the ICOM CI-V standard,
|
||||
which is a bidirectional serial bus operating at TTL levels. The bus can
|
||||
be connected to a serial port using a level converter such as the CT-17.
|
||||
The serial port speed is presently compiled in the program, but can be
|
||||
changed in the driver source file.
|
||||
|
||||
<p>Each ICOM radio is assigned a unique 8-bit ID select code, usually
|
||||
expressed in hex format. To activate the CI-V interface, the
|
||||
<tt>mode</tt> keyword of the <tt>server</tt> configuration command
|
||||
specifies a nonzero select code in decimal format. A table of ID select
|
||||
codes for the known ICOM radios is given below. A missing <tt>mode</tt>
|
||||
keyword or a zero argument leaves the interface disabled. The driver
|
||||
will attempt to open the device <tt>/dev/icom</tt> and, if successful
|
||||
will activate the autotune function and tune the radio to each operating
|
||||
frequency in turn while attempting to acquire minute sync from either
|
||||
WWV or WWVH. However, the driver is liberal in what it assumes of the
|
||||
configuration. If the <tt>/dev/icom</tt> link is not present or the open
|
||||
fails or the CI-V bus or radio is inoperative, the driver quietly gives
|
||||
up with no harm done.
|
||||
|
||||
<p>Once acquiring minute sync, the driver operates as described above to
|
||||
set the clock. However, during seconds 59, 0 and 1 of each minute it
|
||||
tunes the radio to one of the five broadcast frequencies to measure the
|
||||
sync pulse and data pulse amplitudes and SNR and update the compare
|
||||
counter. Each of the five frequencies are probed in a five-minute
|
||||
rotation to build a database of current propagation conditions for all
|
||||
signals that can be heard at the time. At the end of each rotation, a
|
||||
mitigation procedure scans the database and retunes the radio to the
|
||||
best frequency and station found. For this to work well, the radio
|
||||
should be set for a fast AGC recovery time. This is most important while
|
||||
tracking a strong signal, which is normally the case, and then probing
|
||||
another frequency, which may have much weaker signals.
|
||||
|
||||
<p>Reception conditions for each frequency and station are evaluated
|
||||
according to a metric which considers the minute sync pulse amplitude,
|
||||
SNR and jitter, as well as, the data pulse amplitude and SNR. The minute
|
||||
pulse is evaluated at second 0, while the data pulses are evaluated at
|
||||
seconds 59 and 1. The results are summarized in a scoreboard of three
|
||||
bits
|
||||
|
||||
<dl>
|
||||
|
||||
<p><dt><tt>0x0001</tt>
|
||||
<dd>Jitter exceeded. The difference in epoches between the last minute
|
||||
sync pulse and the current one exceeds 50 ms (400 samples).</dd>
|
||||
|
||||
<dt><tt>0x0002</tt>
|
||||
<dd>Minute pulse error. For the minute sync pulse in second 0, either
|
||||
the amplitude or SNR is below threshold (2000 and 20 dB,
|
||||
respectively).</dd>
|
||||
|
||||
<dt><tt>0x0004</tt>
|
||||
<dd>Minute pulse error. For both of the data pulses in seocnds 59 and 1,
|
||||
either the amplitude or SNR is below threshold (1000 and 10 dB,
|
||||
respectively).</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<p>If none of the scoreboard bits are set, the compare counter is
|
||||
increased by one to a maximum of six. If any bits are set, the counter
|
||||
is decreased by one to a minimum of zero. At the end of each minute, the
|
||||
frequency and station with the maximum compare count is chosen, with
|
||||
ties going to the highest frequency.
|
||||
|
||||
<h4>Diagnostics</h4>
|
||||
|
||||
<p>The autotune process produces diagnostic information along with the
|
||||
timecode. This is very useful for evaluating the performance of the
|
||||
algorithm, as well as radio propagation conditions in general. The
|
||||
message is produced once each minute for each frequency in turn after
|
||||
minute sync has been acquired.
|
||||
|
||||
<p><tt>wwv5 port agc wwv wwvh</tt>
|
||||
|
||||
<p>where <tt>port</tt> and <tt>agc</tt> are the audio port and gain,
|
||||
respectively, for this frequency and <tt>wwv</tt> and <tt>wwvh</tt> are
|
||||
two sets of fields, one each for WWV and WWVH. Each of the two fields
|
||||
has the format
|
||||
|
||||
<p><tt>ident score comp sync/snr/jitr</tt>
|
||||
|
||||
<p>where <tt>ident</tt>encodes the station (<tt>C</tt> for WWV,
|
||||
<tt>H</tt> for WWVH) and frequency (2, 5, 10, 15 and 20), <tt>score</tt>
|
||||
is the scoreboard described above, <tt>comp</tt> is the compare counter,
|
||||
<tt>sync</tt> is the minute sync pulse amplitude, <tt>snr</tt> the SNR
|
||||
of the pulse and <tt>jitr</tt> is the sample difference between the
|
||||
current epoch and the last epoch. An example is:
|
||||
|
||||
<p><tt>wwv5 2 111 C20 0100 6 8348/30.0/-3 H20 0203 0 22/-12.4/8846</tt>
|
||||
|
||||
<p>Here the radio is tuned to 20 MHz and the line-in port AGC is
|
||||
currently 111 at that frequency. The message contains a report for WWV
|
||||
(<tt>C20</tt>) and WWVH (<tt>H20</tt>). The WWV report scoreboard is
|
||||
0100 and the compare count is 6, which suggests very good reception
|
||||
conditions, and the minute sync amplitude and SNR are well above
|
||||
thresholds (2000 and 20 dB, respectively). Probably the most sensitive
|
||||
indicator of reception quality is the jitter, -3 samples, which is well
|
||||
below threshold (50 ms or 400 samples). While the message shows solid
|
||||
reception conditions from WWV, this is not the case for WWVH. Both the
|
||||
minute sync amplitude and SNR are below thresholds and the jitter is
|
||||
above threshold.
|
||||
|
||||
<p>A sequence of five messages, one for each minute, might appear as
|
||||
follows:
|
||||
|
||||
<p><pre>wwv5 2 95 C2 0107 0 164/7.2/8100 H2 0207 0 80/-5.5/7754
|
||||
wwv5 2 99 C5 0104 0 3995/21.8/395 H5 0207 0 27/-9.3/18826
|
||||
wwv5 2 239 C10 0105 0 9994/30.0/2663 H10 0207 0 54/-16.1/-529
|
||||
wwv5 2 155 C15 0103 3 3300/17.8/-1962 H15 0203 0 236/17.0/4873
|
||||
wwv5 2 111 C20 0100 6 8348/30.0/-3 H20 0203 0 22/-12.4/8846</pre>
|
||||
|
||||
<p>Clearly, the only frequencies that are available are 15 MHz and 20
|
||||
MHz and propagation may be failing for 15 MHz. However, minute sync
|
||||
pulses are being heard on 5 and 10 MHz, even though the data pulses are
|
||||
not. This is typical of late afternoon when the maximum usable frequency
|
||||
(MUF) is falling and the ionospheric loss at the lower frequencies is
|
||||
beginning to decrease.
|
||||
|
||||
<h4>Debugging Aids</h4>
|
||||
|
||||
<p>The most convenient way to track the driver status is using the
|
||||
<tt>ntpq</tt> program and the <tt>clockvar</tt> command. This displays
|
||||
the last determined timecode and related status and error counters, even
|
||||
when the driver is not discipline the system clock. If the debugging
|
||||
trace feature (<tt>-d</tt> on the <tt>ntpd</tt> command line)is enabled,
|
||||
the driver produces detailed status messages as it operates. If the
|
||||
<tt>fudge flag 4</tt> is set, these messages are written to the
|
||||
<tt>clockstats</tt> file. All messages produced by this driver have the
|
||||
prefix <tt>chu</tt> for convenient filtering with the Unix <tt>grep</tt>
|
||||
command.
|
||||
|
||||
<p>In the following descriptions the units of amplitude, phase,
|
||||
probability and likelihood are normalized to the range 0-6000 for
|
||||
convenience. In addition, the signal/noise ratio (SNR) and likelihood
|
||||
ratio are measured in decibels and the words with bit fields are in
|
||||
hex. Most messages begin with a leader in the following format:
|
||||
|
||||
<p><tt>wwvn ss stat sigl</tt>
|
||||
|
||||
<p>where <tt>wwvn</tt> is the message code, <tt>ss</tt> the second of
|
||||
minute, <tt>stat</tt> the driver status word and <tt>sigl</tt> the
|
||||
second sync pulse amplitude. A full explanation of the status bits is
|
||||
contained in the driver source listing; however, the following are the
|
||||
most useful for debugging.
|
||||
|
||||
<dl>
|
||||
|
||||
<p><dt><tt>0x0001</tt>
|
||||
<dd>Minute sync. Set when the decoder has identified a station and
|
||||
acquired the minute sync pulse.</dd>
|
||||
<p><dt><tt>0x0002</tt>
|
||||
<dd>Second sync. Set when the decoder has acquired the second sync pulse
|
||||
and within 125 <font face=Symbol>m</font>s of the correct phase.</dd>
|
||||
|
||||
<p><dt><tt>0x0004</tt>
|
||||
<dd>Minute unit sync. Set when the decoder has reliably determined the
|
||||
unit digit of the minute.</dd>
|
||||
|
||||
<p><dt><tt>0x0008</tt>
|
||||
<dd>Clock set. Set when the decoder has reliably determined all nine
|
||||
digits of the timecode and is selectable to discipline the system
|
||||
clock.</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<p>With debugging enabled the driver produces messages in the following
|
||||
formats:
|
||||
|
||||
<p>Format <tt>wwv8</tt> messages are produced once per minute by the WWV
|
||||
and WWVH station processes before minute sync has been acquired. They
|
||||
show the progress of identifying and tracking the minute pulse of each
|
||||
station.
|
||||
|
||||
<p><tt>wwv8 port agc ident comp ampl snr epoch jitr offs</tt>
|
||||
|
||||
<p>where <tt>port</tt> and <tt>agc</tt> are the audio port and gain,
|
||||
respectively. The <tt>ident</tt>encodes the station (<tt>C</tt> for WWV,
|
||||
<tt>H</tt> for WWVH) and frequency (2, 5, 10, 15 and 20). For the
|
||||
encoded frequency, <tt>comp</tt> is the compare counter, <tt>ampl</tt>
|
||||
the pulse amplitude, <tt>snr</tt> the SNR, <tt>epoch</tt> the sample
|
||||
number of the minute pulse in the minute, <tt>jitr</tt> the change since
|
||||
the last <tt>epoch</tt> and <tt>offs</tt> the minute pulse offset
|
||||
relative to the second pulse. An example is:
|
||||
|
||||
<p><tt> wwv8 2 127 C15 2 9247 30.0 18843 -1 1</tt>
|
||||
<br><tt>wwv8 2 127 H15 0 134 -2.9 19016 193 174</tt>
|
||||
|
||||
<p>Here the radio is tuned to 15 MHz and the line-in port AGC is
|
||||
currently 127 at that frequency. The driver has not yet acquired minute
|
||||
sync, WWV has been heard for at least two minutes, and WWVH is in the
|
||||
noise. The WWV minute pulse amplitude and SNR are well above the
|
||||
threshold (2000 and 6 dB, respectively) and the minute epoch has been
|
||||
determined -1 sample relative to the last one and 1 sample relative to
|
||||
the second sync pulse. The compare counter has incrmented to two; when
|
||||
it gets to three, minute sync has been acquired.
|
||||
|
||||
<p>Format <tt>wwv3</tt> messages are produced after minute sync has been
|
||||
acquired and until the seconds unit digit is determined. They show the
|
||||
results of decoding each bit of the transmitted timecode.
|
||||
|
||||
<p><tt>wwv3 ss stat sigl ampl phas snr prob like</tt>
|
||||
|
||||
<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
|
||||
<tt>ampl</tt> is the subcarrier amplitude, <tt>phas</tt> the subcarrier
|
||||
phase, <tt>snr</tt> the subcarrier SNR, <tt>prob</tt> the bit
|
||||
probability and <tt>like</tt> the bit likelihood. An example is:
|
||||
|
||||
<p><tt>wwv3 28 0123 4122 4286 0 24.8 -5545 -1735</tt>
|
||||
|
||||
<p>Here the driver has acquired minute and second sync, but has not yet
|
||||
determined the seconds unit digit. However, it has just decoded bit 28
|
||||
of the minute. The results show the second sync pulse amplitude well
|
||||
over the threshold (500), subcarrier amplitude well above the threshold
|
||||
(1000), good subcarrier tracking phase and SNR well above the threshold
|
||||
(10 dB). The bit is almost certainly a zero and the likelihood of a zero
|
||||
in this second is very high.
|
||||
<p>Format <tt>wwv4</tt> messages are produced for each of the nine BCD
|
||||
timecode digits until the clock has been set or verified. They show the
|
||||
results of decoding each digit of the transmitted timecode.
|
||||
<p><tt>wwv4 ss stat sigl radx ckdig mldig diff cnt like snr</tt>
|
||||
|
||||
<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
|
||||
<tt>radx</tt> is the digit radix (3, 4, 6, 10), <tt>ckdig</tt> the
|
||||
current clock digit, <tt>mldig</tt> the maximum likelihood digit,
|
||||
<tt>diff</tt> the difference between these two digits modulo the radix,
|
||||
<tt>cnt</tt> the compare counter, <tt>like</tt> the digit likelihood and
|
||||
<tt>snr</tt> the likelihood ratio. An example is:
|
||||
|
||||
<p><tt>wwv4 8 010f 5772 10 9 9 0 6 4615 6.1</tt>
|
||||
|
||||
<p>Here the driver has previousl set or verified the clock. It has just
|
||||
decoded the digit preceding second 8 of the minute. The digit radix is
|
||||
10, the current clock and maximum likelihood digits are both 9, the
|
||||
likelihood is well above the threshold (1000) and the likelihood
|
||||
function well above threshold (3.0 dB). Short of a hugely unlikely
|
||||
probability conspiracy, the clock digit is most certainly a 9.
|
||||
|
||||
<p>Format <tt>wwv2</tt> messages are produced at each master oscillator
|
||||
frequency update, which starts at 8 s, but eventually climbs to 1024 s.
|
||||
They show the progress of the algorithm as it refines the frequency
|
||||
measurement to a precision of 0.1 PPM.
|
||||
|
||||
<p><tt>wwv2 ss stat sigl avint avcnt avinc jitr delt freq</tt>
|
||||
|
||||
<p>where <tt>ss</tt>, <tt>stat</tt> and <tt>sigl</tt> are as above,
|
||||
<tt>avint</tt> is the averaging interval, <tt>avcnt</tt> the averaging
|
||||
interval counter, <tt>avinc</tt> the interval increment, <tt>jitr</tt>
|
||||
the sample change between the beginning and end of the interval,
|
||||
<tt>delt</tt> the computed frequency change and <tt>freq</tt> the
|
||||
current frequency (PPM). An example is:
|
||||
|
||||
<p><tt>wwv2 22 030f 5795 256 256 4 0 0.0 66.7</tt>
|
||||
|
||||
<p>Here the driver has acquired minute and second sync and set the
|
||||
clock. The averaging interval has increased to 256 s on the way to 1024
|
||||
s, has stayed at that interval for 4 averaging intervals, has measured
|
||||
no change in frequency and the current frequency is 66.7 PPM.
|
||||
|
||||
<p>If the CI-V interface for ICOM radios is active, a debug level
|
||||
greater than 1 will produce a trace of the CI-V command and response
|
||||
messages. Interpretation of these messages requires knowledge of the
|
||||
CI-V protocol, which is beyond the scope of this document.
|
||||
|
||||
<h4>Monitor Data</h4>
|
||||
|
||||
When enabled by the <tt>filegen</tt> facility, every received timecode
|
||||
is written to the <tt>clockstats</tt> file in the following format:
|
||||
|
||||
<pre>
|
||||
sq yy ddd hh:mm:ss.fff ld du lset agc stn rfrq errs freq cons
|
||||
|
||||
s sync indicator
|
||||
q quality character
|
||||
yyyy Gregorian year
|
||||
ddd day of year
|
||||
hh hour of day
|
||||
mm minute of hour
|
||||
fff millisecond of second
|
||||
l leap second warning
|
||||
d DST state
|
||||
dut DUT sign and magnitude
|
||||
lset minutes since last set
|
||||
agc audio gain
|
||||
ident station identifier and frequency
|
||||
comp minute sync compare counter
|
||||
errs bit error counter
|
||||
freq frequency offset
|
||||
avgt averaging time
|
||||
</pre>
|
||||
|
||||
The fields beginning with <tt>year</tt> and extending through
|
||||
<tt>dut</tt> are decoded from the received data and are in fixed-length
|
||||
format. The <tt>agc</tt> and <tt>lset</tt> fields, as well as the
|
||||
following driver-dependent fields, are in variable-length format.
|
||||
|
||||
<dl>
|
||||
|
||||
<dt><tt>s</tt>
|
||||
<dd>The sync indicator is initially <tt>?</tt> before the clock is set,
|
||||
but turns to space when all nine digits of the timecode are correctly
|
||||
set.</dd>
|
||||
|
||||
<dt><tt>q</tt>
|
||||
<dd>The quality character is a four-bit hexadecimal code showing which
|
||||
alarms have been raised. Each bit is associated with a specific alarm
|
||||
condition according to the following:
|
||||
<dl>
|
||||
|
||||
<dt><tt>0x8</tt>
|
||||
<dd>Sync alarm. The decoder may not be in correct second or minute phase
|
||||
relative to the transmitter.</dd>
|
||||
|
||||
<dt><tt>0x4</tt>
|
||||
<dd>Error alarm. More than 30 data bit errors occurred in the last
|
||||
minute.</dd>
|
||||
|
||||
<dt><tt>0x2</tt>
|
||||
<dd>Symbol alarm. The probability of correct decoding for a digit or
|
||||
miscellaneous bit has fallen below the threshold.</dd>
|
||||
|
||||
<dt><tt>0x1</tt>
|
||||
<dd>Decoding alarm. A maximum likelihood digit fails to agree with the
|
||||
current associated clock digit.</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
It is important to note that one or more of the above alarms does not
|
||||
necessarily indicate a clock error, but only that the decoder has
|
||||
detected a condition that may in future result in an error.
|
||||
|
||||
<dt><tt>yyyy ddd hh:mm:ss.fff</tt></tt>
|
||||
<dd>The timecode format itself is self explanatory. Since the driver
|
||||
latches the on-time epoch directly from the second sync pulse, the
|
||||
fraction <tt>fff</tt>is always zero. Although the transmitted timecode
|
||||
includes only the year of century, the Gregorian year is augmented 2000
|
||||
if the indicated year is less than 72 and 1900 otherwise.</dd>
|
||||
|
||||
<dt><tt>l</tt>
|
||||
<dd>The leap second warning is normally space, but changes to <tt>L</tt>
|
||||
if a leap second is to occur at the end of the month of June or
|
||||
December.</dd>
|
||||
|
||||
<dt><tt>d</tt>
|
||||
<dd>The DST state is <tt>S</tt> or <tt>D</tt> when standard time or
|
||||
daylight time is in effect, respectively. The state is <tt>I</tt> or
|
||||
<tt>O</tt> when daylight time is about to go into effect or out of
|
||||
effect, respectively.</dd>
|
||||
<dt><tt>dut</tt>
|
||||
<dd>The DUT sign and magnitude shows the current UT1 offset relative to
|
||||
the displayed UTC time, in deciseconds.</dd>
|
||||
|
||||
<dt><tt>lset</tt>
|
||||
<dd>Before the clock is set, the interval since last set is the number
|
||||
of minutes since the driver was started; after the clock is set, this
|
||||
is number of minutes since the time was last verified relative to the
|
||||
broadcast signal.</dd>
|
||||
|
||||
<dt><tt>agc</tt>
|
||||
<dd>The audio gain shows the current codec gain setting in the range 0
|
||||
to 255. Ordinarily, the receiver audio gain control or IRIG level
|
||||
control should be set for a value midway in this range.
|
||||
|
||||
<dt><tt>ident</tt>
|
||||
<dd>The station identifier shows the station, <tt>C</tt> for WWV or
|
||||
<tt>H</tt> for WWVH, and frequency being tracked. If neither station is
|
||||
heard on any frequency, the station identifier shows <tt>X</tt>.</dd>
|
||||
|
||||
<dt><tt>comp</tt>
|
||||
<dd>The minute sync compare counter is useful to determine the quality
|
||||
of the minute sync signal and can range from 0 (no signal) to 5
|
||||
(best).</dd>
|
||||
|
||||
<dt><tt>errs</tt>
|
||||
<dd>The bit error counter is useful to determine the quality of the data
|
||||
signal received in the most recent minute. It is normal to drop a couple
|
||||
of data bits under good signal conditions and increasing numbers as
|
||||
conditions worsen. While the decoder performs moderately well even with
|
||||
half the bits are in error in any minute, usually by that point the sync
|
||||
signals are lost and the decoder reverts to free-run anyway.</dd>
|
||||
|
||||
<dt><tt>freq</tt>
|
||||
<dd>The frequency offset is the current estimate of the codec frequency
|
||||
offset to within 0.1 PPM. This may wander a bit over the day due to
|
||||
local temperature fluctuations and propagation conditions.</dd>
|
||||
|
||||
<dt><tt>avgt</tt>
|
||||
<dd>The averaging time is the interval between frequency updates in
|
||||
powers of two to a maximum of 1024 s. Attainment of the maximum
|
||||
indicates the driver is operating at the best possible resolution in
|
||||
time and frequency.</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
<p>An example timecode is:
|
||||
|
||||
<p><tt> 0 2000 006 22:36:00.000 S +3 1 115 C20 6 5 66.4 1024</tt>
|
||||
|
||||
<p>Here the clock has been set and no alarms are raised. The year, day
|
||||
and time are displayed along with no leap warning, standard time and DUT
|
||||
+0.3 s. The clock was set on the last minute, the AGC is safely in the
|
||||
middle ot the range 0-255, and the receiver is tracking WWV on 20 MHz.
|
||||
Excellent reeiving conditions prevail, as indicated by the compare count
|
||||
6 and 5 bit errors during the last minute. The current frequency is 66.4
|
||||
PPM and the averaging interval is 1024 s, indicating the maximum
|
||||
precision available.
|
||||
|
||||
<h4>Modes</h4>
|
||||
|
||||
<p>The <tt>mode</tt> keyword of the <tt>server</tt> configuration
|
||||
command specifies the ICOM ID select code. A missing or zero argument
|
||||
disables the CI-V interface. Following are the ID select codes for the
|
||||
known radios.
|
||||
<p><table cols=6 width=100%>
|
||||
|
||||
<tr>
|
||||
<td>Radio</td>
|
||||
<td>Hex</td>
|
||||
<td>Decimal</td>
|
||||
<td>Radio</td>
|
||||
<td>Hex</td>
|
||||
<td>Decimal</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC725</td>
|
||||
<td>0x28</td>
|
||||
<td>40</td>
|
||||
<td>IC781</td>
|
||||
<td>0x26</td>
|
||||
<td>38</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC726</td>
|
||||
<td>0x30</td>
|
||||
<td>48</td>
|
||||
<td>R7000</td>
|
||||
<td>0x08</td>
|
||||
<td>8</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC735</td>
|
||||
<td>0x04</td>
|
||||
<td>4</td>
|
||||
<td>R71</td>
|
||||
<td>0x1A</td>
|
||||
<td>26</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IC751</td>
|
||||
<td>0x1c</td>
|
||||
<td>28</td>
|
||||
<td>R7100</td>
|
||||
<td>0x34</td>
|
||||
<td>52</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>IC761</td>
|
||||
<td>0x1e</td>
|
||||
<td>30</td>
|
||||
<td>R72</td>
|
||||
<td>0x32</td>
|
||||
<td>50</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC765</td>
|
||||
<td>0x2c</td>
|
||||
<td>44</td>
|
||||
<td>R8500</td>
|
||||
<td>0x4a</td>
|
||||
<td>74</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC775</td>
|
||||
<td>0x46</td>
|
||||
<td>68</td>
|
||||
<td>R9000</td>
|
||||
<td>0x2a</td>
|
||||
<td>42</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<h4>Fudge Factors</h4>
|
||||
|
||||
<dl>
|
||||
|
||||
<dt><tt>time1 <I>time</I></tt></dt>
|
||||
<dd>Specifies the propagation delay for WWV (40:40:49.0N 105:02:27.0W),
|
||||
in seconds and fraction, with default 0.0.dd>
|
||||
|
||||
<dt><tt>time2 <I>time</I></tt></dt>
|
||||
<dd>Specifies the propagation delay for WWVH (21:59:26.0N 159:46:00.0W),
|
||||
in seconds and fraction, with default 0.0.
|
||||
</dd>
|
||||
|
||||
<dt><tt>stratum <I>number</I></tt></dt>
|
||||
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default
|
||||
0.</dd>
|
||||
|
||||
<dt><tt>refid <I>string</I></tt></dt>
|
||||
<dd>Ordinarily, this field specifies the driver reference identifier;
|
||||
however, the driver sets the reference identifier automatically as
|
||||
described above.
|
||||
<dt><tt>flag1 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag2 0 | 1</tt></dt>
|
||||
<dd>Specifies the microphone port if set to zero or the line-in port if
|
||||
set to one. It does not seem useful to specify the compact disc player
|
||||
port.</dd>
|
||||
<dt><tt>flag3 0 | 1</tt></dt>
|
||||
<dd>Enables audio monitoring of the input signal. For this purpose, the
|
||||
speaker volume must be set before the driver is started.</dd>
|
||||
|
||||
<dt><tt>flag4 0 | 1</tt></dt>
|
||||
<dd>Enable verbose <tt>clockstats</tt> recording if set.</dd>
|
||||
</dl>
|
||||
<h4>Additional Information</h4>
|
||||
|
||||
<A HREF="refclock.htm">Reference Clock Drivers</A>
|
||||
<br><A HREF="audio.htm">Reference Clock Audio Drivers</A>
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
75
contrib/ntp/html/driver37.htm
Normal file
75
contrib/ntp/html/driver37.htm
Normal file
@ -0,0 +1,75 @@
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
||||
<html>
|
||||
<head>
|
||||
<title>Forum Graphic GPS Dating station</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h3>Forum Graphic GPS Dating station</h3>
|
||||
<hr>
|
||||
|
||||
<h4>Synopsis</h4>
|
||||
|
||||
<p>Address: 127.127.37.<i>u</i><br>
|
||||
Reference ID: <tt>GPS</tt><br>
|
||||
Driver ID: <tt>GPS</tt><br>
|
||||
Parallel Port: <tt>/dev/fgclock<i>u</i></tt>
|
||||
</p>
|
||||
|
||||
<h4>Description</h4>
|
||||
|
||||
<p>This driver supports the Forum Graphic GPS Dating station sold by <a
|
||||
href="http://www.emr.fr/gpsclock.htm">EMR company</a>.
|
||||
|
||||
<p>Unfortunately sometime FG GPS start continues reporting of the same
|
||||
date. The only way to fix this problem is GPS power cycling and ntpd
|
||||
restart after GPS power-up.
|
||||
</P>
|
||||
After Jan,10 2000 my FG GPS unit start send a wrong answer after 10:00am
|
||||
till 11:00am. It repeat hour value in result string twice. I wroite a small
|
||||
code to avoid such problem. Unfortunately I have no second FG GPS unit
|
||||
to evaluate this problem. Please let me know if your GPS has no problems
|
||||
after Y2K.
|
||||
<p>
|
||||
|
||||
<h4>Monitor Data</h4>
|
||||
|
||||
<p>Each timecode is written to the <tt>clockstats</tt> file in the format
|
||||
<tt>YYYY YD HH MI SS</tt>.</p>
|
||||
|
||||
<h4>Fudge Factors</h4>
|
||||
|
||||
<dl>
|
||||
<dt><tt>time1 <i>time</i></tt></dt>
|
||||
<dd>Specifies the time offset calibration factor, in seconds and fraction,
|
||||
with default 0.0.</dd>
|
||||
|
||||
<dt><tt>time2 <i>time</i></tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>stratum <i>number</i></tt></dt>
|
||||
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default 0.
|
||||
</dd>
|
||||
|
||||
<dt><tt>refid <i>string</i></tt></dt>
|
||||
<dd>Specifies the driver reference identifier, an ASCII string from one to
|
||||
four characters, with default <tt>FG</tt>.</dd>
|
||||
|
||||
<dt><tt>flag1 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag2 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag3 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag4 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
</dl>
|
||||
|
||||
<hr>
|
||||
<address>Dmitry Smirnov (das@amt.ru)</address>
|
||||
|
||||
</body>
|
||||
</html>
|
@ -1,253 +1,242 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.01 [en] (Win95; I) [Netscape]">
|
||||
<TITLE>IRIG Audio Decoder II for Sun SPARCstation
|
||||
</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<html><head><title>
|
||||
IRIG Audio Decoder
|
||||
</title></head><body><h3>
|
||||
IRIG Audio Decoder
|
||||
</h3><hr>
|
||||
|
||||
<H3>
|
||||
IRIG Audio Decoder</H3>
|
||||
<H4>Synopsis</H4>
|
||||
|
||||
<HR>
|
||||
<H4>
|
||||
Synopsis</H4>
|
||||
Address: 127.127.6.<I>u</I>
|
||||
<BR>Reference ID: <TT>IRIG</TT>
|
||||
<BR>Driver ID: <TT>IRIG_AUDIO</TT>
|
||||
<BR>Audio Device: <TT>/dev/audio</TT> and <TT>/dev/audioctl</TT>
|
||||
|
||||
<P>Note: This driver supersedes an older one of the same name, address
|
||||
and ID which required replacing the original kernel audio driver with another
|
||||
which works only on older Sun SPARCstation systems. The new driver described
|
||||
here uses the stock kernel audio driver and works in SunOS 4.1.3 and Solaris
|
||||
2.6 versions and probably all versions in between. The new driver requires
|
||||
no modification of the operating system. While it is generic and likely
|
||||
portable to other systems, it is somewhat slower than the original, since
|
||||
the extensive signal conditioning, filtering and decoding is done in user
|
||||
space, not kernel space.
|
||||
<H4>
|
||||
Description</H4>
|
||||
This driver supports the Inter-Range Instrumentation Group (IRIG) standard
|
||||
time distribution signal using the audio codec native to the Sun SPARCstation.
|
||||
This signal is generated by several radio clocks, including those made
|
||||
by Arbiter, Austron, Bancomm, Odetics, Spectracom and TrueTime, among others,
|
||||
although it is often an add-on option. The signal is connected via an optional
|
||||
attenuator box and cable to either the microphone or line-in ports on a
|
||||
Sun SPARCstation <TT>/dev/audio</TT> audio codec device. The driver receives,
|
||||
demodulates and decodes the IRIG-B and IRIG-E signal formats using internal
|
||||
filters designed to reduce the effects of noise and interfering signals.
|
||||
and ID which required replacing the original kernel audio driver with
|
||||
another which works only on older Sun SPARCstation systems. The new
|
||||
driver described here uses the stock kernel audio driver and works in
|
||||
SunOS 4.1.3 and Solaris 2.6 versions and probably all versions in
|
||||
between. The new driver requires no modification of the operating
|
||||
system. While it is generic and likely portable to other systems, it is
|
||||
somewhat slower than the original, since the extensive signal
|
||||
conditioning, filtering and decoding is done in user space, not kernel
|
||||
space.
|
||||
|
||||
<P>The IRIG signal format uses an amplitude-modulated carrier with pulse-width
|
||||
modulated data bits. For IRIG-B, the carrier frequency is 1000 Hz and bit
|
||||
rate 100 b/s; for IRIG-E, the carrier frequenchy is 100 Hz and bit rate
|
||||
10 b/s. While IRIG-B provides the best accuracy, generally within a few
|
||||
tens of microseconds relative to IRIG time, it can also generate a significant
|
||||
load on the processor with older workstations. Generally, the accuracy
|
||||
with IRIG-E is about ten times worse than IRIG-B, but the processor load
|
||||
is ten times less.
|
||||
<H4>Description</H4>
|
||||
|
||||
This driver supports the Inter-Range Instrumentation Group (IRIG)
|
||||
standard time distribution signal using the audio codec native to some
|
||||
workstations. This signal is generated by several radio clocks,
|
||||
including those made by Arbiter, Austron, Bancomm, Odetics, Spectracom
|
||||
and TrueTime, among others, although it is often an add-on option. The
|
||||
signal is connected via an optional attenuator box and cable to either
|
||||
the microphone or line-in port. The driver receives, demodulates and
|
||||
decodes the IRIG-B and IRIG-E signal formats using internal filters
|
||||
designed to reduce the effects of noise and interference.
|
||||
|
||||
<p>This driver incorporates several features in common with other audio
|
||||
drivers such as described in the <a href=driver7.htm>Radio CHU Audio
|
||||
Demodulator/Decoder</a> and the <a href=driver36.htm>Radio WWV/H Audio
|
||||
Demodulator/Decoder</a> pages. They include automatic gain control
|
||||
(AGC), selectable audio codec port and signal monitoring capabilities.
|
||||
For a discussion of these common features, as well as a guide to hookup,
|
||||
debugging and monitoring, see the <a href=audio.htm>Reference Clock
|
||||
Audio Drivers</a> page.
|
||||
|
||||
<P>The IRIG signal format uses an amplitude-modulated carrier with
|
||||
pulse-width modulated data bits. For IRIG-B, the carrier frequency is
|
||||
1000 Hz and bit rate 100 b/s; for IRIG-E, the carrier frequenchy is 100
|
||||
Hz and bit rate 10 b/s. While IRIG-B provides the best accuracy,
|
||||
generally within a few tens of microseconds relative to IRIG time, it
|
||||
can also generate a significant load on the processor with older
|
||||
workstations. Generally, the accuracy with IRIG-E is about ten times
|
||||
worse than IRIG-B, but the processor load is ten times less.
|
||||
|
||||
<P>The program processes 8000-Hz mu-law companded samples using separate
|
||||
signal filters for IRIG-B and IRIG-E, a comb filter, envelope detector
|
||||
and automatic threshold corrector. Cycle crossings relative to the corrected
|
||||
slice level determine the width of each pulse and its value - zero, one
|
||||
or position identifier. The data encode 20 BCD digits which determine the
|
||||
second, minute, hour and day of the year and sometimes the year and synchronization
|
||||
condition. The comb filter exponentially averages the corresponding samples
|
||||
of successive baud intervals in order to reliably identify the reference
|
||||
carrier cycle. A type-II phase-lock loop (PLL) performs additional integration
|
||||
and interpolation to accurately determine the zero crossing of that cycle,
|
||||
which determines the reference timestamp. A pulse-width discriminator demodulates
|
||||
the data pulses, which are then encoded as the BCD digits of the timecode.
|
||||
and automatic threshold corrector. Cycle crossings relative to the
|
||||
corrected slice level determine the width of each pulse and its value -
|
||||
zero, one or position identifier. The data encode 20 BCD digits which
|
||||
determine the second, minute, hour and day of the year and sometimes the
|
||||
year and synchronization condition. The comb filter exponentially
|
||||
averages the corresponding samples of successive baud intervals in order
|
||||
to reliably identify the reference carrier cycle. A type-II phase-lock
|
||||
loop (PLL) performs additional integration and interpolation to
|
||||
accurately determine the zero crossing of that cycle, which determines
|
||||
the reference timestamp. A pulse-width discriminator demodulates the
|
||||
data pulses, which are then encoded as the BCD digits of the timecode.
|
||||
The timecode and reference timestamp are updated once each second with
|
||||
IRIG-B (ten seconds with IRIG-E) and local clock offset samples saved for
|
||||
later processing. At poll intervals of 64 s, the saved samples are processed
|
||||
by a trimmed-mean filter and used to update the system clock.
|
||||
IRIG-B (ten seconds with IRIG-E) and local clock offset samples saved
|
||||
for later processing. At poll intervals of 64 s, the saved samples are
|
||||
processed by a trimmed-mean filter and used to update the system clock.
|
||||
|
||||
<P>Infinite impulse response (IIR) filters are used with both IRIG-B and
|
||||
IRIG-E formats. An 800-Hz highpass filter is used for IRIG-B and a 130-Hz
|
||||
lowpass filter for IRIG-E. These are intended for use with noisy signals,
|
||||
such as might be received over a telephone line or radio circuit, or when
|
||||
interfering signals may be present in the audio passband. The driver determines
|
||||
which IRIG format is in use by sampling the amplitude of each filter output
|
||||
and selecting the one with maximum signal. An automatic gain control feature
|
||||
provides protection against overdriven or underdriven input signal amplitudes.
|
||||
It is designed to maintain adequate demodulator signal amplitude while
|
||||
avoiding occasional noise spikes. In order to assure reliable capture,
|
||||
the decompanded input signal amplitude must be greater than 100 units and
|
||||
the codec sample frequency error less than 250 PPM (.025 percent).
|
||||
IRIG-E formats. An 800-Hz highpass filter is used for IRIG-B and a
|
||||
130-Hz lowpass filter for IRIG-E. These are intended for use with noisy
|
||||
signals, such as might be received over a telephone line or radio
|
||||
circuit, or when interfering signals may be present in the audio
|
||||
passband. The driver determines which IRIG format is in use by sampling
|
||||
the amplitude of each filter output and selecting the one with maximum
|
||||
signal. An automatic gain control feature provides protection against
|
||||
overdriven or underdriven input signal amplitudes. It is designed to
|
||||
maintain adequate demodulator signal amplitude while avoiding occasional
|
||||
noise spikes. In order to assure reliable capture, the decompanded input
|
||||
signal amplitude must be greater than 100 units and the codec sample
|
||||
frequency error less than 250 PPM (.025 percent).
|
||||
|
||||
<P>The program performs a number of error checks to protect against
|
||||
overdriven or underdriven input signal levels, incorrect signal format
|
||||
or improper hardware configuration. Specifically, if any of the
|
||||
following errors occur for a timecode, the data are rejected.
|
||||
Secifically, if any of the following errors occur for a time
|
||||
measurement, the data are rejected.
|
||||
|
||||
<P>The program performs a number of error checks to protect against overdriven
|
||||
or underdriven input signal levels, incorrect signal format or improper
|
||||
hardware configuration. Specifically, if any of the following errors occur
|
||||
for a timecode, the data are rejected. Secifically, if any of the following
|
||||
errors occur for a time measurement, the data are rejected.
|
||||
<OL>
|
||||
<LI>
|
||||
The peak carrier amplitude is less than 100 units. This usually means dead
|
||||
IRIG signal source, broken cable or wrong input port.</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
The frequency error is greater than +-250 PPM (.025 percent). This usually
|
||||
means broken codec hardware or wrong codec configuration.</LI>
|
||||
<LI>The peak carrier amplitude is less than 100 units. This usually
|
||||
means dead IRIG signal source, broken cable or wrong input port.</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
The modulation index is less than 0.5. This usually means overdriven IRIG
|
||||
signal or wrong IRIG format.</LI>
|
||||
<LI>The frequency error is greater than ±250 PPM (.025 percent).
|
||||
This usually means broken codec hardware or wrong codec
|
||||
configuration.</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
A frame synchronization error has occured. This usually means wrong IRIG
|
||||
signal format or the IRIG signal source has lost synchronization (signature
|
||||
control).</LI>
|
||||
<LI>The modulation index is less than 0.5. This usually means overdriven
|
||||
IRIG signal or wrong IRIG format.</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
A data decoding error has occured. This usually means wrong IRIG signal
|
||||
format.</LI>
|
||||
<LI>A frame synchronization error has occured. This usually means wrong
|
||||
IRIG signal format or the IRIG signal source has lost synchronization
|
||||
(signature control).</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
The current second of the day is not exactly one greater than the previous
|
||||
one. This usually means a very noisy IRIG signal or insufficient CPU resources.</LI>
|
||||
<LI>A data decoding error has occured. This usually means wrong IRIG
|
||||
signal format.</LI>
|
||||
|
||||
<LI>The current second of the day is not exactly one greater than the
|
||||
previous one. This usually means a very noisy IRIG signal or
|
||||
insufficient CPU resources.</LI>
|
||||
|
||||
<LI>An audio codec error (overrun) occured. This usually means
|
||||
insufficient CPU resources, as sometimes happens with Sun SPARC IPCs
|
||||
when doing something useful.</LI>
|
||||
|
||||
<BR>
|
||||
<LI>
|
||||
An audio codec error (overrun) occured. This usually means insufficient
|
||||
CPU resources, as sometimes happens with Sun SPARC IPCs when doing something
|
||||
useful.</LI>
|
||||
</OL>
|
||||
Note that additional checks are done elsewhere in the reference clock interface
|
||||
routines.
|
||||
|
||||
<P>Unlike other drivers, which can have multiple instantiations, this one
|
||||
supports only one. It does not seem likely that more than one audio codec
|
||||
would be useful in a single machine. More than one would probably chew
|
||||
up too much CPU time anyway.
|
||||
<H4>
|
||||
IRIG-B Timecode Format</H4>
|
||||
The 100 elements of the IRIG timecode are numbered from 0 through 99. Position
|
||||
identifiers occur at elements 0, 9, 19 and every ten thereafter to 99.
|
||||
The control function (CF) elements begin at element 50 (CF 1) and extend
|
||||
to element 78 (CF 27). The straight-binary-seconds (SBS) field, which encodes
|
||||
the seconds of the UTC day, begins at element 80 (CF 28) and extends to
|
||||
element 97 (CF 44). The encoding of elements 50 (CF 1) through 78 (CF 27)
|
||||
is device dependent. This driver presently decodes the CF elements, but
|
||||
does nothing with them.
|
||||
Note that additional checks are done elsewhere in the reference clock
|
||||
interface routines.
|
||||
|
||||
<P>Unlike other drivers, which can have multiple instantiations, this
|
||||
one supports only one. It does not seem likely that more than one audio
|
||||
codec would be useful in a single machine. More than one would probably
|
||||
chew up too much CPU time anyway.
|
||||
|
||||
<H4>IRIG-B Timecode Format</H4>
|
||||
The 100 elements of the IRIG timecode are numbered from 0 through 99.
|
||||
Position identifiers occur at elements 0, 9, 19 and every ten thereafter
|
||||
to 99. The control function (CF) elements begin at element 50 (CF 1) and
|
||||
extend to element 78 (CF 27). The straight-binary-seconds (SBS) field,
|
||||
which encodes the seconds of the UTC day, begins at element 80 (CF 28)
|
||||
and extends to element 97 (CF 44). The encoding of elements 50 (CF 1)
|
||||
through 78 (CF 27) is device dependent. This driver presently decodes
|
||||
the CF elements, but does nothing with them.
|
||||
|
||||
<P>Where feasible, the IRIG signal source should be operated with
|
||||
signature control so that, if the signal is lost or mutilated, the
|
||||
source produces an unmodulated signal, rather than possibly random
|
||||
digits. The driver will automatically reject the data and declare itself
|
||||
unsynchronized in this case. Some devices, in particular Spectracom
|
||||
radio/satellite clocks, provide additional year and status indication in
|
||||
the format:
|
||||
|
||||
<PRE> Element CF Function
|
||||
-------------------------------------
|
||||
55 6 time sync status
|
||||
60-63 10-13 BCD year units
|
||||
65-68 15-18 BCD year tens
|
||||
</PRE>
|
||||
|
||||
<P>Where feasible, the IRIG signal source should be operated with signature
|
||||
control so that, if the signal is lost or mutilated, the source produces
|
||||
an unmodulated signal, rather than possibly random digits. The driver will
|
||||
automatically reject the data and declare itself unsynchronized in this
|
||||
case. Some devices, in particular Spectracom radio/satellite clocks, provide
|
||||
additional year and status indication in the format:
|
||||
<PRE> Element CF Function
|
||||
-------------------------------------
|
||||
55 6 time sync status
|
||||
60-63 10-13 BCD year units
|
||||
65-68 15-18 BCD year tens</PRE>
|
||||
Other devices set these elements to zero.
|
||||
<H4>
|
||||
Performance</H4>
|
||||
|
||||
<H4>Performance</H4>
|
||||
|
||||
The mu-law companded data format allows considerable latitude in signal
|
||||
levels; however, an automatic gain control (AGC) function is implemented
|
||||
to further compensate for varying input signal levels and to avoid signal
|
||||
distortion. For proper operation, the IRIG signal source should be configured
|
||||
for analog signal levels, NOT digital TTL levels.
|
||||
to further compensate for varying input signal levels and to avoid
|
||||
signal distortion. For proper operation, the IRIG signal source should
|
||||
be configured for analog signal levels, NOT digital TTL levels.
|
||||
|
||||
<P>The accuracy of the system clock synchronized to the IRIG-B source
|
||||
with this driver and the <TT>ntpd</TT> daemon is 10-20 <font
|
||||
face=symbol>m</font>s with a Sun UltraSPARC II and maybe twice that with
|
||||
a Sun SPARC IPC. The processor resources consumed by the daemon can be
|
||||
significant, ranging from about 1.2 percent on the faster UltraSPARC II
|
||||
to 38 percent on the slower SPARC IPC. However, the overall timing
|
||||
accuracy is limited by the resolution and stability of the CPU clock
|
||||
oscillator and the interval between clock corrections, which is 64 s
|
||||
with this driver. This performance, while probably the best that can be
|
||||
achieved by the daemon itself, can be improved with assist from the PPS
|
||||
discipline as described elsewhere in the documentation.
|
||||
|
||||
<H4>Monitor Data</H4>
|
||||
|
||||
<P>The accuracy of the system clock synchronized to the IRIG-B source with
|
||||
this driver and the <TT>ntpd</TT> daemon is 10-20 microseconds with a Sun
|
||||
UltraSPARC II and maybe twice that with a Sun SPARC IPC. The processor
|
||||
resources consumed by the daemon can be significant, ranging from about
|
||||
1.2 percent on the faster UltraSPARC II to 38 percent on the slower SPARC
|
||||
IPC. However, the overall timing accuracy is limited by the resolution
|
||||
and stability of the CPU clock oscillator and the interval between clock
|
||||
corrections, which is 64 s with this driver. This performance, while probably
|
||||
the best that can be achieved by the daemon itself, can be improved with
|
||||
assist from the PPS discipline as described elsewhere in the documentation.
|
||||
<H4>
|
||||
Monitor Data</H4>
|
||||
The timecode format used for debugging and data recording includes data
|
||||
helpful in diagnosing problems with the IRIG signal and codec connections.
|
||||
With debugging enabled (-d -d -d on the ntpd command line), the driver
|
||||
produces one line for each timecode in the following format:
|
||||
<PRE>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5 3094572411.00027</PRE>
|
||||
The first field containes the error flags in hex, where the hex bits are
|
||||
interpreted as below. This is followed by the IRIG status indicator, year
|
||||
of century, day of year and time of day. The status indicator and year
|
||||
are not produced by some IRIG devices. Following these fields are the signal
|
||||
amplitude (0-8100), codec gain (0-255), field phase (0-79), time constant
|
||||
(2-20), modulation index (0-1), carrier phase error (0+-0.5) and carrier
|
||||
frequency error (PPM). The last field is the on-time timestamp in NTP format.
|
||||
The fraction part is a good indicator of how well the driver is doing.
|
||||
With an UltrSPARC 30, this is normally within a few tens of microseconds
|
||||
relative to the IRIG-B signal and within a few hundred microseconds with
|
||||
IRIG-E.
|
||||
<H4>
|
||||
Fudge Factors</H4>
|
||||
helpful in diagnosing problems with the IRIG signal and codec
|
||||
connections. With debugging enabled (-d on the ntpd command line), the
|
||||
driver produces one line for each timecode in the following format:
|
||||
|
||||
<p><tt>00 1 98 23 19:26:52 721 143 0.694 47 20 0.083 66.5
|
||||
3094572411.00027</tt>
|
||||
|
||||
<p>The first field containes the error flags in hex, where the hex bits
|
||||
are interpreted as below. This is followed by the IRIG status indicator,
|
||||
year of century, day of year and time of day. The status indicator and
|
||||
year are not produced by some IRIG devices. Following these fields are
|
||||
the signal amplitude (0-8100), codec gain (0-255), field phase (0-79),
|
||||
time constant (2-20), modulation index (0-1), carrier phase error
|
||||
(0±0.5) and carrier frequency error (PPM). The last field is the
|
||||
on-time timestamp in NTP format. The fraction part is a good indicator
|
||||
of how well the driver is doing. With an UltrSPARC 30, this is normally
|
||||
within a few tens of microseconds relative to the IRIG-B signal and
|
||||
within a few hundred microseconds with IRIG-E.
|
||||
|
||||
<H4>Fudge Factors</H4>
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<TT>time1 <I>time</I></TT></DT>
|
||||
|
||||
<DD>
|
||||
Specifies the time offset calibration factor, in seconds and fraction,
|
||||
with default 0.0.</DD>
|
||||
<DT><TT>time1 <I>time</I></TT></DT>
|
||||
<DD>Specifies the time offset calibration factor, in seconds and
|
||||
fraction, with default 0.0.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>time2 <I>time</I></TT></DT>
|
||||
<DT><TT>time2 <I>time</I></TT></DT>
|
||||
<DD>Not used by this driver.</DD>
|
||||
|
||||
<DD>
|
||||
Not used by this driver.</DD>
|
||||
<DT><TT>stratum <I>number</I></TT></DT>
|
||||
<DD>Specifies the driver stratum, in decimal from 0 to 15, with default
|
||||
0.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>stratum <I>number</I></TT></DT>
|
||||
<DT><TT>refid <I>string</I></TT></DT>
|
||||
<DD>Specifies the driver reference identifier, an ASCII string from one
|
||||
to four characters, with default <TT>IRIG</TT>.</DD>
|
||||
|
||||
<DD>
|
||||
Specifies the driver stratum, in decimal from 0 to 15, with default 0.</DD>
|
||||
<DT><TT>flag1 0 | 1</TT></DT>
|
||||
<DD>Not used by this driver.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>refid <I>string</I></TT></DT>
|
||||
<DT><TT>flag2 0 | 1</TT></DT>
|
||||
<DD>Specifies the microphone port if set to zero or the line-in port if
|
||||
set to one. It does not seem useful to specify the compact disc player
|
||||
port.</DD>
|
||||
|
||||
<DD>
|
||||
Specifies the driver reference identifier, an ASCII string from one to
|
||||
four characters, with default <TT>IRIG</TT>.</DD>
|
||||
<DT><TT>flag3 0 | 1</TT></DT>
|
||||
<DD>Enables audio monitoring of the input signal. For this purpose, the
|
||||
speaker volume must be set before the driver is started.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>flag1 0 | 1</TT></DT>
|
||||
|
||||
<DD>
|
||||
Not used by this driver.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>flag2 0 | 1</TT></DT>
|
||||
|
||||
<DD>
|
||||
Specifies the microphone port if set to zero or the line-in port if set
|
||||
to one. It does not seem useful to specify the compact disc player port.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>flag3 0 | 1</TT></DT>
|
||||
|
||||
<DD>
|
||||
Enables audio monitoring of the input signal. For this purpose, the speaker
|
||||
volume must be set before the driver is started.</DD>
|
||||
|
||||
<DT>
|
||||
<TT>flag4 0 | 1</TT></DT>
|
||||
|
||||
<DD>
|
||||
Enable verbose <TT>clockstats</TT> recording if set.</DD>
|
||||
<DT><TT>flag4 0 | 1</TT></DT>
|
||||
<DD>Enable verbose <TT>clockstats</TT> recording if set.</DD>
|
||||
</DL>
|
||||
Additional Information
|
||||
|
||||
<P><A HREF="refclock.htm">Reference Clock Drivers</A>
|
||||
<HR>
|
||||
<ADDRESS>
|
||||
David L. Mills (mills@udel.edu)</ADDRESS>
|
||||
<H4>Additional Information</H4>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
<A HREF="refclock.htm">Reference Clock Drivers</A>
|
||||
<br><A HREF="audio.htm">Reference Clock Audio Drivers</A>
|
||||
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
||||
|
@ -1,227 +1,591 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.01 [en] (Win95; I) [Netscape]">
|
||||
<TITLE>Canadian CHU Radio Modem/Audio Decoder
|
||||
</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<html><head><title>
|
||||
Radio CHU Audio Demodulator/Decoder
|
||||
</title></head><body><h3>
|
||||
Radio CHU Audio Demodulator/Decoder
|
||||
</h3><hr>
|
||||
|
||||
<H3>
|
||||
CHU Audio/Modem Decoder</H3>
|
||||
<h4>Synopsis</h4>
|
||||
|
||||
<HR>
|
||||
<H4>
|
||||
Synopsis</H4>
|
||||
Address: 127.127.7.<I>u</I>
|
||||
<BR>Reference ID: <TT>CHU</TT>
|
||||
<BR>Driver ID: <TT>CHU</TT>
|
||||
<BR>Serial Port: <TT>/dev/chu<I>u</I></TT>; 300 baud, 8-bits, no parity
|
||||
<BR>Audio Device: <TT>/dev/audio</TT> and <TT>/dev/audioctl</TT>
|
||||
<H4>
|
||||
Description</H4>
|
||||
<br>Reference ID: <tt>CHU</tt>
|
||||
<br>Driver ID: <tt>CHU</tt>
|
||||
<br>Modem Port: <tt>/dev/chu<I>u</I></tt>; 300 baud, 8-bits, no parity
|
||||
<br>Autotune Port: <tt>/dev/icom</tt>; 9600 baud, 8-bits, no parity
|
||||
<br>Audio Device: <tt>/dev/audio</tt> and <tt>/dev/audioctl</tt>
|
||||
|
||||
<h4>Description</h4>
|
||||
|
||||
This driver synchronizes the computer time using data encoded in radio
|
||||
transmissions from Canadian time/frequency station CHU in Ottawa, Ontario.
|
||||
Transmissions are made continuously on 3330 kHz, 7335 kHz and 14670 kHz
|
||||
in upper sideband, compatible AM mode. An ordinary shortwave receiver can
|
||||
be tuned manually to one of these frequencies or, in the case of ICOM receivers,
|
||||
the receiver can be tuned automatically using the <TT>minimuf</TT> and
|
||||
<TT>icom</TT> programs as propagation conditions change throughout the
|
||||
day and night.
|
||||
transmissions from Canadian time/frequency station CHU in Ottawa,
|
||||
Ontario. Transmissions are made continuously on 3330 kHz, 7335 kHz and
|
||||
14670 kHz in upper sideband, compatible AM mode. An ordinary shortwave
|
||||
receiver can be tuned manually to one of these frequencies or, in the
|
||||
case of ICOM receivers, the receiver can be tuned automatically as
|
||||
propagation conditions change throughout the day and night. The
|
||||
performance of this driver when tracking the station is ordinarily
|
||||
better than 1 ms in time with frequency drift less than 0.5 PPM when not
|
||||
tracking the station.
|
||||
|
||||
<P>This driver replaces an earlier one built by Dennis Ferguson in 1988.
|
||||
The earlier driver required a special line discipline which preprocessed
|
||||
the signal in order to improve accuracy and avoid errors. The new driver
|
||||
includes more powerful algorithms implemented directly in the driver and
|
||||
requires no line discipline. It decodes the data using a maximum-likelihood
|
||||
technique which exploits the considerable degree of redundancy available
|
||||
to maximize accuracy and minimize errors.
|
||||
|
||||
<P>While there are currently no known commercial CHU receivers, a simple
|
||||
<p>While there are currently no known commercial CHU receivers, a simple
|
||||
but effective receiver/demodulator can be constructed from an ordinary
|
||||
shortwave receiver and Bell 103 compatible, 300-bps modem or modem chip,
|
||||
as described in the <A HREF="file:///J|/ntp4/html/pps.htm">Pulse-per-second
|
||||
(PPS) Signal Interfacing</A> page. The driver can be compiled to use this
|
||||
modem to receive the radio signal and demodulate the data. Alternatively,
|
||||
the driver can be compiled to use the audio codec of the Sun workstation
|
||||
or another with compatible audio drivers. In the latter case, the driver
|
||||
shortwave receiver and Bell 103 compatible, 300-b/s modem or modem chip,
|
||||
as described in the <a href=pps.htm>Pulse-per-second (PPS) Signal
|
||||
Interfacing</a> page. The driver can be compiled to use a modem to
|
||||
receive the radio signal and demodulate the data. Alternatively, the
|
||||
driver can be compiled to use the audio codec of the Sun workstation or
|
||||
another with compatible audio interface. In the latter case, the driver
|
||||
implements the modem using DSP routines, so the radio can be connected
|
||||
directly to either the microphone on line input port.
|
||||
|
||||
<P>The CHU time broadcast includes an audio signal compatible with the
|
||||
<p>The driver replaces an earlier one built by Dennis Ferguson in 1988.
|
||||
The earlier driver required a special line discipline which preprocessed
|
||||
the signal in order to improve accuracy and avoid errors. The new driver
|
||||
includes more powerful algorithms implemented directly in the driver and
|
||||
requires no line discipline. It decodes the data using a
|
||||
maximum-likelihood technique which exploits the considerable degree of
|
||||
redundancy available to maximize accuracy and minimize errors.
|
||||
|
||||
<p>This driver incorporates several features in common with other audio
|
||||
drivers such as described in the <a href=driver36.htm>Radio WWV/H Audio
|
||||
Demodulator/Decoder</a> and the <a href=driver6.htm>IRIG Audio
|
||||
Decoder</a> pages. They include automatic gain control (AGC), selectable
|
||||
audio codec port and signal monitoring capabilities. For a discussion of
|
||||
these common features, as well as a guide to hookup, debugging and
|
||||
monitoring, see the <a href=audio.htm>Reference Clock Audio Drivers</a>
|
||||
page.
|
||||
|
||||
<p>Ordinarily, the driver poll interval is set to 14 (about 4.5 h),
|
||||
although this can be changed with configuration commands. As long as the
|
||||
clock is set or verified at least once during this interval, the NTP
|
||||
algorithms will consider the source reachable and selectable to
|
||||
discipline the system clock. However, if this does not happen for eight
|
||||
poll intervals, the algorithms will consider the source unreachable and
|
||||
some other source will be chosen (if available) to discipline the system
|
||||
clock.
|
||||
|
||||
<p>The decoding algorithms take advantage of all the redundancy
|
||||
available in each broadcast message or burst. In each burst described in
|
||||
the next section, every character is sent twice and, in the case of
|
||||
format A bursts, the burst is sent eight times every minute. In the case
|
||||
of format B bursts, which are sent once each minute, the burst is
|
||||
considered correct only if every character matches its repetition in the
|
||||
burst. In the case of format A messages, a majority decoder requires at
|
||||
least six repetitions for each digit in the timecode and more than
|
||||
half of the repetitions decode to the same digit. Every character in
|
||||
every burst provides an independent timestamp upon arrival with a
|
||||
potential total of over 60 timestamps for each minute.
|
||||
|
||||
<p>A timecode in the format described below is assembled when all bursts
|
||||
have been received in the minute. The timecode is considered valid and
|
||||
the clock set when at least one valid format B burst has been decoded
|
||||
and the above requirements are met. The <tt>yyyy</tt> year field in the
|
||||
timecode indicates whether a valid format B burst has been received.
|
||||
Upon startup, this field is initialized at zero; when a valid format B
|
||||
burst is received, it will be set to the correct Gregorian year. The
|
||||
<tt>q</tt> quality character field in the timecode indicates whether a
|
||||
valid timecode has been determined. If any of the high order three bits
|
||||
of this character are set, the timecode is invalid.
|
||||
|
||||
<p>Once the clock has been set for the first time, it will appear
|
||||
reachable and selectable to discipline the system clock, even if the
|
||||
broadcast signal is lost. Since the signals are almost always available
|
||||
during some period of the day and the NTP clock discipline algorithms
|
||||
are designed to work well even in this case, it is unlikely that the
|
||||
system clock could drift more than a few tens of milliseconds during
|
||||
periods of signal loss. To protect against this most unlikely situation,
|
||||
if after four days with no signals, the clock is considered unset and
|
||||
resumes the synchronization procedure from the beginning.
|
||||
|
||||
<p>The last three fields in the timecode are useful in assessing the
|
||||
quality of the radio channel during the most recent minute bursts were
|
||||
received. The <tt>bcnt</tt> field shows the number of format A bursts in
|
||||
the range 1-8. The <tt>dist</tt> field shows the majority decoder
|
||||
distance, or the minimum number of sample repetitions for each digit of
|
||||
the timecode in the range 0-16. The <tt>tsmp</tt> field shows the number
|
||||
of timestamps determined in the range 0-60. For a valid timecode,
|
||||
<tt>bcnt</tt> must be at least 3, <tt>dist</tt> must be greater than
|
||||
<tt>bcnt</tt> and <tt>tsmp</tt> must be at least 20.
|
||||
|
||||
<h4>Program Operation</h4>
|
||||
|
||||
<p>The program consists of four major parts: the DSP modem, maximum
|
||||
likelihood UART, burst assembler and majority decoder. The DSP modem
|
||||
demodulates Bell 103 modem answer-frequency signals; that is, frequency-
|
||||
shift keyed (FSK) tones of 2225 Hz (mark) and 2025 Hz (space). This is
|
||||
done using a 4th-order IIR filter and limiter/discriminator with 500-Hz
|
||||
bandpass centered on 2125 Hz and followed by a FIR raised-cosine lowpass
|
||||
filter optimized for the 300-b/s data rate. Alternately, the driver can
|
||||
be compiled to delete the modem and input 300 b/s data directly from an
|
||||
external modem via a serial port.
|
||||
|
||||
<p>The maximum likelihood UART is implemented using a set of eight
|
||||
11-stage shift registers, one for each of eight phases of the 300-b/s
|
||||
bit clock. At each phase a new baseband signal value from the DSP modem
|
||||
is shifted into the corresponding register and the maximum and minimum
|
||||
over all 11 samples computed. This establishes a slice level midway
|
||||
between the maximum and minimum over all stages. For each stage, a
|
||||
signal level above this level is a mark (1) and below is a space (0). A
|
||||
quality metric is calculated for each register with respect to the slice
|
||||
level and the a-priori signal consisting of a mark bit (previous stop
|
||||
bit), space (start) bit, eight arbitrary information bits and the first
|
||||
of the two mark (stop) bits.
|
||||
<p>The shift registers are processed in round-robin order as each modem
|
||||
value arrives until one of them shows a valid framing pattern consisting
|
||||
of a mark bit, space bit, eight arbitrary data bits and a mark bit. When
|
||||
found, the data bits from the register with the best metric is chosen as
|
||||
the maximum likelihood character and the UART begins to process the next
|
||||
character.
|
||||
|
||||
<p>The burst assembler processes characters either from the maximum
|
||||
likelihood UART or directly from the serial port as configured. A burst
|
||||
begins when a character is received and is processed after a timeout
|
||||
interval when no characters are received. If the interval between
|
||||
characters is greater than two characters, but less than the timeout
|
||||
interval, the burst is rejected as a runt and a new burst begun. As each
|
||||
character is received, a timestamp is captured and saved for later
|
||||
processing.
|
||||
|
||||
<p>A valid burst consists of ten characters in two replicated
|
||||
five-character blocks. A format B block contains the year and other
|
||||
information in ten hexadecimal digits. A format A block contains the
|
||||
timecode in ten decimal digits, the first of which is a framing code
|
||||
(6). The burst assembler must deal with cases where the first character
|
||||
of a format A burst is lost or is noise. This is done using the framing
|
||||
code to correct the phase, either one character early or one character
|
||||
late.
|
||||
|
||||
<p>The burst distance is incremented by one for each bit in the first
|
||||
block that matches the corresponding bit in the second block and
|
||||
decremented by one otherwise. In a format B burst the second block is
|
||||
bit-inverted relative to the first, so a perfect burst of five 8-bit
|
||||
characters has distance -40. In a format A block the two blocks are
|
||||
identical, so a perfect burst has distance +40. Format B bursts must be
|
||||
perfect to be acceptable; however, format A bursts, which are further
|
||||
processed by the majority decoder, are acceptable if the distance is at
|
||||
least 28.
|
||||
|
||||
<p>Each minute of transmission includes eight format A bursts containing
|
||||
two timecodes for each second from 31 through 39. The majority decoder
|
||||
uses a decoding matrix of ten rows, one for each digit position in the
|
||||
timecode, and 16 columns, one for each 4-bit code combination that might
|
||||
be decoded at that position. In order to use the character timestamps,
|
||||
it is necessary to reliably determine the second number of each burst.
|
||||
In a valid burst, the last digit of the two timecodes in the block must
|
||||
match and the value must be in the range 2-9 and greater than in the
|
||||
previous burst.
|
||||
|
||||
<p>As each hex digit of a valid burst is processed, the value at the row
|
||||
corresponding to the digit position in the timecode and column
|
||||
corresponding to the code found at that position is incremented. At the
|
||||
end of each minute of transmission, each row of the decoding matrix
|
||||
encodes the number of occurrences of each code found at the
|
||||
corresponding position of the timecode. However, the first digit
|
||||
(framing code) is always 6, the ninth (second tens) is always 3 and the
|
||||
last (second units) changes for each burst, so are not used.
|
||||
|
||||
<p>The maximum over all occurrences at each timecode digit position is
|
||||
the distance for that position and the corresponding code is the maximum
|
||||
likelihood candidate. If the distance is zero, the decoder assumes a
|
||||
miss; if the distance is not more than half the total number of
|
||||
occurrences, the decoder assumes a soft error; if two different codes
|
||||
with the same distance are found, the decoder assumes a hard error. In
|
||||
all these cases the decoder encodes a non-decimal character which will
|
||||
later cause a format error when the timecode is reformatted. The
|
||||
decoding distance is defined as the minimum distance over the first nine
|
||||
digits; the tenth digit varies over the seconds and is uncounted.
|
||||
|
||||
<p>The result of the majority decoder is a nine-digit timecode
|
||||
representing the maximum likelihood candidate for the transmitted
|
||||
timecode in that minute. Note that the second and fraction within the
|
||||
minute are always zero and that the actual reference point to calculate
|
||||
timestamp offsets is backdated to the first second of the minute. At
|
||||
this point the timecode block is reformatted and the year, days, hours
|
||||
and minutes extracted along with other information from the format B
|
||||
burst, including DST state, DUT1 correction and leap warning. The
|
||||
reformatting operation checks the timecode for invalid code combinations
|
||||
that might have been left by the majority decoder and rejects the entire
|
||||
timecode if found.
|
||||
|
||||
<p>If the timecode is valid, it is passed to the reference clock
|
||||
interface along with the backdated timestamp offsets accumulated over
|
||||
the minute. A perfect set of nine bursts could generate as many as 90
|
||||
timestamps, but the maximum the interface can handle is 60. These are
|
||||
processed by the interface using a median filter and trimmed-mean
|
||||
average, so the resulting system clock correction is usually much better
|
||||
than would otherwise be the case with radio noise, UART jitter and
|
||||
occasional burst errors.
|
||||
|
||||
<h4>Autotune</h4>
|
||||
|
||||
<p>The driver includes provisions to automatically tune the radio in
|
||||
response to changing radio propagation conditions throughout the day and
|
||||
night. The radio interface is compatible with the ICOM CI-V standard,
|
||||
which is a bidirectional serial bus operating at TTL levels. The bus can
|
||||
be connected to a standard serial port using a level converter such as
|
||||
the CT-17. The serial port speed is presently compiled in the program,
|
||||
but can be changed in the <tt>icom.h</tt> header file.
|
||||
|
||||
<p>Each ICOM radio is assigned a unique 8-bit ID select code, usually
|
||||
expressed in hex format. To activate the CI-V interface, the
|
||||
<tt>mode</tt> keyword of the <tt>server</tt> configuration command
|
||||
specifies a nonzero select code in decimal format. A table of ID select
|
||||
codes for the known ICOM radios is given below. A missing <tt>mode</tt>
|
||||
keyword or a zero argument leaves the interface disabled. The driver
|
||||
will attempt to open the device <tt>/dev/icom</tt> and, if successful
|
||||
will tune the radio to 3.330 MHz. If after five minutes at this
|
||||
frequency not more than two format A bursts have been received for any
|
||||
minute, the driver will tune to 7.335 MHz, then to 14.670 MHz, then
|
||||
return to 3.330 MHz and continue in this cycle.
|
||||
|
||||
<p>The driver is liberal in what it assumes of the configuration. If the
|
||||
<tt>/dev/icom</tt> link is not present or the open fails or the CI-V bus
|
||||
or radio is inoperative, the driver quietly gives up with no harm done.
|
||||
|
||||
<h4>Radio Broadcast Format</h4>
|
||||
|
||||
<p>The CHU time broadcast includes an audio signal compatible with the
|
||||
Bell 103 modem standard (mark = 2225 Hz, space = 2025 Hz). It consist of
|
||||
nine, ten-character bursts transmitted at 300 bps and beginning each second
|
||||
from second 31 to second 39 of the minute. Each character consists of eight
|
||||
data bits plus one start bit and two stop bits to encode two hex digits.
|
||||
The burst data consist of five characters (ten hex digits) followed by
|
||||
a repeat of these characters. In format A, the characters are repeated
|
||||
in the same polarity; in format B, the characters are repeated in the opposite
|
||||
polarity.
|
||||
nine, ten-character bursts transmitted at 300 b/s and beginning each
|
||||
second from second 31 to second 39 of the minute. Each character
|
||||
consists of eight data bits plus one start bit and two stop bits to
|
||||
encode two hex digits. The burst data consist of five characters (ten
|
||||
hex digits) followed by a repeat of these characters. In format A, the
|
||||
characters are repeated in the same polarity; in format B, the
|
||||
characters are repeated in the opposite polarity.
|
||||
|
||||
<P>Format A bursts are sent at seconds 32 through 39 of the minute in hex
|
||||
digits
|
||||
<p>Format A bursts are sent at seconds 32 through 39 of the minute in
|
||||
hex digits
|
||||
|
||||
<P><TT> 6dddhhmmss6dddhhmmss</TT>
|
||||
<p><tt>6dddhhmmss6dddhhmmss</tt>
|
||||
<p>The first ten digits encode a frame marker (<tt>6</tt>) followed by
|
||||
the day (<tt>ddd</tt>), hour (<tt>hh</tt>), minute (<tt>mm</tt>) and
|
||||
second (<tt>ss</tt>). Since format A bursts are sent during the
|
||||
third decade of seconds the tens digit of <tt>ss</tt> is always 3. The
|
||||
driver uses this to determine correct burst synchronization. These
|
||||
digits are then repeated with the same polarity.
|
||||
<p>Format B bursts are sent at second 31 of the minute in hex digits
|
||||
|
||||
<P>The first ten digits encode a frame marker (<TT>6</TT>) followed by
|
||||
the day (<TT>ddd</TT>), hour (<TT>hh </TT>in UTC), minute (<TT>mm</TT>)
|
||||
and the second (<TT>ss</TT>). Since format A bursts are sent during the
|
||||
third decade of seconds the tens digit of <TT>ss </TT>is always 3. The
|
||||
driver uses this to determine correct burst synchronization. These digits
|
||||
are then repeated with the same polarity.
|
||||
<p><tt>xdyyyyttaaxdyyyyttaa</tt>
|
||||
|
||||
<P>Format B bursts are sent at second 31 of the minute in hex digits
|
||||
<p>The first ten digits encode a code (<tt>x</tt> described below)
|
||||
followed by the DUT1 (<tt>d</tt> in deciseconds), Gregorian year
|
||||
(<tt>yyyy</tt>), difference TAI - UTC (<tt>tt</tt>) and daylight time
|
||||
indicator (<tt>aa</tt>) peculiar to Canada. These digits are then
|
||||
repeated with inverted polarity.
|
||||
|
||||
<P><TT> xdyyyyttaaxdyyyyttaa</TT>
|
||||
<p>The <tt>x</tt> is coded
|
||||
|
||||
<P>The first ten digits encode a code (<TT>x </TT>described below) followed
|
||||
by the DUT1 (<TT>d </TT>in deciseconds), Gregorian year (<TT>yyyy</TT>),
|
||||
difference TAI - UTC (<TT>tt</TT>) and daylight time indicator (<TT>aa</TT>)
|
||||
peculiar to Canada. These digits are then repeated with inverted polarity.
|
||||
<dl>
|
||||
|
||||
<P>The <TT>x </TT>is coded
|
||||
<dt><tt>1</tt>
|
||||
<dd>Sign of DUT (0 = +)/dd>
|
||||
|
||||
<P>1 Sign of DUT (0 = +)
|
||||
<BR>2 Leap second warning. One second will be added.
|
||||
<BR>4 Leap second warning. One second will be subtracted.
|
||||
This is not likely to happen in our universe.
|
||||
<BR>8 Even parity bit for this nibble.
|
||||
<dt><tt>2</tt>
|
||||
<dd>Leap second warning. One second will be added.</dd>
|
||||
|
||||
<P>By design, the last stop bit of the last character in the burst coincides
|
||||
with 0.5 second. Since characters have 11 bits and are transmitted at 300
|
||||
bps, the last stop bit of the first character coincides with 0.5 - 10 *
|
||||
11/300 = 0.133 second. Depending on the UART, character interrupts can
|
||||
vary somewhere between the beginning of bit 9 and end of bit 11. These
|
||||
eccentricities can be corrected along with the radio propagation delay
|
||||
using <TT>fudge time1</TT>.
|
||||
<H4>
|
||||
Debugging aids</H4>
|
||||
The timecode format used for debugging and data recording includes data
|
||||
helpful in diagnosing problems with the radio signal and serial connections.
|
||||
With debugging enabled (<TT>-d -d -d</TT> on the <TT>ntpd </TT>command
|
||||
line), the driver produces one line for each burst in two formats corresponding
|
||||
to format A and B. Following is format A:
|
||||
<dt><tt>4</tt>
|
||||
<dd>Leap second warning. One second will be subtracted. This is not
|
||||
likely to happen in our universe.</dd>
|
||||
|
||||
<P><TT> n b f s m code</TT>
|
||||
<dt><tt>8</tt>
|
||||
<dd>Even parity bit for this nibble.</dd>
|
||||
|
||||
<P>where <TT>n </TT>is the number of characters in the burst (0-11), <TT>b
|
||||
</TT>the burst distance (0-40), <TT>f </TT>the field alignment (-1, 0,
|
||||
1), <TT>s </TT>the synchronization distance (0-16), <TT>m </TT>the burst
|
||||
number (2-9) and <TT>code </TT>the burst characters as received. Note that
|
||||
the hex digits in each character are reversed, so the burst
|
||||
</dl>
|
||||
|
||||
<P><TT> 10 38 0 16 9 06851292930685129293</TT>
|
||||
<p>By design, the last stop bit of the last character in the burst
|
||||
coincides with 0.5 second. Since characters have 11 bits and are
|
||||
transmitted at 300 b/s, the last stop bit of the first character
|
||||
coincides with 0.5 - 10 * 11/300 = 0.133 second. Depending on the UART,
|
||||
character interrupts can vary somewhere between the beginning of bit 9
|
||||
and end of bit 11. These eccentricities can be corrected along with the
|
||||
radio propagation delay using the <tt>fudge time1</tt> variable.
|
||||
|
||||
<P>is interpreted as containing 11 characters with burst distance 38, field
|
||||
alignment 0, synchronization distance 16 and burst number 9. The nibble-swapped
|
||||
timecode shows day 58, hour 21, minute 29 and second 39.
|
||||
<h4>Debugging Aids</h4>
|
||||
|
||||
<P>When the audio driver is compiled, format A is preceded by the gain
|
||||
(0-255) and relative signal level (0-9999). The receiver volume control
|
||||
should be set so that the gain is near the middle of the range 0-255, which
|
||||
results in a signal level near 1000.
|
||||
<p>The most convenient way to track the program status is using the
|
||||
<tt>ntpq</tt> program and the <tt>clockvar</tt> command. This displays
|
||||
the last determined timecode and related status and error counters, even
|
||||
when the program is not discipline the system clock. If the debugging
|
||||
trace feature (<tt>-d</tt> on the <tt>ntpd</tt> command line)is enabled,
|
||||
the program produces detailed status messages as it operates. If the
|
||||
<tt>fudge flag 4</tt> is set, these messages are written to the
|
||||
<tt>clockstats</tt> file. All messages produced by this driver have the
|
||||
prefix <tt>chu</tt> for convenient filtering with the Unix <tt>grep</tt>
|
||||
command.
|
||||
|
||||
<P>Following is format B:
|
||||
<p>With debugging enabled the driver produces messages in the following
|
||||
formats:
|
||||
|
||||
<P><TT> n b s code</TT>
|
||||
<p>A format <tt>chuA</tt> message is produced for each format A burst
|
||||
received in seconds 32 through 39 of the minute:
|
||||
|
||||
<P>where <TT>n </TT>is the number of characters in the burst (0-11), <TT>b
|
||||
</TT>the burst distance (0-40), <TT>s </TT>the synchronization distance
|
||||
(0-40) and <TT>code </TT>the burst characters as received. Note that the
|
||||
hex digits in each character are reversed and the last ten digits inverted,
|
||||
so the burst
|
||||
<p><tt>chuA n b s code</tt>
|
||||
|
||||
<P> <TT>11 40 1091891300ef6e76ecff</TT>
|
||||
<p>where <tt>n</tt> is the number of characters in the burst (0-11),
|
||||
<tt>b</tt> the burst distance (0-40), <tt>s</tt> the synchronization
|
||||
distance (0-40) and <tt>code</tt> the burst characters as received. Note
|
||||
that the hex digits in each character are reversed and the last ten
|
||||
digits inverted, so the burst
|
||||
<p><tt>11 40 1091891300ef6e76ecff</tt>
|
||||
<p>is interpreted as containing 11 characters with burst distance 40.
|
||||
The nibble-swapped timecode shows DUT1 +0.1 second, year 1998 and TAI -
|
||||
UTC 31 seconds.
|
||||
|
||||
<P>is interpreted as containing 11 characters with burst distance 40. The
|
||||
nibble-swapped timecode shows DUT1 +0.1 second, year 1998 and TAI - UTC
|
||||
31 seconds.
|
||||
<p>A format <tt>chuB</tt> message is produced for each format B burst
|
||||
received in second 31 of the minute:
|
||||
|
||||
<P>In addition to the above, the reference timecode is updated and written
|
||||
to the clockstats file and debug score after the last burst received in
|
||||
the minute. The format is
|
||||
<p><tt>chuB n b f s m code</tt>
|
||||
|
||||
<P> <TT> qq yyyy ddd hh:mm:ss nn dd tt</TT>
|
||||
<p>where <tt>n</tt> is the number of characters in the burst (0-11),
|
||||
<tt>b</tt> the burst distance (0-40), <tt>f</tt> the field alignment (-
|
||||
1, 0, 1), <tt>s</tt>the synchronization distance (0-16), <tt>m</tt>the
|
||||
burst number (2-9) and <tt>code</tt> the burst characters as received.
|
||||
Note that the hex digits in each character are reversed, so the burst
|
||||
|
||||
<P>where <TT>qq </TT>are the error flags, as described below, <TT>yyyy
|
||||
</TT>is the year, <TT>ddd </TT>the day, <TT>hh:mm:ss </TT>the time of day,
|
||||
<TT>nn </TT>the number of format A bursts received during the previous
|
||||
minute, <TT>dd </TT>the decoding distance and <TT>tt </TT>the number of
|
||||
timestamps. The error flags are cleared after every update.
|
||||
<p><tt>10 38 0 16 9 06851292930685129293</tt>
|
||||
|
||||
<P>For accuracy better than the low milliseconds, the <TT>fudge time1</TT>
|
||||
variable can be used to set the propagation delay and compensate for inherent
|
||||
latencies in the serial port hardware and operating system. This can be
|
||||
done conveniently using the <TT>minimuf</TT> program.
|
||||
<H4>
|
||||
Monitor Data</H4>
|
||||
When enabled by the <TT>flag4</TT> fudge flag, every received timecode
|
||||
burst in both format A or format B is written to the <TT>clockstats</TT>
|
||||
file.
|
||||
<H4>
|
||||
Fudge Factors</H4>
|
||||
<p>is interpreted as containing 11 characters with burst distance 38,
|
||||
field alignment 0, synchronization distance 16 and burst number 9. The
|
||||
nibble-swapped timecode shows day 58, hour 21, minute 29 and second 39.
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<TT>time1 <I>time</I></TT></DT>
|
||||
<p>If the CI-V interface for ICOM radios is active, a debug level
|
||||
greater than 1 will produce a trace of the CI-V command and response
|
||||
messages. Interpretation of these messages requires knowledge of the
|
||||
CI-V protocol, which is beyond the scope of this document.
|
||||
|
||||
<DD>
|
||||
Specifies the time offset calibration factor, in seconds and fraction,
|
||||
with default 0.0.</DD>
|
||||
<h4>Monitor Data</h4>
|
||||
|
||||
<DT>
|
||||
<TT>time2 <I>time</I></TT></DT>
|
||||
When enabled by the <tt>filegen</tt> facility, every received timecode
|
||||
is written to the <tt>clockstats</tt> file in the following format:
|
||||
|
||||
<DD>
|
||||
Not used by this driver.</DD>
|
||||
<pre>
|
||||
sq yy ddd hh:mm:ss.fff ld dut lset agc rfrq bcnt dist tsmp
|
||||
|
||||
<DT>
|
||||
<TT>stratum <I>number</I></TT></DT>
|
||||
s sync indicator
|
||||
q quality character
|
||||
yyyy Gregorian year
|
||||
ddd day of year
|
||||
hh hour of day
|
||||
mm minute of hour
|
||||
ss second of minute
|
||||
fff millisecond of second
|
||||
l leap second warning
|
||||
d DST state
|
||||
dut DUT sign and magnitude in deciseconds
|
||||
lset minutes since last set
|
||||
agc audio gain (0-255)
|
||||
rfrq radio frequency
|
||||
bcnt burst count
|
||||
dist decoding distance
|
||||
tsmp timestamps captured
|
||||
</pre>
|
||||
|
||||
<DD>
|
||||
Specifies the driver stratum, in decimal from 0 to 15, with default 0.</DD>
|
||||
The fields beginning with <tt>year</tt> and extending through
|
||||
<tt>dut</tt> are decoded from the received data and are in fixed-length
|
||||
format. The <tt>agc</tt> and <tt>lset</tt> fields, as well as the
|
||||
following driver-dependent fields, are in variable-length format.
|
||||
|
||||
<DT>
|
||||
<TT>refid <I>string</I></TT></DT>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
Specifies the driver reference identifier, an ASCII string from one to
|
||||
four characters, with default <TT>CHU</TT>.</DD>
|
||||
<dt><tt>s</tt>
|
||||
<dd>The sync indicator is initially <tt>?</tt> before the clock is set,
|
||||
but turns to space when the clock is correctly set.</dd>
|
||||
|
||||
<DT>
|
||||
<TT>flag1 0 | 1</TT></DT>
|
||||
<dt><tt>q</tt>
|
||||
<dd>The quality character is a four-bit hexadecimal code showing which
|
||||
alarms have been raised during the most recent minute. Each bit is
|
||||
associated with a specific alarm condition according to the following:
|
||||
|
||||
<DD>
|
||||
Not used by this driver.</DD>
|
||||
<dl>
|
||||
<dt><tt>8</tt>
|
||||
<dd>Decoder alarm. A majority of repetitions for at least one digit of
|
||||
the timecode fails to agree.
|
||||
</dd>
|
||||
|
||||
<DT>
|
||||
<TT>flag2 0 | 1</TT></DT>
|
||||
<dt><tt>4</tt>
|
||||
<dd>Timestamp alarm. Fewer than 20 timestamps have been determined.</dd>
|
||||
|
||||
<DD>
|
||||
When the audio driver is compiled, this flag selects the audio input
|
||||
<dt><tt>2</tt>
|
||||
<dd>Format alarm. The majority timecode contains invalid bit
|
||||
combinations.</dd>
|
||||
|
||||
<dt><tt>1</tt>
|
||||
<dd>Frame alarm. A framing or format error occurred on at least one
|
||||
burst during the minute.</dd>
|
||||
|
||||
</dl>
|
||||
|
||||
It is important to note that one or more of the above alarms does not
|
||||
necessarily indicate a clock error, but only that the decoder has
|
||||
detected a condition that may in future result in an error.
|
||||
|
||||
<dt><tt>yyyy ddd hh:mm:ss.fff</tt></tt>
|
||||
<dd>The timecode format itself is self explanatory. Note that the
|
||||
Gregorian year is decoded directly from the transmitted timecode.</dd>
|
||||
<dt><tt>l</tt>
|
||||
<dd>The leap second warning is normally space, but changes to <tt>L</tt>
|
||||
if a leap second is to occur at the end of the month of June or
|
||||
December.</dd>
|
||||
|
||||
<dt><tt>d</tt>
|
||||
<dd>The DST code for Canada encodes the state for all provinces.</dd>
|
||||
|
||||
<dt><tt>dut</tt>
|
||||
<dd>The DUT sign and magnitude shows the current UT1 offset relative to
|
||||
the displayed UTC time, in deciseconds.</dd>
|
||||
|
||||
<dt><tt>lset</tt>
|
||||
<dd>Before the clock is set, the interval since last set is the number
|
||||
of minutes since the program was started; after the clock is set, this
|
||||
is number of minutes since the time was last verified relative to the
|
||||
broadcast signal.</dd>
|
||||
|
||||
<dt><tt>agc</tt>
|
||||
<dd>The audio gain shows the current codec gain setting in the range 0
|
||||
to 255. Ordinarily, the receiver audio gain control or IRIG level
|
||||
control should be set for a value midway in this range.
|
||||
|
||||
<dt><tt>rfrq</tt>
|
||||
<dd>The current radio frequency, if the CI-V interface is active, or 'X'
|
||||
if not.</dd>
|
||||
|
||||
<dt><tt>bcnt</tt>
|
||||
<dd>The number of format A bursts received during the most recent minute
|
||||
bursts were received.</dd>
|
||||
|
||||
<dt><tt>dist</tt>
|
||||
<dd>The minimum decoding distance determined during the most recent
|
||||
minute bursts were received.</dd>
|
||||
|
||||
<dt><tt>tsmp</tt>
|
||||
<dd>The number of timestamps determined during the most recent
|
||||
minute bursts were received.</dd>
|
||||
</dl>
|
||||
|
||||
<h4>Modes</h4>
|
||||
|
||||
<p>The <tt>mode</tt> keyword of the <tt>server</tt> configuration
|
||||
command specifies the ICOM ID select code. A missing or zero argument
|
||||
disables the CI-V interface. Following are the ID select codes for the
|
||||
known radios.
|
||||
|
||||
<p><table cols=6 width=100%>
|
||||
|
||||
<tr>
|
||||
<td>Radio</td>
|
||||
<td>Hex</td>
|
||||
<td>Decimal</td>
|
||||
<td>Radio</td>
|
||||
<td>Hex</td>
|
||||
<td>Decimal</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC725</td>
|
||||
<td>0x28</td>
|
||||
<td>40</td>
|
||||
<td>IC781</td>
|
||||
<td>0x26</td>
|
||||
<td>38</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC726</td>
|
||||
<td>0x30</td>
|
||||
<td>48</td>
|
||||
<td>R7000</td>
|
||||
<td>0x08</td>
|
||||
<td>8</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC735</td>
|
||||
<td>0x04</td>
|
||||
<td>4</td>
|
||||
<td>R71</td>
|
||||
<td>0x1A</td>
|
||||
<td>26</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC751</td>
|
||||
<td>0x1c</td>
|
||||
<td>28</td>
|
||||
<td>R7100</td>
|
||||
<td>0x34</td>
|
||||
<td>52</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC761</td>
|
||||
<td>0x1e</td>
|
||||
<td>30</td>
|
||||
<td>R72</td>
|
||||
<td>0x32</td>
|
||||
<td>50</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC765</td>
|
||||
<td>0x2c</td>
|
||||
<td>44</td>
|
||||
<td>R8500</td>
|
||||
<td>0x4a</td>
|
||||
<td>74</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>IC775</td>
|
||||
<td>0x46</td>
|
||||
<td>68</td>
|
||||
<td>R9000</td>
|
||||
<td>0x2a</td>
|
||||
<td>42</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<h4>Fudge Factors</h4>
|
||||
|
||||
<dl>
|
||||
|
||||
<dt><tt>time1 <I>time</I></tt></dt>
|
||||
<dd>Specifies the propagation delay for CHU (45:18N 75:45N), in seconds
|
||||
and fraction, with default 0.0.</dd>
|
||||
|
||||
<dt><tt>time2 <I>time</I></tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>stratum <I>number</I></tt></dt>
|
||||
<dd>Specifies the driver stratum, in decimal from 0 to 15, with default
|
||||
0.</dd>
|
||||
|
||||
<dt><tt>refid <I>string</I></tt></dt>
|
||||
<dd>Specifies the driver reference identifier, an ASCII string from one
|
||||
to four characters, with default <tt>CHU</tt>.</dd>
|
||||
|
||||
<dt><tt>flag1 0 | 1</tt></dt>
|
||||
<dd>Not used by this driver.</dd>
|
||||
|
||||
<dt><tt>flag2 0 | 1</tt></dt>
|
||||
<dd>When the audio driver is compiled, this flag selects the audio input
|
||||
port, where 0 is the mike port (default) and 1 is the line-in port. It
|
||||
does not seem useful to select the compact disc player port.</DD>
|
||||
does not seem useful to select the compact disc player port.</dd>
|
||||
|
||||
<DT>
|
||||
<TT>flag3 0 | 1</TT></DT>
|
||||
<dt><tt>flag3 0 | 1</tt></dt>
|
||||
<dd>When the audio driver is compiled, this flag enables audio
|
||||
monitoring of the input signal. For this purpose, the speaker volume
|
||||
must be set before the driver is started.</dd>
|
||||
|
||||
<DD>
|
||||
When the audio driver is compiled, this flag enables audio monitoring of
|
||||
the input signal. For this purpose, the speaker volume must be set
|
||||
before the driver is started.</DD>
|
||||
<dt><tt>flag4 0 | 1</tt></dt>
|
||||
<dd>Enable verbose <tt>clockstats</tt> recording if set.</dd>
|
||||
|
||||
<DT>
|
||||
<TT>flag4 0 | 1</TT></DT>
|
||||
</dl>
|
||||
|
||||
<DD>
|
||||
Enable verbose <TT>clockstats</TT> recording if set.</DD>
|
||||
</DL>
|
||||
Additional Information
|
||||
<h4>Additional Information</h4>
|
||||
<A HREF="refclock.htm">Reference Clock Drivers</A>
|
||||
<br><A HREF="audio.htm">Reference Clock Audio Drivers</A>
|
||||
|
||||
<P><A HREF="file:///J|/ntp4/html/refclock.htm">Reference Clock Drivers</A>
|
||||
<HR>
|
||||
<ADDRESS>
|
||||
David L. Mills (mills@udel.edu)</ADDRESS>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
||||
|
@ -82,7 +82,7 @@ available. refclock_ppstime lists then the PPS timestamp and
|
||||
refclock_ppsskew lists the difference between RS232
|
||||
derived timestamp and the PPS timestamp.
|
||||
|
||||
<P>Currently, fourteen clock types (devices /dev/refclock-0 -
|
||||
<P>Currently, eighteen clock types (devices /dev/refclock-0 -
|
||||
/dev/refclock-3) are supported by the PARSE driver.
|
||||
<BR>A note on the implementations:
|
||||
<UL><li>These implementations where mainly done <B><I>WITHOUT</I></B>
|
||||
@ -120,16 +120,16 @@ the vendors web pages. They are linked to the respective vendors.
|
||||
<B><TT>server 127.127.8.0-3 mode 0</TT></B>
|
||||
|
||||
<p><B><TT><A HREF="http://www.meinberg.de">Meinberg </A>PZF535/<A
|
||||
HREF="http://www.meinberg.de/english/pzf509.htm">PZF509 receiver</A> (FM
|
||||
HREF="http://www.meinberg.de/english/products/pzf509.htm">PZF509 receiver</A> (FM
|
||||
demodulation/TCXO / 50us)</TT></B>
|
||||
<BR>
|
||||
<LI>
|
||||
<B><TT>server 127.127.8.0-3 mode 1</TT></B>
|
||||
|
||||
<p><B><TT><A HREF="http://www.meinberg.de">Meinberg </A> PZF535/<A
|
||||
HREF="http://www.meinberg.de/english/pzf509.htm">PZF509
|
||||
HREF="http://www.meinberg.de/english/products/pzf509.htm">PZF509
|
||||
receiver</A> (FM demodulation/OCXO / 50us)</TT></B>
|
||||
<BR><A HREF="http://www.meinberg.de/english/pzf509.htm"><IMG
|
||||
<BR><A HREF="http://www.meinberg.de/english/products/pzf509.htm"><IMG
|
||||
SRC="pic/pzf509.jpg" ALT="BILD PZF509" HEIGHT=300 WIDTH=260
|
||||
ALIGN=TEXTTOP></A>
|
||||
<BR>
|
||||
@ -137,9 +137,9 @@ ALIGN=TEXTTOP></A>
|
||||
<B><TT>server 127.127.8.0-3 mode 2</TT></B>
|
||||
|
||||
<p><B><TT><A HREF="http://www.meinberg.de">Meinberg </A> DCF U/A
|
||||
31/<A HREF="http://www.meinberg.de/english/c51.htm">DCF C51 receiver</A>
|
||||
31/<A HREF="http://www.meinberg.de/english/products/c51.htm">DCF C51 receiver</A>
|
||||
(AM demodulation / 4ms)</TT></B>
|
||||
<BR><A HREF="http://www.meinberg.de/english/c51.htm"><IMG
|
||||
<BR><A HREF="http://www.meinberg.de/english/products/c51.htm"><IMG
|
||||
SRC="pic/c51.jpg" ALT="BILD C51" HEIGHT=180 WIDTH=330 ALIGN=TEXTTOP></A>
|
||||
<BR>
|
||||
<LI>
|
||||
@ -171,9 +171,9 @@ demodulation
|
||||
<B><TT>server 127.127.8.0-3 mode 7</TT></B>
|
||||
|
||||
<p><B><TT><A HREF="http://www.meinberg.de">Meinberg </A> <A
|
||||
HREF="http://www.meinberg.de/english/gps167.htm">GPS166/GPS167
|
||||
HREF="http://www.meinberg.de/english/products/gps167.htm">GPS166/GPS167
|
||||
receiver</A> (GPS / <<1us)</TT></B>
|
||||
<BR><A HREF="http://www.meinberg.de/english/gps167.htm"><IMG
|
||||
<BR><A HREF="http://www.meinberg.de/english/products/gps167.htm"><IMG
|
||||
SRC="pic/gps167.jpg" ALT="BILD GPS167" HEIGHT=300 WIDTH=280
|
||||
ALIGN=TEXTTOP></A>
|
||||
<BR>
|
||||
@ -237,6 +237,16 @@ ALIGN=TEXTTOP></A>
|
||||
|
||||
<p><B><TT>WHARTON 400A Series Clocks with a 404.2 Serial
|
||||
Interface</TT></B>
|
||||
<LI>
|
||||
<B><TT>server 127.127.8.0-3 mode 16</TT></B>
|
||||
|
||||
<p><B><TT>RAWDCF receiver (DTR=low/RTS=high)
|
||||
</TT></B>
|
||||
<LI>
|
||||
<B><TT>server 127.127.8.0-3 mode 17</TT></B>
|
||||
|
||||
<p><B><TT>VARITEXT Receiver (MSF)
|
||||
</TT></B>
|
||||
</UL>
|
||||
<p>
|
||||
Actual data formats and set-up requirements of the various clocks can be
|
||||
|
320
contrib/ntp/html/hints/solaris-dosynctodr.html
Normal file
320
contrib/ntp/html/hints/solaris-dosynctodr.html
Normal file
@ -0,0 +1,320 @@
|
||||
|
||||
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
|
||||
|
||||
|
||||
<!-- Sun Template V4.0 9/9/98 -->
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<TITLE>Symptoms and Resolutions Article 19195</TITLE>
|
||||
<META NAME="GENERATOR" CONTENT="Sun Microsystems, Inc.">
|
||||
<META HTTP-EQUIV="content-type" CONTENT="text/html;charset=iso-8859-1">
|
||||
|
||||
<!-- INSERT YOUR META TAGS HERE -->
|
||||
|
||||
<META NAME="PUBLISHED_DATE" CONTENT="">
|
||||
<META NAME="KEYWORDS" CONTENT="">
|
||||
<META NAME="DESCRIPTION" CONTENT="">
|
||||
|
||||
<!-- END META TAGS -->
|
||||
|
||||
<LINK REL="Stylesheet" TYPE="text/css" HREF="/style.css" TITLE="Style">
|
||||
|
||||
</HEAD>
|
||||
<!--stopindex-->
|
||||
<BODY BGCOLOR="#FFFFFF" LINK="#666699" ALINK="#FFFFFF">
|
||||
|
||||
|
||||
<TABLE WIDTH="623" BORDER="0" CELLSPACING="0" CELLPADDING="0">
|
||||
<TR>
|
||||
<TD COLSPAN="2" VALIGN="TOP" WIDTH="623">
|
||||
<IMG BORDER="0" SRC="/images/homebuy.gif" WIDTH="149" HEIGHT="32" ALT="Home * Buy * My Sun(sm)" USEMAP="#lefttop"><IMG BORDER="0" SRC="/images/globalnavbar.gif" WIDTH="474" HEIGHT="32" ALT="sun.com Global Sections" USEMAP="#topnav"></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD COLSPAN="2" VALIGN="TOP" WIDTH="623">
|
||||
|
||||
<!-- TITLEBAR IMAGE: INSERT CUSTOMIZED TITLEBAR IMAGE BELOW -->
|
||||
|
||||
<A HREF="http://www.sun.com/"><IMG BORDER="0" SRC="/images/sunlogo.gif" WIDTH="149" HEIGHT="72" ALT="Sun Microsystems"></A><IMG BORDER="0" SRC="/images/titlebar/doc.title.gif" WIDTH="474" HEIGHT="72"></TD>
|
||||
</TR>
|
||||
<!-- Begin Search Elements -->
|
||||
<TR VALIGN="top">
|
||||
<TD BGCOLOR="#666699">
|
||||
<TABLE BORDER="0" WIDTH="157" CELLSPACING="0" CELLPADDING="0">
|
||||
<TR>
|
||||
<TD BGCOLOR="#666699" COLSPAN="2" WIDTH="157" VALIGN="TOP"><IMG BORDER="0" SRC="/images/search/contract/search1.gif" WIDTH="157" HEIGHT="16" ALT="Search SunSolve"></TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD VALIGN="top" ALIGN="center" WIDTH="141" BGCOLOR="#666699"><FORM ACTION="search.pl" METHOD="POST"><FONT SIZE="2"><INPUT TYPE="text" NAME="zone_32" SIZE="14"></FONT><input type=hidden name=mode value=results><BR>
|
||||
<INPUT TYPE="image" SRC="/images/search/contract/search5.gif" BORDER="0" NAME="Search"><IMG SRC="/images/cg_clear.gif" ALT="" WIDTH="2" HEIGHT="1" BORDER="0" HSPACE="29" VSPACE="0"><BR>
|
||||
|
||||
<A HREF="search.pl?mode=advanced"><IMG BORDER="0" SRC="/images/search/contract/search3.gif" WIDTH="144" HEIGHT="16" ALT="Advanced Search"></A><BR>
|
||||
|
||||
<A HREF="search.pl?mode=product"><IMG SRC="/images/search/contract/search4.gif" BORDER="0" ALT="Product Search" WIDTH="144" HEIGHT="19"></A><BR>
|
||||
|
||||
<A HREF="show.pl?target=help/search_tips"><IMG SRC="/images/search/contract/search6.gif" BORDER="0" ALT="Search Tips" WIDTH="144" HEIGHT="27"></A></TD>
|
||||
<TD ALIGN="right"><IMG SRC="/images/search/contract/search2.gif" ALT="" WIDTH="13" HEIGHT="117" BORDER="0"></TD>
|
||||
</TR>
|
||||
<!-- End Search Elements -->
|
||||
<!-- Begin User Personalization (Must limit to 10 Characters)-->
|
||||
<TR>
|
||||
<TD COLSPAN="2"><TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" WIDTH="157"><TR><TD COLSPAN="3" ALIGN="right"><IMG SRC="/images/home_con/welcom_1.gif" ALT="" WIDTH="156" HEIGHT="4" BORDER="0"></TD></TR>
|
||||
<TR><TD BGCOLOR="#333366"><IMG SRC="/images/home_con/welcom_2.gif" ALT="" WIDTH="17" HEIGHT="19" BORDER="0"></TD><TD BGCOLOR="#333366" VALIGN="middle"><NOBR><FONT FACE="Geneva, Helvetica, Arial, SunSans-Regular" COLOR="#99CC33" SIZE="-2">sopko</FONT></NOBR></TD><TD BGCOLOR="#333366" ALIGN="right"><A HREF="edit-user-form.pl?viewmode=contractuser"><IMG SRC="/images/home_con/welcom_3.gif" ALT="Edit" WIDTH="45" HEIGHT="19" BORDER="0"></A></TD></TR>
|
||||
</TABLE>
|
||||
</TD>
|
||||
</TR>
|
||||
<!-- End User Personalization -->
|
||||
|
||||
<TR>
|
||||
<TD COLSPAN="2" ALIGN="right" VALIGN="top" WIDTH="157" BGCOLOR="#666699"><IMG BORDER="0" SRC="/images/ssolvecontents.gif" WIDTH="157" HEIGHT="37" ALT="Contents Of SunSolve"><BR>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<!-- PILLS: CHANGE THE PILL FOR CURRENT SECTION TO THE HIGHLIGHTED PILL -->
|
||||
<!-- Beginning of Nav area -->
|
||||
<A HREF="show.pl?target=patches/patch-access" onmouseover="window.status='All Public Patches'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/p1.gif" WIDTH="157" HEIGHT="19" ALT="All Public Patches"></A><BR>
|
||||
<A HREF="suncourier.pl" onmouseover="window.status='Submit a Service Order'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/p5.gif" WIDTH="157" HEIGHT="19" ALT="Submit a Service Order"></A><BR>
|
||||
<A HREF="show.pl?target=resources/tools" onmouseover="window.status='Diagnostic Tools'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/p4.gif" WIDTH="157" HEIGHT="19" ALT="Diagnostic Tools"></A><BR>
|
||||
<A HREF="show.pl?target=help/collections" onmouseover="window.status='Support Docs.'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/cp2.gif" WIDTH="157" HEIGHT="19" ALT="Support Docs."></A><BR>
|
||||
<A HREF="show.pl?target=resources/y2k" onmouseover="window.status='Y2K Central'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/p3.gif" WIDTH="157" HEIGHT="19" ALT="Y2K Central"></A><BR>
|
||||
<A HREF="show.pl?target=security/sec" onmouseover="window.status='Security Information'; return true" onmouseout="window.status=''; return true">
|
||||
<IMG BORDER="0" SRC="/images/nav/p2.gif" WIDTH="157" HEIGHT="19" ALT="Security Information"></A><BR>
|
||||
<br><table cellpadding="0" cellspacing="0" border="0" width="157">
|
||||
<tr><td width="8"> </td><td width="149">
|
||||
<table cellpadding="0" cellspacing="0" border="0">
|
||||
<BR><tr><td><BR><img src="/images/line.gif" alt="------" width="140" height="11" border="0"><br>
|
||||
<A HREF="mark.pl"
|
||||
onmouseover="window.status='Marked Docs.';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Marked Docs.</FONT></A><BR>
|
||||
<A HREF="notify.pl"
|
||||
onmouseover="window.status='Notifications';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Notifications</FONT></A><BR>
|
||||
<A HREF="/plain-cgi/show.pl?target=home_con"
|
||||
onmouseover="window.status='Low Graphics';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Low Graphics</FONT></A><BR>
|
||||
<A HREF="show.pl?target=link"
|
||||
onmouseover="window.status='SunSolve Servers';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">SunSolve Servers</FONT></A><BR>
|
||||
<A HREF="show.pl?target=about_sunsolve"
|
||||
onmouseover="window.status='About SunSolve';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">About SunSolve</FONT></A><BR>
|
||||
<A HREF="feedback.pl"
|
||||
onmouseover="window.status='Contact Us';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Contact Us</FONT></A><BR>
|
||||
<A HREF="show.pl?target=help/sitemap"
|
||||
onmouseover="window.status='Site Map';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Site Map</FONT></A><BR>
|
||||
<A HREF="show.pl?target=article/article"
|
||||
onmouseover="window.status='Articles';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Articles</FONT></A><BR>
|
||||
<A HREF="show.pl?target=home_con"
|
||||
onmouseover="window.status='Home';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Home</FONT></A><BR>
|
||||
<A HREF="show.pl?target=help/faq"
|
||||
onmouseover="window.status='Help';return true"
|
||||
onmouseout="window.status='';return true">
|
||||
<font class="locallink" color="#dddddd">Help</FONT></A><BR>
|
||||
<br></td></tr></table></td></tr></table>
|
||||
<!-- End of Nav area -->
|
||||
|
||||
</FORM>
|
||||
<br><br><!-- some spacers -->
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
</TD>
|
||||
<TD VALIGN="TOP" WIDTH="466">
|
||||
|
||||
|
||||
<!--startindex-->
|
||||
<!-- ============ -->
|
||||
<!-- MAIN CONTENT -->
|
||||
<!-- ============ -->
|
||||
|
||||
|
||||
|
||||
<table width=100% cellpadding=16 cellspacing=0 border=0>
|
||||
<tr>
|
||||
<td width=100% valign=top>
|
||||
<CENTER><FONT FACE="Geneva, Helvetica, Arial, SunSans-Regular" SIZE="2">
|
||||
[ <a href="retrieve.pl?type=0&doc=srdb%2F19195&display=plain">Printer Friendly Page</a> ]
|
||||
[ <b>Was this document useful? <a href="retrieve.pl?type=0&doc=srdb/19195&vote=yes">Yes</a> or <a href="retrieve.pl?type=0&doc=srdb/19195&vote=no">No</a></b> ]<br>[ <a href="notify.pl?action=add&doc=srdb%2F19195&type=synopsis">Notify if Document Changes</a> ]
|
||||
[ <a href="mark.pl?action=add&doc=srdb%2F19195&type=0">Mark Document for Download</a> ]<br>[ <a href="notify.pl">View/Edit Notifications</a> ]
|
||||
[ <a href="mark.pl">View/Edit Marked Documents</a> ]<br></FONT></CENTER><br>
|
||||
<SCRIPT Language="JavaScript">
|
||||
<!-- Hide javascript from older browsers
|
||||
function jump()
|
||||
{
|
||||
var ctl = document.docform.jumplist;
|
||||
location.href = ctl.options[ctl.selectedIndex].value;
|
||||
}
|
||||
// End hiding contents -->
|
||||
</SCRIPT>
|
||||
<a name="top">
|
||||
<form name="docform"><div align=center><font size=2> Jump to <select name="jumplist" size=1 onchange="jump();"></font><option value="#Hardware">Hardware</option>
|
||||
<option value="#Product">Product</option>
|
||||
<option value="#Product-Area">Product Area</option>
|
||||
<option value="#Synopsis">Synopsis</option>
|
||||
<option value="#Problem-Description">Problem Description</option>
|
||||
<option value="#Document-Content">Document Content</option>
|
||||
<option value="#Problem-Solution">Problem Solution</option>
|
||||
<option value="#SRDB-ID">SRDB ID</option>
|
||||
<option value="#OS">OS</option>
|
||||
</select></div></form>
|
||||
<table width=100% cellpadding=2 cellspacing=0 border=0>
|
||||
<tr bgcolor=#666699><td><font size=2 color=#ffffff><b>SRDB ID</b></font></td>
|
||||
<td bgcolor=#ffffff><font size=2> </font></td>
|
||||
<td><font size=2 color=#ffffff><b>Synopsis</b></font></td>
|
||||
<td bgcolor=#ffffff><font size=2> </font></td>
|
||||
<td><font size=2 color=#ffffff><b>Date</b></font></td>
|
||||
</tr>
|
||||
<tr bgcolor=#CCCCE7><td><font size=2><b>19195</b></font></td>
|
||||
<td bgcolor=#ffffff><font size=2> </font></td>
|
||||
<td><font size=2><b>Upgraded to 2.6, using xntpd, but the system clock is drifting. Worked fine</b></font></td>
|
||||
<td bgcolor=#ffffff><font size=2> </font></td>
|
||||
<td><font size=2><b>4 Sep 1999</b></font></td>
|
||||
</tr>
|
||||
</table><br clear>
|
||||
<table width=100% cellpadding=2 cellspacing=0 border=0><tr bgcolor=#999999>
|
||||
<td><font size=2 color=#ffffff><b><a name=Problem-Description>Problem Description</a></b></font></td>
|
||||
<td align=right><b><a href="#top"><font size=2 color=#ffffff>Top</font></a></b></td></tr></table>
|
||||
<pre>Ever since upgrading to Solaris 2.6, the system clock has been drifting and
|
||||
there are messages like 'synchronisation lost', 'Previous time adjustment
|
||||
didn''t complete' and 'time reset (step)' a lot in the /var/adm/messages
|
||||
file. The system either was previously working fine with the freeware
|
||||
xntpd or the configuration was copied from another system that was
|
||||
using the freeware version.
|
||||
-- 23-Apr-99 08:22 US/Eastern --</pre><table width=100% cellpadding=2 cellspacing=0 border=0><tr bgcolor=#999999>
|
||||
<td><font size=2 color=#ffffff><b><a name=Problem-Solution>Problem Solution</a></b></font></td>
|
||||
<td align=right><b><a href="#top"><font size=2 color=#ffffff>Top</font></a></b></td></tr></table>
|
||||
<pre>The common lore for setting up xntpd on Solaris using
|
||||
the freeware version included the warning to set the
|
||||
kernel variable <font color=red>dosynctodr</font> to 0 in the /etc/system
|
||||
file thus: set <font color=red>dosynctodr</font>=0
|
||||
|
||||
When using NTP on Solaris 2.6 or later, the kernel
|
||||
variable MUST be left at the default value of 1. Prior
|
||||
to 2.6 this variable controlled whether or not to rein
|
||||
in the softclock using the hardware clock, with the result
|
||||
that NTP and the hardware clock would fight for control of
|
||||
the soft clock; thus before 2.6 you had to set <font color=red>dosynctodr</font>
|
||||
to 0. At 2.6, every system call that adjusts the softclock
|
||||
also sets the hard clock, thus while NTP controls the soft
|
||||
clock, the hard clock is also controlled. Setting
|
||||
<font color=red>dosynctodr</font> to 0 reverts the behavior back to the pre 2.6
|
||||
defaulkt behavior, having exactly the opposite effect
|
||||
as that intended.
|
||||
|
||||
Do not set <font color=red>dosynctodr</font> to 0.</pre><table width=100% cellpadding=2 cellspacing=0 border=0>
|
||||
<tr><td bgcolor=#999999 valign=top width=25%><font color=#ffffff size=2><b><a name=Product-Area>Product Area</a></b></font></td>
|
||||
<td bgcolor=#cccccc valign=top width=75%><font size=2>Bundled Network</font></td></tr>
|
||||
<tr><td bgcolor=#999999 valign=top width=25%><font color=#ffffff size=2><b><a name=Product>Product</a></b></font></td>
|
||||
<td bgcolor=#cccccc valign=top width=75%><font size=2>NTP</font></td></tr>
|
||||
<tr><td bgcolor=#999999 valign=top width=25%><font color=#ffffff size=2><b><a name=OS>OS</a></b></font></td>
|
||||
<td bgcolor=#cccccc valign=top width=75%><font size=2>Solaris 2.6</font></td></tr>
|
||||
<tr><td bgcolor=#999999 valign=top width=25%><font color=#ffffff size=2><b><a name=Hardware>Hardware</a></b></font></td>
|
||||
<td bgcolor=#cccccc valign=top width=75%><font size=2>Ultra 2</font></td></tr>
|
||||
<tr><td bgcolor=#999999 valign=top width=25%><font color=#ffffff size=2><b><a name=Document-Content>Document Content</a></b></font></td>
|
||||
<td bgcolor=#cccccc valign=top width=75%><font size=2>with freeware xntpd.</font></td></tr>
|
||||
</table><br clear>
|
||||
<font size=2><a href="#top">Top</a></font><br><br>
|
||||
</td></tr></table>
|
||||
|
||||
<!-- =================== -->
|
||||
<!-- END OF MAIN CONTENT -->
|
||||
<!-- =================== -->
|
||||
<!--stopindex-->
|
||||
|
||||
<!-- DON'T CHANGE INFORMATION OTHER THAN titlebar BELOW THIS LINE -->
|
||||
|
||||
<!-- Altered Table Structure from Template to format properly with new design -->
|
||||
</TD>
|
||||
</TR>
|
||||
<TR>
|
||||
<TD> </TD>
|
||||
<TD VALIGN="top">
|
||||
<center>
|
||||
<IMG SRC="/images/cg_grey_line.gif" ALT="" WIDTH="466" HEIGHT="2" BORDER="0"><BR>
|
||||
<IMG SRC="/images/cg_clear.gif" ALT="" WIDTH="1" HEIGHT="2" BORDER="0" HSPACE="0" VSPACE="4">
|
||||
</center>
|
||||
<CENTER>
|
||||
<FONT FACE="Geneva, Helvetica, Arial, SunSans-Regular" SIZE="2">
|
||||
[ <A HREF="edit-user-form.pl?viewmode=contractuser">Edit Account</A> ]
|
||||
[ <A HREF="show.pl?target=patches/patch-access">Patches</A> ]
|
||||
[ <A HREF="suncourier.pl">Submit a Service Order</A> ]<br>
|
||||
[ <A HREF="show.pl?target=resources/tools">Diagnostic Tools</A> ]
|
||||
[ <A HREF="show.pl?target=help/collections">Support Docs.</A> ]
|
||||
[ <A HREF="show.pl?target=resources/y2k">Y2K Central</A> ]
|
||||
[ <A HREF="show.pl?target=security/sec">Security Information</A> ] <br>
|
||||
[ <A HREF="show.pl?target=link">SunSolve Servers </A> ]
|
||||
[ <A HREF="show.pl?target=about_sunsolve">About SunSolve</A> ]
|
||||
[ <A HREF="feedback.pl">Contact Us</A> ]
|
||||
[ <A HREF="show.pl?target=help/sitemap">Site Map</A> ]
|
||||
[ <A HREF="show.pl?target=article/article">Articles</A> ]
|
||||
[ <A HREF="show.pl?target=home_con">Home</A> ]
|
||||
[ <A HREF="show.pl?target=help/faq">Help</A> ]
|
||||
</FONT>
|
||||
</CENTER>
|
||||
|
||||
<!-- MAPS -->
|
||||
<MAP NAME="lefttop">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/MySun/" ALT="My Sun" COORDS="89,0 149,32">
|
||||
<AREA SHAPE="rect" HREF="show.pl?target=home_con" ALT="Home" COORDS="0,0 42,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/sales/" ALT="Buy" COORDS="54,0 78,32">
|
||||
</MAP>
|
||||
|
||||
|
||||
<MAP NAME="topnav">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/java/" ALT="Java Technologies" COORDS="4,0,67,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/products-n-solutions/" ALT="Products and Solutions" COORDS="74,0,141,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/service/" ALT="Support, Education, and Consulting" COORDS="148,0,249,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/tech/" ALT="Technology and Research" COORDS="261,0,324,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/developers/developers.html" ALT="For Developers" COORDS="334,0,396,32">
|
||||
<AREA SHAPE="rect" HREF="http://www.sun.com/corporateoverview/" ALT="Corporate Information" COORDS="406,0,482,32">
|
||||
</MAP>
|
||||
|
||||
<!-- INSERT titlebar HREFS BELOW -->
|
||||
<MAP NAME="titlebar">
|
||||
<!-- LINK TO SEC HOME Removed because no longer needed on this template -->
|
||||
<AREA SHAPE="rect" HREF="/visual/home/" ALT="SunSolve Online(tm)" COORDS="0,21,215,51"> <!-- LINK TO CURRENT PILL HOME -->
|
||||
</MAP>
|
||||
|
||||
|
||||
<!-- begin copyright notice -->
|
||||
|
||||
<BR>
|
||||
<CENTER>
|
||||
<FONT FACE="Geneva, Helvetica, Arial, SunSans-Regular" COLOR="#999999" SIZE="2">
|
||||
<br>
|
||||
Copyright 1994-1999 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, CA 94303 USA.
|
||||
<br>
|
||||
All rights reserved.
|
||||
<a href="http://www.sun.com/share/text/SMICopyright.html">Legal Terms</a>.
|
||||
<a href="http://www.sun.com/privacy/">Privacy Policy</a>.
|
||||
</font>
|
||||
</CENTER>
|
||||
|
||||
<!-- end copyright notice -->
|
||||
|
||||
</TD>
|
||||
</TR>
|
||||
</TABLE>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
|
@ -14,9 +14,13 @@ that you will have problems; upgrading would be a really good plan.
|
||||
<P>
|
||||
<H3>All Solaris versions</H3>
|
||||
<P>
|
||||
Proper operation of ntp under Solaris requires setting the kernel
|
||||
We have a report that says starting with Solaris 2.6 we should leave
|
||||
<I>dosynctodr</I> alone.
|
||||
<A HREF="solaris-dosynctodr.html">Here is the report</A>.
|
||||
<P>
|
||||
Proper operation of ntp under Solaris may require setting the kernel
|
||||
variable <I>dosynctodr</I> to zero (meaning "do not synchronize the clock
|
||||
to the hardware time-of-day clock"). This can be done with the
|
||||
to the hardware time-of-day clock"). This can be done with the
|
||||
tickadj utility:
|
||||
<BLOCKQUOTE><TT>
|
||||
tickadj -s
|
||||
|
@ -2,6 +2,7 @@
|
||||
if [ $1 = "start" ]; then
|
||||
if [ -x /usr/local/bin/xntpd ]; then
|
||||
echo "Starting NTP daemon, takes about 1 minute... "
|
||||
# dosynctodr may need to be left alone as of with Solaris 2.6
|
||||
# The following line is unnecessary if you turn off
|
||||
# dosynctodr in /etc/system.
|
||||
/usr/local/bin/tickadj -s
|
||||
|
315
contrib/ntp/html/hints/winnt.htm
Normal file
315
contrib/ntp/html/hints/winnt.htm
Normal file
@ -0,0 +1,315 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>NTP on Windows NT</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<h1>
|
||||
NTP 4.x for Windows NT</h1>
|
||||
|
||||
<h2>
|
||||
Introduction</h2>
|
||||
The NTP 4 distribution runs as service on (i386) Windows NT 4.0 and Windows
|
||||
2000. The binaries now work on all dual processor systems (mostly Dell)
|
||||
that have been tested. This port has not been tested on the Alpha platform.
|
||||
<p>Refer to System Requirements and Instructions for how to compile the
|
||||
program.
|
||||
<h2>
|
||||
Reference Clocks</h2>
|
||||
Refernce clock support under Windows NT is tricky because the IO functions
|
||||
are so much different. The following reference clocks are supported by
|
||||
Windows NT:
|
||||
<p><a href="../driver1.htm">Type 1</a> Undisciplined Local Clock (LOCAL)
|
||||
<br><a href="../driver29.htm">Type 29</a> Trimble Navigation Palisade GPS
|
||||
(GPS_PALISADE)
|
||||
<h2>
|
||||
Functions Supported</h2>
|
||||
All NTP functions are supported with some constraints. See the TODO list
|
||||
below.
|
||||
<h2>
|
||||
Accuracy</h2>
|
||||
Greg Brackley has implemented a fantastic interpolation scheme that improves
|
||||
the precision of the NTP clock using a realtime thread (is that poetic
|
||||
or what!) which captures a tick count from the 8253 counter after each
|
||||
OS tick. The count is used to interpolate the time between operating system
|
||||
ticks.
|
||||
<p>On a typical 200+ MHz system NTP achieves a precision of about 5 microseconds
|
||||
and synchronizes the clock to +/-500 microseconds using the <a href="http://www.trimble.com/products/ntp">Trimble
|
||||
Palisade</a> as UTC reference. This allows distributed applications to
|
||||
use the 10 milliseconds ticks available to them with high confidence.
|
||||
<h2>
|
||||
Binaries</h2>
|
||||
Recent InstallShield based executable versions of NTP for Windows NT (i386)
|
||||
are available from:
|
||||
<br><a href="http://www.trimble.com/oem/ntp">http://www.trimble.com/oem/ntp</a>
|
||||
and <a href="http://www.five-ten-sg.com/">http://www.five-ten-sg.com/</a>
|
||||
<h2>
|
||||
ToDo</h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
MD5 authentication causes problems with DNS. If you use encryption/authentication,
|
||||
you have to use IP numbers in <tt>ntp.conf.</tt></li>
|
||||
|
||||
<li>
|
||||
NMEA refclock support is in development.</li>
|
||||
|
||||
<li>
|
||||
See if precision can be improved by using CPU cycle counter for tick interpolation.</li>
|
||||
|
||||
<li>
|
||||
Make precision time available to applications using NTP_GETTIME API</li>
|
||||
</ul>
|
||||
|
||||
<h2>
|
||||
Compiling Requirements</h2>
|
||||
|
||||
<ul>
|
||||
<li>
|
||||
<tt>Windows NT 4.0 or 5.0 (2000)</tt></li>
|
||||
|
||||
<li>
|
||||
<tt>Microsoft Visual C++ 6.0</tt></li>
|
||||
|
||||
<li>
|
||||
<tt>Perl5 </tt><a href="http://www.perl.org">http://www.perl.org</a></li>
|
||||
|
||||
<li>
|
||||
Some version of the archiving program <tt>ZIP</tt>.</li>
|
||||
</ul>
|
||||
|
||||
<h2>
|
||||
Compiling Instructions</h2>
|
||||
|
||||
<ol>
|
||||
<li>
|
||||
Install Perl and set the PERL environment variable to your Perl directory
|
||||
(e.g. C:\PERL)</li>
|
||||
|
||||
<li>
|
||||
Unpack the NTP-4.x.tar.gz</li>
|
||||
|
||||
<li>
|
||||
Open the .\ports\winnt\ntp.dsw Visual C workspace</li>
|
||||
|
||||
<li>
|
||||
Batch build all projects</li>
|
||||
</ol>
|
||||
|
||||
<h2>
|
||||
Configuration File</h2>
|
||||
The default NTP configuration file path is %SystemRoot%<tt>\system32\drivers\etc\.
|
||||
</tt>(%SystemRoot%
|
||||
is an environmental variable that can be determined by typing "set" at
|
||||
the "Command Prompt" or from the "System" icon in the "Control Panel").
|
||||
<br>Refer to your system environment and <tt>c</tt>reate your<tt> ntp.conf</tt>
|
||||
file in the directory corresponding to your system installation.
|
||||
<br><tt>The older <WINDIR>\ntp.conf </tt>is still supported but you
|
||||
will get a log entry reporting that the first file wasn't found.
|
||||
<h2>
|
||||
Installation Instructions</h2>
|
||||
The <tt>instsrv</tt> program in the instsrv subdirectory of the distribution
|
||||
can be used to install 'ntpd' as a service and start automatically at boot
|
||||
time. Instsrv is automatically compiled with the rest of the distribution
|
||||
if you followed the steps above.
|
||||
<ol>
|
||||
<li>
|
||||
Start a command prompt and enter "instsrv.exe <pathname_for_ntpd.exe>"</li>
|
||||
|
||||
<li>
|
||||
Clicking on the "Services" icon in the "Control Panel" will display the
|
||||
list of currently installed services in a dialog box. The NetworkTimeProtocol
|
||||
service should show up in this list. Select it in the list and hit the
|
||||
"Start" button in the dialog box. The NTP service should start.</li>
|
||||
|
||||
<li>
|
||||
View the event log by clicking on the "Event Viewer" icon in the "Administrative
|
||||
Tools" group, there should be several successful startup messages from
|
||||
NTP. NTP will keep running and restart automatically when the machine is
|
||||
rebooted.</li>
|
||||
</ol>
|
||||
You can change the start mode (automatic/manual) and other startup parameters
|
||||
correponding to the NTP service (eg. location of conf file) also in the
|
||||
"Services" dialog box if you wish.
|
||||
<h2>
|
||||
Removing NTP</h2>
|
||||
You can also use <tt>instsrv</tt> to delete the NTP service by entering:
|
||||
"instsrv.exe remove"
|
||||
<h2>
|
||||
Command Line Parameters and Registry Entries</h2>
|
||||
Unlike the Unix environment, there is no clean way to run 'ntpdate' and
|
||||
reset the clock before starting 'ntpd' at boot time.
|
||||
<br>NTP will step the clock up to 1000 seconds by default. While there
|
||||
is no reason that the system clock should be that much off during bootup
|
||||
if 'ntpd' was running before, you may wish to override this default and/or
|
||||
pass other command line directives.
|
||||
<p>Use the registry editor to edit the value for the ntpd executable under
|
||||
LocalMachine\System\CurrentControlSet\Services\NetworkTimeProtocol.
|
||||
<p>Add the -g option behind "%INSTALLDIR>\ntpd". This will force NTP to
|
||||
accept large time errors (including 1.1.1980 00:00)
|
||||
<h2>
|
||||
Bug Reports</h2>
|
||||
Send bug reports to <a href="news://comp.protocols.time.ntp">news://comp.protocols.time.ntp</a>
|
||||
and Sven_Dietrich@Trimble.COM
|
||||
<h2>
|
||||
Change Log</h2>
|
||||
|
||||
<h3>
|
||||
Last revision 15 November 1999 Version 4.0.98f.</h3>
|
||||
<b>by Sven Dietrich (sven_dietrich@trimble.com)</b>
|
||||
<p><b>Significant Changes:</b>
|
||||
<ul>
|
||||
<li>
|
||||
Fixed I/O problem delaying packet responses which resulted in no-replys
|
||||
to NTPQ and others.</li>
|
||||
|
||||
<li>
|
||||
The default configuration file path is <tt><WINDIR>\system32\drivers\etc\ntp.conf.
|
||||
The old <WINDIR>\ntp.conf </tt>is still supported but you will get a
|
||||
log entry reporting that the first file wasn't found. The NTP 3.x legacy
|
||||
<tt>ntp.ini</tt>
|
||||
file is no longer supported.</li>
|
||||
</ul>
|
||||
<b>Known Problems / TODO:</b>
|
||||
<ul>
|
||||
<li>
|
||||
MD5 and name resolution do not yet get along. If you define MD5, you cannot
|
||||
use DNS names, only IP numbers.</li>
|
||||
</ul>
|
||||
|
||||
<h3>
|
||||
Last revision 27 July 1999 Version 4.0.95.</h3>
|
||||
This version compiles under WINNT with Visual C 6.0.
|
||||
<p>Greg Brackley and Sven Dietrich
|
||||
<p>Significant changes:
|
||||
<br>-Visual Studio v6.0 support
|
||||
<br>-Winsock 2.0 support
|
||||
<br>-Use of I/O completion ports for sockets and comm port I/O
|
||||
<br>-Removed the use of multimedia timers (from ntpd, others need removing)
|
||||
<br>-Use of waitable timers (with user mode APC) and performance counters
|
||||
to fake getting a better time
|
||||
<br>-Trimble Palisade NTP Reference Clock support
|
||||
<br>-General cleanup, prototyping of functions
|
||||
<br>-Moved receiver buffer code to a separate module (removed unused members
|
||||
from the recvbuff struct)
|
||||
<br>-Moved io signal code to a separate module
|
||||
<h3>
|
||||
Last revision: 20-Oct-1996</h3>
|
||||
This version corrects problems with building the XNTP
|
||||
<br>version 3.5-86 distribution under Windows NT.
|
||||
<p>The following files were modified:
|
||||
<br> blddbg.bat
|
||||
<br> bldrel.bat
|
||||
<br> include\ntp_machine.h
|
||||
<br> xntpd\ntp_unixclock.c
|
||||
<br> xntpd\ntp_refclock.c
|
||||
<br> scripts\wininstall\build.bat
|
||||
<br> scripts\wininstall\setup.rul
|
||||
<br> scripts\wininstall\readme.nt
|
||||
<br> scripts\wininstall\distrib\ntpog.wri
|
||||
<br> html\hints\winnt (this file)
|
||||
<p>In order to build the entire Windows NT distribution you
|
||||
<br>need to modify the file scripts\wininstall\build.bat
|
||||
<br>with the installation directory of the InstallShield
|
||||
<br>software. Then, simply type "bldrel" for non-debug
|
||||
<br>or "blddbg" for debug executables.
|
||||
<p>Greg Schueman
|
||||
<br> <schueman@acm.org>
|
||||
<h3>
|
||||
Last revision: 07-May-1996</h3>
|
||||
This set of changes fixes all known bugs, and it includes
|
||||
<br>several major enhancements.
|
||||
<p>Many changes have been made both to the build environment as
|
||||
<br>well as the code. There is no longer an ntp.mak file, instead
|
||||
<br>there is a buildntall.bat file that will build the entire
|
||||
<br>release in one shot. The batch file requires Perl. Perl
|
||||
<br>is easily available from the NT Resource Kit or on the Net.
|
||||
<p>The multiple interface support was adapted from Larry Kahn's
|
||||
<br>work on the BIND NT port. I have not been able to test it
|
||||
<br>adequately as I only have NT servers with one network
|
||||
<br>interfaces on which to test.
|
||||
<p>Enhancements:
|
||||
<br>* Event Logging now works correctly.
|
||||
<br>* Version numbers now work (requires Perl during build)
|
||||
<br>* Support for multiple network interface cards (untested)
|
||||
<br>* NTP.CONF now default, but supports ntp.ini if not found
|
||||
<br>* Installation procedure automated.
|
||||
<br>* All paths now allow environment variables such as %windir%
|
||||
<p>Bug fixes:
|
||||
<br>* INSTSRV replaced, works correctly
|
||||
<br>* Cleaned up many warnings
|
||||
<br>* Corrected use of an uninitialized variable in XNTPD
|
||||
<br>* Fixed ntpdate -b option
|
||||
<br>* Fixed ntpdate to accept names as well as IP addresses
|
||||
<br> (Winsock WSAStartup was
|
||||
called after a gethostbyname())
|
||||
<br>* Fixed problem with "longjmp" in xntpdc/ntpdc.c that
|
||||
<br> caused a software exception
|
||||
on doing a Control-C in xntpdc.
|
||||
<br> A Cntrl-C now terminates the program.
|
||||
<p>See below for more detail:
|
||||
<p> Note: SIGINT is not supported for any
|
||||
Win32 application including
|
||||
<br> Windows NT and Windows 95. When a CTRL+C
|
||||
interrupt occurs, Win32
|
||||
<br> operating systems generate a new thread
|
||||
to specifically handle that
|
||||
<br> interrupt. This can cause a single-thread
|
||||
application such as UNIX,
|
||||
<br> to become multithreaded, resulting in
|
||||
unexpected behavior.
|
||||
<br>
|
||||
<p>Possible enhancements and things left to do:
|
||||
<br>* Reference clock drivers for NT (at least Local Clock support)
|
||||
<br>* Control Panel Applet
|
||||
<br>* InstallShield based installation, like NT BIND has
|
||||
<br>* Integration with NT Performance Monitor
|
||||
<br>* SNMP integration
|
||||
<br>* Fully test multiple interface support
|
||||
<br>
|
||||
<p>Known problems:
|
||||
<br>* bug in ntptrace - if no Stratum
|
||||
1 servers are available,
|
||||
<br>
|
||||
such as on an IntraNet, the application crashes.
|
||||
<h3>
|
||||
Last revision: 12-Apr-1995</h3>
|
||||
This NTPv3 distribution includes a sample configuration file and the project
|
||||
<br>makefiles for WindowsNT 3.5 platform using Microsoft Visual C++ 2.0
|
||||
compiler.
|
||||
<br>Also included is a small routine to install the NTP daemon as a "service"
|
||||
<br>on a WindowsNT box. Besides xntpd, the utilities that have been ported
|
||||
are
|
||||
<br>ntpdate and xntpdc. The port to WindowsNT 3.5 has been tested using
|
||||
a Bancomm
|
||||
<br>TimeServe2000 GPS receiver clock that acts as a strata 1 NTP server
|
||||
with no
|
||||
<br>authentication (it has not been tested with any refclock drivers compiled
|
||||
in).
|
||||
<br>Following are the known flaws in this port:
|
||||
<br>1) currently, I do not know of a way in NT to get information about
|
||||
multiple
|
||||
<br> network interface cards. The current port uses just one
|
||||
socket bound to
|
||||
<br> INADDR_ANY address. Therefore when dealing with a multihomed
|
||||
NT time server,
|
||||
<br> clients should point to the default address on the server
|
||||
(otherwise the
|
||||
<br> reply is not guaranteed to come from the same interface
|
||||
to which the
|
||||
<br> request was sent). Working with Microsoft to get this
|
||||
resolved.
|
||||
<br>2) There is some problem with "longjmp" in xntpdc/ntpdc.c that causes
|
||||
a
|
||||
<br> software exception on doing a Control-C in xntpdc. Be
|
||||
patient!
|
||||
<br>3) The error messages logged by xntpd currently contain only the numerical
|
||||
<br> error code. Corresponding error message string has to
|
||||
be looked up in
|
||||
<br> "Books Online" on Visual C++ 2.0 under the topic "Numerical
|
||||
List of Error
|
||||
<br> Codes".
|
||||
<p>Last HTML Update: November 17, 1999
|
||||
<br><a href="mailto://sven_dietrich@trimble.com">Sven_Dietrich@Trimble.COM</a>
|
||||
</body>
|
||||
</html>
|
@ -1,8 +1,8 @@
|
||||
<HTML><HEAD><TITLE>
|
||||
<html><head><title>
|
||||
The Network Time Protocol (NTP) Distribution
|
||||
</TITLE></HEAD><BODY><H3>
|
||||
</title></head><body><h3>
|
||||
The Network Time Protocol (NTP) Distribution
|
||||
</H3>
|
||||
</h3>
|
||||
|
||||
<IMG align=left SRC=pic/barnstable.gif>From <i>pogo</i>, Walt Kelly
|
||||
|
||||
|
@ -1,370 +1,250 @@
|
||||
<HTML>
|
||||
<HEAD>
|
||||
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
||||
<META NAME="GENERATOR" CONTENT="Mozilla/4.01 [en] (Win95; I) [Netscape]">
|
||||
<TITLE>Monitoring Options
|
||||
</TITLE>
|
||||
</HEAD>
|
||||
<BODY>
|
||||
<html><head><title>
|
||||
Monitoring Options
|
||||
</title></head><body><h3>
|
||||
Monitoring Options
|
||||
</h3><hr>
|
||||
|
||||
<H3>
|
||||
Monitoring Options</H3>
|
||||
<h4>Monitoring Support</h4>
|
||||
|
||||
<HR>
|
||||
<H4>
|
||||
Monitoring Support</H4>
|
||||
<TT>ntpd</TT> includes a comprehensive monitoring facility suitable for
|
||||
continuous, long term recording of server and client timekeeping performance.
|
||||
See the <TT>statistics</TT> command below for a listing and example of
|
||||
each type of statistics currently supported. Statistic files are managed
|
||||
using file generation sets and scripts in the ./scripts directory of this
|
||||
distribution. Using these facilities and Unix <TT>cron</TT> jobs, the data
|
||||
can be automatically summarized and archived for retrospective analysis.
|
||||
<H4>
|
||||
Monitoring Commands</H4>
|
||||
<tt>ntpd</tt> includes a comprehensive monitoring facility suitable for
|
||||
continuous, long term recording of server and client timekeeping
|
||||
performance. See the <tt>statistics</tt> command below for a listing and
|
||||
example of each type of statistics currently supported. Statistic files
|
||||
are managed using file generation sets and scripts in the ./scripts
|
||||
directory of this distribution. Using these facilities and Unix
|
||||
<tt>cron</tt> jobs, the datacan be automatically summarized and archived
|
||||
for retrospective analysis.
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<TT>statistics <I>name</I> [...]</TT></DT>
|
||||
<h4>Monitoring Commands</h4>
|
||||
|
||||
<DD>
|
||||
Enables writing of statistics records. Currently, four kinds of <I><TT>name</TT></I>
|
||||
statistics are supported.</DD>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dt><tt>statistics <I>name</I> [...]</tt></dt>
|
||||
<dd>Enables writing of statistics records. Currently, four kinds of
|
||||
<I><tt>name</tt></I>statistics are supported.</dd>
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<TT>loopstats</TT></DT>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
Enables recording of loop filter statistics information. Each update of
|
||||
the local clock outputs a line of the following form to the file generation
|
||||
set named <TT>loopstats</TT>:</DD>
|
||||
<dt><tt>loopstats</tt></dt>
|
||||
<dd>Enables recording of loop filter statistics information. Each update
|
||||
of the local clock outputs a line of the following form to the file
|
||||
generation set named <tt>loopstats</tt>:</dd>
|
||||
|
||||
<PRE>50935 75440.031 0.000006019 13.778190 0.000351733 0.013380 6</PRE>
|
||||
<p><dd><tt>50935 75440.031 0.000006019 13.778190 0.000351733 0.013380
|
||||
6</tt></dd>
|
||||
|
||||
<DD>
|
||||
The first two fields show the date (Modified Julian Day) and time (seconds
|
||||
and fraction past UTC midnight). The next five fields show time offset
|
||||
(seconds), frequency offset (parts per million - PPM), RMS jitter (seconds),
|
||||
Allan deviation (PPM) and clock discipline time constant.</DD>
|
||||
<p><dd>The first two fields show the date (Modified Julian Day) and time
|
||||
(seconds and fraction past UTC midnight). The next five fields show time
|
||||
offset (seconds), frequency offset (parts per million - PPM), RMS jitter
|
||||
(seconds), Allan deviation (PPM) and clock discipline time
|
||||
constant.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>peerstats</TT></DT>
|
||||
|
||||
<DD>
|
||||
Enables recording of peer statistics information. This includes statistics
|
||||
records of all peers of a NTP server and of special signals, where present
|
||||
and configured. Each valid update appends a line of the following form
|
||||
to the current element of a file generation set named <TT>peerstats</TT>:</DD>
|
||||
|
||||
<PRE>48773 10847.650 127.127.4.1 9714 -0.001605 0.00000 0.00142</PRE>
|
||||
|
||||
<DD>
|
||||
The first two fields show the date (Modified Julian Day) and time (seconds
|
||||
and fraction past UTC midnight). The next two fields show the peer address
|
||||
in dotted-quad notation and status, respectively. The status field is encoded
|
||||
in hex in the format described in Appendix A of the NTP specification RFC
|
||||
1305. The final three fields show the offset, delay and RMS jitter, all
|
||||
in seconds.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>clockstats</TT></DT>
|
||||
|
||||
<DD>
|
||||
Enables recording of clock driver statistics information. Each update received
|
||||
from a clock driver appends a line of the following form to the file generation
|
||||
set named <TT>clockstats</TT>:</DD>
|
||||
|
||||
<PRE>49213 525.624 127.127.4.1 93 226 00:08:29.606 D</PRE>
|
||||
|
||||
<DD>
|
||||
The first two fields show the date (Modified Julian Day) and time (seconds
|
||||
and fraction past UTC midnight). The next field shows the clock address
|
||||
in dotted-quad notation, The final field shows the last timecode received
|
||||
from the clock in decoded ASCII format, where meaningful. In some clock
|
||||
drivers a good deal of additional information can be gathered and displayed
|
||||
as well. See information specific to each clock for further details.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>rawstats</TT></DT>
|
||||
|
||||
<DD>
|
||||
Enables recording of raw-timestamp statistics information. This includes
|
||||
<dt><tt>peerstats</tt></dt>
|
||||
<dd>Enables recording of peer statistics information. This includes
|
||||
statistics records of all peers of a NTP server and of special signals,
|
||||
where present and configured. Each NTP message received from a peer or
|
||||
clock driver appends a line of the following form to the file generation
|
||||
set named <TT>rawstats</TT>:</DD>
|
||||
where present and configured. Each valid update appends a line of the
|
||||
following form to the current element of a file generation set named
|
||||
<tt>peerstats</tt>:</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<p><dd><tt>48773 10847.650 127.127.4.1 9714 -0.001605 0.00000
|
||||
0.00142</tt></dd>
|
||||
|
||||
<DD>
|
||||
<TT>50928 2132.543 128.4.1.1 128.4.1.20 3102453281.584327000 3102453281.58622800031
|
||||
02453332.540806000 3102453332.541458000</TT></DD>
|
||||
<p><dd>The first two fields show the date (Modified Julian Day) and time
|
||||
(seconds and fraction past UTC midnight). The next two fields show the
|
||||
peer address in dotted-quad notation and status, respectively. The
|
||||
status field is encoded in hex in the format described in Appendix A of
|
||||
the NTP specification RFC 1305. The final three fields show the offset,
|
||||
delay and RMS jitter, all in seconds.</dd>
|
||||
|
||||
<DD>
|
||||
<TT> </TT></DD>
|
||||
<dt><tt>clockstats</tt></dt>
|
||||
<dd>Enables recording of clock driver statistics information. Each
|
||||
update received from a clock driver appends a line of the following form
|
||||
to the file generation set named <tt>clockstats</tt>:</dd>
|
||||
|
||||
<DD>
|
||||
The first two fields show the date (Modified Julian Day) and time (seconds
|
||||
and fraction past UTC midnight). The next field shows the peer or clock
|
||||
address in dotted-quad notation, The final four fields show the originate,
|
||||
receive, transmit and final NTP timestamps in order. The timestamp values
|
||||
are as received and before processing by the various data smoothing and
|
||||
mitigation algorithms.</DD>
|
||||
</DL>
|
||||
<p><dd><tt>49213 525.624 127.127.4.1 93 226 00:08:29.606 D</tt></dd>
|
||||
<p><dd>The first two fields show the date (Modified Julian Day) and time
|
||||
(seconds and fraction past UTC midnight). The next field shows the clock
|
||||
address in dotted-quad notation, The final field shows the last timecode
|
||||
received from the clock in decoded ASCII format, where meaningful. In
|
||||
some clock drivers a good deal of additional information can be gathered
|
||||
and displayed as well. See information specific to each clock for
|
||||
further details.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dt><tt>rawstats</tt></dt>
|
||||
<dd>Enables recording of raw-timestamp statistics information. This
|
||||
includes statistics records of all peers of a NTP server and of special
|
||||
signals, where present and configured. Each NTP message received from a
|
||||
peer or clock driver appends a line of the following form to the file
|
||||
generation set named <tt>rawstats</tt>:</dd>
|
||||
|
||||
<DT>
|
||||
<TT>statsdir <I>directory_path</I></TT></DT>
|
||||
<p><dd><tt>50928 2132.543 128.4.1.1 128.4.1.20 3102453281.584327000
|
||||
3102453281.58622800031 02453332.540806000 3102453332.541458000</tt></dd>
|
||||
|
||||
<DD>
|
||||
Indicates the full path of a directory where statistics files should be
|
||||
created (see below). This keyword allows the (otherwise constant) <TT>filegen</TT>
|
||||
filename prefix to be modified for file generation sets, which is useful
|
||||
for handling statistics logs.</DD>
|
||||
<p><dd>The first two fields show the date (Modified Julian Day) and time
|
||||
(seconds and fraction past UTC midnight). The next two fields show the
|
||||
remote peer or clock address followed by the local address in
|
||||
dotted-quad notation, The final four fields show the originate, receive,
|
||||
transmit and final NTP timestamps in order. The timestamp values are as
|
||||
received and before processing by the various data smoothing and
|
||||
mitigation algorithms.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</dl>
|
||||
|
||||
<DT>
|
||||
<TT>filegen <I>name</I> [file <I>filename</I>] [type <I>typename</I>] [link
|
||||
| nolink] [enable | disable]</TT></DT>
|
||||
<dt><tt>statsdir <I>directory_path</I></tt></dt>
|
||||
<dd>Indicates the full path of a directory where statistics files should
|
||||
be created (see below). This keyword allows the (otherwise constant)
|
||||
<tt>filegen</tt> filename prefix to be modified for file generation
|
||||
sets, which is useful for handling statistics logs.</dd>
|
||||
|
||||
<DT>
|
||||
<TT> </TT></DT>
|
||||
<dt><tt>filegen <I>name</I> [file <I>filename</I>] [type
|
||||
<I>typename</I>] [link | nolink] [enable | disable]</tt></dt>
|
||||
<dd>Configures setting of generation file set <I>name</I>. Generation
|
||||
file sets provide a means for handling files that are continuously
|
||||
growing during the lifetime of a server. Server statistics are a typical
|
||||
example for such files. Generation file sets provide access to a set of
|
||||
files used to store the actual data. At any time at most one element of
|
||||
the set is being written to. The type given specifies when and how data
|
||||
will be directed to a new element of the set. This way, information
|
||||
stored in elements of a file set that are currently unused are available
|
||||
for administrational operations without the risk of disturbing the
|
||||
operation of <tt>ntpd</tt>. (Most important: they can be removed to free
|
||||
space for new data produced.)</dd>
|
||||
|
||||
<DD>
|
||||
Configures setting of generation file set <I>name</I>. Generation file
|
||||
sets provide a means for handling files that are continuously growing during
|
||||
the lifetime of a server. Server statistics are a typical example for such
|
||||
files. Generation file sets provide access to a set of files used to store
|
||||
the actual data. At any time at most one element of the set is being written
|
||||
to. The type given specifies when and how data will be directed to a new
|
||||
element of the set. This way, information stored in elements of a file
|
||||
set that are currently unused are available for administrational operations
|
||||
without the risk of disturbing the operation of <TT>ntpd</TT>. (Most important:
|
||||
they can be removed to free space for new data produced.)</DD>
|
||||
<dd>Note that this command can be sent from the <tt>ntpdc</tt> program
|
||||
running at a remote location.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
Note that this command can be sent from the <TT>ntpdc</TT> program running
|
||||
at a remote location.</DD>
|
||||
<dt><I><tt>name</tt></I></dt>
|
||||
<dd>This is the type of the statistics records, as shown in the
|
||||
<tt>statististics</tt> command.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</dl>
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<I><TT>name</TT></I></DT>
|
||||
<dd><tt>file <I>filename</I></tt></dd>
|
||||
|
||||
<DD>
|
||||
This is the type of the statistics records, as shown in the <TT>statististics</TT>
|
||||
command.</DD>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</DL>
|
||||
<dd>This is the file name for the statistics records. Filenames of set
|
||||
members are built from three concatenated elements
|
||||
<I><tt>prefix</tt></I>, <I><tt>filename</tt></I> and
|
||||
<I><tt>suffix</tt></I>:</dd>
|
||||
|
||||
<DD>
|
||||
<TT>file <I>filename</I></TT></DD>
|
||||
<dl>
|
||||
|
||||
<DL>
|
||||
<DD>
|
||||
This is the file name for the statistics records. Filenames of set members
|
||||
are built from three elements:</DD>
|
||||
<dt><I><tt>prefix</tt></I></dt>
|
||||
<dd>This is a constant filename path. It is not subject to modifications
|
||||
via the <tt>filegen</tt> option. It is defined by the server, usually
|
||||
specified as a compile-time constant. It may, however, be configurable
|
||||
for individual file generation sets via other commands. For example, the
|
||||
prefix used with <tt>loopstats</tt> and <tt>peerstats</tt> generation
|
||||
can be configured using the <tt>statsdir</tt> option explained
|
||||
above.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dt><I><tt>filename</tt></I></dt>
|
||||
<dd>This string is directly concatenated to the prefix mentioned above
|
||||
(no intervening <tt>/</tt> (slash)). This can be modified using the
|
||||
<tt>file</tt> argument to the <tt>filegen</tt> statement. No <tt>..</tt>
|
||||
elements are allowed in this component to prevent filenames referring to
|
||||
parts outside the filesystem hierarchy denoted by <tt>prefix</tt>.</dd>
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
prefix</DT>
|
||||
<dt><I><tt>suffix</tt></I></dt>
|
||||
<dd>This part is reflects individual elements of a file set. It is
|
||||
generated according to the type of a file set.</dd>
|
||||
|
||||
<DD>
|
||||
This is a constant filename path. It is not subject to modifications via
|
||||
the <TT>filegen</TT> option. It is defined by the server, usually specified
|
||||
as a compile-time constant. It may, however, be configurable for individual
|
||||
file generation sets via other commands. For example, the prefix used with
|
||||
<TT>loopstats</TT> and <TT>peerstats</TT> generation can be configured
|
||||
using the <TT>statsdir</TT> option explained above.</DD>
|
||||
</dl>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</dl>
|
||||
|
||||
<DT>
|
||||
<I><TT>filename</TT></I></DT>
|
||||
<dd><tt>type <I>typename</I></tt></dd>
|
||||
|
||||
<DD>
|
||||
This string is directly concatenated to the prefix mentioned above (no
|
||||
intervening <TT>/</TT> (slash)). This can be modified using the <TT>file</TT>
|
||||
argument to the <TT>filegen</TT> statement. No <TT>..</TT> elements are
|
||||
allowed in this component to prevent filenames referring to parts outside
|
||||
the filesystem hierarchy denoted by <TT>prefix</TT>.</DD>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dd>A file generation set is characterized by its type. The following
|
||||
types are supported:</dd>
|
||||
|
||||
<DT>
|
||||
suffix</DT>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
This part is reflects individual elements of a file set. It is generated
|
||||
according to the type of a file set.</DD>
|
||||
</DL>
|
||||
<dt><tt>none</tt></dt>
|
||||
<dd>The file set is actually a single plain file.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</DL>
|
||||
<dt><tt>pid</tt></dt>
|
||||
<dd>One element of file set is used per incarnation of a <tt>ntpd</tt>
|
||||
server. This type does not perform any changes to file set members
|
||||
during runtime, however it provides an easy way of separating files
|
||||
belonging to different <tt>ntpd</tt> server incarnations. The set member
|
||||
filename is built by appending a <tt>.</tt> (dot) to concatenated
|
||||
<I>prefix</I> and <I>filename</I> strings, and appending the decimal
|
||||
representation of the process ID of the <tt>ntpd</tt> server
|
||||
process.</dd>
|
||||
|
||||
<DD>
|
||||
<TT>type <I>typename</I></TT></DD>
|
||||
<dt><tt>day</tt></dt>
|
||||
<dd>One file generation set element is created per day. A day is defined
|
||||
as the period between 00:00 and 24:00 UTC. The file set member suffix
|
||||
consists of a <tt>.</tt> (dot) and a day specification in the form
|
||||
<tt>YYYYMMdd. YYYY</tt> is a 4-digit year number (e.g., 1992).
|
||||
<tt>MM</tt> is a two digit month number. <tt>dd</tt> is a two digit day
|
||||
number. Thus, all information written at 10 December 1992 would end up
|
||||
in a file named <tt><I>prefix filename</I>.19921210</tt>.</dd>
|
||||
|
||||
<DL>
|
||||
<DD>
|
||||
A file generation set is characterized by its type. The following types
|
||||
are supported:</DD>
|
||||
<dt><tt>week</tt></dt>
|
||||
<dd>Any file set member contains data related to a certain week of a
|
||||
year. The term week is defined by computing day-of-year modulo 7.
|
||||
Elements of such a file generation set are distinguished by appending
|
||||
the following suffix to the file set filename base: A dot, a 4-digit
|
||||
year number, the letter <tt>W</tt>, and a 2-digit week number. For
|
||||
example, information from January, 10th 1992 would end up in a file with
|
||||
suffix <tt>.1992W1</tt>.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dt><tt>month</tt></dt>
|
||||
<dd>One generation file set element is generated per month. The file
|
||||
name suffix consists of a dot, a 4-digit year number, and a 2-digit
|
||||
month.</dd>
|
||||
|
||||
<DL>
|
||||
<DT>
|
||||
<TT>none</TT></DT>
|
||||
<dt><tt>year</tt></dt>
|
||||
<dd>One generation file element is generated per year. The filename
|
||||
suffix consists of a dot and a 4 digit year number.</dd>
|
||||
|
||||
<DD>
|
||||
The file set is actually a single plain file.</DD>
|
||||
<dt><tt>age</tt></dt>
|
||||
<dd>This type of file generation sets changes to a new element of the
|
||||
file set every 24 hours of server operation. The filename suffix
|
||||
consists of a dot, the letter <tt>a</tt>, and an 8-digit number. This
|
||||
number is taken to be the number of seconds the server is running at the
|
||||
start of the corresponding 24-hour period. Information is only written
|
||||
to a file generation by specifying <tt>enable</tt>; output is prevented
|
||||
by specifying <tt>disable</tt>.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</dl>
|
||||
|
||||
<DT>
|
||||
<TT>pid</TT></DT>
|
||||
</dl>
|
||||
|
||||
<DD>
|
||||
One element of file set is used per incarnation of a <TT>ntpd</TT> server.
|
||||
This type does not perform any changes to file set members during runtime,
|
||||
however it provides an easy way of separating files belonging to different
|
||||
<TT>ntpd</TT> server incarnations. The set member filename is built by
|
||||
appending a <TT>.</TT> (dot) to concatenated <I>prefix</I> and <I>filename</I>
|
||||
strings, and appending the decimal representation of the process ID of
|
||||
the <TT>ntpd</TT> server process.</DD>
|
||||
<dd><tt>link | nolink</tt></dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dl>
|
||||
|
||||
<DT>
|
||||
<TT>day</TT></DT>
|
||||
<dd>It is convenient to be able to access the current element of a file
|
||||
generation set by a fixed name. This feature is enabled by specifying
|
||||
<tt>link</tt> and disabled using <tt>nolink</tt>. If <tt>link</tt> is
|
||||
specified, a hard link from the current file set element to a file
|
||||
without suffix is created. When there is already a file with this name
|
||||
and the number of links of this file is one, it is renamed appending a
|
||||
dot, the letter <tt>C</tt>, and the pid of the <tt>ntpd</tt> server
|
||||
process. When the number of links is greater than one, the file is
|
||||
unlinked. This allows the current file to be accessed by a constant
|
||||
name.</dd>
|
||||
|
||||
<DD>
|
||||
One file generation set element is created per day. A day is defined as
|
||||
the period between 00:00 and 24:00 UTC. The file set member suffix consists
|
||||
of a <TT>.</TT> (dot) and a day specification in the form <TT>YYYYMMDD.
|
||||
YYYY</TT> is a 4-digit year number (e.g., 1992). <TT>MM</TT> is a two digit
|
||||
month number. <TT>DD</TT> is a two digit day number. Thus, all information
|
||||
written at 10 December 1992 would end up in a file named <TT><I>prefix
|
||||
filename</I>.19921210</TT>.</DD>
|
||||
</dl>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
<dd><tt>enable | disable</tt></dd>
|
||||
|
||||
<DT>
|
||||
<TT>week</TT></DT>
|
||||
<dl>
|
||||
|
||||
<DD>
|
||||
Any file set member contains data related to a certain week of a year.
|
||||
The term week is defined by computing day-of-year modulo 7. Elements of
|
||||
such a file generation set are distinguished by appending the following
|
||||
suffix to the file set filename base: A dot, a 4-digit year number, the
|
||||
letter <TT>W</TT>, and a 2-digit week number. For example, information
|
||||
from January, 10th 1992 would end up in a file with suffix <TT>.1992W1</TT>.</DD>
|
||||
<dd>Enables or disables the recording function.</dd>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</dl>
|
||||
|
||||
<DT>
|
||||
<TT>month</TT></DT>
|
||||
</dl>
|
||||
|
||||
<DD>
|
||||
One generation file set element is generated per month. The file name suffix
|
||||
consists of a dot, a 4-digit year number, and a 2-digit month.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>year</TT></DT>
|
||||
|
||||
<DD>
|
||||
One generation file element is generated per year. The filename suffix
|
||||
consists of a dot and a 4 digit year number.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
|
||||
<DT>
|
||||
<TT>age</TT></DT>
|
||||
|
||||
<DD>
|
||||
This type of file generation sets changes to a new element of the file
|
||||
set every 24 hours of server operation. The filename suffix consists of
|
||||
a dot, the letter <TT>a</TT>, and an 8-digit number. This number is taken
|
||||
to be the number of seconds the server is running at the start of the corresponding
|
||||
24-hour period. Information is only written to a file generation by specifying
|
||||
<TT>enabl</TT>; output is prevented by specifying <TT>disable</TT>.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</DL>
|
||||
</DL>
|
||||
|
||||
<DD>
|
||||
<TT>link | nolink</TT></DD>
|
||||
|
||||
<DL>
|
||||
<DD>
|
||||
It is convenient to be able to access the current element of a file generation
|
||||
set by a fixed name. This feature is enabled by specifying <TT>link</TT>
|
||||
and disabled using <TT>nolink</TT>. If <TT>link</TT> is specified, a hard
|
||||
link from the current file set element to a file without suffix is created.
|
||||
When there is already a file with this name and the number of links of
|
||||
this file is one, it is renamed appending a dot, the letter <TT>C</TT>,
|
||||
and the pid of the <TT>ntpd</TT> server process. When the number of links
|
||||
is greater than one, the file is unlinked. This allows the current file
|
||||
to be accessed by a constant name.</DD>
|
||||
|
||||
<DD>
|
||||
</DD>
|
||||
</DL>
|
||||
|
||||
<DD>
|
||||
<TT>enable | disable</TT></DD>
|
||||
|
||||
<DL>
|
||||
<DD>
|
||||
Enables or disables the recording function.</DD>
|
||||
</DL>
|
||||
</DL>
|
||||
|
||||
<HR>
|
||||
<ADDRESS>
|
||||
David L. Mills (mills@udel.edu)</ADDRESS>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
||||
|
@ -1244,18 +1244,21 @@ value of <TT>tick</TT>.
|
||||
|
||||
<P>The <TT>tickadj</TT> program can reset several other kernel variables
|
||||
if asked. It can change the value of <TT>tick</TT> if asked. This is
|
||||
handy
|
||||
to compensate for kernel bugs which cause the clock to run with a very
|
||||
large frequency error, as with SunOS 4.1.1 systems. It can also be used
|
||||
to set the value of the kernel <TT>dosynctodr</TT> variable to zero.
|
||||
This
|
||||
variable controls whether to synchronize the system clock to the time-
|
||||
of-day
|
||||
clock, something you really don't want to be happen when <TT>ntpd</TT>
|
||||
is trying to keep it under control. In some systems, such as recent Sun
|
||||
Solaris kernels, the <TT>dosynctodr </TT>variable is the only one that
|
||||
can be changed by the <TT>tickadj </TT>program. In this and other modern
|
||||
kernels, it is not necessary to change the other variables in any case.
|
||||
handy to compensate for kernel bugs which cause the clock to run with a
|
||||
very large frequency error, as with SunOS 4.1.1 systems. It can also be
|
||||
used to set the value of the kernel <TT>dosynctodr</TT> variable to
|
||||
zero. This variable controls whether to synchronize the system clock to
|
||||
the time-of-day clock, something you really don't want to be happen
|
||||
when <TT>ntpd</TT> is trying to keep it under control. In some systems,
|
||||
such as recent Sun Solaris kernels, the <TT>dosynctodr </TT>variable is
|
||||
the only one that can be changed by the <TT>tickadj </TT>program. In
|
||||
this and other modern kernels, it is not necessary to change the other
|
||||
variables in any case.
|
||||
|
||||
<P>
|
||||
We have a report that says starting with Solaris 2.6 we should
|
||||
leave <I>dosynctodr</I> alone.
|
||||
<A HREF="solaris-dosynctodr.html">Here is the report</A>.
|
||||
|
||||
<P>In order to maintain reasonable correctness bounds, as well as
|
||||
reasonably
|
||||
|
@ -6,11 +6,10 @@
|
||||
|
||||
<H4>Synopsis</H4>
|
||||
|
||||
<TT>ntpd [ -aAbdm ] [ -c <I>conffile</I> ] [ -f <I>driftfile</I> ] [ -k
|
||||
<I>keyfile</I> ] [ -l <I>logfile</I> ] [ -p <I>pidfile</I> ] [ -r
|
||||
<TT>ntpd [ -aAbdm ] [ -c <I>conffile</I> ] [ -f <I>driftfile</I> ] [ -g
|
||||
] [ -k <I>keyfile</I> ] [ -l <I>logfile</I> ] [ -p <I>pidfile</I> ] [ -r
|
||||
<I>broadcastdelay</I> ] [ -s <I>statsdir</I> ] [ -t <I>key</I> ] [ -v
|
||||
<I>variable</I> ] [ -V
|
||||
<I>variable</I> ]</TT>
|
||||
<I>variable</I> ] [ -V <I>variable</I> ] [ -x ]</TT>
|
||||
|
||||
<H4>Description</H4>
|
||||
|
||||
@ -43,9 +42,10 @@ local host is to be configured as a broadcast/multicast client or
|
||||
manycast client, with all peers being determined by listening to
|
||||
broadcasts at run time.
|
||||
|
||||
<P>If NetInfo support is built into <TT>ntpd</TT>, then <TT>ntpd</TT> will
|
||||
attempt to read its configuration from the NetInfo if the default ntp.conf
|
||||
file cannot be read and no file is specified by the <TT>-c</TT> option.
|
||||
<P>If NetInfo support is built into <TT>ntpd</TT>, then <TT>ntpd</TT>
|
||||
will attempt to read its configuration from the NetInfo if the default
|
||||
ntp.conf file cannot be read and no file is specified by the <TT>-c</TT>
|
||||
option.
|
||||
|
||||
<P>Various internal <TT>ntpd</TT> variables can be displayed and
|
||||
configuration options altered while the daemon is running using the
|
||||
@ -85,7 +85,8 @@ each occurrence indicating greater detail of display.</DD>
|
||||
<DT><TT>-g</TT></DT>
|
||||
<DD>Normally, the daemon exits if the offset exceeds a 1000-s sanity
|
||||
limit. This option overrides this limit and allows the time to be set to
|
||||
any value without restriction.</DD>
|
||||
any value without restriction; however, this can happen only once. After
|
||||
that, the daemon will exit of the limit is exceeded.
|
||||
|
||||
<DT><TT>-k <I>keyfile</I></TT></DT>
|
||||
<DD>Specify the name and path of the file containing the NTP
|
||||
@ -128,7 +129,6 @@ stepped, not gradually slewed. This option forces the time to be slewed
|
||||
in all cases. Note: Since the slew rate is limited to 0.5 ms/s, each
|
||||
second of adjustment requires an amortization interval of 2000 s. Thus,
|
||||
an adjustment of many seconds can take hours or days to amortize.</DD>
|
||||
|
||||
</DL>
|
||||
|
||||
<H4>The Configuration File</H4>
|
||||
|
@ -1,18 +1,19 @@
|
||||
<HTML><HEAD><TITLE>
|
||||
<html><head><title>
|
||||
Pulse-per-second (PPS) Signal Interfacing
|
||||
</TITLE></HEAD><BODY><H3>
|
||||
</title></head><body><h3>
|
||||
Pulse-per-second (PPS) Signal Interfacing
|
||||
</H3><HR>
|
||||
</h3><hr>
|
||||
|
||||
<P>Some radio clocks and related timekeeping gear have a pulse-per-
|
||||
second (PPS) signal that can be used to discipline the local clock
|
||||
oscillator to a high degree of precision, typically to the order less
|
||||
than 20 <FONT FACE=Symbol>m</FONT>s in time and 0.01 PPM in frequency.
|
||||
The PPS signal can be connected in either of two ways: via the data
|
||||
leads of a serial port or via the modem control leads. Either way
|
||||
requires conversion of the PPS signal, usually at TTL levels, to RS232
|
||||
levels, which can be done using a circuit such as described in the <A
|
||||
HREF=gadget.htm>Gadget Box PPS Level Converter and CHU Modem</A> page.
|
||||
<P>Some radio clocks and related timekeeping gear have a
|
||||
pulse-per-second (PPS) signal that can be used to discipline the local
|
||||
clock oscillator to a high degree of precision, typically to the order
|
||||
less than 20 <font face=Symbol>m</font>s in time and 0.01 PPM in
|
||||
frequency. The PPS signal can be connected in either of two ways: via
|
||||
the data leads of a serial port or via the modem control leads. Either
|
||||
way requires conversion of the PPS signal, usually at TTL levels, to
|
||||
RS232 levels, which can be done using a circuit such as described in the
|
||||
<A HREF=gadget.htm>Gadget Box PPS Level Converter and CHU Modem</A>
|
||||
page.
|
||||
|
||||
<P>The data leads interface requires regenerating the PPS pulse and
|
||||
converting to RS232 signal levels, so that the pulse looks like a
|
||||
|
64
contrib/ntp/html/qth.htm
Normal file
64
contrib/ntp/html/qth.htm
Normal file
@ -0,0 +1,64 @@
|
||||
<html><head><title>
|
||||
Stations, Frequencies and Geographic Coordinates
|
||||
</title></head><body><h3>
|
||||
Stations, Frequencies and Geographic Coordinates
|
||||
</h3><hr>
|
||||
|
||||
The following data were obtained from the International Frequency List
|
||||
published by the ITU and other sources.
|
||||
|
||||
<p><table cols=3 width=100%>
|
||||
|
||||
<tr>
|
||||
<td>Station</td>
|
||||
<td>Frequencies</td>
|
||||
<td>Coordinates</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>WWV Ft. Collins, CO</td>
|
||||
<td>2.5/5/10/15/20 MHz</td>
|
||||
<td>40:40:49.0N 105:02:27.0W</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>WWVB Ft. Collins, CO</td>
|
||||
<td>60 kHz</td>
|
||||
<td>40:40:28.3N 105:02:39.5W</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>WWVH Kauai, HI</td>
|
||||
<td>2.5/5/10/15 MHz</td>
|
||||
<td>21:59:26.0N 159:46:00.0W</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>CHU Ottawa, CA</td>
|
||||
<td>3330/7335/14670 kHz</td>
|
||||
<td>45:18N 75:45N</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>DCF77 Mainflingen, DE</td>
|
||||
<td>77.5 kHz</td>
|
||||
<td>50:01N 9:00E</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>MSF Rugby, UK</td>
|
||||
<td>60 kHz</td>
|
||||
<td>52:22N 1:11W</td>
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<td>TDF Allouis, FR</td>
|
||||
<td>162 kHz</td>
|
||||
<td>47:10N 2:12E</td>
|
||||
</tr>
|
||||
|
||||
</table>
|
||||
|
||||
<hr><a href=index.htm><img align=left src=pic/home.gif></a><address><a
|
||||
href=mailto:mills@udel.edu> David L. Mills <mills@udel.edu></a>
|
||||
</address></a></body></html>
|
@ -1,6 +1,6 @@
|
||||
<HTML><HEAD><TITLE>
|
||||
<html><head><title>
|
||||
Reference Clock Drivers
|
||||
</TITLE></HEAD><BODY><H3>
|
||||
</title></head><body><h3>
|
||||
Reference Clock Drivers
|
||||
</H3>
|
||||
|
||||
@ -19,13 +19,11 @@ Reference Clock Drivers
|
||||
The Tardis
|
||||
<hr>
|
||||
|
||||
<H4>Reference Clock Drivers</H4>
|
||||
|
||||
Support for most of the commonly available radio and modem clocks is
|
||||
included in the default configuration of the NTP daemon for Unix
|
||||
<TT>ntpd</TT>. Individual clocks can be activated by configuration file
|
||||
commands, specifically the <TT>server</TT> and <TT>fudge</TT> commands
|
||||
described in the <A HREF=ntpd.htm><TT>ntpd</TT> program manual
|
||||
Support for most of the commonly available radio and modem reference
|
||||
clocks is included in the default configuration of the NTP daemon for
|
||||
Unix <TT>ntpd</TT>. Individual clocks can be activated by configuration
|
||||
file commands, specifically the <TT>server</TT> and <TT>fudge</TT>
|
||||
commands described in the <A HREF=ntpd.htm><TT>ntpd</TT> program manual
|
||||
page</A>. The following discussion presents Information on how to select
|
||||
and configure the device drivers in a running Unix system.
|
||||
|
||||
@ -39,13 +37,42 @@ device is normally specified by adding a soft link
|
||||
<TT>/dev/device<I>u</I></TT> to the particular hardware device involved,
|
||||
where <I><TT>u</TT></I> correspond to the unit number above.
|
||||
|
||||
<p>Most clock drivers communicate with the reference clock using a
|
||||
serial port, usually at 9600 bps. There are several application program
|
||||
interfaces (API) used in the various Unix and NT systems, most of which
|
||||
can be detected at configuration time. Thus, it is important that the
|
||||
NTP daemon and utilities be compiled on the target system or clone. In
|
||||
some cases special features are available, such as timestamping in the
|
||||
kernel or pulse-per-second (PPS) interface. In most cases these features
|
||||
can be detected at configuration time as well; however, the kernel may
|
||||
have to be recompiled in order for them to work.
|
||||
|
||||
<p>The audio drivers are a special case. These include support for the
|
||||
NIST time/frequency stations WWV and WWVH, the Canadian time/frequency
|
||||
station CHU and generic IRIG signals. Currently, support for the Solaris
|
||||
and SunOS audio API is included in the distribution. It is left to the
|
||||
volunteer corps to extend this support to other systems. Further
|
||||
information on hookup, debugging and monitoring is given in the <a
|
||||
href=audio.htm>Audio Drivers</a> page.
|
||||
|
||||
<p>Some drivers depending on longwave and shortwave radio services need
|
||||
to know the radio propagation time from the transmitter to the receiver,
|
||||
which can amount to some tens of milliseconds. This must be calculated
|
||||
for each specific receiver location and requires the geographic
|
||||
coordinates of both the transmitter and receiver. The transmitter
|
||||
coordinates for various radio services are given in the <a
|
||||
href=qth.htm>Stations, Frequencies and Geographic Coordinates</a> page.
|
||||
Receiver coordinates can be obtained or estimated from various sources.
|
||||
The actual calculations are beyond the scope of this document.
|
||||
|
||||
<P>Following is a list showing the type and title of each driver
|
||||
currently implemented. The compile-time identifier for each is shown in
|
||||
parentheses. Click on a selected type for specific description and
|
||||
configuration documentation, including the clock address, reference ID,
|
||||
driver ID, device name and speed, and features (line disciplines, etc.).
|
||||
For those drivers without specific documentation, please contact the
|
||||
author listed in the <A HREF=copyright.htm>copyright page</A>.
|
||||
driver ID, device name and serial line speed, and features (line
|
||||
disciplines, etc.). For those drivers without specific documentation,
|
||||
please contact the author listed in the <A HREF=copyright.htm>Copyright
|
||||
Notice</A> page.
|
||||
|
||||
<P><A HREF=driver1.htm>Type 1</A> Undisciplined Local Clock
|
||||
(<TT>LOCAL</TT>)
|
||||
@ -54,13 +81,13 @@ author listed in the <A HREF=copyright.htm>copyright page</A>.
|
||||
<BR><A HREF=driver3.htm>Type 3</A> PSTI/Traconex 1020 WWV/WWVH
|
||||
Receiver
|
||||
(<TT>WWV_PST</TT>)
|
||||
<BR><A HREF=driver4.htm>Type 4</A> Spectracom 8170 and Netclock/2 WWVB
|
||||
Receivers (<TT>WWVB_SPEC</TT>)
|
||||
<BR><A HREF=driver4.htm>Type 4</A> Spectracom WWVB and GPS Receivers
|
||||
(<TT>WWVB_SPEC</TT>)
|
||||
<BR><A HREF=driver5.htm>Type 5</A> TrueTime GPS/GOES/OMEGA Receivers
|
||||
(<TT>TRUETIME</TT>)
|
||||
<BR><A HREF=driver6.htm>Type 6</A> IRIG Audio Decoder
|
||||
(<TT>IRIG_AUDIO</TT>)
|
||||
<BR><A HREF=driver7.htm>Type 7</A> CHU Audio/Modem Decoder
|
||||
<BR><A HREF=driver7.htm>Type 7</A> Radio CHU Audio Demodulator/Decoder
|
||||
(<TT>CHU</TT>)
|
||||
<BR><A HREF=driver8.htm>Type 8</A> Generic Reference Driver
|
||||
(<TT>PARSE</TT>)
|
||||
@ -93,29 +120,33 @@ Receivers (<TT>WWVB_SPEC</TT>)
|
||||
(<TT>ACTS_USNO</TT>)
|
||||
<BR><A HREF=driver5.htm>Type 25</A> * TrueTime generic receivers
|
||||
<BR><A HREF=driver26.htm>Type 26</A> Hewlett Packard 58503A GPS
|
||||
Receiver
|
||||
(<TT>GPS_HP</TT>)
|
||||
Receiver (<TT>GPS_HP</TT>)
|
||||
<BR><A HREF=driver27.htm>Type 27</A> Arcron MSF Receiver
|
||||
(<TT>MSF_ARCRON</TT>)
|
||||
<BR><A HREF=driver28.htm>Type 28</A> Shared memory driver
|
||||
<BR><A HREF=driver28.htm>Type 28</A> Shared Memory Driver
|
||||
(<TT>SHM</TT>)
|
||||
<BR><A HREF=driver29.htm>Type 29</A> Trimble Navigation Palisade GPS (<TT>GPS_PALISADE</TT>)
|
||||
<BR><A HREF=driver30.htm>Type 30 Motorola UT Oncore GPS
|
||||
<BR><A HREF=driver29.htm>Type 29</A> Trimble Navigation Palisade GPS
|
||||
(<TT>GPS_PALISADE</TT>)
|
||||
<BR><A HREF=driver30.htm>Type 30</A> Motorola UT Oncore GPS
|
||||
(<TT>GPS_ONCORE</TT>)
|
||||
<BR>Type 31 Rockwell Jupiter GPS (<TT>GPS_JUPITER</TT>)
|
||||
<BR><A HREF=driver34.htm>Type 34</A> Ultralink WWVB receivers
|
||||
<BR><A HREF=driver34.htm>Type 34</A> Ultralink WWVB Receivers
|
||||
<BR><A HREF=driver35.htm>Type 35</A> Conrad Parallel Port Radio Clock
|
||||
(<TT>PCF</TT>)
|
||||
<BR><A HREF=driver36.htm>Type 36</A> Radio WWV/H Audio
|
||||
Demodulator/Decoder(<TT>WWV</TT>)
|
||||
<BR><A HREF=driver37.htm>Type 37</A> Forum Graphic GPS Dating station
|
||||
(<TT>FG</TT>)
|
||||
|
||||
<P>* All TrueTime receivers are now supported by one driver, type 5.
|
||||
Types
|
||||
15 and 25 will be retained only for a limited time and may be reassigned
|
||||
in future.
|
||||
|
||||
Types 15 and 25 will be retained only for a limited time and may be
|
||||
reassigned in future.
|
||||
<P>Additional Information
|
||||
|
||||
<P><A HREF=prefer.htm>Mitigation Rules and the <TT>prefer</TT>
|
||||
Keyword</A>
|
||||
<BR><A HREF=rdebug.htm>Debugging Hints for Reference Clock Drivers</A>
|
||||
<BR><A HREF=ldisc.htm>Line Disciplines and Streams Drivers</A>
|
||||
<BR><A HREF=audio.htm>Reference Clock Audio Drivers</A>
|
||||
<BR><A HREF=pps.htm>Pulse-per-second (PPS) Signal Interfacing</A>
|
||||
<BR><A HREF=howto.htm>How To Write a Reference Clock Driver</A>
|
||||
<BR><A HREF=index.htm>The Network Time Protocol (NTP)
|
||||
|
@ -25,6 +25,10 @@ call, and <TT>dosynctodr</TT>, which indicates to the kernels on some machines
|
||||
whether they should internally adjust the system clock to keep it in line
|
||||
with time-of-day clock or not.
|
||||
|
||||
<P>We have a report that says starting with Solaris 2.6 we should
|
||||
leave <I>dosynctodr</I> alone.
|
||||
<A HREF="solaris-dosynctodr.html">Here is the report</A>.
|
||||
|
||||
<P>By default, with no arguments, <TT>tickadj</TT> reads the variables
|
||||
of interest in the kernel and displays them. At the same time, it determines
|
||||
an "optimal" value for the value of the <TT>tickadj</TT> variable if the
|
||||
|
@ -6,9 +6,11 @@ ETAGS_ARGS = $(srcdir)/Makefile.am
|
||||
noinst_HEADERS = \
|
||||
adjtime.h \
|
||||
ascii.h \
|
||||
audio.h \
|
||||
binio.h \
|
||||
global.h \
|
||||
gps.h \
|
||||
icom.h \
|
||||
ieee754io.h \
|
||||
iosignal.h \
|
||||
l_stdlib.h \
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
|
||||
@ -104,9 +108,11 @@ ETAGS_ARGS = $(srcdir)/Makefile.am
|
||||
noinst_HEADERS = \
|
||||
adjtime.h \
|
||||
ascii.h \
|
||||
audio.h \
|
||||
binio.h \
|
||||
global.h \
|
||||
gps.h \
|
||||
icom.h \
|
||||
ieee754io.h \
|
||||
iosignal.h \
|
||||
l_stdlib.h \
|
||||
@ -156,32 +162,36 @@ GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps include/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -198,7 +208,7 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@ -240,6 +250,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-tags mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
13
contrib/ntp/include/audio.h
Normal file
13
contrib/ntp/include/audio.h
Normal file
@ -0,0 +1,13 @@
|
||||
/*
|
||||
* Header file for audio drivers
|
||||
*/
|
||||
#include "ntp_types.h"
|
||||
|
||||
#define AUDIO_BUFSIZ 160 /* codec buffer size (Solaris only) */
|
||||
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
int audio_init P((void));
|
||||
int audio_gain P((int, int));
|
||||
void audio_show P((void));
|
87
contrib/ntp/include/icom.h
Executable file
87
contrib/ntp/include/icom.h
Executable file
@ -0,0 +1,87 @@
|
||||
/*
|
||||
* Header file for ICOM radios
|
||||
*/
|
||||
#include "ntp_types.h"
|
||||
|
||||
/*
|
||||
* Common definitions
|
||||
*/
|
||||
#define P_ERMSG 0x1 /* trace bus error messages */
|
||||
#define P_TRACE 0x2 /* trace CI-V messges */
|
||||
#define RETRY 3 /* max packet retries */
|
||||
#define IBAUD B1200 /* autotune port speed */
|
||||
|
||||
/*
|
||||
* Radio identifier codes
|
||||
*/
|
||||
#define IC1271 0x24
|
||||
#define IC1275 0x18
|
||||
#define IC271 0x20
|
||||
#define IC275 0x10
|
||||
#define IC375 0x12
|
||||
#define IC471 0x22
|
||||
#define IC475 0x14
|
||||
#define IC575 0x16
|
||||
#define IC725 0x28
|
||||
#define IC726 0x30
|
||||
#define IC735 0x04
|
||||
#define IC751 0x1c
|
||||
#define IC761 0x1e
|
||||
#define IC765 0x2c
|
||||
#define IC775 0x46
|
||||
#define IC781 0x26
|
||||
#define IC970 0x2e
|
||||
#define R7000 0x08
|
||||
#define R71 0x1a
|
||||
#define R7100 0x34
|
||||
#define R72 0x32
|
||||
#define R8500 0x4a
|
||||
#define R9000 0x2a
|
||||
|
||||
/*
|
||||
* CI-V frame codes
|
||||
*/
|
||||
#define PR 0xfe /* preamble */
|
||||
#define TX 0xe0 /* controller address */
|
||||
#define FI 0xfd /* end of message */
|
||||
#define ACK 0xfb /* controller normal reply */
|
||||
#define NAK 0xfa /* controller error reply */
|
||||
#define PAD 0xff /* transmit padding */
|
||||
|
||||
/*
|
||||
* CI-V controller commands
|
||||
*/
|
||||
#define V_FREQT 0x00 /* freq set (transceive) */
|
||||
#define V_MODET 0x01 /* set mode (transceive) */
|
||||
#define V_RBAND 0x02 /* read band edge */
|
||||
#define V_RFREQ 0x03 /* read frequency */
|
||||
#define V_RMODE 0x04 /* read mode */
|
||||
#define V_SFREQ 0x05 /* set frequency */
|
||||
#define V_SMODE 0x06 /* set mode */
|
||||
#define V_SVFO 0x07 /* select vfo */
|
||||
#define V_SMEM 0x08 /* select channel/bank */
|
||||
#define V_WRITE 0x09 /* write channel */
|
||||
#define V_VFOM 0x0a /* memory -> vfo */
|
||||
#define V_CLEAR 0x0b /* clear channel */
|
||||
#define V_ROFFS 0x0c /* read tx offset */
|
||||
#define V_SOFFS 0x0d /* write tx offset */
|
||||
#define V_SCAN 0x0e /* scan control */
|
||||
#define V_SPLIT 0x0f /* split control */
|
||||
#define V_DIAL 0x10 /* set dial tuning step */
|
||||
#define V_ATTEN 0x11 /* set attenuator */
|
||||
#define V_SANT 0x12 /* select antenna */
|
||||
#define V_ANNC 0x13 /* announce control */
|
||||
#define V_WRCTL 0x14 /* write controls */
|
||||
#define V_RDCTL 0x15 /* read controls */
|
||||
#define V_TOGL 0x16 /* set switches */
|
||||
#define V_ASCII 0x17 /* send CW message */
|
||||
#define V_POWER 0x18 /* power control */
|
||||
#define V_RDID 0x19 /* read model ID */
|
||||
#define V_SETW 0x1a /* read/write channel/bank data */
|
||||
#define V_CTRL 0x7f /* miscellaneous control */
|
||||
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
int icom_init P((char *, int, int));
|
||||
int icom_freq P((int, int, double));
|
@ -169,6 +169,10 @@ extern int vsprintf P((char *, const char *, ...));
|
||||
extern int stime P((const time_t *));
|
||||
#endif
|
||||
|
||||
#ifdef DECL_STIME_1
|
||||
extern int stime P((long *));
|
||||
#endif
|
||||
|
||||
#ifdef DECL_STRERROR_0
|
||||
extern char * strerror P((int errnum));
|
||||
#endif
|
||||
|
@ -343,10 +343,10 @@ struct peer {
|
||||
#define REFCLK_LOCALCLOCK 1 /* external (e.g., lockclock) */
|
||||
#define REFCLK_GPS_TRAK 2 /* TRAK 8810 GPS Receiver */
|
||||
#define REFCLK_WWV_PST 3 /* PST/Traconex 1020 WWV/H */
|
||||
#define REFCLK_WWVB_SPECTRACOM 4 /* Spectracom 8170/Netclock WWVB */
|
||||
#define REFCLK_SPECTRACOM 4 /* Spectracom (generic) Receivers */
|
||||
#define REFCLK_TRUETIME 5 /* TrueTime (generic) Receivers */
|
||||
#define REFCLK_IRIG_AUDIO 6 /* IRIG-B audio decoder */
|
||||
#define REFCLK_CHU 7 /* scratchbuilt CHU (Canada) */
|
||||
#define REFCLK_IRIG_AUDIO 6 /* IRIG-B/W audio decoder */
|
||||
#define REFCLK_CHU_AUDIO 7 /* CHU audio demodulator/decoder */
|
||||
#define REFCLK_PARSE 8 /* generic driver (usually DCF77,GPS,MSF) */
|
||||
#define REFCLK_GPS_MX4200 9 /* Magnavox MX4200 GPS */
|
||||
#define REFCLK_GPS_AS2201 10 /* Austron 2201A GPS */
|
||||
@ -373,7 +373,10 @@ struct peer {
|
||||
#define REFCLK_CHRONOLOG 32 /* Chrono-log K WWVB receiver */
|
||||
#define REFCLK_DUMBCLOCK 33 /* Dumb localtime clock */
|
||||
#define REFCLK_ULINK 34 /* Ultralink M320 WWVB receiver */
|
||||
#define REFCLK_MAX 34 /* Grow as needed... */
|
||||
#define REFCLK_PCF 35 /* Conrad parallel port radio clock */
|
||||
#define REFCLK_WWV_AUDIO 36 /* WWV/H audio demodulator/decoder */
|
||||
#define REFCLK_FG 37 /* Forum Graphic GPS */
|
||||
#define REFCLK_MAX 37 /* Grow as needed... */
|
||||
|
||||
/*
|
||||
* We tell reference clocks from real peers by giving the reference
|
||||
|
@ -165,8 +165,8 @@ struct refclockbug {
|
||||
#define LDISC_CLK 0x1 /* tty_clk \n intercept */
|
||||
#define LDISC_CLKPPS 0x2 /* tty_clk \377 intercept */
|
||||
#define LDISC_ACTS 0x4 /* tty_clk #* intercept */
|
||||
#define LDISC_CHU 0x8 /* tty_chu */
|
||||
#define LDISC_PPS 0x10 /* ppsclock */
|
||||
#define LDISC_CHU 0x8 /* depredated */
|
||||
#define LDISC_PPS 0x10 /* ppsclock, ppsapi */
|
||||
#define LDISC_RAW 0x20 /* raw binary */
|
||||
|
||||
struct refclockproc {
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
|
||||
@ -115,9 +119,9 @@ GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps kernel/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -179,15 +183,17 @@ tags-recursive:
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SUBDIRS)'; for subdir in $$list; do \
|
||||
@ -195,12 +201,14 @@ TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
test -f $$subdir/TAGS && tags="$$tags -i $$here/$$subdir/TAGS"; \
|
||||
fi; \
|
||||
done; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -217,7 +225,7 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@ -229,7 +237,6 @@ distdir: $(DISTFILES)
|
||||
test -d $(distdir)/$$subdir \
|
||||
|| mkdir $(distdir)/$$subdir \
|
||||
|| exit 1; \
|
||||
chmod 777 $(distdir)/$$subdir; \
|
||||
(cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir=../$(top_distdir) distdir=../$(distdir)/$$subdir distdir) \
|
||||
|| exit 1; \
|
||||
fi; \
|
||||
@ -270,6 +277,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-tags mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-recursive
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../../util/ansi2knr no-dependencies
|
||||
|
||||
@ -121,32 +125,36 @@ GZIP_ENV = --best
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps kernel/sys/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu kernel/sys/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -163,7 +171,7 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@ -205,6 +213,7 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-tags mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
@ -7,11 +7,12 @@ libntp_a_SOURCES = a_md5encrypt.c adjtime.c atoint.c atolfp.c atouint.c \
|
||||
clocktime.c clocktypes.c decodenetnum.c dofptoa.c dolfptoa.c \
|
||||
emalloc.c findconfig.c fptoa.c fptoms.c getopt.c hextoint.c \
|
||||
hextolfp.c humandate.c inttoa.c lib_strbuf.c machines.c md5c.c \
|
||||
memmove.c mexit.c mfptoa.c mfptoms.c modetoa.c mstolfp.c msutotsf.c \
|
||||
memmove.c mfptoa.c mfptoms.c modetoa.c mstolfp.c msutotsf.c \
|
||||
msyslog.c netof.c numtoa.c numtohost.c octtoint.c prettydate.c \
|
||||
ranny.c refnumtoa.c statestr.c syssignal.c systime.c tsftomsu.c \
|
||||
tstotv.c tvtoa.c tvtots.c uglydate.c uinttoa.c utvtoa.c ymd2yd.c \
|
||||
mfp_mul.c binio.c ieee754io.c gpstolfp.c recvbuff.c iosignal.c
|
||||
mfp_mul.c binio.c ieee754io.c gpstolfp.c recvbuff.c iosignal.c \
|
||||
icom.c audio.c
|
||||
libntp_a_LIBADD = @LIBOBJS@
|
||||
libntp_a_DEPENDENCIES = @LIBOBJS@
|
||||
INCLUDES = -I$(top_srcdir)/include
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../ansi2knr no-dependencies
|
||||
|
||||
@ -105,11 +109,12 @@ libntp_a_SOURCES = a_md5encrypt.c adjtime.c atoint.c atolfp.c atouint.c \
|
||||
clocktime.c clocktypes.c decodenetnum.c dofptoa.c dolfptoa.c \
|
||||
emalloc.c findconfig.c fptoa.c fptoms.c getopt.c hextoint.c \
|
||||
hextolfp.c humandate.c inttoa.c lib_strbuf.c machines.c md5c.c \
|
||||
memmove.c mexit.c mfptoa.c mfptoms.c modetoa.c mstolfp.c msutotsf.c \
|
||||
memmove.c mfptoa.c mfptoms.c modetoa.c mstolfp.c msutotsf.c \
|
||||
msyslog.c netof.c numtoa.c numtohost.c octtoint.c prettydate.c \
|
||||
ranny.c refnumtoa.c statestr.c syssignal.c systime.c tsftomsu.c \
|
||||
tstotv.c tvtoa.c tvtots.c uglydate.c uinttoa.c utvtoa.c ymd2yd.c \
|
||||
mfp_mul.c binio.c ieee754io.c gpstolfp.c recvbuff.c iosignal.c
|
||||
mfp_mul.c binio.c ieee754io.c gpstolfp.c recvbuff.c iosignal.c \
|
||||
icom.c audio.c
|
||||
|
||||
libntp_a_LIBADD = @LIBOBJS@
|
||||
libntp_a_DEPENDENCIES = @LIBOBJS@
|
||||
@ -130,6 +135,7 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LIBS = @LIBS@
|
||||
ANSI2KNR = ../util/ansi2knr
|
||||
libntp_a_AR = $(AR) cru
|
||||
am_libntp_a_OBJECTS = a_md5encrypt$U.o adjtime$U.o atoint$U.o \
|
||||
atolfp$U.o atouint$U.o authencrypt$U.o authkeys$U.o authparity$U.o \
|
||||
authreadkeys$U.o authusekey$U.o buftvtots$U.o caljulian$U.o \
|
||||
@ -137,12 +143,12 @@ calleapwhen$U.o caltontp$U.o calyearstart$U.o clocktime$U.o \
|
||||
clocktypes$U.o decodenetnum$U.o dofptoa$U.o dolfptoa$U.o emalloc$U.o \
|
||||
findconfig$U.o fptoa$U.o fptoms$U.o getopt$U.o hextoint$U.o \
|
||||
hextolfp$U.o humandate$U.o inttoa$U.o lib_strbuf$U.o machines$U.o \
|
||||
md5c$U.o memmove$U.o mexit$U.o mfptoa$U.o mfptoms$U.o modetoa$U.o \
|
||||
mstolfp$U.o msutotsf$U.o msyslog$U.o netof$U.o numtoa$U.o numtohost$U.o \
|
||||
md5c$U.o memmove$U.o mfptoa$U.o mfptoms$U.o modetoa$U.o mstolfp$U.o \
|
||||
msutotsf$U.o msyslog$U.o netof$U.o numtoa$U.o numtohost$U.o \
|
||||
octtoint$U.o prettydate$U.o ranny$U.o refnumtoa$U.o statestr$U.o \
|
||||
syssignal$U.o systime$U.o tsftomsu$U.o tstotv$U.o tvtoa$U.o tvtots$U.o \
|
||||
uglydate$U.o uinttoa$U.o utvtoa$U.o ymd2yd$U.o mfp_mul$U.o binio$U.o \
|
||||
ieee754io$U.o gpstolfp$U.o recvbuff$U.o iosignal$U.o
|
||||
ieee754io$U.o gpstolfp$U.o recvbuff$U.o iosignal$U.o icom$U.o audio$U.o
|
||||
libntp_a_OBJECTS = $(am_libntp_a_OBJECTS)
|
||||
AR = ar
|
||||
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
@ -158,6 +164,32 @@ strerror.c
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/a_md5encrypt$U.Po $(DEPDIR)/adjtime$U.Po \
|
||||
$(DEPDIR)/atoint$U.Po $(DEPDIR)/atolfp$U.Po $(DEPDIR)/atouint$U.Po \
|
||||
$(DEPDIR)/audio$U.Po $(DEPDIR)/authencrypt$U.Po $(DEPDIR)/authkeys$U.Po \
|
||||
$(DEPDIR)/authparity$U.Po $(DEPDIR)/authreadkeys$U.Po \
|
||||
$(DEPDIR)/authusekey$U.Po $(DEPDIR)/binio$U.Po $(DEPDIR)/buftvtots$U.Po \
|
||||
$(DEPDIR)/caljulian$U.Po $(DEPDIR)/calleapwhen$U.Po \
|
||||
$(DEPDIR)/caltontp$U.Po $(DEPDIR)/calyearstart$U.Po \
|
||||
$(DEPDIR)/clocktime$U.Po $(DEPDIR)/clocktypes$U.Po \
|
||||
$(DEPDIR)/decodenetnum$U.Po $(DEPDIR)/dofptoa$U.Po \
|
||||
$(DEPDIR)/dolfptoa$U.Po $(DEPDIR)/emalloc$U.Po \
|
||||
$(DEPDIR)/findconfig$U.Po $(DEPDIR)/fptoa$U.Po $(DEPDIR)/fptoms$U.Po \
|
||||
$(DEPDIR)/getopt$U.Po $(DEPDIR)/gpstolfp$U.Po $(DEPDIR)/hextoint$U.Po \
|
||||
$(DEPDIR)/hextolfp$U.Po $(DEPDIR)/humandate$U.Po $(DEPDIR)/icom$U.Po \
|
||||
$(DEPDIR)/ieee754io$U.Po $(DEPDIR)/inttoa$U.Po $(DEPDIR)/iosignal$U.Po \
|
||||
$(DEPDIR)/lib_strbuf$U.Po $(DEPDIR)/machines$U.Po $(DEPDIR)/md5c$U.Po \
|
||||
$(DEPDIR)/memmove$U.Po $(DEPDIR)/mfp_mul$U.Po $(DEPDIR)/mfptoa$U.Po \
|
||||
$(DEPDIR)/mfptoms$U.Po $(DEPDIR)/mktime.Po $(DEPDIR)/modetoa$U.Po \
|
||||
$(DEPDIR)/mstolfp$U.Po $(DEPDIR)/msutotsf$U.Po $(DEPDIR)/msyslog$U.Po \
|
||||
$(DEPDIR)/netof$U.Po $(DEPDIR)/numtoa$U.Po $(DEPDIR)/numtohost$U.Po \
|
||||
$(DEPDIR)/octtoint$U.Po $(DEPDIR)/prettydate$U.Po $(DEPDIR)/ranny$U.Po \
|
||||
$(DEPDIR)/recvbuff$U.Po $(DEPDIR)/refnumtoa$U.Po \
|
||||
$(DEPDIR)/statestr$U.Po $(DEPDIR)/strerror.Po $(DEPDIR)/syssignal$U.Po \
|
||||
$(DEPDIR)/systime$U.Po $(DEPDIR)/tsftomsu$U.Po $(DEPDIR)/tstotv$U.Po \
|
||||
$(DEPDIR)/tvtoa$U.Po $(DEPDIR)/tvtots$U.Po $(DEPDIR)/uglydate$U.Po \
|
||||
$(DEPDIR)/uinttoa$U.Po $(DEPDIR)/utvtoa$U.Po $(DEPDIR)/ymd2yd$U.Po
|
||||
SOURCES = $(libntp_a_SOURCES)
|
||||
OBJECTS = $(am_libntp_a_OBJECTS)
|
||||
|
||||
@ -165,9 +197,9 @@ all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps libntp/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu libntp/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -181,9 +213,6 @@ distclean-noinstLIBRARIES:
|
||||
|
||||
maintainer-clean-noinstLIBRARIES:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -208,74 +237,10 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
a_md5encrypt$U.o:
|
||||
adjtime$U.o:
|
||||
atoint$U.o:
|
||||
atolfp$U.o:
|
||||
atouint$U.o:
|
||||
authencrypt$U.o:
|
||||
authkeys$U.o:
|
||||
authparity$U.o:
|
||||
authreadkeys$U.o:
|
||||
authusekey$U.o:
|
||||
buftvtots$U.o:
|
||||
caljulian$U.o:
|
||||
calleapwhen$U.o:
|
||||
caltontp$U.o:
|
||||
calyearstart$U.o:
|
||||
clocktime$U.o:
|
||||
clocktypes$U.o:
|
||||
decodenetnum$U.o:
|
||||
dofptoa$U.o:
|
||||
dolfptoa$U.o:
|
||||
emalloc$U.o:
|
||||
findconfig$U.o:
|
||||
fptoa$U.o:
|
||||
fptoms$U.o:
|
||||
getopt$U.o:
|
||||
hextoint$U.o:
|
||||
hextolfp$U.o:
|
||||
humandate$U.o:
|
||||
inttoa$U.o:
|
||||
lib_strbuf$U.o:
|
||||
machines$U.o:
|
||||
md5c$U.o:
|
||||
memmove$U.o:
|
||||
mexit$U.o:
|
||||
mfptoa$U.o:
|
||||
mfptoms$U.o:
|
||||
modetoa$U.o:
|
||||
mstolfp$U.o:
|
||||
msutotsf$U.o:
|
||||
msyslog$U.o:
|
||||
netof$U.o:
|
||||
numtoa$U.o:
|
||||
numtohost$U.o:
|
||||
octtoint$U.o:
|
||||
prettydate$U.o:
|
||||
ranny$U.o:
|
||||
refnumtoa$U.o:
|
||||
statestr$U.o:
|
||||
syssignal$U.o:
|
||||
systime$U.o:
|
||||
tsftomsu$U.o:
|
||||
tstotv$U.o:
|
||||
tvtoa$U.o:
|
||||
tvtots$U.o:
|
||||
uglydate$U.o:
|
||||
uinttoa$U.o:
|
||||
utvtoa$U.o:
|
||||
ymd2yd$U.o:
|
||||
mfp_mul$U.o:
|
||||
binio$U.o:
|
||||
ieee754io$U.o:
|
||||
gpstolfp$U.o:
|
||||
recvbuff$U.o:
|
||||
iosignal$U.o:
|
||||
|
||||
libntp.a: $(libntp_a_OBJECTS) $(libntp_a_DEPENDENCIES)
|
||||
-rm -f libntp.a
|
||||
$(AR) cru libntp.a $(libntp_a_OBJECTS) $(libntp_a_LIBADD)
|
||||
$(libntp_a_AR) libntp.a $(libntp_a_OBJECTS) $(libntp_a_LIBADD)
|
||||
$(RANLIB) libntp.a
|
||||
a_md5encrypt_.c: a_md5encrypt.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/a_md5encrypt.c; then echo $(srcdir)/a_md5encrypt.c; else echo a_md5encrypt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > a_md5encrypt_.c
|
||||
@ -287,6 +252,8 @@ atolfp_.c: atolfp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/atolfp.c; then echo $(srcdir)/atolfp.c; else echo atolfp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > atolfp_.c
|
||||
atouint_.c: atouint.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/atouint.c; then echo $(srcdir)/atouint.c; else echo atouint.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > atouint_.c
|
||||
audio_.c: audio.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/audio.c; then echo $(srcdir)/audio.c; else echo audio.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > audio_.c
|
||||
authencrypt_.c: authencrypt.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/authencrypt.c; then echo $(srcdir)/authencrypt.c; else echo authencrypt.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > authencrypt_.c
|
||||
authkeys_.c: authkeys.c $(ANSI2KNR)
|
||||
@ -337,6 +304,8 @@ hextolfp_.c: hextolfp.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/hextolfp.c; then echo $(srcdir)/hextolfp.c; else echo hextolfp.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > hextolfp_.c
|
||||
humandate_.c: humandate.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/humandate.c; then echo $(srcdir)/humandate.c; else echo humandate.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > humandate_.c
|
||||
icom_.c: icom.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/icom.c; then echo $(srcdir)/icom.c; else echo icom.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > icom_.c
|
||||
ieee754io_.c: ieee754io.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ieee754io.c; then echo $(srcdir)/ieee754io.c; else echo ieee754io.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > ieee754io_.c
|
||||
inttoa_.c: inttoa.c $(ANSI2KNR)
|
||||
@ -351,8 +320,6 @@ md5c_.c: md5c.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/md5c.c; then echo $(srcdir)/md5c.c; else echo md5c.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > md5c_.c
|
||||
memmove_.c: memmove.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/memmove.c; then echo $(srcdir)/memmove.c; else echo memmove.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > memmove_.c
|
||||
mexit_.c: mexit.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mexit.c; then echo $(srcdir)/mexit.c; else echo mexit.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mexit_.c
|
||||
mfp_mul_.c: mfp_mul.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/mfp_mul.c; then echo $(srcdir)/mfp_mul.c; else echo mfp_mul.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > mfp_mul_.c
|
||||
mfptoa_.c: mfptoa.c $(ANSI2KNR)
|
||||
@ -409,13 +376,13 @@ utvtoa_.c: utvtoa.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/utvtoa.c; then echo $(srcdir)/utvtoa.c; else echo utvtoa.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > utvtoa_.c
|
||||
ymd2yd_.c: ymd2yd.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/ymd2yd.c; then echo $(srcdir)/ymd2yd.c; else echo ymd2yd.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > ymd2yd_.c
|
||||
a_md5encrypt_.o adjtime_.o atoint_.o atolfp_.o atouint_.o \
|
||||
a_md5encrypt_.o adjtime_.o atoint_.o atolfp_.o atouint_.o audio_.o \
|
||||
authencrypt_.o authkeys_.o authparity_.o authreadkeys_.o authusekey_.o \
|
||||
binio_.o buftvtots_.o caljulian_.o calleapwhen_.o caltontp_.o \
|
||||
calyearstart_.o clocktime_.o clocktypes_.o decodenetnum_.o dofptoa_.o \
|
||||
dolfptoa_.o emalloc_.o findconfig_.o fptoa_.o fptoms_.o getopt_.o \
|
||||
gpstolfp_.o hextoint_.o hextolfp_.o humandate_.o ieee754io_.o inttoa_.o \
|
||||
iosignal_.o lib_strbuf_.o machines_.o md5c_.o memmove_.o mexit_.o \
|
||||
gpstolfp_.o hextoint_.o hextolfp_.o humandate_.o icom_.o ieee754io_.o \
|
||||
inttoa_.o iosignal_.o lib_strbuf_.o machines_.o md5c_.o memmove_.o \
|
||||
mfp_mul_.o mfptoa_.o mfptoms_.o mktime_.o modetoa_.o mstolfp_.o \
|
||||
msutotsf_.o msyslog_.o netof_.o numtoa_.o numtohost_.o octtoint_.o \
|
||||
prettydate_.o ranny_.o recvbuff_.o refnumtoa_.o statestr_.o strerror_.o \
|
||||
@ -424,23 +391,27 @@ uglydate_.o uinttoa_.o utvtoa_.o ymd2yd_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -457,258 +428,98 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
a_md5encrypt.o: a_md5encrypt.c ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp_types.h \
|
||||
../include/ntp_fp.h ../include/ntp_string.h ../include/global.h \
|
||||
../include/md5.h ../include/ntp_stdlib.h ../include/l_stdlib.h
|
||||
adjtime.o: adjtime.c ../config.h
|
||||
atoint.o: atoint.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
atolfp.o: atolfp.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h
|
||||
atouint.o: atouint.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
authencrypt.o: authencrypt.c ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h
|
||||
authkeys.o: authkeys.c ../config.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../include/ntp_proto.h \
|
||||
../include/ntp_fp.h ../include/ntp.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_string.h \
|
||||
../include/ntp_stdlib.h ../include/l_stdlib.h
|
||||
authparity.o: authparity.c ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
authreadkeys.o: authreadkeys.c ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_syslog.h
|
||||
authusekey.o: authusekey.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h
|
||||
binio.o: binio.c ../include/binio.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
buftvtots.o: buftvtots.c ../config.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_unixtime.h
|
||||
caljulian.o: caljulian.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h ../include/ntp_calendar.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
calleapwhen.o: calleapwhen.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
caltontp.o: caltontp.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h ../include/ntp_calendar.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
calyearstart.o: calyearstart.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
clocktime.o: clocktime.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
clocktypes.o: clocktypes.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp.h lib_strbuf.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
decodenetnum.o: decodenetnum.c ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h ../config.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
desc.o: desc.c ../include/global.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/rsaref.h ../include/md2.h ../include/md5.h \
|
||||
../include/des.h
|
||||
dofptoa.o: dofptoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
lib_strbuf.h ../include/ntp_string.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h
|
||||
dolfptoa.o: dolfptoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
lib_strbuf.h ../include/ntp_string.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h
|
||||
emalloc.o: emalloc.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h ../include/ntp_malloc.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_syslog.h
|
||||
findconfig.o: findconfig.c ../config.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
fptoa.o: fptoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
fptoms.o: fptoms.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h
|
||||
getopt.o: getopt.c ../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
gpstolfp.o: gpstolfp.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h
|
||||
hextoint.o: hextoint.c ../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
hextolfp.o: hextolfp.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h
|
||||
humandate.o: humandate.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_unixtime.h lib_strbuf.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ieee754io.o: ieee754io.c ../config.h ../include/l_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/ntp_fp.h \
|
||||
../include/ieee754io.h
|
||||
inttoa.o: inttoa.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
iosignal.o: iosignal.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h ../include/ntp_if.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/iosignal.h
|
||||
lib_strbuf.o: lib_strbuf.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h
|
||||
machines.o: machines.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_syslog.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_unixtime.h
|
||||
md5c.o: md5c.c ../include/global.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/md5.h
|
||||
memmove.o: memmove.c ../config.h
|
||||
mexit.o: mexit.c
|
||||
mfp_mul.o: mfp_mul.c ../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_fp.h
|
||||
mfptoa.o: mfptoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
mfptoms.o: mfptoms.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
modetoa.o: modetoa.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
mstolfp.o: mstolfp.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
msutotsf.o: msutotsf.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h
|
||||
msyslog.o: msyslog.c ../config.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h ../include/ntp_syslog.h
|
||||
netof.o: netof.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
numtoa.o: numtoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
lib_strbuf.h ../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
numtohost.o: numtohost.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h lib_strbuf.h
|
||||
octtoint.o: octtoint.c ../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
prettydate.o: prettydate.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_unixtime.h lib_strbuf.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ranny.o: ranny.c ../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
recvbuff.o: recvbuff.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_syslog.h ../include/ntp_io.h \
|
||||
../include/recvbuff.h ../include/ntp.h ../include/iosignal.h \
|
||||
../include/ntp_refclock.h
|
||||
refnumtoa.o: refnumtoa.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
lib_strbuf.h ../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
statestr.o: statestr.c ../config.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_fp.h ../include/ntp.h \
|
||||
lib_strbuf.h ../include/ntp_refclock.h ../include/recvbuff.h \
|
||||
../include/ntp_control.h
|
||||
syssignal.o: syssignal.c ../config.h ../include/ntp_syslog.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../include/ntp_proto.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
systime.o: systime.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_syslog.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
tsftomsu.o: tsftomsu.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
tstotv.o: tstotv.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h
|
||||
tvtoa.o: tvtoa.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_unixtime.h
|
||||
tvtots.o: tvtots.c ../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../config.h ../include/ntp_proto.h
|
||||
uglydate.o: uglydate.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_unixtime.h lib_strbuf.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
uinttoa.o: uinttoa.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
utvtoa.o: utvtoa.c lib_strbuf.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_unixtime.h
|
||||
ymd2yd.o: ymd2yd.c ../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
|
||||
@AMDEP@include $(DEPDIR)/a_md5encrypt$U.Po
|
||||
@AMDEP@include $(DEPDIR)/adjtime$U.Po
|
||||
@AMDEP@include $(DEPDIR)/atoint$U.Po
|
||||
@AMDEP@include $(DEPDIR)/atolfp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/atouint$U.Po
|
||||
@AMDEP@include $(DEPDIR)/audio$U.Po
|
||||
@AMDEP@include $(DEPDIR)/authencrypt$U.Po
|
||||
@AMDEP@include $(DEPDIR)/authkeys$U.Po
|
||||
@AMDEP@include $(DEPDIR)/authparity$U.Po
|
||||
@AMDEP@include $(DEPDIR)/authreadkeys$U.Po
|
||||
@AMDEP@include $(DEPDIR)/authusekey$U.Po
|
||||
@AMDEP@include $(DEPDIR)/binio$U.Po
|
||||
@AMDEP@include $(DEPDIR)/buftvtots$U.Po
|
||||
@AMDEP@include $(DEPDIR)/caljulian$U.Po
|
||||
@AMDEP@include $(DEPDIR)/calleapwhen$U.Po
|
||||
@AMDEP@include $(DEPDIR)/caltontp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/calyearstart$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clocktime$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clocktypes$U.Po
|
||||
@AMDEP@include $(DEPDIR)/decodenetnum$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dofptoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/dolfptoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/emalloc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/findconfig$U.Po
|
||||
@AMDEP@include $(DEPDIR)/fptoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/fptoms$U.Po
|
||||
@AMDEP@include $(DEPDIR)/getopt$U.Po
|
||||
@AMDEP@include $(DEPDIR)/gpstolfp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/hextoint$U.Po
|
||||
@AMDEP@include $(DEPDIR)/hextolfp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/humandate$U.Po
|
||||
@AMDEP@include $(DEPDIR)/icom$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ieee754io$U.Po
|
||||
@AMDEP@include $(DEPDIR)/inttoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/iosignal$U.Po
|
||||
@AMDEP@include $(DEPDIR)/lib_strbuf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/machines$U.Po
|
||||
@AMDEP@include $(DEPDIR)/md5c$U.Po
|
||||
@AMDEP@include $(DEPDIR)/memmove$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mfp_mul$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mfptoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mfptoms$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mktime.Po
|
||||
@AMDEP@include $(DEPDIR)/modetoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/mstolfp$U.Po
|
||||
@AMDEP@include $(DEPDIR)/msutotsf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/msyslog$U.Po
|
||||
@AMDEP@include $(DEPDIR)/netof$U.Po
|
||||
@AMDEP@include $(DEPDIR)/numtoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/numtohost$U.Po
|
||||
@AMDEP@include $(DEPDIR)/octtoint$U.Po
|
||||
@AMDEP@include $(DEPDIR)/prettydate$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ranny$U.Po
|
||||
@AMDEP@include $(DEPDIR)/recvbuff$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refnumtoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/statestr$U.Po
|
||||
@AMDEP@include $(DEPDIR)/strerror.Po
|
||||
@AMDEP@include $(DEPDIR)/syssignal$U.Po
|
||||
@AMDEP@include $(DEPDIR)/systime$U.Po
|
||||
@AMDEP@include $(DEPDIR)/tsftomsu$U.Po
|
||||
@AMDEP@include $(DEPDIR)/tstotv$U.Po
|
||||
@AMDEP@include $(DEPDIR)/tvtoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/tvtots$U.Po
|
||||
@AMDEP@include $(DEPDIR)/uglydate$U.Po
|
||||
@AMDEP@include $(DEPDIR)/uinttoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/utvtoa$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ymd2yd$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
@ -745,25 +556,28 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-kr mostlyclean-tags mostlyclean-depend \
|
||||
mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-noinstLIBRARIES clean-compile clean-kr clean-tags \
|
||||
clean-generic mostlyclean-am
|
||||
clean-depend clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-noinstLIBRARIES distclean-compile distclean-kr \
|
||||
distclean-tags distclean-generic clean-am
|
||||
distclean-tags distclean-depend distclean-generic \
|
||||
clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
|
||||
maintainer-clean-compile maintainer-clean-kr \
|
||||
maintainer-clean-tags maintainer-clean-generic \
|
||||
distclean-am
|
||||
maintainer-clean-tags maintainer-clean-depend \
|
||||
maintainer-clean-generic distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -774,8 +588,9 @@ clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
|
||||
maintainer-clean-kr tags mostlyclean-tags distclean-tags clean-tags \
|
||||
maintainer-clean-tags distdir info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-am install-exec \
|
||||
maintainer-clean-tags distdir mostlyclean-depend distclean-depend \
|
||||
clean-depend maintainer-clean-depend info-am info dvi-am dvi check \
|
||||
check-am installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
|
154
contrib/ntp/libntp/audio.c
Normal file
154
contrib/ntp/libntp/audio.c
Normal file
@ -0,0 +1,154 @@
|
||||
/*
|
||||
* audio.c - audio interface for reference clock audio drivers
|
||||
*/
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
|
||||
#include "audio.h"
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
#include <sys/audioio.h>
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
#ifdef HAVE_SUN_AUDIOIO_H
|
||||
#include <sun/audioio.h>
|
||||
#endif /* HAVE_SUN_AUDIOIO_H */
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif /* HAVE_SYS_IOCTL_H */
|
||||
|
||||
#include <fcntl.h>
|
||||
|
||||
/*
|
||||
* Global variables
|
||||
*/
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
static struct audio_device device; /* audio device ident */
|
||||
static struct audio_info info; /* audio device info */
|
||||
static int ctl_fd; /* audio control file descriptor */
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
|
||||
|
||||
/*
|
||||
* audio_init - open and initialize audio device
|
||||
*
|
||||
* This code works with SunOS 4.x and Solaris 2.x; however, it is
|
||||
* believed generic and applicable to other systems with a minor twid
|
||||
* or two. All it does is open the device, set the buffer size (Solaris
|
||||
* only), preset the gain and set the input port. It assumes that the
|
||||
* codec sample rate (8000 Hz), precision (8 bits), number of channels
|
||||
* (1) and encoding (ITU-T G.711 mu-law companded) have been set by
|
||||
* default.
|
||||
*/
|
||||
int
|
||||
audio_init(void)
|
||||
{
|
||||
int fd;
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
int rval;
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
|
||||
/*
|
||||
* Open audio device
|
||||
*/
|
||||
fd = open("/dev/audio", O_RDWR | O_NONBLOCK, 0777);
|
||||
if (fd < 0) {
|
||||
perror("audio:");
|
||||
return (fd);
|
||||
}
|
||||
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
/*
|
||||
* Open audio control device
|
||||
*/
|
||||
ctl_fd = open("/dev/audioctl", O_RDWR);
|
||||
if (ctl_fd < 0) {
|
||||
perror("audioctl:");
|
||||
close(fd);
|
||||
return(ctl_fd);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set audio device parameters.
|
||||
*/
|
||||
rval = audio_gain((AUDIO_MAX_GAIN - AUDIO_MIN_GAIN) / 2,
|
||||
AUDIO_MICROPHONE);
|
||||
if (rval < 0) {
|
||||
close(ctl_fd);
|
||||
close(fd);
|
||||
return(rval);
|
||||
}
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
return (fd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* audio_gain - adjust codec gain and port
|
||||
*/
|
||||
int
|
||||
audio_gain(
|
||||
int gain, /* gain 0-255 */
|
||||
int port /* port */
|
||||
)
|
||||
{
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
int rval;
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
AUDIO_INITINFO(&info);
|
||||
info.record.buffer_size = AUDIO_BUFSIZ;
|
||||
info.record.gain = gain;
|
||||
info.record.port = port;
|
||||
info.record.error = 0;
|
||||
rval = ioctl(ctl_fd, (int)AUDIO_SETINFO, &info);
|
||||
if (rval < 0) {
|
||||
perror("audio:");
|
||||
return (rval);
|
||||
}
|
||||
return (info.record.error);
|
||||
#else
|
||||
return (0);
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* audio_show - display audio parameters
|
||||
*
|
||||
* This code doesn't really do anything, except satisfy curiousity and
|
||||
* verify the ioctl's work.
|
||||
*/
|
||||
void
|
||||
audio_show(void)
|
||||
{
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
ioctl(ctl_fd, (int)AUDIO_GETDEV, &device);
|
||||
printf("audio: name %s, version %s, config %s\n",
|
||||
device.name, device.version, device.config);
|
||||
ioctl(ctl_fd, (int)AUDIO_GETINFO, &info);
|
||||
printf(
|
||||
"audio: samples %d, channels %d, precision %d, encoding %d\n",
|
||||
info.record.sample_rate, info.record.channels,
|
||||
info.record.precision, info.record.encoding);
|
||||
printf("audio: gain %d, port %d, buffer %d\n",
|
||||
info.record.gain, info.record.port,
|
||||
info.record.buffer_size);
|
||||
printf("audio: gain %d, port %d\n",
|
||||
info.record.gain, info.record.port);
|
||||
printf(
|
||||
"audio: samples %d, eof %d, pause %d, error %d, waiting %d, balance %d\n",
|
||||
info.record.samples, info.record.eof,
|
||||
info.record.pause, info.record.error,
|
||||
info.record.waiting, info.record.balance);
|
||||
printf("audio: monitor %d, muted %d\n",
|
||||
info.monitor_gain, info.output_muted);
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
#ifdef __NetBSD__
|
||||
printf("audio: monitor %d, blocksize %d, hiwat %d, lowat %d, mode %d\n",
|
||||
info.monitor_gain, info.blocksize, info.hiwat, info.lowat, info.mode);
|
||||
#endif /* __NetBSD__ */
|
||||
}
|
@ -193,7 +193,7 @@ auth_moremem(void)
|
||||
struct savekey *sk;
|
||||
int i;
|
||||
|
||||
sk = (struct savekey *)malloc(MEMINC * sizeof(struct savekey));
|
||||
sk = (struct savekey *)calloc(MEMINC, sizeof(struct savekey));
|
||||
if (sk == 0)
|
||||
return (0);
|
||||
|
||||
|
@ -18,14 +18,14 @@ struct clktype clktypes[] = {
|
||||
"GPS_TRAK" },
|
||||
{ REFCLK_WWV_PST, "PSTI/Traconex WWV/WWVH Receiver (3)",
|
||||
"WWV_PST" },
|
||||
{ REFCLK_WWVB_SPECTRACOM, "Spectracom WWVB Receiver (4)",
|
||||
"WWVB_SPEC" },
|
||||
{ REFCLK_SPECTRACOM, "Spectracom (generic) Receivers (4)",
|
||||
"SPECTRACOM" },
|
||||
{ REFCLK_TRUETIME, "TrueTime (generic) Receivers (5)",
|
||||
"TRUETIME" },
|
||||
{ REFCLK_IRIG_AUDIO, "IRIG Audio Decoder (6)",
|
||||
"IRIG_AUDIO" },
|
||||
{ REFCLK_CHU, "Scratchbuilt CHU Receiver (7)",
|
||||
"CHU" },
|
||||
{ REFCLK_CHU_AUDIO, "CHU Audio Demodulator/Decoder (7)",
|
||||
"CHU_AUDIO" },
|
||||
{ REFCLK_PARSE, "Generic reference clock driver (8)",
|
||||
"GENERIC" },
|
||||
{ REFCLK_GPS_MX4200, "Magnavox MX4200 GPS Receiver (9)",
|
||||
@ -76,10 +76,16 @@ struct clktype clktypes[] = {
|
||||
"GPS_JUPITER" },
|
||||
{ REFCLK_CHRONOLOG, "Chrono-log K (32)",
|
||||
"CHRONOLOG" },
|
||||
{ REFCLK_DUMBCLOCK, "Dumb generic hh:mm:ss local clock",
|
||||
{ REFCLK_DUMBCLOCK, "Dumb generic hh:mm:ss local clock (33)",
|
||||
"DUMBCLOCK" },
|
||||
{ REFCLK_ULINK, "Ultralink M320 WWVB receiver",
|
||||
{ REFCLK_ULINK, "Ultralink M320 WWVB receiver (34)",
|
||||
"ULINK_M320"},
|
||||
{ REFCLK_PCF, "Conrad parallel port radio clock (35)",
|
||||
"PCF"},
|
||||
{ REFCLK_WWV_AUDIO, "WWV/H Audio Demodulator/Decoder (36)",
|
||||
"WWV_AUDIO"},
|
||||
{ REFCLK_FG, "Forum Graphic GPS Dating Station (37)",
|
||||
"GPS_FG"},
|
||||
{ -1, "", "" }
|
||||
};
|
||||
|
||||
|
329
contrib/ntp/libntp/icom.c
Normal file
329
contrib/ntp/libntp/icom.c
Normal file
@ -0,0 +1,329 @@
|
||||
/*
|
||||
* Program to control ICOM radios
|
||||
*
|
||||
* This is a ripoff of the utility routines in the ICOM software
|
||||
* distribution. The only function provided is to load the radio
|
||||
* frequency. All other parameters must be manually set before use.
|
||||
*/
|
||||
#include "icom.h"
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef HAVE_TERMIOS_H
|
||||
# include <termios.h>
|
||||
#endif /* HAVE_TERMIOS_H */
|
||||
#ifdef HAVE_SYS_TERMIOS_H
|
||||
# include <sys/termios.h>
|
||||
#endif /* HAVE_SYS_TERMIOS_H */
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <errno.h>
|
||||
|
||||
/*
|
||||
* Scraps
|
||||
*/
|
||||
#define BMAX 50 /* max command length */
|
||||
#define DICOM /dev/icom/ /* ICOM port link */
|
||||
|
||||
/*
|
||||
* FSA definitions
|
||||
*/
|
||||
#define S_IDLE 0 /* idle */
|
||||
#define S_HDR 1 /* header */
|
||||
#define S_TX 2 /* address */
|
||||
#define S_DATA 3 /* data */
|
||||
#define S_ERROR 4 /* error */
|
||||
|
||||
/*
|
||||
* Local function prototypes
|
||||
*/
|
||||
static void doublefreq P((double, u_char *, int));
|
||||
static int sndpkt P((int, int, u_char *, u_char *));
|
||||
static int sndoctet P((int, int));
|
||||
static int rcvoctet P((int));
|
||||
|
||||
/*
|
||||
* Local variables
|
||||
*/
|
||||
static int flags; /* trace flags */
|
||||
static int state; /* fsa state */
|
||||
|
||||
|
||||
/*
|
||||
* icom_freq(fd, ident, freq) - load radio frequency
|
||||
*/
|
||||
int
|
||||
icom_freq( /* returns 0 (ok), EIO (error) */
|
||||
int fd, /* file descriptor */
|
||||
int ident, /* ICOM radio identifier */
|
||||
double freq /* frequency (MHz) */
|
||||
)
|
||||
{
|
||||
u_char cmd[BMAX], rsp[BMAX];
|
||||
int temp;
|
||||
cmd[0] = V_SFREQ;
|
||||
if (ident == IC735)
|
||||
temp = 4;
|
||||
else
|
||||
temp = 5;
|
||||
doublefreq(freq * 1e6, &cmd[1], temp);
|
||||
temp = sndpkt(fd, ident, cmd, rsp);
|
||||
if (temp < 1 || rsp[0] != ACK)
|
||||
return (EIO);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* doublefreq(freq, y, len) - double to ICOM frequency with padding
|
||||
*/
|
||||
static void
|
||||
doublefreq( /* returns void */
|
||||
double freq, /* frequency */
|
||||
u_char *x, /* radio frequency */
|
||||
int len /* length (octets) */
|
||||
)
|
||||
{
|
||||
int i;
|
||||
char s1[11];
|
||||
char *y;
|
||||
|
||||
sprintf(s1, " %10.0f", freq);
|
||||
y = s1 + 10;
|
||||
i = 0;
|
||||
while (*y != ' ') {
|
||||
x[i] = *y-- & 0x0f;
|
||||
x[i] = x[i] | ((*y-- & 0x0f) << 4);
|
||||
i++;
|
||||
}
|
||||
for (; i < len; i++)
|
||||
x[i] = 0;
|
||||
x[i] = FI;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Packet routines
|
||||
*
|
||||
* These routines send a packet and receive the response. If an error
|
||||
* (collision) occurs on transmit, the packet is resent. If an error
|
||||
* occurs on receive (timeout), all input to the terminating FI is
|
||||
* discarded and the packet is resent. If the maximum number of retries
|
||||
* is not exceeded, the program returns the number of octets in the user
|
||||
* buffer; otherwise, it returns zero.
|
||||
*
|
||||
* ICOM frame format
|
||||
*
|
||||
* Frames begin with a two-octet preamble PR-PR followyd by the
|
||||
* transceiver address RE, controller address TX, control code CN, zero
|
||||
* or more data octets DA (depending on command), and terminator FI.
|
||||
* Since the bus is bidirectional, every octet output is echoed on
|
||||
* input. Every valid frame sent is answered with a frame in the same
|
||||
* format, but with the RE and TX fields interchanged. The CN field is
|
||||
* set to NAK if an error has occurred. Otherwise, the data are returned
|
||||
* in this and following DA octets. If no data are returned, the CN
|
||||
* octet is set to ACK.
|
||||
*
|
||||
* +------+------+------+------+------+--//--+------+
|
||||
* | PR | PR | RE | TX | CN | DA | FI |
|
||||
* +------+------+------+------+------+--//--+------+
|
||||
*/
|
||||
/*
|
||||
* icom_open() - open and initialize serial interface
|
||||
*
|
||||
* This routine opens the serial interface for raw transmission; that
|
||||
* is, character-at-a-time, no stripping, checking or monkeying with the
|
||||
* bits. For Unix, an input operation ends either with the receipt of a
|
||||
* character or a 0.5-s timeout.
|
||||
*/
|
||||
int
|
||||
icom_init(
|
||||
char *device, /* device name/link */
|
||||
int speed, /* line speed */
|
||||
int trace /* trace flags */ )
|
||||
{
|
||||
struct termios ttyb;
|
||||
int fd;
|
||||
|
||||
flags = trace;
|
||||
fd = open(device, O_RDWR, 0777);
|
||||
if (fd < 0)
|
||||
return (fd);
|
||||
tcgetattr(fd, &ttyb);
|
||||
ttyb.c_iflag = 0; /* input modes */
|
||||
ttyb.c_oflag = 0; /* output modes */
|
||||
ttyb.c_cflag = IBAUD|CS8|CREAD|CLOCAL; /* control modes */
|
||||
ttyb.c_lflag = 0; /* local modes */
|
||||
ttyb.c_cc[VMIN] = 0; /* min chars */
|
||||
ttyb.c_cc[VTIME] = 5; /* receive timeout */
|
||||
cfsetispeed(&ttyb, (u_int)speed);
|
||||
cfsetospeed(&ttyb, (u_int)speed);
|
||||
tcsetattr(fd, TCSANOW, &ttyb);
|
||||
return (fd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* sndpkt(r, x, y) - send packet and receive response
|
||||
*
|
||||
* This routine sends a command frame, which consists of all except the
|
||||
* preamble octets PR-PR. It then listens for the response frame and
|
||||
* returns the payload to the caller. The routine checks for correct
|
||||
* response header format; that is, the length of the response vector
|
||||
* returned to the caller must be at least 2 and the RE and TX octets
|
||||
* must be interchanged; otherwise, the operation is retried up to
|
||||
* the number of times specified in a global variable.
|
||||
*
|
||||
* The trace function, which is enabled by the P_TRACE bit of the global
|
||||
* flags variable, prints all characters received or echoed on the bus
|
||||
* preceded by a T (transmit) or R (receive). The P_ERMSG bit of the
|
||||
* flags variable enables printing of bus error messages.
|
||||
*
|
||||
* Note that the first octet sent is a PAD in order to allow time for
|
||||
* the radio to flush its receive buffer after sending the previous
|
||||
* response. Even with this precaution, some of the older radios
|
||||
* occasionally fail to receive a command and it has to be sent again.
|
||||
*/
|
||||
static int
|
||||
sndpkt( /* returns octet count */
|
||||
int fd, /* file descriptor */
|
||||
int r, /* radio address */
|
||||
u_char *cmd, /* command vector */
|
||||
u_char *rsp /* response vector */
|
||||
)
|
||||
{
|
||||
int i, j, temp;
|
||||
|
||||
(void)tcflush(fd, TCIOFLUSH);
|
||||
for (i = 0; i < RETRY; i++) {
|
||||
state = S_IDLE;
|
||||
|
||||
/*
|
||||
* Transmit packet.
|
||||
*/
|
||||
if (flags & P_TRACE)
|
||||
printf("icom T:");
|
||||
sndoctet(fd, PAD); /* send header */
|
||||
sndoctet(fd, PR);
|
||||
sndoctet(fd, PR);
|
||||
sndoctet(fd, r);
|
||||
sndoctet(fd, TX);
|
||||
for (j = 0; j < BMAX; j++) { /* send body */
|
||||
if (sndoctet(fd, cmd[j]) == FI)
|
||||
break;
|
||||
}
|
||||
while (rcvoctet(fd) != FI); /* purge echos */
|
||||
if (cmd[0] == V_FREQT || cmd[0] == V_MODET)
|
||||
return (0); /* shortcut for broadcast */
|
||||
|
||||
/*
|
||||
* Receive packet. First, delete all characters
|
||||
* preceeding a PR, then discard all PRs. Check that the
|
||||
* RE and TX fields are correctly interchanged, then
|
||||
* copy the remaining data and FI to the user buffer.
|
||||
*/
|
||||
if (flags & P_TRACE)
|
||||
printf("\nicom R:");
|
||||
j = 0;
|
||||
while ((temp = rcvoctet(fd)) != FI) {
|
||||
switch (state) {
|
||||
|
||||
case S_IDLE:
|
||||
if (temp != PR)
|
||||
continue;
|
||||
state = S_HDR;
|
||||
break;
|
||||
|
||||
case S_HDR:
|
||||
if (temp == PR) {
|
||||
continue;
|
||||
} else if (temp != TX) {
|
||||
if (flags & P_ERMSG)
|
||||
printf(
|
||||
"icom: TX error\n");
|
||||
state = S_ERROR;
|
||||
}
|
||||
state = S_TX;
|
||||
break;
|
||||
|
||||
case S_TX:
|
||||
if (temp != r) {
|
||||
if (flags & P_ERMSG)
|
||||
printf(
|
||||
"icom: RE error\n");
|
||||
state = S_ERROR;
|
||||
}
|
||||
state = S_DATA;
|
||||
break;
|
||||
|
||||
case S_DATA:
|
||||
if (j >= BMAX ) {
|
||||
if (flags & P_ERMSG)
|
||||
printf(
|
||||
"icom: buffer overrun\n");
|
||||
state = S_ERROR;
|
||||
j = 0;
|
||||
}
|
||||
rsp[j++] = (u_char)temp;
|
||||
break;
|
||||
|
||||
case S_ERROR:
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (flags & P_TRACE)
|
||||
printf("\n");
|
||||
if (j > 0) {
|
||||
rsp[j++] = FI;
|
||||
return (j);
|
||||
}
|
||||
}
|
||||
if (flags & P_ERMSG)
|
||||
printf("icom: retries exceeded\n");
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Interface routines
|
||||
*
|
||||
* These routines read and write octets on the bus. In case of receive
|
||||
* timeout a FI code is returned. In case of output collision (echo
|
||||
* does not match octet sent), the remainder of the collision frame
|
||||
* (including the trailing FI) is discarded.
|
||||
*/
|
||||
/*
|
||||
* sndoctet(fd, x) - send octet
|
||||
*/
|
||||
static int
|
||||
sndoctet( /* returns octet */
|
||||
int fd, /* file descriptor */
|
||||
int x /* octet */
|
||||
)
|
||||
{
|
||||
u_char y;
|
||||
|
||||
y = (u_char)x;
|
||||
write(fd, &y, 1);
|
||||
return (x);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* rcvoctet(fd) - receive octet
|
||||
*/
|
||||
static int
|
||||
rcvoctet( /* returns octet */
|
||||
int fd /* file descriptor */
|
||||
)
|
||||
{
|
||||
u_char y;
|
||||
|
||||
if (read(fd, &y, 1) < 1)
|
||||
y = FI; /* come here if timeout */
|
||||
if (flags & P_TRACE && y != PAD)
|
||||
printf(" %02x", y);
|
||||
return (y);
|
||||
}
|
||||
|
||||
/* end program */
|
@ -24,7 +24,6 @@ static struct recvbuf *volatile fulllist; /* lifo buffers with data */
|
||||
static struct recvbuf *volatile beginlist; /* fifo buffers with data */
|
||||
|
||||
#if defined(HAVE_IO_COMPLETION_PORT)
|
||||
static HANDLE fulldatabufferevent;
|
||||
static CRITICAL_SECTION RecvCritSection;
|
||||
# define RECV_BLOCK_IO() EnterCriticalSection(&RecvCritSection)
|
||||
# define RECV_UNBLOCK_IO() LeaveCriticalSection(&RecvCritSection)
|
||||
@ -116,22 +115,10 @@ init_recvbuff(int nbufs)
|
||||
|
||||
#if defined(HAVE_IO_COMPLETION_PORT)
|
||||
InitializeCriticalSection(&RecvCritSection);
|
||||
fulldatabufferevent = CreateEvent(NULL, FALSE,FALSE, NULL);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#if defined(HAVE_IO_COMPLETION_PORT)
|
||||
|
||||
/* Return the new full buffer event handle . This handle is
|
||||
* signalled when a recv buffer is placed in the full list.
|
||||
*/
|
||||
HANDLE
|
||||
get_recv_buff_event()
|
||||
{
|
||||
return fulldatabufferevent;
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* getrecvbufs - get receive buffers which have data in them
|
||||
@ -224,11 +211,6 @@ add_full_recv_buffer(
|
||||
fulllist = rb;
|
||||
full_recvbufs++;
|
||||
|
||||
#if defined(HAVE_IO_COMPLETION_PORT)
|
||||
if (!SetEvent(fulldatabufferevent)) {
|
||||
msyslog(LOG_ERR, "Can't set receive buffer event");
|
||||
}
|
||||
#endif
|
||||
RECV_UNBLOCK_IO();
|
||||
}
|
||||
|
||||
|
@ -41,6 +41,16 @@ signal_no_reset(
|
||||
vec.sa_flags = 0;
|
||||
#endif
|
||||
|
||||
#ifdef SA_RESTART
|
||||
/* Added for PPS clocks on Solaris 7 which get EINTR errors */
|
||||
# ifdef SIGPOLL
|
||||
if (sig == SIGPOLL) vec.sa_flags = SA_RESTART;
|
||||
# endif
|
||||
# ifdef SIGIO
|
||||
if (sig == SIGIO) vec.sa_flags = SA_RESTART;
|
||||
# endif
|
||||
#endif
|
||||
|
||||
while (1)
|
||||
{
|
||||
struct sigaction ovec;
|
||||
|
@ -25,12 +25,6 @@
|
||||
#include "ntp_unixtime.h"
|
||||
#include "ntp_stdlib.h"
|
||||
|
||||
#if defined SYS_WINNT
|
||||
#include "ntp_timer.h"
|
||||
extern DWORD units_per_tick;
|
||||
static long last_Adj = 0;
|
||||
#endif
|
||||
|
||||
int systime_10ms_ticks = 0; /* adj sysclock in 10ms increments */
|
||||
|
||||
#define MAXFREQ 500e-6
|
||||
@ -80,6 +74,7 @@ get_systime(
|
||||
(void) GETTIMEOFDAY(&tv, (struct timezone *)0);
|
||||
now->l_i = tv.tv_sec + JAN_1970;
|
||||
|
||||
#if defined RELIANTUNIX_CLOCK || defined SCO5_CLOCK
|
||||
if (systime_10ms_ticks) {
|
||||
/* fake better than 10ms resolution by interpolating
|
||||
accumulated residual (in adj_systime(), see below) */
|
||||
@ -92,9 +87,10 @@ get_systime(
|
||||
}
|
||||
}
|
||||
dtemp *= FRAC;
|
||||
} else {
|
||||
dtemp = tv.tv_usec * FRAC / 1e6;
|
||||
}
|
||||
} else
|
||||
#endif
|
||||
|
||||
dtemp = tv.tv_usec * FRAC / 1e6;
|
||||
|
||||
if (dtemp >= FRAC)
|
||||
now->l_i++;
|
||||
@ -108,6 +104,7 @@ get_systime(
|
||||
* adj_systime - called once every second to make system time adjustments.
|
||||
* Returns 1 if okay, 0 if trouble.
|
||||
*/
|
||||
#if !defined SYS_WINNT
|
||||
int
|
||||
adj_systime(
|
||||
double now
|
||||
@ -116,12 +113,7 @@ adj_systime(
|
||||
double dtemp;
|
||||
struct timeval adjtv;
|
||||
u_char isneg = 0;
|
||||
#if !defined SYS_WINNT && !defined SYS_CYGWIN32
|
||||
struct timeval oadjtv;
|
||||
#else
|
||||
int rc;
|
||||
long dwTimeAdjustment;
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Add the residual from the previous adjustment to the new
|
||||
@ -134,6 +126,7 @@ adj_systime(
|
||||
dtemp = -dtemp;
|
||||
}
|
||||
|
||||
#if defined RELIANTUNIX_CLOCK || defined SCO5_CLOCK
|
||||
if (systime_10ms_ticks) {
|
||||
/* accumulate changes until we have enough to adjust a tick */
|
||||
if (dtemp < 5000e-6) {
|
||||
@ -145,43 +138,18 @@ adj_systime(
|
||||
else sys_residual = dtemp - 10000e-6;
|
||||
dtemp = 10000e-6;
|
||||
}
|
||||
} else {
|
||||
} else
|
||||
#endif
|
||||
if (dtemp > sys_maxfreq)
|
||||
dtemp = sys_maxfreq;
|
||||
}
|
||||
|
||||
#ifdef SYS_WINNT
|
||||
dtemp = dtemp * 1000000.0;
|
||||
#else
|
||||
dtemp = dtemp * 1e6 + .5;
|
||||
#endif
|
||||
|
||||
if (isneg)
|
||||
dtemp = -dtemp;
|
||||
adjtv.tv_sec = 0;
|
||||
adjtv.tv_usec = (int32)dtemp;
|
||||
|
||||
#if defined SYS_WINNT || defined SYS_CYGWIN32
|
||||
/* dtemp is in micro seconds. NT uses 100 ns units,
|
||||
* so a unit change in dwTimeAdjustment corresponds
|
||||
* to slewing 10 ppm.
|
||||
* Calculate the number of 100ns units to add,
|
||||
* and leave the remainder in dtemp */
|
||||
dwTimeAdjustment = dtemp / 10;
|
||||
dtemp += (double) -dwTimeAdjustment * 10.0;
|
||||
dwTimeAdjustment += units_per_tick;
|
||||
|
||||
/* only adjust the clock if adjustment changes */
|
||||
if (last_Adj != dwTimeAdjustment) {
|
||||
last_Adj = dwTimeAdjustment;
|
||||
# ifdef DEBUG
|
||||
if (debug > 1)
|
||||
printf("SetSystemTimeAdjustment( %ld)\n", dwTimeAdjustment);
|
||||
# endif
|
||||
rc = !SetSystemTimeAdjustment(dwTimeAdjustment, FALSE);
|
||||
}
|
||||
else rc = 0;
|
||||
if (rc)
|
||||
#else
|
||||
/*
|
||||
* Here we do the actual adjustment. If for some reason the adjtime()
|
||||
* call fails, like it is not implemented or something like that,
|
||||
@ -190,17 +158,12 @@ adj_systime(
|
||||
*/
|
||||
/* casey - we need a posix type thang here */
|
||||
if (adjtime(&adjtv, &oadjtv) < 0)
|
||||
#endif /* SYS_WINNT */
|
||||
{
|
||||
msyslog(LOG_ERR, "Can't adjust time: %m");
|
||||
return 0;
|
||||
}
|
||||
else {
|
||||
#if !defined (SYS_WINNT) && !defined (SYS_CYGWIN32)
|
||||
sys_residual += oadjtv.tv_usec / 1e6;
|
||||
#else
|
||||
sys_residual = dtemp / 1000000.0;
|
||||
#endif /* SYS_WINNT */
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (debug > 6)
|
||||
@ -208,6 +171,7 @@ adj_systime(
|
||||
#endif
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
|
@ -1,12 +1,4 @@
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
#
|
||||
# this is sick - i want the source to be compile with
|
||||
# two time with different flags resulting different
|
||||
# objects - still need to find a way to communicate
|
||||
# that to automake/autoconf
|
||||
#
|
||||
# Frank Kardel
|
||||
#
|
||||
AUTOMAKE_OPTIONS = ../util/ansi2knr
|
||||
noinst_LIBRARIES = @MAKE_LIBPARSE@ @MAKE_LIBPARSE_KERNEL@
|
||||
EXTRA_LIBRARIES = libparse.a libparse_kernel.a
|
||||
@ -31,19 +23,20 @@ libparse_a_SOURCES = parse.c \
|
||||
info_trimble.c \
|
||||
trim_info.c
|
||||
|
||||
libparse_kernel_a_SOURCES = kparse.c \
|
||||
kparse_conf.c \
|
||||
kclk_meinberg.c \
|
||||
kclk_schmid.c \
|
||||
kclk_rawdcf.c \
|
||||
kclk_trimtsip.c \
|
||||
kclk_dcf7000.c \
|
||||
kclk_trimtaip.c \
|
||||
kclk_rcc8000.c \
|
||||
kclk_hopf6021.c \
|
||||
kclk_computime.c \
|
||||
kclk_wharton.c \
|
||||
kclk_varitext.c
|
||||
libparse_kernel_a_SOURCES =
|
||||
libparse_kernel_a_LIBADD = kparse$U.o \
|
||||
kparse_conf$U.o \
|
||||
kclk_computime$U.o \
|
||||
kclk_dcf7000$U.o \
|
||||
kclk_hopf6021$U.o \
|
||||
kclk_meinberg$U.o \
|
||||
kclk_rawdcf$U.o \
|
||||
kclk_rcc8000$U.o \
|
||||
kclk_schmid$U.o \
|
||||
kclk_trimtaip$U.o \
|
||||
kclk_trimtsip$U.o \
|
||||
kclk_varitext$U.o \
|
||||
kclk_wharton$U.o
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/kernel
|
||||
ETAGS_ARGS = Makefile.am
|
||||
@ -58,24 +51,44 @@ info_trimble.c: $(top_srcdir)/include/trimble.h mkinfo_rcmd.sed mkinfo_scmd.sed
|
||||
sed -n -f mkinfo_scmd.sed $(top_srcdir)/include/trimble.h > info_trimble.c || rm -f info_trimble.c
|
||||
sed -n -f mkinfo_rcmd.sed $(top_srcdir)/include/trimble.h >> info_trimble.c || rm -f info_trimble.c
|
||||
|
||||
#
|
||||
# HACK following below...
|
||||
#
|
||||
kparse_conf.o: parse_conf.c
|
||||
kparse.o: parse.c
|
||||
kclk_rawdcf.o: clk_rawdcf.c
|
||||
kclk_trimtsip.o: clk_trimtsip.c
|
||||
kclk_meinberg.o: clk_meinberg.c
|
||||
kclk_schmid.o: clk_schmid.c
|
||||
kclk_rawdcf.o: clk_rawdcf.c
|
||||
kclk_trimtsip.o: clk_trimtsip.c
|
||||
kclk_dcf7000.o: clk_dcf7000.c
|
||||
kclk_trimtaip.o: clk_trimtaip.c
|
||||
kclk_rcc8000.o: clk_rcc8000.c
|
||||
kclk_hopf6021.o: clk_hopf6021.c
|
||||
kclk_computime.o: clk_computime.c
|
||||
kclk_wharton.o: clk_wharton.c
|
||||
kclk_varitext.o: clk_varitext.c
|
||||
kclk_computime$U.o: clk_computime$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_dcf7000$U.o: clk_dcf7000$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_hopf6021$U.o: clk_hopf6021$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_meinberg$U.o: clk_meinberg$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_rawdcf$U.o: clk_rawdcf$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_rcc8000$U.o: clk_rcc8000$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_schmid$U.o: clk_schmid$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_trimtaip$U.o: clk_trimtaip$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_trimtsip$U.o: clk_trimtsip$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_varitext$U.o: clk_varitext$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_wharton$U.o: clk_wharton$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kparse$U.o: parse$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kparse_conf$U.o: parse_conf$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
parsestreams.loadable_module.o: $(parsestreams_OBJECTS) libparse_kernel.a ../libntp/libntp.a
|
||||
$(LD) -r -o $@ $(parsestreams_OBJECTS) libparse_kernel.a ../libntp/libntp.a
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,16 +96,9 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
#
|
||||
# this is sick - i want the source to be compile with
|
||||
# two time with different flags resulting different
|
||||
# objects - still need to find a way to communicate
|
||||
# that to automake/autoconf
|
||||
#
|
||||
# Frank Kardel
|
||||
#
|
||||
|
||||
|
||||
AUTOMAKE_OPTIONS = ../util/ansi2knr
|
||||
@ -130,19 +126,20 @@ libparse_a_SOURCES = parse.c \
|
||||
trim_info.c
|
||||
|
||||
|
||||
libparse_kernel_a_SOURCES = kparse.c \
|
||||
kparse_conf.c \
|
||||
kclk_meinberg.c \
|
||||
kclk_schmid.c \
|
||||
kclk_rawdcf.c \
|
||||
kclk_trimtsip.c \
|
||||
kclk_dcf7000.c \
|
||||
kclk_trimtaip.c \
|
||||
kclk_rcc8000.c \
|
||||
kclk_hopf6021.c \
|
||||
kclk_computime.c \
|
||||
kclk_wharton.c \
|
||||
kclk_varitext.c
|
||||
libparse_kernel_a_SOURCES =
|
||||
libparse_kernel_a_LIBADD = kparse$U.o \
|
||||
kparse_conf$U.o \
|
||||
kclk_computime$U.o \
|
||||
kclk_dcf7000$U.o \
|
||||
kclk_hopf6021$U.o \
|
||||
kclk_meinberg$U.o \
|
||||
kclk_rawdcf$U.o \
|
||||
kclk_rcc8000$U.o \
|
||||
kclk_schmid$U.o \
|
||||
kclk_trimtaip$U.o \
|
||||
kclk_trimtsip$U.o \
|
||||
kclk_varitext$U.o \
|
||||
kclk_wharton$U.o
|
||||
|
||||
|
||||
INCLUDES = -I$(top_srcdir)/include -I$(top_srcdir)/kernel
|
||||
@ -160,6 +157,7 @@ DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LIBS = @LIBS@
|
||||
ANSI2KNR = ../util/ansi2knr
|
||||
libparse_a_AR = $(AR) cru
|
||||
libparse_a_LIBADD =
|
||||
am_libparse_a_OBJECTS = parse$U.o parse_conf$U.o clk_meinberg$U.o \
|
||||
clk_schmid$U.o clk_rawdcf$U.o clk_trimtsip$U.o clk_dcf7000$U.o \
|
||||
@ -167,11 +165,11 @@ clk_trimtaip$U.o clk_rcc8000$U.o clk_hopf6021$U.o clk_computime$U.o \
|
||||
clk_wharton$U.o clk_varitext$U.o data_mbg$U.o info_trimble$U.o \
|
||||
trim_info$U.o
|
||||
libparse_a_OBJECTS = $(am_libparse_a_OBJECTS)
|
||||
libparse_kernel_a_LIBADD =
|
||||
am_libparse_kernel_a_OBJECTS = kparse$U.o kparse_conf$U.o \
|
||||
kclk_meinberg$U.o kclk_schmid$U.o kclk_rawdcf$U.o kclk_trimtsip$U.o \
|
||||
kclk_dcf7000$U.o kclk_trimtaip$U.o kclk_rcc8000$U.o kclk_hopf6021$U.o \
|
||||
kclk_computime$U.o kclk_wharton$U.o kclk_varitext$U.o
|
||||
libparse_kernel_a_AR = $(AR) cru
|
||||
libparse_kernel_a_DEPENDENCIES = kparse$U.o kparse_conf$U.o \
|
||||
kclk_computime$U.o kclk_dcf7000$U.o kclk_hopf6021$U.o kclk_meinberg$U.o \
|
||||
kclk_rawdcf$U.o kclk_rcc8000$U.o kclk_schmid$U.o kclk_trimtaip$U.o \
|
||||
kclk_trimtsip$U.o kclk_varitext$U.o kclk_wharton$U.o
|
||||
libparse_kernel_a_OBJECTS = $(am_libparse_kernel_a_OBJECTS)
|
||||
AR = ar
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
@ -197,6 +195,17 @@ DIST_COMMON = README Makefile.am Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/clk_computime$U.Po \
|
||||
$(DEPDIR)/clk_dcf7000$U.Po $(DEPDIR)/clk_hopf6021$U.Po \
|
||||
$(DEPDIR)/clk_meinberg$U.Po $(DEPDIR)/clk_rawdcf$U.Po \
|
||||
$(DEPDIR)/clk_rcc8000$U.Po $(DEPDIR)/clk_schmid$U.Po \
|
||||
$(DEPDIR)/clk_trimtaip$U.Po $(DEPDIR)/clk_trimtsip$U.Po \
|
||||
$(DEPDIR)/clk_varitext$U.Po $(DEPDIR)/clk_wharton$U.Po \
|
||||
$(DEPDIR)/data_mbg$U.Po $(DEPDIR)/info_trimble$U.Po \
|
||||
$(DEPDIR)/parse$U.Po $(DEPDIR)/parse_conf$U.Po \
|
||||
$(DEPDIR)/parsesolaris$U.Po $(DEPDIR)/parsestreams$U.Po \
|
||||
$(DEPDIR)/trim_info$U.Po
|
||||
SOURCES = $(libparse_a_SOURCES) $(libparse_kernel_a_SOURCES) parsesolaris.c parsestreams.c
|
||||
OBJECTS = $(am_libparse_a_OBJECTS) $(am_libparse_kernel_a_OBJECTS) parsesolaris$U.o parsestreams$U.o
|
||||
|
||||
@ -204,9 +213,9 @@ all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps libparse/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu libparse/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -220,9 +229,6 @@ distclean-noinstLIBRARIES:
|
||||
|
||||
maintainer-clean-noinstLIBRARIES:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -247,44 +253,15 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
parse$U.o:
|
||||
parse_conf$U.o:
|
||||
clk_meinberg$U.o:
|
||||
clk_schmid$U.o:
|
||||
clk_rawdcf$U.o:
|
||||
clk_trimtsip$U.o:
|
||||
clk_dcf7000$U.o:
|
||||
clk_trimtaip$U.o:
|
||||
clk_rcc8000$U.o:
|
||||
clk_hopf6021$U.o:
|
||||
clk_computime$U.o:
|
||||
clk_wharton$U.o:
|
||||
clk_varitext$U.o:
|
||||
data_mbg$U.o:
|
||||
info_trimble$U.o:
|
||||
trim_info$U.o:
|
||||
|
||||
libparse.a: $(libparse_a_OBJECTS) $(libparse_a_DEPENDENCIES)
|
||||
-rm -f libparse.a
|
||||
$(AR) cru libparse.a $(libparse_a_OBJECTS) $(libparse_a_LIBADD)
|
||||
$(libparse_a_AR) libparse.a $(libparse_a_OBJECTS) $(libparse_a_LIBADD)
|
||||
$(RANLIB) libparse.a
|
||||
kparse$U.o:
|
||||
kparse_conf$U.o:
|
||||
kclk_meinberg$U.o:
|
||||
kclk_schmid$U.o:
|
||||
kclk_rawdcf$U.o:
|
||||
kclk_trimtsip$U.o:
|
||||
kclk_dcf7000$U.o:
|
||||
kclk_trimtaip$U.o:
|
||||
kclk_rcc8000$U.o:
|
||||
kclk_hopf6021$U.o:
|
||||
kclk_computime$U.o:
|
||||
kclk_wharton$U.o:
|
||||
kclk_varitext$U.o:
|
||||
|
||||
libparse_kernel.a: $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_DEPENDENCIES)
|
||||
-rm -f libparse_kernel.a
|
||||
$(AR) cru libparse_kernel.a $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_LIBADD)
|
||||
$(libparse_kernel_a_AR) libparse_kernel.a $(libparse_kernel_a_OBJECTS) $(libparse_kernel_a_LIBADD)
|
||||
$(RANLIB) libparse_kernel.a
|
||||
|
||||
mostlyclean-noinstPROGRAMS:
|
||||
@ -295,12 +272,10 @@ clean-noinstPROGRAMS:
|
||||
distclean-noinstPROGRAMS:
|
||||
|
||||
maintainer-clean-noinstPROGRAMS:
|
||||
parsesolaris$U.o:
|
||||
|
||||
parsesolaris: $(parsesolaris_OBJECTS) $(parsesolaris_DEPENDENCIES)
|
||||
@rm -f parsesolaris
|
||||
$(LINK) $(parsesolaris_LDFLAGS) $(parsesolaris_OBJECTS) $(parsesolaris_LDADD) $(LIBS)
|
||||
parsestreams$U.o:
|
||||
|
||||
parsestreams: $(parsestreams_OBJECTS) $(parsestreams_DEPENDENCIES)
|
||||
@rm -f parsestreams
|
||||
@ -331,32 +306,6 @@ data_mbg_.c: data_mbg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/data_mbg.c; then echo $(srcdir)/data_mbg.c; else echo data_mbg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > data_mbg_.c
|
||||
info_trimble_.c: info_trimble.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/info_trimble.c; then echo $(srcdir)/info_trimble.c; else echo info_trimble.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > info_trimble_.c
|
||||
kclk_computime_.c: kclk_computime.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_computime.c; then echo $(srcdir)/kclk_computime.c; else echo kclk_computime.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_computime_.c
|
||||
kclk_dcf7000_.c: kclk_dcf7000.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_dcf7000.c; then echo $(srcdir)/kclk_dcf7000.c; else echo kclk_dcf7000.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_dcf7000_.c
|
||||
kclk_hopf6021_.c: kclk_hopf6021.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_hopf6021.c; then echo $(srcdir)/kclk_hopf6021.c; else echo kclk_hopf6021.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_hopf6021_.c
|
||||
kclk_meinberg_.c: kclk_meinberg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_meinberg.c; then echo $(srcdir)/kclk_meinberg.c; else echo kclk_meinberg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_meinberg_.c
|
||||
kclk_rawdcf_.c: kclk_rawdcf.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_rawdcf.c; then echo $(srcdir)/kclk_rawdcf.c; else echo kclk_rawdcf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_rawdcf_.c
|
||||
kclk_rcc8000_.c: kclk_rcc8000.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_rcc8000.c; then echo $(srcdir)/kclk_rcc8000.c; else echo kclk_rcc8000.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_rcc8000_.c
|
||||
kclk_schmid_.c: kclk_schmid.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_schmid.c; then echo $(srcdir)/kclk_schmid.c; else echo kclk_schmid.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_schmid_.c
|
||||
kclk_trimtaip_.c: kclk_trimtaip.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_trimtaip.c; then echo $(srcdir)/kclk_trimtaip.c; else echo kclk_trimtaip.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_trimtaip_.c
|
||||
kclk_trimtsip_.c: kclk_trimtsip.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_trimtsip.c; then echo $(srcdir)/kclk_trimtsip.c; else echo kclk_trimtsip.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_trimtsip_.c
|
||||
kclk_varitext_.c: kclk_varitext.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_varitext.c; then echo $(srcdir)/kclk_varitext.c; else echo kclk_varitext.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_varitext_.c
|
||||
kclk_wharton_.c: kclk_wharton.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kclk_wharton.c; then echo $(srcdir)/kclk_wharton.c; else echo kclk_wharton.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kclk_wharton_.c
|
||||
kparse_.c: kparse.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kparse.c; then echo $(srcdir)/kparse.c; else echo kparse.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kparse_.c
|
||||
kparse_conf_.c: kparse_conf.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/kparse_conf.c; then echo $(srcdir)/kparse_conf.c; else echo kparse_conf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > kparse_conf_.c
|
||||
parse_.c: parse.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/parse.c; then echo $(srcdir)/parse.c; else echo parse.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > parse_.c
|
||||
parse_conf_.c: parse_conf.c $(ANSI2KNR)
|
||||
@ -370,31 +319,32 @@ trim_info_.c: trim_info.c $(ANSI2KNR)
|
||||
clk_computime_.o clk_dcf7000_.o clk_hopf6021_.o clk_meinberg_.o \
|
||||
clk_rawdcf_.o clk_rcc8000_.o clk_schmid_.o clk_trimtaip_.o \
|
||||
clk_trimtsip_.o clk_varitext_.o clk_wharton_.o data_mbg_.o \
|
||||
info_trimble_.o kclk_computime_.o kclk_dcf7000_.o kclk_hopf6021_.o \
|
||||
kclk_meinberg_.o kclk_rawdcf_.o kclk_rcc8000_.o kclk_schmid_.o \
|
||||
kclk_trimtaip_.o kclk_trimtsip_.o kclk_varitext_.o kclk_wharton_.o \
|
||||
kparse_.o kparse_conf_.o parse_.o parse_conf_.o parsesolaris_.o \
|
||||
parsestreams_.o trim_info_.o : $(ANSI2KNR)
|
||||
info_trimble_.o parse_.o parse_conf_.o parsesolaris_.o parsestreams_.o \
|
||||
trim_info_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -411,67 +361,49 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
clk_computime.o clk_computime.lo: clk_computime.c ../config.h
|
||||
clk_dcf7000.o clk_dcf7000.lo: clk_dcf7000.c ../config.h
|
||||
clk_hopf6021.o clk_hopf6021.lo: clk_hopf6021.c ../config.h
|
||||
clk_meinberg.o clk_meinberg.lo: clk_meinberg.c ../config.h
|
||||
clk_rawdcf.o clk_rawdcf.lo: clk_rawdcf.c ../config.h
|
||||
clk_rcc8000.o clk_rcc8000.lo: clk_rcc8000.c ../config.h
|
||||
clk_schmid.o clk_schmid.lo: clk_schmid.c ../config.h
|
||||
clk_trimtaip.o clk_trimtaip.lo: clk_trimtaip.c ../config.h
|
||||
clk_trimtsip.o clk_trimtsip.lo: clk_trimtsip.c ../config.h
|
||||
clk_varitext.o clk_varitext.lo: clk_varitext.c ../config.h
|
||||
clk_wharton.o clk_wharton.lo: clk_wharton.c ../config.h
|
||||
data_mbg.o data_mbg.lo: data_mbg.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_fp.h \
|
||||
../include/mbg_gps166.h ../include/binio.h \
|
||||
../include/ieee754io.h
|
||||
info_trimble.o info_trimble.lo: info_trimble.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/ntpd.h ../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp.h ../include/ntp_malloc.h \
|
||||
../include/ntp_refclock.h ../include/recvbuff.h \
|
||||
../include/trimble.h
|
||||
kclk_computime.o kclk_computime.lo: kclk_computime.c clk_computime.c \
|
||||
../config.h
|
||||
kclk_dcf7000.o kclk_dcf7000.lo: kclk_dcf7000.c clk_dcf7000.c ../config.h
|
||||
kclk_hopf6021.o kclk_hopf6021.lo: kclk_hopf6021.c clk_hopf6021.c \
|
||||
../config.h
|
||||
kclk_meinberg.o kclk_meinberg.lo: kclk_meinberg.c clk_meinberg.c \
|
||||
../config.h
|
||||
kclk_rawdcf.o kclk_rawdcf.lo: kclk_rawdcf.c clk_rawdcf.c ../config.h
|
||||
kclk_rcc8000.o kclk_rcc8000.lo: kclk_rcc8000.c clk_rcc8000.c ../config.h
|
||||
kclk_schmid.o kclk_schmid.lo: kclk_schmid.c clk_schmid.c ../config.h
|
||||
kclk_trimtaip.o kclk_trimtaip.lo: kclk_trimtaip.c clk_trimtaip.c \
|
||||
../config.h
|
||||
kclk_trimtsip.o kclk_trimtsip.lo: kclk_trimtsip.c clk_trimtsip.c \
|
||||
../config.h
|
||||
kclk_varitext.o kclk_varitext.lo: kclk_varitext.c clk_varitext.c \
|
||||
../config.h
|
||||
kclk_wharton.o kclk_wharton.lo: kclk_wharton.c clk_wharton.c ../config.h
|
||||
kparse.o kparse.lo: kparse.c parse.c ../config.h
|
||||
kparse_conf.o kparse_conf.lo: kparse_conf.c parse_conf.c ../config.h
|
||||
parse.o parse.lo: parse.c ../config.h
|
||||
parse_conf.o parse_conf.lo: parse_conf.c ../config.h
|
||||
parsesolaris.o parsesolaris.lo: parsesolaris.c sys/systm.h \
|
||||
../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/parse.h ../include/parse_conf.h \
|
||||
../kernel/sys/parsestreams.h ../kernel/sys/ppsclock.h \
|
||||
../include/ntp_string.h
|
||||
|
||||
trim_info.o trim_info.lo: trim_info.c ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../config.h ../include/ntp_proto.h \
|
||||
../include/trimble.h
|
||||
@AMDEP@include $(DEPDIR)/clk_computime$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_dcf7000$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_hopf6021$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_meinberg$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_rawdcf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_rcc8000$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_schmid$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_trimtaip$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_trimtsip$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_varitext$U.Po
|
||||
@AMDEP@include $(DEPDIR)/clk_wharton$U.Po
|
||||
@AMDEP@include $(DEPDIR)/data_mbg$U.Po
|
||||
@AMDEP@include $(DEPDIR)/info_trimble$U.Po
|
||||
@AMDEP@include $(DEPDIR)/parse$U.Po
|
||||
@AMDEP@include $(DEPDIR)/parse_conf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/parsesolaris$U.Po
|
||||
@AMDEP@include $(DEPDIR)/parsestreams$U.Po
|
||||
@AMDEP@include $(DEPDIR)/trim_info$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
@ -509,28 +441,30 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-kr mostlyclean-noinstPROGRAMS \
|
||||
mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-tags mostlyclean-depend mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-noinstLIBRARIES clean-compile clean-kr \
|
||||
clean-noinstPROGRAMS clean-tags clean-generic \
|
||||
mostlyclean-am
|
||||
clean-noinstPROGRAMS clean-tags clean-depend \
|
||||
clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-noinstLIBRARIES distclean-compile distclean-kr \
|
||||
distclean-noinstPROGRAMS distclean-tags \
|
||||
distclean-generic clean-am
|
||||
distclean-depend distclean-generic clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
|
||||
maintainer-clean-compile maintainer-clean-kr \
|
||||
maintainer-clean-noinstPROGRAMS maintainer-clean-tags \
|
||||
maintainer-clean-generic distclean-am
|
||||
maintainer-clean-depend maintainer-clean-generic \
|
||||
distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -543,12 +477,13 @@ maintainer-clean-compile mostlyclean-kr distclean-kr clean-kr \
|
||||
maintainer-clean-kr mostlyclean-noinstPROGRAMS distclean-noinstPROGRAMS \
|
||||
clean-noinstPROGRAMS maintainer-clean-noinstPROGRAMS tags \
|
||||
mostlyclean-tags distclean-tags clean-tags maintainer-clean-tags \
|
||||
distdir info-am info dvi-am dvi check check-am installcheck-am \
|
||||
installcheck install-exec-am install-exec install-data-am install-data \
|
||||
install-am install uninstall-am uninstall all-redirect all-am all \
|
||||
install-strip installdirs mostlyclean-generic distclean-generic \
|
||||
clean-generic maintainer-clean-generic clean mostlyclean distclean \
|
||||
maintainer-clean
|
||||
distdir mostlyclean-depend distclean-depend clean-depend \
|
||||
maintainer-clean-depend info-am info dvi-am dvi check check-am \
|
||||
installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
#
|
||||
@ -559,24 +494,44 @@ info_trimble.c: $(top_srcdir)/include/trimble.h mkinfo_rcmd.sed mkinfo_scmd.sed
|
||||
sed -n -f mkinfo_scmd.sed $(top_srcdir)/include/trimble.h > info_trimble.c || rm -f info_trimble.c
|
||||
sed -n -f mkinfo_rcmd.sed $(top_srcdir)/include/trimble.h >> info_trimble.c || rm -f info_trimble.c
|
||||
|
||||
#
|
||||
# HACK following below...
|
||||
#
|
||||
kparse_conf.o: parse_conf.c
|
||||
kparse.o: parse.c
|
||||
kclk_rawdcf.o: clk_rawdcf.c
|
||||
kclk_trimtsip.o: clk_trimtsip.c
|
||||
kclk_meinberg.o: clk_meinberg.c
|
||||
kclk_schmid.o: clk_schmid.c
|
||||
kclk_rawdcf.o: clk_rawdcf.c
|
||||
kclk_trimtsip.o: clk_trimtsip.c
|
||||
kclk_dcf7000.o: clk_dcf7000.c
|
||||
kclk_trimtaip.o: clk_trimtaip.c
|
||||
kclk_rcc8000.o: clk_rcc8000.c
|
||||
kclk_hopf6021.o: clk_hopf6021.c
|
||||
kclk_computime.o: clk_computime.c
|
||||
kclk_wharton.o: clk_wharton.c
|
||||
kclk_varitext.o: clk_varitext.c
|
||||
kclk_computime$U.o: clk_computime$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_dcf7000$U.o: clk_dcf7000$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_hopf6021$U.o: clk_hopf6021$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_meinberg$U.o: clk_meinberg$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_rawdcf$U.o: clk_rawdcf$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_rcc8000$U.o: clk_rcc8000$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_schmid$U.o: clk_schmid$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_trimtaip$U.o: clk_trimtaip$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_trimtsip$U.o: clk_trimtsip$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_varitext$U.o: clk_varitext$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kclk_wharton$U.o: clk_wharton$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kparse$U.o: parse$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
kparse_conf$U.o: parse_conf$U.c
|
||||
$(COMPILE) -DPARSESTREAM -c $< -o $@
|
||||
|
||||
parsestreams.loadable_module.o: $(parsestreams_OBJECTS) libparse_kernel.a ../libntp/libntp.a
|
||||
$(LD) -r -o $@ $(parsestreams_OBJECTS) libparse_kernel.a ../libntp/libntp.a
|
||||
|
@ -4,9 +4,9 @@
|
||||
|
||||
#if defined(REFCLOCK) && defined(CLOCK_PARSE) && defined(CLOCK_COMPUTIME)
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_computime.c,v 4.5 1998/06/14 21:09:34 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_computime.c,v 4.6 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_computime.c,v 4.5 1998/06/14 21:09:34 kardel RELEASE_19990228_A
|
||||
* clk_computime.c,v 4.6 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Supports Diem's Computime Radio Clock
|
||||
*
|
||||
@ -171,6 +171,9 @@ int clk_computime_bs;
|
||||
|
||||
/*
|
||||
* clk_computime.c,v
|
||||
* Revision 4.6 1999/11/28 09:13:49 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.5 1998/06/14 21:09:34 kardel
|
||||
* Sun acc cleanup
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_dcf7000.c,v 4.5 1998/06/14 21:09:34 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_dcf7000.c,v 4.6 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_dcf7000.c,v 4.5 1998/06/14 21:09:34 kardel RELEASE_19990228_A
|
||||
* clk_dcf7000.c,v 4.6 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* ELV DCF7000 module
|
||||
*
|
||||
@ -165,6 +165,9 @@ int clk_dcf7000_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_dcf7000.c,v
|
||||
* Revision 4.6 1999/11/28 09:13:49 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.5 1998/06/14 21:09:34 kardel
|
||||
* Sun acc cleanup
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_hopf6021.c,v 4.6 1998/11/15 20:27:57 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_hopf6021.c,v 4.7 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_hopf6021.c,v 4.6 1998/11/15 20:27:57 kardel RELEASE_19990228_A
|
||||
* clk_hopf6021.c,v 4.7 1999/11/28 09:13:49 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Radiocode Clocks HOPF Funkuhr 6021 mit serieller Schnittstelle
|
||||
* base code version from 24th Nov 1995 - history at end
|
||||
@ -254,6 +254,9 @@ int clk_hopf6021_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_hopf6021.c,v
|
||||
* Revision 4.7 1999/11/28 09:13:49 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.6 1998/11/15 20:27:57 kardel
|
||||
* Release 4.0.73e13 reconcilation
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_meinberg.c,v 4.7 1999/02/21 11:09:14 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_meinberg.c,v 4.8 1999/11/28 09:13:50 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_meinberg.c,v 4.7 1999/02/21 11:09:14 kardel RELEASE_19990228_A
|
||||
* clk_meinberg.c,v 4.8 1999/11/28 09:13:50 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Meinberg clock support
|
||||
*
|
||||
@ -718,6 +718,9 @@ int clk_meinberg_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_meinberg.c,v
|
||||
* Revision 4.8 1999/11/28 09:13:50 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.7 1999/02/21 11:09:14 kardel
|
||||
* cleanup
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_rawdcf.c,v 4.6 1998/06/14 21:09:37 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_rawdcf.c,v 4.9 1999/12/06 13:42:23 kardel Exp
|
||||
*
|
||||
* clk_rawdcf.c,v 4.6 1998/06/14 21:09:37 kardel RELEASE_19990228_A
|
||||
* clk_rawdcf.c,v 4.9 1999/12/06 13:42:23 kardel Exp
|
||||
*
|
||||
* Raw DCF77 pulse clock support
|
||||
*
|
||||
@ -88,6 +88,10 @@ static u_long pps_rawdcf P((parse_t *, int, timestamp_t *));
|
||||
static u_long cvt_rawdcf P((unsigned char *, int, struct format *, clocktime_t *, void *));
|
||||
static u_long inp_rawdcf P((parse_t *, unsigned int, timestamp_t *));
|
||||
|
||||
typedef struct last_tcode {
|
||||
time_t tcode; /* last converted time code */
|
||||
} last_tcode_t;
|
||||
|
||||
clockformat_t clock_rawdcf =
|
||||
{
|
||||
inp_rawdcf, /* DCF77 input handling */
|
||||
@ -97,7 +101,7 @@ clockformat_t clock_rawdcf =
|
||||
"RAW DCF77 Timecode", /* direct decoding / time synthesis */
|
||||
|
||||
61, /* bit buffer */
|
||||
0 /* no private data (currently in input buffer) */
|
||||
sizeof(last_tcode_t)
|
||||
};
|
||||
|
||||
static struct dcfparam
|
||||
@ -316,11 +320,12 @@ cvt_rawdcf(
|
||||
void *local
|
||||
)
|
||||
{
|
||||
last_tcode_t *t = (last_tcode_t *)local;
|
||||
register unsigned char *s = (unsigned char *)buffer;
|
||||
register unsigned char *e = s + size;
|
||||
register unsigned char *b = dcfparameter.onebits;
|
||||
register unsigned char *c = dcfparameter.zerobits;
|
||||
register unsigned rtc = CVT_NONE;
|
||||
u_long rtc = CVT_NONE;
|
||||
register unsigned int i, lowmax, highmax, cutoff, span;
|
||||
#define BITS 9
|
||||
unsigned char histbuf[BITS];
|
||||
@ -458,7 +463,30 @@ cvt_rawdcf(
|
||||
c++;
|
||||
}
|
||||
|
||||
return (rtc == CVT_NONE) ? convert_rawdcf(buffer, size, &dcfparameter, clock_time) : rtc;
|
||||
if (rtc == CVT_NONE)
|
||||
{
|
||||
rtc = convert_rawdcf(buffer, size, &dcfparameter, clock_time);
|
||||
if (rtc == CVT_OK)
|
||||
{
|
||||
time_t newtime;
|
||||
|
||||
newtime = parse_to_unixtime(clock_time, &rtc);
|
||||
if ((rtc == CVT_OK) && t)
|
||||
{
|
||||
if ((newtime - t->tcode) == 60) /* guard against multi bit errors */
|
||||
{
|
||||
clock_time->utctime = newtime;
|
||||
}
|
||||
else
|
||||
{
|
||||
rtc = CVT_FAIL|CVT_BADTIME;
|
||||
}
|
||||
t->tcode = newtime;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return rtc;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -555,6 +583,15 @@ int clk_rawdcf_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_rawdcf.c,v
|
||||
* Revision 4.9 1999/12/06 13:42:23 kardel
|
||||
* transfer correctly converted time codes always into tcode
|
||||
*
|
||||
* Revision 4.8 1999/11/28 09:13:50 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.7 1999/04/01 20:07:20 kardel
|
||||
* added checking for minutie increment of timestamps in clk_rawdcf.c
|
||||
*
|
||||
* Revision 4.6 1998/06/14 21:09:37 kardel
|
||||
* Sun acc cleanup
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_rcc8000.c,v 4.5 1998/06/14 21:09:38 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_rcc8000.c,v 4.6 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_rcc8000.c,v 4.5 1998/06/14 21:09:38 kardel RELEASE_19990228_A
|
||||
* clk_rcc8000.c,v 4.6 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Radiocode Clocks Ltd RCC 8000 Intelligent Off-Air Master Clock support
|
||||
*
|
||||
@ -172,6 +172,9 @@ int clk_rcc8000_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_rcc8000.c,v
|
||||
* Revision 4.6 1999/11/28 09:13:51 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.5 1998/06/14 21:09:38 kardel
|
||||
* Sun acc cleanup
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_schmid.c,v 4.4 1998/06/13 12:06:03 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_schmid.c,v 4.5 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_schmid.c,v 4.4 1998/06/13 12:06:03 kardel RELEASE_19990228_A
|
||||
* clk_schmid.c,v 4.5 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Schmid clock support
|
||||
*
|
||||
@ -211,6 +211,9 @@ int clk_schmid_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_schmid.c,v
|
||||
* Revision 4.5 1999/11/28 09:13:51 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.4 1998/06/13 12:06:03 kardel
|
||||
* fix SYSV clock name clash
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_trimtaip.c,v 4.6 1998/08/16 18:46:27 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_trimtaip.c,v 4.7 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_trimtaip.c,v 4.6 1998/08/16 18:46:27 kardel RELEASE_19990228_A
|
||||
* clk_trimtaip.c,v 4.7 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Trimble SV6 clock support - several collected codepieces
|
||||
*/
|
||||
@ -161,6 +161,9 @@ int clk_trimtaip_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_trimtaip.c,v
|
||||
* Revision 4.7 1999/11/28 09:13:51 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.6 1998/08/16 18:46:27 kardel
|
||||
* (clock_trimtaip =): changed format name
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/clk_trimtsip.c,v 4.12 1999/02/28 13:00:08 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/clk_trimtsip.c,v 4.13 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* clk_trimtsip.c,v 4.12 1999/02/28 13:00:08 kardel RELEASE_19990228_A
|
||||
* clk_trimtsip.c,v 4.13 1999/11/28 09:13:51 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Trimble TSIP support - CURRENTLY VERY MUCH UNDER CONSTRUCTION
|
||||
*/
|
||||
@ -372,6 +372,9 @@ int clk_trimtsip_bs;
|
||||
* History:
|
||||
*
|
||||
* clk_trimtsip.c,v
|
||||
* Revision 4.13 1999/11/28 09:13:51 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.12 1999/02/28 13:00:08 kardel
|
||||
* *** empty log message ***
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/data_mbg.c,v 4.3 1999/02/21 12:17:42 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/data_mbg.c,v 4.3 1999/02/21 12:17:42 kardel RELEASE_19991128_A
|
||||
*
|
||||
* $Created: Sun Jul 20 12:08:14 1997 $
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/parse.c,v 4.13 1999/02/28 11:50:20 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/parse.c,v 4.14 1999/11/28 09:13:52 kardel RELEASE_19991128_A
|
||||
*
|
||||
* parse.c,v 4.13 1999/02/28 11:50:20 kardel RELEASE_19990228_A
|
||||
* parse.c,v 4.14 1999/11/28 09:13:52 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Parser module for reference clock
|
||||
*
|
||||
@ -27,7 +27,7 @@
|
||||
#if defined(REFCLOCK) && defined(CLOCK_PARSE)
|
||||
|
||||
#if !(defined(lint) || defined(__GNUC__))
|
||||
static char rcsid[] = "parse.c,v 4.13 1999/02/28 11:50:20 kardel RELEASE_19990228_A";
|
||||
static char rcsid[] = "parse.c,v 4.14 1999/11/28 09:13:52 kardel RELEASE_19991128_A";
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
@ -869,6 +869,9 @@ int parse_bs;
|
||||
* History:
|
||||
*
|
||||
* parse.c,v
|
||||
* Revision 4.14 1999/11/28 09:13:52 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.13 1999/02/28 11:50:20 kardel
|
||||
* (timepacket): removed unecessary code
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/parse_conf.c,v 4.4 1999/02/28 15:27:25 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/parse_conf.c,v 4.5 1999/11/28 09:13:53 kardel RELEASE_19991128_A
|
||||
*
|
||||
* parse_conf.c,v 4.4 1999/02/28 15:27:25 kardel RELEASE_19990228_A
|
||||
* parse_conf.c,v 4.5 1999/11/28 09:13:53 kardel RELEASE_19991128_A
|
||||
*
|
||||
* Parser configuration module for reference clocks
|
||||
*
|
||||
@ -131,6 +131,9 @@ int parse_conf_bs;
|
||||
* History:
|
||||
*
|
||||
* parse_conf.c,v
|
||||
* Revision 4.5 1999/11/28 09:13:53 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.4 1999/02/28 15:27:25 kardel
|
||||
* wharton clock integration
|
||||
*
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19991128_A
|
||||
*
|
||||
* parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19990228_A
|
||||
* parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19991128_A
|
||||
*
|
||||
* STREAMS module for reference clocks
|
||||
*
|
||||
@ -19,7 +19,7 @@
|
||||
#define _KERNEL /* it is a _KERNEL module */
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19990228_A";
|
||||
static char rcsid[] = "parsesolaris.c,v 4.6 1998/11/15 21:56:08 kardel RELEASE_19991128_A";
|
||||
#endif
|
||||
|
||||
#include <sys/types.h>
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/libparse/parsestreams.c,v 4.6 1998/12/20 23:45:31 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/libparse/parsestreams.c,v 4.7 1999/11/28 09:13:53 kardel RELEASE_19991128_A
|
||||
*
|
||||
* parsestreams.c,v 4.6 1998/12/20 23:45:31 kardel RELEASE_19990228_A
|
||||
* parsestreams.c,v 4.7 1999/11/28 09:13:53 kardel RELEASE_19991128_A
|
||||
*
|
||||
* STREAMS module for reference clocks
|
||||
* (SunOS4.x)
|
||||
@ -23,7 +23,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef lint
|
||||
static char rcsid[] = "parsestreams.c,v 4.6 1998/12/20 23:45:31 kardel RELEASE_19990228_A";
|
||||
static char rcsid[] = "parsestreams.c,v 4.7 1999/11/28 09:13:53 kardel RELEASE_19991128_A";
|
||||
#endif
|
||||
|
||||
#ifndef KERNEL
|
||||
@ -239,7 +239,7 @@ xxxinit(
|
||||
}
|
||||
else
|
||||
{
|
||||
static char revision[] = "4.6";
|
||||
static char revision[] = "4.7";
|
||||
char *s, *S, *t;
|
||||
|
||||
s = rcsid; /* NOOP - keep compilers happy */
|
||||
@ -522,7 +522,7 @@ parseopen(
|
||||
#ifdef VDDRV
|
||||
printf("%s: Copyright (C) 1991-1998, Frank Kardel\n", parsesync_vd.Drv_name);
|
||||
#else
|
||||
printf("%s: Copyright (C) 1991-1998, Frank Kardel\n", "parsestreams.c,v 4.6 1998/12/20 23:45:31 kardel RELEASE_19990228_A");
|
||||
printf("%s: Copyright (C) 1991-1998, Frank Kardel\n", "parsestreams.c,v 4.7 1999/11/28 09:13:53 kardel RELEASE_19991128_A");
|
||||
#endif
|
||||
notice = 1;
|
||||
}
|
||||
@ -1307,6 +1307,9 @@ zs_xsisr(
|
||||
* History:
|
||||
*
|
||||
* parsestreams.c,v
|
||||
* Revision 4.7 1999/11/28 09:13:53 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.6 1998/12/20 23:45:31 kardel
|
||||
* fix types and warnings
|
||||
*
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr
|
||||
@ -143,6 +147,7 @@ LIBRARIES = $(noinst_LIBRARIES)
|
||||
DEFS = @DEFS@ -I. -I$(srcdir) -I..
|
||||
CPPFLAGS = @CPPFLAGS@
|
||||
LIBS = @LIBS@
|
||||
librsaref_a_AR = $(AR) cru
|
||||
librsaref_a_LIBADD =
|
||||
am_librsaref_a_OBJECTS = desc.o digit.o md2c.o md5c.o nn.o prime.o \
|
||||
r_dh.o r_encode.o r_enhanc.o r_keygen.o r_random.o r_stdlib.o rsa.o
|
||||
@ -158,16 +163,22 @@ DIST_COMMON = Makefile.am Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/desc.Po $(DEPDIR)/digit.Po \
|
||||
$(DEPDIR)/md2c.Po $(DEPDIR)/md5c.Po $(DEPDIR)/nn.Po $(DEPDIR)/prime.Po \
|
||||
$(DEPDIR)/r_dh.Po $(DEPDIR)/r_encode.Po $(DEPDIR)/r_enhanc.Po \
|
||||
$(DEPDIR)/r_keygen.Po $(DEPDIR)/r_random.Po $(DEPDIR)/r_stdlib.Po \
|
||||
$(DEPDIR)/rsa.Po
|
||||
SOURCES = $(librsaref_a_SOURCES)
|
||||
OBJECTS = $(am_librsaref_a_OBJECTS)
|
||||
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
.SUFFIXES: .c .h .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps librsaref/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu librsaref/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -181,9 +192,6 @@ distclean-noinstLIBRARIES:
|
||||
|
||||
maintainer-clean-noinstLIBRARIES:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -193,44 +201,35 @@ distclean-compile:
|
||||
-rm -f *.tab.c
|
||||
|
||||
maintainer-clean-compile:
|
||||
desc.o:
|
||||
digit.o:
|
||||
md2c.o:
|
||||
md5c.o:
|
||||
nn.o:
|
||||
prime.o:
|
||||
r_dh.o:
|
||||
r_encode.o:
|
||||
r_enhanc.o:
|
||||
r_keygen.o:
|
||||
r_random.o:
|
||||
r_stdlib.o:
|
||||
rsa.o:
|
||||
|
||||
librsaref.a: $(librsaref_a_OBJECTS) $(librsaref_a_DEPENDENCIES)
|
||||
-rm -f librsaref.a
|
||||
$(AR) cru librsaref.a $(librsaref_a_OBJECTS) $(librsaref_a_LIBADD)
|
||||
$(librsaref_a_AR) librsaref.a $(librsaref_a_OBJECTS) $(librsaref_a_LIBADD)
|
||||
$(RANLIB) librsaref.a
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -247,7 +246,7 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
@ -255,6 +254,37 @@ distdir: $(DISTFILES)
|
||||
fi; \
|
||||
done
|
||||
|
||||
@AMDEP@include $(DEPDIR)/desc.Po
|
||||
@AMDEP@include $(DEPDIR)/digit.Po
|
||||
@AMDEP@include $(DEPDIR)/md2c.Po
|
||||
@AMDEP@include $(DEPDIR)/md5c.Po
|
||||
@AMDEP@include $(DEPDIR)/nn.Po
|
||||
@AMDEP@include $(DEPDIR)/prime.Po
|
||||
@AMDEP@include $(DEPDIR)/r_dh.Po
|
||||
@AMDEP@include $(DEPDIR)/r_encode.Po
|
||||
@AMDEP@include $(DEPDIR)/r_enhanc.Po
|
||||
@AMDEP@include $(DEPDIR)/r_keygen.Po
|
||||
@AMDEP@include $(DEPDIR)/r_random.Po
|
||||
@AMDEP@include $(DEPDIR)/r_stdlib.Po
|
||||
@AMDEP@include $(DEPDIR)/rsa.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
dvi-am:
|
||||
@ -291,25 +321,28 @@ distclean-generic:
|
||||
-rm -f config.cache config.log stamp-h stamp-h[0-9]*
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
|
||||
mostlyclean-am: mostlyclean-noinstLIBRARIES mostlyclean-compile \
|
||||
mostlyclean-tags mostlyclean-generic
|
||||
mostlyclean-tags mostlyclean-depend mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-generic \
|
||||
mostlyclean-am
|
||||
clean-am: clean-noinstLIBRARIES clean-compile clean-tags clean-depend \
|
||||
clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-noinstLIBRARIES distclean-compile \
|
||||
distclean-tags distclean-generic clean-am
|
||||
distclean-tags distclean-depend distclean-generic \
|
||||
clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-noinstLIBRARIES \
|
||||
maintainer-clean-compile maintainer-clean-tags \
|
||||
maintainer-clean-generic distclean-am
|
||||
maintainer-clean-depend maintainer-clean-generic \
|
||||
distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -319,12 +352,13 @@ maintainer-clean: maintainer-clean-am
|
||||
clean-noinstLIBRARIES maintainer-clean-noinstLIBRARIES \
|
||||
mostlyclean-compile distclean-compile clean-compile \
|
||||
maintainer-clean-compile tags mostlyclean-tags distclean-tags \
|
||||
clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi check \
|
||||
check-am installcheck-am installcheck install-exec-am install-exec \
|
||||
install-data-am install-data install-am install uninstall-am uninstall \
|
||||
all-redirect all-am all install-strip installdirs mostlyclean-generic \
|
||||
distclean-generic clean-generic maintainer-clean-generic clean \
|
||||
mostlyclean distclean maintainer-clean
|
||||
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
|
||||
distclean-depend clean-depend maintainer-clean-depend info-am info \
|
||||
dvi-am dvi check check-am installcheck-am installcheck install-exec-am \
|
||||
install-exec install-data-am install-data install-am install \
|
||||
uninstall-am uninstall all-redirect all-am all install-strip \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
||||
#EXTRA_DIST =
|
||||
|
@ -1,7 +1,7 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
# Copyright (C) 1996, 1997 Free Software Foundation, Inc.
|
||||
# Franc,ois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
# Copyright (C) 1996, 1997, 1999 Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
@ -23,6 +23,19 @@ if test $# -eq 0; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
@ -35,19 +48,23 @@ error status if there is no known handling for PROGRAM.
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison touch file \`y.tab.c'
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
yacc touch file \`y.tab.c'"
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]"
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing - GNU libit 0.0"
|
||||
echo "missing 0.2 - GNU automake"
|
||||
;;
|
||||
|
||||
-*)
|
||||
@ -80,7 +97,17 @@ WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`acconfig.h' or \`configure.in'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
touch config.h.in
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' configure.in`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake)
|
||||
@ -89,9 +116,9 @@ WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`configure.in'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print \
|
||||
| sed 's/^\(.*\).am$/touch \1.in/' \
|
||||
| sh
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
@ -100,7 +127,51 @@ WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
touch y.tab.c
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is missing on your system. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
@ -119,6 +190,45 @@ WARNING: \`$1' is missing on your system. You should only need it if
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar ${1+"$@"} && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar ${1+"$@"} && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" ${1+"$@"} && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" ${1+"$@"} && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and you do not seem to have it handy on your
|
||||
|
@ -1,26 +1,34 @@
|
||||
#!/bin/sh
|
||||
#! /bin/sh
|
||||
# mkinstalldirs --- make directory hierarchy
|
||||
# Author: Noah Friedman <friedman@prep.ai.mit.edu>
|
||||
# Created: 1993-05-16
|
||||
# Last modified: 1994-03-25
|
||||
# Public domain
|
||||
|
||||
# $Id: mkinstalldirs,v 1.2 1999/12/20 04:14:36 stenn Exp $
|
||||
|
||||
errstatus=0
|
||||
|
||||
for file in ${1+"$@"} ; do
|
||||
for file
|
||||
do
|
||||
set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
|
||||
shift
|
||||
|
||||
pathcomp=
|
||||
for d in ${1+"$@"} ; do
|
||||
for d
|
||||
do
|
||||
pathcomp="$pathcomp$d"
|
||||
case "$pathcomp" in
|
||||
-* ) pathcomp=./$pathcomp ;;
|
||||
esac
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
echo "mkdir $pathcomp" 1>&2
|
||||
mkdir "$pathcomp" || errstatus=$?
|
||||
echo "mkdir $pathcomp"
|
||||
|
||||
mkdir "$pathcomp" || lasterr=$?
|
||||
|
||||
if test ! -d "$pathcomp"; then
|
||||
errstatus=$lasterr
|
||||
fi
|
||||
fi
|
||||
|
||||
pathcomp="$pathcomp/"
|
||||
|
@ -15,22 +15,19 @@ EXTRA_PROGRAMS = check_y2k
|
||||
check-local: @MAKE_CHECK_Y2K@
|
||||
[ -z "@MAKE_CHECK_Y2K@" ] || ./@MAKE_CHECK_Y2K@
|
||||
|
||||
ntpd_SOURCES = map_vme.c ntp_config.c ntp_control.c ntp_io.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_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_mx4200.c \
|
||||
refclock_parse.c refclock_as2201.c refclock_bancomm.c \
|
||||
refclock_tpro.c refclock_leitch.c refclock_irig.c \
|
||||
refclock_msfees.c refclock_trak.c refclock_datum.c \
|
||||
refclock_acts.c refclock_heath.c refclock_nmea.c \
|
||||
refclock_atom.c refclock_ptbacts.c refclock_jupiter.c \
|
||||
refclock_usno.c refclock_true.c refclock_hpgps.c \
|
||||
refclock_shm.c refclock_gpsvme.c refclock_arbiter.c \
|
||||
refclock_arc.c refclock_palisade.c refclock_palisade.h \
|
||||
refclock_oncore.c refclock_chronolog.c refclock_dumbclock.c \
|
||||
refclock_ulink.c jupiter.h
|
||||
ntpd_SOURCES = jupiter.h map_vme.c ntp_config.c ntp_control.c ntp_filegen.c \
|
||||
ntp_intres.c ntp_io.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_util.c ntpd.c refclock_acts.c refclock_arbiter.c refclock_arc.c \
|
||||
refclock_as2201.c refclock_atom.c refclock_bancomm.c \
|
||||
refclock_chronolog.c refclock_chu.c refclock_conf.c refclock_datum.c \
|
||||
refclock_dumbclock.c refclock_fg.c refclock_gpsvme.c refclock_heath.c \
|
||||
refclock_hpgps.c refclock_irig.c refclock_jupiter.c refclock_leitch.c \
|
||||
refclock_local.c refclock_msfees.c refclock_mx4200.c refclock_nmea.c \
|
||||
refclock_oncore.c refclock_palisade.c refclock_palisade.h \
|
||||
refclock_parse.c refclock_pcf.c refclock_pst.c refclock_ptbacts.c \
|
||||
refclock_shm.c refclock_tpro.c refclock_trak.c refclock_true.c \
|
||||
refclock_ulink.c refclock_usno.c refclock_wwv.c refclock_wwvb.c
|
||||
|
||||
$(PROGRAMS): $(LDADD)
|
||||
|
||||
|
@ -63,15 +63,18 @@ host_alias = @host_alias@
|
||||
host_triplet = @host@
|
||||
target_alias = @target_alias@
|
||||
target_triplet = @target@
|
||||
AMDEP = @AMDEP@
|
||||
AMTAR = @AMTAR@
|
||||
AMTARFLAGS = @AMTARFLAGS@
|
||||
AWK = @AWK@
|
||||
CC = @CC@
|
||||
CFLAGS = @CFLAGS@
|
||||
CHUTEST = @CHUTEST@
|
||||
CLKTEST = @CLKTEST@
|
||||
CPP = @CPP@
|
||||
CXX = @CXX@
|
||||
CXXCPP = @CXXCPP@
|
||||
DCFD = @DCFD@
|
||||
DEPDIR = @DEPDIR@
|
||||
LDFLAGS = @LDFLAGS@
|
||||
LIBPARSE = @LIBPARSE@
|
||||
LIBRSAREF = @LIBRSAREF@
|
||||
@ -93,6 +96,7 @@ RSAREF = @RSAREF@
|
||||
TESTDCF = @TESTDCF@
|
||||
U = @U@
|
||||
VERSION = @VERSION@
|
||||
install_sh = @install_sh@
|
||||
|
||||
#AUTOMAKE_OPTIONS = ../util/ansi2knr no-dependencies
|
||||
|
||||
@ -110,22 +114,19 @@ ETAGS_ARGS = Makefile.am
|
||||
check_PROGRAMS = @MAKE_CHECK_Y2K@
|
||||
EXTRA_PROGRAMS = check_y2k
|
||||
|
||||
ntpd_SOURCES = map_vme.c ntp_config.c ntp_control.c ntp_io.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_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_mx4200.c \
|
||||
refclock_parse.c refclock_as2201.c refclock_bancomm.c \
|
||||
refclock_tpro.c refclock_leitch.c refclock_irig.c \
|
||||
refclock_msfees.c refclock_trak.c refclock_datum.c \
|
||||
refclock_acts.c refclock_heath.c refclock_nmea.c \
|
||||
refclock_atom.c refclock_ptbacts.c refclock_jupiter.c \
|
||||
refclock_usno.c refclock_true.c refclock_hpgps.c \
|
||||
refclock_shm.c refclock_gpsvme.c refclock_arbiter.c \
|
||||
refclock_arc.c refclock_palisade.c refclock_palisade.h \
|
||||
refclock_oncore.c refclock_chronolog.c refclock_dumbclock.c \
|
||||
refclock_ulink.c jupiter.h
|
||||
ntpd_SOURCES = jupiter.h map_vme.c ntp_config.c ntp_control.c ntp_filegen.c \
|
||||
ntp_intres.c ntp_io.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_util.c ntpd.c refclock_acts.c refclock_arbiter.c refclock_arc.c \
|
||||
refclock_as2201.c refclock_atom.c refclock_bancomm.c \
|
||||
refclock_chronolog.c refclock_chu.c refclock_conf.c refclock_datum.c \
|
||||
refclock_dumbclock.c refclock_fg.c refclock_gpsvme.c refclock_heath.c \
|
||||
refclock_hpgps.c refclock_irig.c refclock_jupiter.c refclock_leitch.c \
|
||||
refclock_local.c refclock_msfees.c refclock_mx4200.c refclock_nmea.c \
|
||||
refclock_oncore.c refclock_palisade.c refclock_palisade.h \
|
||||
refclock_parse.c refclock_pcf.c refclock_pst.c refclock_ptbacts.c \
|
||||
refclock_shm.c refclock_tpro.c refclock_trak.c refclock_true.c \
|
||||
refclock_ulink.c refclock_usno.c refclock_wwv.c refclock_wwvb.c
|
||||
|
||||
subdir = ntpd
|
||||
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
|
||||
@ -143,21 +144,22 @@ check_y2k_OBJECTS = check_y2k$U.o
|
||||
check_y2k_LDADD = $(LDADD)
|
||||
check_y2k_DEPENDENCIES = version.o ../libntp/libntp.a
|
||||
check_y2k_LDFLAGS =
|
||||
am_ntpd_OBJECTS = map_vme$U.o ntp_config$U.o ntp_control$U.o ntp_io$U.o \
|
||||
ntp_loopfilter$U.o ntp_monitor$U.o ntp_peer$U.o ntp_proto$U.o \
|
||||
ntp_refclock$U.o ntp_request$U.o ntp_restrict$U.o ntp_timer$U.o \
|
||||
ntp_util$U.o ntp_intres$U.o ntp_filegen$U.o ntpd$U.o refclock_conf$U.o \
|
||||
refclock_chu$U.o refclock_local$U.o refclock_pst$U.o refclock_wwvb$U.o \
|
||||
refclock_mx4200$U.o refclock_parse$U.o refclock_as2201$U.o \
|
||||
refclock_bancomm$U.o refclock_tpro$U.o refclock_leitch$U.o \
|
||||
refclock_irig$U.o refclock_msfees$U.o refclock_trak$U.o \
|
||||
refclock_datum$U.o refclock_acts$U.o refclock_heath$U.o \
|
||||
refclock_nmea$U.o refclock_atom$U.o refclock_ptbacts$U.o \
|
||||
refclock_jupiter$U.o refclock_usno$U.o refclock_true$U.o \
|
||||
refclock_hpgps$U.o refclock_shm$U.o refclock_gpsvme$U.o \
|
||||
refclock_arbiter$U.o refclock_arc$U.o refclock_palisade$U.o \
|
||||
refclock_oncore$U.o refclock_chronolog$U.o refclock_dumbclock$U.o \
|
||||
refclock_ulink$U.o
|
||||
am_ntpd_OBJECTS = map_vme$U.o ntp_config$U.o ntp_control$U.o \
|
||||
ntp_filegen$U.o ntp_intres$U.o ntp_io$U.o ntp_loopfilter$U.o \
|
||||
ntp_monitor$U.o ntp_peer$U.o ntp_proto$U.o ntp_refclock$U.o \
|
||||
ntp_request$U.o ntp_restrict$U.o ntp_timer$U.o ntp_util$U.o ntpd$U.o \
|
||||
refclock_acts$U.o refclock_arbiter$U.o refclock_arc$U.o \
|
||||
refclock_as2201$U.o refclock_atom$U.o refclock_bancomm$U.o \
|
||||
refclock_chronolog$U.o refclock_chu$U.o refclock_conf$U.o \
|
||||
refclock_datum$U.o refclock_dumbclock$U.o refclock_fg$U.o \
|
||||
refclock_gpsvme$U.o refclock_heath$U.o refclock_hpgps$U.o \
|
||||
refclock_irig$U.o refclock_jupiter$U.o refclock_leitch$U.o \
|
||||
refclock_local$U.o refclock_msfees$U.o refclock_mx4200$U.o \
|
||||
refclock_nmea$U.o refclock_oncore$U.o refclock_palisade$U.o \
|
||||
refclock_parse$U.o refclock_pcf$U.o refclock_pst$U.o \
|
||||
refclock_ptbacts$U.o refclock_shm$U.o refclock_tpro$U.o \
|
||||
refclock_trak$U.o refclock_true$U.o refclock_ulink$U.o \
|
||||
refclock_usno$U.o refclock_wwv$U.o refclock_wwvb$U.o
|
||||
ntpd_OBJECTS = $(am_ntpd_OBJECTS)
|
||||
ntpd_DEPENDENCIES = version.o ../libntp/libntp.a
|
||||
ntpd_LDFLAGS =
|
||||
@ -171,16 +173,43 @@ DIST_COMMON = Makefile.am Makefile.in
|
||||
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
|
||||
|
||||
GZIP_ENV = --best
|
||||
depcomp = $(SHELL) $(top_srcdir)/depcomp
|
||||
DEP_FILES = @AMDEP@ $(DEPDIR)/check_y2k$U.Po $(DEPDIR)/map_vme$U.Po \
|
||||
$(DEPDIR)/ntp_config$U.Po $(DEPDIR)/ntp_control$U.Po \
|
||||
$(DEPDIR)/ntp_filegen$U.Po $(DEPDIR)/ntp_intres$U.Po \
|
||||
$(DEPDIR)/ntp_io$U.Po $(DEPDIR)/ntp_loopfilter$U.Po \
|
||||
$(DEPDIR)/ntp_monitor$U.Po $(DEPDIR)/ntp_peer$U.Po \
|
||||
$(DEPDIR)/ntp_proto$U.Po $(DEPDIR)/ntp_refclock$U.Po \
|
||||
$(DEPDIR)/ntp_request$U.Po $(DEPDIR)/ntp_restrict$U.Po \
|
||||
$(DEPDIR)/ntp_timer$U.Po $(DEPDIR)/ntp_util$U.Po $(DEPDIR)/ntpd$U.Po \
|
||||
$(DEPDIR)/refclock_acts$U.Po $(DEPDIR)/refclock_arbiter$U.Po \
|
||||
$(DEPDIR)/refclock_arc$U.Po $(DEPDIR)/refclock_as2201$U.Po \
|
||||
$(DEPDIR)/refclock_atom$U.Po $(DEPDIR)/refclock_bancomm$U.Po \
|
||||
$(DEPDIR)/refclock_chronolog$U.Po $(DEPDIR)/refclock_chu$U.Po \
|
||||
$(DEPDIR)/refclock_conf$U.Po $(DEPDIR)/refclock_datum$U.Po \
|
||||
$(DEPDIR)/refclock_dumbclock$U.Po $(DEPDIR)/refclock_fg$U.Po \
|
||||
$(DEPDIR)/refclock_gpsvme$U.Po $(DEPDIR)/refclock_heath$U.Po \
|
||||
$(DEPDIR)/refclock_hpgps$U.Po $(DEPDIR)/refclock_irig$U.Po \
|
||||
$(DEPDIR)/refclock_jupiter$U.Po $(DEPDIR)/refclock_leitch$U.Po \
|
||||
$(DEPDIR)/refclock_local$U.Po $(DEPDIR)/refclock_msfees$U.Po \
|
||||
$(DEPDIR)/refclock_mx4200$U.Po $(DEPDIR)/refclock_nmea$U.Po \
|
||||
$(DEPDIR)/refclock_oncore$U.Po $(DEPDIR)/refclock_palisade$U.Po \
|
||||
$(DEPDIR)/refclock_parse$U.Po $(DEPDIR)/refclock_pcf$U.Po \
|
||||
$(DEPDIR)/refclock_pst$U.Po $(DEPDIR)/refclock_ptbacts$U.Po \
|
||||
$(DEPDIR)/refclock_shm$U.Po $(DEPDIR)/refclock_tpro$U.Po \
|
||||
$(DEPDIR)/refclock_trak$U.Po $(DEPDIR)/refclock_true$U.Po \
|
||||
$(DEPDIR)/refclock_ulink$U.Po $(DEPDIR)/refclock_usno$U.Po \
|
||||
$(DEPDIR)/refclock_wwv$U.Po $(DEPDIR)/refclock_wwvb$U.Po
|
||||
SOURCES = check_y2k.c $(ntpd_SOURCES)
|
||||
OBJECTS = check_y2k$U.o $(am_ntpd_OBJECTS)
|
||||
|
||||
all: all-redirect
|
||||
.SUFFIXES:
|
||||
.SUFFIXES: .c .o
|
||||
.SUFFIXES: .c .h .o
|
||||
$(srcdir)/Makefile.in: Makefile.am $(top_srcdir)/configure.in $(ACLOCAL_M4)
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu --include-deps ntpd/Makefile
|
||||
cd $(top_srcdir) && $(AUTOMAKE) --gnu ntpd/Makefile
|
||||
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status $(BUILT_SOURCES)
|
||||
cd $(top_builddir) \
|
||||
&& CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
|
||||
|
||||
@ -222,9 +251,6 @@ distclean-checkPROGRAMS:
|
||||
|
||||
maintainer-clean-checkPROGRAMS:
|
||||
|
||||
.c.o:
|
||||
$(COMPILE) -c $<
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.o core *.core
|
||||
|
||||
@ -249,60 +275,10 @@ clean-kr:
|
||||
distclean-kr:
|
||||
|
||||
maintainer-clean-kr:
|
||||
check_y2k$U.o:
|
||||
|
||||
check_y2k: $(check_y2k_OBJECTS) $(check_y2k_DEPENDENCIES)
|
||||
@rm -f check_y2k
|
||||
$(LINK) $(check_y2k_LDFLAGS) $(check_y2k_OBJECTS) $(check_y2k_LDADD) $(LIBS)
|
||||
map_vme$U.o:
|
||||
ntp_config$U.o:
|
||||
ntp_control$U.o:
|
||||
ntp_io$U.o:
|
||||
ntp_loopfilter$U.o:
|
||||
ntp_monitor$U.o:
|
||||
ntp_peer$U.o:
|
||||
ntp_proto$U.o:
|
||||
ntp_refclock$U.o:
|
||||
ntp_request$U.o:
|
||||
ntp_restrict$U.o:
|
||||
ntp_timer$U.o:
|
||||
ntp_util$U.o:
|
||||
ntp_intres$U.o:
|
||||
ntp_filegen$U.o:
|
||||
ntpd$U.o:
|
||||
refclock_conf$U.o:
|
||||
refclock_chu$U.o:
|
||||
refclock_local$U.o:
|
||||
refclock_pst$U.o:
|
||||
refclock_wwvb$U.o:
|
||||
refclock_mx4200$U.o:
|
||||
refclock_parse$U.o:
|
||||
refclock_as2201$U.o:
|
||||
refclock_bancomm$U.o:
|
||||
refclock_tpro$U.o:
|
||||
refclock_leitch$U.o:
|
||||
refclock_irig$U.o:
|
||||
refclock_msfees$U.o:
|
||||
refclock_trak$U.o:
|
||||
refclock_datum$U.o:
|
||||
refclock_acts$U.o:
|
||||
refclock_heath$U.o:
|
||||
refclock_nmea$U.o:
|
||||
refclock_atom$U.o:
|
||||
refclock_ptbacts$U.o:
|
||||
refclock_jupiter$U.o:
|
||||
refclock_usno$U.o:
|
||||
refclock_true$U.o:
|
||||
refclock_hpgps$U.o:
|
||||
refclock_shm$U.o:
|
||||
refclock_gpsvme$U.o:
|
||||
refclock_arbiter$U.o:
|
||||
refclock_arc$U.o:
|
||||
refclock_palisade$U.o:
|
||||
refclock_oncore$U.o:
|
||||
refclock_chronolog$U.o:
|
||||
refclock_dumbclock$U.o:
|
||||
refclock_ulink$U.o:
|
||||
|
||||
ntpd: $(ntpd_OBJECTS) $(ntpd_DEPENDENCIES)
|
||||
@rm -f ntpd
|
||||
@ -363,6 +339,8 @@ refclock_datum_.c: refclock_datum.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_datum.c; then echo $(srcdir)/refclock_datum.c; else echo refclock_datum.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_datum_.c
|
||||
refclock_dumbclock_.c: refclock_dumbclock.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_dumbclock.c; then echo $(srcdir)/refclock_dumbclock.c; else echo refclock_dumbclock.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_dumbclock_.c
|
||||
refclock_fg_.c: refclock_fg.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_fg.c; then echo $(srcdir)/refclock_fg.c; else echo refclock_fg.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_fg_.c
|
||||
refclock_gpsvme_.c: refclock_gpsvme.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_gpsvme.c; then echo $(srcdir)/refclock_gpsvme.c; else echo refclock_gpsvme.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_gpsvme_.c
|
||||
refclock_heath_.c: refclock_heath.c $(ANSI2KNR)
|
||||
@ -389,6 +367,8 @@ refclock_palisade_.c: refclock_palisade.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_palisade.c; then echo $(srcdir)/refclock_palisade.c; else echo refclock_palisade.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_palisade_.c
|
||||
refclock_parse_.c: refclock_parse.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_parse.c; then echo $(srcdir)/refclock_parse.c; else echo refclock_parse.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_parse_.c
|
||||
refclock_pcf_.c: refclock_pcf.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_pcf.c; then echo $(srcdir)/refclock_pcf.c; else echo refclock_pcf.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_pcf_.c
|
||||
refclock_pst_.c: refclock_pst.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_pst.c; then echo $(srcdir)/refclock_pst.c; else echo refclock_pst.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_pst_.c
|
||||
refclock_ptbacts_.c: refclock_ptbacts.c $(ANSI2KNR)
|
||||
@ -405,6 +385,8 @@ refclock_ulink_.c: refclock_ulink.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_ulink.c; then echo $(srcdir)/refclock_ulink.c; else echo refclock_ulink.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_ulink_.c
|
||||
refclock_usno_.c: refclock_usno.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_usno.c; then echo $(srcdir)/refclock_usno.c; else echo refclock_usno.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_usno_.c
|
||||
refclock_wwv_.c: refclock_wwv.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_wwv.c; then echo $(srcdir)/refclock_wwv.c; else echo refclock_wwv.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_wwv_.c
|
||||
refclock_wwvb_.c: refclock_wwvb.c $(ANSI2KNR)
|
||||
$(CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) `if test -f $(srcdir)/refclock_wwvb.c; then echo $(srcdir)/refclock_wwvb.c; else echo refclock_wwvb.c; fi` | sed 's/^# \([0-9]\)/#line \1/' | $(ANSI2KNR) > refclock_wwvb_.c
|
||||
check_y2k_.o map_vme_.o ntp_config_.o ntp_control_.o ntp_filegen_.o \
|
||||
@ -413,34 +395,38 @@ ntp_proto_.o ntp_refclock_.o ntp_request_.o ntp_restrict_.o \
|
||||
ntp_timer_.o ntp_util_.o ntpd_.o refclock_acts_.o refclock_arbiter_.o \
|
||||
refclock_arc_.o refclock_as2201_.o refclock_atom_.o refclock_bancomm_.o \
|
||||
refclock_chronolog_.o refclock_chu_.o refclock_conf_.o \
|
||||
refclock_datum_.o refclock_dumbclock_.o refclock_gpsvme_.o \
|
||||
refclock_heath_.o refclock_hpgps_.o refclock_irig_.o \
|
||||
refclock_datum_.o refclock_dumbclock_.o refclock_fg_.o \
|
||||
refclock_gpsvme_.o refclock_heath_.o refclock_hpgps_.o refclock_irig_.o \
|
||||
refclock_jupiter_.o refclock_leitch_.o refclock_local_.o \
|
||||
refclock_msfees_.o refclock_mx4200_.o refclock_nmea_.o \
|
||||
refclock_oncore_.o refclock_palisade_.o refclock_parse_.o \
|
||||
refclock_pst_.o refclock_ptbacts_.o refclock_shm_.o refclock_tpro_.o \
|
||||
refclock_trak_.o refclock_true_.o refclock_ulink_.o refclock_usno_.o \
|
||||
refclock_wwvb_.o : $(ANSI2KNR)
|
||||
refclock_pcf_.o refclock_pst_.o refclock_ptbacts_.o refclock_shm_.o \
|
||||
refclock_tpro_.o refclock_trak_.o refclock_true_.o refclock_ulink_.o \
|
||||
refclock_usno_.o refclock_wwv_.o refclock_wwvb_.o : $(ANSI2KNR)
|
||||
|
||||
tags: TAGS
|
||||
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP)
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
here=`pwd` && cd $(srcdir) \
|
||||
&& mkid -f$$here/ID $$unique $(LISP)
|
||||
mkid -f$$here/ID $$unique $(LISP)
|
||||
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) $(LISP)
|
||||
TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
|
||||
$(TAGS_FILES) $(LISP)
|
||||
tags=; \
|
||||
here=`pwd`; \
|
||||
list='$(SOURCES) $(HEADERS)'; \
|
||||
unique=`for i in $$list; do echo $$i; done | \
|
||||
${AWK:-awk} ' { files[$$0] = 1; } \
|
||||
list='$(SOURCES) $(HEADERS) $(TAGS_FILES)'; \
|
||||
unique=`for i in $$list; do \
|
||||
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
|
||||
done | \
|
||||
$(AWK) ' { files[$$0] = 1; } \
|
||||
END { for (i in files) print i; }'`; \
|
||||
test -z "$(ETAGS_ARGS)$$unique$(LISP)$$tags" \
|
||||
|| (cd $(srcdir) && etags $(ETAGS_ARGS) $$tags $$unique $(LISP) -o $$here/TAGS)
|
||||
|| etags $(ETAGS_ARGS) $$tags $$unique $(LISP)
|
||||
|
||||
mostlyclean-tags:
|
||||
|
||||
@ -457,356 +443,84 @@ distdir: $(DISTFILES)
|
||||
@for file in $(DISTFILES); do \
|
||||
d=$(srcdir); \
|
||||
if test -d $$d/$$file; then \
|
||||
cp -pr $$d/$$file $(distdir)/$$file; \
|
||||
cp -pR $$d/$$file $(distdir); \
|
||||
else \
|
||||
test -f $(distdir)/$$file \
|
||||
|| ln $$d/$$file $(distdir)/$$file 2> /dev/null \
|
||||
|| cp -p $$d/$$file $(distdir)/$$file || :; \
|
||||
fi; \
|
||||
done
|
||||
check_y2k.o: check_y2k.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_malloc.h \
|
||||
../include/ntp_refclock.h ../include/recvbuff.h \
|
||||
../include/ntp_calendar.h ../include/parse.h \
|
||||
../include/parse_conf.h
|
||||
map_vme.o: map_vme.c ../config.h
|
||||
ntp_config.o: ntp_config.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_filegen.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
ntp_control.o: ntp_control.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_control.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_filegen.o: ntp_filegen.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_string.h ../include/ntp_calendar.h \
|
||||
../include/ntp_filegen.h ../include/ntp_stdlib.h \
|
||||
../include/l_stdlib.h
|
||||
ntp_intres.o: ntp_intres.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_request.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_io.o: ntp_io.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h ../include/iosignal.h \
|
||||
../include/ntp_if.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_loopfilter.o: ntp_loopfilter.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_syscall.h
|
||||
ntp_monitor.o: ntp_monitor.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h ../include/ntp_if.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
ntp_peer.o: ntp_peer.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_proto.o: ntp_proto.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_control.h
|
||||
ntp_refclock.o: ntp_refclock.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_request.o: ntp_request.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_request.h ../include/ntp_control.h \
|
||||
../include/ntp_if.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_syscall.h
|
||||
ntp_restrict.o: ntp_restrict.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_if.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
ntp_timer.o: ntp_timer.c ../config.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntp_util.o: ntp_util.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_filegen.h \
|
||||
../include/ntp_if.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
ntpd.o: ntpd.c ../config.h ../include/ntpd.h ../include/ntp_syslog.h \
|
||||
../include/ntp_fp.h ../include/ntp_types.h \
|
||||
../include/ntp_machine.h ../include/ntp_proto.h \
|
||||
../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_acts.o: refclock_acts.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_control.h
|
||||
refclock_arbiter.o: refclock_arbiter.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_arc.o: refclock_arc.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_as2201.o: refclock_as2201.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_atom.o: refclock_atom.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_bancomm.o: refclock_bancomm.c ../config.h
|
||||
refclock_chronolog.o: refclock_chronolog.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_chu.o: refclock_chu.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_conf.o: refclock_conf.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_datum.o: refclock_datum.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_dumbclock.o: refclock_dumbclock.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_gpsvme.o: refclock_gpsvme.c ../config.h
|
||||
refclock_heath.o: refclock_heath.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_hpgps.o: refclock_hpgps.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_irig.o: refclock_irig.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_jupiter.o: refclock_jupiter.c ../config.h
|
||||
refclock_leitch.o: refclock_leitch.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_local.o: refclock_local.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_syscall.h
|
||||
refclock_msfees.o: refclock_msfees.c ../config.h
|
||||
refclock_mx4200.o: refclock_mx4200.c ../config.h
|
||||
refclock_nmea.o: refclock_nmea.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_oncore.o: refclock_oncore.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_palisade.o: refclock_palisade.c ../config.h refclock_palisade.h \
|
||||
../include/ntpd.h ../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_control.h ../include/ntp_unixtime.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_parse.o: refclock_parse.c ../config.h
|
||||
refclock_pst.o: refclock_pst.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h
|
||||
refclock_ptbacts.o: refclock_ptbacts.c ../config.h refclock_acts.c \
|
||||
../include/ntpd.h ../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_control.h
|
||||
refclock_shm.o: refclock_shm.c ../config.h
|
||||
refclock_tpro.o: refclock_tpro.c ../config.h
|
||||
refclock_trak.o: refclock_trak.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_stdlib.h ../include/ntp_string.h \
|
||||
../include/l_stdlib.h ../include/ntp_unixtime.h
|
||||
refclock_true.o: refclock_true.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_ulink.o: refclock_ulink.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
refclock_usno.o: refclock_usno.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_unixtime.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h \
|
||||
../include/ntp_control.h
|
||||
refclock_wwvb.o: refclock_wwvb.c ../config.h ../include/ntpd.h \
|
||||
../include/ntp_syslog.h ../include/ntp_fp.h \
|
||||
../include/ntp_types.h ../include/ntp_machine.h \
|
||||
../include/ntp_proto.h ../include/ntp.h ../include/ntp_select.h \
|
||||
../include/ntp_malloc.h ../include/ntp_refclock.h \
|
||||
../include/recvbuff.h ../include/ntp_io.h \
|
||||
../include/ntp_calendar.h ../include/ntp_stdlib.h \
|
||||
../include/ntp_string.h ../include/l_stdlib.h
|
||||
|
||||
@AMDEP@include $(DEPDIR)/check_y2k$U.Po
|
||||
@AMDEP@include $(DEPDIR)/map_vme$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_config$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_control$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_filegen$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_intres$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_io$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_loopfilter$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_monitor$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_peer$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_proto$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_refclock$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_request$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_restrict$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_timer$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntp_util$U.Po
|
||||
@AMDEP@include $(DEPDIR)/ntpd$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_acts$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_arbiter$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_arc$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_as2201$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_atom$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_bancomm$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_chronolog$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_chu$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_conf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_datum$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_dumbclock$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_fg$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_gpsvme$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_heath$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_hpgps$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_irig$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_jupiter$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_leitch$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_local$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_msfees$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_mx4200$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_nmea$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_oncore$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_palisade$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_parse$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_pcf$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_pst$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_ptbacts$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_shm$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_tpro$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_trak$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_true$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_ulink$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_usno$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_wwv$U.Po
|
||||
@AMDEP@include $(DEPDIR)/refclock_wwvb$U.Po
|
||||
|
||||
mostlyclean-depend:
|
||||
|
||||
clean-depend:
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
||||
maintainer-clean-depend:
|
||||
|
||||
@AMDEP@CCDEPMODE = @CCDEPMODE@
|
||||
|
||||
.c.o:
|
||||
@AMDEP@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(COMPILE) -c -o $@ $<
|
||||
|
||||
info-am:
|
||||
info: info-am
|
||||
@ -847,27 +561,29 @@ distclean-generic:
|
||||
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
|
||||
|
||||
maintainer-clean-generic:
|
||||
-rm -f Makefile.in
|
||||
mostlyclean-am: mostlyclean-binPROGRAMS mostlyclean-checkPROGRAMS \
|
||||
mostlyclean-compile mostlyclean-kr mostlyclean-tags \
|
||||
mostlyclean-generic
|
||||
mostlyclean-depend mostlyclean-generic
|
||||
|
||||
mostlyclean: mostlyclean-am
|
||||
|
||||
clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-compile clean-kr \
|
||||
clean-tags clean-generic mostlyclean-am
|
||||
clean-tags clean-depend clean-generic mostlyclean-am
|
||||
|
||||
clean: clean-am
|
||||
|
||||
distclean-am: distclean-binPROGRAMS distclean-checkPROGRAMS \
|
||||
distclean-compile distclean-kr distclean-tags \
|
||||
distclean-generic clean-am
|
||||
distclean-depend distclean-generic clean-am
|
||||
|
||||
distclean: distclean-am
|
||||
|
||||
maintainer-clean-am: maintainer-clean-binPROGRAMS \
|
||||
maintainer-clean-checkPROGRAMS maintainer-clean-compile \
|
||||
maintainer-clean-kr maintainer-clean-tags \
|
||||
maintainer-clean-generic distclean-am
|
||||
maintainer-clean-depend maintainer-clean-generic \
|
||||
distclean-am
|
||||
@echo "This command is intended for maintainers to use;"
|
||||
@echo "it deletes files that may require special tools to rebuild."
|
||||
|
||||
@ -879,10 +595,11 @@ mostlyclean-checkPROGRAMS distclean-checkPROGRAMS clean-checkPROGRAMS \
|
||||
maintainer-clean-checkPROGRAMS mostlyclean-compile distclean-compile \
|
||||
clean-compile maintainer-clean-compile mostlyclean-kr distclean-kr \
|
||||
clean-kr maintainer-clean-kr tags mostlyclean-tags distclean-tags \
|
||||
clean-tags maintainer-clean-tags distdir info-am info dvi-am dvi \
|
||||
check-local check check-am installcheck-am installcheck install-exec-am \
|
||||
install-exec install-data-am install-data install-am install \
|
||||
uninstall-am uninstall all-redirect all-am all install-strip \
|
||||
clean-tags maintainer-clean-tags distdir mostlyclean-depend \
|
||||
distclean-depend clean-depend maintainer-clean-depend info-am info \
|
||||
dvi-am dvi check-local check check-am installcheck-am installcheck \
|
||||
install-exec-am install-exec install-data-am install-data install-am \
|
||||
install uninstall-am uninstall all-redirect all-am all install-strip \
|
||||
installdirs mostlyclean-generic distclean-generic clean-generic \
|
||||
maintainer-clean-generic clean mostlyclean distclean maintainer-clean
|
||||
|
||||
|
@ -74,7 +74,7 @@ map_vme (
|
||||
}
|
||||
if(tx.error)
|
||||
printf("io_testr failed internal error %d\n",tx.error);
|
||||
if(tx.access_result <= 0) {
|
||||
if(tx.access_result < 0) {
|
||||
printf("io_testr failed\n");
|
||||
exit(2);
|
||||
}
|
||||
|
@ -341,6 +341,9 @@ static u_char clocktypes[] = {
|
||||
CTL_SST_TS_LF, /* REFCLK_CHRONOLOG (32) */
|
||||
CTL_SST_TS_LF, /* REFCLK_DUMBCLOCK (32) */
|
||||
CTL_SST_TS_LF, /* REFCLK_ULINK (33) */
|
||||
CTL_SST_TS_LF, /* REFCLK_PCF (35) */
|
||||
CTL_SST_TS_LF, /* REFCLK_WWW (36) */
|
||||
CTL_SST_TS_LF, /* REFCLK_FG (37) */
|
||||
};
|
||||
|
||||
|
||||
|
@ -152,7 +152,7 @@ ntp_intres(void)
|
||||
#endif /* NTP_POSIX_SOURCE */
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug) {
|
||||
if (debug > 1) {
|
||||
msyslog(LOG_INFO, "NTP_INTRES running");
|
||||
}
|
||||
#endif
|
||||
|
@ -19,6 +19,12 @@
|
||||
#ifdef HAVE_NETINET_IN_H
|
||||
# include <netinet/in.h>
|
||||
#endif
|
||||
#ifdef HAVE_NETINET_IN_SYSTM_H
|
||||
# include <netinet/in_systm.h>
|
||||
#else /* Some old linux systems at least have in_system.h instead. */
|
||||
# include <netinet/in_system.h>
|
||||
#endif /* HAVE_NETINET_IN_SYSTM_H */
|
||||
#include <netinet/ip.h>
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
# include <sys/ioctl.h>
|
||||
#endif
|
||||
@ -880,7 +886,7 @@ open_socket(
|
||||
int turn_off_reuse
|
||||
)
|
||||
{
|
||||
int fd;
|
||||
int fd, tos;
|
||||
int on = 1, off = 0;
|
||||
|
||||
/* create a datagram (UDP) socket */
|
||||
@ -905,6 +911,15 @@ open_socket(
|
||||
msyslog(LOG_ERR, "setsockopt SO_REUSEADDR on fails: %m");
|
||||
}
|
||||
|
||||
#if defined(IPTOS_LOWDELAY) && defined(IPPROTO_IP) && defined(IP_TOS)
|
||||
/* set IP_TOS to minimize packet delay */
|
||||
tos = IPTOS_LOWDELAY;
|
||||
if (setsockopt(fd, IPPROTO_IP, IP_TOS, (char *) &tos, sizeof(tos)) < 0)
|
||||
{
|
||||
msyslog(LOG_ERR, "setsockopt IPTOS_LOWDELAY on fails: %m");
|
||||
}
|
||||
#endif /* IPTOS_LOWDELAY && IPPROTO_IP && IP_TOS */
|
||||
|
||||
/*
|
||||
* bind the local address.
|
||||
*/
|
||||
@ -1326,11 +1341,7 @@ input_handler(
|
||||
{
|
||||
char buf[RX_BUFF_SIZE];
|
||||
|
||||
#ifndef SYS_WINNT
|
||||
(void) read(fd, buf, sizeof buf);
|
||||
#else
|
||||
(void) ReadFile((HANDLE)fd, buf, (DWORD)sizeof buf, NULL, NULL);
|
||||
#endif /* SYS_WINNT */
|
||||
packets_dropped++;
|
||||
goto select_again;
|
||||
}
|
||||
@ -1340,14 +1351,8 @@ input_handler(
|
||||
i = (rp->datalen == 0
|
||||
|| rp->datalen > sizeof(rb->recv_space))
|
||||
? sizeof(rb->recv_space) : rp->datalen;
|
||||
#ifndef SYS_WINNT
|
||||
rb->recv_length =
|
||||
read(fd, (char *)&rb->recv_space, (unsigned)i)
|
||||
#else /* SYS_WINNT */
|
||||
ReadFile((HANDLE)fd, (char *)&rb->recv_space, (DWORD)i,
|
||||
(LPDWORD)&(rb->recv_length), NULL)
|
||||
#endif /* SYS_WINNT */
|
||||
;
|
||||
read(fd, (char *)&rb->recv_space, (unsigned)i);
|
||||
|
||||
if (rb->recv_length == -1)
|
||||
{
|
||||
@ -1546,35 +1551,20 @@ input_handler(
|
||||
}
|
||||
else if (n == -1)
|
||||
{
|
||||
#ifndef SYS_WINNT
|
||||
int err = errno;
|
||||
#else
|
||||
DWORD err = WSAGetLastError();
|
||||
#endif /* SYS_WINNT */
|
||||
|
||||
/*
|
||||
* extended FAU debugging output
|
||||
*/
|
||||
msyslog(LOG_ERR, "select(%d, %s, 0L, 0L, &0.000000) error: %m",
|
||||
maxactivefd+1, fdbits(maxactivefd, &activefds));
|
||||
if (
|
||||
#ifndef SYS_WINNT
|
||||
(err == EBADF)
|
||||
#else
|
||||
(err == WSAEBADF)
|
||||
#endif /* SYS_WINNT */
|
||||
)
|
||||
{
|
||||
if (err == EBADF) {
|
||||
int j, b;
|
||||
|
||||
fds = activefds;
|
||||
for (j = 0; j <= maxactivefd; j++)
|
||||
if (
|
||||
#ifndef SYS_WINNT
|
||||
(FD_ISSET(j, &fds) && (read(j, &b, 0) == -1))
|
||||
#else
|
||||
(FD_ISSET(j, &fds) && (!ReadFile((HANDLE)j, &b, 0, NULL, NULL)))
|
||||
#endif /* SYS_WINNT */
|
||||
)
|
||||
msyslog(LOG_ERR, "Bad file descriptor %d", j);
|
||||
}
|
||||
|
@ -194,7 +194,7 @@ local_clock(
|
||||
#ifndef SYS_WINNT
|
||||
if (fabs(fp_offset) >= clock_panic && !correct_any) {
|
||||
msyslog(LOG_ERR,
|
||||
"time error %.0f over %d seconds; set clock manually)",
|
||||
"time error %.0f over %d seconds; set clock manually",
|
||||
fp_offset, (int)clock_panic);
|
||||
return (-1);
|
||||
}
|
||||
@ -286,7 +286,7 @@ local_clock(
|
||||
* reset or shaken, but never stirred.
|
||||
*/
|
||||
default:
|
||||
if (allow_set_backward) {
|
||||
if (allow_set_backward | correct_any) {
|
||||
step_systime(fp_offset);
|
||||
NLOG(NLOG_SYNCEVENT|NLOG_SYSEVENT)
|
||||
msyslog(LOG_NOTICE, "time reset %.6f s",
|
||||
@ -299,7 +299,6 @@ local_clock(
|
||||
fp_offset);
|
||||
rstclock(S_FREQ);
|
||||
last_offset = clock_offset = fp_offset;
|
||||
return (0);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@ -355,7 +354,8 @@ local_clock(
|
||||
ULOGTOD(sys_poll + 1)) {
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf("local_clock: popcorn %.6f %.6f\n",
|
||||
printf(
|
||||
"local_clock: popcorn %.6f %.6f\n",
|
||||
fp_offset, last_offset);
|
||||
#endif
|
||||
last_offset = fp_offset;
|
||||
@ -364,14 +364,17 @@ local_clock(
|
||||
|
||||
/*
|
||||
* Compute the FLL and PLL frequency adjustments
|
||||
* conditioned on two weighting factors, one
|
||||
* which limits the time constant determined
|
||||
* from the Allan intercept, the other which
|
||||
* limits the gain factor as a function of
|
||||
* update interval. The net effect is to favor
|
||||
* the PLL adjustments at the smaller update
|
||||
* intervals and the FLL adjustments at the
|
||||
* larger ones.
|
||||
* conditioned on intricate weighting factors.
|
||||
* For the FLL, the averaging interval is
|
||||
* clamped not to decrease below the Allan
|
||||
* intercept and the gain is decreased from
|
||||
* unity for mu above CLOCK_MINSEC (1024 s) to
|
||||
* zero below CLOCK_MINSEC (256 s). For the PLL,
|
||||
* the averaging interval is clamped not to
|
||||
* exceed the sustem poll interval. These
|
||||
* measures insure stability of the clock
|
||||
* discipline even when the rules of fair
|
||||
* engagement are broken.
|
||||
*/
|
||||
dtemp = max(mu, allan_xpt);
|
||||
etemp = min(max(0, mu - CLOCK_MINSEC) /
|
||||
@ -379,7 +382,8 @@ local_clock(
|
||||
flladj = fp_offset * etemp / (dtemp *
|
||||
CLOCK_AVG);
|
||||
dtemp = ULOGTOD(SHIFT_PLL + 2 + sys_poll);
|
||||
plladj = fp_offset * mu / (dtemp * dtemp);
|
||||
etemp = min(mu, ULOGTOD(sys_poll));
|
||||
plladj = fp_offset * etemp / (dtemp * dtemp);
|
||||
clock_offset = fp_offset;
|
||||
break;
|
||||
}
|
||||
@ -664,6 +668,7 @@ rstclock(
|
||||
int trans /* new state */
|
||||
)
|
||||
{
|
||||
correct_any = FALSE;
|
||||
state = trans;
|
||||
switch (state) {
|
||||
|
||||
|
@ -70,6 +70,7 @@ static double clock_combine P((struct peer **, int));
|
||||
static void peer_xmit P((struct peer *));
|
||||
static void fast_xmit P((struct recvbuf *, int, u_long));
|
||||
static void clock_update P((void));
|
||||
int default_get_precision P((void));
|
||||
#ifdef MD5
|
||||
static void make_keylist P((struct peer *));
|
||||
#endif /* MD5 */
|
||||
@ -100,8 +101,8 @@ transmit(
|
||||
peer->valid++;
|
||||
if (oreach & 0x80)
|
||||
peer->valid--;
|
||||
if (!(peer->flags & FLAG_CONFIG) &&
|
||||
peer->valid > NTP_SHIFT / 2 && (peer->reach & 0x80) &&
|
||||
if (!(peer->flags & FLAG_CONFIG) && peer->valid >
|
||||
NTP_SHIFT / 2 && (peer->reach & 0x80) &&
|
||||
peer->status < CTL_PST_SEL_SYNCCAND)
|
||||
peer->reach = 0;
|
||||
peer->reach <<= 1;
|
||||
@ -259,8 +260,8 @@ receive(
|
||||
if (PKT_MODE(pkt->li_vn_mode) == MODE_PRIVATE) {
|
||||
if (restrict_mask & RES_NOQUERY)
|
||||
return;
|
||||
process_private(rbufp, ((restrict_mask & RES_NOMODIFY) ==
|
||||
0));
|
||||
process_private(rbufp, ((restrict_mask &
|
||||
RES_NOMODIFY) == 0));
|
||||
return;
|
||||
}
|
||||
if (PKT_MODE(pkt->li_vn_mode) == MODE_CONTROL) {
|
||||
@ -289,17 +290,18 @@ receive(
|
||||
/*
|
||||
* If we are not a broadcast client, ignore broadcast packets.
|
||||
*/
|
||||
if ((PKT_MODE(pkt->li_vn_mode) == MODE_BROADCAST && !sys_bclient))
|
||||
if ((PKT_MODE(pkt->li_vn_mode) == MODE_BROADCAST &&
|
||||
!sys_bclient))
|
||||
return;
|
||||
|
||||
/*
|
||||
* This is really awful ugly. We figure out whether an extension
|
||||
* field is present and then measure the MAC size. If the number
|
||||
* of words following the packet header is less than or equal to
|
||||
* 5, no extension field is present and these words constitute the
|
||||
* MAC. If the number of words is greater than 5, an extension
|
||||
* field is present and the first word contains the length of
|
||||
* the extension field and the MAC follows that.
|
||||
* 5, no extension field is present and these words constitute
|
||||
* the MAC. If the number of words is greater than 5, an
|
||||
* extension field is present and the first word contains the
|
||||
* length of the extension field and the MAC follows that.
|
||||
*/
|
||||
has_mac = 0;
|
||||
/* pkeyid = 0; */
|
||||
@ -321,7 +323,8 @@ receive(
|
||||
* MAC itself.
|
||||
*/
|
||||
/* pkeyid = (u_long)ntohl(pkt->keyid2) & 0xffffffff; */
|
||||
skeyid = tkeyid = (u_long)ntohl(pkt->keyid3) & 0xffffffff;
|
||||
skeyid = tkeyid = (u_long)ntohl(pkt->keyid3) &
|
||||
0xffffffff;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -364,11 +367,12 @@ receive(
|
||||
|
||||
/*
|
||||
* For multicast mode, generate the session key
|
||||
* and install in the key cache. For client mode,
|
||||
* generate the session key for the unicast
|
||||
* address. For server mode, the session key should
|
||||
* already be in the key cache, since it was
|
||||
* generated when the last request was sent.
|
||||
* and install in the key cache. For client
|
||||
* mode, generate the session key for the
|
||||
* unicast address. For server mode, the session
|
||||
* key should already be in the key cache, since
|
||||
* it was generated when the last request was
|
||||
* sent.
|
||||
*/
|
||||
if (hismode == MODE_BROADCAST) {
|
||||
tkeyid = session_key(
|
||||
@ -389,7 +393,8 @@ receive(
|
||||
* Compute the cryptosum. Note a clogging attack may
|
||||
* succceed in bloating the key cache.
|
||||
*/
|
||||
if (authdecrypt(skeyid, (u_int32 *)pkt, authlen, has_mac))
|
||||
if (authdecrypt(skeyid, (u_int32 *)pkt, authlen,
|
||||
has_mac))
|
||||
is_authentic = 1;
|
||||
else
|
||||
sys_badauth++;
|
||||
@ -409,137 +414,148 @@ receive(
|
||||
peer = findpeer(&rbufp->recv_srcadr, rbufp->dstadr, rbufp->fd,
|
||||
hismode, &retcode);
|
||||
/*
|
||||
* The new association matching rules are driven by a table specified
|
||||
* in ntp.h. We have replaced the *default* behaviour of replying
|
||||
* to bogus packets in server mode in this version.
|
||||
* A packet must now match an association in order to be processed.
|
||||
* In the event that no association exists, then an association is
|
||||
* mobilized if need be. Two different associations can be mobilized
|
||||
* a) passive associations
|
||||
* b) client associations due to broadcasts or manycasts.
|
||||
* The new association matching rules are driven by a table
|
||||
* specified in ntp.h. We have replaced the *default* behaviour
|
||||
* of replying to bogus packets in server mode in this version.
|
||||
* A packet must now match an association in order to be
|
||||
* processed. In the event that no association exists, then an
|
||||
* association is mobilized if need be. Two different
|
||||
* associations can be mobilized a) passive associations b)
|
||||
* client associations due to broadcasts or manycasts.
|
||||
*/
|
||||
is_error = 0;
|
||||
switch (retcode) {
|
||||
case AM_FXMIT:
|
||||
/*
|
||||
* If the client is configured purely as a broadcast client and
|
||||
* not as an manycast server, it has no business being a server.
|
||||
* Simply go home. Otherwise, send a MODE_SERVER response and go
|
||||
* home. Note that we don't do a authentication check here,
|
||||
* since we can't set the system clock; but, we do set the
|
||||
* key ID to zero to tell the caller about this.
|
||||
*/
|
||||
if (!sys_bclient || sys_manycastserver) {
|
||||
if (is_authentic)
|
||||
fast_xmit(rbufp, MODE_SERVER, skeyid);
|
||||
else
|
||||
fast_xmit(rbufp, MODE_SERVER, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* We can't get here if an association is mobilized, so just
|
||||
* toss the key, if appropriate.
|
||||
*/
|
||||
if (!is_mystic && skeyid > NTP_MAXKEY)
|
||||
authtrust(skeyid, 0);
|
||||
return;
|
||||
/*
|
||||
* If the client is configured purely as a broadcast
|
||||
* client and not as an manycast server, it has no
|
||||
* business being a server. Simply go home. Otherwise,
|
||||
* send a MODE_SERVER response and go home. Note that we
|
||||
* don't do a authentication check here, since we can't
|
||||
* set the system clock; but, we do set the key ID to
|
||||
* zero to tell the caller about this.
|
||||
*/
|
||||
if (!sys_bclient || sys_manycastserver) {
|
||||
if (is_authentic)
|
||||
fast_xmit(rbufp, MODE_SERVER, skeyid);
|
||||
else
|
||||
fast_xmit(rbufp, MODE_SERVER, 0);
|
||||
}
|
||||
|
||||
/*
|
||||
* We can't get here if an association is mobilized, so
|
||||
* just toss the key, if appropriate.
|
||||
*/
|
||||
if (!is_mystic && skeyid > NTP_MAXKEY)
|
||||
authtrust(skeyid, 0);
|
||||
return;
|
||||
|
||||
case AM_MANYCAST:
|
||||
/*
|
||||
* This could be in response to a multicast packet sent by
|
||||
* the "manycast" mode association. Find peer based on the
|
||||
* originate timestamp in the packet. Note that we don't
|
||||
* mobilize a new association, unless the packet is properly
|
||||
* authenticated. The response must be properly authenticated
|
||||
* and it's darn funny of the manycaster isn't around now.
|
||||
*/
|
||||
if ((sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer2 = (struct peer *)findmanycastpeer(&pkt->org);
|
||||
if (peer2 == 0) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a new association and copy the peer variables to it.
|
||||
* If something goes wrong, carefully pry the new association
|
||||
* away and return its marbles to the candy store.
|
||||
*/
|
||||
peer = newpeer(&rbufp->recv_srcadr,
|
||||
rbufp->dstadr, MODE_CLIENT, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
if (peer == 0) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer_config_manycast(peer2, peer);
|
||||
break;
|
||||
/*
|
||||
* This could be in response to a multicast packet sent
|
||||
* by the "manycast" mode association. Find peer based
|
||||
* on the originate timestamp in the packet. Note that
|
||||
* we don't mobilize a new association, unless the
|
||||
* packet is properly authenticated. The response must
|
||||
* be properly authenticated and it's darn funny of the
|
||||
* manycaster isn't around now.
|
||||
*/
|
||||
if ((sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer2 = (struct peer *)findmanycastpeer(&pkt->org);
|
||||
if (peer2 == 0) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
/*
|
||||
* Create a new association and copy the peer variables
|
||||
* to it. If something goes wrong, carefully pry the new
|
||||
* association away and return its marbles to the candy
|
||||
* store.
|
||||
*/
|
||||
peer = newpeer(&rbufp->recv_srcadr, rbufp->dstadr,
|
||||
MODE_CLIENT, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
if (peer == 0) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer_config_manycast(peer2, peer);
|
||||
break;
|
||||
|
||||
case AM_ERR:
|
||||
/*
|
||||
* Something bad happened. Dirty floor will be mopped by the
|
||||
* code at the end of this adventure.
|
||||
*/
|
||||
is_error = 1;
|
||||
break;
|
||||
|
||||
/*
|
||||
* Something bad happened. Dirty floor will be mopped by
|
||||
* the code at the end of this adventure.
|
||||
*/
|
||||
is_error = 1;
|
||||
break;
|
||||
|
||||
case AM_NEWPASS:
|
||||
/*
|
||||
* Okay, we're going to keep him around. Allocate him some
|
||||
* memory. But, don't do that unless the packet is properly
|
||||
* authenticated.
|
||||
*/
|
||||
if ((sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer = newpeer(&rbufp->recv_srcadr,
|
||||
rbufp->dstadr, MODE_PASSIVE, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
break;
|
||||
|
||||
/*
|
||||
* Okay, we're going to keep him around. Allocate him
|
||||
* some memory. But, don't do that unless the packet is
|
||||
* properly authenticated.
|
||||
*/
|
||||
if ((sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer = newpeer(&rbufp->recv_srcadr, rbufp->dstadr,
|
||||
MODE_PASSIVE, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
break;
|
||||
|
||||
case AM_NEWBCL:
|
||||
/*
|
||||
* Broadcast client being set up now. Do this only if the
|
||||
* packet is properly authenticated.
|
||||
*/
|
||||
if ((restrict_mask & RES_NOPEER) || !sys_bclient ||
|
||||
(sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer = newpeer(&rbufp->recv_srcadr,
|
||||
rbufp->dstadr, MODE_MCLIENT, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
if (peer == 0)
|
||||
break;
|
||||
peer->flags |= FLAG_MCAST1 | FLAG_MCAST2 | FLAG_BURST;
|
||||
peer->hmode = MODE_CLIENT;
|
||||
break;
|
||||
|
||||
/*
|
||||
* Broadcast client being set up now. Do this only if
|
||||
* the packet is properly authenticated.
|
||||
*/
|
||||
if ((restrict_mask & RES_NOPEER) || !sys_bclient ||
|
||||
(sys_authenticate && !is_authentic)) {
|
||||
is_error = 1;
|
||||
break;
|
||||
}
|
||||
peer = newpeer(&rbufp->recv_srcadr, rbufp->dstadr,
|
||||
MODE_MCLIENT, PKT_VERSION(pkt->li_vn_mode),
|
||||
NTP_MINDPOLL, NTP_MAXDPOLL, 0, skeyid);
|
||||
if (peer == 0)
|
||||
break;
|
||||
peer->flags |= FLAG_MCAST1 | FLAG_MCAST2 | FLAG_BURST;
|
||||
peer->hmode = MODE_CLIENT;
|
||||
break;
|
||||
|
||||
case AM_POSSBCL:
|
||||
case AM_PROCPKT:
|
||||
/*
|
||||
* It seems like it is okay to process the packet now
|
||||
*/
|
||||
break;
|
||||
|
||||
/*
|
||||
* It seems like it is okay to process the packet now
|
||||
*/
|
||||
break;
|
||||
|
||||
default:
|
||||
/*
|
||||
* shouldn't be getting here, but simply return anyway!
|
||||
*/
|
||||
is_error = 1;
|
||||
|
||||
/*
|
||||
* shouldn't be getting here, but simply return anyway!
|
||||
*/
|
||||
is_error = 1;
|
||||
}
|
||||
if (is_error) {
|
||||
|
||||
/*
|
||||
* Error stub. If we get here, something broke. We scuttle
|
||||
* the autokey if necessary and sink the ship. This can
|
||||
* occur only upon mobilization, so we can throw the
|
||||
* structure away without fear of breaking anything.
|
||||
* Error stub. If we get here, something broke. We
|
||||
* scuttle the autokey if necessary and sink the ship.
|
||||
* This can occur only upon mobilization, so we can
|
||||
* throw the structure away without fear of breaking
|
||||
* anything.
|
||||
*/
|
||||
if (!is_mystic && skeyid > NTP_MAXKEY)
|
||||
authtrust(skeyid, 0);
|
||||
@ -548,8 +564,8 @@ receive(
|
||||
unpeer(peer);
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf("match error code %d assoc %d\n", retcode,
|
||||
peer_associations);
|
||||
printf("match error code %d assoc %d\n",
|
||||
retcode, peer_associations);
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
@ -572,22 +588,23 @@ receive(
|
||||
|
||||
/*
|
||||
* Determine if this guy is basically trustable. If not, flush
|
||||
* the bugger. If this is the first packet that is authenticated,
|
||||
* flush the clock filter. This is to foil clogging attacks that
|
||||
* might starve the poor dear.
|
||||
* the bugger. If this is the first packet that is
|
||||
* authenticated, flush the clock filter. This is to foil
|
||||
* clogging attacks that might starve the poor dear.
|
||||
*/
|
||||
peer->flash = 0;
|
||||
if (is_authentic)
|
||||
peer->flags |= FLAG_AUTHENTIC;
|
||||
else
|
||||
peer->flags &= ~FLAG_AUTHENTIC;
|
||||
if (peer->hmode == MODE_BROADCAST && (restrict_mask & RES_DONTTRUST))
|
||||
if (peer->hmode == MODE_BROADCAST && (restrict_mask &
|
||||
RES_DONTTRUST))
|
||||
peer->flash |= TEST10; /* access denied */
|
||||
if (peer->flags & FLAG_AUTHENABLE) {
|
||||
if (!(peer->flags & FLAG_AUTHENTIC))
|
||||
peer->flash |= TEST5; /* authentication failed */
|
||||
peer->flash |= TEST5; /* auth failed */
|
||||
else if (skeyid == 0)
|
||||
peer->flash |= TEST9; /* peer not authenticated */
|
||||
peer->flash |= TEST9; /* peer not auth */
|
||||
else if (!(oflags & FLAG_AUTHENABLE)) {
|
||||
peer_clear(peer);
|
||||
report_event(EVNT_PEERAUTH, peer);
|
||||
@ -596,10 +613,10 @@ receive(
|
||||
if ((peer->flash & ~(u_int)TEST9) != 0) {
|
||||
|
||||
/*
|
||||
* The packet is bogus, so we throw it away before becoming
|
||||
* a denial-of-service hazard. We don't throw the current
|
||||
* association away if it is configured or if it has prior
|
||||
* reachable friends.
|
||||
* The packet is bogus, so we throw it away before
|
||||
* becoming a denial-of-service hazard. We don't throw
|
||||
* the current association away if it is configured or
|
||||
* if it has prior reachable friends.
|
||||
*/
|
||||
if (!is_mystic && skeyid > NTP_MAXKEY)
|
||||
authtrust(skeyid, 0);
|
||||
@ -617,8 +634,8 @@ receive(
|
||||
#ifdef MD5
|
||||
/*
|
||||
* The autokey dance. The cha-cha requires that the hash of the
|
||||
* current session key matches the previous key identifier. Heaps
|
||||
* of trouble if the steps falter.
|
||||
* current session key matches the previous key identifier.
|
||||
* Heaps of trouble if the steps falter.
|
||||
*/
|
||||
if (skeyid > NTP_MAXKEY) {
|
||||
int i;
|
||||
@ -633,7 +650,8 @@ receive(
|
||||
} else if (peer->flags & FLAG_MCAST2) {
|
||||
if (peer->pkeyid > NTP_MAXKEY)
|
||||
authtrust(peer->pkeyid, 0);
|
||||
for (i = 0; i < 4 && tkeyid != peer->pkeyid; i++) {
|
||||
for (i = 0; i < 4 && tkeyid != peer->pkeyid;
|
||||
i++) {
|
||||
tkeyid = session_key(
|
||||
ntohl((&rbufp->recv_srcadr)->sin_addr.s_addr),
|
||||
ntohl(rbufp->dstadr->bcast.sin_addr.s_addr),
|
||||
@ -642,7 +660,8 @@ receive(
|
||||
} else {
|
||||
if (peer->pkeyid > NTP_MAXKEY)
|
||||
authtrust(peer->pkeyid, 0);
|
||||
for (i = 0; i < 4 && tkeyid != peer->pkeyid; i++) {
|
||||
for (i = 0; i < 4 && tkeyid != peer->pkeyid;
|
||||
i++) {
|
||||
tkeyid = session_key(
|
||||
ntohl((&rbufp->recv_srcadr)->sin_addr.s_addr),
|
||||
ntohl(rbufp->dstadr->sin.sin_addr.s_addr),
|
||||
@ -658,9 +677,10 @@ receive(
|
||||
#endif /* MD5 */
|
||||
|
||||
/*
|
||||
* Gawdz, it's come to this. Process the dang packet. If something
|
||||
* breaks and the association doesn't deserve to live, toss it.
|
||||
* Be careful in active mode and return a packet anyway.
|
||||
* Gawdz, it's come to this. Process the dang packet. If
|
||||
* something breaks and the association doesn't deserve to live,
|
||||
* toss it. Be careful in active mode and return a packet
|
||||
* anyway.
|
||||
*/
|
||||
process_packet(peer, pkt, &(rbufp->recv_time));
|
||||
if (!(peer->flags & FLAG_CONFIG) && peer->reach == 0) {
|
||||
@ -810,15 +830,15 @@ process_packet(
|
||||
p_disp = CLOCK_PHI * (peer->rec.l_ui - p_org.l_ui);
|
||||
|
||||
/*
|
||||
* If running in a broadcast association, the clock offset is (t1
|
||||
* - t0) corrected by the one-way delay, but we can't measure
|
||||
* that directly; therefore, we start up in client/server mode,
|
||||
* calculate the clock offset, using the engineered refinement
|
||||
* algorithms, while also receiving broadcasts. When a broadcast
|
||||
* is received in client/server mode, we calculate a correction
|
||||
* factor to use after switching back to broadcast mode. We know
|
||||
* NTP_SKEWFACTOR == 16, which accounts for the simplified ei
|
||||
* calculation.
|
||||
* If running in a broadcast association, the clock offset is
|
||||
* (t1 - t0) corrected by the one-way delay, but we can't
|
||||
* measure that directly; therefore, we start up in
|
||||
* client/server mode, calculate the clock offset, using the
|
||||
* engineered refinement algorithms, while also receiving
|
||||
* broadcasts. When a broadcast is received in client/server
|
||||
* mode, we calculate a correction factor to use after switching
|
||||
* back to broadcast mode. We know NTP_SKEWFACTOR == 16, which
|
||||
* accounts for the simplified ei calculation.
|
||||
*
|
||||
* If FLAG_MCAST2 is set, we are a broadcast/multicast client.
|
||||
* If FLAG_MCAST1 is set, we haven't calculated the propagation
|
||||
@ -868,7 +888,8 @@ process_packet(
|
||||
clock_filter(peer, p_offset, p_del, fabs(p_disp));
|
||||
clock_select();
|
||||
record_peer_stats(&peer->srcadr, ctlpeerstatus(peer),
|
||||
peer->offset, peer->delay, peer->disp, SQRT(peer->variance));
|
||||
peer->offset, peer->delay, peer->disp,
|
||||
SQRT(peer->variance));
|
||||
return(1);
|
||||
}
|
||||
|
||||
@ -941,7 +962,8 @@ clock_update(void)
|
||||
else
|
||||
sys_refid = sys_peer->srcadr.sin_addr.s_addr;
|
||||
sys_reftime = sys_peer->rec;
|
||||
sys_rootdelay = sys_peer->rootdelay + fabs(sys_peer->delay);
|
||||
sys_rootdelay = sys_peer->rootdelay +
|
||||
fabs(sys_peer->delay);
|
||||
sys_leap = leap_consensus;
|
||||
}
|
||||
if (oleap != sys_leap)
|
||||
@ -992,14 +1014,15 @@ poll_update(
|
||||
else
|
||||
peer->nextdate += RANDPOLL(BURST_INTERVAL1);
|
||||
} else {
|
||||
update = max(min(peer->ppoll, peer->hpoll), peer->minpoll);
|
||||
update = max(min(peer->ppoll, peer->hpoll),
|
||||
peer->minpoll);
|
||||
peer->nextdate = peer->outdate + RANDPOLL(update);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (debug > 1)
|
||||
printf("poll_update: at %lu %s poll %d burst %d last %lu next %lu\n",
|
||||
current_time, ntoa(&peer->srcadr), hpoll, peer->burst,
|
||||
peer->outdate, peer->nextdate);
|
||||
current_time, ntoa(&peer->srcadr), hpoll,
|
||||
peer->burst, peer->outdate, peer->nextdate);
|
||||
#endif
|
||||
}
|
||||
|
||||
@ -1079,7 +1102,8 @@ clock_filter(
|
||||
*/
|
||||
peer->filter_offset[peer->filter_nextpt] = sample_offset;
|
||||
peer->filter_delay[peer->filter_nextpt] = sample_delay;
|
||||
x = LOGTOD(peer->precision) + LOGTOD(sys_precision) + sample_disp;
|
||||
x = LOGTOD(peer->precision) + LOGTOD(sys_precision) +
|
||||
sample_disp;
|
||||
peer->filter_disp[peer->filter_nextpt] = min(x, MAXDISPERSE);
|
||||
peer->filter_epoch[peer->filter_nextpt] = current_time;
|
||||
distance[0] = min(x + fabs(sample_delay) / 2, MAXDISTANCE);
|
||||
@ -1115,7 +1139,8 @@ clock_filter(
|
||||
x = NTP_FWEIGHT * (x + peer->filter_disp[ord[i]]);
|
||||
if (i < n) {
|
||||
z += 1. / distance[i];
|
||||
off += peer->filter_offset[ord[i]] / distance[i];
|
||||
off += peer->filter_offset[ord[i]] /
|
||||
distance[i];
|
||||
y += DIFF(peer->filter_offset[ord[i]],
|
||||
peer->filter_offset[ord[0]]);
|
||||
}
|
||||
@ -1239,7 +1264,7 @@ clock_select(void)
|
||||
peer->flags &= ~FLAG_SYSPEER;
|
||||
peer->status = CTL_PST_SEL_REJECT;
|
||||
if (peer->flags & FLAG_NOSELECT)
|
||||
continue; /* noselect (survey only) */
|
||||
continue; /* noselect (survey) */
|
||||
if (peer->reach == 0)
|
||||
continue; /* unreachable */
|
||||
if (peer->stratum > 1 && peer->refid ==
|
||||
@ -1248,7 +1273,7 @@ clock_select(void)
|
||||
if (root_distance(peer) >= MAXDISTANCE + 2 *
|
||||
CLOCK_PHI * ULOGTOD(sys_poll)) {
|
||||
peer->seldisptoolarge++;
|
||||
continue; /* too noisy or broken */
|
||||
continue; /* noisy or broken */
|
||||
}
|
||||
|
||||
/*
|
||||
@ -1321,7 +1346,7 @@ clock_select(void)
|
||||
if (debug > 1)
|
||||
for (i = 0; i < nl3; i++)
|
||||
printf("select: endpoint %2d %.6f\n",
|
||||
endpoint[index[i]].type, endpoint[index[i]].val);
|
||||
endpoint[index[i]].type, endpoint[index[i]].val);
|
||||
#endif
|
||||
i = 0;
|
||||
j = nl3 - 1;
|
||||
@ -1367,9 +1392,10 @@ clock_select(void)
|
||||
} else {
|
||||
if (sys_peer != 0) {
|
||||
report_event(EVNT_PEERSTCHG,
|
||||
(struct peer *)0);
|
||||
(struct peer *)0);
|
||||
NLOG(NLOG_SYNCSTATUS)
|
||||
msyslog(LOG_INFO, "synchronisation lost");
|
||||
msyslog(LOG_INFO,
|
||||
"synchronisation lost");
|
||||
}
|
||||
sys_peer = 0;
|
||||
return;
|
||||
@ -1416,7 +1442,7 @@ clock_select(void)
|
||||
if (debug > 1)
|
||||
for (i = 0; i < nlist; i++)
|
||||
printf("select: %s distance %.6f\n",
|
||||
ntoa(&peer_list[i]->srcadr), synch[i]);
|
||||
ntoa(&peer_list[i]->srcadr), synch[i]);
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -1506,7 +1532,8 @@ clock_select(void)
|
||||
typesystem = peer_list[i];
|
||||
if (peer_list[i]->flags & FLAG_PREFER) {
|
||||
typeprefer = peer_list[i];
|
||||
if (fabs(typeprefer->offset) < clock_max)
|
||||
if (fabs(typeprefer->offset) <
|
||||
clock_max)
|
||||
pps_update = 1;
|
||||
}
|
||||
} else {
|
||||
@ -1519,24 +1546,26 @@ clock_select(void)
|
||||
* Mitigation rules of the game. There are several types of
|
||||
* peers that make a difference here: (1) prefer local peers
|
||||
* (type REFCLK_LOCALCLOCK with FLAG_PREFER) or prefer modem
|
||||
* peers (type REFCLK_NIST_ATOM etc with FLAG_PREFER), (2) pps peers
|
||||
* (type REFCLK_ATOM_PPS), (3) remaining prefer peers (flag
|
||||
* FLAG_PREFER), (4) the existing system peer, if any, (5) the
|
||||
* head of the survivor list. Note that only one peer can be
|
||||
* peers (type REFCLK_NIST_ATOM etc with FLAG_PREFER), (2) pps
|
||||
* peers (type REFCLK_ATOM_PPS), (3) remaining prefer peers
|
||||
* (flag FLAG_PREFER), (4) the existing system peer, if any, (5)
|
||||
* the head of the survivor list. Note that only one peer can be
|
||||
* declared prefer. The order of preference is in the order
|
||||
* stated. Note that all of these must be at the lowest stratum,
|
||||
* i.e., the stratum of the head of the survivor list.
|
||||
*/
|
||||
osys_peer = sys_peer;
|
||||
if (typeprefer && (typeprefer->refclktype == REFCLK_LOCALCLOCK ||
|
||||
typeprefer->sstclktype == CTL_SST_TS_TELEPHONE || !typepps)) {
|
||||
if (typeprefer && (typeprefer->refclktype == REFCLK_LOCALCLOCK
|
||||
|| typeprefer->sstclktype == CTL_SST_TS_TELEPHONE ||
|
||||
!typepps)) {
|
||||
sys_peer = typeprefer;
|
||||
sys_peer->status = CTL_PST_SEL_SYSPEER;
|
||||
sys_offset = sys_peer->offset;
|
||||
sys_epsil = sys_peer->variance;
|
||||
#ifdef DEBUG
|
||||
if (debug > 1)
|
||||
printf("select: prefer offset %.6f\n", sys_offset);
|
||||
printf("select: prefer offset %.6f\n",
|
||||
sys_offset);
|
||||
#endif
|
||||
} else if (typepps && pps_update) {
|
||||
sys_peer = typepps;
|
||||
@ -1650,15 +1679,18 @@ peer_xmit(
|
||||
if (peer->flags & FLAG_SKEY) {
|
||||
|
||||
/*
|
||||
* In SKEY mode, allocate and initialize a key list if
|
||||
* not already done. Then, use the list in inverse
|
||||
* order, discarding keys once used. Keep the latest
|
||||
* key around until the next one, so clients can use
|
||||
* client/server packets to compute propagation delay.
|
||||
* Note we have to wait until the receive side of the
|
||||
* socket is bound and the server address confirmed.
|
||||
* In autokey mode, allocate and initialize a
|
||||
* key list if not already done. Then, use the
|
||||
* list in inverse order, discarding keys once
|
||||
* used. Keep the latest key around until the
|
||||
* next one, so clients can use client/server
|
||||
* packets to compute propagation delay. Note we
|
||||
* have to wait until the receive side of the
|
||||
* socket is bound and the server address
|
||||
* confirmed.
|
||||
*/
|
||||
if (ntohl(peer->dstadr->sin.sin_addr.s_addr) == 0 &&
|
||||
if (ntohl(peer->dstadr->sin.sin_addr.s_addr) ==
|
||||
0 &&
|
||||
ntohl(peer->dstadr->bcast.sin_addr.s_addr) == 0)
|
||||
peer->keyid = 0;
|
||||
else {
|
||||
@ -1686,13 +1718,13 @@ peer_xmit(
|
||||
get_systime(&peer->xmt);
|
||||
L_ADD(&peer->xmt, &sys_authdelay);
|
||||
HTONL_FP(&peer->xmt, &xpkt.xmt);
|
||||
sendlen += authencrypt(xkeyid, (u_int32 *)&xpkt, sendlen);
|
||||
sendlen += authencrypt(xkeyid, (u_int32 *)&xpkt,
|
||||
sendlen);
|
||||
get_systime(&xmt_tx);
|
||||
sendpkt(&peer->srcadr, find_rtt ? any_interface :
|
||||
peer->dstadr,
|
||||
((peer->cast_flags & MDF_MCAST) && !find_rtt) ?
|
||||
((peer->cast_flags & MDF_ACAST) ? -7 : peer->ttl) : -7,
|
||||
&xpkt, sendlen);
|
||||
peer->dstadr, ((peer->cast_flags & MDF_MCAST) &&
|
||||
!find_rtt) ? ((peer->cast_flags & MDF_ACAST) ? -7 :
|
||||
peer->ttl) : -7, &xpkt, sendlen);
|
||||
|
||||
/*
|
||||
* Calculate the encryption delay. Keep the minimum over
|
||||
@ -1710,9 +1742,9 @@ peer_xmit(
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf(
|
||||
"transmit: at %ld to %s mode %d keyid %08lx index %d\n",
|
||||
current_time, ntoa(&peer->srcadr),
|
||||
peer->hmode, xkeyid, peer->keynumber);
|
||||
"transmit: at %ld to %s mode %d keyid %08lx index %d\n",
|
||||
current_time, ntoa(&peer->srcadr),
|
||||
peer->hmode, xkeyid, peer->keynumber);
|
||||
#endif
|
||||
} else {
|
||||
/*
|
||||
@ -1721,10 +1753,9 @@ peer_xmit(
|
||||
get_systime(&(peer->xmt));
|
||||
HTONL_FP(&peer->xmt, &xpkt.xmt);
|
||||
sendpkt(&(peer->srcadr), find_rtt ? any_interface :
|
||||
peer->dstadr,
|
||||
((peer->cast_flags & MDF_MCAST) && !find_rtt) ?
|
||||
((peer->cast_flags & MDF_ACAST) ? -7 : peer->ttl) : -8,
|
||||
&xpkt, sendlen);
|
||||
peer->dstadr, ((peer->cast_flags & MDF_MCAST) &&
|
||||
!find_rtt) ? ((peer->cast_flags & MDF_ACAST) ? -7 :
|
||||
peer->ttl) : -8, &xpkt, sendlen);
|
||||
peer->sent++;
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
@ -1783,10 +1814,11 @@ fast_xmit(
|
||||
get_systime(&xmt_ts);
|
||||
L_ADD(&xmt_ts, &sys_authdelay);
|
||||
HTONL_FP(&xmt_ts, &xpkt.xmt);
|
||||
sendlen += authencrypt(xkeyid, (u_int32 *)&xpkt, sendlen);
|
||||
sendlen += authencrypt(xkeyid, (u_int32 *)&xpkt,
|
||||
sendlen);
|
||||
get_systime(&xmt_tx);
|
||||
sendpkt(&rbufp->recv_srcadr, rbufp->dstadr, -9, &xpkt,
|
||||
sendlen);
|
||||
sendlen);
|
||||
|
||||
/*
|
||||
* Calculate the encryption delay. Keep the minimum over
|
||||
@ -1803,9 +1835,9 @@ fast_xmit(
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf(
|
||||
"transmit: at %ld to %s mode %d keyid %08lx\n",
|
||||
current_time, ntoa(&rbufp->recv_srcadr),
|
||||
xmode, xkeyid);
|
||||
"transmit: at %ld to %s mode %d keyid %08lx\n",
|
||||
current_time, ntoa(&rbufp->recv_srcadr),
|
||||
xmode, xkeyid);
|
||||
#endif
|
||||
} else {
|
||||
|
||||
@ -1868,15 +1900,14 @@ make_keylist(
|
||||
peer->keylist[i] = keyid;
|
||||
peer->keynumber = i;
|
||||
keyid = session_key(
|
||||
ntohl(peer->dstadr->sin.sin_addr.s_addr),
|
||||
(peer->hmode == MODE_BROADCAST || (peer->flags &
|
||||
FLAG_MCAST2)) ?
|
||||
ntohl(peer->dstadr->bcast.sin_addr.s_addr):
|
||||
ntohl(peer->srcadr.sin_addr.s_addr),
|
||||
keyid, ltemp);
|
||||
ntohl(peer->dstadr->sin.sin_addr.s_addr),
|
||||
(peer->hmode == MODE_BROADCAST || (peer->flags &
|
||||
FLAG_MCAST2)) ?
|
||||
ntohl(peer->dstadr->bcast.sin_addr.s_addr):
|
||||
ntohl(peer->srcadr.sin_addr.s_addr), keyid, ltemp);
|
||||
ltemp -= 1 << peer->hpoll;
|
||||
if (auth_havekey(keyid) || keyid <= NTP_MAXKEY ||
|
||||
ltemp <= (1 << (peer->hpoll + 1)))
|
||||
ltemp <= (1 << (peer->hpoll + 1)))
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -1925,23 +1956,21 @@ default_get_precision(void)
|
||||
#endif
|
||||
#if defined(__FreeBSD__) && __FreeBSD__ >= 3
|
||||
u_long freq;
|
||||
int j;
|
||||
size_t j;
|
||||
|
||||
/* Try to see if we can find the frequency of of the counter
|
||||
* which drives our timekeeping
|
||||
*/
|
||||
j = sizeof freq;
|
||||
i = sysctlbyname("kern.timecounter.frequency",
|
||||
&freq, &j , 0, 0);
|
||||
i = sysctlbyname("kern.timecounter.frequency", &freq, &j , 0,
|
||||
0);
|
||||
if (i)
|
||||
i = sysctlbyname("machdep.tsc_freq",
|
||||
&freq, &j , 0, 0);
|
||||
i = sysctlbyname("machdep.tsc_freq", &freq, &j , 0, 0);
|
||||
if (i)
|
||||
i = sysctlbyname("machdep.i586_freq",
|
||||
&freq, &j , 0, 0);
|
||||
i = sysctlbyname("machdep.i586_freq", &freq, &j , 0, 0);
|
||||
if (i)
|
||||
i = sysctlbyname("machdep.i8254_freq",
|
||||
&freq, &j , 0, 0);
|
||||
i = sysctlbyname("machdep.i8254_freq", &freq, &j , 0,
|
||||
0);
|
||||
if (!i) {
|
||||
for (i = 1; freq ; i--)
|
||||
freq >>= 1;
|
||||
@ -1977,7 +2006,7 @@ default_get_precision(void)
|
||||
val = diff;
|
||||
}
|
||||
}
|
||||
NLOG(NLOG_SYSINFO) /* conditional if clause for conditional syslog */
|
||||
NLOG(NLOG_SYSINFO)
|
||||
msyslog(LOG_INFO, "precision = %ld usec", val);
|
||||
if (usec >= HUSECS)
|
||||
val = MINSTEP; /* val <= MINSTEP; fast machine */
|
||||
@ -2042,9 +2071,9 @@ init_proto(void)
|
||||
* Some system clocks should only be adjusted in 10ms increments.
|
||||
*/
|
||||
#if defined RELIANTUNIX_CLOCK
|
||||
systime_10ms_ticks = 1; /* Reliant UNIX */
|
||||
systime_10ms_ticks = 1; /* Reliant UNIX */
|
||||
#elif defined SCO5_CLOCK
|
||||
if (sys_precision >= (s_char)-10) /* pre- SCO OpenServer 5.0.6 */
|
||||
if (sys_precision >= (s_char)-10) /* pre-SCO OpenServer 5.0.6 */
|
||||
systime_10ms_ticks = 1;
|
||||
#endif
|
||||
if (systime_10ms_ticks)
|
||||
@ -2066,21 +2095,24 @@ proto_config(
|
||||
* Figure out what he wants to change, then do it
|
||||
*/
|
||||
switch (item) {
|
||||
case PROTO_KERNEL:
|
||||
case PROTO_KERNEL:
|
||||
|
||||
/*
|
||||
* Turn on/off kernel discipline
|
||||
*/
|
||||
kern_enable = (int)value;
|
||||
break;
|
||||
|
||||
case PROTO_NTP:
|
||||
case PROTO_NTP:
|
||||
|
||||
/*
|
||||
* Turn on/off clock discipline
|
||||
*/
|
||||
ntp_enable = (int)value;
|
||||
break;
|
||||
|
||||
case PROTO_MONITOR:
|
||||
case PROTO_MONITOR:
|
||||
|
||||
/*
|
||||
* Turn on/off monitoring
|
||||
*/
|
||||
@ -2090,14 +2122,16 @@ proto_config(
|
||||
mon_stop(MON_ON);
|
||||
break;
|
||||
|
||||
case PROTO_FILEGEN:
|
||||
case PROTO_FILEGEN:
|
||||
|
||||
/*
|
||||
* Turn on/off statistics
|
||||
*/
|
||||
stats_control = (int)value;
|
||||
break;
|
||||
|
||||
case PROTO_BROADCLIENT:
|
||||
case PROTO_BROADCLIENT:
|
||||
|
||||
/*
|
||||
* Turn on/off facility to listen to broadcasts
|
||||
*/
|
||||
@ -2108,39 +2142,45 @@ proto_config(
|
||||
io_unsetbclient();
|
||||
break;
|
||||
|
||||
case PROTO_MULTICAST_ADD:
|
||||
case PROTO_MULTICAST_ADD:
|
||||
|
||||
/*
|
||||
* Add muliticast group address
|
||||
*/
|
||||
io_multicast_add(value);
|
||||
break;
|
||||
|
||||
case PROTO_MULTICAST_DEL:
|
||||
case PROTO_MULTICAST_DEL:
|
||||
|
||||
/*
|
||||
* Delete multicast group address
|
||||
*/
|
||||
io_multicast_del(value);
|
||||
break;
|
||||
|
||||
case PROTO_BROADDELAY:
|
||||
case PROTO_BROADDELAY:
|
||||
|
||||
/*
|
||||
* Set default broadcast delay
|
||||
*/
|
||||
sys_bdelay = dvalue;
|
||||
break;
|
||||
|
||||
case PROTO_AUTHENTICATE:
|
||||
case PROTO_AUTHENTICATE:
|
||||
|
||||
/*
|
||||
* Specify the use of authenticated data
|
||||
*/
|
||||
sys_authenticate = (int)value;
|
||||
break;
|
||||
|
||||
default:
|
||||
default:
|
||||
|
||||
/*
|
||||
* Log this error
|
||||
*/
|
||||
msyslog(LOG_ERR, "proto_config: illegal item %d, value %ld",
|
||||
msyslog(LOG_ERR,
|
||||
"proto_config: illegal item %d, value %ld",
|
||||
item, value);
|
||||
break;
|
||||
}
|
||||
|
@ -20,11 +20,12 @@
|
||||
#ifdef REFCLOCK
|
||||
|
||||
#ifdef TTYCLK
|
||||
# ifdef SCO5_CLOCK
|
||||
# include <sys/sio.h>
|
||||
# else
|
||||
# ifdef HAVE_SYS_CLKDEFS_H
|
||||
# include <sys/clkdefs.h>
|
||||
# endif
|
||||
# ifdef HAVE_SYS_SIO_H
|
||||
# include <sys/sio.h>
|
||||
# endif
|
||||
#endif /* TTYCLK */
|
||||
|
||||
#ifdef HAVE_PPSCLOCK_H
|
||||
@ -32,7 +33,13 @@
|
||||
#endif /* HAVE_PPSCLOCK_H */
|
||||
|
||||
#ifdef HAVE_PPSAPI
|
||||
#include <sys/timepps.h>
|
||||
# ifdef HAVE_TIMEPPS_H
|
||||
# include <timepps.h>
|
||||
# else
|
||||
# ifdef HAVE_SYS_TIMEPPS_H
|
||||
# include <sys/timepps.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif /* HAVE_PPSAPI */
|
||||
|
||||
/*
|
||||
@ -755,10 +762,11 @@ int
|
||||
refclock_open(
|
||||
char *dev, /* device name pointer */
|
||||
int speed, /* serial port speed (code) */
|
||||
int flags /* line discipline flags */
|
||||
int lflags /* line discipline flags */
|
||||
)
|
||||
{
|
||||
int fd, i;
|
||||
int flags;
|
||||
#ifdef HAVE_TERMIOS
|
||||
struct termios ttyb, *ttyp;
|
||||
#endif /* HAVE_TERMIOS */
|
||||
@ -775,6 +783,9 @@ refclock_open(
|
||||
/*
|
||||
* Open serial port and set default options
|
||||
*/
|
||||
flags = lflags;
|
||||
if (strcmp(dev, pps_device) == 0)
|
||||
flags |= LDISC_PPS;
|
||||
#ifdef O_NONBLOCK
|
||||
fd = open(dev, O_RDWR | O_NONBLOCK, 0777);
|
||||
#else
|
||||
@ -936,12 +947,6 @@ refclock_open(
|
||||
"refclock_open: fd %d ioctl failed: %m", fd);
|
||||
return (0);
|
||||
}
|
||||
|
||||
/*
|
||||
* If this is the PPS device, so say and initialize the thing.
|
||||
*/
|
||||
if (strcmp(dev, pps_device) == 0)
|
||||
(void)refclock_ioctl(fd, LDISC_PPS);
|
||||
return (fd);
|
||||
}
|
||||
#endif /* HAVE_TERMIOS || HAVE_SYSV_TTYS || HAVE_BSD_TTYS */
|
||||
|
@ -108,13 +108,13 @@
|
||||
#define SIGDIE4 SIGTERM
|
||||
#endif /* SYS_WINNT */
|
||||
|
||||
#if defined SYS_WINNT || defined SYS_CYGWIN32
|
||||
#if defined SYS_WINNT
|
||||
/* handles for various threads, process, and objects */
|
||||
HANDLE ResolverThreadHandle = NULL;
|
||||
/* variables used to inform the Service Control Manager of our current state */
|
||||
SERVICE_STATUS ssStatus;
|
||||
SERVICE_STATUS_HANDLE sshStatusHandle;
|
||||
HANDLE WaitHandles[3] = { NULL, NULL, NULL };
|
||||
HANDLE WaitHandles[2] = { NULL, NULL };
|
||||
char szMsgPath[255];
|
||||
static BOOL WINAPI OnConsoleEvent(DWORD dwCtrlType);
|
||||
#endif /* SYS_WINNT */
|
||||
@ -122,11 +122,7 @@ static BOOL WINAPI OnConsoleEvent(DWORD dwCtrlType);
|
||||
/*
|
||||
* Scheduling priority we run at
|
||||
*/
|
||||
#if !defined SYS_WINNT
|
||||
# define NTPD_PRIO (-12)
|
||||
#else
|
||||
# define NTPD_PRIO REALTIME_PRIORITY_CLASS
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Debugging flag
|
||||
@ -230,13 +226,35 @@ set_process_priority(void)
|
||||
int done = 0;
|
||||
|
||||
#ifdef SYS_WINNT
|
||||
DWORD SingleCPUMask = 0;
|
||||
DWORD ProcessAffinityMask, SystemAffinityMask;
|
||||
if (!GetProcessAffinityMask(GetCurrentProcess(), &ProcessAffinityMask, &SystemAffinityMask))
|
||||
msyslog(LOG_ERR, "GetProcessAffinityMask: %m");
|
||||
else {
|
||||
SingleCPUMask = 1;
|
||||
# ifdef DEBUG
|
||||
msyslog(LOG_INFO, "System AffinityMask = %x", SystemAffinityMask );
|
||||
# endif
|
||||
}
|
||||
while (SingleCPUMask && !(SingleCPUMask & SystemAffinityMask)) {
|
||||
SingleCPUMask = SingleCPUMask << 1;
|
||||
}
|
||||
|
||||
if (!SingleCPUMask)
|
||||
msyslog(LOG_ERR, "Can't set Processor Affinity Mask");
|
||||
else if (!SetProcessAffinityMask(GetCurrentProcess(), SingleCPUMask))
|
||||
msyslog(LOG_ERR, "SetProcessAffinityMask: %m");
|
||||
# ifdef DEBUG
|
||||
else msyslog(LOG_INFO,"ProcessorAffinity Mask: %x", SingleCPUMask );
|
||||
# endif
|
||||
|
||||
if (!SetPriorityClass(GetCurrentProcess(), (DWORD) REALTIME_PRIORITY_CLASS))
|
||||
msyslog(LOG_ERR, "SetPriorityClass: %m");
|
||||
else
|
||||
++done;
|
||||
#else /* not SYS_WINNT */
|
||||
# if defined(HAVE_SCHED_SETSCHEDULER)
|
||||
#endif
|
||||
|
||||
# if defined(HAVE_SCHED_SETSCHEDULER)
|
||||
if (!done) {
|
||||
extern int config_priority_override, config_priority;
|
||||
int pmax, pmin;
|
||||
@ -300,11 +318,11 @@ set_process_priority(void)
|
||||
}
|
||||
# endif /* HAVE_BSD_NICE */
|
||||
# endif /* NTPD_PRIO && NTPD_PRIO != 0 */
|
||||
#endif /* not SYS_WINNT */
|
||||
if (!done)
|
||||
msyslog(LOG_ERR, "set_process_priority: No way found to improve our priority");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Main program. Initialize us, disconnect us from the tty if necessary,
|
||||
* and loop waiting for I/O and/or timer expiries.
|
||||
@ -549,7 +567,6 @@ service_main(
|
||||
# define LOG_NTP LOG_DAEMON
|
||||
# endif
|
||||
openlog(cp, LOG_PID | LOG_NDELAY, LOG_NTP);
|
||||
#ifndef SYS_CYGWIN32
|
||||
# ifdef DEBUG
|
||||
if (debug)
|
||||
setlogmask(LOG_UPTO(LOG_DEBUG));
|
||||
@ -557,8 +574,6 @@ service_main(
|
||||
# endif /* DEBUG */
|
||||
setlogmask(LOG_UPTO(LOG_DEBUG)); /* @@@ was INFO */
|
||||
# endif /* LOG_DAEMON */
|
||||
#endif
|
||||
|
||||
#endif /* !SYS_WINNT && !VMS */
|
||||
|
||||
NLOG(NLOG_SYSINFO) /* conditional if clause for conditional syslog */
|
||||
@ -669,7 +684,7 @@ service_main(
|
||||
/*
|
||||
* Set up signals we should never pay attention to.
|
||||
*/
|
||||
#if defined SIGPIPE && !defined SYS_CYGWIN32
|
||||
#if defined SIGPIPE
|
||||
(void) signal_no_reset(SIGPIPE, SIG_IGN);
|
||||
#endif /* SIGPIPE */
|
||||
|
||||
@ -759,33 +774,20 @@ service_main(
|
||||
* yet to learn about anything else that is.
|
||||
*/
|
||||
# if defined(HAVE_IO_COMPLETION_PORT)
|
||||
{
|
||||
WaitHandles[0] = CreateEvent(NULL, FALSE, FALSE, NULL); /* exit reques */
|
||||
WaitHandles[1] = get_recv_buff_event();
|
||||
WaitHandles[2] = get_timer_handle();
|
||||
WaitHandles[1] = get_timer_handle();
|
||||
|
||||
for (;;) {
|
||||
DWORD Index = MsgWaitForMultipleObjectsEx(sizeof(WaitHandles)/sizeof(WaitHandles[0]), WaitHandles, INFINITE, QS_ALLEVENTS, MWMO_ALERTABLE);
|
||||
DWORD Index = WaitForMultipleObjectsEx(sizeof(WaitHandles)/sizeof(WaitHandles[0]), WaitHandles, FALSE, 1000, MWMO_ALERTABLE);
|
||||
switch (Index) {
|
||||
case WAIT_OBJECT_0 + 0 : /* exit request */
|
||||
exit(0);
|
||||
break;
|
||||
|
||||
case WAIT_OBJECT_0 + 1 : {/* recv buffer */
|
||||
if (NULL != (rbuf = get_full_recv_buffer())) {
|
||||
if (rbuf->receiver != NULL) {
|
||||
rbuf->receiver(rbuf);
|
||||
}
|
||||
freerecvbuf(rbuf);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case WAIT_OBJECT_0 + 2 : /* 1 second timer */
|
||||
case WAIT_OBJECT_0 + 1 : /* timer */
|
||||
timer();
|
||||
break;
|
||||
|
||||
case WAIT_OBJECT_0 + 3 : { /* Windows message */
|
||||
case WAIT_OBJECT_0 + 2 : { /* Windows message */
|
||||
MSG msg;
|
||||
while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) {
|
||||
if (msg.message == WM_QUIT) {
|
||||
@ -800,10 +802,9 @@ service_main(
|
||||
case WAIT_TIMEOUT :
|
||||
break;
|
||||
|
||||
}
|
||||
} /* switch */
|
||||
rbuflist = getrecvbufs(); /* get received buffers */
|
||||
|
||||
}
|
||||
}
|
||||
# else /* normal I/O */
|
||||
|
||||
was_alarmed = 0;
|
||||
@ -858,7 +859,7 @@ service_main(
|
||||
else if (nfound == -1 && errno != EINTR)
|
||||
msyslog(LOG_ERR, "select() error: %m");
|
||||
else if (debug) {
|
||||
# if !defined SYS_VXWORKS && !defined SYS_CYGWIN32 && !defined SCO5_CLOCK /* to unclutter log */
|
||||
# if !defined SYS_VXWORKS && !defined SCO5_CLOCK /* to unclutter log */
|
||||
msyslog(LOG_DEBUG, "select(): nfound=%d, error: %m", nfound);
|
||||
# endif
|
||||
}
|
||||
@ -887,6 +888,7 @@ service_main(
|
||||
was_alarmed = 0;
|
||||
}
|
||||
|
||||
# endif /* HAVE_IO_COMPLETION_PORT */
|
||||
/*
|
||||
* Call the data procedure to handle each received
|
||||
* packet.
|
||||
@ -908,7 +910,6 @@ service_main(
|
||||
* Go around again
|
||||
*/
|
||||
}
|
||||
# endif /* HAVE_IO_COMPLETION_PORT */
|
||||
exit(1); /* unreachable */
|
||||
return 1; /* DEC OSF cc braindamage */
|
||||
}
|
||||
|
@ -26,7 +26,13 @@
|
||||
# include <sys/ppsclock.h>
|
||||
#endif
|
||||
#ifdef HAVE_PPSAPI
|
||||
#include <sys/timepps.h>
|
||||
# ifdef HAVE_TIMEPPS_H
|
||||
# include <timepps.h>
|
||||
# else
|
||||
# ifdef HAVE_SYS_TIMEPPS_H
|
||||
# include <sys/timepps.h>
|
||||
# endif
|
||||
# endif
|
||||
#endif /* HAVE_PPSAPI */
|
||||
|
||||
/*
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -42,7 +42,13 @@ extern struct refclock refclock_chu;
|
||||
#define refclock_chu refclock_none
|
||||
#endif
|
||||
|
||||
#ifdef CLOCK_WWVB
|
||||
#ifdef CLOCK_WWV
|
||||
extern struct refclock refclock_wwv;
|
||||
#else
|
||||
#define refclock_wwv refclock_none
|
||||
#endif
|
||||
|
||||
#ifdef CLOCK_SPECTRACOM
|
||||
extern struct refclock refclock_wwvb;
|
||||
#else
|
||||
#define refclock_wwvb refclock_none
|
||||
@ -168,7 +174,7 @@ extern struct refclock refclock_arc;
|
||||
#define refclock_arc refclock_none
|
||||
#endif
|
||||
|
||||
#ifdef SHM
|
||||
#ifdef CLOCK_SHM
|
||||
extern struct refclock refclock_shm;
|
||||
#else
|
||||
#define refclock_shm refclock_none
|
||||
@ -210,6 +216,18 @@ extern struct refclock refclock_ulink;
|
||||
#define refclock_ulink refclock_none
|
||||
#endif
|
||||
|
||||
#ifdef CLOCK_PCF
|
||||
extern struct refclock refclock_pcf;
|
||||
#else
|
||||
#define refclock_pcf refclock_none
|
||||
#endif
|
||||
|
||||
#ifdef CLOCK_FG
|
||||
extern struct refclock refclock_fg;
|
||||
#else
|
||||
#define refclock_fg refclock_none
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* Order is clock_start(), clock_shutdown(), clock_poll(),
|
||||
@ -222,10 +240,10 @@ struct refclock *refclock_conf[] = {
|
||||
&refclock_local, /* 1 REFCLK_LOCAL */
|
||||
&refclock_trak, /* 2 REFCLK_GPS_TRAK */
|
||||
&refclock_pst, /* 3 REFCLK_WWV_PST */
|
||||
&refclock_wwvb, /* 4 REFCLK_WWVB_SPECTRACOM */
|
||||
&refclock_wwvb, /* 4 REFCLK_SPECTRACOM */
|
||||
&refclock_true, /* 5 REFCLK_TRUETIME */
|
||||
&refclock_irig, /* 6 REFCLK_IRIG_AUDIO */
|
||||
&refclock_chu, /* 7 REFCLK_CHU */
|
||||
&refclock_chu, /* 7 REFCLK_CHU_AUDIO */
|
||||
&refclock_parse, /* 8 REFCLK_PARSE */
|
||||
&refclock_mx4200, /* 9 REFCLK_GPS_MX4200 */
|
||||
&refclock_as2201, /* 10 REFCLK_GPS_AS2201 */
|
||||
@ -253,6 +271,9 @@ struct refclock *refclock_conf[] = {
|
||||
&refclock_chronolog, /* 32 REFCLK_CHRONOLOG */
|
||||
&refclock_dumbclock, /* 33 REFCLK_DUMBCLOCK */
|
||||
&refclock_ulink, /* 34 REFCLOCK_ULINK */
|
||||
&refclock_pcf, /* 35 REFCLOCK_PCF */
|
||||
&refclock_wwv, /* 36 REFCLOCK_WWV_AUDIO */
|
||||
&refclock_fg /* 37 REFCLOCK_FG */
|
||||
};
|
||||
|
||||
u_char num_refclock_conf = sizeof(refclock_conf)/sizeof(struct refclock *);
|
||||
|
350
contrib/ntp/ntpd/refclock_fg.c
Normal file
350
contrib/ntp/ntpd/refclock_fg.c
Normal file
@ -0,0 +1,350 @@
|
||||
/*
|
||||
* refclock_fg - clock driver for the Forum Graphic GPS datating station
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined(REFCLOCK) && defined(CLOCK_FG)
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "ntpd.h"
|
||||
#include "ntp_io.h"
|
||||
#include "ntp_refclock.h"
|
||||
#include "ntp_calendar.h"
|
||||
#include "ntp_stdlib.h"
|
||||
|
||||
/*
|
||||
* This driver supports the Forum Graphic GPS dating station.
|
||||
* More information about FG GPS is available on http://www.forumgraphic.com
|
||||
* Contact das@amt.ru for any question about this driver.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Interface definitions
|
||||
*/
|
||||
#define DEVICE "/dev/fgclock%d"
|
||||
#define PRECISION (-10) /* precision assumed (about 1 ms) */
|
||||
#define REFID "GPS"
|
||||
#define DESCRIPTION "Forum Graphic GPS dating station"
|
||||
#define LENFG 26 /* timecode length */
|
||||
#define SPEED232 B9600 /* uart speed (9600 baud) */
|
||||
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
static int fg_init P((int));
|
||||
static int fg_start P((int, struct peer *));
|
||||
static void fg_shutdown P((int, struct peer *));
|
||||
static void fg_poll P((int, struct peer *));
|
||||
static void fg_receive P((struct recvbuf *));
|
||||
|
||||
/*
|
||||
* Forum Graphic unit control structure
|
||||
*/
|
||||
|
||||
struct fgunit {
|
||||
int pollnum; /* Use peer.poll instead? */
|
||||
int status; /* Hug to check status information on GPS */
|
||||
int y2kwarn; /* Y2K bug */
|
||||
};
|
||||
|
||||
/*
|
||||
* Queries definition
|
||||
*/
|
||||
static char fginit[] = { 0x10, 0x48, 0x10, 0x0D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
static char fgdate[] = { 0x10, 0x44, 0x10, 0x0D, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||
0, 0, 0, 0, 0, 0, 0, 0, 0 };
|
||||
|
||||
/*
|
||||
* Transfer vector
|
||||
*/
|
||||
struct refclock refclock_fg = {
|
||||
fg_start, /* start up driver */
|
||||
fg_shutdown, /* shut down driver */
|
||||
fg_poll, /* transmit poll message */
|
||||
noentry, /* not used */
|
||||
noentry, /* initialize driver (not used) */
|
||||
noentry, /* not used */
|
||||
NOFLAGS /* not used */
|
||||
};
|
||||
|
||||
/*
|
||||
* fg_init - Initialization of FG GPS.
|
||||
*/
|
||||
|
||||
static int
|
||||
fg_init(
|
||||
int fd
|
||||
)
|
||||
{
|
||||
if (write(fd, fginit, LENFG) != LENFG)
|
||||
return 0;
|
||||
|
||||
return (1);
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* fg_start - open the device and initialize data for processing
|
||||
*/
|
||||
static int
|
||||
fg_start(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
struct fgunit *up;
|
||||
int fd;
|
||||
char device[20];
|
||||
|
||||
|
||||
/*
|
||||
* Open device file for reading.
|
||||
*/
|
||||
(void)sprintf(device, DEVICE, unit);
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf ("starting FG with device %s\n",device);
|
||||
#endif
|
||||
if (!(fd = refclock_open(device, SPEED232, LDISC_CLK)))
|
||||
return (0);
|
||||
|
||||
/*
|
||||
* Allocate and initialize unit structure
|
||||
*/
|
||||
|
||||
if (!(up = (struct fgunit *)
|
||||
emalloc(sizeof(struct fgunit)))) {
|
||||
(void) close(fd);
|
||||
return (0);
|
||||
}
|
||||
memset((char *)up, 0, sizeof(struct fgunit));
|
||||
pp = peer->procptr;
|
||||
pp->unitptr = (caddr_t)up;
|
||||
pp->io.clock_recv = fg_receive;
|
||||
pp->io.srcclock = (caddr_t)peer;
|
||||
pp->io.datalen = 0;
|
||||
pp->io.fd = fd;
|
||||
if (!io_addclock(&pp->io)) {
|
||||
(void) close(fd);
|
||||
return (0);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Initialize miscellaneous variables
|
||||
*/
|
||||
peer->precision = PRECISION;
|
||||
pp->clockdesc = DESCRIPTION;
|
||||
memcpy((char *)&pp->refid, REFID, 3);
|
||||
up->pollnum = 0;
|
||||
|
||||
/*
|
||||
* Setup dating station to use GPS receiver.
|
||||
* GPS receiver should work before this operation.
|
||||
*/
|
||||
if(!fg_init(pp->io.fd))
|
||||
refclock_report(peer, CEVNT_FAULT);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* fg_shutdown - shut down the clock
|
||||
*/
|
||||
static void
|
||||
fg_shutdown(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
struct fgunit *up;
|
||||
|
||||
pp = peer->procptr;
|
||||
up = (struct fgunit *)pp->unitptr;
|
||||
io_closeclock(&pp->io);
|
||||
free(up);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* fg_poll - called by the transmit procedure
|
||||
*/
|
||||
static void
|
||||
fg_poll(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
|
||||
pp = peer->procptr;
|
||||
|
||||
/*
|
||||
* Time to poll the clock. The FG clock responds to a
|
||||
* "<DLE>D<DLE><CR>" by returning a timecode in the format specified
|
||||
* above. If nothing is heard from the clock for two polls,
|
||||
* declare a timeout and keep going.
|
||||
*/
|
||||
|
||||
if (write(pp->io.fd, fgdate, LENFG) != LENFG)
|
||||
refclock_report(peer, CEVNT_FAULT);
|
||||
else
|
||||
pp->polls++;
|
||||
|
||||
if (peer->burst > 0)
|
||||
return;
|
||||
/*
|
||||
if (pp->coderecv == pp->codeproc) {
|
||||
refclock_report(peer, CEVNT_TIMEOUT);
|
||||
return;
|
||||
}
|
||||
*/
|
||||
peer->burst = NSTAGE;
|
||||
|
||||
record_clock_stats(&peer->srcadr, pp->a_lastcode);
|
||||
|
||||
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
* fg_receive - receive data from the serial interface
|
||||
*/
|
||||
static void
|
||||
fg_receive(
|
||||
struct recvbuf *rbufp
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
struct fgunit *up;
|
||||
struct peer *peer;
|
||||
char *bpt;
|
||||
|
||||
/*
|
||||
* Initialize pointers and read the timecode and timestamp
|
||||
* We can't use gtlin function because we need bynary data in buf */
|
||||
|
||||
peer = (struct peer *)rbufp->recv_srcclock;
|
||||
pp = peer->procptr;
|
||||
up = (struct fgunit *)pp->unitptr;
|
||||
|
||||
/*
|
||||
* Below hug to implement receiving of status information
|
||||
*/
|
||||
if(!up->pollnum)
|
||||
{
|
||||
up->pollnum++;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
if (rbufp->recv_length < (LENFG-2))
|
||||
{
|
||||
refclock_report(peer, CEVNT_BADREPLY);
|
||||
return; /* The reply is invalid discard it. */
|
||||
}
|
||||
|
||||
/* Below I trying to find a correct reply in buffer.
|
||||
* Sometime GPS reply located in the beginnig of buffer,
|
||||
* sometime you can find it with some offset.
|
||||
*/
|
||||
|
||||
bpt = (char *)rbufp->recv_space.X_recv_buffer;
|
||||
while(*bpt != '')
|
||||
bpt++;
|
||||
|
||||
#define BP2(x) ( bpt[x] & 15 )
|
||||
#define BP1(x) (( bpt[x] & 240 ) >> 4)
|
||||
|
||||
pp->year = BP1(2)*10 + BP2(2);
|
||||
|
||||
if(pp->year == 94)
|
||||
{
|
||||
refclock_report(peer, CEVNT_BADREPLY);
|
||||
if(!fg_init(pp->io.fd))
|
||||
refclock_report(peer, CEVNT_FAULT);
|
||||
return;
|
||||
/* GPS is just powered up. The date is invalid -
|
||||
discarding it. Initilize GPS one more time */
|
||||
/* Sorry - this driver will broken in 2094 ;) */
|
||||
}
|
||||
|
||||
if (pp->year < 99)
|
||||
pp->year += 100;
|
||||
|
||||
pp->year += 1900;
|
||||
pp->day = 100 * BP2(3) + 10 * BP1(4) + BP2(4);
|
||||
|
||||
/*
|
||||
After Jan, 10 2000 Forum Graphic GPS receiver had a very strange
|
||||
benahour. It doubles day number for an hours in replys after 10:10:10 UTC
|
||||
and doubles min every hour at HH:10:ss for a minute.
|
||||
Hope it is a problem of my unit only and not a Y2K problem of FG GPS.
|
||||
Below small code to avoid such situation.
|
||||
*/
|
||||
if(up->y2kwarn > 10)
|
||||
pp->hour = BP1(6)*10 + BP2(6);
|
||||
else
|
||||
pp->hour = BP1(5)*10 + BP2(5);
|
||||
|
||||
if((up->y2kwarn > 10) && (pp->hour == 10))
|
||||
{
|
||||
pp->minute = BP1(7)*10 + BP2(7);
|
||||
pp->second = BP1(8)*10 + BP2(8);
|
||||
pp->msec = BP1(9)*10 + BP2(9);
|
||||
pp->usec = BP1(10);
|
||||
} else {
|
||||
pp->hour = BP1(5)*10 + BP2(5);
|
||||
pp->minute = BP1(6)*10 + BP2(6);
|
||||
pp->second = BP1(7)*10 + BP2(7);
|
||||
pp->msec = BP1(8)*10 + BP2(8);
|
||||
pp->usec = BP1(9);
|
||||
}
|
||||
|
||||
if((pp->hour == 10) && (pp->minute == 10))
|
||||
{
|
||||
up->y2kwarn++;
|
||||
}
|
||||
|
||||
sprintf(pp->a_lastcode, "%d %d %d %d %d", pp->year, pp->day, pp->hour, pp->minute, pp->second);
|
||||
pp->lencode = strlen(pp->a_lastcode);
|
||||
/*get_systime(&pp->lastrec);*/
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf ("fg: time is %04d/%03d %02d:%02d:%02d UTC\n",
|
||||
pp->year, pp->day, pp->hour, pp->minute, pp->second);
|
||||
#endif
|
||||
|
||||
if (peer->stratum <= 1)
|
||||
peer->refid = pp->refid;
|
||||
pp->disp = (10e-6);
|
||||
pp->lastrec = rbufp->recv_time; /* Is it better then get_systime()? */
|
||||
/* pp->leap = LEAP_NOWARNING; */
|
||||
|
||||
/*
|
||||
* Process the new sample in the median filter and determine the
|
||||
* timecode timestamp.
|
||||
*/
|
||||
|
||||
if (!refclock_process(pp))
|
||||
refclock_report(peer, CEVNT_BADTIME);
|
||||
|
||||
refclock_receive(peer);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
#else
|
||||
int refclock_fg_bs;
|
||||
#endif /* REFCLOCK */
|
@ -40,9 +40,10 @@
|
||||
|
||||
extern int init_vme(); /* This is just a call to map_vme() */
|
||||
/* It doesn't have to be extern */
|
||||
unsigned short *greg[NREGS]; /* GPS registers defined in gps.h */
|
||||
void *gps_base; /* Base address of GPS VME card returned by */
|
||||
/* the map_vme() call */
|
||||
extern unsigned short *greg[NREGS]; /* made extern to avoid being in both map_vme.c and this file */
|
||||
extern void *gps_base; /* mjb lmco 12/20/99 */
|
||||
|
||||
extern caddr_t map_vme ();
|
||||
extern void unmap_vme(); /* Unmaps the VME space */
|
||||
|
||||
@ -57,6 +58,8 @@ struct vmedate { /* structure needed by ntp */
|
||||
};
|
||||
|
||||
struct vmedate *get_gpsvme_time();
|
||||
struct vmedate * time_vme; /* added to emulate LM refclock_gpsvme
|
||||
(Made global per RES suggestion to fix mem leak DW lmco) mjb lmco 12/15/99 */
|
||||
|
||||
/* END OF STUFF FROM RES */
|
||||
|
||||
@ -134,13 +137,13 @@ static u_char sloppyclockflag[MAXUNITS];
|
||||
* Function prototypes
|
||||
*/
|
||||
static void vme_init (void);
|
||||
static int vme_start (u_int, struct peer *);
|
||||
static void vme_shutdown (int);
|
||||
static int vme_start (int, struct peer *);
|
||||
static void vme_shutdown (int, struct peer *);
|
||||
static void vme_report_event (struct vmeunit *, int);
|
||||
static void vme_receive (struct recvbuf *);
|
||||
static void vme_poll (int unit, struct peer *);
|
||||
static void vme_control (u_int, struct refclockstat *, struct refclockstat *);
|
||||
static void vme_buginfo (int, struct refclockbug *);
|
||||
static void vme_control (int, struct refclockstat *, struct refclockstat *, struct peer *);
|
||||
static void vme_buginfo (int, struct refclockbug *, struct peer *);
|
||||
|
||||
/*
|
||||
* Transfer vector
|
||||
@ -233,6 +236,8 @@ vme_start(
|
||||
} else {
|
||||
vme = (struct vmeunit *)
|
||||
emalloc(sizeof(struct vmeunit));
|
||||
time_vme = (struct vmedate *)malloc(sizeof(struct vmedate)); /* Added to emulate LM's refclock_gpsvme
|
||||
(added to fix mem lead DW lmco) mjb lmco 12/22/99 */
|
||||
}
|
||||
}
|
||||
bzero((char *)vme, sizeof(struct vmeunit));
|
||||
@ -347,9 +352,6 @@ vme_poll(
|
||||
struct tm *tadr;
|
||||
|
||||
|
||||
vme = (struct vmeunit *)emalloc(sizeof(struct vmeunit *));
|
||||
tptr = (struct vmedate *)emalloc(sizeof(struct vmedate *));
|
||||
|
||||
|
||||
if (unit >= MAXUNITS) {
|
||||
msyslog(LOG_ERR, "vme_poll: unit %d invalid", unit);
|
||||
@ -435,13 +437,14 @@ vme_poll(
|
||||
}
|
||||
|
||||
/*
|
||||
* vme_control - set fudge factors, return statistics
|
||||
* vme_control - set fudge factors, return statistics2
|
||||
*/
|
||||
static void
|
||||
vme_control(
|
||||
u_int unit,
|
||||
struct refclockstat *in,
|
||||
struct refclockstat *out
|
||||
struct refclockstat *out,
|
||||
struct peer * peer
|
||||
)
|
||||
{
|
||||
register struct vmeunit *vme;
|
||||
@ -453,7 +456,8 @@ vme_control(
|
||||
|
||||
if (in != 0) {
|
||||
if (in->haveflags & CLK_HAVETIME1)
|
||||
fudgefactor[unit] = in->fudgetime1;
|
||||
DTOLFP(in->fudgetime1, &fudgefactor[unit]); /* added mjb lmco 12/20/99 */
|
||||
|
||||
if (in->haveflags & CLK_HAVEVAL1) {
|
||||
stratumtouse[unit] = (u_char)(in->fudgeval1 & 0xf);
|
||||
if (unitinuse[unit]) {
|
||||
@ -482,16 +486,19 @@ vme_control(
|
||||
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];
|
||||
LFPTOD(&fudgefactor[unit], out->fudgetime1); /* added mjb lmco 12/20/99 */
|
||||
|
||||
out ->fudgetime2 = 0; /* should do what above was supposed to do mjb lmco 12/20/99 */
|
||||
|
||||
out->fudgeval1 = (long)stratumtouse[unit]; /*changed from above LONG was not
|
||||
defined mjb lmco 12/15/99 */
|
||||
|
||||
out->fudgeval2 = 0;
|
||||
out->flags = sloppyclockflag[unit];
|
||||
if (unitinuse[unit]) {
|
||||
vme = vmeunits[unit];
|
||||
out->lencode = vme->lencode;
|
||||
out->lastcode = vme->lastcode;
|
||||
out->p_lastcode = vme->lastcode;
|
||||
out->timereset = current_time - vme->timestarted;
|
||||
out->polls = vme->polls;
|
||||
out->noresponse = vme->noreply;
|
||||
@ -501,7 +508,7 @@ vme_control(
|
||||
out->currentstatus = vme->status;
|
||||
} else {
|
||||
out->lencode = 0;
|
||||
out->lastcode = "";
|
||||
out->p_lastcode = "";
|
||||
out->polls = out->noresponse = 0;
|
||||
out->badformat = out->baddata = 0;
|
||||
out->timereset = 0;
|
||||
@ -516,7 +523,8 @@ vme_control(
|
||||
static void
|
||||
vme_buginfo(
|
||||
int unit,
|
||||
register struct refclockbug *bug
|
||||
register struct refclockbug *bug,
|
||||
struct peer * peer
|
||||
)
|
||||
{
|
||||
register struct vmeunit *vme;
|
||||
@ -559,7 +567,7 @@ vme_buginfo(
|
||||
struct vmedate *
|
||||
get_gpsvme_time(void)
|
||||
{
|
||||
struct vmedate *time_vme;
|
||||
extern struct vmedate *time_vme;
|
||||
unsigned short set, hr, min, sec, ums, hms, status;
|
||||
int ret;
|
||||
char ti[3];
|
||||
@ -570,7 +578,6 @@ get_gpsvme_time(void)
|
||||
char *gpsmicro;
|
||||
gpsmicro = (char *) malloc(7);
|
||||
|
||||
time_vme = (struct vmedate *)malloc(sizeof(struct vmedate ));
|
||||
*greg = (unsigned short *)malloc(sizeof(short) * NREGS);
|
||||
|
||||
|
||||
@ -602,7 +609,7 @@ get_gpsvme_time(void)
|
||||
/* unmap_vme(); */
|
||||
|
||||
if (!status) {
|
||||
return ((void *)NULL);
|
||||
return (NULL); /* fixed mjb lmco 12/20/99 */
|
||||
}
|
||||
else
|
||||
return (time_vme);
|
||||
|
@ -11,12 +11,6 @@
|
||||
#include <ctype.h>
|
||||
#include <sys/time.h>
|
||||
#include <math.h>
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
#include <sys/audioio.h>
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
#ifdef HAVE_SUN_AUDIOIO_H
|
||||
#include <sun/audioio.h>
|
||||
#endif /* HAVE_SUN_AUDIOIO_H */
|
||||
#ifdef HAVE_SYS_IOCTL_H
|
||||
#include <sys/ioctl.h>
|
||||
#endif /* HAVE_SYS_IOCTL_H */
|
||||
@ -26,6 +20,7 @@
|
||||
#include "ntp_refclock.h"
|
||||
#include "ntp_calendar.h"
|
||||
#include "ntp_stdlib.h"
|
||||
#include "audio.h"
|
||||
|
||||
/*
|
||||
* Audio IRIG-B/E demodulator/decoder
|
||||
@ -149,8 +144,7 @@
|
||||
#define REFID "IRIG" /* reference ID */
|
||||
#define DESCRIPTION "Generic IRIG Audio Driver" /* WRU */
|
||||
|
||||
#define AUDIO_BUFSIZ 160 /* codec buffer size (Solaris only) */
|
||||
#define SAMPLES 8000 /* nominal sample rate (Hz) */
|
||||
#define SECOND 8000 /* nominal sample rate (Hz) */
|
||||
#define BAUD 80 /* samples per baud interval */
|
||||
#define OFFSET 128 /* companded sample offset */
|
||||
#define SIZE 256 /* decompanding table size */
|
||||
@ -162,7 +156,7 @@
|
||||
#define MAXSIG 6000. /* maximum signal level */
|
||||
#define DRPOUT 100. /* dropout signal level */
|
||||
#define MODMIN 0.5 /* minimum modulation index */
|
||||
#define MAXFREQ (250e-6 * SAMPLES) /* freq tolerance (.025%) */
|
||||
#define MAXFREQ (250e-6 * SECOND) /* freq tolerance (.025%) */
|
||||
#define PI 3.1415926535 /* the real thing */
|
||||
|
||||
/*
|
||||
@ -269,8 +263,6 @@ static void irig_base P((struct peer *, double));
|
||||
static void irig_rf P((struct peer *, double));
|
||||
static void irig_decode P((struct peer *, int));
|
||||
static void irig_gain P((struct peer *));
|
||||
static int irig_audio P((void));
|
||||
static void irig_debug P((void));
|
||||
|
||||
/*
|
||||
* Transfer vector
|
||||
@ -288,11 +280,6 @@ struct refclock refclock_irig = {
|
||||
/*
|
||||
* Global variables
|
||||
*/
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
struct audio_device device; /* audio device ident */
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
static struct audio_info info; /* audio device info */
|
||||
static int irig_ctl_fd; /* audio control file descriptor */
|
||||
static char hexchar[] = { /* really quick decoding table */
|
||||
'0', '8', '4', 'c', /* 0000 0001 0010 0011 */
|
||||
'2', 'a', '6', 'e', /* 0100 0101 0110 0111 */
|
||||
@ -323,11 +310,13 @@ irig_start(
|
||||
/*
|
||||
* Open audio device
|
||||
*/
|
||||
fd = open("/dev/audio", O_RDWR | O_NONBLOCK, 0777);
|
||||
if (fd == -1) {
|
||||
perror("audio");
|
||||
fd = audio_init();
|
||||
if (fd < 0)
|
||||
return (0);
|
||||
}
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
audio_show();
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Allocate and initialize unit structure
|
||||
@ -359,11 +348,7 @@ irig_start(
|
||||
up->tc = MINTC;
|
||||
up->decim = 1;
|
||||
up->fdelay = IRIG_B;
|
||||
up->gain = (AUDIO_MAX_GAIN - AUDIO_MIN_GAIN) / 2;
|
||||
if (irig_audio() < 0) {
|
||||
io_closeclock(&pp->io);
|
||||
return(0);
|
||||
}
|
||||
up->gain = 127;
|
||||
up->pollcnt = 2;
|
||||
|
||||
/*
|
||||
@ -380,7 +365,7 @@ irig_start(
|
||||
if (i % 16 == 0)
|
||||
step *= 2.;
|
||||
}
|
||||
DTOLFP(1. / SAMPLES, &up->tick);
|
||||
DTOLFP(1. / SECOND, &up->tick);
|
||||
return (1);
|
||||
}
|
||||
|
||||
@ -436,7 +421,7 @@ irig_receive(
|
||||
*/
|
||||
up->timestamp = rbufp->recv_time;
|
||||
up->bufcnt = rbufp->recv_length;
|
||||
DTOLFP((double)up->bufcnt / SAMPLES, <emp);
|
||||
DTOLFP((double)up->bufcnt / SECOND, <emp);
|
||||
L_SUB(&up->timestamp, <emp);
|
||||
dpt = rbufp->recv_buffer;
|
||||
for (up->bufptr = 0; up->bufptr < up->bufcnt; up->bufptr++) {
|
||||
@ -462,7 +447,7 @@ irig_receive(
|
||||
* unit produces a change of 360 degrees; a frequency
|
||||
* change of one unit produces a change of 1 Hz.
|
||||
*/
|
||||
up->phase += up->freq / SAMPLES;
|
||||
up->phase += up->freq / SECOND;
|
||||
if (up->phase >= .5) {
|
||||
up->phase -= 1.;
|
||||
} else if (up->phase < -.5) {
|
||||
@ -478,7 +463,7 @@ irig_receive(
|
||||
* Once each second, determine the IRIG format, codec
|
||||
* port and gain.
|
||||
*/
|
||||
up->seccnt = (up->seccnt + 1) % SAMPLES;
|
||||
up->seccnt = (up->seccnt + 1) % SECOND;
|
||||
if (up->seccnt == 0) {
|
||||
if (up->irig_b > up->irig_e) {
|
||||
up->decim = 1;
|
||||
@ -488,11 +473,10 @@ irig_receive(
|
||||
up->fdelay = IRIG_E;
|
||||
}
|
||||
if (pp->sloppyclockflag & CLK_FLAG2)
|
||||
up->port = AUDIO_LINE_IN;
|
||||
up->port = 2;
|
||||
else
|
||||
up->port = AUDIO_MICROPHONE;
|
||||
up->port = 1;
|
||||
irig_gain(peer);
|
||||
up->clipcnt = 0;
|
||||
up->irig_b = up->irig_e = 0;
|
||||
}
|
||||
}
|
||||
@ -755,7 +739,7 @@ irig_base(
|
||||
* this plus the delay since the last carrier positive
|
||||
* zero crossing.
|
||||
*/
|
||||
DTOLFP(up->decim * (dtemp / SAMPLES + 1.) + up->fdelay,
|
||||
DTOLFP(up->decim * (dtemp / SECOND + 1.) + up->fdelay,
|
||||
<emp);
|
||||
pp->lastrec = up->timestamp;
|
||||
L_SUB(&pp->lastrec, <emp);
|
||||
@ -890,9 +874,9 @@ irig_decode(
|
||||
"%02x %c %2d %3d %02d:%02d:%02d %4.0f %3d %6.3f %2d %2d %6.3f %6.1f %s",
|
||||
up->errflg, syncchar, pp->year, pp->day,
|
||||
pp->hour, pp->minute, pp->second,
|
||||
up->maxsignal, info.record.gain, up->modndx,
|
||||
up->maxsignal, up->gain, up->modndx,
|
||||
up->envxing, up->tc, up->yxing, up->freq *
|
||||
1e6 / SAMPLES, ulfptoa(&up->montime, 6));
|
||||
1e6 / SECOND, ulfptoa(&up->montime, 6));
|
||||
pp->lencode = strlen(pp->a_lastcode);
|
||||
if (up->timecnt == 0 || pp->sloppyclockflag &
|
||||
CLK_FLAG4)
|
||||
@ -964,116 +948,22 @@ irig_gain(
|
||||
/*
|
||||
* Apparently, the codec uses only the high order bits of the
|
||||
* gain control field. Thus, it may take awhile for changes to
|
||||
* wiggle the hardware bits. Set the new bits in the structure
|
||||
* and call AUDIO_SETINFO. Upon return, the old bits are in the
|
||||
* structure.
|
||||
* wiggle the hardware bits.
|
||||
*/
|
||||
if (up->clipcnt == 0) {
|
||||
up->gain += 4;
|
||||
if (up->gain > AUDIO_MAX_GAIN)
|
||||
up->gain = AUDIO_MAX_GAIN;
|
||||
} else if (up->clipcnt > SAMPLES / 100) {
|
||||
if (up->gain > 255)
|
||||
up->gain = 255;
|
||||
} else if (up->clipcnt > SECOND / 100) {
|
||||
up->gain -= 4;
|
||||
if (up->gain < AUDIO_MIN_GAIN)
|
||||
up->gain = AUDIO_MIN_GAIN;
|
||||
if (up->gain < 0)
|
||||
up->gain = 0;
|
||||
}
|
||||
AUDIO_INITINFO(&info);
|
||||
info.record.port = up->port;
|
||||
info.record.gain = up->gain;
|
||||
info.record.error = 0;
|
||||
ioctl(irig_ctl_fd, (int)AUDIO_SETINFO, &info);
|
||||
if (info.record.error)
|
||||
up->errflg |= IRIG_ERR_ERROR;
|
||||
audio_gain(up->gain, up->port);
|
||||
up->clipcnt = 0;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* irig_audio - initialize audio device
|
||||
*
|
||||
* This code works with SunOS 4.1.3 and Solaris 2.6; however, it is
|
||||
* believed generic and applicable to other systems with a minor twid
|
||||
* or two. All it does is open the device, set the buffer size (Solaris
|
||||
* only), preset the gain and set the input port. It assumes that the
|
||||
* codec sample rate (8000 Hz), precision (8 bits), number of channels
|
||||
* (1) and encoding (ITU-T G.711 mu-law companded) have been set by
|
||||
* default.
|
||||
*/
|
||||
static int
|
||||
irig_audio(
|
||||
)
|
||||
{
|
||||
/*
|
||||
* Open audio control device
|
||||
*/
|
||||
if ((irig_ctl_fd = open("/dev/audioctl", O_RDWR)) < 0) {
|
||||
perror("audioctl");
|
||||
return(-1);
|
||||
}
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
/*
|
||||
* Set audio device parameters.
|
||||
*/
|
||||
AUDIO_INITINFO(&info);
|
||||
info.record.buffer_size = AUDIO_BUFSIZ;
|
||||
if (ioctl(irig_ctl_fd, (int)AUDIO_SETINFO, &info) < 0) {
|
||||
perror("AUDIO_SETINFO");
|
||||
close(irig_ctl_fd);
|
||||
return(-1);
|
||||
}
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
#ifdef DEBUG
|
||||
irig_debug();
|
||||
#endif /* DEBUG */
|
||||
return(0);
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
/*
|
||||
* irig_debug - display audio parameters
|
||||
*
|
||||
* This code doesn't really do anything, except satisfy curiousity and
|
||||
* verify the ioctl's work.
|
||||
*/
|
||||
static void
|
||||
irig_debug(
|
||||
)
|
||||
{
|
||||
if (debug == 0)
|
||||
return;
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
ioctl(irig_ctl_fd, (int)AUDIO_GETDEV, &device);
|
||||
printf("irig: name %s, version %s, config %s\n",
|
||||
device.name, device.version, device.config);
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
ioctl(irig_ctl_fd, (int)AUDIO_GETINFO, &info);
|
||||
printf(
|
||||
"irig: samples %d, channels %d, precision %d, encoding %d\n",
|
||||
info.record.sample_rate, info.record.channels,
|
||||
info.record.precision, info.record.encoding);
|
||||
#ifdef HAVE_SYS_AUDIOIO_H
|
||||
printf("irig: gain %d, port %d, buffer %d\n",
|
||||
info.record.gain, info.record.port,
|
||||
info.record.buffer_size);
|
||||
#else /* HAVE_SYS_AUDIOIO_H */
|
||||
printf("irig: gain %d, port %d\n",
|
||||
info.record.gain, info.record.port);
|
||||
#endif /* HAVE_SYS_AUDIOIO_H */
|
||||
printf(
|
||||
"irig: samples %d, eof %d, pause %d, error %d, waiting %d, balance %d\n",
|
||||
info.record.samples, info.record.eof,
|
||||
info.record.pause, info.record.error,
|
||||
info.record.waiting, info.record.balance);
|
||||
#ifdef __NetBSD__
|
||||
printf("irig: monitor %d, blocksize %d, hiwat %d, lowat %d, mode %d\n",
|
||||
info.monitor_gain, info.blocksize, info.hiwat, info.lowat, info.mode);
|
||||
#else /* __NetBSD__ */
|
||||
printf("irig: monitor %d, muted %d\n",
|
||||
info.monitor_gain, info.output_muted);
|
||||
#endif /* __NetBSD__ */
|
||||
}
|
||||
#endif /* DEBUG */
|
||||
|
||||
#else
|
||||
int refclock_irig_bs;
|
||||
#endif /* REFCLOCK */
|
||||
|
@ -762,10 +762,11 @@ jupiter_process(register struct peer *peer)
|
||||
}
|
||||
|
||||
/* Compare two l_fp's, used with qsort() */
|
||||
int
|
||||
#ifdef QSORT_USES_VOID_P
|
||||
int
|
||||
jupiter_cmpl_fp(register const void *p1, register const void *p2)
|
||||
#else
|
||||
int
|
||||
jupiter_cmpl_fp(register const l_fp *fp1, register const l_fp *fp2)
|
||||
#endif
|
||||
{
|
||||
@ -960,7 +961,7 @@ jupiter_pps(register struct peer *peer)
|
||||
/*
|
||||
* jupiter_debug - print debug messages
|
||||
*/
|
||||
#if __STDC__
|
||||
#if defined(__STDC__)
|
||||
static void
|
||||
jupiter_debug(struct peer *peer, char *fmt, ...)
|
||||
#else
|
||||
@ -968,17 +969,17 @@ static void
|
||||
jupiter_debug(peer, fmt, va_alist)
|
||||
struct peer *peer;
|
||||
char *fmt;
|
||||
#endif
|
||||
#endif /* __STDC__ */
|
||||
{
|
||||
va_list ap;
|
||||
|
||||
if (debug) {
|
||||
|
||||
#if __STDC__
|
||||
#if defined(__STDC__)
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
#endif /* __STDC__ */
|
||||
/*
|
||||
* Print debug message to stdout
|
||||
* In the future, we may want to get get more creative...
|
||||
|
@ -322,10 +322,6 @@ static int deltas[60];
|
||||
static l_fp acceptable_slop; /* = { 0, 1 << (FRACTION_PREC -2) }; */
|
||||
static l_fp onesec; /* = { 1, 0 }; */
|
||||
|
||||
#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
|
||||
@ -354,8 +350,13 @@ static void msfees_init P((void));
|
||||
static void dump_buf P((l_fp *coffs, int from, int to, char *text));
|
||||
static void ees_report_event P((struct eesunit *ees, int code));
|
||||
static void ees_receive P((struct recvbuf *rbufp));
|
||||
static int offcompare P((l_fp *a, l_fp *b));
|
||||
static void ees_process P((struct eesunit *ees));
|
||||
#ifdef QSORT_USES_VOID_P
|
||||
static int offcompare P((const void *va, const void *vb));
|
||||
#else
|
||||
static int offcompare P((const l_fp *a, const l_fp *b));
|
||||
#endif /* QSORT_USES_VOID_P */
|
||||
|
||||
|
||||
/*
|
||||
* Transfer vector
|
||||
@ -1221,14 +1222,27 @@ ees_receive(
|
||||
|
||||
/* offcompare - auxiliary comparison routine for offset sort */
|
||||
|
||||
#ifdef QSORT_USES_VOID_P
|
||||
static int
|
||||
offcompare(
|
||||
l_fp *a,
|
||||
l_fp *b
|
||||
const void *va,
|
||||
const void *vb
|
||||
)
|
||||
{
|
||||
const l_fp *a = (const l_fp *)va;
|
||||
const l_fp *b = (const l_fp *)vb;
|
||||
return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1);
|
||||
}
|
||||
#else
|
||||
static int
|
||||
offcompare(
|
||||
const l_fp *a,
|
||||
const l_fp *b
|
||||
)
|
||||
{
|
||||
return(L_ISGEQ(a, b) ? (L_ISEQU(a, b) ? 0 : 1) : -1);
|
||||
}
|
||||
#endif /* QSORT_USES_VOID_P */
|
||||
|
||||
|
||||
/* ees_process - process a pile of samples from the clock */
|
||||
@ -1349,12 +1363,12 @@ ees_process(
|
||||
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)))
|
||||
if ((new & 0x80000000) !=
|
||||
(((long) offset.l_uf) & 0x80000000))
|
||||
{ NLOG(NLOG_CLOCKINFO) /* conditional if clause for conditional syslog */
|
||||
msyslog(LOG_INFO, "I: %lx != %lx (%lx %lx), so add %d",
|
||||
new & (1 << 31),
|
||||
((long) offset.l_uf) & ( 1 << 31),
|
||||
new & 0x80000000,
|
||||
((long) offset.l_uf) & 0x80000000,
|
||||
new, (long) offset.l_uf,
|
||||
(new < 0) ? -1 : 1);
|
||||
offset.l_ui += (new < 0) ? -1 : 1;
|
||||
|
@ -127,9 +127,6 @@ struct ppsclockev {
|
||||
*/
|
||||
#define INTERVAL 1 /* Interval between position measurements (s) */
|
||||
#define AVGING_TIME 24 /* Number of hours to average */
|
||||
#define USUAL_EDOP 1.06066 /* used for normalizing EDOP */
|
||||
#define USUAL_NDOP 1.06066 /* used for normalizing NDOP */
|
||||
#define USUAL_VDOP 2.00 /* used for normalizing VDOP */
|
||||
#define NOT_INITIALIZED -9999. /* initial pivot longitude */
|
||||
|
||||
/*
|
||||
@ -165,13 +162,13 @@ static char pmvxg[] = "PMVXG";
|
||||
#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
#endif /* __attribute__ */
|
||||
#endif /* __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) */
|
||||
#else
|
||||
#ifndef __attribute__
|
||||
#define __attribute__(args)
|
||||
#endif
|
||||
#endif
|
||||
#endif /* __attribute__ */
|
||||
#endif /* __GNUC__ */
|
||||
/* XXX end */
|
||||
|
||||
/*
|
||||
@ -230,18 +227,6 @@ mx4200_start(
|
||||
int fd;
|
||||
char gpsdev[20];
|
||||
|
||||
#ifdef HAVE_TIOCGPPSEV
|
||||
#ifdef HAVE_TERMIOS
|
||||
struct termios ttyb;
|
||||
#endif /* HAVE_TERMIOS */
|
||||
#ifdef HAVE_SYSV_TTYS
|
||||
struct termio ttyb;
|
||||
#endif /* HAVE_SYSV_TTYS */
|
||||
#ifdef HAVE_BSD_TTYS
|
||||
struct sgttyb ttyb;
|
||||
#endif /* HAVE_BSD_TTYS */
|
||||
#endif /* HAVE_TIOCGPPSEV */
|
||||
|
||||
/*
|
||||
* Open serial port
|
||||
*/
|
||||
@ -249,24 +234,6 @@ mx4200_start(
|
||||
if (!(fd = refclock_open(gpsdev, SPEED232, LDISC_PPS))) {
|
||||
return (0);
|
||||
}
|
||||
#ifdef HAVE_TIOCGPPSEV
|
||||
if (fdpps > 0) {
|
||||
/*
|
||||
* Truly nasty hack in order to get this to work on Solaris 7.
|
||||
* Really, refclock_open() should set the port properly, but
|
||||
* it doesn't work (as of ntp-4.0.98a) - almost 99% dropped
|
||||
* PPS signals with "Interrupted system call". Even this
|
||||
* still gives a 5% error rate.
|
||||
*/
|
||||
ttyb.c_iflag = IGNCR;
|
||||
ttyb.c_oflag = 0;
|
||||
ttyb.c_cflag = CS8 | CREAD | CLOCAL;
|
||||
ttyb.c_lflag = ICANON;
|
||||
if (tcsetattr(fdpps, TCSAFLUSH, &ttyb) < 0) {
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
#endif /* HAVE_TIOCGPPSEV */
|
||||
|
||||
/*
|
||||
* Allocate unit structure
|
||||
@ -360,9 +327,9 @@ mx4200_config(
|
||||
up->filt_lat = 0.0;
|
||||
up->filt_lon = 0.0;
|
||||
up->filt_alt = 0.0;
|
||||
up->edop = USUAL_EDOP;
|
||||
up->ndop = USUAL_NDOP;
|
||||
up->vdop = USUAL_VDOP;
|
||||
up->edop = 1;
|
||||
up->ndop = 1;
|
||||
up->vdop = 1;
|
||||
up->last_leap = 0; /* LEAP_NOWARNING */
|
||||
up->clamp_time = current_time + (AVGING_TIME * 60 * 60);
|
||||
up->log_time = current_time + SLEEPTIME;
|
||||
@ -612,7 +579,7 @@ mx4200_ref(
|
||||
minute = (lon - (double)(int)lon) * 60.0;
|
||||
sprintf(lons,"%03d%02.4f", (int)lon, minute);
|
||||
|
||||
mx4200_send(peer, "%s,%03d,,,,,%s,%c,%s,%c,%.2f,", pmvxg,
|
||||
mx4200_send(peer, "%s,%03d,,,,,%s,%c,%s,%c,%.2f,%d", pmvxg,
|
||||
PMVXG_S_INITMODEA,
|
||||
/* day of month */
|
||||
/* month of year */
|
||||
@ -622,8 +589,8 @@ mx4200_ref(
|
||||
nsc, /* north/south */
|
||||
lons, /* longitude DDDMM.MMMM */
|
||||
ewc, /* east/west */
|
||||
alt); /* Altitude */
|
||||
/* Altitude Reference */
|
||||
alt, /* Altitude */
|
||||
1); /* Altitude Reference (0=WGS84 ellipsoid, 1=MSL geoid) */
|
||||
|
||||
msyslog(LOG_DEBUG,
|
||||
"mx4200: reconfig to fixed location: %s %c, %s %c, %.2f m",
|
||||
@ -1359,19 +1326,19 @@ mx4200_parse_p(
|
||||
/*
|
||||
* Calculate running weighted averages
|
||||
*/
|
||||
weight = USUAL_EDOP / up->edop;
|
||||
weight = 1. / up->edop;
|
||||
weight *= weight;
|
||||
up->avg_lon = (up->filt_lon * up->avg_lon) + (weight * lon);
|
||||
up->filt_lon += weight;
|
||||
up->avg_lon = up->avg_lon / up->filt_lon;
|
||||
|
||||
weight = USUAL_NDOP / up->ndop;
|
||||
weight = 1. / up->ndop;
|
||||
weight *= weight;
|
||||
up->avg_lat = (up->filt_lat * up->avg_lat) + (weight * lat);
|
||||
up->filt_lat += weight;
|
||||
up->avg_lat = up->avg_lat / up->filt_lat;
|
||||
|
||||
weight = USUAL_VDOP / up->vdop;
|
||||
weight = 1. / up->vdop;
|
||||
weight *= weight;
|
||||
up->avg_alt = (up->filt_alt * up->avg_alt) + (weight * alt);
|
||||
up->filt_alt += weight;
|
||||
@ -1673,15 +1640,15 @@ mx4200_pps(
|
||||
/*
|
||||
* mx4200_debug - print debug messages
|
||||
*/
|
||||
#if __STDC__
|
||||
#if defined(__STDC__)
|
||||
static void
|
||||
mx4200_debug(struct peer *peer, char *fmt, ...)
|
||||
#else
|
||||
static void
|
||||
static void
|
||||
mx4200_debug(peer, fmt, va_alist)
|
||||
struct peer *peer;
|
||||
char *fmt;
|
||||
#endif
|
||||
#endif /* __STDC__ */
|
||||
{
|
||||
va_list ap;
|
||||
struct refclockproc *pp;
|
||||
@ -1689,11 +1656,11 @@ mx4200_debug(peer, fmt, va_alist)
|
||||
|
||||
if (debug) {
|
||||
|
||||
#if __STDC__
|
||||
#if defined(__STDC__)
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
#endif
|
||||
#endif /* __STDC__ */
|
||||
|
||||
pp = peer->procptr;
|
||||
up = (struct mx4200unit *)pp->unitptr;
|
||||
@ -1712,11 +1679,12 @@ mx4200_debug(peer, fmt, va_alist)
|
||||
/*
|
||||
* Send a character string to the receiver. Checksum is appended here.
|
||||
*/
|
||||
#if defined(__STDC__)
|
||||
static void
|
||||
#if __STDC__
|
||||
mx4200_send(struct peer *peer, char *fmt, ...)
|
||||
#else
|
||||
mx4200_send(peer, fmt, va_alist)
|
||||
static void
|
||||
mx4200_send(peer, fmt, va_alist)
|
||||
struct peer *peer;
|
||||
char *fmt;
|
||||
va_dcl
|
||||
@ -1731,7 +1699,7 @@ mx4200_send(struct peer *peer, char *fmt, ...)
|
||||
char buf[1024];
|
||||
u_char ck;
|
||||
|
||||
#if __STDC__
|
||||
#if defined(__STDC__)
|
||||
va_start(ap, fmt);
|
||||
#else
|
||||
va_start(ap);
|
||||
|
@ -32,7 +32,11 @@
|
||||
/*
|
||||
* Definitions
|
||||
*/
|
||||
#define DEVICE "/dev/gps%d" /* name of radio device */
|
||||
#ifdef SYS_WINNT
|
||||
# define DEVICE "COM%d:" /* COM 1 - 3 supported */
|
||||
#else
|
||||
# define DEVICE "/dev/gps%d" /* name of radio device */
|
||||
#endif
|
||||
#define SPEED232 B4800 /* uart speed (4800 bps) */
|
||||
#define PRECISION (-9) /* precision assumed (about 2 ms) */
|
||||
#define DCD_PRECISION (-20) /* precision assumed (about 1 us) */
|
||||
@ -98,6 +102,7 @@ nmea_start(
|
||||
* Open serial port. Use CLK line discipline, if available.
|
||||
*/
|
||||
(void)sprintf(device, DEVICE, unit);
|
||||
|
||||
if (!(fd = refclock_open(device, SPEED232, LDISC_CLK)))
|
||||
return (0);
|
||||
|
||||
|
@ -55,6 +55,13 @@
|
||||
|
||||
#define POS_HOLD_AVERAGE 10000 /* nb, 10000s ~= 2h45m */
|
||||
|
||||
/*
|
||||
* ONCORE_SHMEM_STATUS will create a mmap(2)'ed file named according to a
|
||||
* "STATUS" line in the oncore config file, which contains the most recent
|
||||
* copy of all types of messages we recognize. This file can be mmap(2)'ed
|
||||
* by monitoring and statistics programs.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
#endif
|
||||
@ -66,6 +73,14 @@
|
||||
#include <sys/types.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/stat.h>
|
||||
#ifdef ONCORE_SHMEM_STATUS
|
||||
# ifdef HAVE_SYS_MMAN_H
|
||||
# include <sys/mman.h>
|
||||
# ifndef MAP_FAILED
|
||||
# define MAP_FAILED ((u_char *) -1)
|
||||
# endif /* not MAP_FAILED */
|
||||
# endif /* HAVE_SYS_MMAN_H */
|
||||
#endif /* ONCORE_SHMEM_STATUS */
|
||||
|
||||
#ifdef HAVE_PPSAPI
|
||||
# ifdef HAVE_TIMEPPS_H
|
||||
@ -77,6 +92,10 @@
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_SYS_SIO_H
|
||||
# include <sys/sio.h>
|
||||
#endif
|
||||
|
||||
#include "ntpd.h"
|
||||
#include "ntp_io.h"
|
||||
#include "ntp_unixtime.h"
|
||||
@ -122,6 +141,8 @@ struct instance {
|
||||
int unit; /* 127.127.30.unit */
|
||||
int ttyfd; /* TTY file descriptor */
|
||||
int ppsfd; /* PPS file descriptor */
|
||||
int statusfd; /* Status shm descriptor */
|
||||
u_char *shmem;
|
||||
#ifdef HAVE_PPSAPI
|
||||
pps_handle_t pps_h;
|
||||
pps_params_t pps_p;
|
||||
@ -134,7 +155,6 @@ struct instance {
|
||||
struct peer *peer;
|
||||
|
||||
int Bj_day;
|
||||
int assert;
|
||||
|
||||
long delay; /* ns */
|
||||
long offset; /* ns */
|
||||
@ -144,11 +164,11 @@ struct instance {
|
||||
double ss_ht;
|
||||
int ss_count;
|
||||
u_char ss_ht_type;
|
||||
int posn_set;
|
||||
u_char posn_set;
|
||||
|
||||
int printed;
|
||||
u_char printed;
|
||||
u_char polled;
|
||||
int pollcnt;
|
||||
int polled;
|
||||
u_int ev_serial;
|
||||
int Rcvptr;
|
||||
u_char Rcvbuf[500];
|
||||
@ -160,6 +180,8 @@ struct instance {
|
||||
u_char Az;
|
||||
u_char init_type;
|
||||
s_char saw_tooth;
|
||||
u_char timeout; /* flag to retry Cj after Fa reset */
|
||||
s_char assert;
|
||||
};
|
||||
|
||||
#define rcvbuf instance->Rcvbuf
|
||||
@ -172,7 +194,6 @@ static void oncore_receive P((struct recvbuf *));
|
||||
static void oncore_sendmsg P((int fd, u_char *, u_int));
|
||||
static void oncore_shutdown P((int, struct peer *));
|
||||
static int oncore_start P((int, struct peer *));
|
||||
static void oncore_stats P((struct instance *));
|
||||
|
||||
static void oncore_msg_any P((struct instance *, u_char *, u_int, int));
|
||||
static void oncore_msg_As P((struct instance *, u_char *, u_int));
|
||||
@ -180,6 +201,7 @@ static void oncore_msg_At P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Ay P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Az P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Bj P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Cb P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Cf P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Cj P((struct instance *, u_char *, u_int));
|
||||
static void oncore_msg_Ea P((struct instance *, u_char *, u_int));
|
||||
@ -201,11 +223,12 @@ struct refclock refclock_oncore = {
|
||||
* for the the UT or VP Oncore.
|
||||
*/
|
||||
|
||||
static struct {
|
||||
static struct msg_desc {
|
||||
const char flag[3];
|
||||
const int len;
|
||||
void (*handler) P((struct instance *, u_char *, u_int));
|
||||
const char *fmt;
|
||||
int shmem;
|
||||
} oncore_messages[] = {
|
||||
/* Ea and En first since they're most common */
|
||||
{ "Ea", 76, oncore_msg_Ea, "mdyyhmsffffaaaaoooohhhhmmmmvvhhddtntimsdimsdimsdimsdimsdimsdimsdimsdsC" },
|
||||
@ -223,7 +246,7 @@ static struct {
|
||||
{ "AB", 8, 0, "" },
|
||||
{ "Bb", 92, 0, "" },
|
||||
{ "Bj", 8, oncore_msg_Bj, "" },
|
||||
{ "Cb", 33, 0, "" },
|
||||
{ "Cb", 33, oncore_msg_Cb, "" },
|
||||
{ "Cf", 7, oncore_msg_Cf, "" },
|
||||
{ "Cg", 8, 0, "" },
|
||||
{ "Ch", 9, 0, "" },
|
||||
@ -234,6 +257,7 @@ static struct {
|
||||
{ {0}, 7, 0, ""}
|
||||
};
|
||||
|
||||
static unsigned int oncore_shmem_Cb;
|
||||
|
||||
/*
|
||||
* Position Set.
|
||||
@ -261,6 +285,11 @@ u_char oncore_cmd_Asx[]= { 'A', 's', 0x7f, 0xff, 0xff, 0xff,
|
||||
*/
|
||||
u_char oncore_cmd_Aw[] = { 'A', 'w', 1 };
|
||||
|
||||
/*
|
||||
* Output Almanac when it changes
|
||||
*/
|
||||
u_char oncore_cmd_Be[] = { 'B', 'e', 1 };
|
||||
|
||||
/*
|
||||
* Read back PPS Offset for Output
|
||||
*/
|
||||
@ -281,7 +310,7 @@ u_char oncore_cmd_AB[] = { 'A', 'B', 4 };
|
||||
/*
|
||||
* Visible Satellite Status Msg.
|
||||
*/
|
||||
u_char oncore_cmd_Bb[] = { 'B', 'b', 0 }; /* just turn off */
|
||||
u_char oncore_cmd_Bb[] = { 'B', 'b', 1 };
|
||||
|
||||
/*
|
||||
* Leap Second Pending Message
|
||||
@ -357,6 +386,10 @@ static u_char oncore_cmd_Fa[] = { 'F', 'a' };
|
||||
/* from buffer, char *buf, result to an int */
|
||||
#define buf_w32(buf) (((buf)[0]&0200) ? (-(~w32(buf)+1)) : w32(buf))
|
||||
|
||||
extern int pps_assert;
|
||||
extern int pps_hardpps;
|
||||
|
||||
|
||||
/*
|
||||
* oncore_start - initialize data for processing
|
||||
*/
|
||||
@ -400,8 +433,7 @@ oncore_start(
|
||||
if ((stat1.st_dev == stat2.st_dev) && (stat1.st_ino == stat2.st_ino)) {
|
||||
/* same device here */
|
||||
if (!(fd1 = refclock_open(device1, SPEED, LDISC_RAW
|
||||
#ifdef HAVE_PPSAPI
|
||||
#else
|
||||
#if !defined(HAVE_PPSAPI) && !defined(TIOCDCDTIMESTAMP)
|
||||
| LDISC_PPS
|
||||
#endif
|
||||
))) {
|
||||
@ -435,7 +467,7 @@ oncore_start(
|
||||
instance->ppsfd = fd2;
|
||||
|
||||
instance->Bj_day = -1;
|
||||
instance->assert = 1;
|
||||
instance->assert = pps_assert;
|
||||
|
||||
/* go read any input data in /etc/ntp.oncoreX */
|
||||
|
||||
@ -444,10 +476,26 @@ oncore_start(
|
||||
#ifdef HAVE_PPSAPI
|
||||
if (time_pps_create(fd2, &instance->pps_h) < 0) {
|
||||
perror("time_pps_create");
|
||||
exit(1);
|
||||
return(0);
|
||||
}
|
||||
|
||||
if (instance->assert) {
|
||||
if (time_pps_getcap(instance->pps_h, &mode) < 0) {
|
||||
msyslog(LOG_ERR,
|
||||
"refclock_ioctl: time_pps_getcap failed: %m");
|
||||
return (0);
|
||||
}
|
||||
|
||||
if (time_pps_getparams(instance->pps_h, &instance->pps_p) < 0) {
|
||||
msyslog(LOG_ERR,
|
||||
"refclock_ioctl: time_pps_getparams failed: %m");
|
||||
return (0);
|
||||
}
|
||||
|
||||
/* nb. only turn things on, if someone else has turned something
|
||||
* on before we get here, leave it alone!
|
||||
*/
|
||||
|
||||
if (instance->assert) { /* nb, default or ON */
|
||||
instance->pps_p.mode = PPS_CAPTUREASSERT | PPS_OFFSETASSERT;
|
||||
instance->pps_p.assert_offset.tv_sec = 0;
|
||||
instance->pps_p.assert_offset.tv_nsec = 0;
|
||||
@ -457,16 +505,41 @@ oncore_start(
|
||||
instance->pps_p.clear_offset.tv_nsec = 0;
|
||||
}
|
||||
instance->pps_p.mode |= PPS_TSFMT_TSPEC;
|
||||
instance->pps_p.mode &= mode; /* only do it if it is legal */
|
||||
|
||||
if (time_pps_setparams(instance->pps_h, &instance->pps_p) < 0) {
|
||||
perror("time_pps_setparams");
|
||||
exit(1);
|
||||
}
|
||||
if (time_pps_kcbind(instance->pps_h, PPS_KC_HARDPPS,
|
||||
instance->pps_p.mode & (PPS_CAPTUREASSERT | PPS_CAPTURECLEAR),
|
||||
PPS_TSFMT_TSPEC) < 0) {
|
||||
perror("time_pps_kcbind");
|
||||
|
||||
if (pps_device) {
|
||||
if (stat(pps_device, &stat1)) {
|
||||
perror("ONCORE: stat pps_device");
|
||||
return(0);
|
||||
}
|
||||
|
||||
/* must have hardpps ON, and fd2 must be the same device as on the pps line */
|
||||
|
||||
if (pps_hardpps && ((stat1.st_dev == stat2.st_dev) && (stat1.st_ino == stat2.st_ino))) {
|
||||
int i;
|
||||
|
||||
if (instance->assert)
|
||||
i = PPS_CAPTUREASSERT;
|
||||
else
|
||||
i = PPS_CAPTURECLEAR;
|
||||
|
||||
if (i&mode) {
|
||||
if (time_pps_kcbind(instance->pps_h, PPS_KC_HARDPPS, i,
|
||||
PPS_TSFMT_TSPEC) < 0) {
|
||||
msyslog(LOG_ERR,
|
||||
"refclock_ioctl: time_pps_kcbind failed: %m");
|
||||
return (0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
instance->pp = pp;
|
||||
instance->peer = peer;
|
||||
instance->o_state = ONCORE_NO_IDEA;
|
||||
@ -500,6 +573,7 @@ oncore_start(
|
||||
* We send info from config to Oncore later.
|
||||
*/
|
||||
|
||||
instance->timeout = 1;
|
||||
mode = instance->init_type;
|
||||
if (mode == 3 || mode == 4) {
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Cf, sizeof oncore_cmd_Cf);
|
||||
@ -514,10 +588,85 @@ oncore_start(
|
||||
}
|
||||
|
||||
instance->pollcnt = 2;
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
|
||||
static void
|
||||
oncore_init_shmem(struct instance *instance, char *filename)
|
||||
{
|
||||
#ifdef ONCORE_SHMEM_STATUS
|
||||
int i, l, n;
|
||||
char *buf;
|
||||
struct msg_desc *mp;
|
||||
static unsigned int oncore_shmem_length;
|
||||
|
||||
if (oncore_messages[0].shmem == 0) {
|
||||
n = 1;
|
||||
for (mp = oncore_messages; mp->flag[0]; mp++) {
|
||||
mp->shmem = n;
|
||||
/* Allocate space for multiplexed almanac */
|
||||
if (!strcmp(mp->flag, "Cb")) {
|
||||
oncore_shmem_Cb = n;
|
||||
n += (mp->len + 2) * 34;
|
||||
}
|
||||
n += mp->len + 2;
|
||||
}
|
||||
oncore_shmem_length = n + 2;
|
||||
fprintf(stderr, "ONCORE: SHMEM length: %d bytes\n", oncore_shmem_length);
|
||||
}
|
||||
instance->statusfd = open(filename, O_RDWR|O_CREAT|O_TRUNC, 0644);
|
||||
if (instance->statusfd < 0) {
|
||||
perror(filename);
|
||||
exit(4);
|
||||
}
|
||||
buf = malloc(oncore_shmem_length);
|
||||
if (buf == NULL) {
|
||||
perror("malloc");
|
||||
exit(4);
|
||||
}
|
||||
memset(buf, 0, sizeof(buf));
|
||||
i = write(instance->statusfd, buf, oncore_shmem_length);
|
||||
if (i != oncore_shmem_length) {
|
||||
perror(filename);
|
||||
exit(4);
|
||||
}
|
||||
free(buf);
|
||||
instance->shmem = (u_char *) mmap(0, oncore_shmem_length,
|
||||
PROT_READ | PROT_WRITE,
|
||||
#ifdef MAP_HASSEMAPHORE
|
||||
MAP_HASSEMAPHORE |
|
||||
#endif
|
||||
MAP_SHARED,
|
||||
instance->statusfd, (off_t)0);
|
||||
if (instance->shmem == MAP_FAILED) {
|
||||
instance->shmem = 0;
|
||||
close (instance->statusfd);
|
||||
exit(4);
|
||||
}
|
||||
for (mp = oncore_messages; mp->flag[0]; mp++) {
|
||||
l = mp->shmem;
|
||||
instance->shmem[l + 0] = mp->len >> 8;
|
||||
instance->shmem[l + 1] = mp->len & 0xff;
|
||||
instance->shmem[l + 2] = '@';
|
||||
instance->shmem[l + 3] = '@';
|
||||
instance->shmem[l + 4] = mp->flag[0];
|
||||
instance->shmem[l + 5] = mp->flag[1];
|
||||
if (!strcmp(mp->flag, "Cb")) {
|
||||
for (i = 1; i < 35; i++) {
|
||||
instance->shmem[l + i * 35 + 0] = mp->len >> 8;
|
||||
instance->shmem[l + i * 35 + 1] = mp->len & 0xff;
|
||||
instance->shmem[l + i * 35 + 2] = '@';
|
||||
instance->shmem[l + i * 35 + 3] = '@';
|
||||
instance->shmem[l + i * 35 + 4] = mp->flag[0];
|
||||
instance->shmem[l + i * 35 + 5] = mp->flag[1];
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* ONCORE_SHMEM_STATUS */
|
||||
}
|
||||
|
||||
/*
|
||||
* Read Input file if it exists.
|
||||
*/
|
||||
@ -603,11 +752,10 @@ oncore_read_config(
|
||||
*/
|
||||
|
||||
FILE *fd;
|
||||
char *cp, line[100], units[2], device[20];
|
||||
int i, j, sign, lat_flg, long_flg, ht_flg, mode;
|
||||
char *cp, *cc, *ca, line[100], units[2], device[20];
|
||||
int i, sign, lat_flg, long_flg, ht_flg, mode;
|
||||
double f1, f2, f3;
|
||||
|
||||
|
||||
sprintf(device, "%s%d", INIT_FILE, instance->unit);
|
||||
if ((fd=fopen(device, "r")) == NULL)
|
||||
if ((fd=fopen(INIT_FILE, "r")) == NULL) {
|
||||
@ -618,22 +766,54 @@ oncore_read_config(
|
||||
mode = 0;
|
||||
lat_flg = long_flg = ht_flg = 0;
|
||||
while (fgets(line, 100, fd)) {
|
||||
if ((cp=strchr(line, '#')))
|
||||
|
||||
/* Remove comments */
|
||||
if ((cp = strchr(line, '#')))
|
||||
*cp = '\0';
|
||||
i = strlen(line);
|
||||
for (j=0; j<i; j++) /* just in case lower case */
|
||||
if (islower((int)line[j]))
|
||||
line[j] = toupper(line[j]);
|
||||
for (j=0; j<i; j++) /* let them use `=' between terms */
|
||||
if (line[j] == '=')
|
||||
line[j] = ' ';
|
||||
for (j=0; j<i; j++)
|
||||
if (line[j] != ' ')
|
||||
|
||||
/* Remove trailing space */
|
||||
for (i = strlen(line);
|
||||
i > 0 && isascii((int)line[i - 1]) && isspace((int)line[i - 1]);
|
||||
)
|
||||
line[--i] = '\0';
|
||||
|
||||
/* Remove leading space */
|
||||
for (cc = line; *cc && isascii((int)*cc) && isspace((int)*cc); cc++)
|
||||
continue;
|
||||
|
||||
/* Stop if nothing left */
|
||||
if (!*cc)
|
||||
continue;
|
||||
|
||||
/* Lowercase the command and find the arg */
|
||||
for (ca = cc; *ca; ca++) {
|
||||
if (isascii((int)*ca) && islower((int)*ca)) {
|
||||
*ca = toupper(*ca);
|
||||
} else if (isascii((int)*ca) && isspace((int)*ca)) {
|
||||
break;
|
||||
if (!strncmp(&line[j], "LAT", 3)) {
|
||||
j += 3;
|
||||
} else if (*ca == '=') {
|
||||
*ca = ' ';
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove space leading the arg */
|
||||
for (; *ca && isascii((int)*ca) && isspace((int)*ca); ca++)
|
||||
continue;
|
||||
|
||||
if (!strncmp(cc, "STATUS", 6)) {
|
||||
oncore_init_shmem(instance, ca);
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Uppercase argument as well */
|
||||
for (cp = ca; *cp; cp++)
|
||||
if (isascii((int)*cp) && islower((int)*cp))
|
||||
*cp = toupper(*cp);
|
||||
|
||||
if (!strncmp(cc, "LAT", 3)) {
|
||||
f1 = f2 = f3 = 0;
|
||||
sscanf(&line[j], "%lf %lf %lf", &f1, &f2, &f3);
|
||||
sscanf(ca, "%lf %lf %lf", &f1, &f2, &f3);
|
||||
sign = 1;
|
||||
if (f1 < 0) {
|
||||
f1 = -f1;
|
||||
@ -641,10 +821,9 @@ oncore_read_config(
|
||||
}
|
||||
instance->ss_lat = sign*1000*(fabs(f3) + 60*(fabs(f2) + 60*f1)); /*miliseconds*/
|
||||
lat_flg++;
|
||||
} else if (!strncmp(&line[j], "LON", 3)) {
|
||||
j += 3;
|
||||
} else if (!strncmp(cc, "LON", 3)) {
|
||||
f1 = f2 = f3 = 0;
|
||||
sscanf(&line[j], "%lf %lf %lf", &f1, &f2, &f3);
|
||||
sscanf(ca, "%lf %lf %lf", &f1, &f2, &f3);
|
||||
sign = 1;
|
||||
if (f1 < 0) {
|
||||
f1 = -f1;
|
||||
@ -652,29 +831,24 @@ oncore_read_config(
|
||||
}
|
||||
instance->ss_long = sign*1000*(fabs(f3) + 60*(fabs(f2) + 60*f1)); /*miliseconds*/
|
||||
long_flg++;
|
||||
} else if (!strncmp(&line[j], "HT", 2)) {
|
||||
instance->ss_ht_type = 0;
|
||||
if (!strncmp(&line[j], "HTGPS", 5)) {
|
||||
} else if (!strncmp(cc, "HT", 2)) {
|
||||
if (!strncmp(cc, "HTGPS", 5))
|
||||
instance->ss_ht_type = 0;
|
||||
j +=3;
|
||||
}
|
||||
if (!strncmp(&line[j], "HTMSL", 5)) {
|
||||
else if (!strncmp(cc, "HTMSL", 5))
|
||||
instance->ss_ht_type = 1;
|
||||
j +=3;
|
||||
}
|
||||
j += 2;
|
||||
else
|
||||
instance->ss_ht_type = 0;
|
||||
f1 = 0;
|
||||
units[0] = '\0';
|
||||
sscanf(&line[j], "%lf %1s", &f1, units);
|
||||
sscanf(ca, "%lf %1s", &f1, units);
|
||||
if (units[0] == 'F')
|
||||
f1 = 0.3048 * f1;
|
||||
instance->ss_ht = 100 * f1; /* cm */
|
||||
ht_flg++;
|
||||
} else if (!strncmp(&line[j], "DELAY", 5)) {
|
||||
j += 5;
|
||||
} else if (!strncmp(cc, "DELAY", 5)) {
|
||||
f1 = 0;
|
||||
units[0] = '\0';
|
||||
sscanf(&line[j], "%lf %1s", &f1, units);
|
||||
sscanf(ca, "%lf %1s", &f1, units);
|
||||
if (units[0] == 'N')
|
||||
;
|
||||
else if (units[0] == 'U')
|
||||
@ -686,11 +860,10 @@ oncore_read_config(
|
||||
if (f1 < 0 || f1 > 1.e9)
|
||||
f1 = 0;
|
||||
instance->delay = f1; /* delay in ns */
|
||||
} else if (!strncmp(&line[j], "OFFSET", 6)) {
|
||||
j += 6;
|
||||
} else if (!strncmp(cc, "OFFSET", 6)) {
|
||||
f1 = 0;
|
||||
units[0] = '\0';
|
||||
sscanf(&line[j], "%lf %1s", &f1, units);
|
||||
sscanf(ca, "%lf %1s", &f1, units);
|
||||
if (units[0] == 'N')
|
||||
;
|
||||
else if (units[0] == 'U')
|
||||
@ -702,15 +875,14 @@ oncore_read_config(
|
||||
if (f1 < 0 || f1 > 1.e9)
|
||||
f1 = 0;
|
||||
instance->offset = f1; /* offset in ns */
|
||||
} else if (!strncmp(&line[j], "MODE", 4)) {
|
||||
j += 4;
|
||||
sscanf(&line[j], "%d", &mode);
|
||||
} else if (!strncmp(cc, "MODE", 4)) {
|
||||
sscanf(ca, "%d", &mode);
|
||||
if (mode < 0 || mode > 4)
|
||||
mode = 4;
|
||||
instance->init_type = mode;
|
||||
} else if (!strncmp(&line[j], "ASSERT", 6)) {
|
||||
} else if (!strncmp(cc, "ASSERT", 6)) {
|
||||
instance->assert = 1;
|
||||
} else if (!strncmp(&line[j], "CLEAR", 5)) {
|
||||
} else if (!strncmp(cc, "CLEAR", 5)) {
|
||||
instance->assert = 0;
|
||||
}
|
||||
}
|
||||
@ -763,6 +935,16 @@ oncore_poll(
|
||||
struct instance *instance;
|
||||
|
||||
instance = (struct instance *) peer->procptr->unitptr;
|
||||
if (instance->timeout) {
|
||||
char *cp;
|
||||
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Cj, sizeof oncore_cmd_Cj);
|
||||
instance->o_state = ONCORE_ID_SENT;
|
||||
cp = "state = ONCORE_ID_SENT";
|
||||
record_clock_stats(&(instance->peer->srcadr), cp);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!instance->pollcnt)
|
||||
refclock_report(peer, CEVNT_TIMEOUT);
|
||||
else
|
||||
@ -822,7 +1004,8 @@ oncore_consume(
|
||||
struct instance *instance
|
||||
)
|
||||
{
|
||||
int i, l, j, m;
|
||||
int i, j, m;
|
||||
unsigned l;
|
||||
|
||||
while (rcvptr >= 7) {
|
||||
if (rcvbuf[0] != '@' || rcvbuf[1] != '@') {
|
||||
@ -858,6 +1041,9 @@ oncore_consume(
|
||||
for (i = 2; i < l-3; i++)
|
||||
j ^= rcvbuf[i];
|
||||
if (j == rcvbuf[l-3]) {
|
||||
if (instance->shmem != NULL)
|
||||
memcpy(instance->shmem + oncore_messages[m].shmem + 2,
|
||||
rcvbuf, l);
|
||||
oncore_msg_any(instance, rcvbuf, (unsigned) (l-3), m);
|
||||
if (oncore_messages[m].handler)
|
||||
oncore_messages[m].handler(instance, rcvbuf, (unsigned) (l-3));
|
||||
@ -941,6 +1127,33 @@ oncore_msg_any(
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* Demultiplex the almanac into shmem
|
||||
*/
|
||||
static void
|
||||
oncore_msg_Cb(
|
||||
struct instance *instance,
|
||||
u_char *buf,
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (instance->shmem == NULL)
|
||||
return;
|
||||
|
||||
if (buf[4] == 5)
|
||||
i = buf[5];
|
||||
else if (buf[4] == 4 && buf[5] <= 5)
|
||||
i = buf[5] + 24;
|
||||
else if (buf[4] == 4 && buf[5] <= 10)
|
||||
i = buf[5] + 23;
|
||||
else
|
||||
i = 34;
|
||||
i *= 35;
|
||||
memcpy(instance->shmem + oncore_shmem_Cb + i + 2, buf, len + 3);
|
||||
}
|
||||
|
||||
/*
|
||||
* Set to Factory Defaults (Reasonable for UT w/ no Battery Backup
|
||||
* not so for VP (eeprom) or UT with battery
|
||||
@ -964,6 +1177,15 @@ oncore_msg_Cf(
|
||||
|
||||
|
||||
|
||||
/* there are good reasons NOT to do a @@Fa command with the ONCORE.
|
||||
* Doing it, it was found that under some circumstances the following
|
||||
* command would fail if issued immediately after the return from the
|
||||
* @@Fa, but a 2sec delay seemed to fix things. Since simply calling
|
||||
* sleep(2) is wastefull, and may cause trouble for some OS's, repeating
|
||||
* itimer, we set a flag, and test it at the next POLL. If it hasnt
|
||||
* been cleared, we reissue the @@Ca that is issued below.
|
||||
*/
|
||||
|
||||
static void
|
||||
oncore_msg_Fa(
|
||||
struct instance *instance,
|
||||
@ -981,12 +1203,6 @@ oncore_msg_Fa(
|
||||
exit(1);
|
||||
}
|
||||
|
||||
/* sometimes the @@Cj request does not produce any output
|
||||
PERHAPS the ONCORE is still busy from the selftest???
|
||||
try a 2 second sleep here to see if it makes any difference
|
||||
*/
|
||||
|
||||
sleep(2);
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Cj, sizeof oncore_cmd_Cj);
|
||||
instance->o_state = ONCORE_ID_SENT;
|
||||
cp = "state = ONCORE_ID_SENT";
|
||||
@ -1006,19 +1222,41 @@ oncore_msg_Cj(
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
const char *cp;
|
||||
char *cp, *cp1;
|
||||
int mode;
|
||||
|
||||
instance->timeout = 0;
|
||||
if (instance->o_state != ONCORE_ID_SENT)
|
||||
return;
|
||||
|
||||
memcpy(instance->Cj, buf, len);
|
||||
|
||||
/* Write Receiver ID to clockstats file */
|
||||
|
||||
instance->Cj[294] = '\0';
|
||||
for (cp=(char *)instance->Cj; cp< (char *) &instance->Cj[294]; ) {
|
||||
cp1 = strchr(cp, '\r');
|
||||
if (!cp1)
|
||||
cp1 = (char *)&instance->Cj[294];
|
||||
*cp1 = '\0';
|
||||
record_clock_stats(&(instance->peer->srcadr), cp);
|
||||
*cp1 = '\r';
|
||||
cp = cp1+2;
|
||||
}
|
||||
#ifdef HAVE_PPSAPI
|
||||
if (instance->assert)
|
||||
cp = "Timing on Assert.";
|
||||
else
|
||||
cp = "Timing on Clear.";
|
||||
record_clock_stats(&(instance->peer->srcadr), cp);
|
||||
#endif
|
||||
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Cg, sizeof oncore_cmd_Cg); /* Set Posn Fix mode (not Idle (VP)) */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Bb, sizeof oncore_cmd_Bb); /* turn off */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Ek, sizeof oncore_cmd_Ek); /* turn off */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Aw, sizeof oncore_cmd_Aw); /* UTC time */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_AB, sizeof oncore_cmd_AB); /* Appl type static */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Be, sizeof oncore_cmd_Be); /* Tell us the Almanac */
|
||||
|
||||
mode = instance->init_type;
|
||||
if (debug)
|
||||
@ -1094,6 +1332,7 @@ oncore_msg_Ea(
|
||||
)
|
||||
{
|
||||
const char *cp;
|
||||
char Msg[160];
|
||||
|
||||
if (instance->o_state != ONCORE_ALMANAC && instance->o_state != ONCORE_RUN)
|
||||
return;
|
||||
@ -1128,6 +1367,7 @@ oncore_msg_Ea(
|
||||
/* Read back Position Hold Params */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Asx, sizeof oncore_cmd_Asx);
|
||||
/* Read back PPS Offset for Output */
|
||||
/* Nb. This will fail silently for early UT (no plus) model */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Ayx, sizeof oncore_cmd_Ayx);
|
||||
/* Read back Cable Delay for Output */
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_Azx, sizeof oncore_cmd_Azx);
|
||||
@ -1184,14 +1424,6 @@ oncore_msg_Ea(
|
||||
instance->ss_ht += buf_w32(&instance->Ea[23]); /* GPS ellipse */
|
||||
instance->ss_count++;
|
||||
|
||||
if (debug)
|
||||
printf("ONCORE: AVG %d %d %d %d\n",
|
||||
instance->ss_count,
|
||||
(unsigned) (instance->ss_lat / instance->ss_count),
|
||||
(unsigned) (instance->ss_long / instance->ss_count),
|
||||
(unsigned) (instance->ss_ht / instance->ss_count)
|
||||
);
|
||||
|
||||
if (instance->ss_count != POS_HOLD_AVERAGE)
|
||||
return;
|
||||
|
||||
@ -1199,6 +1431,10 @@ oncore_msg_Ea(
|
||||
instance->ss_long /= POS_HOLD_AVERAGE;
|
||||
instance->ss_ht /= POS_HOLD_AVERAGE;
|
||||
|
||||
sprintf(Msg, "Surveyed posn: lat %.3f long %.3f ht %.3f",
|
||||
instance->ss_lat, instance->ss_long, instance->ss_ht);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
|
||||
w32_buf(&oncore_cmd_As[2], (int) instance->ss_lat);
|
||||
w32_buf(&oncore_cmd_As[6], (int) instance->ss_long);
|
||||
w32_buf(&oncore_cmd_As[10], (int) instance->ss_ht);
|
||||
@ -1240,6 +1476,9 @@ oncore_msg_En(
|
||||
struct ppsclockev ev;
|
||||
int r = TIOCGPPSEV;
|
||||
#endif
|
||||
#if TIOCDCDTIMESTAMP
|
||||
struct timeval tv;
|
||||
#endif
|
||||
#endif /* ! HAVE_PPS_API */
|
||||
|
||||
if (instance->o_state != ONCORE_RUN)
|
||||
@ -1311,7 +1550,8 @@ oncore_msg_En(
|
||||
DTOLFP(dmy, &ts);
|
||||
ts.l_ui = tsp->tv_sec;
|
||||
#endif /* 0 */
|
||||
#else /* ! HAVE_PPSAPI */
|
||||
#else
|
||||
# if defined(HAVE_TIOCGPPSEV) || defined(HAVE_CIOGETEV)
|
||||
j = instance->ev_serial;
|
||||
if (ioctl(instance->ppsfd, r, (caddr_t) &ev) < 0) {
|
||||
perror("ONCORE: IOCTL:");
|
||||
@ -1333,6 +1573,18 @@ oncore_msg_En(
|
||||
/* convert timeval -> ntp l_fp */
|
||||
|
||||
TVTOTS(tsp, &ts);
|
||||
# else
|
||||
# if defined(TIOCDCDTIMESTAMP)
|
||||
if(ioctl(instance->ppsfd, TIOCDCDTIMESTAMP, &tv) < 0) {
|
||||
perror("ONCORE: ioctl(TIOCDCDTIMESTAMP)");
|
||||
return;
|
||||
}
|
||||
tsp = &tv;
|
||||
TVTOTS(tsp, &ts);
|
||||
# else
|
||||
#error "Cannot compile -- no PPS mechanism configured!"
|
||||
# endif
|
||||
# endif
|
||||
#endif
|
||||
/* now have timestamp in ts */
|
||||
/* add in saw_tooth and offset */
|
||||
@ -1427,19 +1679,25 @@ oncore_msg_At(
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
|
||||
if (instance->site_survey != ONCORE_SS_UNKNOWN)
|
||||
return;
|
||||
|
||||
if (buf[4] == 2)
|
||||
if (buf[4] == 2) {
|
||||
record_clock_stats(&(instance->peer->srcadr),
|
||||
"Initiating hardware 3D site survey");
|
||||
instance->site_survey = ONCORE_SS_HW;
|
||||
else {
|
||||
instance->site_survey = ONCORE_SS_SW;
|
||||
|
||||
} else {
|
||||
char Msg[160];
|
||||
/*
|
||||
* Probably a VP or an older UT which can't do site-survey.
|
||||
* We will have to do it ourselves
|
||||
*/
|
||||
|
||||
sprintf(Msg, "Initiating software 3D site survey (%d samples)",
|
||||
POS_HOLD_AVERAGE);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
instance->site_survey = ONCORE_SS_SW;
|
||||
|
||||
oncore_cmd_At[2] = 0;
|
||||
instance->ss_lat = instance->ss_long = instance->ss_ht = 0;
|
||||
oncore_sendmsg(instance->ttyfd, oncore_cmd_At, sizeof oncore_cmd_At);
|
||||
@ -1497,7 +1755,11 @@ oncore_msg_As(
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
int lat, lon, ht;
|
||||
char Msg[120], ew, ns;
|
||||
const char *Ht;
|
||||
double xd, xm, xs, yd, ym, ys, hm, hft;
|
||||
int idx, idy, is, imx, imy;
|
||||
long lat, lon, ht;
|
||||
|
||||
if (!instance->printed || instance->As)
|
||||
return;
|
||||
@ -1515,86 +1777,7 @@ oncore_msg_As(
|
||||
|
||||
instance->ss_ht_type = buf[16];
|
||||
|
||||
if (instance->Ay && instance->Az)
|
||||
oncore_stats(instance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get PPS Offset
|
||||
*/
|
||||
static void
|
||||
oncore_msg_Ay(
|
||||
struct instance *instance,
|
||||
u_char *buf,
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
if (!instance->printed || instance->Ay)
|
||||
return;
|
||||
|
||||
instance->Ay = 1;
|
||||
|
||||
instance->offset = buf_w32(&buf[4]);
|
||||
|
||||
if (instance->As && instance->Az)
|
||||
oncore_stats(instance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get Cable Delay
|
||||
*/
|
||||
static void
|
||||
oncore_msg_Az(
|
||||
struct instance *instance,
|
||||
u_char *buf,
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
if (!instance->printed || instance->Az)
|
||||
return;
|
||||
|
||||
instance->Az = 1;
|
||||
|
||||
instance->delay = buf_w32(&buf[4]);
|
||||
|
||||
if (instance->As && instance->Ay)
|
||||
oncore_stats(instance);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* print init data in ONCORE to clockstats file
|
||||
*/
|
||||
static void
|
||||
oncore_stats(
|
||||
struct instance *instance
|
||||
)
|
||||
{
|
||||
char Msg[120], ew, ns, *cp, *cp1;
|
||||
const char *Ht;
|
||||
double xd, xm, xs, yd, ym, ys, hm, hft;
|
||||
int idx, idy, is, imx, imy;
|
||||
long lat, lon;
|
||||
|
||||
/* First, Receiver ID */
|
||||
|
||||
instance->Cj[294] = '\0';
|
||||
for (cp=(char *)instance->Cj; cp< (char *) &instance->Cj[294]; ) {
|
||||
cp1 = strchr(cp, '\r');
|
||||
if (!cp1)
|
||||
cp1 = (char *)&instance->Cj[294];
|
||||
*cp1 = '\0';
|
||||
record_clock_stats(&(instance->peer->srcadr), cp);
|
||||
*cp1 = '\r';
|
||||
cp = cp1+2;
|
||||
}
|
||||
|
||||
/* Next Position */
|
||||
/* Print out Position */
|
||||
|
||||
record_clock_stats(&(instance->peer->srcadr), "Posn:");
|
||||
ew = 'E';
|
||||
@ -1637,24 +1820,58 @@ oncore_stats(
|
||||
ys = is/1000.;
|
||||
sprintf(Msg, "Lat = %c %3ddeg %2dm %5.2fs, Long = %c %3ddeg %2dm %5.2fs, Alt = %5.2fm (%5.2fft) %s", ns, idx, imx, xs, ew, idy, imy, ys, hm, hft, Ht);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
}
|
||||
|
||||
/* finally, cable delay and PPS offset */
|
||||
|
||||
sprintf(Msg, "Cable delay is set to %ld ns", instance->delay);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
|
||||
/*
|
||||
* get PPS Offset
|
||||
* Nb. @@Ay is not supported for early UT (no plus) model
|
||||
*/
|
||||
static void
|
||||
oncore_msg_Ay(
|
||||
struct instance *instance,
|
||||
u_char *buf,
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
char Msg[120];
|
||||
|
||||
if (!instance->printed || instance->Ay)
|
||||
return;
|
||||
|
||||
instance->Ay = 1;
|
||||
|
||||
instance->offset = buf_w32(&buf[4]);
|
||||
|
||||
sprintf(Msg, "PPS Offset is set to %ld ns", instance->offset);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
|
||||
#ifdef HAVE_PPSAPI
|
||||
if (instance->assert)
|
||||
cp = "Timing on Assert.";
|
||||
else
|
||||
cp = "Timing on Clear.";
|
||||
record_clock_stats(&(instance->peer->srcadr), cp);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* get Cable Delay
|
||||
*/
|
||||
static void
|
||||
oncore_msg_Az(
|
||||
struct instance *instance,
|
||||
u_char *buf,
|
||||
u_int len
|
||||
)
|
||||
{
|
||||
char Msg[120];
|
||||
|
||||
if (!instance->printed || instance->Az)
|
||||
return;
|
||||
|
||||
instance->Az = 1;
|
||||
|
||||
instance->delay = buf_w32(&buf[4]);
|
||||
|
||||
sprintf(Msg, "Cable delay is set to %ld ns", instance->delay);
|
||||
record_clock_stats(&(instance->peer->srcadr), Msg);
|
||||
}
|
||||
#else
|
||||
int refclock_oncore_bs;
|
||||
#endif /* REFCLOCK */
|
||||
|
@ -86,6 +86,7 @@ struct refclock refclock_palisade = {
|
||||
NOFLAGS /* not used */
|
||||
};
|
||||
|
||||
int day_of_year P((char *dt));
|
||||
|
||||
/*
|
||||
* palisade_start - open the devices and initialize data for processing
|
||||
|
@ -1,7 +1,7 @@
|
||||
/*
|
||||
* /src/NTP/ntp-4/ntpd/refclock_parse.c,v 4.29 1999/02/28 19:58:23 kardel RELEASE_19990228_A
|
||||
* /src/NTP/ntp-4/ntpd/refclock_parse.c,v 4.36 1999/11/28 17:18:20 kardel RELEASE_19991128_A
|
||||
*
|
||||
* refclock_parse.c,v 4.29 1999/02/28 19:58:23 kardel RELEASE_19990228_A
|
||||
* refclock_parse.c,v 4.36 1999/11/28 17:18:20 kardel RELEASE_19991128_A
|
||||
*
|
||||
* generic reference clock driver for receivers
|
||||
*
|
||||
@ -134,7 +134,7 @@
|
||||
#include "ascii.h"
|
||||
#include "ieee754io.h"
|
||||
|
||||
static char rcsid[]="refclock_parse.c,v 4.29 1999/02/28 19:58:23 kardel RELEASE_19990228_A";
|
||||
static char rcsid[]="refclock_parse.c,v 4.36 1999/11/28 17:18:20 kardel RELEASE_19991128_A";
|
||||
|
||||
/**===========================================================================
|
||||
** external interface to ntp mechanism
|
||||
@ -341,7 +341,7 @@ struct parseunit
|
||||
u_char flags; /* flags (leap_control) */
|
||||
u_long lastchange; /* time (ntp) when last state change accured */
|
||||
u_long statetime[CEVNT_MAX+1]; /* accumulated time of clock states */
|
||||
u_char pollneeddata; /* 1 for receive sample expected in PPS mode */
|
||||
u_long pollneeddata; /* current_time(!=0) for receive sample expected in PPS mode */
|
||||
u_short lastformat; /* last format used */
|
||||
u_long lastsync; /* time (ntp) when clock was last seen fully synchronized */
|
||||
u_long lastmissed; /* time (ntp) when poll didn't get data (powerup heuristic) */
|
||||
@ -609,16 +609,17 @@ static poll_info_t wsdcf_pollinfo = { WS_POLLRATE, WS_POLLCMD, WS_CMDSIZE };
|
||||
* RAWDCF receivers that need to be powered from DTR
|
||||
* (like Expert mouse clock)
|
||||
*/
|
||||
static int rawdcfdtr_init P((struct parseunit *));
|
||||
#define RAWDCFDTR_DESCRIPTION "RAW DCF77 CODE (DTR OPTION)"
|
||||
#define RAWDCFDTR_INIT rawdcfdtr_init
|
||||
static int rawdcf_init_1 P((struct parseunit *));
|
||||
#define RAWDCFDTRSET_DESCRIPTION "RAW DCF77 CODE (DTR SET/RTS CLR)"
|
||||
#define RAWDCFDTRSET_INIT rawdcf_init_1
|
||||
|
||||
/*
|
||||
* RAWDCF receivers that need to be powered from RTS
|
||||
* RAWDCF receivers that need to be powered from
|
||||
* DTR CLR and RTS SET
|
||||
*/
|
||||
static int rawdcfrts_init P((struct parseunit *));
|
||||
#define RAWDCFRTS_DESCRIPTION "RAW DCF77 CODE (RTS OPTION)"
|
||||
#define RAWDCFRTS_INIT rawdcfrts_init
|
||||
static int rawdcf_init_2 P((struct parseunit *));
|
||||
#define RAWDCFDTRCLRRTSSET_DESCRIPTION "RAW DCF77 CODE (DTR CLR/RTS SET)"
|
||||
#define RAWDCFDTRCLRRTSSET_INIT rawdcf_init_2
|
||||
|
||||
/*
|
||||
* Trimble GPS receivers (TAIP and TSIP protocols)
|
||||
@ -766,6 +767,8 @@ static poll_info_t rcc8000_pollinfo = { RCC_POLLRATE, RCC_POLLCMD, RCC_CMDSIZE }
|
||||
#define COMPUTIME_SAMPLES 5
|
||||
#define COMPUTIME_KEEP 3
|
||||
|
||||
static poll_info_t we400a_pollinfo = { 60, "T", 1 };
|
||||
|
||||
/*
|
||||
* Varitext Radio Clock Receiver
|
||||
*/
|
||||
@ -1144,7 +1147,7 @@ static struct parse_clockinfo
|
||||
{ /* mode 14 */
|
||||
RAWDCF_FLAGS,
|
||||
NO_POLL,
|
||||
RAWDCFDTR_INIT,
|
||||
RAWDCFDTRSET_INIT,
|
||||
NO_EVENT,
|
||||
NO_END,
|
||||
NO_MESSAGE,
|
||||
@ -1152,7 +1155,7 @@ static struct parse_clockinfo
|
||||
RAWDCF_ROOTDELAY,
|
||||
RAWDCF_BASEDELAY,
|
||||
DCF_A_ID,
|
||||
RAWDCFDTR_DESCRIPTION,
|
||||
RAWDCFDTRSET_DESCRIPTION,
|
||||
RAWDCF_FORMAT,
|
||||
DCF_TYPE,
|
||||
RAWDCF_MAXUNSYNC,
|
||||
@ -1165,31 +1168,54 @@ static struct parse_clockinfo
|
||||
RAWDCF_KEEP
|
||||
},
|
||||
{ /* mode 15 */
|
||||
0, /* operation flags (io modes) */
|
||||
NO_POLL, /* active poll routine */
|
||||
NO_INIT, /* active poll init routine */
|
||||
NO_EVENT, /* special event handling (e.g. reset clock) */
|
||||
NO_END, /* active poll end routine */
|
||||
NO_MESSAGE, /* process a lower layer message */
|
||||
NO_DATA, /* local data area for "poll" mechanism */
|
||||
0, /* rootdelay */
|
||||
11.0 /* bits */ / 9600, /* current offset by which the RS232
|
||||
time code is delayed from the actual time */
|
||||
DCF_ID, /* ID code */
|
||||
"WHARTON 400A Series clock", /* device name */
|
||||
"WHARTON 400A Series clock Output Format 1", /* fixed format */
|
||||
/* Must match a format-name in a libparse/clk_xxx.c file */
|
||||
DCF_TYPE, /* clock type (ntp control) */
|
||||
(1*60*60)/*?*/, /* time to trust oscillator after loosing synch */
|
||||
B9600, /* terminal input & output baudrate */
|
||||
(CS8|CREAD|PARENB|CLOCAL|HUPCL), /* terminal control flags */
|
||||
0, /* terminal input flags */
|
||||
0, /* terminal output flags */
|
||||
0, /* terminal local flags */
|
||||
5/*?*/, /* samples for median filter */
|
||||
3/*?*/, /* samples for median filter to keep */
|
||||
0, /* operation flags (io modes) */
|
||||
poll_dpoll, /* active poll routine */
|
||||
poll_init, /* active poll init routine */
|
||||
NO_EVENT, /* special event handling (e.g. reset clock) */
|
||||
NO_END, /* active poll end routine */
|
||||
NO_MESSAGE, /* process a lower layer message */
|
||||
((void *)(&we400a_pollinfo)), /* local data area for "poll" mechanism */
|
||||
0, /* rootdelay */
|
||||
1.0 / 960, /* current offset by which the RS232
|
||||
time code is delayed from the actual time */
|
||||
DCF_ID, /* ID code */
|
||||
"WHARTON 400A Series clock", /* device name */
|
||||
"WHARTON 400A Series clock Output Format 5", /* fixed format */
|
||||
/* Must match a format-name in a libparse/clk_xxx.c file */
|
||||
DCF_TYPE, /* clock type (ntp control) */
|
||||
(1*60*60), /* time to trust oscillator after loosing synch */
|
||||
B9600, /* terminal input & output baudrate */
|
||||
(CS8|CREAD|PARENB|CLOCAL|HUPCL),/* terminal control flags */
|
||||
0, /* terminal input flags */
|
||||
0, /* terminal output flags */
|
||||
0, /* terminal local flags */
|
||||
5, /* samples for median filter */
|
||||
3, /* samples for median filter to keep */
|
||||
},
|
||||
{ /* mode 16 */
|
||||
{ /* mode 16 - RAWDCF RTS set, DTR clr */
|
||||
RAWDCF_FLAGS,
|
||||
NO_POLL,
|
||||
RAWDCFDTRCLRRTSSET_INIT,
|
||||
NO_EVENT,
|
||||
NO_END,
|
||||
NO_MESSAGE,
|
||||
NO_DATA,
|
||||
RAWDCF_ROOTDELAY,
|
||||
RAWDCF_BASEDELAY,
|
||||
DCF_A_ID,
|
||||
RAWDCFDTRCLRRTSSET_DESCRIPTION,
|
||||
RAWDCF_FORMAT,
|
||||
DCF_TYPE,
|
||||
RAWDCF_MAXUNSYNC,
|
||||
RAWDCF_SPEED,
|
||||
RAWDCF_CFLAG,
|
||||
RAWDCF_IFLAG,
|
||||
RAWDCF_OFLAG,
|
||||
RAWDCF_LFLAG,
|
||||
RAWDCF_SAMPLES,
|
||||
RAWDCF_KEEP
|
||||
},
|
||||
{ /* mode 17 */
|
||||
VARITEXT_FLAGS,
|
||||
NO_POLL,
|
||||
NO_INIT,
|
||||
@ -1211,30 +1237,7 @@ static struct parse_clockinfo
|
||||
VARITEXT_LFLAG,
|
||||
VARITEXT_SAMPLES,
|
||||
VARITEXT_KEEP
|
||||
},
|
||||
{ /* mode 17 */
|
||||
RAWDCF_FLAGS,
|
||||
NO_POLL,
|
||||
RAWDCFRTS_INIT,
|
||||
NO_EVENT,
|
||||
NO_END,
|
||||
NO_MESSAGE,
|
||||
NO_DATA,
|
||||
RAWDCF_ROOTDELAY,
|
||||
RAWDCF_BASEDELAY,
|
||||
DCF_A_ID,
|
||||
RAWDCFRTS_DESCRIPTION,
|
||||
RAWDCF_FORMAT,
|
||||
DCF_TYPE,
|
||||
RAWDCF_MAXUNSYNC,
|
||||
RAWDCF_SPEED,
|
||||
RAWDCF_CFLAG,
|
||||
RAWDCF_IFLAG,
|
||||
RAWDCF_OFLAG,
|
||||
RAWDCF_LFLAG,
|
||||
RAWDCF_SAMPLES,
|
||||
RAWDCF_KEEP
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
static int ncltypes = sizeof(parse_clockinfo) / sizeof(struct parse_clockinfo);
|
||||
@ -1554,9 +1557,9 @@ ppsclock_init(
|
||||
ioctl(parse->generic->io.fd, I_PUSH, (caddr_t)m2) == -1)
|
||||
{
|
||||
if (errno != EINVAL)
|
||||
{
|
||||
msyslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m",
|
||||
CLK_UNIT(parse->peer));
|
||||
{
|
||||
msyslog(LOG_ERR, "PARSE receiver #%d: ppsclock_init: ioctl(fd, I_PUSH, \"ppsclock\"): %m",
|
||||
CLK_UNIT(parse->peer));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -1586,8 +1589,8 @@ stream_init(
|
||||
if (ioctl(parse->generic->io.fd, I_PUSH, (caddr_t)m1) == -1)
|
||||
{
|
||||
if (errno != EINVAL) /* accept non-existence */
|
||||
{
|
||||
msyslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CLK_UNIT(parse->peer));
|
||||
{
|
||||
msyslog(LOG_ERR, "PARSE receiver #%d: stream_init: ioctl(fd, I_PUSH, \"parse\"): %m", CLK_UNIT(parse->peer));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -2032,10 +2035,10 @@ local_input(
|
||||
}
|
||||
else
|
||||
{
|
||||
memmove((caddr_t)rbufp->recv_buffer,
|
||||
(caddr_t)&parse->parseio.parse_dtime,
|
||||
sizeof(parsetime_t));
|
||||
parse_iodone(&parse->parseio);
|
||||
memmove((caddr_t)rbufp->recv_buffer,
|
||||
(caddr_t)&parse->parseio.parse_dtime,
|
||||
sizeof(parsetime_t));
|
||||
parse_iodone(&parse->parseio);
|
||||
rbufp->recv_length = sizeof(parsetime_t);
|
||||
return 1; /* got something & in place return */
|
||||
}
|
||||
@ -2132,18 +2135,18 @@ parsestate(
|
||||
const 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_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" },
|
||||
{ PARSEB_ALTERNATE, "ALTERNATE ANTENNA" },
|
||||
{ PARSEB_TIMECODE, "TIME CODE" },
|
||||
{ PARSEB_PPS, "PPS" },
|
||||
{ PARSEB_POSITION, "POSITION" },
|
||||
{ 0 }
|
||||
};
|
||||
|
||||
@ -2538,9 +2541,6 @@ parse_start(
|
||||
peer->sstclktype = parse->parse_type->cl_type;
|
||||
peer->precision = sys_precision;
|
||||
|
||||
peer->burst = NTP_SHIFT;
|
||||
peer->flags |= FLAG_BURST;
|
||||
|
||||
peer->stratum = STRATUM_REFCLOCK;
|
||||
if (peer->stratum <= 1)
|
||||
memmove((char *)&parse->generic->refid, parse->parse_type->cl_id, 4);
|
||||
@ -2737,7 +2737,7 @@ parse_start(
|
||||
}
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
/*
|
||||
* try to do any special initializations
|
||||
*/
|
||||
@ -2816,9 +2816,11 @@ parse_poll(
|
||||
*/
|
||||
parse->generic->polls++;
|
||||
|
||||
if (parse->pollneeddata)
|
||||
if (parse->pollneeddata &&
|
||||
((current_time - parse->pollneeddata) > (1<<(max(min(parse->peer->hpoll, parse->peer->ppoll), parse->peer->minpoll)))))
|
||||
{
|
||||
/*
|
||||
* start worrying when exceeding a poll inteval
|
||||
* bad news - didn't get a response last time
|
||||
*/
|
||||
parse->generic->noreply++;
|
||||
@ -2832,7 +2834,7 @@ parse_poll(
|
||||
/*
|
||||
* we just mark that we want the next sample for the clock filter
|
||||
*/
|
||||
parse->pollneeddata = 1;
|
||||
parse->pollneeddata = current_time;
|
||||
|
||||
if (parse->parse_type->cl_poll)
|
||||
{
|
||||
@ -3380,7 +3382,7 @@ parse_process(
|
||||
if (reftime.l_uf & (unsigned)0x80000000)
|
||||
reftime.l_ui++;
|
||||
reftime.l_uf = 0;
|
||||
|
||||
|
||||
|
||||
/*
|
||||
* implied on second offset
|
||||
@ -3535,7 +3537,7 @@ parse_process(
|
||||
|
||||
refclock_receive(parse->peer);
|
||||
}
|
||||
|
||||
|
||||
/**===========================================================================
|
||||
** special code for special clocks
|
||||
**/
|
||||
@ -4149,7 +4151,7 @@ poll_init(
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/**===========================================================================
|
||||
** Trimble support
|
||||
**/
|
||||
@ -4260,7 +4262,7 @@ trimbletaip_event(
|
||||
* of the PPS pulse for accurate timing. Where it is determined that
|
||||
* the offset is way off, when first starting up ntpd for example,
|
||||
* the timing of the data stream is used until the offset becomes low enough
|
||||
* (|offset| < clock_max), at which point the pps offset is used.
|
||||
* (|offset| < CLOCK_MAX), at which point the pps offset is used.
|
||||
*
|
||||
* It can use either option for receiving PPS information - the 'ppsclock'
|
||||
* stream pushed onto the serial data interface to timestamp the Carrier
|
||||
@ -4349,6 +4351,12 @@ struct txbuf
|
||||
u_char *txt; /* pointer to actual data buffer */
|
||||
};
|
||||
|
||||
void sendcmd P((struct txbuf *buf, int c));
|
||||
void sendbyte P((struct txbuf *buf, int b));
|
||||
void sendetx P((struct txbuf *buf, struct parseunit *parse));
|
||||
void sendint P((struct txbuf *buf, int a));
|
||||
void sendflt P((struct txbuf *buf, double a));
|
||||
|
||||
void
|
||||
sendcmd(
|
||||
struct txbuf *buf,
|
||||
@ -4441,7 +4449,7 @@ static int
|
||||
trimbletsip_setup(
|
||||
struct parseunit *parse,
|
||||
const char *reason
|
||||
)
|
||||
)
|
||||
{
|
||||
u_char buffer[256];
|
||||
struct txbuf buf;
|
||||
@ -4449,34 +4457,34 @@ trimbletsip_setup(
|
||||
buf.txt = buffer;
|
||||
|
||||
sendcmd(&buf, CMD_CVERSION); /* request software versions */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_COPERPARAM); /* set operating parameters */
|
||||
sendbyte(&buf, 4); /* static */
|
||||
sendflt(&buf, 5.0*D2R); /* elevation angle mask = 10 deg XXX */
|
||||
sendflt(&buf, 4.0); /* s/n ratio mask = 6 XXX */
|
||||
sendflt(&buf, 12.0); /* PDOP mask = 12 */
|
||||
sendflt(&buf, 8.0); /* PDOP switch level = 8 */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendbyte(&buf, 4); /* static */
|
||||
sendflt(&buf, 5.0*D2R); /* elevation angle mask = 10 deg XXX */
|
||||
sendflt(&buf, 4.0); /* s/n ratio mask = 6 XXX */
|
||||
sendflt(&buf, 12.0); /* PDOP mask = 12 */
|
||||
sendflt(&buf, 8.0); /* PDOP switch level = 8 */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_CMODESEL); /* fix mode select */
|
||||
sendbyte(&buf, 0); /* automatic */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendbyte(&buf, 0); /* automatic */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_CMESSAGE); /* request system message */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_CSUPER); /* superpacket fix */
|
||||
sendbyte(&buf, 0x2); /* binary mode */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendbyte(&buf, 0x2); /* binary mode */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_CIOOPTIONS); /* set I/O options */
|
||||
sendbyte(&buf, TRIM_POS_OPT); /* position output */
|
||||
sendbyte(&buf, 0x00); /* no velocity output */
|
||||
sendbyte(&buf, TRIM_TIME_OPT); /* UTC, compute on seconds */
|
||||
sendbyte(&buf, 0x00); /* no raw measurements */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendetx(&buf, parse);
|
||||
|
||||
sendcmd(&buf, CMD_CUTCPARAM); /* request UTC correction data */
|
||||
sendetx(&buf, parse);
|
||||
|
||||
@ -4605,7 +4613,7 @@ trimbletsip_init(
|
||||
#ifdef VEOL2
|
||||
tio.c_cc[VEOL2] = DLE;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
if (TTY_SETATTR(parse->generic->io.fd, &tio) == -1)
|
||||
{
|
||||
@ -5133,11 +5141,12 @@ trimbletsip_message(
|
||||
**/
|
||||
|
||||
/*--------------------------------------------------
|
||||
* rawdcfdtr_init - set up modem lines for RAWDCF receivers
|
||||
* rawdcf_init_1 - set up modem lines for RAWDCF receivers
|
||||
* SET DTR line
|
||||
*/
|
||||
#if defined(TIOCMSET) && (defined(TIOCM_DTR) || defined(CIOCM_DTR))
|
||||
static int
|
||||
rawdcfdtr_init(
|
||||
rawdcf_init_1(
|
||||
struct parseunit *parse
|
||||
)
|
||||
{
|
||||
@ -5155,7 +5164,7 @@ rawdcfdtr_init(
|
||||
|
||||
if (ioctl(parse->generic->io.fd, TIOCMSET, (caddr_t)&sl232) == -1)
|
||||
{
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init: WARNING: ioctl(fd, TIOCMSET, [C|T]IOCM_DTR): %m", CLK_UNIT(parse->peer));
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init_1: WARNING: ioctl(fd, TIOCMSET, [C|T]IOCM_DTR): %m", CLK_UNIT(parse->peer));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@ -5165,47 +5174,49 @@ rawdcfdtr_init(
|
||||
struct parseunit *parse
|
||||
)
|
||||
{
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init: WARNING: OS interface incapable of setting DTR to power DCF modules", CLK_UNIT(parse->peer));
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init_1: WARNING: OS interface incapable of setting DTR to power DCF modules", CLK_UNIT(parse->peer));
|
||||
return 0;
|
||||
}
|
||||
#endif /* DTR initialisation type */
|
||||
|
||||
/*--------------------------------------------------
|
||||
* rawdcfrts_init - set up modem lines for RAWDCF receivers
|
||||
* rawdcf_init_2 - set up modem lines for RAWDCF receivers
|
||||
* CLR DTR line, SET RTS line
|
||||
*/
|
||||
#if defined(TIOCMSET) && (defined(TIOCM_RTS) || defined(CIOCM_RTS))
|
||||
#if defined(TIOCMSET) && (defined(TIOCM_RTS) || defined(CIOCM_RTS))
|
||||
static int
|
||||
rawdcfrts_init(
|
||||
rawdcf_init_2(
|
||||
struct parseunit *parse
|
||||
)
|
||||
{
|
||||
/*
|
||||
* You can use the RS232 to supply the power for a DCF77 receiver.
|
||||
* Here a voltage between the RTS and the DTR line is used.
|
||||
* Here a voltage between the DTR and the RTS line is used. Unfortunately
|
||||
* the name has changed from CIOCM_DTR to TIOCM_DTR recently.
|
||||
*/
|
||||
|
||||
#ifdef TIOCM_RTS
|
||||
int sl232 = TIOCM_RTS; /* turn on RTS for power supply */
|
||||
int sl232 = TIOCM_RTS; /* turn on RTS, clear DTR for power supply */
|
||||
#else
|
||||
int sl232 = CIOCM_RTS; /* turn on RTS for power supply */
|
||||
int sl232 = CIOCM_RTS; /* turn on DTR for power supply */
|
||||
#endif
|
||||
|
||||
if (ioctl(parse->generic->io.fd, TIOCMSET, (caddr_t)&sl232) == -1)
|
||||
{
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init: WARNING: ioctl(fd, TIOCMSET, [C|T]IOCM_RTS): %m", CLK_UNIT(parse->peer));
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init_2: WARNING: ioctl(fd, TIOCMSET, [C|T]IOCM_RTS): %m", CLK_UNIT(parse->peer));
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
static int
|
||||
rawdcfrts_init(
|
||||
rawdcf_init_2(
|
||||
struct parseunit *parse
|
||||
)
|
||||
{
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init: WARNING: OS interface incapable of setting RTS to power DCF modules", CLK_UNIT(parse->peer));
|
||||
msyslog(LOG_NOTICE, "PARSE receiver #%d: rawdcf_init_2: WARNING: OS interface incapable of setting RTS to power DCF modules", CLK_UNIT(parse->peer));
|
||||
return 0;
|
||||
}
|
||||
#endif /* RTS initialisation type */
|
||||
#endif /* DTR initialisation type */
|
||||
|
||||
#else /* defined(REFCLOCK) && defined(PARSE) */
|
||||
int refclock_parse_bs;
|
||||
@ -5215,6 +5226,27 @@ int refclock_parse_bs;
|
||||
* History:
|
||||
*
|
||||
* refclock_parse.c,v
|
||||
* Revision 4.36 1999/11/28 17:18:20 kardel
|
||||
* disabled burst mode
|
||||
*
|
||||
* Revision 4.35 1999/11/28 09:14:14 kardel
|
||||
* RECON_4_0_98F
|
||||
*
|
||||
* Revision 4.34 1999/05/14 06:08:05 kardel
|
||||
* store current_time in a suitable container (u_long)
|
||||
*
|
||||
* Revision 4.33 1999/05/13 21:48:38 kardel
|
||||
* double the no response timeout interval
|
||||
*
|
||||
* Revision 4.32 1999/05/13 20:09:13 kardel
|
||||
* complain only about missing polls after a full poll interval
|
||||
*
|
||||
* Revision 4.31 1999/05/13 19:59:32 kardel
|
||||
* add clock type 16 for RTS set DTR clr in RAWDCF
|
||||
*
|
||||
* Revision 4.30 1999/02/28 20:36:43 kardel
|
||||
* fixed printf fmt
|
||||
*
|
||||
* Revision 4.29 1999/02/28 19:58:23 kardel
|
||||
* updated copyright information
|
||||
*
|
||||
|
215
contrib/ntp/ntpd/refclock_pcf.c
Normal file
215
contrib/ntp/ntpd/refclock_pcf.c
Normal file
@ -0,0 +1,215 @@
|
||||
/*
|
||||
* refclock_pcf - clock driver for the Conrad parallel port radio clock
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#if defined(REFCLOCK) && defined(CLOCK_PCF)
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "ntpd.h"
|
||||
#include "ntp_io.h"
|
||||
#include "ntp_refclock.h"
|
||||
#include "ntp_calendar.h"
|
||||
#include "ntp_stdlib.h"
|
||||
|
||||
/*
|
||||
* This driver supports the parallel port radio clocks sold by Conrad
|
||||
* Electronic under order numbers 967602 and 642002.
|
||||
*
|
||||
* It requires that the local timezone be CET/CEST and that the pcfclock
|
||||
* device driver be installed. A device driver for Linux 2.2 is available
|
||||
* at http://home.pages.de/~voegele/pcf.html.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Interface definitions
|
||||
*/
|
||||
#define DEVICE "/dev/pcfclock%d"
|
||||
#define PRECISION (-1) /* precision assumed (about 0.5 s) */
|
||||
#define REFID "PCF"
|
||||
#define DESCRIPTION "Conrad parallel port radio clock"
|
||||
|
||||
#define LENPCF 18 /* timecode length */
|
||||
|
||||
/*
|
||||
* Function prototypes
|
||||
*/
|
||||
static int pcf_start P((int, struct peer *));
|
||||
static void pcf_shutdown P((int, struct peer *));
|
||||
static void pcf_poll P((int, struct peer *));
|
||||
|
||||
/*
|
||||
* Transfer vector
|
||||
*/
|
||||
struct refclock refclock_pcf = {
|
||||
pcf_start, /* start up driver */
|
||||
pcf_shutdown, /* shut down driver */
|
||||
pcf_poll, /* transmit poll message */
|
||||
noentry, /* not used */
|
||||
noentry, /* initialize driver (not used) */
|
||||
noentry, /* not used */
|
||||
NOFLAGS /* not used */
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
* pcf_start - open the device and initialize data for processing
|
||||
*/
|
||||
static int
|
||||
pcf_start(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
int fd;
|
||||
char device[20];
|
||||
|
||||
/*
|
||||
* Open device file for reading.
|
||||
*/
|
||||
(void)sprintf(device, DEVICE, unit);
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf ("starting PCF with device %s\n",device);
|
||||
#endif
|
||||
if ((fd = open(device, O_RDONLY)) == -1) {
|
||||
return (0);
|
||||
}
|
||||
|
||||
pp = peer->procptr;
|
||||
pp->io.clock_recv = noentry;
|
||||
pp->io.srcclock = (caddr_t)peer;
|
||||
pp->io.datalen = 0;
|
||||
pp->io.fd = fd;
|
||||
|
||||
/*
|
||||
* Initialize miscellaneous variables
|
||||
*/
|
||||
peer->precision = PRECISION;
|
||||
pp->clockdesc = DESCRIPTION;
|
||||
memcpy((char *)&pp->refid, REFID, 4);
|
||||
|
||||
return (1);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* pcf_shutdown - shut down the clock
|
||||
*/
|
||||
static void
|
||||
pcf_shutdown(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
|
||||
pp = peer->procptr;
|
||||
(void)close(pp->io.fd);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* pcf_poll - called by the transmit procedure
|
||||
*/
|
||||
static void
|
||||
pcf_poll(
|
||||
int unit,
|
||||
struct peer *peer
|
||||
)
|
||||
{
|
||||
struct refclockproc *pp;
|
||||
char buf[LENPCF];
|
||||
struct tm tm, *tp;
|
||||
time_t t;
|
||||
|
||||
pp = peer->procptr;
|
||||
|
||||
buf[0] = 0;
|
||||
if (read(pp->io.fd, buf, sizeof(buf)) < sizeof(buf) || buf[0] != 9) {
|
||||
refclock_report(peer, CEVNT_FAULT);
|
||||
return;
|
||||
}
|
||||
|
||||
tm.tm_mday = buf[11] * 10 + buf[10];
|
||||
tm.tm_mon = buf[13] * 10 + buf[12] - 1;
|
||||
tm.tm_year = buf[15] * 10 + buf[14];
|
||||
tm.tm_hour = buf[7] * 10 + buf[6];
|
||||
tm.tm_min = buf[5] * 10 + buf[4];
|
||||
tm.tm_sec = buf[3] * 10 + buf[2];
|
||||
tm.tm_isdst = -1;
|
||||
|
||||
/*
|
||||
* Y2K convert the 2-digit year
|
||||
*/
|
||||
if (tm.tm_year < 99)
|
||||
tm.tm_year += 100;
|
||||
|
||||
t = mktime(&tm);
|
||||
if (t == (time_t) -1) {
|
||||
refclock_report(peer, CEVNT_BADTIME);
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__GLIBC__) && defined(_BSD_SOURCE)
|
||||
if ((tm.tm_isdst > 0 && tm.tm_gmtoff != 7200)
|
||||
|| (tm.tm_isdst == 0 && tm.tm_gmtoff != 3600)
|
||||
|| tm.tm_isdst < 0) {
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf ("local time zone not set to CET/CEST\n");
|
||||
#endif
|
||||
refclock_report(peer, CEVNT_BADTIME);
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
pp->lencode = strftime(pp->a_lastcode, BMAX, "%Y %m %d %H %M %S", &tm);
|
||||
|
||||
#if defined(_REENTRANT) || defined(_THREAD_SAFE)
|
||||
tp = gmtime_r(&t, &tm);
|
||||
#else
|
||||
tp = gmtime(&t);
|
||||
#endif
|
||||
if (!tp) {
|
||||
refclock_report(peer, CEVNT_FAULT);
|
||||
return;
|
||||
}
|
||||
|
||||
get_systime(&pp->lastrec);
|
||||
pp->polls++;
|
||||
pp->year = tp->tm_year + 1900;
|
||||
pp->day = tp->tm_yday + 1;
|
||||
pp->hour = tp->tm_hour;
|
||||
pp->minute = tp->tm_min;
|
||||
pp->second = tp->tm_sec;
|
||||
pp->usec = buf[16] * 31250;
|
||||
if (buf[17] & 1)
|
||||
pp->usec += 500000;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (debug)
|
||||
printf ("pcf%d: time is %04d/%02d/%02d %02d:%02d:%02d UTC\n",
|
||||
unit, pp->year, tp->tm_mon + 1, tp->tm_mday, pp->hour,
|
||||
pp->minute, pp->second);
|
||||
#endif
|
||||
|
||||
if (!refclock_process(pp)) {
|
||||
refclock_report(peer, CEVNT_BADTIME);
|
||||
return;
|
||||
}
|
||||
record_clock_stats(&peer->srcadr, pp->a_lastcode);
|
||||
if (buf[1] & 1)
|
||||
pp->leap = LEAP_NOTINSYNC;
|
||||
else
|
||||
pp->leap = LEAP_NOWARNING;
|
||||
refclock_receive(peer);
|
||||
}
|
||||
#else
|
||||
int refclock_pcf_bs;
|
||||
#endif /* REFCLOCK */
|
@ -264,7 +264,7 @@ shm_poll(
|
||||
int ok=1;
|
||||
switch (up->mode) {
|
||||
case 0: {
|
||||
tvr.tv_sec=up->receiveTimeStampSec-172800;
|
||||
tvr.tv_sec=up->receiveTimeStampSec;
|
||||
tvr.tv_usec=up->receiveTimeStampUSec;
|
||||
tvt.tv_sec=up->clockTimeStampSec;
|
||||
tvt.tv_usec=up->clockTimeStampUSec;
|
||||
@ -272,7 +272,7 @@ shm_poll(
|
||||
break;
|
||||
case 1: {
|
||||
int cnt=up->count;
|
||||
tvr.tv_sec=up->receiveTimeStampSec-172800;
|
||||
tvr.tv_sec=up->receiveTimeStampSec;
|
||||
tvr.tv_usec=up->receiveTimeStampUSec;
|
||||
tvt.tv_sec=up->clockTimeStampSec;
|
||||
tvt.tv_usec=up->clockTimeStampUSec;
|
||||
@ -282,17 +282,17 @@ shm_poll(
|
||||
default:
|
||||
msyslog (LOG_ERR, "SHM: bad mode found in shared memory: %d",up->mode);
|
||||
}
|
||||
/*msyslog(LOG_NOTICE,"poll2a tvr.s %d tvr.u %d tvt.s %d tvt.u %d",tvr.tv_sec,tvr.tv_usec,tvt.tv_sec,tvt.tv_usec);*/
|
||||
up->valid=0;
|
||||
if (ok) {
|
||||
TVTOTS(&tvr,&pp->lastrec);
|
||||
/* pp->lasttime = current_time; */
|
||||
pp->polls++;
|
||||
t=gmtime (&tvt.tv_sec);
|
||||
pp->day=t->tm_yday;/*+2; */
|
||||
pp->day=t->tm_yday+1;
|
||||
pp->hour=t->tm_hour;
|
||||
pp->minute=t->tm_min;
|
||||
pp->second=t->tm_sec;
|
||||
pp->msec=0;
|
||||
pp->usec=tvt.tv_usec;
|
||||
peer->precision=up->precision;
|
||||
pp->leap=up->leap;
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user