summaryrefslogtreecommitdiff
path: root/scripts/ntp-wait/ntp-wait.in
blob: b35828a165827356e1fa0e5c76375cd992727e21 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#! @PATH_PERL@

package ntp_wait;
use 5.006_000;
use strict;
use warnings;
use lib "@PERLLIBDIR@";
use NTP::Util qw(ntp_read_vars);

exit run(@ARGV) unless caller;

sub run {
    my $opts;
    if (!processOptions(\@_, $opts)) {
        usage(1);
    };

    my $tries   = $opts->{tries};	# How many tries before we give up? (10 min+)
    my $sleep   = $opts->{sleep};	# Seconds to sleep between tries (6s = 10/min)
    my $verbose = $opts->{verbose};	# Be verbose?

    # Autoflush stdout
    $| = 1;

    print "Waiting for ntpd to synchronize...  " if $verbose;

    for my $i (1 .. $tries) {
        my $info = ntp_read_vars(0, []);

        if (!defined $info) {
            print "\bntpd is not running!\n" if $verbose;
            return 1;
        }

        if (!exists $info->{status_line}{leap}) {
            print "\bLeap status not avalaible\n";
            return 1;
        }

        my $leap   = $info->{status_line}{leap};
        my $sync   = $info->{status_line}{sync};

        if ($leap =~ /(sync|leap)_alarm/) {
            print "\b".(substr "*+:.", $i % 4, 1) if $verbose;
            sleep $sleep if $i < $tries;
            next;
        }

        if ($leap =~ /leap_(none|((add|del)_sec))/) {
            # We could check $sync here to make sure we like the source...
            print "\bOK!\n" if $verbose;
            return 0;
        }

        print "\bUnexpected 'leap' status <$leap>\n";
        return 1;
    }

    print "\bNo!\nntpd did not synchronize.\n" if $verbose;
    return 1;
}

@ntp_wait_opts@

1;
__END__