#!/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 #%stop: 80 #deps #%needs: #%before: #%after: source /etc/sysconfig/rc source ${rc_functions} # 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 static) if [ -z "${IP}" ] then echo "IP missing in net.${interface}, aborted" exit 1 fi 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}" ] then echo -n "BROADCAST missing in net.${interface}, " echo "using default address" fi ;; dhcp) if [ -z "${DHCP_PROG}" ] then echo "DHCP_PROG missing in net.${interface}, aborted" exit 1 fi ;; esac } # 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 *~) ;; *) devices="${devices} $(basename ${file} | sed s/net.//)" ;; esac fi done 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 for ${COLBLUE}${iface}${COLDEFAULT} ..." route add default gateway ${GATEWAY} metric 1 dev ${iface} evaluate_retval fi # 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 # 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 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 ;; restart) $0 stop sleep 1 $0 start ;; *) echo "Usage: $0 {start|stop|restart}" exit 1 ;; esac