diff options
Diffstat (limited to '')
-rw-r--r-- | source/n/network-scripts/scripts/rc.inet1 | 276 | ||||
-rw-r--r-- | source/n/network-scripts/scripts/rc.inet1.conf | 107 |
2 files changed, 383 insertions, 0 deletions
diff --git a/source/n/network-scripts/scripts/rc.inet1 b/source/n/network-scripts/scripts/rc.inet1 new file mode 100644 index 000000000..0080f7dac --- /dev/null +++ b/source/n/network-scripts/scripts/rc.inet1 @@ -0,0 +1,276 @@ +#! /bin/sh +# /etc/rc.d/rc.inet1 +# This script is used to bring up the various network interfaces. +# +# @(#)/etc/rc.d/rc.inet1 10.2 Sun Jul 24 12:45:56 PDT 2005 (pjv) + +############################ +# READ NETWORK CONFIG FILE # +############################ + +# Get the configuration information from /etc/rc.d/rc.inet1.conf: +. /etc/rc.d/rc.inet1.conf + +########### +# LOGGING # +########### + +# If possible, log events in /var/log/messages: +if [ -f /var/run/syslogd.pid -a -x /usr/bin/logger ]; then + LOGGER=/usr/bin/logger +else # output to stdout/stderr: + LOGGER=/bin/cat +fi + +############################ +# DETERMINE INTERFACE LIST # +############################ + +# Compose a list of interfaces from /etc/rc.d/rc.inet1.conf (with a maximum +# of 6 interfaces, but you can easily enlarge the interface limit +# - send me a picture of such a box :-). +# If a value for IFNAME[n] is not set, we assume it is an eth'n' interface. +# This way, the new script is compatible with older rc.inet1.conf files. +# The IFNAME array will be used to determine which interfaces to bring up/down. +MAXNICS=${MAXNICS:-6} +i=0 +while [ $i -lt $MAXNICS ]; +do + IFNAME[$i]=${IFNAME[$i]:=eth${i}} + i=$(($i+1)) +done +if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: List of interfaces: '${IFNAME[@]}'" | $LOGGER +fi + +###################### +# LOOPBACK FUNCTIONS # +###################### + +# Function to bring up the loopback interface. If loopback is +# already up, do nothing. +lo_up() { + if grep lo: /proc/net/dev 1> /dev/null ; then + if ! /sbin/ifconfig | grep "^lo" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo 127.0.0.1" | $LOGGER + /sbin/ifconfig lo 127.0.0.1 + echo "/etc/rc.d/rc.inet1: /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo" | $LOGGER + /sbin/route add -net 127.0.0.0 netmask 255.0.0.0 lo + fi + fi +} + +# Function to take down the loopback interface: +lo_down() { + if grep lo: /proc/net/dev 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig lo down" | $LOGGER + /sbin/ifconfig lo down + fi +} + +####################### +# INTERFACE FUNCTIONS # +####################### + +# Function to bring up a network interface. If the interface is +# already up or does not yet exist (perhaps because the kernel driver +# is not loaded yet), do nothing. +if_up() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + # If the interface isn't in the kernel yet (but there's an alias for it in + # modules.conf), then it should be loaded first: + if ! grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # no interface yet + if /sbin/modprobe -c | grep -v "^#" | grep -w "alias ${1}" | grep -vw "alias ${1} off" > /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/modprobe ${1}" | $LOGGER + /sbin/modprobe ${1} + fi + fi + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then # interface exists + if ! /sbin/ifconfig | grep -w "${1}" 1>/dev/null || \ + ! /sbin/ifconfig ${1} | grep "inet addr" 1> /dev/null ; then # interface not up or not configured + if [ ! "${HWADDR[$i]}" = "" ]; then # Set hardware address _before_ the interface goes up: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} hw ether ${HWADDR[$i]}" | $LOGGER + /sbin/ifconfig ${1} hw ether ${HWADDR[$i]} + fi + if [ ! "${MTU[$i]}" = "" ]; then # Set MTU to something else than 1500 + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} mtu ${MTU[$i]}" | $LOGGER + /sbin/ifconfig ${1} mtu ${MTU[$i]} + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} start # Initialize any wireless parameters + fi + if [ "${USE_DHCP[$i]}" = "yes" ]; then # use DHCP to bring interface up + [ ${DHCP_HOSTNAME[$i]} ] && DHCP_OPTIONS="-h ${DHCP_HOSTNAME[$i]}" + [ "${DHCP_KEEPRESOLV[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -R" + [ "${DHCP_KEEPNTP[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -N" + [ "${DHCP_KEEPGW[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -G" + [ "${DHCP_DEBUG[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -d" + [ "${DHCP_NOIPV4LL[$i]}" = "yes" ] && DHCP_OPTIONS="$DHCP_OPTIONS -L" + [ ${DHCP_IPADDR[$i]} ] && DHCP_OPTIONS="$DHCP_OPTIONS -s ${DHCP_IPADDR[$i]}" + echo "Polling for DHCP server on interface ${1}:" + # If you set a timeout, you get one, even if the kernel doesn't think that + # your device is connected, in case /sys isn't right (which it usually isn't + # except right after the device is loaded, when it usually is): + #### (start commented out) + # This is deactivated for now since the kernel has been returning incorrect + # results concerning whether the interface carrier is detected. + #if [ "${DHCP_TIMEOUT[$i]}" = "" ]; then + # ifconfig ${1} up && sleep 1 + # CONNSTATUS="$(cat /sys/class/net/${1}/carrier 2> /dev/null)" + # ifconfig ${1} down + # if [ "$CONNSTATUS" = "0" ]; then + # # The kernel has just told us the cable isn't even plugged in, but we will + # # give any DHCP server a short chance to reply anyway: + # echo "No carrier detected on ${1}. Reducing DHCP timeout to 10 seconds." + # DHCP_TIMEOUT[$i]=10 + # fi + #fi + #### (end commented out) + # 10 seconds should be a reasonable default DHCP timeout. 30 was too much. + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1}" | $LOGGER + /sbin/dhcpcd -t ${DHCP_TIMEOUT[$i]:-10} ${DHCP_OPTIONS} ${1} + else # bring up interface using a static IP address + if [ ! "${IPADDR[$i]}" = "" ]; then # skip unconfigured interfaces + # Determine broadcast address from the IP address and netmask: + BROADCAST[$i]=`/bin/ipmask ${NETMASK[$i]} ${IPADDR[$i]}|cut -f1 -d' '` + # Set up the network card: + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]}" | $LOGGER + /sbin/ifconfig ${1} ${IPADDR[$i]} broadcast ${BROADCAST[$i]} netmask ${NETMASK[$i]} + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface is not configured in /etc/rc.d/rc.inet1.conf" | $LOGGER + fi + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} is already up, skipping" | $LOGGER + fi + fi + else + if [ "$DEBUG_ETH_UP" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: ${1} interface does not exist (yet)" | $LOGGER + fi + fi +} + +# Function to take down a network interface: +if_down() { + # Determine position 'i' of this interface in the IFNAME array: + i=0 + while [ $i -lt $MAXNICS ]; do + [ "${IFNAME[$i]}" = "${1}" ] && break + i=$(($i+1)) + done + if grep `echo ${1}: | cut -f 1 -d :`: /proc/net/dev 1> /dev/null ; then + if [ "${USE_DHCP[$i]}" = "yes" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/dhcpcd -k -d ${1}" | $LOGGER + /sbin/dhcpcd -k -d ${1} 2> /dev/null || /sbin/ifconfig ${1} down + sleep 1 + else + echo "/etc/rc.d/rc.inet1: /sbin/ifconfig ${1} down" | $LOGGER + /sbin/ifconfig ${1} down + fi + if [ -x /etc/rc.d/rc.wireless ]; then + . /etc/rc.d/rc.wireless ${1} stop # Kill wireless daemons if any. + fi + fi +} + +##################### +# GATEWAY FUNCTIONS # +##################### + +# Function to bring up the gateway if there is not yet a default route: +gateway_up() { + if ! /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + if [ ! "$GATEWAY" = "" ]; then + echo "/etc/rc.d/rc.inet1: /sbin/route add default gw ${GATEWAY} metric 1" | $LOGGER + /sbin/route add default gw ${GATEWAY} metric 1 2>&1 | $LOGGER + fi + fi +} + +# Function to take down an existing default gateway: +gateway_down() { + if /sbin/route -n | grep "^0.0.0.0" 1> /dev/null ; then + echo "/etc/rc.d/rc.inet1: /sbin/route del default" | $LOGGER + /sbin/route del default + fi +} + +# Function to start the network: +start() { + lo_up + for i in ${IFNAME[@]} ; do + if_up $i + done + gateway_up +} + +# Function to stop the network: +stop() { + gateway_down + for i in ${IFNAME[@]} ; do + if_down $i + done + lo_down +} + + +############ +### MAIN ### +############ + +case "$1" in +'start') # "start" brings up all configured interfaces: + start + ;; +'stop') # "stop" takes down all configured interfaces: + stop + ;; +'restart') # "restart" restarts the network: + stop + start + ;; +*_start) # Example: "eth1_start" will start the specified interface 'eth1' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +*_stop) # Example: "eth0_stop" will stop the specified interface 'eth0' + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*_restart) # Example: "wlan0_restart" will take 'wlan0' down and up again + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + sleep 1 + if_up $INTERFACE + gateway_up + ;; +'up') # "up" does the same thing as "start" + start + ;; +'down') # "down" does the same thing as "stop" + stop + ;; +*_up) # "*_up" does the same thing as "*_start" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_up $INTERFACE + gateway_up + ;; +*_down) # "*_down" does the same thing as "*_stop" + INTERFACE=`echo $1 | /bin/cut -d '_' -f 1` + if_down $INTERFACE + ;; +*) # The default is to bring up all configured interfaces: + start +esac + +# End of /etc/rc.d/rc.inet1 diff --git a/source/n/network-scripts/scripts/rc.inet1.conf b/source/n/network-scripts/scripts/rc.inet1.conf new file mode 100644 index 000000000..555210c4b --- /dev/null +++ b/source/n/network-scripts/scripts/rc.inet1.conf @@ -0,0 +1,107 @@ +# /etc/rc.d/rc.inet1.conf +# +# This file contains the configuration settings for network interfaces. +# If USE_DHCP[interface] is set to "yes", this overrides any other settings. +# If you don't have an interface, leave the settings null (""). + +# You can configure network interfaces other than eth0,eth1... by setting +# IFNAME[interface] to the interface's name. If IFNAME[interface] is unset +# or empty, it is assumed you're configuring eth<interface>. + +# Several other parameters are available, the end of this file contains a +# comprehensive set of examples. + +# ============================================================================= + +# Config information for eth0: +IPADDR[0]="" +NETMASK[0]="" +USE_DHCP[0]="" +DHCP_HOSTNAME[0]="" + +# Config information for eth1: +IPADDR[1]="" +NETMASK[1]="" +USE_DHCP[1]="" +DHCP_HOSTNAME[1]="" + +# Config information for eth2: +IPADDR[2]="" +NETMASK[2]="" +USE_DHCP[2]="" +DHCP_HOSTNAME[2]="" + +# Config information for eth3: +IPADDR[3]="" +NETMASK[3]="" +USE_DHCP[3]="" +DHCP_HOSTNAME[3]="" + +# Default gateway IP address: +GATEWAY="" + +# Change this to "yes" for debugging output to stdout. Unfortunately, +# /sbin/hotplug seems to disable stdout so you'll only see debugging output +# when rc.inet1 is called directly. +DEBUG_ETH_UP="no" + +## Example config information for wlan0. Uncomment the lines you need and fill +## in your data. (You may not need all of these for your wireless network) +#IFNAME[4]="wlan0" +#IPADDR[4]="" +#NETMASK[4]="" +#USE_DHCP[4]="yes" +#DHCP_HOSTNAME[4]="icculus-wireless" +#DHCP_KEEPRESOLV[4]="yes" +#DHCP_KEEPNTP[4]="yes" +#DHCP_KEEPGW[4]="yes" +#DHCP_IPADDR[4]="" +#WLAN_ESSID[4]=DARKSTAR +#WLAN_MODE[4]=Managed +#WLAN_RATE[4]="54M auto" +#WLAN_CHANNEL[4]="auto" +#WLAN_KEY[4]="D5A31F54ACF0487C2D0B1C10D2" +#WLAN_IWPRIV[4]="set AuthMode=WPAPSK | set EncrypType=TKIP | set WPAPSK=96389dc66eaf7e6efd5b5523ae43c7925ff4df2f8b7099495192d44a774fda16" +#WLAN_WPA[4]="wpa_supplicant" +#WLAN_WPADRIVER[4]="wext" +#WLAN_WPAWAIT[4]=30 + +## Some examples of additional network parameters that you can use. +## Config information for wlan0: +#IFNAME[4]="wlan0" # Use a different interface name instead of + # the default 'eth4' +#IFNAME[4]="eth0:1" # Set up an IP alias. +#HWADDR[4]="00:01:23:45:67:89" # Overrule the card's hardware MAC address +#MTU[4]="" # The default MTU is 1500, but you might need + # 1360 when you use NAT'ed IPSec traffic. +#DHCP_TIMEOUT[4]=15 # The default timeout for the DHCP client to + # wait for server resonse is 10 seconds, but + # you might want a shorter or longer wait. +#DHCP_KEEPRESOLV[4]="yes" # If you dont want /etc/resolv.conf overwritten +#DHCP_KEEPNTP[4]="yes" # If you don't want ntp.conf overwritten +#DHCP_KEEPGW[4]="yes" # If you don't want the DHCP server to change + # your default gateway +#DHCP_IPADDR[4]="" # Request a specific IP address from the DHCP + # server +#DHCP_DEBUG[4]="yes" # Make dhcpcd show verbose diagnostics +#DHCP_NOIPV4LL[4]="yes" # Do not assign an ipv4ll address when a DHCP + # server is not found (ipv4ll link-local + # adresses in the IP range 169.254.0.0/16 are + # also known as "zeroconf" addresses) +#WLAN_ESSID[4]=DARKSTAR # An example of how you can override _any_ + # parameter defined in rc.wireless.conf, by + # prepending 'WLAN_' to the parameter's name. + # Useful with multiple wireless interfaces. +#WLAN_IWPRIV[4]="set AuthMode=WPAPSK | set EncrypType=TKIP | set WPAPSK=thekey" + # Some drivers require a private ioctl to be + # set through the iwpriv command. If more than + # one is required, you can place them in the + # IWPRIV parameter (separated with the pipe (|) + # character, see the example). +#WLAN_WPA[4]="wpa_supplicant" # Run wpa_supplicant for WPA support +#WLAN_WPADRIVER[4]="ndiswrapper"# Tell wpa_supplicant to specifically use the + # ndiswrapper driver (if you leave this empty + # the 'wext' driver is used by default) +#WLAN_WPAWAIT[4]=30 # In case it takes long for the WPA association + # to finish, you can increase the wait time + # (defaults to 10 seconds) |