Annotation of embedaddon/ntp/scripts/ntptrace.in, revision 1.1
1.1 ! misho 1: #! @PATH_PERL@ -w
! 2:
! 3: # John Hay -- John.Hay@icomtek.csir.co.za / jhay@FreeBSD.org
! 4:
! 5: use Socket;
! 6: use Getopt::Std;
! 7: use vars qw($opt_n $opt_m);
! 8:
! 9: $ntpq = "ntpq";
! 10:
! 11: $Getopt::Std::STANDARD_HELP_VERSION=1;
! 12: getopts('nm:');
! 13:
! 14: $dodns = 1;
! 15: $dodns = 0 if (defined($opt_n));
! 16:
! 17: $max_hosts = (defined($opt_m) ? $opt_m : 99);
! 18: $max_hosts = 0 if ( $max_hosts !~ /^\d+$/ );
! 19: $nb_host = 1;
! 20:
! 21: $host = shift;
! 22: $host ||= "127.0.0.1";
! 23:
! 24: for (;;) {
! 25: $nb_host++;
! 26: $rootdelay = 0;
! 27: $rootdispersion = 0;
! 28: $stratum = 255;
! 29: $cmd = "$ntpq -n -c rv $host";
! 30: open(PH, $cmd . "|") || die "failed to start command $cmd: $!";
! 31: while (<PH>) {
! 32: $stratum = $1 if (/stratum=(\d+)/);
! 33: $peer = $1 if (/peer=(\d+)/);
! 34: # Very old servers report phase and not offset.
! 35: $offset = $1 if (/(?:offset|phase)=([^\s,]+)/);
! 36: $rootdelay = $1 if (/rootdelay=([^\s,]+)/);
! 37: $rootdispersion = $1 if (/rootdispersion=([^\s,]+)/);
! 38: $refid = $1 if (/refid=([^\s,]+)/);
! 39: }
! 40: close(PH) || die "$cmd failed";
! 41: last if ($stratum == 255);
! 42: $offset /= 1000;
! 43: $syncdistance = ($rootdispersion + ($rootdelay / 2)) / 1000;
! 44: $dhost = $host;
! 45: # Only do lookups of IPv4 addresses. The standard lookup functions
! 46: # of perl only do IPv4 and I don't know if we should require extras.
! 47: if ($dodns && $host =~ /^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/) {
! 48: $iaddr = inet_aton($host);
! 49: $name = (gethostbyaddr($iaddr, AF_INET))[0];
! 50: $dhost = $name if (defined($name));
! 51: }
! 52: printf("%s: stratum %d, offset %f, synch distance %f",
! 53: $dhost, $stratum, $offset, $syncdistance);
! 54: printf(", refid '%s'", $refid) if ($stratum == 1);
! 55: printf("\n");
! 56: last if ($stratum == 0 || $stratum == 1 || $stratum == 16);
! 57: last if ($refid =~ /^127\.127\.\d{1,3}\.\d{1,3}$/);
! 58: last if ($nb_host > $max_hosts);
! 59:
! 60: $cmd = "$ntpq -n -c \"pstat $peer\" $host";
! 61: open(PH, $cmd . "|") || die "failed to start command $cmd: $!";
! 62: $thost = "";
! 63: while (<PH>) {
! 64: $thost = $1, last if (/srcadr=(\S+),/);
! 65: }
! 66: close(PH) || die "$cmd failed";
! 67: last if ($thost eq "");
! 68: last if ($thost =~ /^127\.127\.\d{1,3}\.\d{1,3}$/);
! 69: $host = $thost;
! 70: }
! 71:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>