. ./network-static-defines
need_config()
{
    [ -f "${CONFIG}" ] || \
       CONFIG=../networking/default/${1}
    [ -f "${CONFIG}" ] || \
       CONFIG=../networking/default/ifcfg-${1}
    [ -f "${CONFIG}" ] || \
       CONFIG="ifcfg-${1}"
}
source_config ()
{
    DEVNAME=`basename $CONFIG | sed 's/^ifcfg-//g'`
    if basename $CONFIG | grep '[^g]-' >/dev/null 2>&1 ; then
        PARENTCONFIG=`echo $CONFIG | sed 's/-[^-]*$//g'`
        PARENTDEVNAME=`basename $PARENTCONFIG | sed 's/^ifcfg-//g'`
        [ -f $PARENTCONFIG ] || {
            echo $"Missing config file $PARENTCONFIG." >&2
            exit 1
        }
        . $PARENTCONFIG
    fi
    . ./$CONFIG
}
toggle_value()
{
    if [ -z "$2" ]
    then
        echo ''
    elif [ "$2" = "yes"  -o "$2" = "YES" ] ; then
        echo "$1 on"
    elif [ "$2" = "no"  -o "$2" = "NO" ] ; then
        echo "$1 off"
    else
        echo ''
    fi
}
is_available ()
{
    LC_ALL= LANG= /sbin/ip -o link | grep -q $1
    if [ "$?" = "1" ]; then
        return 0
    else
        return 0
    fi
}
check_is_available ()
{
    is_available ${DEVICE} ${BONDINGMODE} || {
        if [ "$?" = "1" ] ; then
            echo $"Device ${DEVICE} does not seem to be present, delaying initialization."
            exit 1
        else
            echo $"Real device $DEVICE not available!"
            exit 0
        fi
    }
    echo $"Device ${DEVICE} is present and available"
}
need_hostname()
{
    if [ "`hostname`" = "(none)" -o "`hostname`" = "localhost" -o \
     "`hostname`" = "localhost.localdomain" ]; then
        return 0
    else
        return 1
    fi
}
find_default_autoip ()
{
    if [ -e $MANUINFO ] ; then
        SERIAL=`grep "SN=" ${MANUINFO} | sed 's/^SN=//g'`
        if [ -z $SERIAL ] ; then
            echo "Can't get serial number from ${MANUINFO}."
            ipaddr=""
            return 1
        fi
    else
        if [ ! -f $GET_SERIAL ] ; then
            echo "Can't find $GET_SERIAL"
            ipaddr=""
            return 1
        fi
        if [ ! -x $GET_SERIAL ] ; then
            echo "$GET_SERIAL not executable"
            ipaddr=""
            return 1
        fi
        SERIAL=`${GET_SERIAL}`
        if [ -z $SERIAL ] ; then
            echo "serial number not found"
            ipaddr=""
            return 1
        fi
    fi
    SERIAL=${SERIAL#*=}
    SERIAL=`echo ${SERIAL} | tr -d ' '`
    SERIAL=`echo ${SERIAL} | tr -d 'A-Z'`
    echo ${SERIAL} | grep [^0-9]  > /dev/null 2>&1
    if [ "$?" -eq "0" ] || [ "x$SERIAL" = "x" ] ; then
        ipaddr=""
        return 1
    fi
    ser_limit="65535"
    ip_limit="256"
    msb_shift="8"
    lsb_mask="255"
    serial=`expr $SERIAL % $ser_limit`
    num_active_ifs=`ps | grep -v "grep" | grep -c 'autoipd'`
    num_active_ifs=`expr $num_active_ifs % $ip_limit`
    let "third_octet=$serial >> $msb_shift"
    third_octet=`expr $third_octet % $ip_limit`
    let "fourth_octet = $serial & $lsb_mask"
    fourth_octet=`expr $fourth_octet % $ip_limit`
    let "fourthoctet_limit = $fourth_octet + $num_active_ifs"
    if [ "$third_octet" = "0" ] && [ "$fourth_octet" = "0" ] ; then
        third_octet=1
        fourth_octet=$num_active_ifs
    elif [ "$fourthoctet_limit" -gt "255" ] ; then
        carry=`expr $fourth_octet % 255`
        let "third_octet = $third_octet + $carry"
        third_octet=`expr $third_octet % 255`
        fourth_octet=$num_active_ifs
    else
        let "fourth_octet = $fourth_octet + $num_active_ifs"
        if [ "$fourth_octet" -eq "255" ] && \
        [ "$third_octet" -eq "255" ] ; then
            fourth_octet=$num_active_ifs
            third_octet=1
        fi
    fi
    autoip_default_ipaddr=169.254.$third_octet.$fourth_octet
    return 0
}
check_device_down ()
{
    if LC_ALL=C /sbin/ip -o link list dev $1 2>/dev/null | grep ",UP" >/dev/null 2>&1 ; then
        return 1
    else
        return 0
    fi
}
check_default_gateway ()
{
    default_gw_dev=`/sbin/ip route show table 254 | grep "^default" | cut -d ' ' -f5`
    if [ "$1" = "${default_gw_dev}" ] ; then
        echo "This device is the default gateway, need to find new default route if available"
        change_default_gw="true"
    else 
        echo "Device is $1 default gw is ${default_gw_dev}"
        change_default_gw="false"
    fi
}
get_semaphore ()
{
    wait_count=0
    while ! `mkdir "$2"`
    do
        echo "Waiting for $1 semaphore"
        /bin/sleep 1
        wait_count=$(($wait_count+1))
        if [ $wait_count -gt 100 ] ; then
            echo "Died waiting for semaphore lock for $1!"
            echo "Something stalled while editing $3"
            exit 1
        fi
    done
    echo "Got $1 semaphore"
    cp -f $1 $3 
    echo $4 > $2/owner
    return 0
}
release_semaphore ()
{
    cp -f $3 $TEMP_FLASH_FILE
    mv -f $TEMP_FLASH_FILE $1
    rm -f $3
    sync
    rm -rf $2
    echo "Released $1 semaphore"
}
release_all_semaphores ()
{
    for semaphore_dir in "$RTTABLES_TMP_DIR" "$SAMBA_CONF_TMP_DIR" "$RESOLV_CONF_TMP_DIR" "$NTPD_CONF_TMP_DIR" "$HOST_CONF_TMP_DIR" ; do
        tmp_own=`cat $semaphore_dir/owner 2>&1`
        if [ "$tmp_own" = "$1" ] ; then
            echo "$1 has jammed $semaphore_dir, fixing"
            rm -rf $semaphore_dir
        fi
    done
}
check_rttables ()
{
    if [ ! -f $RTTABLES ] ; then
        mkdir -p /etc/iproute2
        touch $RTTABLES
    fi
    get_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP $1
    if `cat ${RTTABLES} | grep -q " ${TABLENAME}$"` ; then
        release_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP
        return 0
    else
        for (( table_num = 3 ; table_num < 254 ; table_num++ ))
        do
            if ! `cat ${RTTABLES} | grep -q "^$table_num ."` ; then 
                echo "${table_num} ${TABLENAME}" >> "${RTTABLES_TMP}"
                release_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP
                return 0
            fi
        done
    fi
    echo "Could not allocate table number for ${TABLENAME}"
    release_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP
    return 1
}
remove_table_id ()
{
    get_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP $1
    echo "Removing table id"
    if `sed "/. ${TABLENAME}$/d" "${RTTABLES}" > "${RTTABLES_TMP}"` ; then
        echo "Removed table id ${TABLENAME}"
    else
        echo "Table id did not exist${TABLENAME}"
    fi
    release_semaphore $RTTABLES $RTTABLES_TMP_DIR $RTTABLES_TMP
    return 0
}
lookup_priority_id ()
{
    if `/sbin/ip rule show | grep -q "${TABLENAME}[[:space:]]*$"` ; then
        TABLEPRIORITY=`/sbin/ip rule show | grep "${TABLENAME}[[:space:]]*$" | cut -d ':' -f1`
        echo "Priority for ${TABLENAME} found, it is ${TABLEPRIORITY}"
        return 0
    else
        for (( pri_num = 500 ; pri_num < 32000 ; pri_num++ ))
        do
            if [ `/sbin/ip rule show | grep -c "^${pri_num}:"` -eq 0 ] ; then 
                TABLEPRIORITY=${pri_num}
                echo "Priority ${TABLEPRIORITY} assigned to ${TABLENAME}."
                return 0
            fi
        done
        echo "Could not allocate a priority for this table, all levels used."
        return 1
    fi
}
add_policy_route ()
{
    TABLENAME="table-$1"
    if [ "$2" = "autoip" ] ; then
        autoip="true"
    else
        autoip="false"
    fi
    
    if ! check_rttables $1 || ! lookup_priority_id ; then
        echo "Table lookup error"
        exit 1
    fi
    if [ -n "${SRCADDR}" ] ; then
       SRC="src ${SRCADDR}"
    else
       SRC="src ${IPADDR}"
    fi
    if ! [ -n "${NETMASK}" ] ; then
        NETMASK=`ipcalc -m ${IPADDR} | cut -d '=' -f2`
    fi
    PREFIX=`ipcalc -p ${IPADDR} ${NETMASK} | cut -d '=' -f2`
    if ! [ -n "${BROADCAST}" ] ; then
        BROADCAST=`ipcalc -b ${IPADDR} ${NETMASK} | cut -d '=' -f2`
    fi
    if ! [ -n "${NETWORK}" ] ; then
        NETWORK=`ipcalc -n ${IPADDR} ${NETMASK} | cut -d '=' -f2`
    fi
    echo "Flushing table ${TABLENAME}"
    /sbin/ip route flush table ${TABLENAME}
    echo "Adding route ${NETWORK}/${PREFIX} dev $1 ${SRC} to ${TABLENAME}"
    /sbin/ip route replace ${NETWORK}/${PREFIX} dev $1 ${SRC} table ${TABLENAME}
    if [ "${autoip}" = "false" ] ; then
        echo "Adding autoip route to ${TABLENAME}"
        /sbin/ip route replace 169.254.0.0/16 dev $1 ${SRC} table ${TABLENAME}
    fi
    if [ -n ${GATEWAY} ] && [ "${autoip}" = "false" ] ; then
        echo "Adding default via ${GATEWAY} dev $1 to ${TABLENAME}"
        /sbin/ip route replace default via ${GATEWAY} dev $1 table ${TABLENAME}
        echo "Adding or replacing catch all default route via $1"
        /sbin/ip route replace default via ${GATEWAY} dev $1
    else 
        echo "No Gateway given for $1"
    fi
    echo "Adding rule from ${IPADDR}/32 table ${TABLENAME} priority ${TABLEPRIORITY}"
    /sbin/ip rule del from ${IPADDR}/32 table ${TABLENAME} priority ${TABLEPRIORITY}
    /sbin/ip rule add from ${IPADDR}/32 table ${TABLENAME} priority ${TABLEPRIORITY}
    echo "Adding route add ${NETWORK}/${PREFIX} dev $1 ${SRC}"
    /sbin/ip route add ${NETWORK}/${PREFIX} dev $1 ${SRC}
    echo "Flushing cache"
    /sbin/ip route flush cache
    return 0
}
del_policy_route ()
{
    TABLENAME="table-$1"
    if ! `cat ${RTTABLES} | grep -q ". ${TABLENAME}$" ` ; then
        echo "Table ${TABLENAME} does not exist, no table to delete"
        return 0
    fi
    
    lookup_priority_id
    echo "Removing rule from ${IPADDR}/32 table ${TABLENAME} priority ${TABLEPRIORITY}"
    /sbin/ip rule del from ${IPADDR}/32 table ${TABLENAME} priority ${TABLEPRIORITY}
    echo "Flushing table ${TABLENAME}"
    /sbin/ip route flush table ${TABLENAME}
    if [ "${change_default_gw}" = "true" ] ; then
        for route_table in `cat "${RTTABLES}" | cut -d ' ' -f2` ; do
            next_gw_ip=`/sbin/ip route show table $route_table | grep "default" | cut -d ' ' -f3`
            next_gw_dev=`/sbin/ip route show table $route_table | grep "default" | cut -d ' ' -f5`
            echo "Route table is $route_table, gw ip is ${next_gw_ip}, gw dev is ${next_gw_dev}"
            if ! [ -z ${next_gw_ip} ] ; then
                echo "Found another gateway"
                /sbin/ip route replace default via ${next_gw_ip} dev ${next_gw_dev}
            fi
        done
    fi
    echo "Flushing cache"
    /sbin/ip route flush cache
    remove_table_id
    return 0
}
start_dynamic_networking ()
{
    dyn_dev=$1
    net_dyn_pidf="/var/run/netdyn_pid-${dyn_dev}"
    net_dyn_link="/var/run/netdyn-${dyn_dev}"
    echo "Starting dynamic configuration daemon"
    if ln -s /etc/sysconfig/network-scripts/network-dynamic ${net_dyn_link} ; then
        ${net_dyn_link} ${dyn_dev} > /tmp/dhcp_log_${dyn_dev} 2>&1 &
        /bin/sleep 3
        pidof netdyn-${dyn_dev} > ${net_dyn_pidf}
        echo "network-dynamic process ID is:" 
        cat ${net_dyn_pidf}
    else
        echo "Dynamic network process not shut down cleanly"
    fi
}
stop_dynamic_networking () 
{
    dyn_dev=$1
    net_dyn_pidf="/var/run/netdyn_pid-${dyn_dev}"
    net_dyn_link="/var/run/netdyn-${dyn_dev}"
    if  [ -f ${net_dyn_pidf} ] ; then
        echo "Killing dynamic networking script for $dyn_dev"
        /bin/kill -9 `cat ${net_dyn_pidf}` >/dev/null 2>&1
        /bin/sleep 1
    else
        echo "Dynamic network was not running $dyn_dev"
    fi
    rm -f ${net_dyn_pidf} 2>&1 > /dev/null
    rm -f ${net_dyn_link} 2>&1 > /dev/null
    if [ -f "/var/run/udhcpc-${dyn_dev}.pid" ]; then
        /bin/kill -9 `cat /var/run/udhcpc-${dyn_dev}.pid` >/dev/null 2>&1
        rm -f /var/run/udhcpc-${dyn_dev}.pid 2>&1 > /dev/null
        retcode=$?
        echo $"Killed udhcpc for $dyn_dev"
    else
        echo $"udhcpc was not running for $dyn_dev"
    fi
    
    if [ -f "/var/run/autoipd-${dyn_dev}.pid" ] ; then
        /bin/kill -9 `cat /var/run/autoipd-${dyn_dev}.pid` >/dev/null 2>&1
        retcode=$?
        echo $"Killed autoipd for $dyn_dev"
    else
        echo $"Autoipd was not running for $dyn_dev"
    fi
    rm -f /var/run/autoipd-${dyn_dev} 2>&1 > /dev/null
    rm -f /var/run/autoipd-${dyn_dev}.pid 2>&1 > /dev/null
    
    release_all_semaphores $dyn_dev
}
setup_ad ()
{
    echo "Wait 60 seconds for 802.3ad link to setup."
    setup_time=1
    while [ "$setup_time" -le 60 ]
    do
        echo -n "."
        /bin/sleep 1
        let "setup_time=$setup_time+1"
    done
}
get_current_ip ()
{
    IPADDR=`/sbin/ifconfig "$1" | grep "addr:" \
    | cut -d ':' -f2 | cut -d ' ' -f1`
    if `echo ${IPADDR} | grep -q "\."` && [ "${IPADDR}" != "0.0.0.0" ] ; then
        echo "Current IP Address for $1 is ${IPADDR}"
        return 0
    else
        echo "There is currently no IP address assigned to $1"
        return 1
    fi
}
clean_routing_table ()
{
    if get_current_ip $1 ; then
        check_default_gateway $1
        del_policy_route $1
    fi
    return 0
}
reread_samba_config ()
{
    echo "SMBD and NMBD rereading smb.conf - commented out until smb.conf issues resolved"
}
restart_upnp ()
{
    echo "Checking if UPNP enabled"
    if [ -f /etc/init.d/S*upnpd ]; then
        if [ $1 == "ifrunning" ]; then
            if [ -f $UPNPPID ]; then
                echo "Restarting UPNP"
                /etc/init.d/_upnpd restart
            else
                echo "UPNP not running, do not restart"
            fi
        else
            echo "Restarting UPNP"
            /etc/init.d/_upnpd restart
        fi
    else
        echo "UPNP not enabled, do not restart"
    fi
}
restart_ntp ()
{
    echo "Checking if NTPD enabled"
    if [ -f /etc/init.d/S*ntpd ]; then
        if [ $1 == "ifrunning" ]; then
            if [ -f $NTPPID ]; then
                echo "Restarting NTPD"
                /etc/init.d/_ntpd restart
            else
                echo "NTP not running, do not restart"
            fi
        else
            echo "Restarting NTPD"
            /etc/init.d/_ntpd restart
        fi
    else
        echo "NTP not enabled, do not restart"
    fi
}
reload_samba_config ()
{
    /etc/init.d/_samba reloadconfig
}
add_assigned_dns ()
{
    if [ -n "$3" ] ; then
       search_domain="search $3 #dhcp"
    else
       search_domain=`grep search /etc/resolv.conf.fallback`
    fi
    get_semaphore $RESOLV_CONF $RESOLV_CONF_TMP_DIR $RESOLV_CONF_TMP $1
    echo -n > $RESOLV_CONF_TMP
    echo "$search_domain" >> $RESOLV_CONF_TMP
    for i in $2 ; do
        echo "nameserver $i #dhcp" >> $RESOLV_CONF_TMP 
    done
    release_semaphore $RESOLV_CONF $RESOLV_CONF_TMP_DIR $RESOLV_CONF_TMP
}
add_assigned_wins ()
{
    get_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP $1
    wins_server_old_entry=`grep -v '#' $SAMBA_CONF | grep "wins " | grep "server"`
    if [ -z "${wins_server_old_entry}" ] ; then
        echo "Invalid smb.conf  No wins server entry"
        release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
        exit 1
    fi
    device_listed=`echo "$wins_server_old_entry" | grep ";" `
    if [ -n "$device_listed" ] ; then
        echo "found ;"
        wins_server="wins server="
        wins_server_comment=$server_origin_tag
    else
        wins_server=$wins_server_old_entry
        wins_server_comment=`cat $SAMBA_CONF | grep "$server_origin_tag"`
    fi
    for i in $2 ; do
        wins_server="$wins_server ${i}"
        wins_server_comment="$wins_server_comment $1"
    done
    sed -i $SAMBA_CONF_TMP -e "/$server_origin_tag/d" 
    
    sed -i $SAMBA_CONF_TMP -e "s/$wins_server_old_entry/$wins_server_comment\n$wins_server/"  
    release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
}
add_assigned_ntp ()
{
    get_semaphore $NTPD_CONF $NTPD_CONF_TMP_DIR $NTPD_CONF_TMP $1
    for i in $2 ; do
        echo "server $i # $1" >> ${NTPD_CONF_TMP}
    done
    release_semaphore $NTPD_CONF $NTPD_CONF_TMP_DIR $NTPD_CONF_TMP
}
remove_assigned_ntp ()
{
    get_semaphore $NTPD_CONF $NTPD_CONF_TMP_DIR $NTPD_CONF_TMP $1
    sed "/.\# $1$/d"  $NTPD_CONF > $NTPD_CONF_TMP
    release_semaphore $NTPD_CONF $NTPD_CONF_TMP_DIR $NTPD_CONF_TMP
}
remove_assigned_dns ()
{
    get_semaphore $RESOLV_CONF $RESOLV_CONF_TMP_DIR $RESOLV_CONF_TMP $1
    cp -f $RESOLV_CONF_FALLBACK $RESOLV_CONF_TMP
    release_semaphore $RESOLV_CONF $RESOLV_CONF_TMP_DIR $RESOLV_CONF_TMP
}
remove_assigned_wins ()
{
    get_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP $1
    wins_server_old_entry=`grep -v '#' $SAMBA_CONF | grep "wins " | grep "server"`
    wins_server_comment_old_entry=`cat $SAMBA_CONF | grep "$server_origin_tag"`
    wins_server_comment="$server_origin_tag"
    at_least_one="false"
    wins_server=""
    device_listed=`echo $wins_server_comment_old_entry | grep "$1" `
    if [ -n "$device_listed" ] ; then
        echo "Removing WINS servers listed for this interface"
        device_list=`echo $wins_server_comment_old_entry | cut -d ':' -f2`
        server_count=1
        for i in $device_list ; do
            current_server=`echo $wins_server_old_entry | cut -d "=" -f2 | awk "{ print \\$${server_count}}"` 
            if [ "$i" != "$1" ] ; then
                wins_server_comment="$wins_server_comment $i"
                wins_server="$wins_server $current_server"
                at_least_one="true"
            fi
            server_count=$(($server_count+1))
        done
    else
        echo "No WINS servers listed for this interface"
        cp -f $SAMBA_CONF $SAMBA_CONF_TMP
        release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
        return 0
    fi
    sed -i $SAMBA_CONF_TMP -e "/$server_origin_tag/d"  
    if [ "$at_least_one" = "true" ] ; then
        sed -i $SAMBA_CONF_TMP -e "s/$wins_server_old_entry/$wins_server_comment\n  wins server =$wins_server/" 
    else
        sed -i $SAMBA_CONF_TMP -e "s/$wins_server_old_entry/;  wins server =/" 
    fi
    release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
}
update_udhcp_push_hostname ()
{
    for dyn_device_pid_file in `ls /var/run/netdyn_pid-*` ; do
        dyn_device=`echo $dyn_device_pid_file | cut -d '-' -f2` 
        if [ "$dyn_device" != "$1" ] ; then
            if `echo $dyn_device | grep -q "\."` ; then
                phy_dev=`echo $dyn_device | cut -d '.' -f1`
            else
                phy_dev="$dyn_device"
            fi
            intfc_stat=`ps -aef | grep "ifplugd.action" | grep "down" | grep "${phy_dev}"`
            if [ -n "$intfc_stat" ] ; then
                echo "No need to restart udhcp on $dyn_device to push hostname, physical interface $phy_dev going down"
            else
                echo "Updating push hostname on $dyn_device from $1"
                stop_dynamic_networking $dyn_device
                start_dynamic_networking $dyn_device
            fi
        fi
    done
}
add_assigned_hostname ()
{
    get_semaphore $HOST_CONF $HOST_CONF_TMP_DIR $HOST_CONF_TMP $1
    old_hostname=`cat /proc/sys/kernel/hostname`
    sed "/ $old_hostname$/d" $HOST_CONF > $HOST_CONF_TMP
    echo "$3 $2" >> $HOST_CONF_TMP
    echo $2 > /proc/sys/kernel/hostname
    release_semaphore $HOST_CONF $HOST_CONF_TMP_DIR $HOST_CONF_TMP
    get_semaphore $UPNP_CONF $UPNP_CONF_TMP_DIR $UPNP_CONF_TMP $1
    sed "/UPnP_FriendlyName/d" $UPNP_CONF > $UPNP_CONF_TMP
    echo "UPnP_FriendlyName = $2" >> $UPNP_CONF_TMP
    release_semaphore $UPNP_CONF $UPNP_CONF_TMP_DIR $UPNP_CONF_TMP
    echo "Updating mDNS responder config with $2"
    sed -i ${mDNS_CONF} -e "s/^${old_hostname}/${2}/g"
    get_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP $1
    sed -i ${SAMBA_CONF_TMP} -e "s/^\( *\)netbios name\( *\)=\(.*\)/   netbios name = ${2}/g"
    release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
    reload_samba_config
}
remove_assigned_hostname ()
{
    get_semaphore $HOST_CONF $HOST_CONF_TMP_DIR $HOST_CONF_TMP $1
    old_hostname=`cat /proc/sys/kernel/hostname`
    new_hostname=`cat $HOSTNAME_FILE`
    sed "/ $old_hostname$/d" $HOST_CONF > $HOST_CONF_TMP
    echo "127.0.1.1 $new_hostname" >> $HOST_CONF_TMP
    echo $new_hostname > /proc/sys/kernel/hostname
    release_semaphore $HOST_CONF $HOST_CONF_TMP_DIR $HOST_CONF_TMP
    get_semaphore $UPNP_CONF $UPNP_CONF_TMP_DIR $UPNP_CONF_TMP $1
    sed "/UPnP_FriendlyName/d" $UPNP_CONF > $UPNP_CONF_TMP
    echo "UPnP_FriendlyName = $new_hostname" >> $UPNP_CONF_TMP
    release_semaphore $UPNP_CONF $UPNP_CONF_TMP_DIR $UPNP_CONF_TMP
    echo "Updating mDNS responder config with $new_hostname"
    sed -i ${mDNS_CONF} -e "s/^${old_hostname}/${new_hostname}/g"
    get_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP $1
    sed -i ${SAMBA_CONF_TMP} -e "s/^\( *\)netbios name\( *\)=\(.*\)/   netbios name = ${new_hostname}/g"
    release_semaphore $SAMBA_CONF $SAMBA_CONF_TMP_DIR $SAMBA_CONF_TMP
    reload_samba_config
}
remove_assigned_servers ()
{
    echo "removing assigned NTP and WINS servers"
    remove_assigned_wins $1
    reread_samba_config
    remove_assigned_ntp $1
    restart_ntp ifrunning
    PULL_DNS=`grep -v '#' $NETWORK_CONF | grep PULL_DNS | grep "$1$"`
    PULL_DNS=${PULL_DNS#*=} 
    if [ "$PULL_DNS" = "$1" ] ; then
        remove_assigned_dns
    fi
    PULL_HOSTNAME=`grep -v '#' $NETWORK_CONF | grep PULL_HOSTNAME | grep "$1$"`
    PULL_HOSTNAME=${PULL_HOSTNAME#*=}
    if [ "$PULL_HOSTNAME" = "$1" ] ; then
        remove_assigned_hostname $1
        update_udhcp_push_hostname $1
        restart_upnp ifrunning
    fi
}
update_mDNS ()
{
    mDNSpid=`/bin/pidof mDNSResponderPosix`
    if [ $mDNSpid ] ; then
        echo "Signaling  mDNSResponderPosix."
        /etc/init.d/_mdnsresponderd reregister
    fi
}
