freebsd-dev/etc/network.subr
Mike Makonnen 8b3695ab45 Break out and rewrite the network setup scripts.
o /etc/network.subr contains common subroutines used for seting
	  up network interfaces
	o rc.d/hostname sets the hostname if not already set
	o rc.d/nisdomain sets the nis domain *after* rpcbind but
	  before the yp* daemons. This fixes issues with temporary
	  hangs when looking up informaion in nis before it's ready.
	o rc.d/netif brings network interfaces (minus dhcp)  up.
	o rc.d/network1 has been disabled and will be retired before
	  RELENG_5. It will be replaced by rc.d/netif

Approved by:	markm (mentor)
2003-04-18 17:51:54 +00:00

215 lines
4.7 KiB
Plaintext

#
# Copyright (c) 2003 The FreeBSD Project. All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
# SUCH DAMAGE.
#
# $FreeBSD$
#
#
# Subroutines commonly used from network startup scripts.
# Requires that rc.conf be loaded first.
#
# ifconfig_up if
# Evaluate ifconfig(8) arguments for interface $if and
# run ifconfig(8) with those arguments. It returns 0 if
# arguments were found and executed or 1 if the interface
# had no arguments.
#
ifconfig_up()
{
eval ifconfig_args=\$ifconfig_$1
if [ -n "${ifconfig_args}" ]; then
ifconfig $1 ${ifconfig_args}
return 0
fi
return 1
}
# ifalias_up if
# Configure aliases for network interface $if.
# It returns 0 if at least one alias was configured or
# 1 if there were none.
#
ifalias_up()
{
_ret=1
alias=0
while : ; do
eval ifconfig_args=\$ifconfig_$1_alias${alias}
if [ -n "${ifconfig_args}" ]; then
ifconfig $1 ${ifconfig_args} alias
alias=$((${alias} + 1))
_ret=0
else
break
fi
done
return $_ret
}
# ifscript_up if
# Evaluate a startup script for the $if interface.
# It returns 0 if a script was found and processed or
# 1 if no script was found.
#
ifscript_up()
{
if [ -r /etc/start_if.$1 ]; then
. /etc/start_if.$1
return 0
fi
return 1
}
# Create cloneable interfaces.
#
clone_up()
{
_prefix=
_list=
for ifn in ${cloned_interfaces}; do
ifconfig ${ifn} create
if $? ; then
_list="${_list}${_prefix}${ifn}"
[ -z "$_prefix" ] && _prefix=' '
fi
done
debug "Cloned: ${_list}"
}
# Destroy cloned interfaces. Destroyed interfaces are echoed
# to standard output.
#
clone_down()
{
_prefix=
_list=
for ifn in ${cloned_interfaces}; do
ifconfig ${ifn} destroy
if $? ; then
_list="${_list}${_prefix}${ifn}"
[ -z "$_prefix" ] && _prefix=' '
fi
done
debug "Destroyed clones: ${_list}"
}
gif_up() {
case ${gif_interfaces} in
[Nn][Oo] | '')
;;
*)
for i in ${gif_interfaces}; do
eval peers=\$gifconfig_$i
case ${peers} in
'')
continue
;;
*)
ifconfig $i create >/dev/null 2>&1
ifconfig $i tunnel ${peers}
ifconfig $i up
;;
esac
done
;;
esac
}
#
# ipx_up ifn
# Configure any IPX addresses for interface $ifn. Returns 0 if IPX
# arguments were found and configured; returns 1 otherwise.
#
ipx_up()
{
ifn="$1"
eval ifconfig_args=\$ifconfig_${ifn}_ipx
if [ -n "${ifconfig_args}" ]; then
ifconfig ${ifn} ${ifconfig_args}
return 0
fi
return 1
}
#
# list_net_interfaces type
# List all network interfaces. The type of interface returned
# can be controlled by the type argument. The type
# argument can be any of the following:
# nodhcp - all interfaces, excluding DHCP configured interfaces
# dhcp - list only DHCP configured interfaces
# If no argument is specified all network interfaces are output.
# Note that the list always includes cloned interfaces.
#
list_net_interfaces()
{
type=$1
# Get a list of ALL the interfaces
#
case ${network_interfaces} in
[Aa][Uu][Tt][Oo])
_tmplist="`ifconfig -l`"
;;
*)
_tmplist="${network_interfaces}"
;;
esac
_tmplist="${_tmplist} ${cloned_interfaces}"
if [ -z "$type" ]; then
echo $_tmplist
return 0
fi
# Separate out dhcp and non-dhcp intefraces
#
_aprefix=
_brefix=
for _if in ${_tmplist} ; do
eval _ifarg="\$ifconfig_${_if}"
case "$_ifarg" in
[Dd][Hh][Cc][Pp])
_dhcplist="${_dhcplist}${_aprefix}${_if}"
[ -z "$_aprefix" ] && _aprefix=' '
;;
''|*)
_nodhcplist="${_nodhcplist}${_bprefix}${_if}"
[ -z "$_bprefix" ] && _bprefix=' '
;;
esac
done
case "$type" in
nodhcp)
echo $_nodhcplist
;;
dhcp)
echo $_dhcplist
;;
esac
return 0
}