xref: /netbsd-src/external/bsd/ntp/dist/scripts/ntp-wait/ntp-wait.in (revision 897be3a4bac39d8b2e92077bf29f4a2e67d31983)
18585484eSchristos#! @PATH_PERL@
2*897be3a4Schristos# @configure_input@
38585484eSchristos
48585484eSchristospackage ntp_wait;
58585484eSchristosuse 5.006_000;
68585484eSchristosuse strict;
78585484eSchristosuse warnings;
88585484eSchristosuse lib "@PERLLIBDIR@";
98585484eSchristosuse NTP::Util qw(ntp_read_vars);
108585484eSchristos
118585484eSchristosexit run(@ARGV) unless caller;
128585484eSchristos
138585484eSchristossub run {
148585484eSchristos    my $opts;
158585484eSchristos    if (!processOptions(\@_, $opts)) {
168585484eSchristos        usage(1);
178585484eSchristos    };
188585484eSchristos
198585484eSchristos    my $tries   = $opts->{tries};	# How many tries before we give up? (10 min+)
208585484eSchristos    my $sleep   = $opts->{sleep};	# Seconds to sleep between tries (6s = 10/min)
218585484eSchristos    my $verbose = $opts->{verbose};	# Be verbose?
228585484eSchristos
238585484eSchristos    # Autoflush stdout
248585484eSchristos    $| = 1;
258585484eSchristos
268585484eSchristos    print "Waiting for ntpd to synchronize...  " if $verbose;
278585484eSchristos
288585484eSchristos    for my $i (1 .. $tries) {
298585484eSchristos        my $info = ntp_read_vars(0, []);
308585484eSchristos
318585484eSchristos        if (!defined $info) {
328585484eSchristos            print "\bntpd is not running!\n" if $verbose;
338585484eSchristos            return 1;
348585484eSchristos        }
358585484eSchristos
368585484eSchristos        if (!exists $info->{status_line}{leap}) {
3742c29440Schristos            print "\bLeap status not available\n";
388585484eSchristos            return 1;
398585484eSchristos        }
408585484eSchristos
418585484eSchristos        my $leap   = $info->{status_line}{leap};
428585484eSchristos        my $sync   = $info->{status_line}{sync};
438585484eSchristos
448585484eSchristos        if ($leap =~ /(sync|leap)_alarm/) {
458585484eSchristos            print "\b".(substr "*+:.", $i % 4, 1) if $verbose;
468585484eSchristos            sleep $sleep if $i < $tries;
478585484eSchristos            next;
488585484eSchristos        }
498585484eSchristos
508585484eSchristos        if ($leap =~ /leap_(none|((add|del)_sec))/) {
518585484eSchristos            # We could check $sync here to make sure we like the source...
528585484eSchristos            print "\bOK!\n" if $verbose;
538585484eSchristos            return 0;
548585484eSchristos        }
558585484eSchristos
568585484eSchristos        print "\bUnexpected 'leap' status <$leap>\n";
578585484eSchristos        return 1;
588585484eSchristos    }
598585484eSchristos
608585484eSchristos    print "\bNo!\nntpd did not synchronize.\n" if $verbose;
618585484eSchristos    return 1;
628585484eSchristos}
638585484eSchristos
648585484eSchristos@ntp_wait_opts@
658585484eSchristos
668585484eSchristos1;
678585484eSchristos__END__
68