1275970Scy#! @PATH_PERL@
2275970Scy
3275970Scypackage ntp_wait;
4275970Scyuse 5.006_000;
5275970Scyuse strict;
6275970Scyuse warnings;
7275970Scyuse lib "@PERLLIBDIR@";
8275970Scyuse NTP::Util qw(ntp_read_vars);
9275970Scy
10275970Scyexit run(@ARGV) unless caller;
11275970Scy
12275970Scysub run {
13275970Scy    my $opts;
14275970Scy    if (!processOptions(\@_, $opts)) {
15275970Scy        usage(1);
16275970Scy    };
17275970Scy
18275970Scy    my $tries   = $opts->{tries};	# How many tries before we give up? (10 min+)
19275970Scy    my $sleep   = $opts->{sleep};	# Seconds to sleep between tries (6s = 10/min)
20275970Scy    my $verbose = $opts->{verbose};	# Be verbose?
21275970Scy
22275970Scy    # Autoflush stdout
23275970Scy    $| = 1;
24275970Scy
25275970Scy    print "Waiting for ntpd to synchronize...  " if $verbose;
26275970Scy
27275970Scy    for my $i (1 .. $tries) {
28275970Scy        my $info = ntp_read_vars(0, []);
29275970Scy
30275970Scy        if (!defined $info) {
31275970Scy            print "\bntpd is not running!\n" if $verbose;
32275970Scy            return 1;
33275970Scy        }
34275970Scy
35275970Scy        if (!exists $info->{status_line}{leap}) {
36301301Sdelphij            print "\bLeap status not available\n";
37275970Scy            return 1;
38275970Scy        }
39275970Scy
40275970Scy        my $leap   = $info->{status_line}{leap};
41275970Scy        my $sync   = $info->{status_line}{sync};
42275970Scy
43275970Scy        if ($leap =~ /(sync|leap)_alarm/) {
44275970Scy            print "\b".(substr "*+:.", $i % 4, 1) if $verbose;
45275970Scy            sleep $sleep if $i < $tries;
46275970Scy            next;
47275970Scy        }
48275970Scy
49275970Scy        if ($leap =~ /leap_(none|((add|del)_sec))/) {
50275970Scy            # We could check $sync here to make sure we like the source...
51275970Scy            print "\bOK!\n" if $verbose;
52275970Scy            return 0;
53275970Scy        }
54275970Scy
55275970Scy        print "\bUnexpected 'leap' status <$leap>\n";
56275970Scy        return 1;
57275970Scy    }
58275970Scy
59275970Scy    print "\bNo!\nntpd did not synchronize.\n" if $verbose;
60275970Scy    return 1;
61275970Scy}
62275970Scy
63275970Scy@ntp_wait_opts@
64275970Scy
65275970Scy1;
66275970Scy__END__
67