#!/bin/sh
# Copyright 2015 Sierra Wireless

# This script may be called from if_up/down and rcX.d startup
# If no network is up do nothing as there is no point.

[ -f /etc/time_service.conf ] && . /etc/time_service.conf

RETVAL=0

ENABLED=0
for s in $TIME_SERVICES; do
    case $s in
    ntpd_time)
        ENABLED=1
        ;;
    esac
done


network() {
    RET=1
    link_states=$(ip -o link | awk '{print $9}')
    for state in $link_states
    do
        if [ "x$state" = "xUP" ]; then
            RET=0
            break
        fi
    done
    if [ "$IFACE" = "eth0" ]; then
        # we are running because if-up.d called.
        RET=0
    fi
    return $RET
}

getGateway() {
# setNet is installed with Legato. It won't exist otherwise
# Also, depending on when we are called - we might not have fully path set yet.
    if [ -n "$IF_GATEWAY" ]; then
        # we are called from if-up so that's where we can get gateway from
        echo $IF_GATEWAY
    elif [ -x /usr/local/bin/setNet ]; then
        net=$(/usr/local/bin/setNet show)
        for line in $net; do
            case $line in
                gway=*) IFS='=' read name gway <<EOF
                    $line
EOF
                echo $gway
            esac
        done
    fi
}

opts=""
ntp_servers=""
dns_servers=""
gway=""

start() {
    if network; then
        if [ "$NTPD_ONESHOT" = "y" ]; then
            opts="$opts -q"
        fi
        if [ "$NTPD_SERVERS" ]; then
            for s in $NTPD_SERVERS; do
                ntp_servers="$ntp_servers -p $s"
            done
        fi
        if [ "$NTPD_USE_GATEWAY" = "y" ]; then
            local gway=$(getGateway)
            if [ -n "$gway" ]; then
                gway="-p $gway"
            fi
        fi
        if [ "$NTPD_USE_DNS_SERVERS" = "y" ]; then
            if [ -f /etc/resolv.conf ]; then
                dns_servers="$(awk '$1~/nameserver/{printf " -p "$2}' /etc/resolv.conf)"
            fi
        fi
        servers="$ntp_servers $gway $dns_servers"
        if [ "$servers" ]; then
            start-stop-daemon -S -x ntpd -- $opts $servers
            RETVAL=$?
            if [ "$RETVAL" -ne 0 ] && [ -n "${ntp_servers}" ]; then
                # We have no name servers so failure may have been failure to resolve ntp_servers
                if [ -n "$gway" ]; then
                    echo "Retrying ntpd without $ntp_servers"
                    start-stop-daemon -S -x ntpd -- $opts $gway
                    RETVAL=$?
                fi
            fi
        else
            echo "No servers specified for ntpd. Not starting"
            RETVAL=0
        fi
    fi
}

stop() {
    start-stop-daemon -o -K -x ntpd
    RETVAL=$?
}

case "$1" in
    start)
        if [ "$ENABLED" -eq 1 ]; then
            start
        fi
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo $"Usage: $0 {start|stop|restart}"
        RETVAL=1
esac
exit $RETVAL

