home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 35 Internet / 35-Internet.zip / os2ntp12.zip / os2_ntpd.man < prev    next >
Text File  |  1998-06-21  |  28KB  |  487 lines

  1.                            User's Guide to OS2_NTPD,
  2.                    Network Time Protocol Client for OS/2 Warp
  3.                            Release 1.2, June 21, 1996
  4.  
  5.                                       by
  6.                        Bruce M. Penrod (bpenrod@nbn.com)
  7.  
  8.  
  9. I.  INTRODUCTION
  10.  
  11. OS2_NTPD is a 32-bit, multi-threaded, text mode, NTP client application that
  12. runs in a Presentation Manager text window.  It requires either OS/2 2.1 with
  13. TCP/IP version 2.0 or OS/2 version 3.0 or 4.0 (aka WARP or WARP Connect) to
  14. operate. It may reside in either an HPFS or FAT partition.  Three files must be
  15. present in the same directory:
  16.  
  17. 1)  os2_ntpd.exe       (the main program)
  18.  
  19. 2)  portio.dll         (a dynamic link library which gives os2_ntpd.exe access
  20.                         to the I/O ports and thereby the real time clock chip.
  21.                         It must reside in a directory included in the LIBPATH=
  22.                         statement of the config.sys or in the directory from
  23.                         which os2_ntpd.exe is executed.)
  24.  
  25. 3)  cfg_data           (data file containing the list of NTP servers to poll
  26.                         and the initial polling interval--optional if provided
  27.                         from command line in single server mode)
  28.  
  29. In addition, tcp32dll.dll and so32dll.dll must be present on the system in a
  30. directory which is included in the LIBPATH= statement in the config.sys.
  31.  
  32. After OS2_NTPD has been executed the first time, these additional files will be
  33. created in the same directory:
  34.  
  35. 1)  rtc_type           (data file containing the type of real time clock chip
  36.                         present on the system board--there are two different
  37.                         types,  unfortunately, indicated by a value of either 0
  38.                         or 500 in this file)
  39.  
  40. 2)  drift              (data file containing the NTP timestamp rounded to
  41.                         whole seconds of the last correction that was made to
  42.                         the real time clock followed by the fractional
  43.                         frequency offset of the real time clock timebase,
  44.                         positive means that the system clock is fast.  It may
  45.                         take several hours for this file to appear the first
  46.                         time)
  47.  
  48. 3)  suspects           (when debugging is enabled, data file containing server
  49.                        reply packets which differ from the client ensemble
  50.                        clock by more than 250 ms. This file may grow without
  51.                        bound, so it should be checked and deleted from time to
  52.                        time.  The format of these packets is identical to that
  53.                        which is displayed on the user interface screen)
  54.  
  55. In addition, if logfile is turned on, then a log file with name equal to the
  56. NTP seconds (seconds since Jan 1, 1900) in hexadecimal at the time the logfile
  57. was first opened and extension equal to "log"  is created,  for example a
  58. typical logfile name might be:
  59.  
  60. b5afc01a.log
  61.  
  62. This logfile contains a list of the NTP servers which were present in the
  63. cfg_data file when the program was first executed, followed by an NTP timestamp
  64. column which is followed by three columns for each server of statistics on the
  65. time received from that server.  These statistics are the current raw
  66. measurement of that (server - client), the mean of these raw measurements taken
  67. over approximately twenty samples, and the standard deviation of these raw
  68. measurements.
  69.  
  70. After the statistics for each of the servers come columns which contain the
  71. ensemble statistics.  The first ensemble statistic is the ensemble, or weighted
  72. average of all of the (server - client) raw measurements.  This is followed by
  73. the standard deviation of the ensemble.  Next is the phase locked loop filter
  74. output value, followed by the fractional frequency offset of the local clock
  75. timebase, followed finally by the actual clock correction in seconds applied to
  76. the system clock.
  77.  
  78.  
  79. II.  INSTALLATION
  80.  
  81. *********************************IMPORTANT************************************
  82. If you are upgrading from version 1.0, you MUST replace both the os2_ntpd.exe
  83. and the portio.dll files.  The version of portio.dll included with version 1.0
  84. IS NOT COMPATIBLE with version 1.2.
  85. ******************************************************************************
  86.  
  87. Installation is simple, just create a directory and unzip the distribution file,
  88. os2ntp12.zip into it.  In addition, check the system config.sys file on the
  89. OS/2 boot partition and make sure that the line:
  90.  
  91. IOPL=YES
  92.  
  93. is present in it.  If it is not, or is set equal to NO, change it.  OS2_NTPD
  94. MUST HAVE ACCESS to I/O ports in order to read and set the system real
  95. time clock chip.  As an alternative to providing broad IOPL access, specific
  96. access to certain executables is possible, for example:
  97.  
  98. IOPL=os2_ntpd.exe
  99.  
  100. is also OK.
  101.  
  102. Since NTP is based on UTC time, it will be necessary to set the environment
  103. variable TZ so that the local offset to UTC may be maintained when OS2_NTPD is
  104. operating on the system clock.  A statement like this must appear somewhere in
  105. your config.sys:
  106.  
  107. SET TZ=PST+8PDT
  108.  
  109. This example is appropriate for users on the west coast of the USA who
  110. operate with Pacific Standard Time (PST) or Pacific Daylight Time (PDT) and
  111. are 8 hours behind UTC when PST is in effect.  If daylight time is not used,
  112. leave off the last three characters:
  113.  
  114. SET TZ=PST+8
  115.  
  116. To set TZ for more complicated situations, use the following format:
  117.  
  118. ┌──────────────────────────────────────────────────────────────────────────────┐
  119. │                                                                              │
  120. │ >>──SET──TZ──=──SSS──┬──────────────────────────────┬──────────────────────> │
  121. │                      └─┬───┬──h──┬────────────────┬─┘                        │
  122. │                        ├─+─┤     └─:──m──┬──────┬─┘                          │
  123. │                        └─┴─┘             └─:──s─┘                            │
  124. │                                                                              │
  125. │ >──┬─────────────────────────────────────────┬────────────────────────────>< │
  126. │    └─DDD──┬────────────────────────────────┬─┘                               │
  127. │           └─,sm,sw,sd,st,em,ew,ed,et,shift─┘                                 │
  128. │                                                                              │
  129. └──────────────────────────────────────────────────────────────────────────────┘
  130.  
  131. The values for the TZ variable are defined below.  The default values given are
  132. for the built-in "C" locale defined by the ANSI C standard.
  133.  
  134. ┌──────────────────────────────────────────────────────────────────────────────┐
  135. │ Table 1. TZ Environment Variable Parameters                                  │
  136. ├──────────────┬─────────────────────────────────────────────┬─────────────────┤
  137. │ VARIABLE     │ DESCRIPTION                                 │ DEFAULT VALUE   │
  138. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  139. │ SSS          │ Standard-timezone identifier.  It must be   │ EST             │
  140. │              │ three characters, must begin with a letter, │                 │
  141. │              │ and can contain spaces.                     │                 │
  142. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  143. │ h, m, s      │ The variable h specifies the difference (in │ 5               │
  144. │              │ hours) between the standard time zone and   │                 │
  145. │              │ coordinated universal time (CUT), formerly  │                 │
  146. │              │ Greenwich mean time (GMT).  You can         │                 │
  147. │              │ optionally use m to specify minutes after   │                 │
  148. │              │ the hour, and s to specify seconds after    │                 │
  149. │              │ the minute.  A positive number denotes time │                 │
  150. │              │ zones west of the Greenwich meridian; a     │                 │
  151. │              │ negative number denotes time zones east of  │                 │
  152. │              │ the Greenwich meridian.  The number must be │                 │
  153. │              │ an integer value.                           │                 │
  154. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  155. │ DDD          │ Daylight saving time (DST) zone identifier. │ EDT             │
  156. │              │ It must be three characters, must begin     │                 │
  157. │              │ with a letter, and can contain spaces.      │                 │
  158. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  159. │ sm           │ Starting month (1 to 12) of DST.            │ 4               │
  160. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  161. │ sw           │ Starting week (-4 to 4) of DST.  Use nega-  │ 1               │
  162. │              │ tive numbers to count back from the last    │                 │
  163. │              │ week of the month (-1) and positive numbers │                 │
  164. │              │ to count from the first week (1).           │                 │
  165. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  166. │ sd           │ Starting day of DST.                        │ 0               │
  167. │              │ 0 to 6 if sw != 0                           │                 │
  168. │              │ 1 to 31 if sw = 0                           │                 │
  169. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  170. │ st           │ Starting time (in seconds) of DST.          │ 3600            │
  171. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  172. │ em           │ Ending month (1 to 12) of DST.              │ 10              │
  173. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  174. │ ew           │ Ending week (-4 to 4) of DST.  Use negative │ -1              │
  175. │              │ numbers to count back from the last week of │                 │
  176. │              │ the month (-1) and positive numbers to      │                 │
  177. │              │ count from the first week (1).              │                 │
  178. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  179. │ ed           │ Ending day of DST.                          │ 0               │
  180. │              │ 0 to 6 if ew != 0                           │                 │
  181. │              │ 1 to 31 if ew = 0                           │                 │
  182. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  183. │ et           │ Ending time of DST (in seconds).            │ 7200            │
  184. ├──────────────┼─────────────────────────────────────────────┼─────────────────┤
  185. │ shift        │ Amount of time change (in seconds).         │ 3600            │
  186. └──────────────┴─────────────────────────────────────────────┴─────────────────┘
  187.  
  188. For example:
  189.  
  190.    SET TZ=CST6CDT
  191.  
  192. sets the standard time zone to CST, the daylight saving time zone to CDT, and
  193. sets a difference of 6 hours between CST and CUT. It does not set any values for
  194. the start and end date of daylight saving time or the time shifted.
  195.  
  196. When TZ is not present, the default is EST5EDT, the "C" locale value. When only
  197. the standard time zone is specified, the default value of n (difference in hours
  198. from GMT) is 0 instead of 5.
  199.  
  200. If you give values for any of sm, sw, sd, st, em, ew, ed, et, or shift, you must
  201. give values for all of them. Otherwise the entire statement is considered not
  202. valid, and the time zone information is not changed.
  203.  
  204.  
  205.  
  206. About the Real Time Clock
  207.  
  208. For system timekeeping and task scheduling, OS/2 uses the Motorola MC146818 RTC
  209. chip which IBM originally designed into the AT machines.  Prior to FixPak 26 for
  210. Warp v3 and FixPak 1 for Warp v4, OS/2 set the chip up to generate an interrupt
  211. 32 times a second, or every 31.25 ms.  With the application of these FixPaks,
  212. the chip is now set up to generate an interrupt 128 times a second, or every
  213. 7.8125 ms.  OS2_NTPD performs system clock corrections by actually resetting
  214. the RTC chip at the appropriate time so as to step the time in increments as
  215. small as one of the original ticks, or 31.25 ms, forward or backward.  This
  216. works beautifully for motherboards which emulate the Motorola RTC chip faith-
  217. fully.  However, some motherboards incorrectly emulated the chip and this
  218. causes hiccups in the time adjustments performed by OS2_NTPD on occasion.  For-
  219. tunately, since the advent of the Pentium based motherboards with predominantly
  220. Intel chipsets, this problem is not as widespread and is probably limited only
  221. to older 486 systems.  I have never seen a Pentium machine with an incorrectly
  222. implemented RTC.
  223.  
  224. The difference is in how the chips behave after divisor reset, the method of
  225. timestepping used by OS2_NTPD.  Truly compatible implementations update the next
  226. second 500 ms after divisor reset.  The other implementations I have seen
  227. update it immediately following divisor reset.  This causes problems when a
  228. small, single tick correction is being made and the actual time that it is
  229. performed slips by a tick due to pre-emption, etc.  This slip causes a whole
  230. second error to occur instead of one tick.  I have not successfully eliminated
  231. these occurrences yet, however they are rare.  They seem to be worst on heavily
  232. loaded systems and systems running dial-up serial modems using PPP, which runs
  233. at a very high priority.
  234.  
  235. Following the initial execution of OS2_NTPD, the data file rtc_type will hold
  236. the results of its check for the type of RTC chip in your system.  If the value
  237. stored in rtc_type is zero, then your RTC is 100% compatible and you should
  238. have no problems such as I have described.  If the value is 500, then you
  239. should expect to experience the one second hiccups from time to time if your
  240. system is underpowered or heavily loaded or are accessing the Internet via dial-
  241. up modem.
  242.  
  243.  
  244. III.  OPERATION
  245.  
  246. OS2_NTPD may be executed in one of two ways:
  247.  
  248. 1)  From the command line using a single server, with these arguments as so:
  249.  
  250. os2_ntpd.exe [ntp server(name or dotted decimal)
  251.               initial polling interval (integer seconds)
  252.               number of requests to send (integer)]
  253.  
  254. where:  "ntp server" is the IP address of the NTP server, i.e.
  255.          tick.usno.navy.mil or 206.54.0.21
  256.  
  257.         "initial polling interval" is the number of seconds between requests
  258.          to the server.  It should be a power of two, such as 2, 4, 8, 16 etc.
  259.  
  260.         "number of requests to send" is how many times to request time from
  261.          the server, if 0 is entered then requests will be sent indefinitely
  262.  
  263. All of these arguments must be present on the command line, separated by spaces.
  264. There are no defaults.
  265.  
  266. 2)  From the command line with no arguments.  When executed this way, OS2_NTPD
  267. looks for the data file cfg_data in the current directory.  If it is not found,
  268. then an error message is displayed in the window.  If it is found, and its
  269. format is correct, then OS2_NTPD will display the contents of the file in the
  270. window.  A sample cfg_data file:
  271.  
  272. cfg_data
  273. poll interval = 16
  274. tick.usno.navy.mil
  275. tock.usno.navy.mil
  276. time.nist.gov
  277. 206.54.0.21
  278.  
  279. Each line must appear exactly as shown, terminated by a CR and LF.  Up to 22
  280. NTP servers may be listed following the poll_interval line.  A single CR and LF
  281. should follow the last server name.
  282.  
  283. Of course, a Workplace Shell program object may be created allowing execution
  284. via mouse clicks, and a copy of the program object could be dragged to the
  285. Startup Folder to allow automatic invocation following each boot up.
  286.  
  287.  
  288. The OS2_NTPD User Interface
  289.  
  290. After reading the cfg_data file and displaying the server list, the
  291. program will display an interface screen.  This screen is a standard 25 line by
  292. 80 character text mode window, divided into three regions.  The top
  293. region consists of thirteen lines which display decoded packets, and the list
  294. of NTP servers.  The next region consists of three lines displaying output
  295. status information such as timeouts, reply packets which are indicating an
  296. alarm state, ensemble statistics, etc.  The bottom five lines make up a
  297. function key driven menu with up to twelve selections, not all of which are in
  298. use at this time.  The current active function keys are:
  299.  
  300. F1   Show Next Pkt -- Pressing this key will display the decoded packet
  301.                       received from the first server from which a reply was
  302.                       received in the current polling interval.  Pressing it
  303.                       again will display the next one and so on. Underneath the
  304.                       raw packet information are displayed the server specific
  305.                       timing statistics:  the current server - client offset
  306.                       measurement in seconds, the standard deviation of those
  307.                       measurements, and the maximum and minimum measurements.
  308.  
  309. F2   Show Prev Pkt -- Pressing this key will display the decoded packet
  310.                       received from the last server from which a reply was
  311.                       received in the current polling interval.  Pressing it
  312.                       again will display the previous one and so on.
  313.  
  314. F6   Quick Sync    -- Pressing this key will enable an instantaneous "jam sync"
  315.                       of the system clock based on the next ensemble of replies
  316.                       received from the active servers.  The default behavior
  317.                       if this key is not pressed is to propagate the ensembled
  318.                       replies through a phase locked loop filter which will
  319.                       slowly bring the system clock in line with the NTP
  320.                       servers.  The Quick Sync function is similar to NTPDATE
  321.                       in that it is used to establish a starting
  322.                       synchronization which is then refined based on further
  323.                       averaging of NTP server replies and gradual corrections.
  324.  
  325. F7  Show Peers     -- Pressing this key will display a list of the peers which
  326.                       were active during the current polling interval.
  327.  
  328. F10  Enable Debug  -- Pressing this key will enable logging of suspect reply
  329.                       packets to the file "suspects".  This logfile will be
  330.                       opened for appending and closed after each polling
  331.                       interval.   Pressing the key again will suspend logging
  332.                       to this file.
  333.  
  334. F11  Open LogFile  -- Pressing this key the first time will open a logfile that
  335.                       is named with the current ntp second.  This logfile will
  336.                       be opened for appending and closed after each polling
  337.                       interval and contains the reduced timing data from each
  338.                       of the servers in the cfg_data file, as well as ensemble
  339.                       statistics.    Once the logfile is open, pressing the key
  340.                       again will close the file permanently.
  341.  
  342. F12  About         -- Pressing this key will display information about this
  343.                       program.
  344.  
  345.  
  346. IV.  THEORY OF OPERATION
  347.  
  348. Interested users should consider downloading the RFCs relating to network
  349. timing written by David Mills of the University of Delaware.  These cover in
  350. gory detail the inner workings of the NTP.  Mills also maintains a website,
  351. http: //www.eecis.udel.edu/~ntp/ which is a vast repository of NTP related lore
  352. and entertainment.  OS2_NTPD operates based on version 3.0 of the NTP as
  353. described in RFC 1305.  Here I will only mention that the cornerstone of the
  354. NTP is server diversity.  The benefits of statistical ensembling and clustering
  355. are not available if only one server is being polled. OS2_NTPD allows up to 22
  356. servers to be configured for this reason.
  357.  
  358. OS2_NTPD maintains stability measurements on each server being used to set the
  359. client clock.  These stability measures are used to calculate weighting of the
  360. individual server's contribution to the overall ensemble.  Noisy servers
  361. receive less weighting, quiet ones more.  Further, due to the ordering of
  362. the procedures, when a measurement comes in from a server, its weight is
  363. updated first,  then the measurement is added into the ensemble based on
  364. the new weight.  This provides a measure of immunity from bad server replies
  365. since they are de-weighted prior to being used.
  366.  
  367. Once an ensemble measurement has been synthesized, it is passed to the phase
  368. locked loop which controls the system clock.  The phase locked loop implements
  369. averaging of the NTP server reply data across time as opposed to the ensembling
  370. algorithm which implements averaging across multiple servers.  Initially the
  371. PLL operates fairly quickly and updates the RTC at the rate specified by the
  372. initial polling interval parameter provided in the cfg_data file or from the
  373. command line.  Once the client clock has been pulled within a tick (31.25 ms)
  374. then the polling interval is lengthened by a factor of two.  Each time the
  375. ensemble measurement is within a tick, the polling interval is again lengthened
  376. until it reaches 256 seconds, beyond which it does not extend. After the
  377. polling interval has reached 256 seconds, PLL averaging is further extended by
  378. modifying the coefficients in the digital loop filter.  These are allowed to
  379. extend until the PLL equivalent averaging time has reached 13401 seconds.
  380.  
  381. The main reason for setting the averaging time so long is to allow an accurate
  382. measurement of the frequency offset of the client clock timebase.  This
  383. frequency offset has been referred to as "skew" in the Mills literature.
  384. Unfortunately, the file created by the Unix versions of NTP containing
  385. this skew term is called NTPDRIFT.  Drift has actually been defined by the
  386. global time and frequency community to mean the change in frequency of an
  387. oscillator as a function of time, not its change in phase.  So as not to
  388. confuse those who have dealt with the various ports of Mills' NTP client
  389. daemons, I have retained the " drift" naming convention for the file which
  390. holds the fractional frequency offset of the client clock timebase.
  391.  
  392. OS2_NTPD uses this "drift" to extrapolate the behavior of the client clock when
  393. no servers are available, so that corrections may continue to be made to the
  394. clock to compensate for its assumed constant frequency error.  In addition,
  395. after a power outage,  OS2_NTPD checks the timestamp in the "drift" file to
  396. determine the length of the outage and will apply a correction based on the
  397. outage duration and the fractional frequency offset which was stored in the
  398. "drift" file.  This approach is not fool proof, since corrections made
  399. manually or by other programs during the outage of OS2_NTPD operation will not
  400. be known to OS2_NTPD.  Also, the frequency of the crystal oscillator inside of
  401. the PC will be different when the power is applied as compared to when it is
  402. not since the temperature inside the PC is dependent upon this.
  403.  
  404.  
  405. Current Known Deficiencies in this version of the OS2_NTPD Client NTP:
  406.  
  407. 1) The Leap Indicator bits are currently used only to detect server alarm
  408. condition.  No attempt is made to transparently implement any leap second event
  409. at the correct time.  This may be fixed in the future when more servers
  410. properly indicate leap second events in these bits, which is not the case now!
  411.  
  412. 2) The movement of time from Standard to Daylight and vice versa currently
  413. propagates through the PLL loop filter and so takes a slow journey--maybe an
  414. hour or so to get there.  Will fix this eventually, but recommend that you do
  415. not run your workstations on anything but Standard time, be it local or UTC.
  416.  
  417. 2) No preference is currently given to servers based on their operating NTP
  418. stratum level or root dispersion.
  419.  
  420.  
  421. V. VERSION HISTORY
  422.  
  423. Bugfixes included in version 1.2 of OS2_NTPD
  424.  
  425. 1)    This version fixes the problems which were introduced when IBM changed
  426. the tick rate of the RTC from 32 Hz to 128 Hz.  The program now detects the
  427. rate at which the RTC has been set to generate an interrupt and operates ap-
  428. propriately for either case.  One would think that the new higher rate would
  429. allow an improvement in the setting of the clock, however the opposite is the
  430. case.  With the introduction of the higher tick rate, timetagging resolution
  431. has been improved, so that calls to ftime() now return a precision of 10 ms.
  432. Unfortunately, the other half of the problem, the ability to have something
  433. done at a certain time using a timer function like DosSleep(), has not been
  434. improved to the 10 ms level.  The net effect is that there is more uncertainty
  435. now in the setting of the RTC chip, so that typical performance is still at the
  436. 30 ms level.
  437.  
  438. Bugfixes included in version 1.1 of OS2_NTPD:
  439.  
  440. 1)    Some versions of OS/2 Warp Connect with various FixPacks at about 17 were
  441. unable to run version 1.0 of the program, aborting with a "Stack Overflow"
  442. message immediately following start-up.  I changed the compiler from Borland
  443. 1.5 to IBM VAC++ 3.0, increased the stacksize in the threads and rearranged the
  444. operation of the threads to eliminate the possibility of clean-up not being
  445. performed. These systems are now able to run the program but there are still
  446. some questions concerning memory leakage and system lock-ups on those same
  447. systems.  I will be welcoming any feedback as to whether I have fixed those
  448. problems!
  449.  
  450. 2)    Borland did not do a very good job on the TZ environment variable in
  451. their tzset() routine, choosing to have it handle only North American time zone
  452. changes properly.  Since changing to the IBM compiler for this version,
  453. OS2_NTPD fully supports the TZ environment variable as described in this manual
  454. so that both standard time and daylight time may work anywhere in the world if
  455. the TZ variable is set up properly.
  456.  
  457. 3)    The REF ID field of the NTP packet was not being decoded properly with
  458. servers operating at Stratum 2 or higher in version 1.0 of OS2_NTPD.  It should
  459. have shown the IP address of the server to which that server is peered rather
  460. than the ascii clock type code like GPS or ACTS as would be done for Stratum 1
  461. servers.
  462.  
  463. 4)    Some users with non-compatible RTC implementations have experienced the
  464. one second hiccups in the RTC correction process that is described in this
  465. manual.  In version 1.1, I have managed to reduce them to an acceptable
  466. level on my machines by giving up some of the resolution of the correction.
  467. What this amounts to is that when I detect the RTC type, if it is a non-
  468. compatible one, I perform two tick clock adjustments instead of single tick
  469. adjustments.  Due to the subleties of the adjustment process, this still allows
  470. me to maintain an accuracy of about one tick, or 31.25 ms but greatly reduces
  471. the frequency of the hiccups.
  472.  
  473. 5)    Fixed a potential string overflow problem when extremely large offsets
  474. between the local clock and a server were being displayed.
  475.  
  476.  
  477.  
  478.  
  479.  
  480. DISCLAIMER!!!
  481.  
  482. The author makes no claims concerning suitability of this program for any use.
  483. OS2_NTPD is offered for your use "as is", with no expressed or implied
  484. warranties or guarantees of any kind.  The author will assume no liability for
  485. damages either from the direct use of this product or as a consequence of the
  486. use of this product.
  487.