#!/bin/sh #---------------------------------------------------------------------------- # /etc/rc.d/ip-eth - ip configuration of ethernet cards # # Creation : 2001-02-04 fm # Last Update: $Id$ # # Copyright (c) 2001-@@YEAR@@ the eisfair team, team(at)eisfair(dot)org # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. #---------------------------------------------------------------------------- ### BEGIN INIT INFO # Provides: network # Required-Start: # Should-Start: # Required-Stop: # Should-Stop: # Default-Start: 3 5 # Default-Stop: 0 1 2 6 # Short-Description: network # Description: network ### END INIT INFO # # Important: # if settings change, please update /var/install/include/restore-ip-eth also # . /etc/config.d/base . /etc/init.d/functions if [ "${IP_ETH_DEBUG}" = "yes" ] then set -x fi # --------------------------------------------------------------------------- # get network device name # --------------------------------------------------------------------------- get_name() { eth_name=${1} net_devices=$(/usr/bin/find /sys/class/net/ -maxdepth 1 -type l -printf '%f\n') # if name = eth? if echo "${net_devices}" | /usr/bin/grep -q -Ew "${eth_name}" then name=${eth_name} eth_found=true fi # if name != eth? if ! ${eth_found:-false} then name=$(echo "${net_devices}" | /usr/bin/grep -Ew '(enp[1-9]?[0-9]s[1-9]?[0-9][fu]?[1-9]?[0-9]?u?[1-9]?[0-9]?)|(en[os][1-9]?[0-9])|(enx[[:alnum:]]{12})') fi } # --------------------------------------------------------------------------- # main # --------------------------------------------------------------------------- case $1 in start) boot_mesg ' * Configuring ip on ethernet cards ...' idx0=0 idx=1 while [ ${idx} -le ${IP_ETH_N:-0} ] do eval name='${IP_ETH_'${idx}'_NAME}' if [ -z "${name}" ] then get_name eth${idx0} fi eval ip_n='${IP_ETH_'${idx}'_IP_N}' if [ ${ip_n} -eq 0 ] then idx=$((${idx} + 1)) continue fi idy=1 while [ ${idy} -le ${ip_n:-0} ] do eval ipaddr='${IP_ETH_'${idx}'_IP_'${idy}'_IPADDR}' eval network='${IP_ETH_'${idx}'_IP_'${idy}'_NETWORK}' eval netmask='${IP_ETH_'${idx}'_IP_'${idy}'_NETMASK}' netmaskbits=$(/usr/bin/netcalc netmaskbits ${network}:${netmask}) # skip configuration if no ip name and ip address set if [ -n "${name}" -a -n "${ipaddr}" -a "${ipaddr}" != "0.0.0.0" ] then # if echo "${name}" | /usr/bin/grep -q ':' if [ ${idy} -ge 2 ] then # /usr/sbin/ip addr add ${ipaddr}/${netmaskbits} dev ${name%:*} label ${name} /usr/sbin/ip addr add ${ipaddr}/${netmaskbits} brd + dev ${name} /usr/sbin/ip link set ${name} up else /usr/sbin/ip -4 addr flush dev ${name} /usr/sbin/ip addr add ${ipaddr}/${netmaskbits} brd + dev ${name} /usr/sbin/ip link set ${name} up fi # wait for device state to become 'UP' (check value between angle brackets) jdx=10 while /usr/sbin/ip link show ${name} | /usr/bin/grep -i -q 'state DOWN' do if [ ${jdx} -lt 2 ] then echo " failed to start network interface '${name}'!" break else echo " waiting ${jdx} seconds for network interface '${name}' to be up." jdx=$((${jdx} - 2)) sleep 2 fi done fi idy=$((${idy} + 1)) done idx0=${idx} idx=$((${idx} + 1)) done evaluate_retval ;; stop) boot_mesg ' * Shutting down ip on ethernet cards ...' echo 'Network is going down now!' | /usr/bin/wall idx0=0 idx=1 while [ ${idx} -le ${IP_ETH_N:-0} ] do eval name='${IP_ETH_'${idx}'_NAME}' if [ -z "${name}" ] then get_name eth${idx0} fi /usr/sbin/ip link set ${name} down idx0=${idx} idx=$((${idx} + 1)) done evaluate_retval ;; esac set +x # --------------------------------------------------------------------------- # end # ---------------------------------------------------------------------------