svn commit: r339413 - in head: libexec libexec/rc libexec/rc/rc.d sbin/init sbin/init/rc.d

Nathan Whitehorn nwhitehorn at freebsd.org
Wed Oct 17 16:59:06 UTC 2018


Is there some high-level overview of the plan for pkgbase somewhere?
Which things will be in which packages, how the tools will work, etc.?
I'm still a little confused by how things are intended to work and it's
a bit hard to follow from commits with lots of small reorganizations.

Thanks,
Nathan

On 10/17/18 9:49 AM, Bjoern A. Zeeb wrote:
> Author: bz
> Date: Wed Oct 17 16:49:11 2018
> New Revision: 339413
> URL: https://svnweb.freebsd.org/changeset/base/339413
>
> Log:
>   Move the rc framework out of sbin/init into libexec/rc.
>   
>   The reasons for this are forward looking to pkgbase:
>    * /sbin/init is a special binary; try not to replace it with
>      every package update because an rc script was touched.
>      (a follow-up commit will make init its own package)
>    * having rc in its own place will allow more easy replacement
>      of the rc framework with alternatives, such as openrc.
>   
>   Discussed with:		brd (during BSDCam), kmoore
>   Requested by:		cem, bz
>   PR:			231522
>   Approved by:		re (gjb)
>
> Added:
>   head/libexec/rc/
>   head/libexec/rc/Makefile   (contents, props changed)
>   head/libexec/rc/netstart
>      - copied unchanged from r339412, head/sbin/init/netstart
>   head/libexec/rc/network.subr
>      - copied unchanged from r339412, head/sbin/init/network.subr
>   head/libexec/rc/pccard_ether
>      - copied unchanged from r339412, head/sbin/init/pccard_ether
>   head/libexec/rc/rc
>      - copied unchanged from r339412, head/sbin/init/rc
>   head/libexec/rc/rc.conf
>      - copied unchanged from r339412, head/sbin/init/rc.conf
>   head/libexec/rc/rc.d/
>      - copied from r339412, head/sbin/init/rc.d/
>   head/libexec/rc/rc.initdiskless
>      - copied unchanged from r339412, head/sbin/init/rc.initdiskless
>   head/libexec/rc/rc.resume
>      - copied unchanged from r339412, head/sbin/init/rc.resume
>   head/libexec/rc/rc.shutdown
>      - copied unchanged from r339412, head/sbin/init/rc.shutdown
>   head/libexec/rc/rc.subr
>      - copied unchanged from r339412, head/sbin/init/rc.subr
>   head/libexec/rc/rc.suspend
>      - copied unchanged from r339412, head/sbin/init/rc.suspend
> Deleted:
>   head/sbin/init/netstart
>   head/sbin/init/network.subr
>   head/sbin/init/pccard_ether
>   head/sbin/init/rc
>   head/sbin/init/rc.conf
>   head/sbin/init/rc.d/
>   head/sbin/init/rc.initdiskless
>   head/sbin/init/rc.resume
>   head/sbin/init/rc.shutdown
>   head/sbin/init/rc.subr
>   head/sbin/init/rc.suspend
> Modified:
>   head/libexec/Makefile
>   head/libexec/rc/rc.d/Makefile
>   head/sbin/init/Makefile
>
> Modified: head/libexec/Makefile
> ==============================================================================
> --- head/libexec/Makefile	Wed Oct 17 16:38:44 2018	(r339412)
> +++ head/libexec/Makefile	Wed Oct 17 16:49:11 2018	(r339413)
> @@ -13,6 +13,7 @@ SUBDIR=	${_atf} \
>  	${_makewhatis.local} \
>  	${_mknetid} \
>  	${_pppoed} \
> +	rc \
>  	revnetgroup \
>  	${_rlogind} \
>  	rpc.rquotad \
>
> Added: head/libexec/rc/Makefile
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/libexec/rc/Makefile	Wed Oct 17 16:49:11 2018	(r339413)
> @@ -0,0 +1,16 @@
> +# $FreeBSD$
> +
> +CONFGROUPS=	CONFETC CONFETCEXEC CONFETCDEFAULTS
> +CONFETCDIR=	/etc
> +CONFETC=	network.subr rc rc.initdiskless rc.subr rc.shutdown
> +CONFETCMODE=	644
> +CONFETCEXEC=	netstart pccard_ether rc.resume rc.suspend
> +CONFETCEXECDIR=	/etc
> +CONFETCEXECMODE=	755
> +CONFETCDEFAULTSDIR=	/etc/defaults
> +CONFETCDEFAULTS=	rc.conf
> +PACKAGE=rc
> +
> +SUBDIR+=	rc.d
> +
> +.include <bsd.prog.mk>
>
> Copied: head/libexec/rc/netstart (from r339412, head/sbin/init/netstart)
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/libexec/rc/netstart	Wed Oct 17 16:49:11 2018	(r339413, copy of r339412, head/sbin/init/netstart)
> @@ -0,0 +1,57 @@
> +#!/bin/sh -
> +#
> +# Copyright (c) 1993  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 AUTHOR 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 AUTHOR 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$
> +#	From: @(#)netstart	5.9 (Berkeley) 3/30/91
> +#
> +
> +# This file is NOT called by any of the other scripts - it has been
> +# obsoleted by /etc/rc.d/* and is provided here only for user
> +# convenience (if you're sitting in single user mode and wish to start
> +# the network by hand, this script will do it for you).
> +#
> +
> +_start=quietstart
> +
> +/etc/rc.d/devd ${_start}
> +/etc/rc.d/hostid ${_start}
> +/etc/rc.d/hostname ${_start}
> +/etc/rc.d/ipmon ${_start}
> +/etc/rc.d/ipfilter ${_start}
> +/etc/rc.d/ipnat ${_start}
> +/etc/rc.d/ipfs ${_start}
> +/etc/rc.d/sppp ${_start}
> +/etc/rc.d/netif ${_start}
> +/etc/rc.d/ipsec ${_start}
> +/etc/rc.d/ppp ${_start}
> +/etc/rc.d/ipfw ${_start}
> +/etc/rc.d/routing ${_start}
> +/etc/rc.d/route6d ${_start}
> +/etc/rc.d/routed ${_start}
> +/etc/rc.d/rtsold ${_start}
> +/etc/rc.d/nisdomain ${_start}
> +
> +exit 0
>
> Copied: head/libexec/rc/network.subr (from r339412, head/sbin/init/network.subr)
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is newly added)
> +++ head/libexec/rc/network.subr	Wed Oct 17 16:49:11 2018	(r339413, copy of r339412, head/sbin/init/network.subr)
> @@ -0,0 +1,1793 @@
> +#
> +# 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$
> +#
> +IFCONFIG_CMD="/sbin/ifconfig"
> +: ${netif_ipexpand_max:=2048}
> +
> +#
> +# Subroutines commonly used from network startup scripts.
> +# Requires that rc.conf be loaded first.
> +#
> +
> +# ifn_start ifn
> +#	Bring up and configure an interface.  If some configuration is
> +#	applied, print the interface configuration.
> +#
> +ifn_start()
> +{
> +	local ifn cfg
> +	ifn="$1"
> +	cfg=1
> +
> +	[ -z "$ifn" ] && err 1 "ifn_start called without an interface"
> +
> +	ifscript_up ${ifn} && cfg=0
> +	ifconfig_up ${ifn} && cfg=0
> +	if ! noafif $ifn; then
> +		afexists inet && ipv4_up ${ifn} && cfg=0
> +		afexists inet6 && ipv6_up ${ifn} && cfg=0
> +	fi
> +	childif_create ${ifn} && cfg=0
> +
> +	return $cfg
> +}
> +
> +# ifn_stop ifn
> +#	Shutdown and de-configure an interface.  If action is taken,
> +#	print the interface name.
> +#
> +ifn_stop()
> +{
> +	local ifn cfg
> +	ifn="$1"
> +	cfg=1
> +
> +	[ -z "$ifn" ] && err 1 "ifn_stop called without an interface"
> +
> +	if ! noafif $ifn; then
> +		afexists inet6 && ipv6_down ${ifn} && cfg=0
> +		afexists inet && ipv4_down ${ifn} && cfg=0
> +	fi
> +	ifconfig_down ${ifn} && cfg=0
> +	ifscript_down ${ifn} && cfg=0
> +	childif_destroy ${ifn} && cfg=0
> +
> +	return $cfg
> +}
> +
> +# ifn_vnetup ifn
> +#	Move ifn to the specified vnet jail.
> +#
> +ifn_vnetup()
> +{
> +
> +	ifn_vnet0 $1 vnet
> +}
> +
> +# ifn_vnetdown ifn
> +#	Reclaim ifn from the specified vnet jail.
> +#
> +ifn_vnetdown()
> +{
> +
> +	ifn_vnet0 $1 -vnet
> +}
> +
> +# ifn_vnet0 ifn action
> +#	Helper function for ifn_vnetup and ifn_vnetdown.
> +#
> +ifn_vnet0()
> +{
> +	local _ifn _cfg _action _vnet
> +	_ifn="$1"
> +	_action="$2"
> +	_cfg=1
> +
> +	if _vnet=$(vnetif $_ifn); then
> +		${IFCONFIG_CMD} $_ifn $_action $_vnet && _cfg=0
> +	fi
> +
> +	return $_cfg
> +}
> +
> +# 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.  Pseudo arguments DHCP and WPA are handled
> +#	here.
> +#
> +ifconfig_up()
> +{
> +	local _cfg _ifconfig_descr _ipv6_opts ifconfig_args 
> +	_cfg=1
> +
> +	# Make sure lo0 always comes up.
> +	if [ "$1" = "lo0" ]; then
> +		_cfg=0
> +	fi
> +
> +	# inet6 specific
> +	if ! noafif $1 && afexists inet6; then
> +		if checkyesno ipv6_activate_all_interfaces; then
> +			_ipv6_opts="-ifdisabled"
> +		elif [ "$1" != "lo0" ]; then
> +			_ipv6_opts="ifdisabled"
> +		fi
> +
> +		# backward compatibility: $ipv6_enable
> +		case $ipv6_enable in
> +		[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
> +			case $1 in
> +			bridge[0-9]*)
> +				# No accept_rtadv by default on if_bridge(4)
> +				# to avoid a conflict with the member
> +				# interfaces.
> +			;;
> +			*)
> +				if ! checkyesno ipv6_gateway_enable; then
> +					_ipv6_opts="${_ipv6_opts} accept_rtadv"
> +				fi
> +			;;
> +			esac
> +		;;
> +		esac
> +
> +		case $ipv6_cpe_wanif in
> +		$1)
> +			_ipv6_opts="${_ipv6_opts} -no_radr accept_rtadv"
> +		;;
> +		esac
> +
> +		if [ -n "${_ipv6_opts}" ]; then
> +			${IFCONFIG_CMD} $1 inet6 ${_ipv6_opts}
> +		fi
> +	fi
> +
> +	# ifconfig_IF
> +	ifconfig_args=`ifconfig_getargs $1`
> +	if [ -n "${ifconfig_args}" ]; then
> +		eval ${IFCONFIG_CMD} $1 ${ifconfig_args}
> +		_cfg=0
> +	fi
> +
> +	# inet6 specific
> +	if ! noafif $1 && afexists inet6; then
> +		# ifconfig_IF_ipv6
> +		ifconfig_args=`ifconfig_getargs $1 ipv6`
> +		if [ -n "${ifconfig_args}" ]; then
> +			# backward compatibility: inet6 keyword
> +			case "${ifconfig_args}" in
> +			:*|[0-9a-fA-F]*:*)
> +				warn "\$ifconfig_$1_ipv6 needs leading" \
> +				    "\"inet6\" keyword for an IPv6 address."
> +				ifconfig_args="inet6 ${ifconfig_args}"
> +			;;
> +			esac
> +			${IFCONFIG_CMD} $1 inet6 -ifdisabled
> +			eval ${IFCONFIG_CMD} $1 ${ifconfig_args}
> +			_cfg=0
> +		fi
> +
> +		# $ipv6_prefix_IF will be handled in
> +		# ipv6_prefix_hostid_addr_common().
> +		ifconfig_args=`get_if_var $1 ipv6_prefix_IF`
> +		if [ -n "${ifconfig_args}" ]; then
> +			${IFCONFIG_CMD} $1 inet6 -ifdisabled
> +			_cfg=0
> +		fi
> +
> +		# backward compatibility: $ipv6_ifconfig_IF
> +		ifconfig_args=`get_if_var $1 ipv6_ifconfig_IF`
> +		if [ -n "${ifconfig_args}" ]; then
> +			warn "\$ipv6_ifconfig_$1 is obsolete." \
> +			    "  Use ifconfig_$1_ipv6 instead."
> +			${IFCONFIG_CMD} $1 inet6 -ifdisabled
> +			eval ${IFCONFIG_CMD} $1 inet6 ${ifconfig_args}
> +			_cfg=0
> +		fi
> +	fi
> +
> +	ifalias $1 link alias
> +	ifalias $1 ether alias
> +
> +	_ifconfig_descr=`get_if_var $1 ifconfig_IF_descr`
> +	if [ -n "${_ifconfig_descr}" ]; then
> +		${IFCONFIG_CMD} $1 description "${_ifconfig_descr}"
> +	fi
> +
> +	if wpaif $1; then
> +		/etc/rc.d/wpa_supplicant start $1
> +		_cfg=0		# XXX: not sure this should count
> +	elif hostapif $1; then
> +		/etc/rc.d/hostapd start $1
> +		_cfg=0
> +	elif [ ${_cfg} -eq 0 ]; then
> +		${IFCONFIG_CMD} $1 up
> +	fi
> +
> +	if dhcpif $1; then
> +		if [ $_cfg -ne 0 ] ; then
> +			${IFCONFIG_CMD} $1 up
> +		fi
> +		if syncdhcpif $1; then
> +			/etc/rc.d/dhclient start $1
> +		fi
> +		_cfg=0
> +	fi
> +
> +	return $_cfg
> +}
> +
> +# ifconfig_down if
> +#	returns 1 if wpa_supplicant or dhclient was stopped or
> +#	the interface exists.
> +#
> +ifconfig_down()
> +{
> +	local _cfg
> +	_cfg=1
> +
> +	if wpaif $1; then
> +		/etc/rc.d/wpa_supplicant stop $1
> +		_cfg=0
> +	elif hostapif $1; then
> +		/etc/rc.d/hostapd stop $1
> +		_cfg=0
> +	fi
> +
> +	if dhcpif $1; then
> +		/etc/rc.d/dhclient stop $1
> +		_cfg=0
> +	fi
> +
> +	if ifexists $1; then
> +		${IFCONFIG_CMD} $1 down
> +		_cfg=0
> +	fi
> +
> +	return $_cfg
> +}
> +
> +# get_if_var if var [default]
> +#	Return the value of the pseudo-hash corresponding to $if where
> +#	$var is a string containg the sub-string "IF" which will be
> +#	replaced with $if after the characters defined in _punct are
> +#	replaced with '_'. If the variable is unset, replace it with
> +#	$default if given.
> +get_if_var()
> +{
> +	local _if _punct _punct_c _var _default prefix suffix
> +
> +	if [ $# -ne 2 -a $# -ne 3 ]; then
> +		err 3 'USAGE: get_if_var name var [default]'
> +	fi
> +
> +	_if=$1
> +	_punct=".-/+"
> +	ltr ${_if} "${_punct}" '_' _if
> +	_var=$2
> +	_default=$3
> +
> +	prefix=${_var%%IF*}
> +	suffix=${_var##*IF}
> +	eval echo \${${prefix}${_if}${suffix}-${_default}}
> +}
> +
> +# _ifconfig_getargs if [af]
> +#	Prints the arguments for the supplied interface to stdout.
> +#	Returns 1 if empty.  In general, ifconfig_getargs should be used
> +#	outside this file.
> +_ifconfig_getargs()
> +{
> +	local _ifn _af
> +	_ifn=$1
> +	_af=${2+_$2}
> +
> +	if [ -z "$_ifn" ]; then
> +		return 1
> +	fi
> +
> +	get_if_var $_ifn ifconfig_IF$_af "$ifconfig_DEFAULT"
> +}
> +
> +# ifconfig_getargs if [af]
> +#	Takes the result from _ifconfig_getargs and removes pseudo
> +#	args such as DHCP and WPA.
> +ifconfig_getargs()
> +{
> +	local _tmpargs _arg _args _vnet
> +	_tmpargs=`_ifconfig_getargs $1 $2`
> +	if [ $? -eq 1 ]; then
> +		return 1
> +	fi
> +	_args=
> +	_vnet=0
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg:$_vnet in
> +		[Dd][Hh][Cc][Pp]:0) ;;
> +		[Nn][Oo][Aa][Uu][Tt][Oo]:0) ;;
> +		[Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]:0) ;;
> +		[Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp]:0) ;;
> +		[Ww][Pp][Aa]:0) ;;
> +		[Hh][Oo][Ss][Tt][Aa][Pp]:0) ;;
> +		vnet:0)	_vnet=1 ;;
> +		*:1)	_vnet=0 ;;
> +		*:0)
> +			_args="$_args $_arg"
> +		;;
> +		esac
> +	done
> +
> +	echo $_args
> +}
> +
> +# autoif
> +#	Returns 0 if the interface should be automatically configured at
> +#	boot time and 1 otherwise.
> +autoif()
> +{
> +	local _tmpargs _arg
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		[Nn][Oo][Aa][Uu][Tt][Oo])
> +			return 1
> +			;;
> +		esac
> +	done
> +
> +	return 0
> +}
> +
> +# dhcpif if
> +#	Returns 0 if the interface is a DHCP interface and 1 otherwise.
> +dhcpif()
> +{
> +	local _tmpargs _arg
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	case $1 in
> +	lo[0-9]*|\
> +	stf[0-9]*|\
> +	lp[0-9]*|\
> +	sl[0-9]*)
> +		return 1
> +		;;
> +	esac
> +	if noafif $1; then
> +		return 1
> +	fi
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		[Dd][Hh][Cc][Pp])
> +			return 0
> +			;;
> +		[Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp])
> +			return 0
> +			;;
> +		[Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp])
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	return 1
> +}
> +
> +# syncdhcpif
> +#	Returns 0 if the interface should be configured synchronously and
> +#	1 otherwise.
> +syncdhcpif()
> +{
> +	local _tmpargs _arg
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	if noafif $1; then
> +		return 1
> +	fi
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		[Nn][Oo][Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp])
> +			return 1
> +			;;
> +		[Ss][Yy][Nn][Cc][Dd][Hh][Cc][Pp])
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	checkyesno synchronous_dhclient
> +}
> +
> +# wpaif if
> +#	Returns 0 if the interface is a WPA interface and 1 otherwise.
> +wpaif()
> +{
> +	local _tmpargs _arg
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		[Ww][Pp][Aa])
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	return 1
> +}
> +
> +# hostapif if
> +#	Returns 0 if the interface is a HOSTAP interface and 1 otherwise.
> +hostapif()
> +{
> +	local _tmpargs _arg
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		[Hh][Oo][Ss][Tt][Aa][Pp])
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	return 1
> +}
> +
> +# vnetif if
> +#	Returns 0 and echo jail if "vnet" keyword is specified on the
> +#	interface, and 1 otherwise.
> +vnetif()
> +{
> +	local _tmpargs _arg _vnet
> +	_tmpargs=`_ifconfig_getargs $1`
> +
> +	_vnet=0
> +	for _arg in $_tmpargs; do
> +		case $_arg:$_vnet in
> +		vnet:0)	_vnet=1 ;;
> +		*:1)	echo $_arg; return 0 ;;
> +		esac
> +	done
> +
> +	return 1
> +}
> +
> +# afexists af
> +#	Returns 0 if the address family is enabled in the kernel
> +#	1 otherwise.
> +afexists()
> +{
> +	local _af
> +	_af=$1
> +
> +	case ${_af} in
> +	inet|inet6)
> +		check_kern_features ${_af}
> +		;;
> +	link|ether)
> +		return 0
> +		;;
> +	*)
> +		err 1 "afexists(): Unsupported address family: $_af"
> +		;;
> +	esac
> +}
> +
> +# noafif if
> +#	Returns 0 if the interface has no af configuration and 1 otherwise.
> +noafif()
> +{
> +	local _if
> +	_if=$1
> +
> +	case $_if in
> +	pflog[0-9]*|\
> +	pfsync[0-9]*|\
> +	usbus[0-9]*|\
> +	an[0-9]*|\
> +	ath[0-9]*|\
> +	ipw[0-9]*|\
> +	ipfw[0-9]*|\
> +	iwi[0-9]*|\
> +	iwn[0-9]*|\
> +	ral[0-9]*|\
> +	wi[0-9]*|\
> +	wl[0-9]*|\
> +	wpi[0-9]*)
> +		return 0
> +		;;
> +	esac
> +
> +	return 1
> +}
> +
> +# ipv6if if
> +#	Returns 0 if the interface should be configured for IPv6 and
> +#	1 otherwise.
> +ipv6if()
> +{
> +	local _if _tmpargs i
> +	_if=$1
> +
> +	if ! afexists inet6; then
> +		return 1
> +	fi
> +
> +	# lo0 is always IPv6-enabled
> +	case $_if in
> +	lo0)
> +		return 0
> +		;;
> +	esac
> +
> +	case "${ipv6_network_interfaces}" in
> +	$_if|"$_if "*|*" $_if"|*" $_if "*|[Aa][Uu][Tt][Oo])
> +		# True if $ifconfig_IF_ipv6 is defined.
> +		_tmpargs=`_ifconfig_getargs $_if ipv6`
> +		if [ -n "${_tmpargs}" ]; then
> +			return 0
> +		fi
> +
> +		# True if $ipv6_prefix_IF is defined.
> +		_tmpargs=`get_if_var $_if ipv6_prefix_IF`
> +		if [ -n "${_tmpargs}" ]; then
> +			return 0
> +		fi
> +
> +		# backward compatibility: True if $ipv6_ifconfig_IF is defined.
> +		_tmpargs=`get_if_var $_if ipv6_ifconfig_IF`
> +		if [ -n "${_tmpargs}" ]; then
> +			return 0
> +		fi
> +		;;
> +	esac
> +
> +	return 1
> +}
> +
> +# ipv6_autoconfif if
> +#	Returns 0 if the interface should be configured for IPv6 with
> +#	Stateless Address Configuration; 1 otherwise.
> +ipv6_autoconfif()
> +{
> +	local _if _tmpargs _arg
> +	_if=$1
> +
> +	case $_if in
> +	lo[0-9]*|\
> +	stf[0-9]*|\
> +	lp[0-9]*|\
> +	sl[0-9]*)
> +		return 1
> +		;;
> +	esac
> +	if noafif $_if; then
> +		return 1
> +	fi
> +	if ! ipv6if $_if; then
> +		return 1
> +	fi
> +	if checkyesno ipv6_gateway_enable; then
> +		return 1
> +	fi
> +	_tmpargs=`get_if_var $_if ipv6_prefix_IF`
> +	if [ -n "${_tmpargs}" ]; then
> +		return 1
> +	fi
> +	# backward compatibility: $ipv6_enable
> +	case $ipv6_enable in
> +	[Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1)
> +		if checkyesno ipv6_gateway_enable; then
> +			return 1
> +		fi
> +		case $1 in
> +		bridge[0-9]*)
> +			# No accept_rtadv by default on if_bridge(4)
> +			# to avoid a conflict with the member
> +			# interfaces.
> +			return 1
> +		;;
> +		*)
> +			return 0
> +		;;
> +		esac
> +	;;
> +	esac
> +
> +	_tmpargs=`_ifconfig_getargs $_if ipv6`
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		accept_rtadv)
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	# backward compatibility: $ipv6_ifconfig_IF
> +	_tmpargs=`get_if_var $_if ipv6_ifconfig_IF`
> +	for _arg in $_tmpargs; do
> +		case $_arg in
> +		accept_rtadv)
> +			return 0
> +			;;
> +		esac
> +	done
> +
> +	return 1
> +}
> +
> +# ifexists if
> +#	Returns 0 if the interface exists and 1 otherwise.
> +ifexists()
> +{
> +	[ -z "$1" ] && return 1
> +	${IFCONFIG_CMD} -n $1 > /dev/null 2>&1
> +}
> +
> +# ipv4_up if
> +#	add IPv4 addresses to the interface $if
> +ipv4_up()
> +{
> +	local _if _ret
> +	_if=$1
> +	_ret=1
> +
> +	# Add 127.0.0.1/8 to lo0 unless otherwise specified.
> +	if [ "${_if}" = "lo0" ]; then
> +		ifconfig_args=`get_if_var ${_if} ifconfig_IF`
> +		if [ -z "${ifconfig_args}" ]; then
> +			${IFCONFIG_CMD} ${_if} inet 127.0.0.1/8 alias
> +		fi
> +	fi
> +	ifalias ${_if} inet alias && _ret=0
> +
> +	return $_ret
> +}
> +
> +# ipv6_up if
> +#	add IPv6 addresses to the interface $if
> +ipv6_up()
> +{
> +	local _if _ret
> +	_if=$1
> +	_ret=1
> +
> +	if ! ipv6if $_if; then
> +		return 0
> +	fi
> +
> +	ifalias ${_if} inet6 alias && _ret=0
> +	ipv6_prefix_hostid_addr_common ${_if} alias && _ret=0
> +	ipv6_accept_rtadv_up ${_if} && _ret=0
> +
> +	return $_ret
> +}
> +
> +# ipv4_down if
> +#	remove IPv4 addresses from the interface $if
> +ipv4_down()
> +{
> +	local _if _ifs _ret inetList oldifs _inet
> +	_if=$1
> +	_ifs="^"
> +	_ret=1
> +
> +	ifalias ${_if} inet -alias && _ret=0
> +
> +	inetList="`${IFCONFIG_CMD} ${_if} | grep 'inet ' | tr "\n\t" "$_ifs"`"
> +
> +	oldifs="$IFS"
> +	IFS="$_ifs"
> +	for _inet in $inetList ; do
> +		# get rid of extraneous line
> +		case $_inet in
> +		inet\ *)	;;
> +		*)		continue ;;
> +		esac
> +
> +		_inet=`expr "$_inet" : '.*\(inet \([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}\).*'`
> +
> +		IFS="$oldifs"
> +		${IFCONFIG_CMD} ${_if} ${_inet} delete
> +		IFS="$_ifs"
> +		_ret=0
> +	done
> +	IFS="$oldifs"
> +
> +	return $_ret
> +}
> +
> +# ipv6_down if
> +#	remove IPv6 addresses from the interface $if
> +ipv6_down()
> +{
> +	local _if _ifs _ret inetList oldifs _inet6
> +	_if=$1
> +	_ifs="^"
> +	_ret=1
> +
> +	if ! ipv6if $_if; then
> +		return 0
> +	fi
> +
> +	ipv6_accept_rtadv_down ${_if} && _ret=0
> +	ipv6_prefix_hostid_addr_common ${_if} -alias && _ret=0
> +	ifalias ${_if} inet6 -alias && _ret=0
> +
> +	inetList="`${IFCONFIG_CMD} ${_if} | grep 'inet6 ' | tr "\n\t" "$_ifs"`"
> +
> +	oldifs="$IFS"
> +	IFS="$_ifs"
> +	for _inet6 in $inetList ; do
> +		# get rid of extraneous line
> +		case $_inet6 in
> +		inet6\ *)	;;
> +		*)		continue ;;
> +		esac
> +
> +		_inet6=`expr "$_inet6" : '.*\(inet6 \([0-9a-f:]*\)\).*'`
> +
> +		IFS="$oldifs"
> +		${IFCONFIG_CMD} ${_if} ${_inet6} -alias
> +		IFS="$_ifs"
> +		_ret=0
> +	done
> +	IFS="$oldifs"
> +
> +	return $_ret
> +}
> +
> +# ifalias if af action
> +#	Configure or remove aliases for network interface $if.
> +#	It returns 0 if at least one alias was configured or
> +#	removed, or 1 if there were none.
> +#
> +ifalias()
> +{
> +	local _ret
> +	_ret=1
> +
> +	afexists $2 || return $_ret
> +
> +	case "$2" in
> +	inet|inet6|link|ether)
> +		ifalias_af_common $1 $2 $3 && _ret=0
> +		;;
> +	esac
> +
> +	return $_ret
> +}
> +
> +# ifalias_expand_addr af action addr
> +#	Expand address range ("N-M") specification in addr.
> +#	"addr" must not include an address-family keyword.
> +#	The results will include an address-family keyword.
> +#
> +ifalias_expand_addr()
> +{
> +	local _af _action
> +
> +	_af=$1
> +	_action=$2
> +	shift 2
> +
> +	afexists $_af || return
> +	ifalias_expand_addr_$_af $_action $*
> +}
> +
> +# ifalias_expand_addr_inet action addr
> +#	Helper function for ifalias_expand_addr().  Handles IPv4.
> +#
> +ifalias_expand_addr_inet()
> +{
> +	local _action _arg _cidr _cidr_addr _exargs
> +	local _ipaddr _plen _range _iphead _iptail _iplow _iphigh _ipcount
> +	local _retstr _c
> +	_action=$1
> +	_arg=$2
> +	shift 2
> +	_exargs=$*
> +	_retstr=
> +
> +	case $_action:$_arg:$_exargs in
> +	*:*--*)		return ;;	# invalid
> +	tmp:*[0-9]-[0-9]*:*)		# to be expanded
> +		_action="alias"
> +	;;
> +	*:*[0-9]-[0-9]*:*)		# to be expanded
> +	;;
> +	tmp:*:*netmask*)		# already expanded w/ netmask option
> +		echo ${_arg%/[0-9]*} $_exargs && return
> +	;;
> +	tmp:*:*)			# already expanded w/o netmask option
> +		echo $_arg $_exargs && return
> +	;;
> +	*:*:*netmask*)			# already expanded w/ netmask option
> +		echo inet ${_arg%/[0-9]*} $_exargs && return
> +	;;
> +	*:*:*)				# already expanded w/o netmask option
> +		echo inet $_arg $_exargs && return
> +	;;
> +	esac
> +
> +	for _cidr in $_arg; do
> +		_ipaddr=${_cidr%%/*}
> +		_plen=${_cidr##*/}
> +		# When subnet prefix length is not specified, use /32.
> +		case $_plen in
> +		$_ipaddr)	_plen=32 ;;	# "/" character not found
> +		esac
> +
> +		OIFS=$IFS
> +		IFS=. set -- $_ipaddr
> +		_range=
> +		_iphead=
> +		_iptail=
> +		for _c in $@; do
> +			case $_range:$_c in
> +			:[0-9]*-[0-9]*)
> +				_range=$_c
> +			;;
> +			:*)
> +				_iphead="${_iphead}${_iphead:+.}${_c}"
> +			;;
> +			*:*)
> +				_iptail="${_iptail}${_iptail:+.}${_c}"
> +			;;
> +			esac
> +		done
> +		IFS=$OIFS
> +		_iplow=${_range%-*}
> +		_iphigh=${_range#*-}
> +
> +		# clear netmask when removing aliases
> +		if [ "$_action" = "-alias" ]; then
> +			_plen=""
> +		fi
> +
> +		_ipcount=$_iplow
> +		while [ "$_ipcount" -le "$_iphigh" ]; do
> +			_retstr="${_retstr} ${_iphead}${_iphead:+.}${_ipcount}${_iptail:+.}${_iptail}${_plen:+/}${_plen}"
> +			if [ $_ipcount -gt $(($_iplow + $netif_ipexpand_max)) ]; then
> +				warn "Range specification is too large (${_iphead}${_iphead:+.}${_iplow}${_iptail:+.}${_iptail}-${_iphead}${_iphead:+.}${_iphigh}${_iptail:+.}${_iptail}).  ${_iphead}${_iphead:+.}${_iplow}${_iptail:+.}${_iptail}-${_iphead}${_iphead:+.}${_ipcount}${_iptail:+.}${_iptail} was processed.  Increase \$netif_ipexpand_max in rc.conf."
> +				break
> +			else
> +				_ipcount=$(($_ipcount + 1))
> +			fi
> +			# Forcibly set /32 for remaining aliases.
> +			_plen=32
> +		done
> +	done
> +
> +	for _c in $_retstr; do
> +		ifalias_expand_addr_inet $_action $_c $_exargs
> +	done
> +}
> +
> +# ifalias_expand_addr_inet6 action addr
> +#	Helper function for ifalias_expand_addr().  Handles IPv6.
> +#
> +ifalias_expand_addr_inet6()
> +{
> +	local _action _arg _cidr _cidr_addr _exargs
> +	local _ipaddr _plen _ipleft _ipright _iplow _iphigh _ipcount
> +	local _ipv4part
> +	local _retstr _c
> +	_action=$1
> +	_arg=$2
> +	shift 2
>
> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
>



More information about the svn-src-head mailing list