--- trunk/magellan-initscripts/etc/rc.d/init.d/network 2004/12/13 22:52:07 3 +++ trunk/magellan-initscripts/etc/rc.d/init.d/network 2005/10/09 21:39:59 264 @@ -1,4 +1,5 @@ #!/bin/bash +# $Header: /home/cvsd/magellan-cvs/magellan-src/magellan-initscripts/etc/rc.d/init.d/network,v 1.7 2005-10-09 21:39:59 niro Exp $ #%rlevels: 0:k 1:k 2:k 3:s 4:s 5:s 6:k #%start: 20 @@ -10,131 +11,246 @@ #%after: source /etc/sysconfig/rc -source $rc_functions +source ${rc_functions} -checkconfig() { - if [ -z $NETWORKING ] +# read values from files +read_value() +{ + local var="$1" + local file="$2" + local value + + # local all possible vars + # global + local ONBOOT + local NETWORKING + + # static + local IP + local NETMASK + local BROADCAST + local NETWORKING + local FORCE_MAC_TO + + # dhcp + local DHCP_PROG + local DHCP_START + local DHCP_STOP + + # default gw + local GATEWAY + local GATEWAY_IF + + # wireless extensions + local WIRELESS_AP + local WIRELESS_AUTH_MODE + local WIRELESS_BITRATE + local WIRELESS_CHANNEL + local WIRELESS_DEFAULT_KEY + local WIRELESS_ESSID + local WIRELESS_FREQUENCY + local WIRELESS_KEY + local WIRELESS_KEY_ASCII + local WIRELESS_KEY_0 + local WIRELESS_KEY_1 + local WIRELESS_KEY_2 + local WIRELESS_KEY_3 + local WIRELESS_KEY_LENGTH + local WIRELESS_MODE + local WIRELESS_NICK + local WIRELESS_NWID + local WIRELESS_POWER + + source ${file} + eval value=\$$(echo ${var}) + echo "${value}" +} + +checkconfig() +{ + if [ -z "${NETWORKING}" ] then echo "NETWORKING missing in net.${interface}, aborted" exit 1 fi - case $NETWORKING in + case "${NETWORKING}" in static) - if [ -z $IP ] + if [ -z "${IP}" ] then echo "IP missing in net.${interface}, aborted" exit 1 fi - if [ -z $NETMASK ] + if [ -z "${NETMASK}" ] then echo -n "NETMASK missing in net.${interface}, " echo "using 255.255.255.0" NETMASK=255.255.255.0 fi - if [ -z $BROADCAST ] + if [ -z "${BROADCAST}" ] then echo -n "BROADCAST missing in net.${interface}, " echo "using default address" fi ;; + dhcp) - if [ -z $DHCP_PROG ] + if [ -z "${DHCP_PROG}" ] then echo "DHCP_PROG missing in net.${interface}, aborted" exit 1 fi ;; + esac } - -case "$1" in - start) - for file in $(grep -il "ONBOOT=\"yes\"" $network_settings/net.*) - do - interface=$(basename $file | sed s/net.//) - case "$interface" in +# onboot_interface_list /path/to/files* +onboot_interface_list() +{ + local file + local devices + local iface + + # get list of all devices + for file in $@ + do + if [[ $(read_value ONBOOT ${file}) = yes ]] + then + iface="$(basename ${file} | sed s/net.//)" + # exclude backup files + case "${iface}" in *~) ;; - *) - #$network_devices/ifup $interface - source $network_settings/net.${interface} || exit 1 - checkconfig - case $NETWORKING in - dhcp) - echo -e ${COLOREDSTAR}"Bringing up interface ${COLBLUE}${interface}${COLDEFAULT} ..." - $CURS_UP - $SET_WWCOL - echo "[DHCP]" - #modprobe $interface - loadproc $DHCP_PROG $DHCP_START - ;; - static) - echo -e ${COLOREDSTAR}"Bringing up interface ${COLBLUE}${interface}${COLDEFAULT} ..." - $CURS_UP - $SET_WWCOL - echo "[STATIC]" - ifconfig $interface $IP netmask $NETMASK broadcast $BROADCAST - evaluate_retval - ;; - esac - ;; + *) devices="${devices} $(basename ${file} | sed s/net.//)" ;; esac - done + fi + done - if [ "$GATEWAY" != "" ] + echo "${devices}" +} + +networking_start() +{ + local iface dns + + # get list of all devices + for iface in $(onboot_interface_list ${network_settings}/net.*) + do + # checkconfig + source ${network_settings}/net.${iface} || exit 1 + checkconfig + + echo -e ${COLOREDSTAR}"Bringing up interface ${COLBLUE}${iface}${COLDEFAULT} ..." + + # setup mac + [ -n "${FORCE_MAC_TO}" ] && ifconfig ${iface} hw ether "${FORCE_MAC_TO}" + + # setup static or dhcp + case ${NETWORKING} in + dhcp|DHCP) + ${CURS_UP} + ${SET_WWCOL} + echo "[DHCP]" + loadproc ${DHCP_PROG} ${DHCP_START} + ;; + static|STATIC) + ${CURS_UP} + ${SET_WWCOL} + echo "[STATIC]" + ifconfig "${iface}" "${IP}" netmask "${NETMASK}" broadcast "${BROADCAST}" + evaluate_retval + ;; + esac + + # setup def gw + if [[ -n ${GATEWAY} ]] then - echo -e ${COLOREDSTAR}"Setting up default gateway ..." - route add default gateway $GATEWAY metric 1 \ - dev $GATEWAY_IF + echo -e ${COLOREDSTAR}"Setting up default gateway for ${COLBLUE}${iface}${COLDEFAULT} ..." + route add default gateway ${GATEWAY} metric 1 dev ${iface} evaluate_retval fi - update_svcstatus $1 - splash svc_started "$(basename $0)" 0 - ;; + # setup /etc/resolv.conf + if [[ -n ${NAMESERVER} ]] + then + echo -e ${COLOREDSTAR}"Setting up all nameserver for ${COLBLUE}${iface}${COLDEFAULT} ..." + + # whipe out the old one + echo "# Generated by the magellan-initscripts for ${iface}" > /etc/resolv.conf + for dns in ${NAMESERVER} + do + echo "nameserver ${dns}" >> /etc/resolv.conf + done + fi - stop) - if [ "$GATEWAY" != "" ] + # setup wlan extensions + if [ -x /usr/sbin/iwconfig ] + then + [[ -n ${WIRELESS_BITRATE} ]] && iwconfig "${iface}" rate "${WIRELESS_BITRATE}" + [[ -n ${WIRELESS_CHANNEL} ]] && iwconfig "${iface}" channel "${WIRELESS_CHANNEL}" + [[ -n ${WIRELESS_ESSID} ]] && iwconfig "${iface}" essid "${WIRELESS_ESSID}" + [[ -n ${WIRELESS_FREQUENCY} ]] && iwconfig "${iface}" freq "${WIRELESS_FREQUENCY}" + [[ -n ${WIRELESS_MODE} ]] && iwconfig "${iface}" mode "${WIRELESS_MODE}" + [[ -n ${WIRELESS_NICK} ]] && iwconfig "${iface}" nick "${WIRELESS_NICK}" + if [[ -n ${WIRELESS_AUTH_MODE} ]] + then + case ${WIRELESS_AUTH_MODE} in + wpa) echo "Using wpa";; + wep,on) iwconfig "${iface}" enc on ;; + off) iwconfig "${iface}" enc off ;; + *) echo "Unkown Wireless_Auth_Mode '${WIRELESS_AUTH_MODE}'." ;; + esac + fi + [[ -n ${WIRELESS_KEY_LENGTH} ]] && iwconfig "${iface}" enc "${WIRELESS_KEY_LENGTH}" + [[ -n ${WIRELESS_KEY} ]] && iwconfig "${iface}" key "${WIRELESS_KEY}" + [[ -n ${WIRELESS_KEY_ASCII} ]] && iwconfig "${iface}" key s:"${WIRELESS_KEY_ASCII}" + fi + done +} + +networking_stop() +{ + # get list of all devices + for iface in $(onboot_interface_list ${network_settings}/net.*) + do + source ${network_settings}/net.${iface} || exit 1 + checkconfig + + if [[ -n ${GATEWAY} ]] then echo -e ${COLOREDSTAR}"Removing default gateway ..." route del -net default evaluate_retval fi - for file in $(grep -il "ONBOOT=\"yes\"" $network_settings/net.*) - do - interface=$(basename $file | sed s/net.//) - case "$interface" in - *~) ;; - *) - #$network_devices/ifdown $interface - source $network_settings/net.${interface} || exit 1 - checkconfig - echo -e ${COLOREDSTAR}"Bringing down interface ${COLBLUE}${interface}${COLDEFAULT} ..." - ifconfig eth0 down - evaluate_retval - - #shutdown dhcp-daemon - if [ $NETWORKING == dhcp ] - then - my_runlevel="`runlevel | cut -d ' ' -f2`" - if [ "$my_runlevel" -ne "0" -a "$my_runlevel" -ne "6" ] - then - echo -e ${COLOREDSTAR}"Stopping the dhcp-daemon ..." - $CURS_UP - $SET_WWCOL - echo "[${DHCP_PROG}]" - $DHCP_PROG $DHCP_STOP - evaluate_retval - fi - fi - ;; - esac - done + echo -e ${COLOREDSTAR}"Bringing down interface ${COLBLUE}${iface}${COLDEFAULT} ..." + ifconfig ${iface} down + evaluate_retval + # shutdown dhcp-daemon + if [[ ${NETWORKING} = dhcp ]] && [[ -n $(pidof ${DHCP_PROG}) ]] + then + echo -e ${COLOREDSTAR}"Stopping the dhcp-daemon ..." + ${CURS_UP} + ${SET_WWCOL} + echo "[$(basename ${DHCP_PROG})]" + ${DHCP_PROG} ${DHCP_STOP} + evaluate_retval + fi + done +} + +case $1 in + start) + networking_start + update_svcstatus $1 + splash svc_started "$(basename $0)" 0 + ;; + + stop) + networking_stop update_svcstatus $1 splash svc_stopped "$(basename $0)" 0 ;;