#!/bin/bash

#this file need to be linked in following subdirs:
# /etc/dhcp3/dhclient-enter-hooks.d/
# /etc/network/if-up.d/

# static IPv4 interface down
#    IF_NETMASK=255.255.255.0
#    IF_METRIC=100
#    IF_ADDRESS=192.168.161.131
#    IFACE=eth1 
#    LOGICAL=eth1 
#    ADDRFAM=inet 
#    METHOD=static 
#    MODE=stop 
#    PHASE=pre-down 
#    IF_ADDRESS=192.168.161.131

# static IPv4 interface up
#    IF_NETMASK=255.255.255.0
#    IF_METRIC=100
#    IF_ADDRESS=192.168.161.131
#    IFACE=eth1 
#    LOGICAL=eth1 
#    ADDRFAM=inet 
#    METHOD=static 
#    MODE=start 
#    PHASE=post-up 
#    IF_ADDRESS=192.168.161.131

# IPV6 manual (like DHCP via Router) interface down
#    IF_METRIC=100
#    IFACE=eth1 
#    LOGICAL=eth1 
#    ADDRFAM=inet6 
#    METHOD=manual 
#    MODE=stop 
#    PHASE=pre-down 

# IPV6 manual (like DHCP via Router) interface up
#    IF_METRIC=100
#    IFACE=eth1 
#    LOGICAL=eth1 
#    ADDRFAM=inet6 
#    METHOD=manual 
#    MODE=start 
#    PHASE=post-up 
#    IF_ADDRESS=

if [ -e /tmp/cmdline ] ; then
    . /tmp/cmdline
fi

# called by DHCP3 hook in /etc/dhcp3/dhclient-enter-hooks.d/
echo "$0 start: $(date) pars:$@" >> /tmp/sequence
if [ "$reason" == "BOUND" -o "$reason" == "REBOOT" ];then
    # reason='BOUND'
    # interface='eth0'
    # medium=''
    # alias_ip_address=''
    # new_ip_address='10.0.104.66'
    # new_subnet_mask='255.248.0.0'
    # new_domain_name='hq.ferrari-electronic.de'
    # new_domain_search=''
    # new_domain_name_servers='10.1.1.1 10.1.1.2'
    # new_routers='10.1.0.10'
    # new_static_routes=''
    # old_ip_address=''
    # old_subnet_mask=''
    # old_domain_name=''
    # old_domain_search=''
    # old_domain_name_servers=''
    # old_routers=''
    # old_static_routes=''
    IFACE=$interface
    LOGICAL=$interface
    ADDRFAM="inet"
    METHOD="dhcp"
    MODE="start"
    PHASE="post-up"
    IF_ADDRESS=$new_ip_address
    IF_NETMASK=$new_subnet_mask

    if [ ! -z "$new_routers" ];then
        IF_GATEWAY=$(echo "$new_routers" | awk '{print $1}')
    fi
fi

echo "    reason=$reason IFACE=$IFACE LOGICAL=$LOGICAL ADDRFAM=$ADDRFAM METHOD=$METHOD MODE=$MODE PHASE=$PHASE IF_ADDRESS=$IF_ADDRESS IF_NETMASK=$IF_NETMASK IF_GATEWAY=$IF_GATEWAY" >>/tmp/sequence
#echo "    reason=$reason IFACE=$IFACE LOGICAL=$LOGICAL ADDRFAM=$ADDRFAM METHOD=$METHOD MODE=$MODE PHASE=$PHASE IF_ADDRESS=$IF_ADDRESS IF_NETMASK=$IF_NETMASK IF_GATEWAY=$IF_GATEWAY"
  
if [ "$PHASE" == "post-up" ]; then
    echo "starting udpconfd"
    #start udpconfd as soon as possible
    route del 255.255.255.255 eth0 2>/dev/null
    route add 255.255.255.255 eth0
    route del default metric 500 eth0 2>/dev/null
    route add default metric 500 eth0
    killall udpconfd 2>/dev/null
    udpconfd &
