#!/bin/sh
#
# run dhcpd_start at startup

INTERFACE="egiga0"

INTERFACE_FILE="/etc/network/interfaces"
CONF_FILE="/mnt/conf/dhcp.conf"

DHCPD_CONF_FILE="/etc/udhcpd.conf"
DHCPD_LEASE_FILE="/mnt/data/udhcpd.leases"
DHCPD_PID_FILE="/var/run/dhcpd.pid"
DHCPC_PID_FILE="/var/run/udhcpc.egiga0.pid"
DHCPD_STATIC_LEASE_FILE="/mnt/conf/udhcpd.static.leases"

DHCPC_FAILSAFE="/usr/local/sbin/dhcpc_failsafe"
FAILSAFE_IP="192.168.101.50"

HOSTNAME_PROC="/proc/sys/kernel/hostname"
RESOLV_CONF="/etc/resolv.conf"

if [ $1 == "restart" ]; then
    if [ -e $DHCPD_PID_FILE ]; then
        cat $DHCPD_PID_FILE | xargs kill -9 
    fi
    if [ -e $DHCPC_PID_FILE ]; then
        cat $DHCPC_PID_FILE | xargs kill -9 
    fi
    /sbin/ifconfig $INTERFACE 0.0.0.0
else
    # Activate syslog daemon
    /sbin/syslogd
fi

if [ ! -e $CONF_FILE ]; then
    echo "No $CONF_FILE config file"

    echo "auto " $INTERFACE > $INTERFACE_FILE
    echo "iface " $INTERFACE " inet dhcp" >> $INTERFACE_FILE
    echo "pre-up ifconfig " $INTERFACE " up" >> $INTERFACE_FILE

    echo "Trying to configure network using dhcp"
    /sbin/ifup -f $INTERFACE
    
    # setup dhcpd configuration file
    echo "start  192.168.101.51" > $DHCPD_CONF_FILE
    echo "end  192.168.101.81" >> $DHCPD_CONF_FILE
    echo "interface  " $INTERFACE >> $DHCPD_CONF_FILE
    echo "pidfile  " $DHCPD_PID_FILE >> $DHCPD_CONF_FILE
    #echo "opt dns  192.168.1.1" >> $DHCPD_CONF_FILE
    #echo "nameserver  192.168.1.1" >> $RESOLV_CONF
    #echo "opt dns  192.168.92.1" >> $DHCPD_CONF_FILE
    #echo "nameserver  192.168.92.1" >> $RESOLV_CONF
    echo "opt subnet  255.255.255.0" >> $DHCPD_CONF_FILE
    echo "opt router " $FAILSAFE_IP >> $DHCPD_CONF_FILE
    echo "max_leases  30" >> $DHCPD_CONF_FILE

    # setup dhcpd lease file
    if [ ! -e $DHCPD_LEASE_FILE ]; then
        echo -n > $DHCPD_LEASE_FILE
    fi

    if [ -e $DHCPD_STATIC_LEASE_FILE ]; then
        cat $DHCPD_STATIC_LEASE_FILE >> $DHCPD_CONF_FILE
    fi

    echo "Running dhcpd_start"
    /usr/local/sbin/dhcpd_start $INTERFACE $FAILSAFE_IP
    
	# add default router if needed
	gateway=`route -n | grep UG`;
	if [ ! -n "$gateway" ]; then
		route add default gw $FAILSAFE_IP dev $INTERFACE metric 0
	fi
	
