8b3695ab45
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)
215 lines
4.7 KiB
Plaintext
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
|
|
}
|