# # 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 }