HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux dev1 5.15.83-1-pve #1 SMP PVE 5.15.83-1 (2022-12-15T00:00Z) x86_64
User: safarimaris (1000)
PHP: 7.2.34-54+ubuntu22.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //bin/calc_tickadj
#! /usr/bin/perl -w
#
# drift of 104.8576 -> +1 tick.  Base  of 10000 ticks.
#
# 970306 HMS Deal with nanoseconds.  Fix sign of adjustments.
package calc_tickadj;
use strict;

exit run(@ARGV) unless caller;

sub run {
    my $opts;
    if (!processOptions(\@_, $opts)) {
        usage(1);
    };
    my $drift_file = $opts->{'drift-file'};
    my $tick       = $opts->{'tick'};

    if (!$tick) {
        my ($fl) = `tickadj`;
        if (defined $fl && $fl =~ /(?:KERNEL|PRESET)?\s*tick\s+=\s+(\d+)/) {
            $tick = $1;
        }
        else {
            die "Could not get tick value, try manually with -t/--tick\n";
        }
    }

    # Drift file is in PPM where Milion is actually 2**20
    my $cvt   = (2 ** 20) / $tick;
    my $drift = 0.;

    open my $dfh, $drift_file or die "Could not open $drift_file: $!\n";

    $drift = <$dfh>; 

    close $dfh;
    die "Invalid drift file value <$drift>" if $drift !~ /[+-]?\d+\.?[0-9]+/;

    while ($drift < 0) {
        $drift += $cvt;
        $tick--;
    }

    while ($drift > $cvt) {
        $drift -= $cvt;
        $tick++;
    }

    printf "%.3f (drift)\n", $drift;
    printf "%d usec; %d nsec\n", $tick, ($tick + ($drift/$cvt)) * 1000;

    return 0;
}

# EDIT THIS FILE WITH CAUTION  (calc_tickadj-opts)
#
# It has been AutoGen-ed  April  5, 2019 at 01:12:39 AM by AutoGen 5.18.5
# From the definitions    calc_tickadj-opts.def
# and the template file   perlopt

use Getopt::Long qw(GetOptionsFromArray);
Getopt::Long::Configure(qw(no_auto_abbrev no_ignore_case_always));

my $usage;

sub usage {
    my ($ret) = @_;
    print STDERR $usage;
    exit $ret;
}

sub paged_usage {
    my ($ret) = @_;
    my $pager = $ENV{PAGER} || '(less || more)';

    open STDOUT, "| $pager" or die "Can't fork a pager: $!";
    print $usage;

    exit $ret;
}

sub processOptions {
    my $args = shift;

    my $opts = {
        'drift-file' => '/etc/ntp/drift',
        'tick' => '',
        'help' => '', 'more-help' => ''
    };
    my $argument = '';
    my $ret = GetOptionsFromArray($args, $opts, (
        'drift-file|d=s', 'tick|t=i',
        'help|?', 'more-help'));

    $usage = <<'USAGE';
calc_tickadj - Calculates "optimal" value for tick given ntp drift file. - Ver. 4.2.8p13
USAGE: calc_tickadj [ -<flag> [<val>] | --<name>[{=| }<val>] ]... 

    -d, --drift-file=str         Ntp drift file to use
    -t, --tick=num               Tick value of this host
    -?, --help                   Display usage information and exit
        --more-help              Pass the extended usage text through a pager

Options are specified by doubled hyphens and their name or by a single
hyphen and the flag character.
USAGE

    usage(0)       if $opts->{'help'};
    paged_usage(0) if $opts->{'more-help'};
    $_[0] = $opts;
    return $ret;
}

END { close STDOUT };

1;
__END__