#!/bin/bash
#
# Usage: udhcpc-retry <iface> <wait (s)>

[ -z "$1" ] && exit 1
iface=$1

[ -z "$2" ] && exit 1
wait=$2

grep -q "^iface $iface inet dhcp" /etc/network/interfaces || exit 2

if [ -e /sys/class/net/$iface/bridge ]; then
    # aligned with EPAD bridge - total 60s
    UDHCPC_RETRIES=10
    UDHCPC_TIMEOUT=6
else
    # aligned with BusyBox .config - total 30s
    UDHCPC_RETRIES=5
    UDHCPC_TIMEOUT=6
fi

echo "Scheduling DHCP retry on $iface" | logger -t udhcpc.d
sleep ${wait}

grep -q "^iface $iface inet dhcp" /etc/network/interfaces || exit 2

[ "$(cat /sys/class/net/$iface/carrier)" = "1" ] || exit 3

echo "Retrying DHCP on $iface" | logger -t udhcpc.d
[ -e /var/run/udhcpc.$iface.pid ] && exit 4

# Mark script as done before running dhcp client (PID is checked in case of lease failure)
rm -f /var/run/udhcpc-retry.$iface.pid

udhcpc -n -t $UDHCPC_RETRIES -T $UDHCPC_TIMEOUT -i $iface -p /var/run/udhcpc.$iface.pid