fi

if [ -z "$ADDRFAM" ]; then
    echo "$0 stop: $(date)" >> /tmp/sequence
elif [ -z "$IFACE" ]; then
    echo "$0 stop: $(date)" >> /tmp/sequence
elif [ -z "$IF_ADDRESS" ]; then
    echo "$0 stop: $(date)" >> /tmp/sequence
elif [ "$PHASE" == "post-up" ]; then
    echo "    running ..." >> /tmp/sequence 

    case "$IFACE" in
        eth0)  
            envPrefix="IP_"
            ;;
        eth1)  
            envPrefix="IP2_"
            ;;
        eth2)  
            envPrefix="IP3_"
            ;;
        eth3)  
            envPrefix="IP4_"
            ;;
        eth4)  
            envPrefix="IP5_"
            ;;
        eth5)  
            envPrefix="IP6_"
            ;;
        eth6)  
            envPrefix="IP7_"
            ;;
        eth7)  
            envPrefix="IP8_"
            ;;
        *) 
            echo "max 8 interfaces supported" >>/tmp/sequence
            echo "$0 stop: $(date)" >> /tmp/sequence
            return 0
            ;;
    esac

    case "$ADDRFAM" in
        inet)  
            envSuffix=""
            ;;
        inet6)  
            envSuffix="_6"
            ;;
        *) 
            echo "unknown address family ADDRFAM=$ADDRFAM" >>/tmp/sequence
            echo "$0 stop: $(date)" >> /tmp/sequence
            return 0
            ;;
    esac

    case "$METHOD" in
        static)  
            IP_DHCPMODE="STATIC"
            ;;
        dhcp)  
            IP_DHCPMODE="CLIENT"
            ;;
        manual)  
            IP_DHCPMODE="AUTO"
            ;;
        *) 
            echo "don't know METHOD=$METHOD" >>/tmp/sequence
            echo "$0 stop: $(date)" >> /tmp/sequence
            return 0
            ;;
    esac

    if grep -q "${envPrefix}INTERFACE${envSuffix}=" /tmp/cmdline; then
        sed -i -e "s/${envPrefix}INTERFACE${envSuffix}=.*$/${envPrefix}INTERFACE${envSuffix}=$IFACE/" /tmp/cmdline
    else 
        echo export ${envPrefix}INTERFACE${envSuffix}=$IFACE >>/tmp/cmdline
    fi
    
    if grep -q "${envPrefix}ADDRESS${envSuffix}=" /tmp/cmdline; then
        sed -i -e "s/${envPrefix}ADDRESS${envSuffix}=.*$/${envPrefix}ADDRESS${envSuffix}=$IF_ADDRESS/" /tmp/cmdline
    else
        echo export ${envPrefix}ADDRESS${envSuffix}=$IF_ADDRESS >> /tmp/cmdline
        export ${envPrefix}ADDRESS${envSuffix}=$IF_ADDRESS
    fi
    
    if grep -q "${envPrefix}MASK${envSuffix}=" /tmp/cmdline; then
        sed -i -e "s/${envPrefix}MASK${envSuffix}=.*$/${envPrefix}MASK${envSuffix}=$IF_NETMASK/"  /tmp/cmdline
    else 
        echo export ${envPrefix}MASK${envSuffix}=$IF_NETMASK >> /tmp/cmdline
    fi
    
    if grep -q "${envPrefix}GW${envSuffix}=" /tmp/cmdline; then
        sed -i -e "s/${envPrefix}GW${envSuffix}=.*$/${envPrefix}GW${envSuffix}=$IF_GATEWAY/"  /tmp/cmdline
    else
        echo export ${envPrefix}GW${envSuffix}=$IF_GATEWAY >> /tmp/cmdline
    fi
    
    if grep -q "${envPrefix}DHCPMODE${envSuffix}=" /tmp/cmdline; then
        sed -i -e "s/${envPrefix}DHCPMODE${envSuffix}=.*$/${envPrefix}DHCPMODE${envSuffix}=$IP_DHCPMODE/" /tmp/cmdline
    else
        echo "export ${envPrefix}DHCPMODE${envSuffix}=$IP_DHCPMODE" >> /tmp/cmdline        
    fi
    
    if [ "$IFACE" == "eth0" -a "$ADDRFAM" == "inet" ];then
        echo $IF_ADDRESS > /tmp/ipaddress
    fi
    if [ "$IFACE" == "eth0" -a "$ADDRFAM" == "inet6" ];then
        echo $IF_ADDRESS > /tmp/ipaddress6
    fi
    
    
    if [ ! -z "$new_domain_name_servers" ]; then
        let i=1
        for dnsServer in $new_domain_name_servers;do 
            if grep -q "${envPrefix}DNS${i}${envSuffix}=" /tmp/cmdline; then
                sed -i -e "s/${envPrefix}DNS${i}${envSuffix}=.*$/${envPrefix}DNS${i}${envSuffix}=$dnsServer/" /tmp/cmdline
            else
                echo "export ${envPrefix}DNS${i}${envSuffix}=$dnsServer" >> /tmp/cmdline        
            fi
            let i=${i}+1
        done
    fi

    if [ ! -z "$new_domain_name" ]; then
        if grep -q "${envPrefix}DOMAIN${envSuffix}=" /tmp/cmdline; then
            sed -i -e "s/${envPrefix}DOMAIN${envSuffix}=.*$/${envPrefix}DNS${i}${envSuffix}=$new_domain_name/" /tmp/cmdline
        else
            echo "export ${envPrefix}DOMAIN${envSuffix}=$new_domain_name" >> /tmp/cmdline        
        fi
    fi

    if [ "$IFACE" == "eth0" -a "$ADDRFAM" == "inet" ];then
        if ! grep '^#LOCKED$' /etc/hosts; then
            touch /etc/hosts
            echo "OMG: build hosts file"
            echo "# automatically generated file" > /etc/hosts
            echo "127.0.0.1 localhost" >>/etc/hosts
            echo "$IF_ADDRESS $(/bin/hostname) omcard" >>/etc/hosts
        fi

        # put HWADDR into environment
        HWADDR=$(ifconfig eth0 | grep "eth0 " | grep HWaddr | sed -e "s/.*\(..:..:..:..:..:..\).*/\1/")
        if grep -q "HWADDR=" /tmp/cmdline; then
            sed -i -e "s/HWADDR=.*$/HWADDR=$HWADDR/"  /tmp/cmdline
        else
            echo export HWADDR=$HWADDR >> /tmp/cmdline
        fi

        # Set Avahi service information
        if [ -e /etc/avahi/services/omg.service ] ; then
            . /tmp/cmdline
            string=$(printf "IP_DHCPMODE=%s IP_ADDRESS=%s IP_MASK=%s IP_GATEWAY=%s DNS1=%s DNS2=%s" "${IP_DHCPMODE}" "${IP_ADDRESS}" "${IP_MASK}" "${IP_GW}" "${IP_DNS1}" "${IP_DNS2}")
            sed -i -e "s/<txt-record>.*<\/txt-record>/<txt-record>${string}<\/txt-record>/" /etc/avahi/services/omg.service
        fi
    fi

    killall snfsserver
    snfsserver 0.0.0.0 3215 &
    
#    sed -i "s/serverlisten.*/serverlisten\t\t${IP_ADDR} ${IP_ADDR_2} ${IP_ADDR_3} ${IP_ADDR_4} ${IP_ADDR_5} ${IP_ADDR_6} ${IP_ADDR_7} ${IP_ADDR_8} 127.0.0.1/" /etc/nhttpd/nhttpd.conf
    service nhttpd.omg restart
    
    # Set time
    which checkntp && checkntp -s
    
    echo "$0 stop: $(date)" >> /tmp/sequence
fi