else
    dhcp_client=`cat $CONF_FILE | awk '/dhcp_client/ { print $2 }' `;
    dhcp_server=`cat $CONF_FILE | awk '/dhcp_server/ { print $2 }' `;
    echo "dhcp server status: " $dhcp_server
    echo "dhcp client status: " $dhcp_client
    if [ $dhcp_client == "enable" ]; then
        # setup interfaces file
        echo "auto " $INTERFACE > $INTERFACE_FILE
        echo "iface " $INTERFACE " inet dhcp" >> $INTERFACE_FILE
        echo "pre-up ifconfig " $INTERFACE " up" >> $INTERFACE_FILE

        echo -n > $RESOLV_CONF
        dns_addr1=`cat $CONF_FILE | awk '/dns_addr1/ { print $2}' `;
        dns_addr2=`cat $CONF_FILE | awk '/dns_addr2/ { print $2}' `;
        if [ -n "$dns_addr1" ]; then
            echo nameserver $dns_addr1 >> $RESOLV_CONF
        fi
        if [ -n "$dns_addr2" ]; then
            echo nameserver $dns_addr2 >> $RESOLV_CONF
        fi

        hostname=`cat $CONF_FILE | awk '/hostname/ { print $2}' `;
        [ -n "$hostname" ] && echo $hostname > $HOSTNAME_PROC

        /sbin/ifup -f $INTERFACE
    fi
    if [ $dhcp_server == "disable" ]; then
        if [ $dhcp_client == "disable" ]; then
            addr=`cat $CONF_FILE | awk '/static_ip/ { print $2}' `;
            netmsk=`cat $CONF_FILE | awk '/netmask/ { print $2}' `;
            gateway=`cat $CONF_FILE | awk '/gateway/ { print $2}' `;
            # setup interfaces file
            echo "auto " $INTERFACE > $INTERFACE_FILE
            echo "iface " $INTERFACE " inet static" >> $INTERFACE_FILE
            echo "pre-up ifconfig " $INTERFACE " up" >> $INTERFACE_FILE
            echo "address " $addr >> $INTERFACE_FILE
            echo "netmask " $netmsk >> $INTERFACE_FILE
            echo "gateway " $gateway >> $INTERFACE_FILE
            /sbin/ifup -f $INTERFACE

            echo -n > $RESOLV_CONF
            dns_addr1=`cat $CONF_FILE | awk '/dns_addr1/ { print $2}' `;
            dns_addr2=`cat $CONF_FILE | awk '/dns_addr2/ { print $2}' `;
            if [ -n "$dns_addr1" ]; then
                echo nameserver $dns_addr1 >> $RESOLV_CONF
            fi
            if [ -n "$dns_addr2" ]; then
                echo nameserver $dns_addr2 >> $RESOLV_CONF
            fi

            hostname=`cat $CONF_FILE | awk '/hostname/ { print $2}' `;
            [ -n "$hostname" ] && echo $hostname > $HOSTNAME_PROC

			echo "deleting routers"
			while route del default gw 0.0.0.0 dev $INTERFACE ; do
				:
			done
            route add default gw $gateway dev $INTERFACE metric 0
        else
            $DHCPC_FAILSAFE $INTERFACE $FAILSAFE_IP
        fi
    else
        addr=`cat $CONF_FILE | awk '/static_ip/ { print $2}' `;
        netmsk=`cat $CONF_FILE | awk '/netmask/ { print $2}' `;
        gateway=`cat $CONF_FILE | awk '/gateway/ { print $2}' `;
        # setup interfaces file

        # setup dhcpd configuration file
        start_addr=`cat $CONF_FILE | awk '/start_ip/ { print $2}' `;
        end_addr=`cat $CONF_FILE | awk '/end_ip/ { print $2}' `;
        echo "start  " $start_addr > $DHCPD_CONF_FILE
        echo "end  " $end_addr >> $DHCPD_CONF_FILE

        echo "interface  " $INTERFACE >> $DHCPD_CONF_FILE
        echo "pidfile  " $DHCPD_PID_FILE >> $DHCPD_CONF_FILE

        echo -n > $RESOLV_CONF
        dns_addr1=`cat $CONF_FILE | awk '/dns_addr1/ { print $2}' `;
        dns_addr2=`cat $CONF_FILE | awk '/dns_addr2/ { print $2}' `;
        if [ -n "$dns_addr1" ]; then
            echo "opt dns " $dns_addr1 >> $DHCPD_CONF_FILE
            echo nameserver $dns_addr1 >> $RESOLV_CONF
        fi
        if [ -n "$dns_addr2" ]; then
            echo "opt dns " $dns_addr2 >> $DHCPD_CONF_FILE
            echo nameserver $dns_addr2 >> $RESOLV_CONF
        fi

        echo "opt subnet " $netmsk >> $DHCPD_CONF_FILE
        if [ $dhcp_client == "disable" ]; then
		    echo "opt router " $addr >> $DHCPD_CONF_FILE
        else
		    echo "opt router " $FAILSAFE_IP >> $DHCPD_CONF_FILE
		fi

        max_leases=`cat $CONF_FILE | awk '/max_leases/ { print $2}' `;
        if [ -n "$max_leases" ]; then
            echo max_leases $max_leases >>  $DHCPD_CONF_FILE
        else
            echo max_leases 30 >>  $DHCPD_CONF_FILE
        fi
        hostname=`cat $CONF_FILE | awk '/hostname/ { print $2}' `;
        [ -n "$hostname" ] && echo $hostname > $HOSTNAME_PROC

        # setup dhcpd lease file
        if [ ! -e $DHCPD_LEASE_FILE ]; then
            echo -n > $DHCPD_LEASE_FILE
        fi

        if [ -e $DHCPD_STATIC_LEASE_FILE ]; then
            cat $DHCPD_STATIC_LEASE_FILE >> $DHCPD_CONF_FILE
        fi

        /usr/local/sbin/dhcpd_start $INTERFACE $addr

        if [ $dhcp_client == "disable" ]; then
            echo "auto " $INTERFACE > $INTERFACE_FILE
            echo "iface " $INTERFACE " inet static" >> $INTERFACE_FILE
            echo "pre-up ifconfig " $INTERFACE " up" >> $INTERFACE_FILE
            echo "address " $addr >> $INTERFACE_FILE
            echo "netmask " $netmsk >> $INTERFACE_FILE
            echo "gateway " $gateway >> $INTERFACE_FILE
            /sbin/ifup -f $INTERFACE
        fi
    fi
    
    if [ $dhcp_client == "enable" ]; then
		# add default router if needed
		gateway=`route -n | grep UG`;
		if [ ! -n "$gateway" ]; then
			route add default gw $FAILSAFE_IP dev $INTERFACE metric 0
		fi
	fi
fi
