#!/bin/sh
#
# ABEM Terrameter DHCP-mode switch
#
# Author: Johan Hovold <johan.hovold@lundinova.se>

config="/etc/default/terrameter-dhcp"
udhcpd_config="/etc/udhcpd.conf"

check_config() {
    local config=$1

    if [ ! -f $config ]; then
        echo "$0: failed to open $config" >&2
        exit 1
    fi
}

check_config $config

. $config

case "$1" in
    init)
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/eth_select/value
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/wlan_pwr_on/value
        ;;

    client)
        # set hw switch
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/eth_select/value
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/wlan_pwr_on/value
        # Turn off all server services
        start-stop-daemon -K --oknodo -x /usr/sbin/udhcpd 
        ifconfig $iface down
        ip addr flush dev eth0
        ip addr flush dev tun0
        # Turn on client
        ifconfig $iface 0.0.0.0
        /etc/init.d/busybox-ifplugd start
        /etc/init.d/openvpn start
        udhcpc --background
        ;;

    server)
        # set hw switch
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/eth_select/value
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/wlan_pwr_on/value
        # turn off all client services
        /etc/init.d/openvpn stop
        /etc/init.d/busybox-ifplugd stop
        ifdown $iface
        ip addr flush dev eth0
        ip addr flush dev tun0
        killall udhcpc
        # Turn on server
        ifconfig $iface $serveraddr
        check_config $udhcpd_config
        start-stop-daemon -S --oknodo -x /usr/sbin/udhcpd -- \
        $udhcpd_config
        ;;

    wifiap)
        echo "wifiap mode start"
        start-stop-daemon -K --oknodo -x /usr/sbin/udhcpd
        # Turn on wlan module power
        echo 1 > /sys/bus/platform/devices/terrameter-gpio/wlan_reset/value
        echo 1 > /sys/bus/platform/devices/terrameter-gpio/wlan_pwr_on/value
        sleep 1
        echo 0 > /sys/bus/platform/devices/terrameter-gpio/wlan_reset/value
        sleep 1  
        # Set hw switch
        echo 1 > /sys/bus/platform/devices/terrameter-gpio/eth_select/value  
        #wait? /sys/bus/platform/devices/terrameter-gpio/wlan_act_ind/value==1?
        killall -q udhcpc
        /etc/init.d/busybox-ifplugd stop
        /etc/init.d/openvpn stop
        ifconfig $iface down
        sleep 15
        ip addr flush dev eth0
        ip addr flush dev tun0
        #start-stop-daemon -K --oknodo -x /usr/sbin/udhcpd 
        sleep 5
        ifconfig $iface 0.0.0.0
        /etc/init.d/busybox-ifplugd start
        udhcpc --background
        echo "wifiap mode stop"
        ;;

    wificlient)
        #not supported yet
        ;;
    
    notinuse)
        #not supported yet
        ;;

    *)
        echo "Usage: $0 {client|server|wifiap}" >&2
        exit 1
esac

exit 0
