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