openwrt-packages/net/ntpclient/files/ntpclient.hotplug

79 lines
1.6 KiB
Bash

#!/bin/sh
# Copyright (C) 2006-2014 OpenWrt.org
. /lib/functions.sh
unset SERVER
unset PORT
unset INTERVAL
unset COUNT
unset INTERFACE_GLOBAL
NTPC=$(command -v ntpclient)
check_server() {
local hostname
local port
local interface
[ -n "$SERVER" ] && return
config_get hostname $1 hostname
config_get port $1 port
config_get interface $1 interface
[ -z "$interface" ] && interface=$INTERFACE_GLOBAL
[ -n "$interface" ] && {
# $INTERFACE is passed from hotplug event
[ "$interface" = "$INTERFACE" ] || return
}
[ -z "$hostname" ] && return
$NTPC -c 1 -p ${port:-123} -i 2 -h $hostname > /dev/null && { SERVER=$hostname; PORT=${port:-123}; }
}
set_drift() {
config_get freq $1 freq
[ -n "$freq" ] && adjtimex -f $freq >/dev/null
}
start_ntpclient() {
config_foreach set_drift ntpdrift
config_foreach check_server ntpserver
[ -z "$SERVER" ] && exit 0
logger starting ntpclient
$NTPC ${COUNT:+-c $COUNT} ${INTERVAL:+-i $INTERVAL} -s -l -D -p $PORT -h $SERVER 2> /dev/null
}
stop_ntpclient() {
logger stopping ntpclient
killall ntpclient
}
load_settings() {
local interval
local count
local interface
config_get interval $1 interval
config_get count $1 count
config_get interface $1 interface
[ -n "$count" ] && COUNT=$count
[ -n "$interval" ] && INTERVAL=$interval
[ -n "$interface" ] && INTERFACE_GLOBAL=$interface
}
config_load ntpclient
config_foreach load_settings ntpclient
NTP_RUNNING=$(busybox ps | grep $NTPC | grep -v grep)
case "${ACTION:-ifup}" in
ifup)
[ -z "$NTP_RUNNING" ] && start_ntpclient
;;
ifdown)
[ -n "$NTP_RUNNING" ] && stop_ntpclient
;;
esac