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