  A quick summary of how to compile under Solaris:

  If you are running Solaris 2.0, you should upgrade to a later version of 
Solaris immediately.
  If you are running Solaris 2.1 or later, all should be fine (i hope)

  Solaris 2.1 contains fairly traditional clock code, with tick and tickadj.
Solaris 2.2 and later contains completely re-written clock code to provide 
high resolution microsecond timers. A benefit of the re-written clock code 
is that adjtime does not round off its adjustments, so xntp does not have to 
compensate for this rounding. On Solaris 2.2 and later we #define
ADJTIME_IS_ACCURATE, and do not look for the tickadj kernel variable.

  If you are running both Solaris 2.1 and 2.2 on your net, you will need to 
maintain two sets of xntp binaries. The Config.solaris2.2 file will compile
on Solaris 2.1, but the resulting binaries will not work correctly.

ADDITIONAL NOTES FOR SOLARIS 2.1
(by William L. Jones jones@chpc.utexas.edu)

Since settimeofday under Solaris 2.1 only sets the seconds part of timeval
care must be used in starting xntpd.  I suggest the following start
up script:

 tickadj -s -a 1000
 ntpdate -v server1 server2
 sleep 20
 ntpdate -v server1 server2
 sleep 20
 tickadj -a 200
 xntpd

The first tickadj turns of the time of day clock and sets the tick adjust
value to 1 ms.  This will insure that an adjtime value of at most 2
seconds will complete in 20 seconds.

The first ntpdate will set the time to within two seconds 
using settimeofday or it will adjust time using adjtime.

The first sleep insures the adjtime has completed for the first ntpdate.

The second ntpdate will use adjtime to set the time of day since the
clock should be within 2 seconds of the correct time.

The second tickadj set the tick adjust system value to 5 us.

The second sleeps insure that adjtime will complete before starting 
the next xntpd.

I tried running with a tickadj of 5 us with out much success.
200 us seems to work well.  


ADDITIONAL NOTES FOR SOLARIS 2.2 AND LATER:
  You still need to turn off dosynctodr for XNTP to be able to keep accurate 
time. You can either do this in the /etc/system file (consulted at boot to set
various kernel variables) by putting in the following line:
set dosynctodr=0
or you can use the tickadj program to force the variable to 0 in the running
kernel. Fiddling with a running kernel is almost never a good idea, I'd 
recommend using /etc/system.
  I would recommend starting xntp from the following script, placed in 
/etc/rc2.d and named S99xntpd

#!/bin/sh

if [ $1 = "start" ]; then
        if [ -x /usr/local/bin/xntpd ]; then
                echo "Starting NTP daemon, takes about 1 minute... "
		# The following line is unnecessary if you turn off 
		# dosynctodr in /etc/system.
                /usr/local/bin/tickadj -s  
                /usr/local/bin/ntpdate -v server1 server2
                sleep 5
                /usr/local/bin/xntpd
        fi
else
        if [ $1 = "stop" ]; then
                pid=`/usr/bin/ps -e | /usr/bin/grep xntpd | /usr/bin/sed -e 's/^  *//' -e 's/ .*//'`   
                if [ "${pid}" != "" ]; then
                        echo "Stopping Network Time Protocol daemon "
                        /usr/bin/kill ${pid}
                fi     
        fi
fi

Denny Gentry denny@eng.sun.com
