MDATE(1L) MDATE(1L) June 1995 NAME mdate - get the time of day from a remote host SYNOPSIS mdate [ -a|-s ] [ -c count ] [ -d ] [ -t tol ] [ -w wait ] host ... DESCRIPTION Mdate requests the time of day from host, which may be a host name or an IP address. If more than one host is specified, they are queried in order until a response is received. It calculates the time of day on the host and the estimated time difference between remote and local host. A positive difference means the remote host is ahead of the local host. The superuser can set the local time of day to agree with the time on the remote host to within a small error. OPTIONS -a|-s If the caller is the super-user and the time difference is large enough, then mdate will use adjtime(2) or settimeofday(2) respectively to synchronise the local host's time with the remote host. The -a flag is only allowed if adjtime(2) is actually available. -c count Repeat the call count times. -d Print verbose output for debugging. More -d flags increase the verbosity. -t tol Change the tolerance to tol quanta (default=3). -w wait Wait for n seconds before calling the server, where n is a pseudo-random number in the range 0 < n < wait USAGE Mdate is intended to be used as a simple device for keeping several machine clocks in sync over a small size local area network. It is based on the older programs rdate and in.timed . The most important change is that mdate uses ICMP timestamps. This makes it far more accurate than rdate. Over short distances (say, within a building) mdate can synchronise to within about 10 milliseconds, which should be close enough for most purposes. The disadvantage is that you have to be super-user to use mdate even just for testing. - 1 - Formatted: January 15, 2025 MDATE(1L) MDATE(1L) June 1995 Before starting to compile mdate, the installer should determine the quantum, which is the smallest time interval that the local machine can measure. I have provided a supplementary program called tick to help with this. You should then edit the source file site.h to define quantum correctly. A time difference is deemed to be significant if it exceeds tolerance * quantum and mdate will not alter the local time if the estimated difference is less than this amount. The -t flag changes the tolerance (default=3). The -c flag makes mdate call the remote host count times. This has 2 purposes. It can be used to probe the system's behaviour: mdate -d -d -c10 host This prints a small table. Also ICMP is not a reliable protocol, so if some calls fail to get through, you can increase the chance of success by making repeated calls. As the distances get larger, the round-trip times get larger and more variable. By repeating the call you have a much better chance of getting an accurate value. mdate does not attempt any statistical analysis of the resulting data. It merely accepts the time difference that goes with the shortest trip time. By default, mdate prints nothing except error messages. It is intended to be called automatically by cron and (on our machines) cron seems to get confused by output. The -d flag makes mdate print a line indicating success or failure. A 2nd and 3rd -d increase the verbosity. To keep a log, use just one -d and pipe the output to a file or to logger (or syslog ). It is advisable to do this at least for the first few days: there may be bugs; also the log will help to estimate your clock's rate of drift. mdate is intended as a lightweight mechanism for keeping time in a small local network. The normal setup is to name one machine as local server. This gets its time from a national timeserver: you should first ask permission from that server's manager. Then all the other local machines would do something like: mdate -c5 -w100 local-server and you would use cron to make this happen at regular intervals. If the clients all start pestering the server at once, there is a danger that the server or net or both will overload. The flag -w wait spreads the load. If this flag is present, mdate will wait for a pseudo-random number of seconds in the range 0 .. wait . We suggest a wait about 5 times the number of clients. With these additional features, mdate should be able to keep time to within about 0.001 sec for local networks of up to around 100 machines. If you have more, you should either arrange a hierarchy of timeservers or install a more elephantine protocol such as xntp. The multiple-host feature can be used to provide backups if one server is down. Suppose there were 2 prospective local servers A and B and a - 2 - Formatted: January 15, 2025 MDATE(1L) MDATE(1L) June 1995 national server N . Then A might do mdate (args) N (say, at 1AM) and B might do mdate (args) A N at 2AM and the clients would do mdate (args) A B at 3AM. DIAGNOSTICS Mdate checks the return status of system functions and uses perror to print error messages (which are usually not very informative). Errors specific to Mdate include the following; packet too short. means we received something that looked like a truncated ICMP packet. huge difference. A huge difference is a time difference > about 2 hours. This is almost certainly caused by a bug in Mdate , or maybe the server has gone mad. If any machine is really that far out, set its date manually. time unchanged. This should be either because the time diff was too small to be significant or because the caller did not specify either -a or -s. Exit status is 0 on success, otherwise 1. DEFECTS Since the ICMP timer wraps around at midnight you may get a "huge difference" error if you run mdate shortly before or after. You should try very hard to avoid using mdate near midnight. Note this is midnight GMT not local time. Some machines do not respond to ICMP time requests; they cannot act as servers but you might be able to run mdate on them. You have some protection against servers crashing (use multiple hosts); some protection against servers going wild (the huge difference check) but no protection at all against servers that drift. Mysterious loss of accuracy. If mdate measured a round-trip time of 3 msec, this ought to mean that the subsequent settimeofday is that accurate. AUTHOR R.M.Damerell, Maths Dept, Royal Holloway College, Egham, Surrey, UK. Program uses parts of rdate.c (by Dartmouth College) and ping.c (Mike Muuss, US Army Ballistic Research Lab modified by Berkeley). Their copyright notices are reproduced in full in the source code. Program is offered free of charge, "AS IS" with absolutely no guarantees. - 3 - Formatted: January 15, 2025 MDATE(1L) MDATE(1L) June 1995 Bug reports etc to RMD at this address: uhah208@ma.rhbnc.ac.uk (but no promise to fix). SEE ALSO adjtime(2), gettimeofday(2), settimeofday(2), tick(1), utimed(1), - 4 - Formatted: January 15, 2025