Files
packages/ipv6/aiccu/files/aiccu.sh
T
Ondřej Caletka 4f7b0213d9 aiccu: add NTP sync check
This check tries to wait for NTP daemon to synchronise clock to lower stratum
than 16 before running the aiccu binary. In case timeout (configurable
in new option ntpsynctimeout; default is 90 seconds) is reached, the
AICCU is run neverrtheless. This makes the new script compliant with
some corner case scenarios like not using Busybox NTPd or not using NTPd
at all, maintaining maximum out-of-the box functionality.

Signed-off-by: Ondrej Caletka <Ondrej@Caletka.cz>
2014-12-01 15:15:35 +01:00

118 lines
3.4 KiB
Bash
Executable File

#!/bin/sh
# aiccu.sh - AICCU proto
# Copyright (c) 2014 OpenWrt.org
[ -n "$INCLUDE_ONLY" ] || {
. /lib/functions.sh
. /lib/functions/network.sh
. ../netifd-proto.sh
init_proto "$@"
}
proto_aiccu_setup() {
local cfg="$1"
local iface="$2"
local link="aiccu-$cfg"
local username password protocol server ip6prefix tunnelid requiretls defaultroute nat heartbeat verbose sourcerouting ip6addr ntpsynctimeout
json_get_vars username password protocol server ip6prefix tunnelid requiretls defaultroute nat heartbeat verbose sourcerouting ip6addr ntpsynctimeout
[ -z "$username" -o -z "$password" ] && {
proto_notify_error "$cfg" "MISSING_USERNAME_OR_PASSWORD"
proto_block_restart "$cfg"
return
}
( proto_add_host_dependency "$cfg" 0.0.0.0 )
CFGFILE="/var/etc/${link}.conf"
PIDFILE="/var/run/${link}.pid"
NTPSTRATUMFILE="/var/run/aiccu_ntp_stratum"
mkdir -p /var/run /var/etc
echo "username $username" > "$CFGFILE"
echo "password $password" >> "$CFGFILE"
echo "ipv6_interface $link" >> "$CFGFILE"
[ -n "$server" ] && echo "server $server" >> "$CFGFILE"
[ -n "$protocol" ] && echo "protocol $protocol" >> "$CFGFILE"
[ -n "$tunnelid" ] && echo "tunnel_id $tunnelid" >> "$CFGFILE"
[ -n "$requiretls" ] && echo "requiretls $requiretls" >> "$CFGFILE"
[ "$nat" == 1 ] && echo "behindnat true" >> "$CFGFILE"
[ "$heartbeat" == 1 ] && echo "makebeats true" >> "$CFGFILE"
[ "$verbose" == 1 ] && echo "verbose true" >> "$CFGFILE"
echo "defaultroute false" >> "$CFGFILE"
echo "daemonize true" >> "$CFGFILE"
echo "pidfile $PIDFILE" >> "$CFGFILE"
# By default, wait at most 90 seconds for NTP sync
[ -z "$ntpsynctimeout" ] && ntpsynctimeout=90
for i in $(seq 1 $ntpsynctimeout); do
[ -f "$NTPSTRATUMFILE" ] && \
[ "$(cat $NTPSTRATUMFILE)" -lt 16 ] && \
echo "NTP synced, stratum $(cat $NTPSTRATUMFILE)" && break
[ "$(( $i % 10 ))" -eq 0 ] && echo "Waiting ${i} secs for NTP sync..."
sleep 1
done
aiccu start "$CFGFILE"
[ "$?" -ne 0 ] && {
proto_notify_error "$cfg" "AICCU_FAILED_SEE_LOG"
proto_block_restart "$cfg"
return
}
proto_init_update "$link" 1
local source=""
[ "$sourcerouting" != "0" ] && source="::/128"
[ "$defaultroute" != "0" ] && proto_add_ipv6_route "::" 0 "" "" "" "$source"
[ -n "$ip6addr" ] && {
local local6="${ip6addr%%/*}"
local mask6="${ip6addr##*/}"
[[ "$local6" = "$mask6" ]] && mask6=
proto_add_ipv6_address "$local6" "$mask6"
[ "$defaultroute" != "0" -a "$sourcerouting" != "0" ] && proto_add_ipv6_route "::" 0 "" "" "" "$local6/$mask6"
}
[ -n "$ip6prefix" ] && {
proto_add_ipv6_prefix "$ip6prefix"
[ "$defaultroute" != "0" -a "$sourcerouting" != "0" ] && proto_add_ipv6_route "::" 0 "" "" "" "$ip6prefix"
}
proto_send_update "$cfg"
}
proto_aiccu_teardown() {
local cfg="$1"
local link="aiccu-$cfg"
CFGFILE="/var/etc/${link}.conf"
aiccu stop "$CFGFILE"
}
proto_aiccu_init_config() {
no_device=1
available=1
proto_config_add_string "username"
proto_config_add_string "password"
proto_config_add_string "protocol"
proto_config_add_string "server"
proto_config_add_string "ip6addr:ip6addr"
proto_config_add_string "ip6prefix:ip6addr"
proto_config_add_string "tunnelid"
proto_config_add_boolean "requiretls"
proto_config_add_boolean "defaultroute"
proto_config_add_boolean "sourcerouting"
proto_config_add_boolean "nat"
proto_config_add_boolean "heartbeat"
proto_config_add_boolean "verbose"
proto_config_add_int "ntpsynctimeout"
}
[ -n "$INCLUDE_ONLY" ] || {
add_protocol aiccu
}