Index: head/etc/rc.resume =================================================================== --- head/etc/rc.resume (revision 336846) +++ head/etc/rc.resume (nonexistent) @@ -1,58 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 1999 Mitsuru IWASAKI -# 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$ -# - -# sample run command file for APM Resume Event - -if [ $# -ne 2 ]; then - echo "Usage: $0 [apm|acpi] [standby,suspend|1-4]" - exit 1 -fi - -subsystem=$1 -state=$2 - -if [ -r /var/run/rc.suspend.pid ]; then - kill -9 `cat /var/run/rc.suspend.pid` - /bin/rm -f /var/run/rc.suspend.pid - echo 'rc.resume: killed rc.suspend that was still around' -fi - -# Turns on a power supply of a card in the slot inactivated. -# See also contrib/pccardq.c (only for PAO users). -# pccardq | awk -F '~' '$5 == "inactive" \ -# { printf("pccardc power %d 1", $1); }' | sh - -# If a device driver has problems resuming, try unloading it before -# suspend and reloading it on resume. Example: -# kldload usb - -/usr/bin/logger -t $subsystem resumed at `/bin/date +'%Y%m%d %H:%M:%S'` -/bin/sync && /bin/sync && /bin/sync - -exit 0 Property changes on: head/etc/rc.resume ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/rc =================================================================== --- head/etc/rc (revision 336846) +++ head/etc/rc (nonexistent) @@ -1,152 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2000-2004 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. -# -# @(#)rc 5.27 (Berkeley) 6/5/91 -# $FreeBSD$ -# - -# System startup script run by init on autoboot -# or after single-user. -# Output and error are redirected to console by init, -# and the console is the controlling terminal. - -# Note that almost all of the user-configurable behavior is no longer in -# this file, but rather in /etc/defaults/rc.conf. Please check that file -# first before contemplating any changes here. If you do need to change -# this file for some reason, we would like to know about it. - -stty status '^T' 2> /dev/null - -# Set shell to ignore SIGINT (2), but not children; -# shell catches SIGQUIT (3) and returns to single user. -# -trap : 2 -trap "echo 'Boot interrupted'; exit 1" 3 - -HOME=/ -PATH=/sbin:/bin:/usr/sbin:/usr/bin -export HOME PATH - -if [ "$1" = autoboot ]; then - autoboot=yes - _boot="faststart" - rc_fast=yes # run_rc_command(): do fast booting -else - autoboot=no - _boot="quietstart" -fi - -dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` -if [ ${dlv:=0} -ne 0 -o -f /etc/diskless ]; then - sh /etc/rc.initdiskless -fi - -# Run these after determining whether we are booting diskless in order -# to minimize the number of files that are needed on a diskless system, -# and to make the configuration file variables available to rc itself. -# -. /etc/rc.subr -load_rc_config - -# If we receive a SIGALRM, re-source /etc/rc.conf; this allows rc.d -# scripts to perform "boot-time configuration" including enabling and -# disabling rc.d scripts which appear later in the boot order. -trap "_rc_conf_loaded=false; load_rc_config" ALRM - -skip="-s nostart" -if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then - skip="$skip -s nojail" - if [ `/sbin/sysctl -n security.jail.vnet` -ne 1 ]; then - skip="$skip -s nojailvnet" - fi -fi - -# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts. -if ! [ -e ${firstboot_sentinel} ]; then - skip_firstboot="-s firstboot" -fi - -# Do a first pass to get everything up to $early_late_divider so that -# we can do a second pass that includes $local_startup directories -# -files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` - -_rc_elem_done=' ' -for _rc_elem in ${files}; do - run_rc_script ${_rc_elem} ${_boot} - _rc_elem_done="${_rc_elem_done}${_rc_elem} " - - case "$_rc_elem" in - */${early_late_divider}) break ;; - esac -done - -unset files local_rc - -# Now that disks are mounted, for each dir in $local_startup -# search for init scripts that use the new rc.d semantics. -# -case ${local_startup} in -[Nn][Oo] | '') ;; -*) find_local_scripts_new ;; -esac - -# The firstboot sentinel might be on a newly mounted filesystem; look for it -# again and unset skip_firstboot if we find it. -if [ -e ${firstboot_sentinel} ]; then - skip_firstboot="" -fi - -files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` -for _rc_elem in ${files}; do - case "$_rc_elem_done" in - *" $_rc_elem "*) continue ;; - esac - - run_rc_script ${_rc_elem} ${_boot} -done - -# Remove the firstboot sentinel, and reboot if it was requested. -# Be a bit paranoid about removing it to handle the common failure -# modes since the consequence of failure can be big. -# Note: this assumes firstboot_sentinel is on / when we have -# a read-only /, or that it is on media that's writable. -if [ -e ${firstboot_sentinel} ]; then - checkyesno root_rw_mount && mount -uw / - chflags -R 0 ${firstboot_sentinel} - rm -rf ${firstboot_sentinel} - if [ -e ${firstboot_sentinel}-reboot ]; then - chflags -R 0 ${firstboot_sentinel}-reboot - rm -rf ${firstboot_sentinel}-reboot - checkyesno root_rw_mount || mount -ur / - kill -INT 1 - fi - checkyesno root_rw_mount || mount -ur / -fi - -echo '' -date -exit 0 Property changes on: head/etc/rc ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/rc.subr =================================================================== --- head/etc/rc.subr (revision 336846) +++ head/etc/rc.subr (nonexistent) @@ -1,2139 +0,0 @@ -# $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $ -# $FreeBSD$ -# -# Copyright (c) 1997-2004 The NetBSD Foundation, Inc. -# All rights reserved. -# -# This code is derived from software contributed to The NetBSD Foundation -# by Luke Mewburn. -# -# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. -# -# rc.subr -# functions used by various rc scripts -# - -: ${RC_PID:=$$}; export RC_PID - -# -# Operating System dependent/independent variables -# - -if [ -n "${_rc_subr_loaded}" ]; then - return -fi - -_rc_subr_loaded="YES" - -SYSCTL="/sbin/sysctl" -SYSCTL_N="${SYSCTL} -n" -SYSCTL_W="${SYSCTL}" -PROTECT="/usr/bin/protect" -ID="/usr/bin/id" -IDCMD="if [ -x $ID ]; then $ID -un; fi" -PS="/bin/ps -ww" -JID=0 - -# -# functions -# --------- - -# list_vars pattern -# List vars matching pattern. -# -list_vars() -{ - set | { while read LINE; do - var="${LINE%%=*}" - case "$var" in - "$LINE"|*[!a-zA-Z0-9_]*) continue ;; - $1) echo $var - esac - done; } -} - -# set_rcvar [var] [defval] [desc] -# -# Echo or define a rc.conf(5) variable name. Global variable -# $rcvars is used. -# -# If no argument is specified, echo "${name}_enable". -# -# If only a var is specified, echo "${var}_enable". -# -# If var and defval are specified, the ${var} is defined as -# rc.conf(5) variable and the default value is ${defvar}. An -# optional argument $desc can also be specified to add a -# description for that. -# -set_rcvar() -{ - local _var - - case $# in - 0) echo ${name}_enable ;; - 1) echo ${1}_enable ;; - *) - debug "set_rcvar: \$$1=$2 is added" \ - " as a rc.conf(5) variable." - _var=$1 - rcvars="${rcvars# } $_var" - eval ${_var}_defval=\"$2\" - shift 2 - eval ${_var}_desc=\"$*\" - ;; - esac -} - -# set_rcvar_obsolete oldvar [newvar] [msg] -# Define obsolete variable. -# Global variable $rcvars_obsolete is used. -# -set_rcvar_obsolete() -{ - local _var - _var=$1 - debug "set_rcvar_obsolete: \$$1(old) -> \$$2(new) is defined" - - rcvars_obsolete="${rcvars_obsolete# } $1" - eval ${1}_newvar=\"$2\" - shift 2 - eval ${_var}_obsolete_msg=\"$*\" -} - -# -# force_depend script [rcvar] -# Force a service to start. Intended for use by services -# to resolve dependency issues. -# $1 - filename of script, in /etc/rc.d, to run -# $2 - name of the script's rcvar (minus the _enable) -# -force_depend() -{ - local _depend _dep_rcvar - - _depend="$1" - _dep_rcvar="${2:-$1}_enable" - - [ -n "$rc_fast" ] && ! checkyesno always_force_depends && - checkyesno $_dep_rcvar && return 0 - - /etc/rc.d/${_depend} forcestatus >/dev/null 2>&1 && return 0 - - info "${name} depends on ${_depend}, which will be forced to start." - if ! /etc/rc.d/${_depend} forcestart; then - warn "Unable to force ${_depend}. It may already be running." - return 1 - fi -} - -# -# checkyesno var -# Test $1 variable, and warn if not set to YES or NO. -# Return 0 if it's "yes" (et al), nonzero otherwise. -# -checkyesno() -{ - eval _value=\$${1} - debug "checkyesno: $1 is set to $_value." - case $_value in - - # "yes", "true", "on", or "1" - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - return 0 - ;; - - # "no", "false", "off", or "0" - [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) - return 1 - ;; - *) - warn "\$${1} is not set properly - see rc.conf(5)." - return 1 - ;; - esac -} - -# -# reverse_list list -# print the list in reverse order -# -reverse_list() -{ - _revlist= - for _revfile; do - _revlist="$_revfile $_revlist" - done - echo $_revlist -} - -# stop_boot always -# If booting directly to multiuser or $always is enabled, -# send SIGTERM to the parent (/etc/rc) to abort the boot. -# Otherwise just exit. -# -stop_boot() -{ - local always - - case $1 in - # "yes", "true", "on", or "1" - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - always=true - ;; - *) - always=false - ;; - esac - if [ "$autoboot" = yes -o "$always" = true ]; then - echo "ERROR: ABORTING BOOT (sending SIGTERM to parent)!" - kill -TERM ${RC_PID} - fi - exit 1 -} - -# -# mount_critical_filesystems type -# Go through the list of critical filesystems as provided in -# the rc.conf(5) variable $critical_filesystems_${type}, checking -# each one to see if it is mounted, and if it is not, mounting it. -# -mount_critical_filesystems() -{ - eval _fslist=\$critical_filesystems_${1} - for _fs in $_fslist; do - mount | ( - _ismounted=false - while read what _on on _type type; do - if [ $on = $_fs ]; then - _ismounted=true - fi - done - if $_ismounted; then - : - else - mount $_fs >/dev/null 2>&1 - fi - ) - done -} - -# -# check_pidfile pidfile procname [interpreter] -# Parses the first line of pidfile for a PID, and ensures -# that the process is running and matches procname. -# Prints the matching PID upon success, nothing otherwise. -# interpreter is optional; see _find_processes() for details. -# -check_pidfile() -{ - _pidfile=$1 - _procname=$2 - _interpreter=$3 - if [ -z "$_pidfile" -o -z "$_procname" ]; then - err 3 'USAGE: check_pidfile pidfile procname [interpreter]' - fi - if [ ! -f $_pidfile ]; then - debug "pid file ($_pidfile): not readable." - return - fi - read _pid _junk < $_pidfile - if [ -z "$_pid" ]; then - debug "pid file ($_pidfile): no pid in file." - return - fi - _find_processes $_procname ${_interpreter:-.} '-p '"$_pid" -} - -# -# check_process procname [interpreter] -# Ensures that a process (or processes) named procname is running. -# Prints a list of matching PIDs. -# interpreter is optional; see _find_processes() for details. -# -check_process() -{ - _procname=$1 - _interpreter=$2 - if [ -z "$_procname" ]; then - err 3 'USAGE: check_process procname [interpreter]' - fi - _find_processes $_procname ${_interpreter:-.} '-ax' -} - -# -# _find_processes procname interpreter psargs -# Search for procname in the output of ps generated by psargs. -# Prints the PIDs of any matching processes, space separated. -# -# If interpreter == ".", check the following variations of procname -# against the first word of each command: -# procname -# `basename procname` -# `basename procname` + ":" -# "(" + `basename procname` + ")" -# "[" + `basename procname` + "]" -# -# If interpreter != ".", read the first line of procname, remove the -# leading #!, normalise whitespace, append procname, and attempt to -# match that against each command, either as is, or with extra words -# at the end. As an alternative, to deal with interpreted daemons -# using perl, the basename of the interpreter plus a colon is also -# tried as the prefix to procname. -# -_find_processes() -{ - if [ $# -ne 3 ]; then - err 3 'USAGE: _find_processes procname interpreter psargs' - fi - _procname=$1 - _interpreter=$2 - _psargs=$3 - - _pref= - if [ $_interpreter != "." ]; then # an interpreted script - _script="${_chroot}${_chroot:+/}$_procname" - if [ -r "$_script" ]; then - read _interp < $_script # read interpreter name - case "$_interp" in - \#!*) - _interp=${_interp#\#!} # strip #! - set -- $_interp - case $1 in - */bin/env) - shift # drop env to get real name - ;; - esac - if [ $_interpreter != $1 ]; then - warn "\$command_interpreter $_interpreter != $1" - fi - ;; - *) - warn "no shebang line in $_script" - set -- $_interpreter - ;; - esac - else - warn "cannot read shebang line from $_script" - set -- $_interpreter - fi - _interp="$* $_procname" # cleanup spaces, add _procname - _interpbn=${1##*/} - _fp_args='_argv' - _fp_match='case "$_argv" in - ${_interp}|"${_interp} "*|"[${_interpbn}]"|"${_interpbn}: ${_procname}"*)' - else # a normal daemon - _procnamebn=${_procname##*/} - _fp_args='_arg0 _argv' - _fp_match='case "$_arg0" in - $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})"|"[${_procnamebn}]")' - fi - - _proccheck="\ - $PS 2>/dev/null -o pid= -o jid= -o command= $_psargs"' | - while read _npid _jid '"$_fp_args"'; do - '"$_fp_match"' - if [ "$JID" -eq "$_jid" ]; - then echo -n "$_pref$_npid"; - _pref=" "; - fi - ;; - esac - done' - -# debug "in _find_processes: proccheck is ($_proccheck)." - eval $_proccheck -} - -# sort_lite [-b] [-n] [-k POS] [-t SEP] -# A lite version of sort(1) (supporting a few options) that can be used -# before the real sort(1) is available (e.g., in scripts that run prior -# to mountcritremote). Requires only shell built-in functionality. -# -sort_lite() -{ - local funcname=sort_lite - local sort_sep="$IFS" sort_ignore_leading_space= - local sort_field=0 sort_strict_fields= sort_numeric= - local nitems=0 skip_leading=0 trim= - - local OPTIND flag - while getopts bnk:t: flag; do - case "$flag" in - b) sort_ignore_leading_space=1 ;; - n) sort_numeric=1 sort_ignore_leading_space=1 ;; - k) sort_field="${OPTARG%%,*}" ;; # only up to first comma - # NB: Unlike sort(1) only one POS allowed - t) sort_sep="$OPTARG" - if [ ${#sort_sep} -gt 1 ]; then - echo "$funcname: multi-character tab \`$sort_sep'" >&2 - return 1 - fi - sort_strict_fields=1 - ;; - \?) return 1 ;; - esac - done - shift $(( $OPTIND - 1 )) - - # Create transformation pattern to trim leading text if desired - case "$sort_field" in - ""|[!0-9]*|*[!0-9.]*) - echo "$funcname: invalid sort field \`$sort_field'" >&2 - return 1 - ;; - *.*) - skip_leading=${sort_field#*.} sort_field=${sort_field%%.*} - while [ ${skip_leading:-0} -gt 1 ] 2> /dev/null; do - trim="$trim?" skip_leading=$(( $skip_leading - 1 )) - done - esac - - # Copy input to series of local numbered variables - # NB: IFS of NULL preserves leading whitespace - local LINE - while IFS= read -r LINE || [ "$LINE" ]; do - nitems=$(( $nitems + 1 )) - local src_$nitems="$LINE" - done - - # - # Sort numbered locals using insertion sort - # - local curitem curitem_orig curitem_mod curitem_haskey - local dest dest_orig dest_mod dest_haskey - local d gt n - local i=1 - while [ $i -le $nitems ]; do - curitem_haskey=1 # Assume sort field (-k POS) exists - eval curitem=\"\$src_$i\" - curitem_mod="$curitem" # for modified comparison - curitem_orig="$curitem" # for original comparison - - # Trim leading whitespace if desired - if [ "$sort_ignore_leading_space" ]; then - while case "$curitem_orig" in - [$IFS]*) : ;; *) false; esac - do - curitem_orig="${curitem_orig#?}" - done - curitem_mod="$curitem_orig" - fi - - # Shift modified comparison value if sort field (-k POS) is > 1 - n=$sort_field - while [ $n -gt 1 ]; do - case "$curitem_mod" in - *[$sort_sep]*) - # Cut text up-to (and incl.) first separator - curitem_mod="${curitem_mod#*[$sort_sep]}" - - # Skip NULLs unless strict field splitting - [ "$sort_strict_fields" ] || - [ "${curitem_mod%%[$sort_sep]*}" ] || - [ $n -eq 2 ] || - continue - ;; - *) - # Asked for a field that doesn't exist - curitem_haskey= break - esac - n=$(( $n - 1 )) - done - - # Trim trailing words if sort field >= 1 - [ $sort_field -ge 1 -a "$sort_numeric" ] && - curitem_mod="${curitem_mod%%[$sort_sep]*}" - - # Apply optional trim (-k POS.TRIM) to cut leading characters - curitem_mod="${curitem_mod#$trim}" - - # Determine the type of modified comparison to use initially - # NB: Prefer numerical if requested but fallback to standard - case "$curitem_mod" in - ""|[!0-9]*) # NULL or begins with non-number - gt=">" - [ "$sort_numeric" ] && curitem_mod=0 - ;; - *) - if [ "$sort_numeric" ]; then - gt="-gt" - curitem_mod="${curitem_mod%%[!0-9]*}" - # NB: trailing non-digits removed - # otherwise numeric comparison fails - else - gt=">" - fi - esac - - # If first time through, short-circuit below position-search - if [ $i -le 1 ]; then - d=0 - else - d=1 - fi - - # - # Find appropriate element position - # - while [ $d -gt 0 ] - do - dest_haskey=$curitem_haskey - eval dest=\"\$dest_$d\" - dest_mod="$dest" # for modified comparison - dest_orig="$dest" # for original comparison - - # Trim leading whitespace if desired - if [ "$sort_ignore_leading_space" ]; then - while case "$dest_orig" in - [$IFS]*) : ;; *) false; esac - do - dest_orig="${dest_orig#?}" - done - dest_mod="$dest_orig" - fi - - # Shift modified value if sort field (-k POS) is > 1 - n=$sort_field - while [ $n -gt 1 ]; do - case "$dest_mod" in - *[$sort_sep]*) - # Cut text up-to (and incl.) 1st sep - dest_mod="${dest_mod#*[$sort_sep]}" - - # Skip NULLs unless strict fields - [ "$sort_strict_fields" ] || - [ "${dest_mod%%[$sort_sep]*}" ] || - [ $n -eq 2 ] || - continue - ;; - *) - # Asked for a field that doesn't exist - dest_haskey= break - esac - n=$(( $n - 1 )) - done - - # Trim trailing words if sort field >= 1 - [ $sort_field -ge 1 -a "$sort_numeric" ] && - dest_mod="${dest_mod%%[$sort_sep]*}" - - # Apply optional trim (-k POS.TRIM), cut leading chars - dest_mod="${dest_mod#$trim}" - - # Determine type of modified comparison to use - # NB: Prefer numerical if requested, fallback to std - case "$dest_mod" in - ""|[!0-9]*) # NULL or begins with non-number - gt=">" - [ "$sort_numeric" ] && dest_mod=0 - ;; - *) - if [ "$sort_numeric" ]; then - gt="-gt" - dest_mod="${dest_mod%%[!0-9]*}" - # NB: kill trailing non-digits - # for numeric comparison safety - else - gt=">" - fi - esac - - # Break if we've found the proper element position - if [ "$curitem_haskey" -a "$dest_haskey" ]; then - if [ "$dest_mod" = "$curitem_mod" ]; then - [ "$dest_orig" ">" "$curitem_orig" ] && - break - elif [ "$dest_mod" $gt "$curitem_mod" ] \ - 2> /dev/null - then - break - fi - else - [ "$dest_orig" ">" "$curitem_orig" ] && break - fi - - # Break if we've hit the end - [ $d -ge $i ] && break - - d=$(( $d + 1 )) - done - - # Shift remaining positions forward, making room for new item - n=$i - while [ $n -ge $d ]; do - # Shift destination item forward one placement - eval dest_$(( $n + 1 ))=\"\$dest_$n\" - n=$(( $n - 1 )) - done - - # Place the element - if [ $i -eq 1 ]; then - local dest_1="$curitem" - else - local dest_$d="$curitem" - fi - - i=$(( $i + 1 )) - done - - # Print sorted results - d=1 - while [ $d -le $nitems ]; do - eval echo \"\$dest_$d\" - d=$(( $d + 1 )) - done -} - -# -# wait_for_pids pid [pid ...] -# spins until none of the pids exist -# -wait_for_pids() -{ - local _list _prefix _nlist _j - - _list="$@" - if [ -z "$_list" ]; then - return - fi - _prefix= - while true; do - _nlist=""; - for _j in $_list; do - if kill -0 $_j 2>/dev/null; then - _nlist="${_nlist}${_nlist:+ }$_j" - [ -n "$_prefix" ] && sleep 1 - fi - done - if [ -z "$_nlist" ]; then - break - fi - _list=$_nlist - echo -n ${_prefix:-"Waiting for PIDS: "}$_list - _prefix=", " - pwait $_list 2>/dev/null - done - if [ -n "$_prefix" ]; then - echo "." - fi -} - -# -# get_pidfile_from_conf string file -# -# Takes a string to search for in the specified file. -# Ignores lines with traditional comment characters. -# -# Example: -# -# if get_pidfile_from_conf string file; then -# pidfile="$_pidfile_from_conf" -# else -# pidfile='appropriate default' -# fi -# -get_pidfile_from_conf() -{ - if [ -z "$1" -o -z "$2" ]; then - err 3 "USAGE: get_pidfile_from_conf string file ($name)" - fi - - local string file line - - string="$1" ; file="$2" - - if [ ! -s "$file" ]; then - err 3 "get_pidfile_from_conf: $file does not exist ($name)" - fi - - while read line; do - case "$line" in - *[#\;]*${string}*) continue ;; - *${string}*) break ;; - esac - done < $file - - if [ -n "$line" ]; then - line=${line#*/} - _pidfile_from_conf="/${line%%[\"\;]*}" - else - return 1 - fi -} - -# -# check_startmsgs -# If rc_quiet is set (usually as a result of using faststart at -# boot time) check if rc_startmsgs is enabled. -# -check_startmsgs() -{ - if [ -n "$rc_quiet" ]; then - checkyesno rc_startmsgs - else - return 0 - fi -} - -# -# run_rc_command argument -# Search for argument in the list of supported commands, which is: -# "start stop restart rcvar status poll ${extra_commands}" -# If there's a match, run ${argument}_cmd or the default method -# (see below). -# -# If argument has a given prefix, then change the operation as follows: -# Prefix Operation -# ------ --------- -# fast Skip the pid check, and set rc_fast=yes, rc_quiet=yes -# force Set ${rcvar} to YES, and set rc_force=yes -# one Set ${rcvar} to YES -# quiet Don't output some diagnostics, and set rc_quiet=yes -# -# The following globals are used: -# -# Name Needed Purpose -# ---- ------ ------- -# name y Name of script. -# -# command n Full path to command. -# Not needed if ${rc_arg}_cmd is set for -# each keyword. -# -# command_args n Optional args/shell directives for command. -# -# command_interpreter n If not empty, command is interpreted, so -# call check_{pidfile,process}() appropriately. -# -# desc n Description of script. -# -# extra_commands n List of extra commands supported. -# -# pidfile n If set, use check_pidfile $pidfile $command, -# otherwise use check_process $command. -# In either case, only check if $command is set. -# -# procname n Process name to check for instead of $command. -# -# rcvar n This is checked with checkyesno to determine -# if the action should be run. -# -# ${name}_program n Full path to command. -# Meant to be used in /etc/rc.conf to override -# ${command}. -# -# ${name}_chroot n Directory to chroot to before running ${command} -# Requires /usr to be mounted. -# -# ${name}_chdir n Directory to cd to before running ${command} -# (if not using ${name}_chroot). -# -# ${name}_flags n Arguments to call ${command} with. -# NOTE: $flags from the parent environment -# can be used to override this. -# -# ${name}_env n Environment variables to run ${command} with. -# -# ${name}_env_file n File to source variables to run ${command} with. -# -# ${name}_fib n Routing table number to run ${command} with. -# -# ${name}_nice n Nice level to run ${command} at. -# -# ${name}_oomprotect n Don't kill ${command} when swap space is exhausted. -# -# ${name}_user n User to run ${command} as, using su(1) if not -# using ${name}_chroot. -# Requires /usr to be mounted. -# -# ${name}_group n Group to run chrooted ${command} as. -# Requires /usr to be mounted. -# -# ${name}_groups n Comma separated list of supplementary groups -# to run the chrooted ${command} with. -# Requires /usr to be mounted. -# -# ${name}_prepend n Command added before ${command}. -# -# ${name}_login_class n Login class to use, else "daemon". -# -# ${name}_limits n limits(1) to apply to ${command}. -# -# ${rc_arg}_cmd n If set, use this as the method when invoked; -# Otherwise, use default command (see below) -# -# ${rc_arg}_precmd n If set, run just before performing the -# ${rc_arg}_cmd method in the default -# operation (i.e, after checking for required -# bits and process (non)existence). -# If this completes with a non-zero exit code, -# don't run ${rc_arg}_cmd. -# -# ${rc_arg}_postcmd n If set, run just after performing the -# ${rc_arg}_cmd method, if that method -# returned a zero exit code. -# -# required_dirs n If set, check for the existence of the given -# directories before running a (re)start command. -# -# required_files n If set, check for the readability of the given -# files before running a (re)start command. -# -# required_modules n If set, ensure the given kernel modules are -# loaded before running a (re)start command. -# The check and possible loads are actually -# done after start_precmd so that the modules -# aren't loaded in vain, should the precmd -# return a non-zero status to indicate a error. -# If a word in the list looks like "foo:bar", -# "foo" is the KLD file name and "bar" is the -# module name. If a word looks like "foo~bar", -# "foo" is the KLD file name and "bar" is a -# egrep(1) pattern matching the module name. -# Otherwise the module name is assumed to be -# the same as the KLD file name, which is most -# common. See load_kld(). -# -# required_vars n If set, perform checkyesno on each of the -# listed variables before running the default -# (re)start command. -# -# Default behaviour for a given argument, if no override method is -# provided: -# -# Argument Default behaviour -# -------- ----------------- -# start if !running && checkyesno ${rcvar} -# ${command} -# -# stop if ${pidfile} -# rc_pid=$(check_pidfile $pidfile $command) -# else -# rc_pid=$(check_process $command) -# kill $sig_stop $rc_pid -# wait_for_pids $rc_pid -# ($sig_stop defaults to TERM.) -# -# reload Similar to stop, except use $sig_reload instead, -# and doesn't wait_for_pids. -# $sig_reload defaults to HUP. -# Note that `reload' isn't provided by default, -# it should be enabled via $extra_commands. -# -# restart Run `stop' then `start'. -# -# status Show if ${command} is running, etc. -# -# poll Wait for ${command} to exit. -# -# rcvar Display what rc.conf variable is used (if any). -# -# enabled Return true if the service is enabled. -# -# describe Show the service's description -# -# extracommands Show the service's extra commands -# -# Variables available to methods, and after run_rc_command() has -# completed: -# -# Variable Purpose -# -------- ------- -# rc_arg Argument to command, after fast/force/one processing -# performed -# -# rc_flags Flags to start the default command with. -# Defaults to ${name}_flags, unless overridden -# by $flags from the environment. -# This variable may be changed by the precmd method. -# -# rc_pid PID of command (if appropriate) -# -# rc_fast Not empty if "fast" was provided (q.v.) -# -# rc_force Not empty if "force" was provided (q.v.) -# -# rc_quiet Not empty if "quiet" was provided -# -# -run_rc_command() -{ - _return=0 - rc_arg=$1 - if [ -z "$name" ]; then - err 3 'run_rc_command: $name is not set.' - fi - - # Don't repeat the first argument when passing additional command- - # line arguments to the command subroutines. - # - shift 1 - rc_extra_args="$*" - - _rc_prefix= - case "$rc_arg" in - fast*) # "fast" prefix; don't check pid - rc_arg=${rc_arg#fast} - rc_fast=yes - rc_quiet=yes - ;; - force*) # "force" prefix; always run - rc_force=yes - _rc_prefix=force - rc_arg=${rc_arg#${_rc_prefix}} - if [ -n "${rcvar}" ]; then - eval ${rcvar}=YES - fi - ;; - one*) # "one" prefix; set ${rcvar}=yes - _rc_prefix=one - rc_arg=${rc_arg#${_rc_prefix}} - if [ -n "${rcvar}" ]; then - eval ${rcvar}=YES - fi - ;; - quiet*) # "quiet" prefix; omit some messages - _rc_prefix=quiet - rc_arg=${rc_arg#${_rc_prefix}} - rc_quiet=yes - ;; - esac - - eval _override_command=\$${name}_program - command=${_override_command:-$command} - - _keywords="start stop restart rcvar enabled describe extracommands $extra_commands" - rc_pid= - _pidcmd= - _procname=${procname:-${command}} - - # setup pid check command - if [ -n "$_procname" ]; then - if [ -n "$pidfile" ]; then - _pidcmd='rc_pid=$(check_pidfile '"$pidfile $_procname $command_interpreter"')' - else - _pidcmd='rc_pid=$(check_process '"$_procname $command_interpreter"')' - fi - _keywords="${_keywords} status poll" - fi - - if [ -z "$rc_arg" ]; then - rc_usage $_keywords - fi - - if [ "$rc_arg" = "enabled" ] ; then - checkyesno ${rcvar} - return $? - fi - - if [ -n "$flags" ]; then # allow override from environment - rc_flags=$flags - else - eval rc_flags=\$${name}_flags - fi - eval _chdir=\$${name}_chdir _chroot=\$${name}_chroot \ - _nice=\$${name}_nice _user=\$${name}_user \ - _group=\$${name}_group _groups=\$${name}_groups \ - _fib=\$${name}_fib _env=\$${name}_env \ - _prepend=\$${name}_prepend _login_class=\${${name}_login_class:-daemon} \ - _limits=\$${name}_limits _oomprotect=\$${name}_oomprotect \ - _env_file=\$${name}_env_file - - if [ -n "$_env_file" ] && [ -r "${_env_file}" ]; then # load env from file - set -a - . $_env_file - set +a - fi - - if [ -n "$_user" ]; then # unset $_user if running as that user - if [ "$_user" = "$(eval $IDCMD)" ]; then - unset _user - fi - fi - - [ -z "$autoboot" ] && eval $_pidcmd # determine the pid if necessary - - for _elem in $_keywords; do - if [ "$_elem" != "$rc_arg" ]; then - continue - fi - # if ${rcvar} is set, $1 is not "rcvar" and not "describe" - # and ${rc_pid} is not set, then run - # checkyesno ${rcvar} - # and return if that failed - # - if [ -n "${rcvar}" -a "$rc_arg" != "rcvar" -a "$rc_arg" != "stop" \ - -a "$rc_arg" != "describe" ] || - [ -n "${rcvar}" -a "$rc_arg" = "stop" -a -z "${rc_pid}" ]; then - if ! checkyesno ${rcvar}; then - if [ -n "${rc_quiet}" ]; then - return 0 - fi - echo -n "Cannot '${rc_arg}' $name. Set ${rcvar} to " - echo -n "YES in /etc/rc.conf or use 'one${rc_arg}' " - echo "instead of '${rc_arg}'." - return 0 - fi - fi - - if [ $rc_arg = "start" -a -z "$rc_fast" -a -n "$rc_pid" ]; then - if [ -z "$rc_quiet" ]; then - echo 1>&2 "${name} already running? " \ - "(pid=$rc_pid)." - fi - return 1 - fi - - # if there's a custom ${XXX_cmd}, - # run that instead of the default - # - eval _cmd=\$${rc_arg}_cmd \ - _precmd=\$${rc_arg}_precmd \ - _postcmd=\$${rc_arg}_postcmd - - if [ -n "$_cmd" ]; then - _run_rc_precmd || return 1 - _run_rc_doit "$_cmd $rc_extra_args" || return 1 - _run_rc_postcmd - return $_return - fi - - case "$rc_arg" in # default operations... - - describe) - if [ -n "$desc" ]; then - echo "$desc" - fi - ;; - - extracommands) - echo "$extra_commands" - ;; - - status) - _run_rc_precmd || return 1 - if [ -n "$rc_pid" ]; then - echo "${name} is running as pid $rc_pid." - else - echo "${name} is not running." - return 1 - fi - _run_rc_postcmd - ;; - - start) - if [ ! -x "${_chroot}${_chroot:+/}${command}" ]; then - warn "run_rc_command: cannot run $command" - return 1 - fi - - if ! _run_rc_precmd; then - warn "failed precmd routine for ${name}" - return 1 - fi - - # setup the full command to run - # - check_startmsgs && echo "Starting ${name}." - if [ -n "$_chroot" ]; then - _cd= - _doit="\ -${_nice:+nice -n $_nice }\ -${_fib:+setfib -F $_fib }\ -${_env:+env $_env }\ -chroot ${_user:+-u $_user }${_group:+-g $_group }${_groups:+-G $_groups }\ -$_chroot $command $rc_flags $command_args" - else - _cd="${_chdir:+cd $_chdir && }" - _doit="\ -${_fib:+setfib -F $_fib }\ -${_env:+env $_env }\ -$command $rc_flags $command_args" - if [ -n "$_user" ]; then - _doit="su -m $_user -c 'sh -c \"$_doit\"'" - fi - if [ -n "$_nice" ]; then - if [ -z "$_user" ]; then - _doit="sh -c \"$_doit\"" - fi - _doit="nice -n $_nice $_doit" - fi - if [ -n "$_prepend" ]; then - _doit="$_prepend $_doit" - fi - fi - - # Prepend default limits - _doit="$_cd limits -C $_login_class $_limits $_doit" - - # run the full command - # - if ! _run_rc_doit "$_doit"; then - warn "failed to start ${name}" - return 1 - fi - - # finally, run postcmd - # - _run_rc_postcmd - ;; - - stop) - if [ -z "$rc_pid" ]; then - [ -n "$rc_fast" ] && return 0 - _run_rc_notrunning - return 1 - fi - - _run_rc_precmd || return 1 - - # send the signal to stop - # - echo "Stopping ${name}." - _doit=$(_run_rc_killcmd "${sig_stop:-TERM}") - _run_rc_doit "$_doit" || return 1 - - # wait for the command to exit, - # and run postcmd. - wait_for_pids $rc_pid - - _run_rc_postcmd - ;; - - reload) - if [ -z "$rc_pid" ]; then - _run_rc_notrunning - return 1 - fi - - _run_rc_precmd || return 1 - - _doit=$(_run_rc_killcmd "${sig_reload:-HUP}") - _run_rc_doit "$_doit" || return 1 - - _run_rc_postcmd - ;; - - restart) - # prevent restart being called more - # than once by any given script - # - if ${_rc_restart_done:-false}; then - return 0 - fi - _rc_restart_done=true - - _run_rc_precmd || return 1 - - # run those in a subshell to keep global variables - ( run_rc_command ${_rc_prefix}stop $rc_extra_args ) - ( run_rc_command ${_rc_prefix}start $rc_extra_args ) - _return=$? - [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1 - - _run_rc_postcmd - ;; - - poll) - _run_rc_precmd || return 1 - if [ -n "$rc_pid" ]; then - wait_for_pids $rc_pid - fi - _run_rc_postcmd - ;; - - rcvar) - echo -n "# $name" - if [ -n "$desc" ]; then - echo " : $desc" - else - echo "" - fi - echo "#" - # Get unique vars in $rcvar $rcvars - for _v in $rcvar $rcvars; do - case $v in - $_v\ *|\ *$_v|*\ $_v\ *) ;; - *) v="${v# } $_v" ;; - esac - done - - # Display variables. - for _v in $v; do - if [ -z "$_v" ]; then - continue - fi - - eval _desc=\$${_v}_desc - eval _defval=\$${_v}_defval - _h="-" - - eval echo \"$_v=\\\"\$$_v\\\"\" - # decode multiple lines of _desc - while [ -n "$_desc" ]; do - case $_desc in - *^^*) - echo "# $_h ${_desc%%^^*}" - _desc=${_desc#*^^} - _h=" " - ;; - *) - echo "# $_h ${_desc}" - break - ;; - esac - done - echo "# (default: \"$_defval\")" - done - echo "" - ;; - - *) - rc_usage $_keywords - ;; - - esac - - # Apply protect(1) to the PID if ${name}_oomprotect is set. - case "$rc_arg" in - start) - # We cannot use protect(1) inside jails. - if [ -n "$_oomprotect" ] && [ -f "${PROTECT}" ] && - [ "$(sysctl -n security.jail.jailed)" -eq 0 ]; then - pid=$(check_process $command) - case $_oomprotect in - [Aa][Ll][Ll]) - ${PROTECT} -i -p ${pid} - ;; - [Yy][Ee][Ss]) - ${PROTECT} -p ${pid} - ;; - esac - fi - ;; - esac - - return $_return - done - - echo 1>&2 "$0: unknown directive '$rc_arg'." - rc_usage $_keywords - # not reached -} - -# -# Helper functions for run_rc_command: common code. -# They use such global variables besides the exported rc_* ones: -# -# name R/W -# ------------------ -# _precmd R -# _postcmd R -# _return W -# -_run_rc_precmd() -{ - check_required_before "$rc_arg" || return 1 - - if [ -n "$_precmd" ]; then - debug "run_rc_command: ${rc_arg}_precmd: $_precmd $rc_extra_args" - eval "$_precmd $rc_extra_args" - _return=$? - - # If precmd failed and force isn't set, request exit. - if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then - return 1 - fi - fi - - check_required_after "$rc_arg" || return 1 - - return 0 -} - -_run_rc_postcmd() -{ - if [ -n "$_postcmd" ]; then - debug "run_rc_command: ${rc_arg}_postcmd: $_postcmd $rc_extra_args" - eval "$_postcmd $rc_extra_args" - _return=$? - fi - return 0 -} - -_run_rc_doit() -{ - debug "run_rc_command: doit: $*" - eval "$@" - _return=$? - - # If command failed and force isn't set, request exit. - if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then - return 1 - fi - - return 0 -} - -_run_rc_notrunning() -{ - local _pidmsg - - if [ -n "$pidfile" ]; then - _pidmsg=" (check $pidfile)." - else - _pidmsg= - fi - echo 1>&2 "${name} not running?${_pidmsg}" -} - -_run_rc_killcmd() -{ - local _cmd - - _cmd="kill -$1 $rc_pid" - if [ -n "$_user" ]; then - _cmd="su -m ${_user} -c 'sh -c \"${_cmd}\"'" - fi - echo "$_cmd" -} - -# -# run_rc_script file arg -# Start the script `file' with `arg', and correctly handle the -# return value from the script. -# If `file' ends with `.sh' and lives in /etc/rc.d, ignore it as it's -# an old-style startup file. -# If `file' ends with `.sh' and does not live in /etc/rc.d, it's sourced -# into the current environment if $rc_fast_and_loose is set; otherwise -# it is run as a child process. -# If `file' appears to be a backup or scratch file, ignore it. -# Otherwise if it is executable run as a child process. -# -run_rc_script() -{ - _file=$1 - _arg=$2 - if [ -z "$_file" -o -z "$_arg" ]; then - err 3 'USAGE: run_rc_script file arg' - fi - - unset name command command_args command_interpreter \ - extra_commands pidfile procname \ - rcvar rcvars rcvars_obsolete required_dirs required_files \ - required_vars - eval unset ${_arg}_cmd ${_arg}_precmd ${_arg}_postcmd - - case "$_file" in - /etc/rc.d/*.sh) # no longer allowed in the base - warn "Ignoring old-style startup script $_file" - ;; - *[~#]|*.OLD|*.bak|*.orig|*,v) # scratch file; skip - warn "Ignoring scratch file $_file" - ;; - *) # run in subshell - if [ -x $_file ]; then - if [ -n "$rc_fast_and_loose" ]; then - set $_arg; . $_file - else - ( trap "echo Script $_file interrupted >&2 ; kill -QUIT $$" 3 - trap "echo Script $_file interrupted >&2 ; exit 1" 2 - trap "echo Script $_file running >&2" 29 - set $_arg; . $_file ) - fi - fi - ;; - esac -} - -# -# load_rc_config [service] -# Source in the configuration file(s) for a given service. -# If no service is specified, only the global configuration -# file(s) will be loaded. -# -load_rc_config() -{ - local _name _rcvar_val _var _defval _v _msg _new _d - _name=$1 - - if ${_rc_conf_loaded:-false}; then - : - else - if [ -r /etc/defaults/rc.conf ]; then - debug "Sourcing /etc/defaults/rc.conf" - . /etc/defaults/rc.conf - source_rc_confs - elif [ -r /etc/rc.conf ]; then - debug "Sourcing /etc/rc.conf (/etc/defaults/rc.conf doesn't exist)." - . /etc/rc.conf - fi - _rc_conf_loaded=true - fi - - # If a service name was specified, attempt to load - # service-specific configuration - if [ -n "$_name" ] ; then - for _d in /etc ${local_startup}; do - _d=${_d%/rc.d} - if [ -f ${_d}/rc.conf.d/"$_name" ]; then - debug "Sourcing ${_d}/rc.conf.d/$_name" - . ${_d}/rc.conf.d/"$_name" - elif [ -d ${_d}/rc.conf.d/"$_name" ] ; then - local _rc - for _rc in ${_d}/rc.conf.d/"$_name"/* ; do - if [ -f "$_rc" ] ; then - debug "Sourcing $_rc" - . "$_rc" - fi - done - fi - done - fi - - # Set defaults if defined. - for _var in $rcvar $rcvars; do - eval _defval=\$${_var}_defval - if [ -n "$_defval" ]; then - eval : \${$_var:=\$${_var}_defval} - fi - done - - # check obsolete rc.conf variables - for _var in $rcvars_obsolete; do - eval _v=\$$_var - eval _msg=\$${_var}_obsolete_msg - eval _new=\$${_var}_newvar - case $_v in - "") - ;; - *) - if [ -z "$_new" ]; then - _msg="Ignored." - else - eval $_new=\"\$$_var\" - if [ -z "$_msg" ]; then - _msg="Use \$$_new instead." - fi - fi - warn "\$$_var is obsolete. $_msg" - ;; - esac - done -} - -# -# load_rc_config_var name var -# Read the rc.conf(5) var for name and set in the -# current shell, using load_rc_config in a subshell to prevent -# unwanted side effects from other variable assignments. -# -load_rc_config_var() -{ - if [ $# -ne 2 ]; then - err 3 'USAGE: load_rc_config_var name var' - fi - eval $(eval '( - load_rc_config '$1' >/dev/null; - if [ -n "${'$2'}" -o "${'$2'-UNSET}" != "UNSET" ]; then - echo '$2'=\'\''${'$2'}\'\''; - fi - )' ) -} - -# -# rc_usage commands -# Print a usage string for $0, with `commands' being a list of -# valid commands. -# -rc_usage() -{ - echo -n 1>&2 "Usage: $0 [fast|force|one|quiet](" - - _sep= - for _elem; do - echo -n 1>&2 "$_sep$_elem" - _sep="|" - done - echo 1>&2 ")" - exit 1 -} - -# -# err exitval message -# Display message to stderr and log to the syslog, and exit with exitval. -# -err() -{ - exitval=$1 - shift - - if [ -x /usr/bin/logger ]; then - logger "$0: ERROR: $*" - fi - echo 1>&2 "$0: ERROR: $*" - exit $exitval -} - -# -# warn message -# Display message to stderr and log to the syslog. -# -warn() -{ - if [ -x /usr/bin/logger ]; then - logger "$0: WARNING: $*" - fi - echo 1>&2 "$0: WARNING: $*" -} - -# -# info message -# Display informational message to stdout and log to syslog. -# -info() -{ - case ${rc_info} in - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - if [ -x /usr/bin/logger ]; then - logger "$0: INFO: $*" - fi - echo "$0: INFO: $*" - ;; - esac -} - -# -# debug message -# If debugging is enabled in rc.conf output message to stderr. -# BEWARE that you don't call any subroutine that itself calls this -# function. -# -debug() -{ - case ${rc_debug} in - [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) - if [ -x /usr/bin/logger ]; then - logger "$0: DEBUG: $*" - fi - echo 1>&2 "$0: DEBUG: $*" - ;; - esac -} - -# -# backup_file action file cur backup -# Make a backup copy of `file' into `cur', and save the previous -# version of `cur' as `backup'. -# -# The `action' keyword can be one of the following: -# -# add `file' is now being backed up (and is possibly -# being reentered into the backups system). `cur' -# is created. -# -# update `file' has changed and needs to be backed up. -# If `cur' exists, it is copied to `back' -# and then `file' is copied to `cur'. -# -# remove `file' is no longer being tracked by the backups -# system. `cur' is moved `back'. -# -# -backup_file() -{ - _action=$1 - _file=$2 - _cur=$3 - _back=$4 - - case $_action in - add|update) - if [ -f $_cur ]; then - cp -p $_cur $_back - fi - cp -p $_file $_cur - chown root:wheel $_cur - ;; - remove) - mv -f $_cur $_back - ;; - esac -} - -# make_symlink src link -# Make a symbolic link 'link' to src from basedir. If the -# directory in which link is to be created does not exist -# a warning will be displayed and an error will be returned. -# Returns 0 on success, 1 otherwise. -# -make_symlink() -{ - local src link linkdir _me - src="$1" - link="$2" - linkdir="`dirname $link`" - _me="make_symlink()" - - if [ -z "$src" -o -z "$link" ]; then - warn "$_me: requires two arguments." - return 1 - fi - if [ ! -d "$linkdir" ]; then - warn "$_me: the directory $linkdir does not exist." - return 1 - fi - if ! ln -sf $src $link; then - warn "$_me: unable to make a symbolic link from $link to $src" - return 1 - fi - return 0 -} - -# devfs_rulesets_from_file file -# Reads a set of devfs commands from file, and creates -# the specified rulesets with their rules. Returns non-zero -# if there was an error. -# -devfs_rulesets_from_file() -{ - local file _err _me _opts - file="$1" - _me="devfs_rulesets_from_file" - _err=0 - - if [ -z "$file" ]; then - warn "$_me: you must specify a file" - return 1 - fi - if [ ! -e "$file" ]; then - debug "$_me: no such file ($file)" - return 0 - fi - - # Disable globbing so that the rule patterns are not expanded - # by accident with matching filesystem entries. - _opts=$-; set -f - - debug "reading rulesets from file ($file)" - { while read line - do - case $line in - \#*) - continue - ;; - \[*\]*) - rulenum=`expr "$line" : "\[.*=\([0-9]*\)\]"` - if [ -z "$rulenum" ]; then - warn "$_me: cannot extract rule number ($line)" - _err=1 - break - fi - rulename=`expr "$line" : "\[\(.*\)=[0-9]*\]"` - if [ -z "$rulename" ]; then - warn "$_me: cannot extract rule name ($line)" - _err=1 - break; - fi - eval $rulename=\$rulenum - debug "found ruleset: $rulename=$rulenum" - if ! /sbin/devfs rule -s $rulenum delset; then - _err=1 - break - fi - ;; - *) - rulecmd="${line%%"\#*"}" - # evaluate the command incase it includes - # other rules - if [ -n "$rulecmd" ]; then - debug "adding rule ($rulecmd)" - if ! eval /sbin/devfs rule -s $rulenum $rulecmd - then - _err=1 - break - fi - fi - ;; - esac - if [ $_err -ne 0 ]; then - debug "error in $_me" - break - fi - done } < $file - case $_opts in *f*) ;; *) set +f ;; esac - return $_err -} - -# devfs_init_rulesets -# Initializes rulesets from configuration files. Returns -# non-zero if there was an error. -# -devfs_init_rulesets() -{ - local file _me - _me="devfs_init_rulesets" - - # Go through this only once - if [ -n "$devfs_rulesets_init" ]; then - debug "$_me: devfs rulesets already initialized" - return - fi - for file in $devfs_rulesets; do - if ! devfs_rulesets_from_file $file; then - warn "$_me: could not read rules from $file" - return 1 - fi - done - devfs_rulesets_init=1 - debug "$_me: devfs rulesets initialized" - return 0 -} - -# devfs_set_ruleset ruleset [dir] -# Sets the default ruleset of dir to ruleset. The ruleset argument -# must be a ruleset name as specified in devfs.rules(5) file. -# Returns non-zero if it could not set it successfully. -# -devfs_set_ruleset() -{ - local devdir rs _me - [ -n "$1" ] && eval rs=\$$1 || rs= - [ -n "$2" ] && devdir="-m "$2"" || devdir= - _me="devfs_set_ruleset" - - if [ -z "$rs" ]; then - warn "$_me: you must specify a ruleset number" - return 1 - fi - debug "$_me: setting ruleset ($rs) on mount-point (${devdir#-m })" - if ! /sbin/devfs $devdir ruleset $rs; then - warn "$_me: unable to set ruleset $rs to ${devdir#-m }" - return 1 - fi - return 0 -} - -# devfs_apply_ruleset ruleset [dir] -# Apply ruleset number $ruleset to the devfs mountpoint $dir. -# The ruleset argument must be a ruleset name as specified -# in a devfs.rules(5) file. Returns 0 on success or non-zero -# if it could not apply the ruleset. -# -devfs_apply_ruleset() -{ - local devdir rs _me - [ -n "$1" ] && eval rs=\$$1 || rs= - [ -n "$2" ] && devdir="-m "$2"" || devdir= - _me="devfs_apply_ruleset" - - if [ -z "$rs" ]; then - warn "$_me: you must specify a ruleset" - return 1 - fi - debug "$_me: applying ruleset ($rs) to mount-point (${devdir#-m })" - if ! /sbin/devfs $devdir rule -s $rs applyset; then - warn "$_me: unable to apply ruleset $rs to ${devdir#-m }" - return 1 - fi - return 0 -} - -# devfs_domount dir [ruleset] -# Mount devfs on dir. If ruleset is specified it is set -# on the mount-point. It must also be a ruleset name as specified -# in a devfs.rules(5) file. Returns 0 on success. -# -devfs_domount() -{ - local devdir rs _me - devdir="$1" - [ -n "$2" ] && rs=$2 || rs= - _me="devfs_domount()" - - if [ -z "$devdir" ]; then - warn "$_me: you must specify a mount-point" - return 1 - fi - debug "$_me: mount-point is ($devdir), ruleset is ($rs)" - if ! mount -t devfs dev "$devdir"; then - warn "$_me: Unable to mount devfs on $devdir" - return 1 - fi - if [ -n "$rs" ]; then - devfs_init_rulesets - devfs_set_ruleset $rs $devdir - devfs -m $devdir rule applyset - fi - return 0 -} - -# Provide a function for normalizing the mounting of memory -# filesystems. This should allow the rest of the code here to remain -# as close as possible between 5-current and 4-stable. -# $1 = size -# $2 = mount point -# $3 = (optional) extra mdmfs flags -mount_md() -{ - if [ -n "$3" ]; then - flags="$3" - fi - /sbin/mdmfs $flags -s $1 ${mfs_type} $2 -} - -# Code common to scripts that need to load a kernel module -# if it isn't in the kernel yet. Syntax: -# load_kld [-e regex] [-m module] file -# where -e or -m chooses the way to check if the module -# is already loaded: -# regex is egrep'd in the output from `kldstat -v', -# module is passed to `kldstat -m'. -# The default way is as though `-m file' were specified. -load_kld() -{ - local _loaded _mod _opt _re - - while getopts "e:m:" _opt; do - case "$_opt" in - e) _re="$OPTARG" ;; - m) _mod="$OPTARG" ;; - *) err 3 'USAGE: load_kld [-e regex] [-m module] file' ;; - esac - done - shift $(($OPTIND - 1)) - if [ $# -ne 1 ]; then - err 3 'USAGE: load_kld [-e regex] [-m module] file' - fi - _mod=${_mod:-$1} - _loaded=false - if [ -n "$_re" ]; then - if kldstat -v | egrep -q -e "$_re"; then - _loaded=true - fi - else - if kldstat -q -m "$_mod"; then - _loaded=true - fi - fi - if ! $_loaded; then - if ! kldload "$1"; then - warn "Unable to load kernel module $1" - return 1 - else - info "$1 kernel module loaded." - fi - else - debug "load_kld: $1 kernel module already loaded." - fi - return 0 -} - -# ltr str src dst [var] -# Change every $src in $str to $dst. -# Useful when /usr is not yet mounted and we cannot use tr(1), sed(1) nor -# awk(1). If var is non-NULL, set it to the result. -ltr() -{ - local _str _src _dst _out _com _var - _str="$1" - _src="$2" - _dst="$3" - _var="$4" - _out="" - - local IFS="${_src}" - for _com in ${_str}; do - if [ -z "${_out}" ]; then - _out="${_com}" - else - _out="${_out}${_dst}${_com}" - fi - done - if [ -n "${_var}" ]; then - setvar "${_var}" "${_out}" - else - echo "${_out}" - fi -} - -# Creates a list of providers for GELI encryption. -geli_make_list() -{ - local devices devices2 - local provider mountpoint type options rest - - # Create list of GELI providers from fstab. - while read provider mountpoint type options rest ; do - case ":${options}" in - :*noauto*) - noauto=yes - ;; - *) - noauto=no - ;; - esac - - case ":${provider}" in - :#*) - continue - ;; - *.eli) - # Skip swap devices. - if [ "${type}" = "swap" -o "${options}" = "sw" -o "${noauto}" = "yes" ]; then - continue - fi - devices="${devices} ${provider}" - ;; - esac - done < /etc/fstab - - # Append providers from geli_devices. - devices="${devices} ${geli_devices}" - - for provider in ${devices}; do - provider=${provider%.eli} - provider=${provider#/dev/} - devices2="${devices2} ${provider}" - done - - echo ${devices2} -} - -# Originally, root mount hold had to be released before mounting -# the root filesystem. This delayed the boot, so it was changed -# to only wait if the root device isn't readily available. This -# can result in rc scripts executing before all the devices - such -# as graid(8), or USB disks - can be accessed. This function can -# be used to explicitly wait for root mount holds to be released. -root_hold_wait() -{ - local wait waited holders - - waited=0 - while true; do - holders="$(sysctl -n vfs.root_mount_hold)" - if [ -z "${holders}" ]; then - break; - fi - if [ ${waited} -eq 0 ]; then - echo -n "Waiting ${root_hold_delay}s" \ - "for the root mount holders: ${holders}" - else - echo -n . - fi - if [ ${waited} -ge ${root_hold_delay} ]; then - echo - break - fi - sleep 1 - waited=$(($waited + 1)) - done -} - -# Find scripts in local_startup directories that use the old syntax -# -find_local_scripts_old() { - zlist='' - slist='' - for dir in ${local_startup}; do - if [ -d "${dir}" ]; then - for file in ${dir}/[0-9]*.sh; do - grep '^# PROVIDE:' $file >/dev/null 2>&1 && - continue - zlist="$zlist $file" - done - for file in ${dir}/[!0-9]*.sh; do - grep '^# PROVIDE:' $file >/dev/null 2>&1 && - continue - slist="$slist $file" - done - fi - done -} - -find_local_scripts_new() { - local_rc='' - for dir in ${local_startup}; do - if [ -d "${dir}" ]; then - for file in `grep -l '^# PROVIDE:' ${dir}/* 2>/dev/null`; do - case "$file" in - *.sample) ;; - *) if [ -x "$file" ]; then - local_rc="${local_rc} ${file}" - fi - ;; - esac - done - fi - done -} - -# check_required_{before|after} command -# Check for things required by the command before and after its precmd, -# respectively. The two separate functions are needed because some -# conditions should prevent precmd from being run while other things -# depend on precmd having already been run. -# -check_required_before() -{ - local _f - - case "$1" in - start) - for _f in $required_vars; do - if ! checkyesno $_f; then - warn "\$${_f} is not enabled." - if [ -z "$rc_force" ]; then - return 1 - fi - fi - done - - for _f in $required_dirs; do - if [ ! -d "${_f}/." ]; then - warn "${_f} is not a directory." - if [ -z "$rc_force" ]; then - return 1 - fi - fi - done - - for _f in $required_files; do - if [ ! -r "${_f}" ]; then - warn "${_f} is not readable." - if [ -z "$rc_force" ]; then - return 1 - fi - fi - done - ;; - esac - - return 0 -} - -check_required_after() -{ - local _f _args - - case "$1" in - start) - for _f in $required_modules; do - case "${_f}" in - *~*) _args="-e ${_f#*~} ${_f%%~*}" ;; - *:*) _args="-m ${_f#*:} ${_f%%:*}" ;; - *) _args="${_f}" ;; - esac - if ! load_kld ${_args}; then - if [ -z "$rc_force" ]; then - return 1 - fi - fi - done - ;; - esac - - return 0 -} - -# check_jail mib -# Return true if security.jail.$mib exists and set to 1. - -check_jail() -{ - local _mib _v - - _mib=$1 - if _v=$(${SYSCTL_N} "security.jail.$_mib" 2> /dev/null); then - case $_v in - 1) return 0;; - esac - fi - return 1 -} - -# check_kern_features mib -# Return existence of kern.features.* sysctl MIB as true or -# false. The result will be cached in $_rc_cache_kern_features_ -# namespace. "0" means the kern.features.X exists. - -check_kern_features() -{ - local _v - - [ -n "$1" ] || return 1; - eval _v=\$_rc_cache_kern_features_$1 - [ -n "$_v" ] && return "$_v"; - - if ${SYSCTL_N} kern.features.$1 > /dev/null 2>&1; then - eval _rc_cache_kern_features_$1=0 - return 0 - else - eval _rc_cache_kern_features_$1=1 - return 1 - fi -} - -# check_namevarlist var -# Return "0" if ${name}_var is reserved in rc.subr. - -_rc_namevarlist="program chroot chdir env flags fib nice user group groups prepend" -check_namevarlist() -{ - local _v - - for _v in $_rc_namevarlist; do - case $1 in - $_v) return 0 ;; - esac - done - - return 1 -} - -# _echoonce var msg mode -# mode=0: Echo $msg if ${$var} is empty. -# After doing echo, a string is set to ${$var}. -# -# mode=1: Echo $msg if ${$var} is a string with non-zero length. -# -_echoonce() -{ - local _var _msg _mode - eval _var=\$$1 - _msg=$2 - _mode=$3 - - case $_mode in - 1) [ -n "$_var" ] && echo "$_msg" ;; - *) [ -z "$_var" ] && echo -n "$_msg" && eval "$1=finished" ;; - esac -} - -# If the loader env variable rc.debug is set, turn on debugging. rc.conf will -# still override this, but /etc/defaults/rc.conf can't unconditionally set this -# since it would undo what we've done here. -if kenv -q rc.debug > /dev/null ; then - rc_debug=YES -fi Property changes on: head/etc/rc.subr ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/rc.shutdown =================================================================== --- head/etc/rc.shutdown (revision 336846) +++ head/etc/rc.shutdown (nonexistent) @@ -1,113 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 1997 Ollivier Robert -# 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$ -# - -# Site-specific closing actions for daemons run by init on shutdown, -# or before going single-user from multi-user. -# Output and errors are directed to console by init, and the -# console is the controlling terminal. - -stty status '^T' 2> /dev/null - -# Set shell to ignore SIGINT (2), but not children; -# shell catches SIGQUIT (3) and returns to single user after fsck. -trap : 2 -trap : 3 # shouldn't be needed - -HOME=/ -PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin -export HOME PATH - -. /etc/rc.subr - -load_rc_config - -# reverse_list list -# print the list in reverse order -# -reverse_list() -{ - _revlist= - for _revfile in $*; do - _revlist="$_revfile${script_name_sep}$_revlist" - done - echo $_revlist -} - -# If requested, start a watchdog timer in the background which -# will terminate rc.shutdown if rc.shutdown doesn't complete -# within the specified time. -# -_rcshutdown_watchdog= -if [ -n "$rcshutdown_timeout" ]; then - debug "Initiating watchdog timer." - sleep $rcshutdown_timeout && ( - _msg="$rcshutdown_timeout second watchdog" - _msg="$_msg timeout expired. Shutdown terminated." - logger -t rc.shutdown "$_msg" - echo "$_msg" - date - kill -KILL $$ >/dev/null 2>&1 - ) & - _rcshutdown_watchdog=$! -fi - -# Determine the shutdown order of the /etc/rc.d scripts, -# and perform the operation -# -rcorder_opts="-k shutdown" -if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then - rcorder_opts="$rcorder_opts -s nojail" - if [ `/sbin/sysctl -n security.jail.vnet` -ne 1 ]; then - rcorder_opts="$rcorder_opts -s nojailvnet" - fi -fi - -case ${local_startup} in -[Nn][Oo] | '') ;; -*) find_local_scripts_new ;; -esac - -files=`rcorder ${rcorder_opts} /etc/rc.d/* ${local_rc} 2>/dev/null` - -for _rc_elem in `reverse_list $files`; do - debug "run_rc_script $_rc_elem faststop" - run_rc_script $_rc_elem faststop -done - -# Terminate the background watchdog timer (if it is running) -# -if [ -n "$_rcshutdown_watchdog" ]; then - pkill -TERM -P $_rcshutdown_watchdog >/dev/null 2>&1 -fi - -# Insert other shutdown procedures here - - -echo '.' -exit 0 Property changes on: head/etc/rc.shutdown ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/rc.suspend =================================================================== --- head/etc/rc.suspend (revision 336846) +++ head/etc/rc.suspend (nonexistent) @@ -1,67 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 1999 Mitsuru IWASAKI -# 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$ -# - -# sample run command file for APM Suspend Event - -if [ $# -ne 2 ]; then - echo "Usage: $0 [apm|acpi] [standby,suspend|1-4]" - exit 1 -fi - -subsystem=$1 -state=$2 - -if [ -r /var/run/rc.suspend.pid ]; then - exit 1 -fi - -echo $$ 2> /dev/null > /var/run/rc.suspend.pid - -# If you have troubles on suspending with PC-CARD modem, try this. -# See also contrib/pccardq.c (Only for PAO users). -# pccardq | awk -F '~' '$5 == "filled" && $4 ~ /uart/ \ -# { printf("pccardc power %d 0", $1); }' | sh - -# If a device driver has problems suspending, try unloading it before -# suspend and reloading it on resume. Example: -# kldunload usb - -/usr/bin/logger -t $subsystem suspend at `/bin/date +'%Y%m%d %H:%M:%S'` -/bin/sync && /bin/sync && /bin/sync -/bin/sleep 3 - -/bin/rm -f /var/run/rc.suspend.pid -if [ $subsystem = "apm" ]; then - /usr/sbin/zzz -else - # Notify the kernel to continue the suspend process - /usr/sbin/acpiconf -k 0 -fi - -exit 0 Property changes on: head/etc/rc.suspend ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/netstart =================================================================== --- head/etc/netstart (revision 336846) +++ head/etc/netstart (nonexistent) @@ -1,57 +0,0 @@ -#!/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 Property changes on: head/etc/netstart ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/rc.initdiskless =================================================================== --- head/etc/rc.initdiskless (revision 336846) +++ head/etc/rc.initdiskless (nonexistent) @@ -1,382 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 1999 Matt Dillon -# 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$ - -# On entry to this script the entire system consists of a read-only root -# mounted via NFS. The kernel has run BOOTP and configured an interface -# (otherwise it would not have been able to mount the NFS root!) -# -# We use the contents of /conf to create and populate memory filesystems -# that are mounted on top of this root to implement the writable -# (and host-specific) parts of the root filesystem, and other volatile -# filesystems. -# -# The hierarchy in /conf has the form /conf/T/M/ where M are directories -# for which memory filesystems will be created and filled, -# and T is one of the "template" directories below: -# -# base universal base, typically a replica of the original root; -# default secondary universal base, typically overriding some -# of the files in the original root; -# ${ipba} where ${ipba} is the assigned broadcast IP address -# bcast/${ipba} same as above -# ${class} where ${class} is a list of directories supplied by -# bootp/dhcp through the T134 option. -# ${ipba} and ${class} are typically used to configure features -# for group of diskless clients, or even individual features; -# ${ip} where ${ip} is the machine's assigned IP address, typically -# used to set host-specific features; -# ip/${ip} same as above -# -# Template directories are scanned in the order they are listed above, -# with each successive directory overriding (merged into) the previous one; -# non-existing directories are ignored. The subdirectory forms exist to -# help keep the top level /conf manageable in large installations. -# -# The existence of a directory /conf/T/M causes this script to create a -# memory filesystem mounted as /M on the client. -# -# Some files in /conf have special meaning, namely: -# -# Filename Action -# ---------------------------------------------------------------- -# /conf/T/M/remount -# The contents of the file is a mount command. E.g. if -# /conf/1.2.3.4/foo/remount contains "mount -o ro /dev/ad0s3", -# then /dev/ad0s3 will be mounted on /conf/1.2.3.4/foo/ -# -# /conf/T/M/remount_optional -# If this file exists, then failure to execute the mount -# command contained in /conf/T/M/remount is non-fatal. -# -# /conf/T/M/remount_subdir -# If this file exists, then the behaviour of /conf/T/M/remount -# changes as follows: -# 1. /conf/T/M/remount is invoked to mount the root of the -# filesystem where the configuration data exists on a -# temporary mountpoint. -# 2. /conf/T/M/remount_subdir is then invoked to mount a -# *subdirectory* of the filesystem mounted by -# /conf/T/M/remount on /conf/T/M/. -# -# /conf/T/M/diskless_remount -# The contents of the file points to an NFS filesystem, -# possibly followed by mount_nfs options. If the server name -# is omitted, the script will prepend the root path used when -# booting. E.g. if you booted from foo.com:/path/to/root, -# an entry for /conf/base/etc/diskless_remount could be any of -# foo.com:/path/to/root/etc -# /etc -o ro -# Because mount_nfs understands ".." in paths, it is -# possible to mount from locations above the NFS root with -# paths such as "/../../etc". -# -# /conf/T/M/md_size -# The contents of the file specifies the size of the memory -# filesystem to be created, in 512 byte blocks. -# The default size is 10240 blocks (5MB). E.g. if -# /conf/base/etc/md_size contains "30000" then a 15MB MFS -# will be created. In case of multiple entries for the same -# directory M, the last one in the scanning order is used. -# NOTE: If you only need to create a memory filesystem but not -# initialize it from a template, it is preferable to specify -# it in fstab e.g. as "md /tmp mfs -s=30m,rw 0 0" -# -# /conf/T/SUBDIR.cpio.gz -# The file is cpio'd into /SUBDIR (and a memory filesystem is -# created for /SUBDIR if necessary). The presence of this file -# prevents the copy from /conf/T/SUBDIR/ -# -# /conf/T/SUBDIR.remove -# The list of paths contained in the file are rm -rf'd -# relative to /SUBDIR. -# -# /conf/diskless_remount -# Similar to /conf/T/M/diskless_remount above, but allows -# all of /conf to be remounted. This can be used to allow -# multiple roots to share the same /conf. -# -# -# You will almost universally want to create the following files under /conf -# -# File Content -# ---------------------------- ---------------------------------- -# /conf/base/etc/md_size size of /etc filesystem -# /conf/base/etc/diskless_remount "/etc" -# /conf/default/etc/rc.conf generic diskless config parameters -# /conf/default/etc/fstab generic diskless fstab e.g. like this -# -# foo:/root_part / nfs ro 0 0 -# foo:/usr_part /usr nfs ro 0 0 -# foo:/home_part /home nfs rw 0 0 -# md /tmp mfs -s=30m,rw 0 0 -# md /var mfs -s=30m,rw 0 0 -# proc /proc procfs rw 0 0 -# -# plus, possibly, overrides for password files etc. -# -# NOTE! /var, /tmp, and /dev will be typically created elsewhere, e.g. -# as entries in the fstab as above. -# Those filesystems should not be specified in /conf. -# -# (end of documentation, now get to the real code) - -dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` - -# DEBUGGING -# log something on stdout if verbose. -o_verbose=0 # set to 1 or 2 if you want more debugging -log() { - [ ${o_verbose} -gt 0 ] && echo "*** $* ***" - [ ${o_verbose} -gt 1 ] && read -p "=== Press enter to continue" foo -} - -# chkerr: -# -# Routine to check for error -# -# checks error code and drops into shell on failure. -# if shell exits, terminates script as well as /etc/rc. -# if remount_optional exists under the mountpoint, skip this check. -# -chkerr() { - lastitem () ( n=$(($# - 1)) ; shift $n ; echo $1 ) - mountpoint="$(lastitem $2)" - [ -r $mountpoint/remount_optional ] && ( echo "$2 failed: ignoring due to remount_optional" ; return ) - case $1 in - 0) - ;; - *) - echo "$2 failed: dropping into /bin/sh" - /bin/sh - # RESUME - ;; - esac -} - -# The list of filesystems to umount after the copy -to_umount="" - -handle_remount() { # $1 = mount point - local nfspt mountopts b - b=$1 - log handle_remount $1 - [ -d $b -a -f $b/diskless_remount ] || return - read nfspt mountopts < $b/diskless_remount - log "nfspt ${nfspt} mountopts ${mountopts}" - # prepend the nfs root if not present - [ `expr "$nfspt" : '\(.\)'` = "/" ] && nfspt="${nfsroot}${nfspt}" - mount_nfs $mountopts $nfspt $b - chkerr $? "mount_nfs $nfspt $b" - to_umount="$b ${to_umount}" -} - -# Create a generic memory disk. -# The 'auto' parameter will attempt to use tmpfs(5), falls back to md(4). -# $1 is size in 512-byte sectors, $2 is the mount point. -mount_md() { - /sbin/mdmfs -s $1 auto $2 -} - -# Create the memory filesystem if it has not already been created -# -create_md() { - [ "x`eval echo \\$md_created_$1`" = "x" ] || return # only once - if [ "x`eval echo \\$md_size_$1`" = "x" ]; then - md_size=10240 - else - md_size=`eval echo \\$md_size_$1` - fi - log create_md $1 with size $md_size - mount_md $md_size /$1 - /bin/chmod 755 /$1 - eval md_created_$1=created -} - -# DEBUGGING -# -# set -v - -# Figure out our interface and IP. -# -bootp_ifc="" -bootp_ipa="" -bootp_ipbca="" -class="" -if [ ${dlv:=0} -ne 0 ] ; then - iflist=`ifconfig -l` - for i in ${iflist} ; do - set -- `ifconfig ${i}` - while [ $# -ge 1 ] ; do - if [ "${bootp_ifc}" = "" -a "$1" = "inet" ] ; then - bootp_ifc=${i} ; bootp_ipa=${2} ; shift - fi - if [ "${bootp_ipbca}" = "" -a "$1" = "broadcast" ] ; then - bootp_ipbca=$2; shift - fi - shift - done - if [ "${bootp_ifc}" != "" ] ; then - break - fi - done - # Get the values passed with the T134 bootp cookie. - class="`/sbin/sysctl -qn kern.bootp_cookie`" - - echo "Interface ${bootp_ifc} IP-Address ${bootp_ipa} Broadcast ${bootp_ipbca} ${class}" -fi - -log Figure out our NFS root path -# -set -- `mount -t nfs` -while [ $# -ge 1 ] ; do - if [ "$2" = "on" -a "$3" = "/" ]; then - nfsroot="$1" - break - fi - shift -done - -# The list of directories with template files -templates="base default" -if [ -n "${bootp_ipbca}" ]; then - templates="${templates} ${bootp_ipbca} bcast/${bootp_ipbca}" -fi -if [ -n "${class}" ]; then - templates="${templates} ${class}" -fi -if [ -n "${bootp_ipa}" ]; then - templates="${templates} ${bootp_ipa} ip/${bootp_ipa}" -fi - -# If /conf/diskless_remount exists, remount all of /conf. -handle_remount /conf - -# Resolve templates in /conf/base, /conf/default, /conf/${bootp_ipbca}, -# and /conf/${bootp_ipa}. For each subdirectory found within these -# directories: -# -# - calculate memory filesystem sizes. If the subdirectory (prior to -# NFS remounting) contains the file 'md_size', the contents specified -# in 512 byte sectors will be used to size the memory filesystem. Otherwise -# 8192 sectors (4MB) is used. -# -# - handle NFS remounts. If the subdirectory contains the file -# diskless_remount, the contents of the file is NFS mounted over -# the directory. For example /conf/base/etc/diskless_remount -# might contain 'myserver:/etc'. NFS remounts allow you to avoid -# having to dup your system directories in /conf. Your server must -# be sure to export those filesystems -alldirs, however. -# If the diskless_remount file contains a string beginning with a -# '/' it is assumed that the local nfsroot should be prepended to -# it before attemping to the remount. This allows the root to be -# relocated without needing to change the remount files. -# -log "templates are ${templates}" -for i in ${templates} ; do - for j in /conf/$i/* ; do - [ -d $j ] || continue - - # memory filesystem size specification - subdir=${j##*/} - [ -f $j/md_size ] && eval md_size_$subdir=`cat $j/md_size` - - # remount. Beware, the command is in the file itself! - if [ -f $j/remount ]; then - if [ -f $j/remount_subdir ]; then - k="/conf.tmp/$i/$subdir" - [ -d $k ] || continue - - # Mount the filesystem root where the config data is - # on the temporary mount point. - nfspt=`/bin/cat $j/remount` - $nfspt $k - chkerr $? "$nfspt $k" - - # Now use a nullfs mount to get the data where we - # really want to see it. - remount_subdir=`/bin/cat $j/remount_subdir` - remount_subdir_cmd="mount -t nullfs $k/$remount_subdir" - - $remount_subdir_cmd $j - chkerr $? "$remount_subdir_cmd $j" - - # XXX check order -- we must force $k to be unmounted - # after j, as j depends on k. - to_umount="$j $k ${to_umount}" - else - nfspt=`/bin/cat $j/remount` - $nfspt $j - chkerr $? "$nfspt $j" - to_umount="$j ${to_umount}" # XXX hope it is really a mount! - fi - fi - - # NFS remount - handle_remount $j - done -done - -# - Create all required MFS filesystems and populate them from -# our templates. Support both a direct template and a dir.cpio.gz -# archive. Support dir.remove files containing a list of relative -# paths to remove. -# -# The dir.cpio.gz form is there to make the copy process more efficient, -# so if the cpio archive is present, it prevents the files from dir/ -# from being copied. - -for i in ${templates} ; do - for j in /conf/$i/* ; do - subdir=${j##*/} - if [ -d $j -a ! -f $j.cpio.gz ]; then - create_md $subdir - cp -Rp $j/ /$subdir - fi - done - for j in /conf/$i/*.cpio.gz ; do - subdir=${j%*.cpio.gz} - subdir=${subdir##*/} - if [ -f $j ]; then - create_md $subdir - echo "Loading /$subdir from cpio archive $j" - (cd / ; /rescue/tar -xpf $j) - fi - done - for j in /conf/$i/*.remove ; do - subdir=${j%*.remove} - subdir=${subdir##*/} - if [ -f $j ]; then - # doubly sure it is a memory disk before rm -rf'ing - create_md $subdir - (cd /$subdir; rm -rf `/bin/cat $j`) - fi - done -done - -# umount partitions used to fill the memory filesystems -[ -n "${to_umount}" ] && umount $to_umount Property changes on: head/etc/rc.initdiskless ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/pccard_ether =================================================================== --- head/etc/pccard_ether (revision 336846) +++ head/etc/pccard_ether (nonexistent) @@ -1,147 +0,0 @@ -#!/bin/sh - -# -# $FreeBSD$ -# -# pccard_ether interfacename [start|stop|restart] -# -# example: pccard_ether fxp0 start -# - -. /etc/rc.subr -. /etc/network.subr - -name="pccard_ether" -start_precmd="checkauto" -start_cmd="pccard_ether_start" -stop_precmd="checkauto" -stop_cmd="pccard_ether_stop" -restart_precmd="checkauto" -restart_cmd="pccard_ether_restart" -startchildren_cmd="pccard_ether_startchildren" -stopchildren_cmd="pccard_ether_stopchildren" -extra_commands="startchildren stopchildren" - -setup_routes() -{ - # Add default route into $static_routes - case ${defaultrouter} in - [Nn][Oo] | '') - ;; - *) - static_routes="default ${static_routes}" - route_default="default ${defaultrouter}" - ;; - esac - - # Add private route for this interface into $static_routes - eval ifx_routes=\$static_routes_${ifn} - if [ -n "${ifx_routes}" ]; then - static_routes="${ifx_routes} ${static_routes}" - fi - - # Set up any static routes if specified - if [ -n "${static_routes}" ]; then - for i in ${static_routes}; do - eval route_args=\$route_${i} - route add ${route_args} - done - fi -} - -remove_routes() -{ - # Delete static route if specified - eval ifx_routes=\$static_routes_${ifn} - if [ -n "${ifx_routes}" ]; then - for i in ${ifx_routes}; do - eval route_args=\$route_${i} - route delete ${route_args} - done - fi -} - -checkauto() -{ - if [ -z "$rc_force" ]; then - # Ignore interfaces with the NOAUTO keyword - autoif $ifn || exit 0 - fi -} - -pccard_ether_start() -{ - ifexists $ifn || exit 1 - - if [ -z "$rc_force" ]; then - for uif in `ifconfig -ul`; do - if [ "${uif}" = "${ifn}" ]; then - # Interface is already up, so ignore it. - exit 0 - fi - done - fi - - /etc/rc.d/netif quietstart $ifn - - # Do route configuration if needed. - # XXX: should probably do this by calling rc.d/routing. - if [ -n "`ifconfig_getargs $ifn`" ]; then - if ! dhcpif $ifn; then - setup_routes - fi - fi - - # XXX: IPv6 setup should be done in some way. -} - -pccard_ether_stop() -{ - if [ -n "`ifconfig_getargs $ifn`" ]; then - if ! dhcpif $ifn; then - remove_routes - fi - fi - - /etc/rc.d/netif quietstop $ifn - - # clean ARP table - ifexists $ifn && arp -d -i $ifn -a -} - -pccard_ether_restart() -{ - # Hand implemented because the default implementation runs - # the equivalent of "$0 start; $0 stop" and this script - # doesn't support that syntax - pccard_ether_stop - pccard_ether_start -} - -pccard_ether_startchildren() -{ - for child in `get_if_var $ifn wlans_IF`; do - if ifexists $child; then - continue - fi - /etc/rc.d/netif quietstart $child - done -} - -pccard_ether_stopchildren() -{ - for child in `get_if_var $ifn wlans_IF`; do - /etc/rc.d/netif quietstop $child - done -} - -ifn=$1 -shift -if [ -z "$*" ]; then - args="start" -else - args=$* -fi - -load_rc_config pccard_ether -load_rc_config network -run_rc_command $args Property changes on: head/etc/pccard_ether ___________________________________________________________________ Deleted: svn:executable ## -1 +0,0 ## -* \ No newline at end of property Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/network.subr =================================================================== --- head/etc/network.subr (revision 336846) +++ head/etc/network.subr (nonexistent) @@ -1,1793 +0,0 @@ -# -# 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 - _exargs=$* - _retstr= - - case $_action:$_arg:$_exargs in - *:*--*:*) return ;; # invalid - tmp:*[0-9a-zA-Z]-[0-9a-zA-Z]*:*)# to be expanded - _action="alias" - ;; - *:*[0-9a-zA-Z]-[0-9a-zA-Z]*:*) # to be expanded - ;; - tmp:*:*prefixlen*) # already expanded w/ prefixlen option - echo ${_arg%/[0-9]*} $_exargs && return - ;; - tmp:*:*) # already expanded w/o prefixlen option - echo $_arg $_exargs && return - ;; - *:*:*prefixlen*) # already expanded w/ prefixlen option - echo inet6 ${_arg%/[0-9]*} $_exargs && return - ;; - *:*:*) # already expanded w/o prefixlen option - echo inet6 $_arg $_exargs && return - ;; - esac - - for _cidr in $_arg; do - _ipaddr="${_cidr%%/*}" - _plen="${_cidr##*/}" - - case $_action:$_ipaddr:$_cidr in - -alias:*:*) unset _plen ;; - *:$_cidr:$_ipaddr) unset _plen ;; - esac - - if [ "${_ipaddr%:*.*.*.*}" = "$_ipaddr" ]; then - # Handle !v4mapped && !v4compat addresses. - - # The default prefix length is 64. - case $_ipaddr:$_cidr in - $_cidr:$_ipaddr) _plen="64" ;; - esac - _ipleft=${_ipaddr%-*} - _ipright=${_ipaddr#*-} - _iplow=${_ipleft##*:} - _iphigh=${_ipright%%:*} - _ipleft=${_ipleft%:*} - _ipright=${_ipright#*:} - - if [ "$_iphigh" = "$_ipright" ]; then - unset _ipright - else - _ipright=:$_ipright - fi - - if [ -n "$_iplow" -a -n "$_iphigh" ]; then - _iplow=$((0x$_iplow)) - _iphigh=$((0x$_iphigh)) - _ipcount=$_iplow - while [ $_ipcount -le $_iphigh ]; do - _r=`printf "%s:%04x%s%s" \ - $_ipleft $_ipcount $_ipright \ - ${_plen:+/}$_plen` - _retstr="$_retstr $_r" - if [ $_ipcount -gt $(($_iplow + $netif_ipexpand_max)) ] - then - warn "Range specification is too large $(printf '(%s:%x%s-%s:%x%s)' "$_ipleft" "$_iplow" "$_ipright" "$_ipleft" "$_iphigh" "$_ipright"). $(printf '%s:%x%s-%s:%x%s' "$_ipleft" "$_iplow" "$_ipright" "$_ipleft" "$_ipcount" "$_ipright") was processed. Increase \$netif_ipexpand_max in rc.conf." - break - else - _ipcount=$(($_ipcount + 1)) - fi - done - else - _retstr="${_ipaddr}${_plen:+/}${_plen}" - fi - - for _c in $_retstr; do - ifalias_expand_addr_inet6 $_action $_c $_exargs - done - else - # v4mapped/v4compat should handle as an IPv4 alias - _ipv4part=${_ipaddr##*:} - - # Adjust prefix length if any. If not, set the - # default prefix length as 32. - case $_ipaddr:$_cidr in - $_cidr:$_ipaddr) _plen=32 ;; - *) _plen=$(($_plen - 96)) ;; - esac - - _retstr=`ifalias_expand_addr_inet \ - tmp ${_ipv4part}${_plen:+/}${_plen}` - for _c in $_retstr; do - ifalias_expand_addr_inet $_action $_c $_exargs - done - fi - done -} - -# ifalias_af_common_handler if af action args -# Helper function for ifalias_af_common(). -# -ifalias_af_common_handler() -{ - local _ret _if _af _action _args _c _tmpargs - - _ret=1 - _if=$1 - _af=$2 - _action=$3 - shift 3 - _args=$* - - case $_args in - ${_af}\ *) ;; - *) return ;; - esac - - # link(ether) does not support address removal. - case $_af:$_action in - link:-alias|ether:-alias) return ;; - esac - - _tmpargs= - for _c in $_args; do - case $_c in - ${_af}) - case $_tmpargs in - ${_af}\ *[0-9a-fA-F]-*) - ifalias_af_common_handler $_if $_af $_action \ - `ifalias_expand_addr $_af $_action ${_tmpargs#${_af}\ }` - ;; - ${_af}\ *) - ${IFCONFIG_CMD} $_if $_tmpargs $_action && _ret=0 - ;; - esac - _tmpargs=$_af - ;; - *) - _tmpargs="$_tmpargs $_c" - ;; - esac - done - # Process the last component if any. - if [ -n "$_tmpargs}" ]; then - case $_tmpargs in - ${_af}\ *[0-9a-fA-F]-*) - ifalias_af_common_handler $_if $_af $_action \ - `ifalias_expand_addr $_af $_action ${_tmpargs#${_af}\ }` - ;; - ${_af}\ *) - ${IFCONFIG_CMD} $_if $_tmpargs $_action && _ret=0 - ;; - esac - fi - - return $_ret -} - -# ifalias_af_common if af action -# Helper function for ifalias(). -# -ifalias_af_common() -{ - local _ret _if _af _action alias ifconfig_args _aliasn _c _tmpargs _iaf - local _vif _punct=".-/+" - - _ret=1 - _aliasn= - _if=$1 - _af=$2 - _action=$3 - - # Normalize $_if before using it in a pattern to list_vars() - ltr "$_if" "$_punct" "_" _vif - - # ifconfig_IF_aliasN which starts with $_af - for alias in `list_vars ifconfig_${_vif}_alias[0-9]\* | - sort_lite -nk1.$((9+${#_vif}+7))` - do - eval ifconfig_args=\"\$$alias\" - _iaf= - case $ifconfig_args in - inet\ *) _iaf=inet ;; - inet6\ *) _iaf=inet6 ;; - link\ *) _iaf=link ;; - ether\ *) _iaf=ether ;; - esac - - case ${_af}:${_action}:${_iaf}:"${ifconfig_args}" in - ${_af}:*:${_af}:*) - _aliasn="$_aliasn $ifconfig_args" - ;; - ${_af}:*:"":"") - break - ;; - inet:alias:"":*) - _aliasn="$_aliasn inet $ifconfig_args" - warn "\$${alias} needs leading" \ - "\"inet\" keyword for an IPv4 address." - esac - done - - # backward compatibility: ipv6_ifconfig_IF_aliasN. - case $_af in - inet6) - for alias in `list_vars ipv6_ifconfig_${_vif}_alias[0-9]\* | - sort_lite -nk1.$((14+${#_vif}+7))` - do - eval ifconfig_args=\"\$$alias\" - case ${_action}:"${ifconfig_args}" in - *:"") - break - ;; - alias:*) - _aliasn="${_aliasn} inet6 ${ifconfig_args}" - warn "\$${alias} is obsolete. " \ - "Use ifconfig_${_vif}_aliasN instead." - ;; - esac - done - esac - - # backward compatibility: ipv4_addrs_IF. - for _tmpargs in `get_if_var $_if ipv4_addrs_IF`; do - _aliasn="$_aliasn inet $_tmpargs" - done - - # Handle ifconfig_IF_aliases, ifconfig_IF_aliasN, and the others. - _tmpargs= - for _c in `get_if_var $_if ifconfig_IF_aliases` $_aliasn; do - case $_c in - inet|inet6|link|ether) - case $_tmpargs in - ${_af}\ *) - eval ifalias_af_common_handler $_if $_af $_action $_tmpargs && _ret=0 - ;; - esac - _tmpargs=$_c - ;; - *) - _tmpargs="$_tmpargs $_c" - esac - done - # Process the last component - case $_tmpargs in - ${_af}\ *) - ifalias_af_common_handler $_if $_af $_action $_tmpargs && _ret=0 - ;; - esac - - return $_ret -} - -# ipv6_prefix_hostid_addr_common if action -# Add or remove IPv6 prefix + hostid addr on the interface $if -# -ipv6_prefix_hostid_addr_common() -{ - local _if _action prefix j - _if=$1 - _action=$2 - prefix=`get_if_var ${_if} ipv6_prefix_IF` - - if [ -n "${prefix}" ]; then - for j in ${prefix}; do - # The default prefixlen is 64. - plen=${j#*/} - case $j:$plen in - $plen:$j) plen=64 ;; - *) j=${j%/*} ;; - esac - - # Normalize the last part by removing ":" - j=${j%::*} - j=${j%:} - ${IFCONFIG_CMD} ${_if} inet6 $j:: \ - prefixlen $plen eui64 ${_action} - - # if I am a router, add subnet router - # anycast address (RFC 2373). - if checkyesno ipv6_gateway_enable; then - ${IFCONFIG_CMD} ${_if} inet6 $j:: \ - prefixlen $plen ${_action} anycast - fi - done - fi -} - -# ipv6_accept_rtadv_up if -# Enable accepting Router Advertisement and send Router -# Solicitation message -ipv6_accept_rtadv_up() -{ - if ipv6_autoconfif $1; then - ${IFCONFIG_CMD} $1 inet6 accept_rtadv up - if ! checkyesno rtsold_enable; then - rtsol ${rtsol_flags} $1 - fi - fi -} - -# ipv6_accept_rtadv_down if -# Disable accepting Router Advertisement -ipv6_accept_rtadv_down() -{ - if ipv6_autoconfif $1; then - ${IFCONFIG_CMD} $1 inet6 -accept_rtadv - fi -} - -# 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 - else - return 1 - fi -} - -# ifscript_down if -# Evaluate a shutdown script for the $if interface. -# It returns 0 if a script was found and processed or -# 1 if no script was found. -# -ifscript_down() -{ - if [ -r /etc/stop_if.$1 ]; then - . /etc/stop_if.$1 - return 0 - else - return 1 - fi -} - -# wlan_up -# Create IEEE802.11 interfaces. -# -wlan_up() -{ - local _list _iflist parent child_wlans child create_args debug_flags - _list= - _iflist=$* - - # Parse wlans_$parent="$child ..." - for parent in `set | sed -nE 's/wlans_([a-z]+[0-9]+)=.*/\1/p'`; do - child_wlans=`get_if_var $parent wlans_IF` - for child in ${child_wlans}; do - create_args="wlandev $parent `get_if_var $child create_args_IF`" - debug_flags="`get_if_var $child wlandebug_IF`" - case $_iflist in - ""|$child|$child\ *|*\ $child\ *|*\ $child) ;; - *) continue ;; - esac - # Skip if ${child} already exists. - if ${IFCONFIG_CMD} $child > /dev/null 2>&1; then - continue - fi - if expr $child : 'wlan[0-9][0-9]*$' >/dev/null 2>&1; then - ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 - else - ${IFCONFIG_CMD} wlan create ${create_args} name $child && cfg=0 - fi - if [ $? -eq 0 ]; then - _list="$_list $child" - fi - if [ -n "${debug_flags}" ]; then - wlandebug -i $child ${debug_flags} - fi - done - done - if [ -n "${_list# }" ]; then - echo "Created wlan(4) interfaces: ${_list# }." - fi - debug "Created wlan(4)s: ${_list# }" -} - -# wlan_down -# Destroy IEEE802.11 interfaces. -# -wlan_down() -{ - local _list _iflist parent child_wlans child - _list= - _iflist=$* - - # Parse wlans_$parent="$child ..." - for parent in `set | sed -nE 's/wlans_([a-z]+[0-9]+)=.*/\1/p'`; do - child_wlans=`get_if_var $parent wlans_IF` - for child in ${child_wlans}; do - case $_iflist in - ""|$child|$child\ *|*\ $child\ *|*\ $child) ;; - *) continue ;; - esac - # Skip if ${child} doesn't exists. - if ! ${IFCONFIG_CMD} $child > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} -n ${child} destroy - if [ $? -eq 0 ]; then - _list="$_list $child" - fi - done - done - if [ -n "${_list# }" ]; then - echo "Destroyed wlan(4) interfaces: ${_list# }." - fi - debug "Destroyed wlan(4)s: ${_list# }" -} - -# clone_up -# Create cloneable interfaces. -# -clone_up() -{ - local _list ifn ifopt _iflist _n tmpargs - _list= - _iflist=$* - - # create_args_IF - for ifn in ${cloned_interfaces}; do - # Parse ifn:ifopt. - OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS - case $_iflist in - ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; - *) continue ;; - esac - case $ifn in - epair[0-9]*) - # epair(4) uses epair[0-9] for creation and - # epair[0-9][ab] for configuration. - # - # Skip if ${ifn}a or ${ifn}b already exist. - if ${IFCONFIG_CMD} ${ifn}a > /dev/null 2>&1; then - continue - elif ${IFCONFIG_CMD} ${ifn}b > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} ${ifn} create \ - `get_if_var ${ifn} create_args_IF` - if [ $? -eq 0 ]; then - _list="$_list ${ifn}a ${ifn}b" - fi - ;; - *) - # Skip if ${ifn} already exists. - if ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} ${ifn} create \ - `get_if_var ${ifn} create_args_IF` - if [ $? -eq 0 ]; then - _list="$_list $ifn" - fi - esac - done - if [ -n "$gif_interfaces" ]; then - warn "\$gif_interfaces is obsolete. Use \$cloned_interfaces instead." - fi - for ifn in ${gif_interfaces}; do - # Parse ifn:ifopt. - OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS - case $_iflist in - ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; - *) continue ;; - esac - # Skip if ifn already exists. - if ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then - continue - fi - case $ifn in - gif[0-9]*) - ${IFCONFIG_CMD} $ifn create - ;; - *) - _n=$(${IFCONFIG_CMD} gif create) - ${IFCONFIG_CMD} $_n name $ifn - ;; - esac - if [ $? -eq 0 ]; then - _list="$_list $ifn" - fi - tmpargs=$(get_if_var $ifn gifconfig_IF) - eval ifconfig_${ifn}=\"tunnel \$tmpargs\" - done - if [ -n "${_list# }" ]; then - echo "Created clone interfaces: ${_list# }." - fi - debug "Cloned: ${_list# }" -} - -# clone_down -# Destroy cloned interfaces. Destroyed interfaces are echoed to -# standard output. -# -clone_down() -{ - local _list ifn _difn ifopt _iflist _sticky - _list= - _iflist=$* - - : ${cloned_interfaces_sticky:=NO} - if checkyesno cloned_interfaces_sticky; then - _sticky=1 - else - _sticky=0 - fi - for ifn in ${cloned_interfaces} ${gif_interfaces}; do - # Parse ifn:ifopt. - OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS - case $ifopt:$_sticky in - sticky:*) continue ;; # :sticky => not destroy - nosticky:*) ;; # :nosticky => destroy - *:1) continue ;; # global sticky knob == 1 - esac - case $_iflist in - ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; - *) continue ;; - esac - case $ifn in - epair[0-9]*) - # Note: epair(4) uses epair[0-9] for removal and - # epair[0-9][ab] for configuration. - # - # Skip if both of ${ifn}a and ${ifn}b do not exist. - if ${IFCONFIG_CMD} ${ifn}a > /dev/null 2>&1; then - _difn=${ifn}a - elif ${IFCONFIG_CMD} ${ifn}b > /dev/null 2>&1; then - _difn=${ifn}b - else - continue - fi - ${IFCONFIG_CMD} -n $_difn destroy - if [ $? -eq 0 ]; then - _list="$_list ${ifn}a ${ifn}b" - fi - ;; - *) - # Skip if ifn does not exist. - if ! ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then - continue - fi - ${IFCONFIG_CMD} -n ${ifn} destroy - if [ $? -eq 0 ]; then - _list="$_list $ifn" - fi - ;; - esac - done - if [ -n "${_list# }" ]; then - echo "Destroyed clone interfaces: ${_list# }." - fi - debug "Destroyed clones: ${_list# }" -} - -# childif_create -# Create and configure child interfaces. Return 0 if child -# interfaces are created. -# -# XXXGL: the wlan code in this functions is superseded by wlan_up(), -# and will go away soon. -# -childif_create() -{ - local cfg child child_vlans child_wlans create_args debug_flags ifn i - cfg=1 - ifn=$1 - - # Create wireless interfaces - child_wlans=`get_if_var $ifn wlans_IF` - - for child in ${child_wlans}; do - create_args="wlandev $ifn `get_if_var $child create_args_IF`" - debug_flags="`get_if_var $child wlandebug_IF`" - - if expr $child : 'wlan[0-9][0-9]*$' >/dev/null 2>&1; then - ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 - if [ -n "${debug_flags}" ]; then - wlandebug -i $child ${debug_flags} - fi - else - i=`${IFCONFIG_CMD} wlan create ${create_args}` - if [ -n "${debug_flags}" ]; then - wlandebug -i $i ${debug_flags} - fi - ${IFCONFIG_CMD} $i name $child && cfg=0 - fi - if autoif $child; then - ifn_start $child - fi - done - - # Create vlan interfaces - child_vlans=`get_if_var $ifn vlans_IF` - - if [ -n "${child_vlans}" ]; then - load_kld if_vlan - fi - - for child in ${child_vlans}; do - if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then - child="${ifn}.${child}" - create_args=`get_if_var $child create_args_IF` - ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 - else - create_args="vlandev $ifn `get_if_var $child create_args_IF`" - if expr $child : 'vlan[0-9][0-9]*$' >/dev/null 2>&1; then - ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 - else - i=`${IFCONFIG_CMD} vlan create ${create_args}` - ${IFCONFIG_CMD} $i name $child && cfg=0 - fi - fi - if autoif $child; then - ifn_start $child - fi - done - - return ${cfg} -} - -# childif_destroy -# Destroy child interfaces. -# -childif_destroy() -{ - local cfg child child_vlans child_wlans ifn - cfg=1 - - child_wlans=`get_if_var $ifn wlans_IF` - for child in ${child_wlans}; do - if ! ifexists $child; then - continue - fi - ${IFCONFIG_CMD} -n $child destroy && cfg=0 - done - - child_vlans=`get_if_var $ifn vlans_IF` - for child in ${child_vlans}; do - if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then - child="${ifn}.${child}" - fi - if ! ifexists $child; then - continue - fi - ${IFCONFIG_CMD} -n $child destroy && cfg=0 - done - - return ${cfg} -} - -# ng_mkpeer -# Create netgraph nodes. -# -ng_mkpeer() -{ - ngctl -f - 2> /dev/null </dev/null`; do - case $line in - *interface:*) - defif=${line##*: } - ;; - esac - done - IFS=${oldifs} - - echo $defif -} - -# hexdigit arg -# Echo decimal number $arg (single digit) in hexadecimal format. -hexdigit() -{ - printf '%x\n' "$1" -} - -# hexprint arg -# Echo decimal number $arg (multiple digits) in hexadecimal format. -hexprint() -{ - printf '%x\n' "$1" -} - -is_wired_interface() -{ - local media - - case `${IFCONFIG_CMD} $1 2>/dev/null` in - *media:?Ethernet*) media=Ethernet ;; - esac - - test "$media" = "Ethernet" -} - -# network6_getladdr if [flag] -# Echo link-local address from $if if any. -# If flag is defined, tentative ones will be excluded. -network6_getladdr() -{ - local _if _flag proto addr rest - _if=$1 - _flag=$2 - - ${IFCONFIG_CMD} $_if 2>/dev/null | while read proto addr rest; do - case "${proto}/${addr}/${_flag}/${rest}" in - inet6/fe80::*//*) - echo ${addr} - ;; - inet6/fe80:://*tentative*) # w/o flag - sleep `${SYSCTL_N} net.inet6.ip6.dad_count` - network6_getladdr $_if $_flags - ;; - inet6/fe80::/*/*tentative*) # w/ flag - echo ${addr} - ;; - *) - continue - ;; - esac - - return - done -} Property changes on: head/etc/network.subr ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/etc/defaults/rc.conf =================================================================== --- head/etc/defaults/rc.conf (revision 336846) +++ head/etc/defaults/rc.conf (nonexistent) @@ -1,749 +0,0 @@ -#!/bin/sh - -# This is rc.conf - a file full of useful variables that you can set -# to change the default startup behavior of your system. You should -# not edit this file! Put any overrides into one of the ${rc_conf_files} -# instead and you will be able to update these defaults later without -# spamming your local configuration information. -# -# The ${rc_conf_files} files should only contain values which override -# values set in this file. This eases the upgrade path when defaults -# are changed and new features are added. -# -# All arguments must be in double or single quotes. -# -# For a more detailed explanation of all the rc.conf variables, please -# refer to the rc.conf(5) manual page. -# -# $FreeBSD$ - -############################################################## -### Important initial Boot-time options #################### -############################################################## - -# rc_debug can't be set here without interferring with rc.subr's setting it -# when the kenv variable rc.debug is set. -#rc_debug="NO" # Set to YES to enable debugging output from rc.d -rc_info="NO" # Enables display of informational messages at boot. -rc_startmsgs="YES" # Show "Starting foo:" messages at boot -rcshutdown_timeout="90" # Seconds to wait before terminating rc.shutdown -early_late_divider="FILESYSTEMS" # Script that separates early/late - # stages of the boot process. Make sure you know - # the ramifications if you change this. - # See rc.conf(5) for more details. -always_force_depends="NO" # Set to check that indicated dependencies are - # running during boot (can increase boot time). - -apm_enable="NO" # Set to YES to enable APM BIOS functions (or NO). -apmd_enable="NO" # Run apmd to handle APM event from userland. -apmd_flags="" # Flags to apmd (if enabled). -ddb_enable="NO" # Set to YES to load ddb scripts at boot. -ddb_config="/etc/ddb.conf" # ddb(8) config file. -devd_enable="YES" # Run devd, to trigger programs on device tree changes. -devd_flags="" # Additional flags for devd(8). -devmatch_enable="YES" # Demand load kernel modules based on device ids. -#kld_list="" # Kernel modules to load after local disks are mounted -kldxref_enable="YES" # Build linker.hints files with kldxref(8). -kldxref_clobber="NO" # Overwrite old linker.hints at boot. -kldxref_module_path="" # Override kern.module_path. A ';'-delimited list. -powerd_enable="NO" # Run powerd to lower our power usage. -powerd_flags="" # Flags to powerd (if enabled). -tmpmfs="AUTO" # Set to YES to always create an mfs /tmp, NO to never -tmpsize="20m" # Size of mfs /tmp if created -tmpmfs_flags="-S" # Extra mdmfs options for the mfs /tmp -varmfs="AUTO" # Set to YES to always create an mfs /var, NO to never -varsize="32m" # Size of mfs /var if created -varmfs_flags="-S" # Extra mount options for the mfs /var -mfs_type="auto" # "md", "tmpfs", "auto" to prefer tmpfs with md as fallback -populate_var="AUTO" # Set to YES to always (re)populate /var, NO to never -cleanvar_enable="YES" # Clean the /var directory -local_startup="/usr/local/etc/rc.d" # startup script dirs. -script_name_sep=" " # Change if your startup scripts' names contain spaces -rc_conf_files="/etc/rc.conf /etc/rc.conf.local" - -# ZFS support -zfs_enable="NO" # Set to YES to automatically mount ZFS file systems - -# ZFSD support -zfsd_enable="NO" # Set to YES to automatically start the ZFS fault - # management daemon. - -gptboot_enable="YES" # GPT boot success/failure reporting. - -# Experimental - test before enabling -gbde_autoattach_all="NO" # YES automatically mounts gbde devices from fstab -gbde_devices="NO" # Devices to automatically attach (list, or AUTO) -gbde_attach_attempts="3" # Number of times to attempt attaching gbde devices -gbde_lockdir="/etc" # Where to look for gbde lockfiles - -# GELI disk encryption configuration. -geli_devices="" # List of devices to automatically attach in addition to - # GELI devices listed in /etc/fstab. -geli_groups="" # List of groups containing devices to automatically - # attach with the same keyfiles and passphrase -geli_tries="" # Number of times to attempt attaching geli device. - # If empty, kern.geom.eli.tries will be used. -geli_default_flags="" # Default flags for geli(8). -geli_autodetach="YES" # Automatically detach on last close. - # Providers are marked as such when all file systems are - # mounted. -# Example use. -#geli_devices="da1 mirror/home" -#geli_da1_flags="-p -k /etc/geli/da1.keys" -#geli_da1_autodetach="NO" -#geli_mirror_home_flags="-k /etc/geli/home.keys" -#geli_groups="storage backup" -#geli_storage_flags="-k /etc/geli/storage.keys" -#geli_storage_devices="ada0 ada1" -#geli_backup_flags="-j /etc/geli/backup.passfile -k /etc/geli/backup.keys" -#geli_backup_devices="ada2 ada3" - -root_rw_mount="YES" # Set to NO to inhibit remounting root read-write. -root_hold_delay="30" # Time to wait for root mount hold release. -fsck_y_enable="NO" # Set to YES to do fsck -y if the initial preen fails. -fsck_y_flags="-T ffs:-R -T ufs:-R" # Additional flags for fsck -y -background_fsck="YES" # Attempt to run fsck in the background where possible. -background_fsck_delay="60" # Time to wait (seconds) before starting the fsck. -growfs_enable="NO" # Set to YES to attempt to grow the root filesystem on boot -netfs_types="nfs:NFS smbfs:SMB" # Net filesystems. -extra_netfs_types="NO" # List of network extra filesystem types for delayed - # mount at startup (or NO). - -############################################################## -### Network configuration sub-section ###################### -############################################################## - -### Basic network and firewall/security options: ### -hostname="" # Set this! -hostid_enable="YES" # Set host UUID. -hostid_file="/etc/hostid" # File with hostuuid. -nisdomainname="NO" # Set to NIS domain if using NIS (or NO). -dhclient_program="/sbin/dhclient" # Path to dhcp client program. -dhclient_flags="" # Extra flags to pass to dhcp client. -#dhclient_flags_fxp0="" # Extra dhclient flags for fxp0 only -background_dhclient="NO" # Start dhcp client in the background. -#background_dhclient_fxp0="YES" # Start dhcp client on fxp0 in the background. -synchronous_dhclient="NO" # Start dhclient directly on configured - # interfaces during startup. -defaultroute_delay="30" # Time to wait for a default route on a DHCP interface. -defaultroute_carrier_delay="5" # Time to wait for carrier while waiting for a default route. -netif_enable="YES" # Set to YES to initialize network interfaces -netif_ipexpand_max="2048" # Maximum number of IP addrs in a range spec. -wpa_supplicant_program="/usr/sbin/wpa_supplicant" -wpa_supplicant_flags="-s" # Extra flags to pass to wpa_supplicant -wpa_supplicant_conf_file="/etc/wpa_supplicant.conf" -# -firewall_enable="NO" # Set to YES to enable firewall functionality -firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall -firewall_type="UNKNOWN" # Firewall type (see /etc/rc.firewall) -firewall_quiet="NO" # Set to YES to suppress rule display -firewall_logging="NO" # Set to YES to enable events logging -firewall_logif="NO" # Set to YES to create logging-pseudo interface -firewall_flags="" # Flags passed to ipfw when type is a file -firewall_coscripts="" # List of executables/scripts to run after - # firewall starts/stops -firewall_client_net="192.0.2.0/24" # IPv4 Network address for "client" - # firewall. -#firewall_client_net_ipv6="2001:db8:2:1::/64" # IPv6 network prefix for - # "client" firewall. -firewall_simple_iif="ed1" # Inside network interface for "simple" - # firewall. -firewall_simple_inet="192.0.2.16/28" # Inside network address for "simple" - # firewall. -firewall_simple_oif="ed0" # Outside network interface for "simple" - # firewall. -firewall_simple_onet="192.0.2.0/28" # Outside network address for "simple" - # firewall. -#firewall_simple_iif_ipv6="ed1" # Inside IPv6 network interface for "simple" - # firewall. -#firewall_simple_inet_ipv6="2001:db8:2:800::/56" # Inside IPv6 network prefix - # for "simple" firewall. -#firewall_simple_oif_ipv6="ed0" # Outside IPv6 network interface for "simple" - # firewall. -#firewall_simple_onet_ipv6="2001:db8:2:0::/56" # Outside IPv6 network prefix - # for "simple" firewall. -firewall_myservices="" # List of TCP ports on which this host - # offers services for "workstation" firewall. -firewall_allowservices="" # List of IPs which have access to - # $firewall_myservices for "workstation" - # firewall. -firewall_trusted="" # List of IPs which have full access to this - # host for "workstation" firewall. -firewall_logdeny="NO" # Set to YES to log default denied incoming - # packets for "workstation" firewall. -firewall_nologports="135-139,445 1026,1027 1433,1434" # List of TCP/UDP ports - # for which denied incoming packets are not - # logged for "workstation" firewall. -firewall_nat_enable="NO" # Enable kernel NAT (if firewall_enable == YES) -firewall_nat_interface="" # Public interface or IPaddress to use -firewall_nat_flags="" # Additional configuration parameters -dummynet_enable="NO" # Load the dummynet(4) module -ipfw_netflow_enable="NO" # Enable netflow logging via ng_netflow -ip_portrange_first="NO" # Set first dynamically allocated port -ip_portrange_last="NO" # Set last dynamically allocated port -ike_enable="NO" # Enable IKE daemon (usually racoon or isakmpd) -ike_program="/usr/local/sbin/isakmpd" # Path to IKE daemon -ike_flags="" # Additional flags for IKE daemon -ipsec_enable="NO" # Set to YES to run setkey on ipsec_file -ipsec_file="/etc/ipsec.conf" # Name of config file for setkey -natd_program="/sbin/natd" # path to natd, if you want a different one. -natd_enable="NO" # Enable natd (if firewall_enable == YES). -natd_interface="" # Public interface or IPaddress to use. -natd_flags="" # Additional flags for natd. -ipfilter_enable="NO" # Set to YES to enable ipfilter functionality -ipfilter_program="/sbin/ipf" # where the ipfilter program lives -ipfilter_rules="/etc/ipf.rules" # rules definition file for ipfilter, see - # /usr/src/contrib/ipfilter/rules for examples -ipfilter_flags="" # additional flags for ipfilter -ipnat_enable="NO" # Set to YES to enable ipnat functionality -ipnat_program="/sbin/ipnat" # where the ipnat program lives -ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat -ipnat_flags="" # additional flags for ipnat -ipmon_enable="NO" # Set to YES for ipmon; needs ipfilter or ipnat -ipmon_program="/sbin/ipmon" # where the ipfilter monitor program lives -ipmon_flags="-Ds" # typically "-Ds" or "-D /var/log/ipflog" -ipfs_enable="NO" # Set to YES to enable saving and restoring - # of state tables at shutdown and boot -ipfs_program="/sbin/ipfs" # where the ipfs program lives -ipfs_flags="" # additional flags for ipfs -pf_enable="NO" # Set to YES to enable packet filter (pf) -pf_rules="/etc/pf.conf" # rules definition file for pf -pf_program="/sbin/pfctl" # where the pfctl program lives -pf_flags="" # additional flags for pfctl -pflog_enable="NO" # Set to YES to enable packet filter logging -pflog_logfile="/var/log/pflog" # where pflogd should store the logfile -pflog_program="/sbin/pflogd" # where the pflogd program lives -pflog_flags="" # additional flags for pflogd -ftpproxy_enable="NO" # Set to YES to enable ftp-proxy(8) for pf -ftpproxy_flags="" # additional flags for ftp-proxy(8) -pfsync_enable="NO" # Expose pf state to other hosts for syncing -pfsync_syncdev="" # Interface for pfsync to work through -pfsync_syncpeer="" # IP address of pfsync peer host -pfsync_ifconfig="" # Additional options to ifconfig(8) for pfsync -tcp_extensions="YES" # Set to NO to turn off RFC1323 extensions. -log_in_vain="0" # >=1 to log connects to ports w/o listeners. -tcp_keepalive="YES" # Enable stale TCP connection timeout (or NO). -tcp_drop_synfin="NO" # Set to YES to drop TCP packets with SYN+FIN - # NOTE: this violates the TCP specification -icmp_drop_redirect="NO" # Set to YES to ignore ICMP REDIRECT packets -icmp_log_redirect="NO" # Set to YES to log ICMP REDIRECT packets -network_interfaces="auto" # List of network interfaces (or "auto"). -cloned_interfaces="" # List of cloned network interfaces to create. -#cloned_interfaces="gif0 gif1 gif2 gif3" # Pre-cloning GENERIC config. -#ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. -#ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry. -#ifconfig_ed0_ipv6="inet6 2001:db8:1::1 prefixlen 64" # Sample IPv6 addr entry -#ifconfig_ed0_alias0="inet6 2001:db8:2::1 prefixlen 64" # Sample IPv6 alias -#ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0. -#vlans_fxp0="101 vlan0" # vlan(4) interfaces for fxp0 device -#create_args_vlan0="vlan 102" # vlan tag for vlan0 device -#wlans_ath0="wlan0" # wlan(4) interfaces for ath0 device -#wlandebug_wlan0="scan+auth+assoc" # Set debug flags with wlandebug(8) -#ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry. -# -#autobridge_interfaces="bridge0" # List of bridges to check -#autobridge_bridge0="tap* vlan0" # Interface glob to automatically add to the bridge -# -# If you have any sppp(4) interfaces above, you might also want to set -# the following parameters. Refer to spppcontrol(8) for their meaning. -sppp_interfaces="" # List of sppp interfaces. -#sppp_interfaces="...0" # example: sppp over ... -#spppconfig_...0="authproto=chap myauthname=foo myauthsecret='top secret' hisauthname=some-gw hisauthsecret='another secret'" - -# User ppp configuration. -ppp_enable="NO" # Start user-ppp (or NO). -ppp_program="/usr/sbin/ppp" # Path to user-ppp program. -ppp_mode="auto" # Choice of "auto", "ddial", "direct" or "dedicated". - # For details see man page for ppp(8). Default is auto. -ppp_nat="YES" # Use PPP's internal network address translation or NO. -ppp_profile="papchap" # Which profile to use from /etc/ppp/ppp.conf. -ppp_user="root" # Which user to run ppp as - -# Start multiple instances of ppp at boot time -#ppp_profile="profile1 profile2 profile3" # Which profiles to use -#ppp_profile1_mode="ddial" # Override ppp mode for profile1 -#ppp_profile2_nat="NO" # Override nat mode for profile2 -# profile3 uses default ppp_mode and ppp_nat - -### Network daemon (miscellaneous) ### -hostapd_enable="NO" # Run hostap daemon. -syslogd_enable="YES" # Run syslog daemon (or NO). -syslogd_program="/usr/sbin/syslogd" # path to syslogd, if you want a different one. -syslogd_flags="-s" # Flags to syslogd (if enabled). -syslogd_oomprotect="YES" # Don't kill syslogd when swap space is exhausted. -altlog_proglist="" # List of chrooted applicatioins in /var -inetd_enable="NO" # Run the network daemon dispatcher (YES/NO). -inetd_program="/usr/sbin/inetd" # path to inetd, if you want a different one. -inetd_flags="-wW -C 60" # Optional flags to inetd -iscsid_enable="NO" # iSCSI initiator daemon. -iscsictl_enable="NO" # iSCSI initiator autostart. -iscsictl_flags="-Aa" # Optional flags to iscsictl. -hastd_enable="NO" # Run the HAST daemon (YES/NO). -hastd_program="/sbin/hastd" # path to hastd, if you want a different one. -hastd_flags="" # Optional flags to hastd. -ctld_enable="NO" # CAM Target Layer / iSCSI target daemon. -local_unbound_enable="NO" # local caching resolver -blacklistd_enable="NO" # Run blacklistd daemon (YES/NO). -blacklistd_flags="" # Optional flags for blacklistd(8). -resolv_enable="YES" # Enable resolv / resolvconf - -# -# kerberos. Do not run the admin daemons on slave servers -# -kdc_enable="NO" # Run a kerberos 5 KDC (or NO). -kdc_program="/usr/libexec/kdc" # path to kerberos 5 KDC -kdc_flags="" # Additional flags to the kerberos 5 KDC -kadmind_enable="NO" # Run kadmind (or NO) -kadmind_program="/usr/libexec/kadmind" # path to kadmind -kpasswdd_enable="NO" # Run kpasswdd (or NO) -kpasswdd_program="/usr/libexec/kpasswdd" # path to kpasswdd -kfd_enable="NO" # Run kfd (or NO) -kfd_program="/usr/libexec/kfd" # path to kerberos 5 kfd daemon -kfd_flags="" -ipropd_master_enable="NO" # Run Heimdal incremental propagation daemon - # (master daemon). -ipropd_master_program="/usr/libexec/ipropd-master" -ipropd_master_flags="" # Flags to ipropd-master. -ipropd_master_keytab="/etc/krb5.keytab" # keytab for ipropd-master. -ipropd_master_slaves="" # slave node names used for /var/heimdal/slaves. -ipropd_slave_enable="NO" # Run Heimdal incremental propagation daemon - # (slave daemon). -ipropd_slave_program="/usr/libexec/ipropd-slave" -ipropd_slave_flags="" # Flags to ipropd-slave. -ipropd_slave_keytab="/etc/krb5.keytab" # keytab for ipropd-slave. -ipropd_slave_master="" # master node name. - -gssd_enable="NO" # Run the gssd daemon (or NO). -gssd_program="/usr/sbin/gssd" # Path to gssd. -gssd_flags="" # Flags for gssd. - -rwhod_enable="NO" # Run the rwho daemon (or NO). -rwhod_flags="" # Flags for rwhod -rarpd_enable="NO" # Run rarpd (or NO). -rarpd_flags="-a" # Flags to rarpd. -bootparamd_enable="NO" # Run bootparamd (or NO). -bootparamd_flags="" # Flags to bootparamd -pppoed_enable="NO" # Run the PPP over Ethernet daemon. -pppoed_provider="*" # Provider and ppp(8) config file entry. -pppoed_flags="-P /var/run/pppoed.pid" # Flags to pppoed (if enabled). -pppoed_interface="fxp0" # The interface that pppoed runs on. -sshd_enable="NO" # Enable sshd -sshd_program="/usr/sbin/sshd" # path to sshd, if you want a different one. -sshd_flags="" # Additional flags for sshd. -ftpd_enable="NO" # Enable stand-alone ftpd. -ftpd_program="/usr/libexec/ftpd" # Path to ftpd, if you want a different one. -ftpd_flags="" # Additional flags to stand-alone ftpd. - -### Network daemon (NFS): All need rpcbind_enable="YES" ### -amd_enable="NO" # Run amd service with $amd_flags (or NO). -amd_program="/usr/sbin/amd" # path to amd, if you want a different one. -amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" -amd_map_program="NO" # Can be set to "ypcat -k amd.master" -autofs_enable="NO" # Run autofs daemons. -automount_flags="" # Flags to automount(8) (if autofs enabled). -automountd_flags="" # Flags to automountd(8) (if autofs enabled). -autounmountd_flags="" # Flags to autounmountd(8) (if autofs enabled). -nfs_client_enable="NO" # This host is an NFS client (or NO). -nfs_access_cache="60" # Client cache timeout in seconds -nfs_server_enable="NO" # This host is an NFS server (or NO). -nfs_server_flags="-u -t" # Flags to nfsd (if enabled). -nfs_server_managegids="NO" # The NFS server maps gids for AUTH_SYS (or NO). -mountd_enable="NO" # Run mountd (or NO). -mountd_flags="-r -S" # Flags to mountd (if NFS server enabled). -weak_mountd_authentication="NO" # Allow non-root mount requests to be served. -nfs_reserved_port_only="NO" # Provide NFS only on secure port (or NO). -nfs_bufpackets="" # bufspace (in packets) for client -rpc_lockd_enable="NO" # Run NFS rpc.lockd needed for client/server. -rpc_lockd_flags="" # Flags to rpc.lockd (if enabled). -rpc_statd_enable="NO" # Run NFS rpc.statd needed for client/server. -rpc_statd_flags="" # Flags to rpc.statd (if enabled). -rpcbind_enable="NO" # Run the portmapper service (YES/NO). -rpcbind_program="/usr/sbin/rpcbind" # path to rpcbind, if you want a different one. -rpcbind_flags="" # Flags to rpcbind (if enabled). -rpc_ypupdated_enable="NO" # Run if NIS master and SecureRPC (or NO). -keyserv_enable="NO" # Run the SecureRPC keyserver (or NO). -keyserv_flags="" # Flags to keyserv (if enabled). -nfsv4_server_enable="NO" # Enable support for NFSv4 -nfscbd_enable="NO" # NFSv4 client side callback daemon -nfscbd_flags="" # Flags for nfscbd -nfsuserd_enable="NO" # NFSv4 user/group name mapping daemon -nfsuserd_flags="" # Flags for nfsuserd - -### Network Time Services options: ### -timed_enable="NO" # Run the time daemon (or NO). -timed_flags="" # Flags to timed (if enabled). -ntpdate_enable="NO" # Run ntpdate to sync time on boot (or NO). -ntpdate_program="/usr/sbin/ntpdate" # path to ntpdate, if you want a different one. -ntpdate_flags="-b" # Flags to ntpdate (if enabled). -ntpdate_config="/etc/ntp.conf" # ntpdate(8) configuration file -ntpdate_hosts="" # Whitespace-separated list of ntpdate(8) servers. -ntpd_enable="NO" # Run ntpd Network Time Protocol (or NO). -ntpd_program="/usr/sbin/ntpd" # path to ntpd, if you want a different one. -ntpd_config="/etc/ntp.conf" # ntpd(8) configuration file -ntpd_sync_on_start="NO" # Sync time on ntpd startup, even if offset is high -ntpd_flags="" # Additional flags to ntpd -ntp_src_leapfile="/etc/ntp/leap-seconds" - # Initial source for ntpd leapfile -ntp_db_leapfile="/var/db/ntpd.leap-seconds.list" - # Working copy (updated weekly) leapfile -ntp_leapfile_sources="https://www.ietf.org/timezones/data/leap-seconds.list" - # Source from which to fetch leapfile -ntp_leapfile_fetch_opts="-mq" # Options to use for ntp leapfile fetch, - # e.g. --no-verify-peer -ntp_leapfile_expiry_days=30 # Check for new leapfile 30 days prior to - # expiry. -ntp_leapfile_fetch_verbose="NO" # Be verbose during NTP leapfile fetch - -# Network Information Services (NIS) options: All need rpcbind_enable="YES" ### -nis_client_enable="NO" # We're an NIS client (or NO). -nis_client_flags="" # Flags to ypbind (if enabled). -nis_ypset_enable="NO" # Run ypset at boot time (or NO). -nis_ypset_flags="" # Flags to ypset (if enabled). -nis_server_enable="NO" # We're an NIS server (or NO). -nis_server_flags="" # Flags to ypserv (if enabled). -nis_ypxfrd_enable="NO" # Run rpc.ypxfrd at boot time (or NO). -nis_ypxfrd_flags="" # Flags to rpc.ypxfrd (if enabled). -nis_yppasswdd_enable="NO" # Run rpc.yppasswdd at boot time (or NO). -nis_yppasswdd_flags="" # Flags to rpc.yppasswdd (if enabled). -nis_ypldap_enable="NO" # Run ypldap at boot time (or NO). -nis_ypldap_flags="" # Flags to ypldap (if enabled). - -### SNMP daemon ### -# Be sure to understand the security implications of running SNMP v1/v2 -# in your network. -bsnmpd_enable="NO" # Run the SNMP daemon (or NO). -bsnmpd_flags="" # Flags for bsnmpd. - -### Network routing options: ### -defaultrouter="NO" # Set to default gateway (or NO). -static_arp_pairs="" # Set to static ARP list (or leave empty). -static_ndp_pairs="" # Set to static NDP list (or leave empty). -static_routes="" # Set to static route list (or leave empty). -gateway_enable="NO" # Set to YES if this host will be a gateway. -routed_enable="NO" # Set to YES to enable a routing daemon. -routed_program="/sbin/routed" # Name of routing daemon to use if enabled. -routed_flags="-q" # Flags for routing daemon. -arpproxy_all="NO" # replaces obsolete kernel option ARP_PROXYALL. -forward_sourceroute="NO" # do source routing (only if gateway_enable is set to "YES") -accept_sourceroute="NO" # accept source routed packets to us - -### Bluetooth ### -hcsecd_enable="NO" # Enable hcsecd(8) (or NO) -hcsecd_config="/etc/bluetooth/hcsecd.conf" # hcsecd(8) configuration file - -sdpd_enable="NO" # Enable sdpd(8) (or NO) -sdpd_control="/var/run/sdp" # sdpd(8) control socket -sdpd_groupname="nobody" # set spdp(8) user/group to run as after -sdpd_username="nobody" # it initializes - -bthidd_enable="NO" # Enable bthidd(8) (or NO) -bthidd_config="/etc/bluetooth/bthidd.conf" # bthidd(8) configuration file -bthidd_hids="/var/db/bthidd.hids" # bthidd(8) known HID devices file -bthidd_evdev_support="AUTO" # AUTO depends on EVDEV_SUPPORT kernel option - -rfcomm_pppd_server_enable="NO" # Enable rfcomm_pppd(8) in server mode (or NO) -rfcomm_pppd_server_profile="one two" # Profile to use from /etc/ppp/ppp.conf -# -#rfcomm_pppd_server_one_bdaddr="" # Override local bdaddr for 'one' -rfcomm_pppd_server_one_channel="1" # Override local channel for 'one' -#rfcomm_pppd_server_one_register_sp="NO" # Override SP and DUN register -#rfcomm_pppd_server_one_register_dun="NO" # for 'one' -# -#rfcomm_pppd_server_two_bdaddr="" # Override local bdaddr for 'two' -rfcomm_pppd_server_two_channel="3" # Override local channel for 'two' -#rfcomm_pppd_server_two_register_sp="NO" # Override SP and DUN register -#rfcomm_pppd_server_two_register_dun="NO" # for 'two' - -ubthidhci_enable="NO" # Switch an USB BT controller present on -#ubthidhci_busnum="3" # bus 3 and addr 2 from HID mode to HCI mode. -#ubthidhci_addr="2" # Check usbconfig list to find the correct - # numbers for your system. - -### Network link/usability verification options -netwait_enable="NO" # Enable rc.d/netwait (or NO) -#netwait_ip="" # Wait for ping response from any IP in this list. -netwait_timeout="60" # Total number of seconds to perform pings. -#netwait_if="" # Wait for active link on each intf in this list. -netwait_if_timeout="30" # Total number of seconds to monitor link state. - -### Miscellaneous network options: ### -icmp_bmcastecho="NO" # respond to broadcast ping packets - -### IPv6 options: ### -ipv6_network_interfaces="auto" # List of IPv6 network interfaces - # (or "auto" or "none"). -ipv6_activate_all_interfaces="NO" # If NO, interfaces which have no - # corresponding $ifconfig_IF_ipv6 is - # marked as IFDISABLED for security - # reason. -ipv6_defaultrouter="NO" # Set to IPv6 default gateway (or NO). -#ipv6_defaultrouter="2002:c058:6301::" # Use this for 6to4 (RFC 3068) -ipv6_static_routes="" # Set to static route list (or leave empty). -#ipv6_static_routes="xxx" # An example to set fec0:0000:0000:0006::/64 - # route toward loopback interface. -#ipv6_route_xxx="fec0:0000:0000:0006:: -prefixlen 64 ::1" -ipv6_gateway_enable="NO" # Set to YES if this host will be a gateway. -ipv6_cpe_wanif="NO" # Set to the upstream interface name if this - # node will work as a router to forward IPv6 - # packets not explicitly addressed to itself. -ipv6_privacy="NO" # Use privacy address on RA-receiving IFs - # (RFC 4941) - -route6d_enable="NO" # Set to YES to enable an IPv6 routing daemon. -route6d_program="/usr/sbin/route6d" # Name of IPv6 routing daemon. -route6d_flags="" # Flags to IPv6 routing daemon. -#route6d_flags="-l" # Example for route6d with only IPv6 site local - # addrs. -#route6d_flags="-q" # If you want to run a routing daemon on an end - # node, you should stop advertisement. -#ipv6_network_interfaces="ed0 ep0" # Examples for router - # or static configuration for end node. - # Choose correct prefix value. -#ipv6_prefix_ed0="fec0:0000:0000:0001 fec0:0000:0000:0002" # Examples for rtr. -#ipv6_prefix_ep0="fec0:0000:0000:0003 fec0:0000:0000:0004" # Examples for rtr. -ipv6_default_interface="NO" # Default output interface for scoped addrs. - # This works only with - # ipv6_gateway_enable="NO". -rtsol_flags="" # Flags to IPv6 router solicitation. -rtsold_enable="NO" # Set to YES to enable an IPv6 router - # solicitation daemon. -rtsold_flags="-a" # Flags to an IPv6 router solicitation - # daemon. -rtadvd_enable="NO" # Set to YES to enable an IPv6 router - # advertisement daemon. If set to YES, - # this router becomes a possible candidate - # IPv6 default router for local subnets. -rtadvd_interfaces="" # Interfaces rtadvd sends RA packets. -stf_interface_ipv4addr="" # Local IPv4 addr for 6to4 IPv6 over IPv4 - # tunneling interface. Specify this entry - # to enable 6to4 interface. -stf_interface_ipv4plen="0" # Prefix length for 6to4 IPv4 addr, - # to limit peer addr range. Effective value - # is 0-31. -stf_interface_ipv6_ifid="0:0:0:1" # IPv6 interface id for stf0. - # If you like, you can set "AUTO" for this. -stf_interface_ipv6_slaid="0000" # IPv6 Site Level Aggregator for stf0 -ipv6_ipv4mapping="NO" # Set to "YES" to enable IPv4 mapped IPv6 addr - # communication. (like ::ffff:a.b.c.d) -ipv6_ipfilter_rules="/etc/ipf6.rules" # rules definition file for ipfilter, - # see /usr/src/contrib/ipfilter/rules - # for examples -ip6addrctl_enable="YES" # Set to YES to enable default address selection -ip6addrctl_verbose="NO" # Set to YES to enable verbose configuration messages -ip6addrctl_policy="AUTO" # A pre-defined address selection policy - # (ipv4_prefer, ipv6_prefer, or AUTO) - -############################################################## -### System console options ################################# -############################################################## - -keyboard="" # keyboard device to use (default /dev/kbd0). -keymap="NO" # keymap in /usr/share/{syscons,vt}/keymaps/* (or NO). -keyrate="NO" # keyboard rate to: slow, normal, fast (or NO). -keybell="NO" # See kbdcontrol(1) for options. Use "off" to disable. -keychange="NO" # function keys default values (or NO). -cursor="NO" # cursor type {normal|blink|destructive} (or NO). -scrnmap="NO" # screen map in /usr/share/syscons/scrnmaps/* (or NO). -font8x16="NO" # font 8x16 from /usr/share/{syscons,vt}/fonts/* (or NO). -font8x14="NO" # font 8x14 from /usr/share/{syscons,vt}/fonts/* (or NO). -font8x8="NO" # font 8x8 from /usr/share/{syscons,vt}/fonts/* (or NO). -blanktime="300" # blank time (in seconds) or "NO" to turn it off. -saver="NO" # screen saver: Uses /boot/kernel/${saver}_saver.ko -moused_nondefault_enable="YES" # Treat non-default mice as enabled unless - # specifically overriden in rc.conf(5). -moused_enable="NO" # Run the mouse daemon. -moused_type="auto" # See man page for rc.conf(5) for available settings. -moused_port="/dev/psm0" # Set to your mouse port. -moused_flags="" # Any additional flags to moused. -mousechar_start="NO" # if 0xd0-0xd3 default range is occupied in your - # language code table, specify alternative range - # start like mousechar_start=3, see vidcontrol(1) -allscreens_flags="" # Set this vidcontrol mode for all virtual screens -allscreens_kbdflags="" # Set this kbdcontrol mode for all virtual screens - -############################################################## -### Mail Transfer Agent (MTA) options ###################### -############################################################## - -mta_start_script="/etc/rc.sendmail" - # Script to start your chosen MTA, called by /etc/rc. -# Settings for /etc/rc.sendmail and /etc/rc.d/sendmail: -sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO). -sendmail_pidfile="/var/run/sendmail.pid" # sendmail pid file -sendmail_procname="/usr/sbin/sendmail" # sendmail process name -sendmail_flags="-L sm-mta -bd -q30m" # Flags to sendmail (as a server) -sendmail_cert_create="YES" # Create a server certificate if none (YES/NO) -#sendmail_cert_cn="CN" # CN of the generate certificate -sendmail_submit_enable="YES" # Start a localhost-only MTA for mail submission -sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost" - # Flags for localhost-only MTA -sendmail_outbound_enable="YES" # Dequeue stuck mail (YES/NO). -sendmail_outbound_flags="-L sm-queue -q30m" # Flags to sendmail (outbound only) -sendmail_msp_queue_enable="YES" # Dequeue stuck clientmqueue mail (YES/NO). -sendmail_msp_queue_flags="-L sm-msp-queue -Ac -q30m" - # Flags for sendmail_msp_queue daemon. -sendmail_rebuild_aliases="NO" # Run newaliases if necessary (YES/NO). - - -############################################################## -### Miscellaneous administrative options ################### -############################################################## - -auditd_enable="NO" # Run the audit daemon. -auditd_program="/usr/sbin/auditd" # Path to the audit daemon. -auditd_flags="" # Which options to pass to the audit daemon. -auditdistd_enable="NO" # Run the audit daemon. -auditdistd_program="/usr/sbin/auditdistd" # Path to the auditdistd daemon. -auditdistd_flags="" # Which options to pass to the auditdistd daemon. -cron_enable="YES" # Run the periodic job daemon. -cron_program="/usr/sbin/cron" # Which cron executable to run (if enabled). -cron_dst="YES" # Handle DST transitions intelligently (YES/NO) -cron_flags="" # Which options to pass to the cron daemon. -cfumass_enable="NO" # Create default LUN for cfumass(4). -cfumass_dir="/var/cfumass" # File to LUN's contents. -cfumass_image="/var/tmp/cfumass.img" # LUN's backing file path. -lpd_enable="NO" # Run the line printer daemon. -lpd_program="/usr/sbin/lpd" # path to lpd, if you want a different one. -lpd_flags="" # Flags to lpd (if enabled). -nscd_enable="NO" # Run the nsswitch caching daemon. -chkprintcap_enable="NO" # Run chkprintcap(8) before running lpd. -chkprintcap_flags="-d" # Create missing directories by default. -dumpdev="AUTO" # Device to crashdump to (device name, AUTO, or NO). -dumpon_flags="" # Options to pass to dumpon(8), followed by dumpdev. -dumpdir="/var/crash" # Directory where crash dumps are to be stored -savecore_enable="YES" # Extract core from dump devices if any -savecore_flags="-m 10" # Used if dumpdev is enabled above, and present. - # By default, only the 10 most recent kernel dumps - # are saved. -crashinfo_enable="YES" # Automatically generate crash dump summary. -crashinfo_program="/usr/sbin/crashinfo" # Script to generate crash dump summary. -quota_enable="NO" # turn on quotas on startup (or NO). -check_quotas="YES" # Check quotas on startup (or NO). -quotaon_flags="-a" # Turn quotas on for all file systems (if enabled) -quotaoff_flags="-a" # Turn quotas off for all file systems at shutdown -quotacheck_flags="-a" # Check all file system quotas (if enabled) -accounting_enable="NO" # Turn on process accounting (or NO). -ibcs2_enable="NO" # Ibcs2 (SCO) emulation loaded at startup (or NO). -ibcs2_loaders="coff" # List of additional Ibcs2 loaders (or NO). -firstboot_sentinel="/firstboot" # Scripts with "firstboot" keyword are run if - # this file exists. Should be on a R/W filesystem so - # the file can be deleted after the boot completes. - -# Emulation/compatibility services provided by /etc/rc.d/abi -sysvipc_enable="NO" # Load System V IPC primitives at startup (or NO). -linux_enable="NO" # Linux binary compatibility loaded at startup (or NO). -clear_tmp_enable="NO" # Clear /tmp at startup. -clear_tmp_X="YES" # Clear and recreate X11-related directories in /tmp -ldconfig_insecure="NO" # Set to YES to disable ldconfig security checks -ldconfig_paths="/usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg" - # shared library search paths -ldconfig32_paths="/usr/lib32 /usr/lib32/compat" - # 32-bit compatibility shared library search paths -ldconfigsoft_paths="/usr/libsoft /usr/libsoft/compat /usr/local/libsoft" - # soft float compatibility shared library search paths - # Note: temporarily with extra stuff for transition -ldconfig_paths_aout="/usr/lib/compat/aout /usr/local/lib/aout" - # a.out shared library search paths -ldconfig_local_dirs="/usr/local/libdata/ldconfig" - # Local directories with ldconfig configuration files. -ldconfig_local32_dirs="/usr/local/libdata/ldconfig32" - # Local directories with 32-bit compatibility ldconfig - # configuration files. -ldconfig_localsoft_dirs="/usr/local/libdata/ldconfigsoft" - # Local directories with soft float compatibility ldconfig - # configuration files. -kern_securelevel_enable="NO" # kernel security level (see security(7)) -kern_securelevel="-1" # range: -1..3 ; `-1' is the most insecure - # Note that setting securelevel to 0 will result - # in the system booting with securelevel set to 1, as - # init(8) will raise the level when rc(8) completes. -update_motd="YES" # update version info in /etc/motd (or NO) -entropy_boot_file="/boot/entropy" # Set to NO to disable very early - # (used at early boot time) entropy caching through reboots. -entropy_file="/entropy" # Set to NO to disable late (used when going multi-user) - # entropy through reboots. - # /var/db/entropy-file is preferred if / is not avail. -entropy_dir="/var/db/entropy" # Set to NO to disable caching entropy via cron. -entropy_save_sz="4096" # Size of the entropy cache files. -entropy_save_num="8" # Number of entropy cache files to save. -harvest_mask="511" # Entropy device harvests all but the very invasive sources. - # (See 'sysctl kern.random.harvest' and random(4)) -dmesg_enable="YES" # Save dmesg(8) to /var/run/dmesg.boot -watchdogd_enable="NO" # Start the software watchdog daemon -watchdogd_flags="" # Flags to watchdogd (if enabled) -devfs_rulesets="/etc/defaults/devfs.rules /etc/devfs.rules" # Files containing - # devfs(8) rules. -devfs_system_ruleset="" # The name (NOT number) of a ruleset to apply to /dev -devfs_set_rulesets="" # A list of /mount/dev=ruleset_name settings to - # apply (must be mounted already, i.e. fstab(5)) -devfs_load_rulesets="YES" # Enable to always load the default rulesets -performance_cx_lowest="NONE" # Online CPU idle state -performance_cpu_freq="NONE" # Online CPU frequency -economy_cx_lowest="Cmax" # Offline CPU idle state -economy_cpu_freq="NONE" # Offline CPU frequency -virecover_enable="YES" # Perform housekeeping for the vi(1) editor -ugidfw_enable="NO" # Load mac_bsdextended(4) rules on boot -bsdextended_script="/etc/rc.bsdextended" # Default mac_bsdextended(4) - # ruleset file. -newsyslog_enable="YES" # Run newsyslog at startup. -newsyslog_flags="-CN" # Newsyslog flags to create marked files -mixer_enable="YES" # Run the sound mixer. -opensm_enable="NO" # Opensm(8) for infiniband devices defaults to off - -# rctl(8) requires kernel options RACCT and RCTL -rctl_enable="YES" # Load rctl(8) rules on boot -rctl_rules="/etc/rctl.conf" # rctl(8) ruleset. See rctl.conf(5). - -iovctl_files="" # Config files for iovctl(8) - -############################################################## -### Jail Configuration (see rc.conf(5) manual page) ########## -############################################################## -jail_enable="NO" # Set to NO to disable starting of any jails -jail_confwarn="YES" # Prevent warning about obsolete per-jail configuration -jail_parallel_start="NO" # Start jails in the background -jail_list="" # Space separated list of names of jails -jail_reverse_stop="NO" # Stop jails in reverse order - -############################################################## -### Define source_rc_confs, the mechanism used by /etc/rc.* ## -### scripts to source rc_conf_files overrides safely. ## -############################################################## - -if [ -z "${source_rc_confs_defined}" ]; then - source_rc_confs_defined=yes - source_rc_confs() { - local i sourced_files - for i in ${rc_conf_files}; do - case ${sourced_files} in - *:$i:*) - ;; - *) - sourced_files="${sourced_files}:$i:" - if [ -r $i ]; then - . $i - fi - ;; - esac - done - # Re-do process to pick up [possibly] redefined $rc_conf_files - for i in ${rc_conf_files}; do - case ${sourced_files} in - *:$i:*) - ;; - *) - sourced_files="${sourced_files}:$i:" - if [ -r $i ]; then - . $i - fi - ;; - esac - done - } -fi - -# Allow vendors to override FreeBSD defaults in /etc/default/rc.conf -# without the need to carefully manage /etc/rc.conf. -if [ -r /etc/defaults/vendor.conf ]; then - . /etc/defaults/vendor.conf -fi Property changes on: head/etc/defaults/rc.conf ___________________________________________________________________ Deleted: svn:keywords ## -1 +0,0 ## -FreeBSD=%H \ No newline at end of property Index: head/sbin/init/netstart =================================================================== --- head/sbin/init/netstart (nonexistent) +++ head/sbin/init/netstart (revision 336847) @@ -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 Property changes on: head/sbin/init/netstart ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/network.subr =================================================================== --- head/sbin/init/network.subr (nonexistent) +++ head/sbin/init/network.subr (revision 336847) @@ -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 + _exargs=$* + _retstr= + + case $_action:$_arg:$_exargs in + *:*--*:*) return ;; # invalid + tmp:*[0-9a-zA-Z]-[0-9a-zA-Z]*:*)# to be expanded + _action="alias" + ;; + *:*[0-9a-zA-Z]-[0-9a-zA-Z]*:*) # to be expanded + ;; + tmp:*:*prefixlen*) # already expanded w/ prefixlen option + echo ${_arg%/[0-9]*} $_exargs && return + ;; + tmp:*:*) # already expanded w/o prefixlen option + echo $_arg $_exargs && return + ;; + *:*:*prefixlen*) # already expanded w/ prefixlen option + echo inet6 ${_arg%/[0-9]*} $_exargs && return + ;; + *:*:*) # already expanded w/o prefixlen option + echo inet6 $_arg $_exargs && return + ;; + esac + + for _cidr in $_arg; do + _ipaddr="${_cidr%%/*}" + _plen="${_cidr##*/}" + + case $_action:$_ipaddr:$_cidr in + -alias:*:*) unset _plen ;; + *:$_cidr:$_ipaddr) unset _plen ;; + esac + + if [ "${_ipaddr%:*.*.*.*}" = "$_ipaddr" ]; then + # Handle !v4mapped && !v4compat addresses. + + # The default prefix length is 64. + case $_ipaddr:$_cidr in + $_cidr:$_ipaddr) _plen="64" ;; + esac + _ipleft=${_ipaddr%-*} + _ipright=${_ipaddr#*-} + _iplow=${_ipleft##*:} + _iphigh=${_ipright%%:*} + _ipleft=${_ipleft%:*} + _ipright=${_ipright#*:} + + if [ "$_iphigh" = "$_ipright" ]; then + unset _ipright + else + _ipright=:$_ipright + fi + + if [ -n "$_iplow" -a -n "$_iphigh" ]; then + _iplow=$((0x$_iplow)) + _iphigh=$((0x$_iphigh)) + _ipcount=$_iplow + while [ $_ipcount -le $_iphigh ]; do + _r=`printf "%s:%04x%s%s" \ + $_ipleft $_ipcount $_ipright \ + ${_plen:+/}$_plen` + _retstr="$_retstr $_r" + if [ $_ipcount -gt $(($_iplow + $netif_ipexpand_max)) ] + then + warn "Range specification is too large $(printf '(%s:%x%s-%s:%x%s)' "$_ipleft" "$_iplow" "$_ipright" "$_ipleft" "$_iphigh" "$_ipright"). $(printf '%s:%x%s-%s:%x%s' "$_ipleft" "$_iplow" "$_ipright" "$_ipleft" "$_ipcount" "$_ipright") was processed. Increase \$netif_ipexpand_max in rc.conf." + break + else + _ipcount=$(($_ipcount + 1)) + fi + done + else + _retstr="${_ipaddr}${_plen:+/}${_plen}" + fi + + for _c in $_retstr; do + ifalias_expand_addr_inet6 $_action $_c $_exargs + done + else + # v4mapped/v4compat should handle as an IPv4 alias + _ipv4part=${_ipaddr##*:} + + # Adjust prefix length if any. If not, set the + # default prefix length as 32. + case $_ipaddr:$_cidr in + $_cidr:$_ipaddr) _plen=32 ;; + *) _plen=$(($_plen - 96)) ;; + esac + + _retstr=`ifalias_expand_addr_inet \ + tmp ${_ipv4part}${_plen:+/}${_plen}` + for _c in $_retstr; do + ifalias_expand_addr_inet $_action $_c $_exargs + done + fi + done +} + +# ifalias_af_common_handler if af action args +# Helper function for ifalias_af_common(). +# +ifalias_af_common_handler() +{ + local _ret _if _af _action _args _c _tmpargs + + _ret=1 + _if=$1 + _af=$2 + _action=$3 + shift 3 + _args=$* + + case $_args in + ${_af}\ *) ;; + *) return ;; + esac + + # link(ether) does not support address removal. + case $_af:$_action in + link:-alias|ether:-alias) return ;; + esac + + _tmpargs= + for _c in $_args; do + case $_c in + ${_af}) + case $_tmpargs in + ${_af}\ *[0-9a-fA-F]-*) + ifalias_af_common_handler $_if $_af $_action \ + `ifalias_expand_addr $_af $_action ${_tmpargs#${_af}\ }` + ;; + ${_af}\ *) + ${IFCONFIG_CMD} $_if $_tmpargs $_action && _ret=0 + ;; + esac + _tmpargs=$_af + ;; + *) + _tmpargs="$_tmpargs $_c" + ;; + esac + done + # Process the last component if any. + if [ -n "$_tmpargs}" ]; then + case $_tmpargs in + ${_af}\ *[0-9a-fA-F]-*) + ifalias_af_common_handler $_if $_af $_action \ + `ifalias_expand_addr $_af $_action ${_tmpargs#${_af}\ }` + ;; + ${_af}\ *) + ${IFCONFIG_CMD} $_if $_tmpargs $_action && _ret=0 + ;; + esac + fi + + return $_ret +} + +# ifalias_af_common if af action +# Helper function for ifalias(). +# +ifalias_af_common() +{ + local _ret _if _af _action alias ifconfig_args _aliasn _c _tmpargs _iaf + local _vif _punct=".-/+" + + _ret=1 + _aliasn= + _if=$1 + _af=$2 + _action=$3 + + # Normalize $_if before using it in a pattern to list_vars() + ltr "$_if" "$_punct" "_" _vif + + # ifconfig_IF_aliasN which starts with $_af + for alias in `list_vars ifconfig_${_vif}_alias[0-9]\* | + sort_lite -nk1.$((9+${#_vif}+7))` + do + eval ifconfig_args=\"\$$alias\" + _iaf= + case $ifconfig_args in + inet\ *) _iaf=inet ;; + inet6\ *) _iaf=inet6 ;; + link\ *) _iaf=link ;; + ether\ *) _iaf=ether ;; + esac + + case ${_af}:${_action}:${_iaf}:"${ifconfig_args}" in + ${_af}:*:${_af}:*) + _aliasn="$_aliasn $ifconfig_args" + ;; + ${_af}:*:"":"") + break + ;; + inet:alias:"":*) + _aliasn="$_aliasn inet $ifconfig_args" + warn "\$${alias} needs leading" \ + "\"inet\" keyword for an IPv4 address." + esac + done + + # backward compatibility: ipv6_ifconfig_IF_aliasN. + case $_af in + inet6) + for alias in `list_vars ipv6_ifconfig_${_vif}_alias[0-9]\* | + sort_lite -nk1.$((14+${#_vif}+7))` + do + eval ifconfig_args=\"\$$alias\" + case ${_action}:"${ifconfig_args}" in + *:"") + break + ;; + alias:*) + _aliasn="${_aliasn} inet6 ${ifconfig_args}" + warn "\$${alias} is obsolete. " \ + "Use ifconfig_${_vif}_aliasN instead." + ;; + esac + done + esac + + # backward compatibility: ipv4_addrs_IF. + for _tmpargs in `get_if_var $_if ipv4_addrs_IF`; do + _aliasn="$_aliasn inet $_tmpargs" + done + + # Handle ifconfig_IF_aliases, ifconfig_IF_aliasN, and the others. + _tmpargs= + for _c in `get_if_var $_if ifconfig_IF_aliases` $_aliasn; do + case $_c in + inet|inet6|link|ether) + case $_tmpargs in + ${_af}\ *) + eval ifalias_af_common_handler $_if $_af $_action $_tmpargs && _ret=0 + ;; + esac + _tmpargs=$_c + ;; + *) + _tmpargs="$_tmpargs $_c" + esac + done + # Process the last component + case $_tmpargs in + ${_af}\ *) + ifalias_af_common_handler $_if $_af $_action $_tmpargs && _ret=0 + ;; + esac + + return $_ret +} + +# ipv6_prefix_hostid_addr_common if action +# Add or remove IPv6 prefix + hostid addr on the interface $if +# +ipv6_prefix_hostid_addr_common() +{ + local _if _action prefix j + _if=$1 + _action=$2 + prefix=`get_if_var ${_if} ipv6_prefix_IF` + + if [ -n "${prefix}" ]; then + for j in ${prefix}; do + # The default prefixlen is 64. + plen=${j#*/} + case $j:$plen in + $plen:$j) plen=64 ;; + *) j=${j%/*} ;; + esac + + # Normalize the last part by removing ":" + j=${j%::*} + j=${j%:} + ${IFCONFIG_CMD} ${_if} inet6 $j:: \ + prefixlen $plen eui64 ${_action} + + # if I am a router, add subnet router + # anycast address (RFC 2373). + if checkyesno ipv6_gateway_enable; then + ${IFCONFIG_CMD} ${_if} inet6 $j:: \ + prefixlen $plen ${_action} anycast + fi + done + fi +} + +# ipv6_accept_rtadv_up if +# Enable accepting Router Advertisement and send Router +# Solicitation message +ipv6_accept_rtadv_up() +{ + if ipv6_autoconfif $1; then + ${IFCONFIG_CMD} $1 inet6 accept_rtadv up + if ! checkyesno rtsold_enable; then + rtsol ${rtsol_flags} $1 + fi + fi +} + +# ipv6_accept_rtadv_down if +# Disable accepting Router Advertisement +ipv6_accept_rtadv_down() +{ + if ipv6_autoconfif $1; then + ${IFCONFIG_CMD} $1 inet6 -accept_rtadv + fi +} + +# 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 + else + return 1 + fi +} + +# ifscript_down if +# Evaluate a shutdown script for the $if interface. +# It returns 0 if a script was found and processed or +# 1 if no script was found. +# +ifscript_down() +{ + if [ -r /etc/stop_if.$1 ]; then + . /etc/stop_if.$1 + return 0 + else + return 1 + fi +} + +# wlan_up +# Create IEEE802.11 interfaces. +# +wlan_up() +{ + local _list _iflist parent child_wlans child create_args debug_flags + _list= + _iflist=$* + + # Parse wlans_$parent="$child ..." + for parent in `set | sed -nE 's/wlans_([a-z]+[0-9]+)=.*/\1/p'`; do + child_wlans=`get_if_var $parent wlans_IF` + for child in ${child_wlans}; do + create_args="wlandev $parent `get_if_var $child create_args_IF`" + debug_flags="`get_if_var $child wlandebug_IF`" + case $_iflist in + ""|$child|$child\ *|*\ $child\ *|*\ $child) ;; + *) continue ;; + esac + # Skip if ${child} already exists. + if ${IFCONFIG_CMD} $child > /dev/null 2>&1; then + continue + fi + if expr $child : 'wlan[0-9][0-9]*$' >/dev/null 2>&1; then + ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 + else + ${IFCONFIG_CMD} wlan create ${create_args} name $child && cfg=0 + fi + if [ $? -eq 0 ]; then + _list="$_list $child" + fi + if [ -n "${debug_flags}" ]; then + wlandebug -i $child ${debug_flags} + fi + done + done + if [ -n "${_list# }" ]; then + echo "Created wlan(4) interfaces: ${_list# }." + fi + debug "Created wlan(4)s: ${_list# }" +} + +# wlan_down +# Destroy IEEE802.11 interfaces. +# +wlan_down() +{ + local _list _iflist parent child_wlans child + _list= + _iflist=$* + + # Parse wlans_$parent="$child ..." + for parent in `set | sed -nE 's/wlans_([a-z]+[0-9]+)=.*/\1/p'`; do + child_wlans=`get_if_var $parent wlans_IF` + for child in ${child_wlans}; do + case $_iflist in + ""|$child|$child\ *|*\ $child\ *|*\ $child) ;; + *) continue ;; + esac + # Skip if ${child} doesn't exists. + if ! ${IFCONFIG_CMD} $child > /dev/null 2>&1; then + continue + fi + ${IFCONFIG_CMD} -n ${child} destroy + if [ $? -eq 0 ]; then + _list="$_list $child" + fi + done + done + if [ -n "${_list# }" ]; then + echo "Destroyed wlan(4) interfaces: ${_list# }." + fi + debug "Destroyed wlan(4)s: ${_list# }" +} + +# clone_up +# Create cloneable interfaces. +# +clone_up() +{ + local _list ifn ifopt _iflist _n tmpargs + _list= + _iflist=$* + + # create_args_IF + for ifn in ${cloned_interfaces}; do + # Parse ifn:ifopt. + OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS + case $_iflist in + ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; + *) continue ;; + esac + case $ifn in + epair[0-9]*) + # epair(4) uses epair[0-9] for creation and + # epair[0-9][ab] for configuration. + # + # Skip if ${ifn}a or ${ifn}b already exist. + if ${IFCONFIG_CMD} ${ifn}a > /dev/null 2>&1; then + continue + elif ${IFCONFIG_CMD} ${ifn}b > /dev/null 2>&1; then + continue + fi + ${IFCONFIG_CMD} ${ifn} create \ + `get_if_var ${ifn} create_args_IF` + if [ $? -eq 0 ]; then + _list="$_list ${ifn}a ${ifn}b" + fi + ;; + *) + # Skip if ${ifn} already exists. + if ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then + continue + fi + ${IFCONFIG_CMD} ${ifn} create \ + `get_if_var ${ifn} create_args_IF` + if [ $? -eq 0 ]; then + _list="$_list $ifn" + fi + esac + done + if [ -n "$gif_interfaces" ]; then + warn "\$gif_interfaces is obsolete. Use \$cloned_interfaces instead." + fi + for ifn in ${gif_interfaces}; do + # Parse ifn:ifopt. + OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS + case $_iflist in + ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; + *) continue ;; + esac + # Skip if ifn already exists. + if ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then + continue + fi + case $ifn in + gif[0-9]*) + ${IFCONFIG_CMD} $ifn create + ;; + *) + _n=$(${IFCONFIG_CMD} gif create) + ${IFCONFIG_CMD} $_n name $ifn + ;; + esac + if [ $? -eq 0 ]; then + _list="$_list $ifn" + fi + tmpargs=$(get_if_var $ifn gifconfig_IF) + eval ifconfig_${ifn}=\"tunnel \$tmpargs\" + done + if [ -n "${_list# }" ]; then + echo "Created clone interfaces: ${_list# }." + fi + debug "Cloned: ${_list# }" +} + +# clone_down +# Destroy cloned interfaces. Destroyed interfaces are echoed to +# standard output. +# +clone_down() +{ + local _list ifn _difn ifopt _iflist _sticky + _list= + _iflist=$* + + : ${cloned_interfaces_sticky:=NO} + if checkyesno cloned_interfaces_sticky; then + _sticky=1 + else + _sticky=0 + fi + for ifn in ${cloned_interfaces} ${gif_interfaces}; do + # Parse ifn:ifopt. + OIFS=$IFS; IFS=:; set -- $ifn; ifn=$1; ifopt=$2; IFS=$OIFS + case $ifopt:$_sticky in + sticky:*) continue ;; # :sticky => not destroy + nosticky:*) ;; # :nosticky => destroy + *:1) continue ;; # global sticky knob == 1 + esac + case $_iflist in + ""|$ifn|$ifn\ *|*\ $ifn\ *|*\ $ifn) ;; + *) continue ;; + esac + case $ifn in + epair[0-9]*) + # Note: epair(4) uses epair[0-9] for removal and + # epair[0-9][ab] for configuration. + # + # Skip if both of ${ifn}a and ${ifn}b do not exist. + if ${IFCONFIG_CMD} ${ifn}a > /dev/null 2>&1; then + _difn=${ifn}a + elif ${IFCONFIG_CMD} ${ifn}b > /dev/null 2>&1; then + _difn=${ifn}b + else + continue + fi + ${IFCONFIG_CMD} -n $_difn destroy + if [ $? -eq 0 ]; then + _list="$_list ${ifn}a ${ifn}b" + fi + ;; + *) + # Skip if ifn does not exist. + if ! ${IFCONFIG_CMD} $ifn > /dev/null 2>&1; then + continue + fi + ${IFCONFIG_CMD} -n ${ifn} destroy + if [ $? -eq 0 ]; then + _list="$_list $ifn" + fi + ;; + esac + done + if [ -n "${_list# }" ]; then + echo "Destroyed clone interfaces: ${_list# }." + fi + debug "Destroyed clones: ${_list# }" +} + +# childif_create +# Create and configure child interfaces. Return 0 if child +# interfaces are created. +# +# XXXGL: the wlan code in this functions is superseded by wlan_up(), +# and will go away soon. +# +childif_create() +{ + local cfg child child_vlans child_wlans create_args debug_flags ifn i + cfg=1 + ifn=$1 + + # Create wireless interfaces + child_wlans=`get_if_var $ifn wlans_IF` + + for child in ${child_wlans}; do + create_args="wlandev $ifn `get_if_var $child create_args_IF`" + debug_flags="`get_if_var $child wlandebug_IF`" + + if expr $child : 'wlan[0-9][0-9]*$' >/dev/null 2>&1; then + ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 + if [ -n "${debug_flags}" ]; then + wlandebug -i $child ${debug_flags} + fi + else + i=`${IFCONFIG_CMD} wlan create ${create_args}` + if [ -n "${debug_flags}" ]; then + wlandebug -i $i ${debug_flags} + fi + ${IFCONFIG_CMD} $i name $child && cfg=0 + fi + if autoif $child; then + ifn_start $child + fi + done + + # Create vlan interfaces + child_vlans=`get_if_var $ifn vlans_IF` + + if [ -n "${child_vlans}" ]; then + load_kld if_vlan + fi + + for child in ${child_vlans}; do + if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then + child="${ifn}.${child}" + create_args=`get_if_var $child create_args_IF` + ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 + else + create_args="vlandev $ifn `get_if_var $child create_args_IF`" + if expr $child : 'vlan[0-9][0-9]*$' >/dev/null 2>&1; then + ${IFCONFIG_CMD} $child create ${create_args} && cfg=0 + else + i=`${IFCONFIG_CMD} vlan create ${create_args}` + ${IFCONFIG_CMD} $i name $child && cfg=0 + fi + fi + if autoif $child; then + ifn_start $child + fi + done + + return ${cfg} +} + +# childif_destroy +# Destroy child interfaces. +# +childif_destroy() +{ + local cfg child child_vlans child_wlans ifn + cfg=1 + + child_wlans=`get_if_var $ifn wlans_IF` + for child in ${child_wlans}; do + if ! ifexists $child; then + continue + fi + ${IFCONFIG_CMD} -n $child destroy && cfg=0 + done + + child_vlans=`get_if_var $ifn vlans_IF` + for child in ${child_vlans}; do + if expr $child : '[1-9][0-9]*$' >/dev/null 2>&1; then + child="${ifn}.${child}" + fi + if ! ifexists $child; then + continue + fi + ${IFCONFIG_CMD} -n $child destroy && cfg=0 + done + + return ${cfg} +} + +# ng_mkpeer +# Create netgraph nodes. +# +ng_mkpeer() +{ + ngctl -f - 2> /dev/null </dev/null`; do + case $line in + *interface:*) + defif=${line##*: } + ;; + esac + done + IFS=${oldifs} + + echo $defif +} + +# hexdigit arg +# Echo decimal number $arg (single digit) in hexadecimal format. +hexdigit() +{ + printf '%x\n' "$1" +} + +# hexprint arg +# Echo decimal number $arg (multiple digits) in hexadecimal format. +hexprint() +{ + printf '%x\n' "$1" +} + +is_wired_interface() +{ + local media + + case `${IFCONFIG_CMD} $1 2>/dev/null` in + *media:?Ethernet*) media=Ethernet ;; + esac + + test "$media" = "Ethernet" +} + +# network6_getladdr if [flag] +# Echo link-local address from $if if any. +# If flag is defined, tentative ones will be excluded. +network6_getladdr() +{ + local _if _flag proto addr rest + _if=$1 + _flag=$2 + + ${IFCONFIG_CMD} $_if 2>/dev/null | while read proto addr rest; do + case "${proto}/${addr}/${_flag}/${rest}" in + inet6/fe80::*//*) + echo ${addr} + ;; + inet6/fe80:://*tentative*) # w/o flag + sleep `${SYSCTL_N} net.inet6.ip6.dad_count` + network6_getladdr $_if $_flags + ;; + inet6/fe80::/*/*tentative*) # w/ flag + echo ${addr} + ;; + *) + continue + ;; + esac + + return + done +} Property changes on: head/sbin/init/network.subr ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/pccard_ether =================================================================== --- head/sbin/init/pccard_ether (nonexistent) +++ head/sbin/init/pccard_ether (revision 336847) @@ -0,0 +1,147 @@ +#!/bin/sh - +# +# $FreeBSD$ +# +# pccard_ether interfacename [start|stop|restart] +# +# example: pccard_ether fxp0 start +# + +. /etc/rc.subr +. /etc/network.subr + +name="pccard_ether" +start_precmd="checkauto" +start_cmd="pccard_ether_start" +stop_precmd="checkauto" +stop_cmd="pccard_ether_stop" +restart_precmd="checkauto" +restart_cmd="pccard_ether_restart" +startchildren_cmd="pccard_ether_startchildren" +stopchildren_cmd="pccard_ether_stopchildren" +extra_commands="startchildren stopchildren" + +setup_routes() +{ + # Add default route into $static_routes + case ${defaultrouter} in + [Nn][Oo] | '') + ;; + *) + static_routes="default ${static_routes}" + route_default="default ${defaultrouter}" + ;; + esac + + # Add private route for this interface into $static_routes + eval ifx_routes=\$static_routes_${ifn} + if [ -n "${ifx_routes}" ]; then + static_routes="${ifx_routes} ${static_routes}" + fi + + # Set up any static routes if specified + if [ -n "${static_routes}" ]; then + for i in ${static_routes}; do + eval route_args=\$route_${i} + route add ${route_args} + done + fi +} + +remove_routes() +{ + # Delete static route if specified + eval ifx_routes=\$static_routes_${ifn} + if [ -n "${ifx_routes}" ]; then + for i in ${ifx_routes}; do + eval route_args=\$route_${i} + route delete ${route_args} + done + fi +} + +checkauto() +{ + if [ -z "$rc_force" ]; then + # Ignore interfaces with the NOAUTO keyword + autoif $ifn || exit 0 + fi +} + +pccard_ether_start() +{ + ifexists $ifn || exit 1 + + if [ -z "$rc_force" ]; then + for uif in `ifconfig -ul`; do + if [ "${uif}" = "${ifn}" ]; then + # Interface is already up, so ignore it. + exit 0 + fi + done + fi + + /etc/rc.d/netif quietstart $ifn + + # Do route configuration if needed. + # XXX: should probably do this by calling rc.d/routing. + if [ -n "`ifconfig_getargs $ifn`" ]; then + if ! dhcpif $ifn; then + setup_routes + fi + fi + + # XXX: IPv6 setup should be done in some way. +} + +pccard_ether_stop() +{ + if [ -n "`ifconfig_getargs $ifn`" ]; then + if ! dhcpif $ifn; then + remove_routes + fi + fi + + /etc/rc.d/netif quietstop $ifn + + # clean ARP table + ifexists $ifn && arp -d -i $ifn -a +} + +pccard_ether_restart() +{ + # Hand implemented because the default implementation runs + # the equivalent of "$0 start; $0 stop" and this script + # doesn't support that syntax + pccard_ether_stop + pccard_ether_start +} + +pccard_ether_startchildren() +{ + for child in `get_if_var $ifn wlans_IF`; do + if ifexists $child; then + continue + fi + /etc/rc.d/netif quietstart $child + done +} + +pccard_ether_stopchildren() +{ + for child in `get_if_var $ifn wlans_IF`; do + /etc/rc.d/netif quietstop $child + done +} + +ifn=$1 +shift +if [ -z "$*" ]; then + args="start" +else + args=$* +fi + +load_rc_config pccard_ether +load_rc_config network +run_rc_command $args Property changes on: head/sbin/init/pccard_ether ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc =================================================================== --- head/sbin/init/rc (nonexistent) +++ head/sbin/init/rc (revision 336847) @@ -0,0 +1,152 @@ +#!/bin/sh +# +# Copyright (c) 2000-2004 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. +# +# @(#)rc 5.27 (Berkeley) 6/5/91 +# $FreeBSD$ +# + +# System startup script run by init on autoboot +# or after single-user. +# Output and error are redirected to console by init, +# and the console is the controlling terminal. + +# Note that almost all of the user-configurable behavior is no longer in +# this file, but rather in /etc/defaults/rc.conf. Please check that file +# first before contemplating any changes here. If you do need to change +# this file for some reason, we would like to know about it. + +stty status '^T' 2> /dev/null + +# Set shell to ignore SIGINT (2), but not children; +# shell catches SIGQUIT (3) and returns to single user. +# +trap : 2 +trap "echo 'Boot interrupted'; exit 1" 3 + +HOME=/ +PATH=/sbin:/bin:/usr/sbin:/usr/bin +export HOME PATH + +if [ "$1" = autoboot ]; then + autoboot=yes + _boot="faststart" + rc_fast=yes # run_rc_command(): do fast booting +else + autoboot=no + _boot="quietstart" +fi + +dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` +if [ ${dlv:=0} -ne 0 -o -f /etc/diskless ]; then + sh /etc/rc.initdiskless +fi + +# Run these after determining whether we are booting diskless in order +# to minimize the number of files that are needed on a diskless system, +# and to make the configuration file variables available to rc itself. +# +. /etc/rc.subr +load_rc_config + +# If we receive a SIGALRM, re-source /etc/rc.conf; this allows rc.d +# scripts to perform "boot-time configuration" including enabling and +# disabling rc.d scripts which appear later in the boot order. +trap "_rc_conf_loaded=false; load_rc_config" ALRM + +skip="-s nostart" +if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then + skip="$skip -s nojail" + if [ `/sbin/sysctl -n security.jail.vnet` -ne 1 ]; then + skip="$skip -s nojailvnet" + fi +fi + +# If the firstboot sentinel doesn't exist, we want to skip firstboot scripts. +if ! [ -e ${firstboot_sentinel} ]; then + skip_firstboot="-s firstboot" +fi + +# Do a first pass to get everything up to $early_late_divider so that +# we can do a second pass that includes $local_startup directories +# +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* 2>/dev/null` + +_rc_elem_done=' ' +for _rc_elem in ${files}; do + run_rc_script ${_rc_elem} ${_boot} + _rc_elem_done="${_rc_elem_done}${_rc_elem} " + + case "$_rc_elem" in + */${early_late_divider}) break ;; + esac +done + +unset files local_rc + +# Now that disks are mounted, for each dir in $local_startup +# search for init scripts that use the new rc.d semantics. +# +case ${local_startup} in +[Nn][Oo] | '') ;; +*) find_local_scripts_new ;; +esac + +# The firstboot sentinel might be on a newly mounted filesystem; look for it +# again and unset skip_firstboot if we find it. +if [ -e ${firstboot_sentinel} ]; then + skip_firstboot="" +fi + +files=`rcorder ${skip} ${skip_firstboot} /etc/rc.d/* ${local_rc} 2>/dev/null` +for _rc_elem in ${files}; do + case "$_rc_elem_done" in + *" $_rc_elem "*) continue ;; + esac + + run_rc_script ${_rc_elem} ${_boot} +done + +# Remove the firstboot sentinel, and reboot if it was requested. +# Be a bit paranoid about removing it to handle the common failure +# modes since the consequence of failure can be big. +# Note: this assumes firstboot_sentinel is on / when we have +# a read-only /, or that it is on media that's writable. +if [ -e ${firstboot_sentinel} ]; then + checkyesno root_rw_mount && mount -uw / + chflags -R 0 ${firstboot_sentinel} + rm -rf ${firstboot_sentinel} + if [ -e ${firstboot_sentinel}-reboot ]; then + chflags -R 0 ${firstboot_sentinel}-reboot + rm -rf ${firstboot_sentinel}-reboot + checkyesno root_rw_mount || mount -ur / + kill -INT 1 + fi + checkyesno root_rw_mount || mount -ur / +fi + +echo '' +date +exit 0 Property changes on: head/sbin/init/rc ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.conf =================================================================== --- head/sbin/init/rc.conf (nonexistent) +++ head/sbin/init/rc.conf (revision 336847) @@ -0,0 +1,749 @@ +#!/bin/sh + +# This is rc.conf - a file full of useful variables that you can set +# to change the default startup behavior of your system. You should +# not edit this file! Put any overrides into one of the ${rc_conf_files} +# instead and you will be able to update these defaults later without +# spamming your local configuration information. +# +# The ${rc_conf_files} files should only contain values which override +# values set in this file. This eases the upgrade path when defaults +# are changed and new features are added. +# +# All arguments must be in double or single quotes. +# +# For a more detailed explanation of all the rc.conf variables, please +# refer to the rc.conf(5) manual page. +# +# $FreeBSD$ + +############################################################## +### Important initial Boot-time options #################### +############################################################## + +# rc_debug can't be set here without interferring with rc.subr's setting it +# when the kenv variable rc.debug is set. +#rc_debug="NO" # Set to YES to enable debugging output from rc.d +rc_info="NO" # Enables display of informational messages at boot. +rc_startmsgs="YES" # Show "Starting foo:" messages at boot +rcshutdown_timeout="90" # Seconds to wait before terminating rc.shutdown +early_late_divider="FILESYSTEMS" # Script that separates early/late + # stages of the boot process. Make sure you know + # the ramifications if you change this. + # See rc.conf(5) for more details. +always_force_depends="NO" # Set to check that indicated dependencies are + # running during boot (can increase boot time). + +apm_enable="NO" # Set to YES to enable APM BIOS functions (or NO). +apmd_enable="NO" # Run apmd to handle APM event from userland. +apmd_flags="" # Flags to apmd (if enabled). +ddb_enable="NO" # Set to YES to load ddb scripts at boot. +ddb_config="/etc/ddb.conf" # ddb(8) config file. +devd_enable="YES" # Run devd, to trigger programs on device tree changes. +devd_flags="" # Additional flags for devd(8). +devmatch_enable="YES" # Demand load kernel modules based on device ids. +#kld_list="" # Kernel modules to load after local disks are mounted +kldxref_enable="YES" # Build linker.hints files with kldxref(8). +kldxref_clobber="NO" # Overwrite old linker.hints at boot. +kldxref_module_path="" # Override kern.module_path. A ';'-delimited list. +powerd_enable="NO" # Run powerd to lower our power usage. +powerd_flags="" # Flags to powerd (if enabled). +tmpmfs="AUTO" # Set to YES to always create an mfs /tmp, NO to never +tmpsize="20m" # Size of mfs /tmp if created +tmpmfs_flags="-S" # Extra mdmfs options for the mfs /tmp +varmfs="AUTO" # Set to YES to always create an mfs /var, NO to never +varsize="32m" # Size of mfs /var if created +varmfs_flags="-S" # Extra mount options for the mfs /var +mfs_type="auto" # "md", "tmpfs", "auto" to prefer tmpfs with md as fallback +populate_var="AUTO" # Set to YES to always (re)populate /var, NO to never +cleanvar_enable="YES" # Clean the /var directory +local_startup="/usr/local/etc/rc.d" # startup script dirs. +script_name_sep=" " # Change if your startup scripts' names contain spaces +rc_conf_files="/etc/rc.conf /etc/rc.conf.local" + +# ZFS support +zfs_enable="NO" # Set to YES to automatically mount ZFS file systems + +# ZFSD support +zfsd_enable="NO" # Set to YES to automatically start the ZFS fault + # management daemon. + +gptboot_enable="YES" # GPT boot success/failure reporting. + +# Experimental - test before enabling +gbde_autoattach_all="NO" # YES automatically mounts gbde devices from fstab +gbde_devices="NO" # Devices to automatically attach (list, or AUTO) +gbde_attach_attempts="3" # Number of times to attempt attaching gbde devices +gbde_lockdir="/etc" # Where to look for gbde lockfiles + +# GELI disk encryption configuration. +geli_devices="" # List of devices to automatically attach in addition to + # GELI devices listed in /etc/fstab. +geli_groups="" # List of groups containing devices to automatically + # attach with the same keyfiles and passphrase +geli_tries="" # Number of times to attempt attaching geli device. + # If empty, kern.geom.eli.tries will be used. +geli_default_flags="" # Default flags for geli(8). +geli_autodetach="YES" # Automatically detach on last close. + # Providers are marked as such when all file systems are + # mounted. +# Example use. +#geli_devices="da1 mirror/home" +#geli_da1_flags="-p -k /etc/geli/da1.keys" +#geli_da1_autodetach="NO" +#geli_mirror_home_flags="-k /etc/geli/home.keys" +#geli_groups="storage backup" +#geli_storage_flags="-k /etc/geli/storage.keys" +#geli_storage_devices="ada0 ada1" +#geli_backup_flags="-j /etc/geli/backup.passfile -k /etc/geli/backup.keys" +#geli_backup_devices="ada2 ada3" + +root_rw_mount="YES" # Set to NO to inhibit remounting root read-write. +root_hold_delay="30" # Time to wait for root mount hold release. +fsck_y_enable="NO" # Set to YES to do fsck -y if the initial preen fails. +fsck_y_flags="-T ffs:-R -T ufs:-R" # Additional flags for fsck -y +background_fsck="YES" # Attempt to run fsck in the background where possible. +background_fsck_delay="60" # Time to wait (seconds) before starting the fsck. +growfs_enable="NO" # Set to YES to attempt to grow the root filesystem on boot +netfs_types="nfs:NFS smbfs:SMB" # Net filesystems. +extra_netfs_types="NO" # List of network extra filesystem types for delayed + # mount at startup (or NO). + +############################################################## +### Network configuration sub-section ###################### +############################################################## + +### Basic network and firewall/security options: ### +hostname="" # Set this! +hostid_enable="YES" # Set host UUID. +hostid_file="/etc/hostid" # File with hostuuid. +nisdomainname="NO" # Set to NIS domain if using NIS (or NO). +dhclient_program="/sbin/dhclient" # Path to dhcp client program. +dhclient_flags="" # Extra flags to pass to dhcp client. +#dhclient_flags_fxp0="" # Extra dhclient flags for fxp0 only +background_dhclient="NO" # Start dhcp client in the background. +#background_dhclient_fxp0="YES" # Start dhcp client on fxp0 in the background. +synchronous_dhclient="NO" # Start dhclient directly on configured + # interfaces during startup. +defaultroute_delay="30" # Time to wait for a default route on a DHCP interface. +defaultroute_carrier_delay="5" # Time to wait for carrier while waiting for a default route. +netif_enable="YES" # Set to YES to initialize network interfaces +netif_ipexpand_max="2048" # Maximum number of IP addrs in a range spec. +wpa_supplicant_program="/usr/sbin/wpa_supplicant" +wpa_supplicant_flags="-s" # Extra flags to pass to wpa_supplicant +wpa_supplicant_conf_file="/etc/wpa_supplicant.conf" +# +firewall_enable="NO" # Set to YES to enable firewall functionality +firewall_script="/etc/rc.firewall" # Which script to run to set up the firewall +firewall_type="UNKNOWN" # Firewall type (see /etc/rc.firewall) +firewall_quiet="NO" # Set to YES to suppress rule display +firewall_logging="NO" # Set to YES to enable events logging +firewall_logif="NO" # Set to YES to create logging-pseudo interface +firewall_flags="" # Flags passed to ipfw when type is a file +firewall_coscripts="" # List of executables/scripts to run after + # firewall starts/stops +firewall_client_net="192.0.2.0/24" # IPv4 Network address for "client" + # firewall. +#firewall_client_net_ipv6="2001:db8:2:1::/64" # IPv6 network prefix for + # "client" firewall. +firewall_simple_iif="ed1" # Inside network interface for "simple" + # firewall. +firewall_simple_inet="192.0.2.16/28" # Inside network address for "simple" + # firewall. +firewall_simple_oif="ed0" # Outside network interface for "simple" + # firewall. +firewall_simple_onet="192.0.2.0/28" # Outside network address for "simple" + # firewall. +#firewall_simple_iif_ipv6="ed1" # Inside IPv6 network interface for "simple" + # firewall. +#firewall_simple_inet_ipv6="2001:db8:2:800::/56" # Inside IPv6 network prefix + # for "simple" firewall. +#firewall_simple_oif_ipv6="ed0" # Outside IPv6 network interface for "simple" + # firewall. +#firewall_simple_onet_ipv6="2001:db8:2:0::/56" # Outside IPv6 network prefix + # for "simple" firewall. +firewall_myservices="" # List of TCP ports on which this host + # offers services for "workstation" firewall. +firewall_allowservices="" # List of IPs which have access to + # $firewall_myservices for "workstation" + # firewall. +firewall_trusted="" # List of IPs which have full access to this + # host for "workstation" firewall. +firewall_logdeny="NO" # Set to YES to log default denied incoming + # packets for "workstation" firewall. +firewall_nologports="135-139,445 1026,1027 1433,1434" # List of TCP/UDP ports + # for which denied incoming packets are not + # logged for "workstation" firewall. +firewall_nat_enable="NO" # Enable kernel NAT (if firewall_enable == YES) +firewall_nat_interface="" # Public interface or IPaddress to use +firewall_nat_flags="" # Additional configuration parameters +dummynet_enable="NO" # Load the dummynet(4) module +ipfw_netflow_enable="NO" # Enable netflow logging via ng_netflow +ip_portrange_first="NO" # Set first dynamically allocated port +ip_portrange_last="NO" # Set last dynamically allocated port +ike_enable="NO" # Enable IKE daemon (usually racoon or isakmpd) +ike_program="/usr/local/sbin/isakmpd" # Path to IKE daemon +ike_flags="" # Additional flags for IKE daemon +ipsec_enable="NO" # Set to YES to run setkey on ipsec_file +ipsec_file="/etc/ipsec.conf" # Name of config file for setkey +natd_program="/sbin/natd" # path to natd, if you want a different one. +natd_enable="NO" # Enable natd (if firewall_enable == YES). +natd_interface="" # Public interface or IPaddress to use. +natd_flags="" # Additional flags for natd. +ipfilter_enable="NO" # Set to YES to enable ipfilter functionality +ipfilter_program="/sbin/ipf" # where the ipfilter program lives +ipfilter_rules="/etc/ipf.rules" # rules definition file for ipfilter, see + # /usr/src/contrib/ipfilter/rules for examples +ipfilter_flags="" # additional flags for ipfilter +ipnat_enable="NO" # Set to YES to enable ipnat functionality +ipnat_program="/sbin/ipnat" # where the ipnat program lives +ipnat_rules="/etc/ipnat.rules" # rules definition file for ipnat +ipnat_flags="" # additional flags for ipnat +ipmon_enable="NO" # Set to YES for ipmon; needs ipfilter or ipnat +ipmon_program="/sbin/ipmon" # where the ipfilter monitor program lives +ipmon_flags="-Ds" # typically "-Ds" or "-D /var/log/ipflog" +ipfs_enable="NO" # Set to YES to enable saving and restoring + # of state tables at shutdown and boot +ipfs_program="/sbin/ipfs" # where the ipfs program lives +ipfs_flags="" # additional flags for ipfs +pf_enable="NO" # Set to YES to enable packet filter (pf) +pf_rules="/etc/pf.conf" # rules definition file for pf +pf_program="/sbin/pfctl" # where the pfctl program lives +pf_flags="" # additional flags for pfctl +pflog_enable="NO" # Set to YES to enable packet filter logging +pflog_logfile="/var/log/pflog" # where pflogd should store the logfile +pflog_program="/sbin/pflogd" # where the pflogd program lives +pflog_flags="" # additional flags for pflogd +ftpproxy_enable="NO" # Set to YES to enable ftp-proxy(8) for pf +ftpproxy_flags="" # additional flags for ftp-proxy(8) +pfsync_enable="NO" # Expose pf state to other hosts for syncing +pfsync_syncdev="" # Interface for pfsync to work through +pfsync_syncpeer="" # IP address of pfsync peer host +pfsync_ifconfig="" # Additional options to ifconfig(8) for pfsync +tcp_extensions="YES" # Set to NO to turn off RFC1323 extensions. +log_in_vain="0" # >=1 to log connects to ports w/o listeners. +tcp_keepalive="YES" # Enable stale TCP connection timeout (or NO). +tcp_drop_synfin="NO" # Set to YES to drop TCP packets with SYN+FIN + # NOTE: this violates the TCP specification +icmp_drop_redirect="NO" # Set to YES to ignore ICMP REDIRECT packets +icmp_log_redirect="NO" # Set to YES to log ICMP REDIRECT packets +network_interfaces="auto" # List of network interfaces (or "auto"). +cloned_interfaces="" # List of cloned network interfaces to create. +#cloned_interfaces="gif0 gif1 gif2 gif3" # Pre-cloning GENERIC config. +#ifconfig_lo0="inet 127.0.0.1" # default loopback device configuration. +#ifconfig_lo0_alias0="inet 127.0.0.254 netmask 0xffffffff" # Sample alias entry. +#ifconfig_ed0_ipv6="inet6 2001:db8:1::1 prefixlen 64" # Sample IPv6 addr entry +#ifconfig_ed0_alias0="inet6 2001:db8:2::1 prefixlen 64" # Sample IPv6 alias +#ifconfig_fxp0_name="net0" # Change interface name from fxp0 to net0. +#vlans_fxp0="101 vlan0" # vlan(4) interfaces for fxp0 device +#create_args_vlan0="vlan 102" # vlan tag for vlan0 device +#wlans_ath0="wlan0" # wlan(4) interfaces for ath0 device +#wlandebug_wlan0="scan+auth+assoc" # Set debug flags with wlandebug(8) +#ipv4_addrs_fxp0="192.168.0.1/24 192.168.1.1-5/28" # example IPv4 address entry. +# +#autobridge_interfaces="bridge0" # List of bridges to check +#autobridge_bridge0="tap* vlan0" # Interface glob to automatically add to the bridge +# +# If you have any sppp(4) interfaces above, you might also want to set +# the following parameters. Refer to spppcontrol(8) for their meaning. +sppp_interfaces="" # List of sppp interfaces. +#sppp_interfaces="...0" # example: sppp over ... +#spppconfig_...0="authproto=chap myauthname=foo myauthsecret='top secret' hisauthname=some-gw hisauthsecret='another secret'" + +# User ppp configuration. +ppp_enable="NO" # Start user-ppp (or NO). +ppp_program="/usr/sbin/ppp" # Path to user-ppp program. +ppp_mode="auto" # Choice of "auto", "ddial", "direct" or "dedicated". + # For details see man page for ppp(8). Default is auto. +ppp_nat="YES" # Use PPP's internal network address translation or NO. +ppp_profile="papchap" # Which profile to use from /etc/ppp/ppp.conf. +ppp_user="root" # Which user to run ppp as + +# Start multiple instances of ppp at boot time +#ppp_profile="profile1 profile2 profile3" # Which profiles to use +#ppp_profile1_mode="ddial" # Override ppp mode for profile1 +#ppp_profile2_nat="NO" # Override nat mode for profile2 +# profile3 uses default ppp_mode and ppp_nat + +### Network daemon (miscellaneous) ### +hostapd_enable="NO" # Run hostap daemon. +syslogd_enable="YES" # Run syslog daemon (or NO). +syslogd_program="/usr/sbin/syslogd" # path to syslogd, if you want a different one. +syslogd_flags="-s" # Flags to syslogd (if enabled). +syslogd_oomprotect="YES" # Don't kill syslogd when swap space is exhausted. +altlog_proglist="" # List of chrooted applicatioins in /var +inetd_enable="NO" # Run the network daemon dispatcher (YES/NO). +inetd_program="/usr/sbin/inetd" # path to inetd, if you want a different one. +inetd_flags="-wW -C 60" # Optional flags to inetd +iscsid_enable="NO" # iSCSI initiator daemon. +iscsictl_enable="NO" # iSCSI initiator autostart. +iscsictl_flags="-Aa" # Optional flags to iscsictl. +hastd_enable="NO" # Run the HAST daemon (YES/NO). +hastd_program="/sbin/hastd" # path to hastd, if you want a different one. +hastd_flags="" # Optional flags to hastd. +ctld_enable="NO" # CAM Target Layer / iSCSI target daemon. +local_unbound_enable="NO" # local caching resolver +blacklistd_enable="NO" # Run blacklistd daemon (YES/NO). +blacklistd_flags="" # Optional flags for blacklistd(8). +resolv_enable="YES" # Enable resolv / resolvconf + +# +# kerberos. Do not run the admin daemons on slave servers +# +kdc_enable="NO" # Run a kerberos 5 KDC (or NO). +kdc_program="/usr/libexec/kdc" # path to kerberos 5 KDC +kdc_flags="" # Additional flags to the kerberos 5 KDC +kadmind_enable="NO" # Run kadmind (or NO) +kadmind_program="/usr/libexec/kadmind" # path to kadmind +kpasswdd_enable="NO" # Run kpasswdd (or NO) +kpasswdd_program="/usr/libexec/kpasswdd" # path to kpasswdd +kfd_enable="NO" # Run kfd (or NO) +kfd_program="/usr/libexec/kfd" # path to kerberos 5 kfd daemon +kfd_flags="" +ipropd_master_enable="NO" # Run Heimdal incremental propagation daemon + # (master daemon). +ipropd_master_program="/usr/libexec/ipropd-master" +ipropd_master_flags="" # Flags to ipropd-master. +ipropd_master_keytab="/etc/krb5.keytab" # keytab for ipropd-master. +ipropd_master_slaves="" # slave node names used for /var/heimdal/slaves. +ipropd_slave_enable="NO" # Run Heimdal incremental propagation daemon + # (slave daemon). +ipropd_slave_program="/usr/libexec/ipropd-slave" +ipropd_slave_flags="" # Flags to ipropd-slave. +ipropd_slave_keytab="/etc/krb5.keytab" # keytab for ipropd-slave. +ipropd_slave_master="" # master node name. + +gssd_enable="NO" # Run the gssd daemon (or NO). +gssd_program="/usr/sbin/gssd" # Path to gssd. +gssd_flags="" # Flags for gssd. + +rwhod_enable="NO" # Run the rwho daemon (or NO). +rwhod_flags="" # Flags for rwhod +rarpd_enable="NO" # Run rarpd (or NO). +rarpd_flags="-a" # Flags to rarpd. +bootparamd_enable="NO" # Run bootparamd (or NO). +bootparamd_flags="" # Flags to bootparamd +pppoed_enable="NO" # Run the PPP over Ethernet daemon. +pppoed_provider="*" # Provider and ppp(8) config file entry. +pppoed_flags="-P /var/run/pppoed.pid" # Flags to pppoed (if enabled). +pppoed_interface="fxp0" # The interface that pppoed runs on. +sshd_enable="NO" # Enable sshd +sshd_program="/usr/sbin/sshd" # path to sshd, if you want a different one. +sshd_flags="" # Additional flags for sshd. +ftpd_enable="NO" # Enable stand-alone ftpd. +ftpd_program="/usr/libexec/ftpd" # Path to ftpd, if you want a different one. +ftpd_flags="" # Additional flags to stand-alone ftpd. + +### Network daemon (NFS): All need rpcbind_enable="YES" ### +amd_enable="NO" # Run amd service with $amd_flags (or NO). +amd_program="/usr/sbin/amd" # path to amd, if you want a different one. +amd_flags="-a /.amd_mnt -l syslog /host /etc/amd.map /net /etc/amd.map" +amd_map_program="NO" # Can be set to "ypcat -k amd.master" +autofs_enable="NO" # Run autofs daemons. +automount_flags="" # Flags to automount(8) (if autofs enabled). +automountd_flags="" # Flags to automountd(8) (if autofs enabled). +autounmountd_flags="" # Flags to autounmountd(8) (if autofs enabled). +nfs_client_enable="NO" # This host is an NFS client (or NO). +nfs_access_cache="60" # Client cache timeout in seconds +nfs_server_enable="NO" # This host is an NFS server (or NO). +nfs_server_flags="-u -t" # Flags to nfsd (if enabled). +nfs_server_managegids="NO" # The NFS server maps gids for AUTH_SYS (or NO). +mountd_enable="NO" # Run mountd (or NO). +mountd_flags="-r -S" # Flags to mountd (if NFS server enabled). +weak_mountd_authentication="NO" # Allow non-root mount requests to be served. +nfs_reserved_port_only="NO" # Provide NFS only on secure port (or NO). +nfs_bufpackets="" # bufspace (in packets) for client +rpc_lockd_enable="NO" # Run NFS rpc.lockd needed for client/server. +rpc_lockd_flags="" # Flags to rpc.lockd (if enabled). +rpc_statd_enable="NO" # Run NFS rpc.statd needed for client/server. +rpc_statd_flags="" # Flags to rpc.statd (if enabled). +rpcbind_enable="NO" # Run the portmapper service (YES/NO). +rpcbind_program="/usr/sbin/rpcbind" # path to rpcbind, if you want a different one. +rpcbind_flags="" # Flags to rpcbind (if enabled). +rpc_ypupdated_enable="NO" # Run if NIS master and SecureRPC (or NO). +keyserv_enable="NO" # Run the SecureRPC keyserver (or NO). +keyserv_flags="" # Flags to keyserv (if enabled). +nfsv4_server_enable="NO" # Enable support for NFSv4 +nfscbd_enable="NO" # NFSv4 client side callback daemon +nfscbd_flags="" # Flags for nfscbd +nfsuserd_enable="NO" # NFSv4 user/group name mapping daemon +nfsuserd_flags="" # Flags for nfsuserd + +### Network Time Services options: ### +timed_enable="NO" # Run the time daemon (or NO). +timed_flags="" # Flags to timed (if enabled). +ntpdate_enable="NO" # Run ntpdate to sync time on boot (or NO). +ntpdate_program="/usr/sbin/ntpdate" # path to ntpdate, if you want a different one. +ntpdate_flags="-b" # Flags to ntpdate (if enabled). +ntpdate_config="/etc/ntp.conf" # ntpdate(8) configuration file +ntpdate_hosts="" # Whitespace-separated list of ntpdate(8) servers. +ntpd_enable="NO" # Run ntpd Network Time Protocol (or NO). +ntpd_program="/usr/sbin/ntpd" # path to ntpd, if you want a different one. +ntpd_config="/etc/ntp.conf" # ntpd(8) configuration file +ntpd_sync_on_start="NO" # Sync time on ntpd startup, even if offset is high +ntpd_flags="" # Additional flags to ntpd +ntp_src_leapfile="/etc/ntp/leap-seconds" + # Initial source for ntpd leapfile +ntp_db_leapfile="/var/db/ntpd.leap-seconds.list" + # Working copy (updated weekly) leapfile +ntp_leapfile_sources="https://www.ietf.org/timezones/data/leap-seconds.list" + # Source from which to fetch leapfile +ntp_leapfile_fetch_opts="-mq" # Options to use for ntp leapfile fetch, + # e.g. --no-verify-peer +ntp_leapfile_expiry_days=30 # Check for new leapfile 30 days prior to + # expiry. +ntp_leapfile_fetch_verbose="NO" # Be verbose during NTP leapfile fetch + +# Network Information Services (NIS) options: All need rpcbind_enable="YES" ### +nis_client_enable="NO" # We're an NIS client (or NO). +nis_client_flags="" # Flags to ypbind (if enabled). +nis_ypset_enable="NO" # Run ypset at boot time (or NO). +nis_ypset_flags="" # Flags to ypset (if enabled). +nis_server_enable="NO" # We're an NIS server (or NO). +nis_server_flags="" # Flags to ypserv (if enabled). +nis_ypxfrd_enable="NO" # Run rpc.ypxfrd at boot time (or NO). +nis_ypxfrd_flags="" # Flags to rpc.ypxfrd (if enabled). +nis_yppasswdd_enable="NO" # Run rpc.yppasswdd at boot time (or NO). +nis_yppasswdd_flags="" # Flags to rpc.yppasswdd (if enabled). +nis_ypldap_enable="NO" # Run ypldap at boot time (or NO). +nis_ypldap_flags="" # Flags to ypldap (if enabled). + +### SNMP daemon ### +# Be sure to understand the security implications of running SNMP v1/v2 +# in your network. +bsnmpd_enable="NO" # Run the SNMP daemon (or NO). +bsnmpd_flags="" # Flags for bsnmpd. + +### Network routing options: ### +defaultrouter="NO" # Set to default gateway (or NO). +static_arp_pairs="" # Set to static ARP list (or leave empty). +static_ndp_pairs="" # Set to static NDP list (or leave empty). +static_routes="" # Set to static route list (or leave empty). +gateway_enable="NO" # Set to YES if this host will be a gateway. +routed_enable="NO" # Set to YES to enable a routing daemon. +routed_program="/sbin/routed" # Name of routing daemon to use if enabled. +routed_flags="-q" # Flags for routing daemon. +arpproxy_all="NO" # replaces obsolete kernel option ARP_PROXYALL. +forward_sourceroute="NO" # do source routing (only if gateway_enable is set to "YES") +accept_sourceroute="NO" # accept source routed packets to us + +### Bluetooth ### +hcsecd_enable="NO" # Enable hcsecd(8) (or NO) +hcsecd_config="/etc/bluetooth/hcsecd.conf" # hcsecd(8) configuration file + +sdpd_enable="NO" # Enable sdpd(8) (or NO) +sdpd_control="/var/run/sdp" # sdpd(8) control socket +sdpd_groupname="nobody" # set spdp(8) user/group to run as after +sdpd_username="nobody" # it initializes + +bthidd_enable="NO" # Enable bthidd(8) (or NO) +bthidd_config="/etc/bluetooth/bthidd.conf" # bthidd(8) configuration file +bthidd_hids="/var/db/bthidd.hids" # bthidd(8) known HID devices file +bthidd_evdev_support="AUTO" # AUTO depends on EVDEV_SUPPORT kernel option + +rfcomm_pppd_server_enable="NO" # Enable rfcomm_pppd(8) in server mode (or NO) +rfcomm_pppd_server_profile="one two" # Profile to use from /etc/ppp/ppp.conf +# +#rfcomm_pppd_server_one_bdaddr="" # Override local bdaddr for 'one' +rfcomm_pppd_server_one_channel="1" # Override local channel for 'one' +#rfcomm_pppd_server_one_register_sp="NO" # Override SP and DUN register +#rfcomm_pppd_server_one_register_dun="NO" # for 'one' +# +#rfcomm_pppd_server_two_bdaddr="" # Override local bdaddr for 'two' +rfcomm_pppd_server_two_channel="3" # Override local channel for 'two' +#rfcomm_pppd_server_two_register_sp="NO" # Override SP and DUN register +#rfcomm_pppd_server_two_register_dun="NO" # for 'two' + +ubthidhci_enable="NO" # Switch an USB BT controller present on +#ubthidhci_busnum="3" # bus 3 and addr 2 from HID mode to HCI mode. +#ubthidhci_addr="2" # Check usbconfig list to find the correct + # numbers for your system. + +### Network link/usability verification options +netwait_enable="NO" # Enable rc.d/netwait (or NO) +#netwait_ip="" # Wait for ping response from any IP in this list. +netwait_timeout="60" # Total number of seconds to perform pings. +#netwait_if="" # Wait for active link on each intf in this list. +netwait_if_timeout="30" # Total number of seconds to monitor link state. + +### Miscellaneous network options: ### +icmp_bmcastecho="NO" # respond to broadcast ping packets + +### IPv6 options: ### +ipv6_network_interfaces="auto" # List of IPv6 network interfaces + # (or "auto" or "none"). +ipv6_activate_all_interfaces="NO" # If NO, interfaces which have no + # corresponding $ifconfig_IF_ipv6 is + # marked as IFDISABLED for security + # reason. +ipv6_defaultrouter="NO" # Set to IPv6 default gateway (or NO). +#ipv6_defaultrouter="2002:c058:6301::" # Use this for 6to4 (RFC 3068) +ipv6_static_routes="" # Set to static route list (or leave empty). +#ipv6_static_routes="xxx" # An example to set fec0:0000:0000:0006::/64 + # route toward loopback interface. +#ipv6_route_xxx="fec0:0000:0000:0006:: -prefixlen 64 ::1" +ipv6_gateway_enable="NO" # Set to YES if this host will be a gateway. +ipv6_cpe_wanif="NO" # Set to the upstream interface name if this + # node will work as a router to forward IPv6 + # packets not explicitly addressed to itself. +ipv6_privacy="NO" # Use privacy address on RA-receiving IFs + # (RFC 4941) + +route6d_enable="NO" # Set to YES to enable an IPv6 routing daemon. +route6d_program="/usr/sbin/route6d" # Name of IPv6 routing daemon. +route6d_flags="" # Flags to IPv6 routing daemon. +#route6d_flags="-l" # Example for route6d with only IPv6 site local + # addrs. +#route6d_flags="-q" # If you want to run a routing daemon on an end + # node, you should stop advertisement. +#ipv6_network_interfaces="ed0 ep0" # Examples for router + # or static configuration for end node. + # Choose correct prefix value. +#ipv6_prefix_ed0="fec0:0000:0000:0001 fec0:0000:0000:0002" # Examples for rtr. +#ipv6_prefix_ep0="fec0:0000:0000:0003 fec0:0000:0000:0004" # Examples for rtr. +ipv6_default_interface="NO" # Default output interface for scoped addrs. + # This works only with + # ipv6_gateway_enable="NO". +rtsol_flags="" # Flags to IPv6 router solicitation. +rtsold_enable="NO" # Set to YES to enable an IPv6 router + # solicitation daemon. +rtsold_flags="-a" # Flags to an IPv6 router solicitation + # daemon. +rtadvd_enable="NO" # Set to YES to enable an IPv6 router + # advertisement daemon. If set to YES, + # this router becomes a possible candidate + # IPv6 default router for local subnets. +rtadvd_interfaces="" # Interfaces rtadvd sends RA packets. +stf_interface_ipv4addr="" # Local IPv4 addr for 6to4 IPv6 over IPv4 + # tunneling interface. Specify this entry + # to enable 6to4 interface. +stf_interface_ipv4plen="0" # Prefix length for 6to4 IPv4 addr, + # to limit peer addr range. Effective value + # is 0-31. +stf_interface_ipv6_ifid="0:0:0:1" # IPv6 interface id for stf0. + # If you like, you can set "AUTO" for this. +stf_interface_ipv6_slaid="0000" # IPv6 Site Level Aggregator for stf0 +ipv6_ipv4mapping="NO" # Set to "YES" to enable IPv4 mapped IPv6 addr + # communication. (like ::ffff:a.b.c.d) +ipv6_ipfilter_rules="/etc/ipf6.rules" # rules definition file for ipfilter, + # see /usr/src/contrib/ipfilter/rules + # for examples +ip6addrctl_enable="YES" # Set to YES to enable default address selection +ip6addrctl_verbose="NO" # Set to YES to enable verbose configuration messages +ip6addrctl_policy="AUTO" # A pre-defined address selection policy + # (ipv4_prefer, ipv6_prefer, or AUTO) + +############################################################## +### System console options ################################# +############################################################## + +keyboard="" # keyboard device to use (default /dev/kbd0). +keymap="NO" # keymap in /usr/share/{syscons,vt}/keymaps/* (or NO). +keyrate="NO" # keyboard rate to: slow, normal, fast (or NO). +keybell="NO" # See kbdcontrol(1) for options. Use "off" to disable. +keychange="NO" # function keys default values (or NO). +cursor="NO" # cursor type {normal|blink|destructive} (or NO). +scrnmap="NO" # screen map in /usr/share/syscons/scrnmaps/* (or NO). +font8x16="NO" # font 8x16 from /usr/share/{syscons,vt}/fonts/* (or NO). +font8x14="NO" # font 8x14 from /usr/share/{syscons,vt}/fonts/* (or NO). +font8x8="NO" # font 8x8 from /usr/share/{syscons,vt}/fonts/* (or NO). +blanktime="300" # blank time (in seconds) or "NO" to turn it off. +saver="NO" # screen saver: Uses /boot/kernel/${saver}_saver.ko +moused_nondefault_enable="YES" # Treat non-default mice as enabled unless + # specifically overriden in rc.conf(5). +moused_enable="NO" # Run the mouse daemon. +moused_type="auto" # See man page for rc.conf(5) for available settings. +moused_port="/dev/psm0" # Set to your mouse port. +moused_flags="" # Any additional flags to moused. +mousechar_start="NO" # if 0xd0-0xd3 default range is occupied in your + # language code table, specify alternative range + # start like mousechar_start=3, see vidcontrol(1) +allscreens_flags="" # Set this vidcontrol mode for all virtual screens +allscreens_kbdflags="" # Set this kbdcontrol mode for all virtual screens + +############################################################## +### Mail Transfer Agent (MTA) options ###################### +############################################################## + +mta_start_script="/etc/rc.sendmail" + # Script to start your chosen MTA, called by /etc/rc. +# Settings for /etc/rc.sendmail and /etc/rc.d/sendmail: +sendmail_enable="NO" # Run the sendmail inbound daemon (YES/NO). +sendmail_pidfile="/var/run/sendmail.pid" # sendmail pid file +sendmail_procname="/usr/sbin/sendmail" # sendmail process name +sendmail_flags="-L sm-mta -bd -q30m" # Flags to sendmail (as a server) +sendmail_cert_create="YES" # Create a server certificate if none (YES/NO) +#sendmail_cert_cn="CN" # CN of the generate certificate +sendmail_submit_enable="YES" # Start a localhost-only MTA for mail submission +sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost" + # Flags for localhost-only MTA +sendmail_outbound_enable="YES" # Dequeue stuck mail (YES/NO). +sendmail_outbound_flags="-L sm-queue -q30m" # Flags to sendmail (outbound only) +sendmail_msp_queue_enable="YES" # Dequeue stuck clientmqueue mail (YES/NO). +sendmail_msp_queue_flags="-L sm-msp-queue -Ac -q30m" + # Flags for sendmail_msp_queue daemon. +sendmail_rebuild_aliases="NO" # Run newaliases if necessary (YES/NO). + + +############################################################## +### Miscellaneous administrative options ################### +############################################################## + +auditd_enable="NO" # Run the audit daemon. +auditd_program="/usr/sbin/auditd" # Path to the audit daemon. +auditd_flags="" # Which options to pass to the audit daemon. +auditdistd_enable="NO" # Run the audit daemon. +auditdistd_program="/usr/sbin/auditdistd" # Path to the auditdistd daemon. +auditdistd_flags="" # Which options to pass to the auditdistd daemon. +cron_enable="YES" # Run the periodic job daemon. +cron_program="/usr/sbin/cron" # Which cron executable to run (if enabled). +cron_dst="YES" # Handle DST transitions intelligently (YES/NO) +cron_flags="" # Which options to pass to the cron daemon. +cfumass_enable="NO" # Create default LUN for cfumass(4). +cfumass_dir="/var/cfumass" # File to LUN's contents. +cfumass_image="/var/tmp/cfumass.img" # LUN's backing file path. +lpd_enable="NO" # Run the line printer daemon. +lpd_program="/usr/sbin/lpd" # path to lpd, if you want a different one. +lpd_flags="" # Flags to lpd (if enabled). +nscd_enable="NO" # Run the nsswitch caching daemon. +chkprintcap_enable="NO" # Run chkprintcap(8) before running lpd. +chkprintcap_flags="-d" # Create missing directories by default. +dumpdev="AUTO" # Device to crashdump to (device name, AUTO, or NO). +dumpon_flags="" # Options to pass to dumpon(8), followed by dumpdev. +dumpdir="/var/crash" # Directory where crash dumps are to be stored +savecore_enable="YES" # Extract core from dump devices if any +savecore_flags="-m 10" # Used if dumpdev is enabled above, and present. + # By default, only the 10 most recent kernel dumps + # are saved. +crashinfo_enable="YES" # Automatically generate crash dump summary. +crashinfo_program="/usr/sbin/crashinfo" # Script to generate crash dump summary. +quota_enable="NO" # turn on quotas on startup (or NO). +check_quotas="YES" # Check quotas on startup (or NO). +quotaon_flags="-a" # Turn quotas on for all file systems (if enabled) +quotaoff_flags="-a" # Turn quotas off for all file systems at shutdown +quotacheck_flags="-a" # Check all file system quotas (if enabled) +accounting_enable="NO" # Turn on process accounting (or NO). +ibcs2_enable="NO" # Ibcs2 (SCO) emulation loaded at startup (or NO). +ibcs2_loaders="coff" # List of additional Ibcs2 loaders (or NO). +firstboot_sentinel="/firstboot" # Scripts with "firstboot" keyword are run if + # this file exists. Should be on a R/W filesystem so + # the file can be deleted after the boot completes. + +# Emulation/compatibility services provided by /etc/rc.d/abi +sysvipc_enable="NO" # Load System V IPC primitives at startup (or NO). +linux_enable="NO" # Linux binary compatibility loaded at startup (or NO). +clear_tmp_enable="NO" # Clear /tmp at startup. +clear_tmp_X="YES" # Clear and recreate X11-related directories in /tmp +ldconfig_insecure="NO" # Set to YES to disable ldconfig security checks +ldconfig_paths="/usr/lib/compat /usr/local/lib /usr/local/lib/compat/pkg" + # shared library search paths +ldconfig32_paths="/usr/lib32 /usr/lib32/compat" + # 32-bit compatibility shared library search paths +ldconfigsoft_paths="/usr/libsoft /usr/libsoft/compat /usr/local/libsoft" + # soft float compatibility shared library search paths + # Note: temporarily with extra stuff for transition +ldconfig_paths_aout="/usr/lib/compat/aout /usr/local/lib/aout" + # a.out shared library search paths +ldconfig_local_dirs="/usr/local/libdata/ldconfig" + # Local directories with ldconfig configuration files. +ldconfig_local32_dirs="/usr/local/libdata/ldconfig32" + # Local directories with 32-bit compatibility ldconfig + # configuration files. +ldconfig_localsoft_dirs="/usr/local/libdata/ldconfigsoft" + # Local directories with soft float compatibility ldconfig + # configuration files. +kern_securelevel_enable="NO" # kernel security level (see security(7)) +kern_securelevel="-1" # range: -1..3 ; `-1' is the most insecure + # Note that setting securelevel to 0 will result + # in the system booting with securelevel set to 1, as + # init(8) will raise the level when rc(8) completes. +update_motd="YES" # update version info in /etc/motd (or NO) +entropy_boot_file="/boot/entropy" # Set to NO to disable very early + # (used at early boot time) entropy caching through reboots. +entropy_file="/entropy" # Set to NO to disable late (used when going multi-user) + # entropy through reboots. + # /var/db/entropy-file is preferred if / is not avail. +entropy_dir="/var/db/entropy" # Set to NO to disable caching entropy via cron. +entropy_save_sz="4096" # Size of the entropy cache files. +entropy_save_num="8" # Number of entropy cache files to save. +harvest_mask="511" # Entropy device harvests all but the very invasive sources. + # (See 'sysctl kern.random.harvest' and random(4)) +dmesg_enable="YES" # Save dmesg(8) to /var/run/dmesg.boot +watchdogd_enable="NO" # Start the software watchdog daemon +watchdogd_flags="" # Flags to watchdogd (if enabled) +devfs_rulesets="/etc/defaults/devfs.rules /etc/devfs.rules" # Files containing + # devfs(8) rules. +devfs_system_ruleset="" # The name (NOT number) of a ruleset to apply to /dev +devfs_set_rulesets="" # A list of /mount/dev=ruleset_name settings to + # apply (must be mounted already, i.e. fstab(5)) +devfs_load_rulesets="YES" # Enable to always load the default rulesets +performance_cx_lowest="NONE" # Online CPU idle state +performance_cpu_freq="NONE" # Online CPU frequency +economy_cx_lowest="Cmax" # Offline CPU idle state +economy_cpu_freq="NONE" # Offline CPU frequency +virecover_enable="YES" # Perform housekeeping for the vi(1) editor +ugidfw_enable="NO" # Load mac_bsdextended(4) rules on boot +bsdextended_script="/etc/rc.bsdextended" # Default mac_bsdextended(4) + # ruleset file. +newsyslog_enable="YES" # Run newsyslog at startup. +newsyslog_flags="-CN" # Newsyslog flags to create marked files +mixer_enable="YES" # Run the sound mixer. +opensm_enable="NO" # Opensm(8) for infiniband devices defaults to off + +# rctl(8) requires kernel options RACCT and RCTL +rctl_enable="YES" # Load rctl(8) rules on boot +rctl_rules="/etc/rctl.conf" # rctl(8) ruleset. See rctl.conf(5). + +iovctl_files="" # Config files for iovctl(8) + +############################################################## +### Jail Configuration (see rc.conf(5) manual page) ########## +############################################################## +jail_enable="NO" # Set to NO to disable starting of any jails +jail_confwarn="YES" # Prevent warning about obsolete per-jail configuration +jail_parallel_start="NO" # Start jails in the background +jail_list="" # Space separated list of names of jails +jail_reverse_stop="NO" # Stop jails in reverse order + +############################################################## +### Define source_rc_confs, the mechanism used by /etc/rc.* ## +### scripts to source rc_conf_files overrides safely. ## +############################################################## + +if [ -z "${source_rc_confs_defined}" ]; then + source_rc_confs_defined=yes + source_rc_confs() { + local i sourced_files + for i in ${rc_conf_files}; do + case ${sourced_files} in + *:$i:*) + ;; + *) + sourced_files="${sourced_files}:$i:" + if [ -r $i ]; then + . $i + fi + ;; + esac + done + # Re-do process to pick up [possibly] redefined $rc_conf_files + for i in ${rc_conf_files}; do + case ${sourced_files} in + *:$i:*) + ;; + *) + sourced_files="${sourced_files}:$i:" + if [ -r $i ]; then + . $i + fi + ;; + esac + done + } +fi + +# Allow vendors to override FreeBSD defaults in /etc/default/rc.conf +# without the need to carefully manage /etc/rc.conf. +if [ -r /etc/defaults/vendor.conf ]; then + . /etc/defaults/vendor.conf +fi Property changes on: head/sbin/init/rc.conf ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.initdiskless =================================================================== --- head/sbin/init/rc.initdiskless (nonexistent) +++ head/sbin/init/rc.initdiskless (revision 336847) @@ -0,0 +1,382 @@ +#!/bin/sh +# +# Copyright (c) 1999 Matt Dillon +# 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$ + +# On entry to this script the entire system consists of a read-only root +# mounted via NFS. The kernel has run BOOTP and configured an interface +# (otherwise it would not have been able to mount the NFS root!) +# +# We use the contents of /conf to create and populate memory filesystems +# that are mounted on top of this root to implement the writable +# (and host-specific) parts of the root filesystem, and other volatile +# filesystems. +# +# The hierarchy in /conf has the form /conf/T/M/ where M are directories +# for which memory filesystems will be created and filled, +# and T is one of the "template" directories below: +# +# base universal base, typically a replica of the original root; +# default secondary universal base, typically overriding some +# of the files in the original root; +# ${ipba} where ${ipba} is the assigned broadcast IP address +# bcast/${ipba} same as above +# ${class} where ${class} is a list of directories supplied by +# bootp/dhcp through the T134 option. +# ${ipba} and ${class} are typically used to configure features +# for group of diskless clients, or even individual features; +# ${ip} where ${ip} is the machine's assigned IP address, typically +# used to set host-specific features; +# ip/${ip} same as above +# +# Template directories are scanned in the order they are listed above, +# with each successive directory overriding (merged into) the previous one; +# non-existing directories are ignored. The subdirectory forms exist to +# help keep the top level /conf manageable in large installations. +# +# The existence of a directory /conf/T/M causes this script to create a +# memory filesystem mounted as /M on the client. +# +# Some files in /conf have special meaning, namely: +# +# Filename Action +# ---------------------------------------------------------------- +# /conf/T/M/remount +# The contents of the file is a mount command. E.g. if +# /conf/1.2.3.4/foo/remount contains "mount -o ro /dev/ad0s3", +# then /dev/ad0s3 will be mounted on /conf/1.2.3.4/foo/ +# +# /conf/T/M/remount_optional +# If this file exists, then failure to execute the mount +# command contained in /conf/T/M/remount is non-fatal. +# +# /conf/T/M/remount_subdir +# If this file exists, then the behaviour of /conf/T/M/remount +# changes as follows: +# 1. /conf/T/M/remount is invoked to mount the root of the +# filesystem where the configuration data exists on a +# temporary mountpoint. +# 2. /conf/T/M/remount_subdir is then invoked to mount a +# *subdirectory* of the filesystem mounted by +# /conf/T/M/remount on /conf/T/M/. +# +# /conf/T/M/diskless_remount +# The contents of the file points to an NFS filesystem, +# possibly followed by mount_nfs options. If the server name +# is omitted, the script will prepend the root path used when +# booting. E.g. if you booted from foo.com:/path/to/root, +# an entry for /conf/base/etc/diskless_remount could be any of +# foo.com:/path/to/root/etc +# /etc -o ro +# Because mount_nfs understands ".." in paths, it is +# possible to mount from locations above the NFS root with +# paths such as "/../../etc". +# +# /conf/T/M/md_size +# The contents of the file specifies the size of the memory +# filesystem to be created, in 512 byte blocks. +# The default size is 10240 blocks (5MB). E.g. if +# /conf/base/etc/md_size contains "30000" then a 15MB MFS +# will be created. In case of multiple entries for the same +# directory M, the last one in the scanning order is used. +# NOTE: If you only need to create a memory filesystem but not +# initialize it from a template, it is preferable to specify +# it in fstab e.g. as "md /tmp mfs -s=30m,rw 0 0" +# +# /conf/T/SUBDIR.cpio.gz +# The file is cpio'd into /SUBDIR (and a memory filesystem is +# created for /SUBDIR if necessary). The presence of this file +# prevents the copy from /conf/T/SUBDIR/ +# +# /conf/T/SUBDIR.remove +# The list of paths contained in the file are rm -rf'd +# relative to /SUBDIR. +# +# /conf/diskless_remount +# Similar to /conf/T/M/diskless_remount above, but allows +# all of /conf to be remounted. This can be used to allow +# multiple roots to share the same /conf. +# +# +# You will almost universally want to create the following files under /conf +# +# File Content +# ---------------------------- ---------------------------------- +# /conf/base/etc/md_size size of /etc filesystem +# /conf/base/etc/diskless_remount "/etc" +# /conf/default/etc/rc.conf generic diskless config parameters +# /conf/default/etc/fstab generic diskless fstab e.g. like this +# +# foo:/root_part / nfs ro 0 0 +# foo:/usr_part /usr nfs ro 0 0 +# foo:/home_part /home nfs rw 0 0 +# md /tmp mfs -s=30m,rw 0 0 +# md /var mfs -s=30m,rw 0 0 +# proc /proc procfs rw 0 0 +# +# plus, possibly, overrides for password files etc. +# +# NOTE! /var, /tmp, and /dev will be typically created elsewhere, e.g. +# as entries in the fstab as above. +# Those filesystems should not be specified in /conf. +# +# (end of documentation, now get to the real code) + +dlv=`/sbin/sysctl -n vfs.nfs.diskless_valid 2> /dev/null` + +# DEBUGGING +# log something on stdout if verbose. +o_verbose=0 # set to 1 or 2 if you want more debugging +log() { + [ ${o_verbose} -gt 0 ] && echo "*** $* ***" + [ ${o_verbose} -gt 1 ] && read -p "=== Press enter to continue" foo +} + +# chkerr: +# +# Routine to check for error +# +# checks error code and drops into shell on failure. +# if shell exits, terminates script as well as /etc/rc. +# if remount_optional exists under the mountpoint, skip this check. +# +chkerr() { + lastitem () ( n=$(($# - 1)) ; shift $n ; echo $1 ) + mountpoint="$(lastitem $2)" + [ -r $mountpoint/remount_optional ] && ( echo "$2 failed: ignoring due to remount_optional" ; return ) + case $1 in + 0) + ;; + *) + echo "$2 failed: dropping into /bin/sh" + /bin/sh + # RESUME + ;; + esac +} + +# The list of filesystems to umount after the copy +to_umount="" + +handle_remount() { # $1 = mount point + local nfspt mountopts b + b=$1 + log handle_remount $1 + [ -d $b -a -f $b/diskless_remount ] || return + read nfspt mountopts < $b/diskless_remount + log "nfspt ${nfspt} mountopts ${mountopts}" + # prepend the nfs root if not present + [ `expr "$nfspt" : '\(.\)'` = "/" ] && nfspt="${nfsroot}${nfspt}" + mount_nfs $mountopts $nfspt $b + chkerr $? "mount_nfs $nfspt $b" + to_umount="$b ${to_umount}" +} + +# Create a generic memory disk. +# The 'auto' parameter will attempt to use tmpfs(5), falls back to md(4). +# $1 is size in 512-byte sectors, $2 is the mount point. +mount_md() { + /sbin/mdmfs -s $1 auto $2 +} + +# Create the memory filesystem if it has not already been created +# +create_md() { + [ "x`eval echo \\$md_created_$1`" = "x" ] || return # only once + if [ "x`eval echo \\$md_size_$1`" = "x" ]; then + md_size=10240 + else + md_size=`eval echo \\$md_size_$1` + fi + log create_md $1 with size $md_size + mount_md $md_size /$1 + /bin/chmod 755 /$1 + eval md_created_$1=created +} + +# DEBUGGING +# +# set -v + +# Figure out our interface and IP. +# +bootp_ifc="" +bootp_ipa="" +bootp_ipbca="" +class="" +if [ ${dlv:=0} -ne 0 ] ; then + iflist=`ifconfig -l` + for i in ${iflist} ; do + set -- `ifconfig ${i}` + while [ $# -ge 1 ] ; do + if [ "${bootp_ifc}" = "" -a "$1" = "inet" ] ; then + bootp_ifc=${i} ; bootp_ipa=${2} ; shift + fi + if [ "${bootp_ipbca}" = "" -a "$1" = "broadcast" ] ; then + bootp_ipbca=$2; shift + fi + shift + done + if [ "${bootp_ifc}" != "" ] ; then + break + fi + done + # Get the values passed with the T134 bootp cookie. + class="`/sbin/sysctl -qn kern.bootp_cookie`" + + echo "Interface ${bootp_ifc} IP-Address ${bootp_ipa} Broadcast ${bootp_ipbca} ${class}" +fi + +log Figure out our NFS root path +# +set -- `mount -t nfs` +while [ $# -ge 1 ] ; do + if [ "$2" = "on" -a "$3" = "/" ]; then + nfsroot="$1" + break + fi + shift +done + +# The list of directories with template files +templates="base default" +if [ -n "${bootp_ipbca}" ]; then + templates="${templates} ${bootp_ipbca} bcast/${bootp_ipbca}" +fi +if [ -n "${class}" ]; then + templates="${templates} ${class}" +fi +if [ -n "${bootp_ipa}" ]; then + templates="${templates} ${bootp_ipa} ip/${bootp_ipa}" +fi + +# If /conf/diskless_remount exists, remount all of /conf. +handle_remount /conf + +# Resolve templates in /conf/base, /conf/default, /conf/${bootp_ipbca}, +# and /conf/${bootp_ipa}. For each subdirectory found within these +# directories: +# +# - calculate memory filesystem sizes. If the subdirectory (prior to +# NFS remounting) contains the file 'md_size', the contents specified +# in 512 byte sectors will be used to size the memory filesystem. Otherwise +# 8192 sectors (4MB) is used. +# +# - handle NFS remounts. If the subdirectory contains the file +# diskless_remount, the contents of the file is NFS mounted over +# the directory. For example /conf/base/etc/diskless_remount +# might contain 'myserver:/etc'. NFS remounts allow you to avoid +# having to dup your system directories in /conf. Your server must +# be sure to export those filesystems -alldirs, however. +# If the diskless_remount file contains a string beginning with a +# '/' it is assumed that the local nfsroot should be prepended to +# it before attemping to the remount. This allows the root to be +# relocated without needing to change the remount files. +# +log "templates are ${templates}" +for i in ${templates} ; do + for j in /conf/$i/* ; do + [ -d $j ] || continue + + # memory filesystem size specification + subdir=${j##*/} + [ -f $j/md_size ] && eval md_size_$subdir=`cat $j/md_size` + + # remount. Beware, the command is in the file itself! + if [ -f $j/remount ]; then + if [ -f $j/remount_subdir ]; then + k="/conf.tmp/$i/$subdir" + [ -d $k ] || continue + + # Mount the filesystem root where the config data is + # on the temporary mount point. + nfspt=`/bin/cat $j/remount` + $nfspt $k + chkerr $? "$nfspt $k" + + # Now use a nullfs mount to get the data where we + # really want to see it. + remount_subdir=`/bin/cat $j/remount_subdir` + remount_subdir_cmd="mount -t nullfs $k/$remount_subdir" + + $remount_subdir_cmd $j + chkerr $? "$remount_subdir_cmd $j" + + # XXX check order -- we must force $k to be unmounted + # after j, as j depends on k. + to_umount="$j $k ${to_umount}" + else + nfspt=`/bin/cat $j/remount` + $nfspt $j + chkerr $? "$nfspt $j" + to_umount="$j ${to_umount}" # XXX hope it is really a mount! + fi + fi + + # NFS remount + handle_remount $j + done +done + +# - Create all required MFS filesystems and populate them from +# our templates. Support both a direct template and a dir.cpio.gz +# archive. Support dir.remove files containing a list of relative +# paths to remove. +# +# The dir.cpio.gz form is there to make the copy process more efficient, +# so if the cpio archive is present, it prevents the files from dir/ +# from being copied. + +for i in ${templates} ; do + for j in /conf/$i/* ; do + subdir=${j##*/} + if [ -d $j -a ! -f $j.cpio.gz ]; then + create_md $subdir + cp -Rp $j/ /$subdir + fi + done + for j in /conf/$i/*.cpio.gz ; do + subdir=${j%*.cpio.gz} + subdir=${subdir##*/} + if [ -f $j ]; then + create_md $subdir + echo "Loading /$subdir from cpio archive $j" + (cd / ; /rescue/tar -xpf $j) + fi + done + for j in /conf/$i/*.remove ; do + subdir=${j%*.remove} + subdir=${subdir##*/} + if [ -f $j ]; then + # doubly sure it is a memory disk before rm -rf'ing + create_md $subdir + (cd /$subdir; rm -rf `/bin/cat $j`) + fi + done +done + +# umount partitions used to fill the memory filesystems +[ -n "${to_umount}" ] && umount $to_umount Property changes on: head/sbin/init/rc.initdiskless ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.resume =================================================================== --- head/sbin/init/rc.resume (nonexistent) +++ head/sbin/init/rc.resume (revision 336847) @@ -0,0 +1,58 @@ +#!/bin/sh +# +# Copyright (c) 1999 Mitsuru IWASAKI +# 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$ +# + +# sample run command file for APM Resume Event + +if [ $# -ne 2 ]; then + echo "Usage: $0 [apm|acpi] [standby,suspend|1-4]" + exit 1 +fi + +subsystem=$1 +state=$2 + +if [ -r /var/run/rc.suspend.pid ]; then + kill -9 `cat /var/run/rc.suspend.pid` + /bin/rm -f /var/run/rc.suspend.pid + echo 'rc.resume: killed rc.suspend that was still around' +fi + +# Turns on a power supply of a card in the slot inactivated. +# See also contrib/pccardq.c (only for PAO users). +# pccardq | awk -F '~' '$5 == "inactive" \ +# { printf("pccardc power %d 1", $1); }' | sh + +# If a device driver has problems resuming, try unloading it before +# suspend and reloading it on resume. Example: +# kldload usb + +/usr/bin/logger -t $subsystem resumed at `/bin/date +'%Y%m%d %H:%M:%S'` +/bin/sync && /bin/sync && /bin/sync + +exit 0 Property changes on: head/sbin/init/rc.resume ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.shutdown =================================================================== --- head/sbin/init/rc.shutdown (nonexistent) +++ head/sbin/init/rc.shutdown (revision 336847) @@ -0,0 +1,113 @@ +#!/bin/sh +# +# Copyright (c) 1997 Ollivier Robert +# 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$ +# + +# Site-specific closing actions for daemons run by init on shutdown, +# or before going single-user from multi-user. +# Output and errors are directed to console by init, and the +# console is the controlling terminal. + +stty status '^T' 2> /dev/null + +# Set shell to ignore SIGINT (2), but not children; +# shell catches SIGQUIT (3) and returns to single user after fsck. +trap : 2 +trap : 3 # shouldn't be needed + +HOME=/ +PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin +export HOME PATH + +. /etc/rc.subr + +load_rc_config + +# reverse_list list +# print the list in reverse order +# +reverse_list() +{ + _revlist= + for _revfile in $*; do + _revlist="$_revfile${script_name_sep}$_revlist" + done + echo $_revlist +} + +# If requested, start a watchdog timer in the background which +# will terminate rc.shutdown if rc.shutdown doesn't complete +# within the specified time. +# +_rcshutdown_watchdog= +if [ -n "$rcshutdown_timeout" ]; then + debug "Initiating watchdog timer." + sleep $rcshutdown_timeout && ( + _msg="$rcshutdown_timeout second watchdog" + _msg="$_msg timeout expired. Shutdown terminated." + logger -t rc.shutdown "$_msg" + echo "$_msg" + date + kill -KILL $$ >/dev/null 2>&1 + ) & + _rcshutdown_watchdog=$! +fi + +# Determine the shutdown order of the /etc/rc.d scripts, +# and perform the operation +# +rcorder_opts="-k shutdown" +if [ `/sbin/sysctl -n security.jail.jailed` -eq 1 ]; then + rcorder_opts="$rcorder_opts -s nojail" + if [ `/sbin/sysctl -n security.jail.vnet` -ne 1 ]; then + rcorder_opts="$rcorder_opts -s nojailvnet" + fi +fi + +case ${local_startup} in +[Nn][Oo] | '') ;; +*) find_local_scripts_new ;; +esac + +files=`rcorder ${rcorder_opts} /etc/rc.d/* ${local_rc} 2>/dev/null` + +for _rc_elem in `reverse_list $files`; do + debug "run_rc_script $_rc_elem faststop" + run_rc_script $_rc_elem faststop +done + +# Terminate the background watchdog timer (if it is running) +# +if [ -n "$_rcshutdown_watchdog" ]; then + pkill -TERM -P $_rcshutdown_watchdog >/dev/null 2>&1 +fi + +# Insert other shutdown procedures here + + +echo '.' +exit 0 Property changes on: head/sbin/init/rc.shutdown ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.subr =================================================================== --- head/sbin/init/rc.subr (nonexistent) +++ head/sbin/init/rc.subr (revision 336847) @@ -0,0 +1,2139 @@ +# $NetBSD: rc.subr,v 1.67 2006/10/07 11:25:15 elad Exp $ +# $FreeBSD$ +# +# Copyright (c) 1997-2004 The NetBSD Foundation, Inc. +# All rights reserved. +# +# This code is derived from software contributed to The NetBSD Foundation +# by Luke Mewburn. +# +# 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 NETBSD FOUNDATION, INC. 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 FOUNDATION 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. +# +# rc.subr +# functions used by various rc scripts +# + +: ${RC_PID:=$$}; export RC_PID + +# +# Operating System dependent/independent variables +# + +if [ -n "${_rc_subr_loaded}" ]; then + return +fi + +_rc_subr_loaded="YES" + +SYSCTL="/sbin/sysctl" +SYSCTL_N="${SYSCTL} -n" +SYSCTL_W="${SYSCTL}" +PROTECT="/usr/bin/protect" +ID="/usr/bin/id" +IDCMD="if [ -x $ID ]; then $ID -un; fi" +PS="/bin/ps -ww" +JID=0 + +# +# functions +# --------- + +# list_vars pattern +# List vars matching pattern. +# +list_vars() +{ + set | { while read LINE; do + var="${LINE%%=*}" + case "$var" in + "$LINE"|*[!a-zA-Z0-9_]*) continue ;; + $1) echo $var + esac + done; } +} + +# set_rcvar [var] [defval] [desc] +# +# Echo or define a rc.conf(5) variable name. Global variable +# $rcvars is used. +# +# If no argument is specified, echo "${name}_enable". +# +# If only a var is specified, echo "${var}_enable". +# +# If var and defval are specified, the ${var} is defined as +# rc.conf(5) variable and the default value is ${defvar}. An +# optional argument $desc can also be specified to add a +# description for that. +# +set_rcvar() +{ + local _var + + case $# in + 0) echo ${name}_enable ;; + 1) echo ${1}_enable ;; + *) + debug "set_rcvar: \$$1=$2 is added" \ + " as a rc.conf(5) variable." + _var=$1 + rcvars="${rcvars# } $_var" + eval ${_var}_defval=\"$2\" + shift 2 + eval ${_var}_desc=\"$*\" + ;; + esac +} + +# set_rcvar_obsolete oldvar [newvar] [msg] +# Define obsolete variable. +# Global variable $rcvars_obsolete is used. +# +set_rcvar_obsolete() +{ + local _var + _var=$1 + debug "set_rcvar_obsolete: \$$1(old) -> \$$2(new) is defined" + + rcvars_obsolete="${rcvars_obsolete# } $1" + eval ${1}_newvar=\"$2\" + shift 2 + eval ${_var}_obsolete_msg=\"$*\" +} + +# +# force_depend script [rcvar] +# Force a service to start. Intended for use by services +# to resolve dependency issues. +# $1 - filename of script, in /etc/rc.d, to run +# $2 - name of the script's rcvar (minus the _enable) +# +force_depend() +{ + local _depend _dep_rcvar + + _depend="$1" + _dep_rcvar="${2:-$1}_enable" + + [ -n "$rc_fast" ] && ! checkyesno always_force_depends && + checkyesno $_dep_rcvar && return 0 + + /etc/rc.d/${_depend} forcestatus >/dev/null 2>&1 && return 0 + + info "${name} depends on ${_depend}, which will be forced to start." + if ! /etc/rc.d/${_depend} forcestart; then + warn "Unable to force ${_depend}. It may already be running." + return 1 + fi +} + +# +# checkyesno var +# Test $1 variable, and warn if not set to YES or NO. +# Return 0 if it's "yes" (et al), nonzero otherwise. +# +checkyesno() +{ + eval _value=\$${1} + debug "checkyesno: $1 is set to $_value." + case $_value in + + # "yes", "true", "on", or "1" + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + return 0 + ;; + + # "no", "false", "off", or "0" + [Nn][Oo]|[Ff][Aa][Ll][Ss][Ee]|[Oo][Ff][Ff]|0) + return 1 + ;; + *) + warn "\$${1} is not set properly - see rc.conf(5)." + return 1 + ;; + esac +} + +# +# reverse_list list +# print the list in reverse order +# +reverse_list() +{ + _revlist= + for _revfile; do + _revlist="$_revfile $_revlist" + done + echo $_revlist +} + +# stop_boot always +# If booting directly to multiuser or $always is enabled, +# send SIGTERM to the parent (/etc/rc) to abort the boot. +# Otherwise just exit. +# +stop_boot() +{ + local always + + case $1 in + # "yes", "true", "on", or "1" + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + always=true + ;; + *) + always=false + ;; + esac + if [ "$autoboot" = yes -o "$always" = true ]; then + echo "ERROR: ABORTING BOOT (sending SIGTERM to parent)!" + kill -TERM ${RC_PID} + fi + exit 1 +} + +# +# mount_critical_filesystems type +# Go through the list of critical filesystems as provided in +# the rc.conf(5) variable $critical_filesystems_${type}, checking +# each one to see if it is mounted, and if it is not, mounting it. +# +mount_critical_filesystems() +{ + eval _fslist=\$critical_filesystems_${1} + for _fs in $_fslist; do + mount | ( + _ismounted=false + while read what _on on _type type; do + if [ $on = $_fs ]; then + _ismounted=true + fi + done + if $_ismounted; then + : + else + mount $_fs >/dev/null 2>&1 + fi + ) + done +} + +# +# check_pidfile pidfile procname [interpreter] +# Parses the first line of pidfile for a PID, and ensures +# that the process is running and matches procname. +# Prints the matching PID upon success, nothing otherwise. +# interpreter is optional; see _find_processes() for details. +# +check_pidfile() +{ + _pidfile=$1 + _procname=$2 + _interpreter=$3 + if [ -z "$_pidfile" -o -z "$_procname" ]; then + err 3 'USAGE: check_pidfile pidfile procname [interpreter]' + fi + if [ ! -f $_pidfile ]; then + debug "pid file ($_pidfile): not readable." + return + fi + read _pid _junk < $_pidfile + if [ -z "$_pid" ]; then + debug "pid file ($_pidfile): no pid in file." + return + fi + _find_processes $_procname ${_interpreter:-.} '-p '"$_pid" +} + +# +# check_process procname [interpreter] +# Ensures that a process (or processes) named procname is running. +# Prints a list of matching PIDs. +# interpreter is optional; see _find_processes() for details. +# +check_process() +{ + _procname=$1 + _interpreter=$2 + if [ -z "$_procname" ]; then + err 3 'USAGE: check_process procname [interpreter]' + fi + _find_processes $_procname ${_interpreter:-.} '-ax' +} + +# +# _find_processes procname interpreter psargs +# Search for procname in the output of ps generated by psargs. +# Prints the PIDs of any matching processes, space separated. +# +# If interpreter == ".", check the following variations of procname +# against the first word of each command: +# procname +# `basename procname` +# `basename procname` + ":" +# "(" + `basename procname` + ")" +# "[" + `basename procname` + "]" +# +# If interpreter != ".", read the first line of procname, remove the +# leading #!, normalise whitespace, append procname, and attempt to +# match that against each command, either as is, or with extra words +# at the end. As an alternative, to deal with interpreted daemons +# using perl, the basename of the interpreter plus a colon is also +# tried as the prefix to procname. +# +_find_processes() +{ + if [ $# -ne 3 ]; then + err 3 'USAGE: _find_processes procname interpreter psargs' + fi + _procname=$1 + _interpreter=$2 + _psargs=$3 + + _pref= + if [ $_interpreter != "." ]; then # an interpreted script + _script="${_chroot}${_chroot:+/}$_procname" + if [ -r "$_script" ]; then + read _interp < $_script # read interpreter name + case "$_interp" in + \#!*) + _interp=${_interp#\#!} # strip #! + set -- $_interp + case $1 in + */bin/env) + shift # drop env to get real name + ;; + esac + if [ $_interpreter != $1 ]; then + warn "\$command_interpreter $_interpreter != $1" + fi + ;; + *) + warn "no shebang line in $_script" + set -- $_interpreter + ;; + esac + else + warn "cannot read shebang line from $_script" + set -- $_interpreter + fi + _interp="$* $_procname" # cleanup spaces, add _procname + _interpbn=${1##*/} + _fp_args='_argv' + _fp_match='case "$_argv" in + ${_interp}|"${_interp} "*|"[${_interpbn}]"|"${_interpbn}: ${_procname}"*)' + else # a normal daemon + _procnamebn=${_procname##*/} + _fp_args='_arg0 _argv' + _fp_match='case "$_arg0" in + $_procname|$_procnamebn|${_procnamebn}:|"(${_procnamebn})"|"[${_procnamebn}]")' + fi + + _proccheck="\ + $PS 2>/dev/null -o pid= -o jid= -o command= $_psargs"' | + while read _npid _jid '"$_fp_args"'; do + '"$_fp_match"' + if [ "$JID" -eq "$_jid" ]; + then echo -n "$_pref$_npid"; + _pref=" "; + fi + ;; + esac + done' + +# debug "in _find_processes: proccheck is ($_proccheck)." + eval $_proccheck +} + +# sort_lite [-b] [-n] [-k POS] [-t SEP] +# A lite version of sort(1) (supporting a few options) that can be used +# before the real sort(1) is available (e.g., in scripts that run prior +# to mountcritremote). Requires only shell built-in functionality. +# +sort_lite() +{ + local funcname=sort_lite + local sort_sep="$IFS" sort_ignore_leading_space= + local sort_field=0 sort_strict_fields= sort_numeric= + local nitems=0 skip_leading=0 trim= + + local OPTIND flag + while getopts bnk:t: flag; do + case "$flag" in + b) sort_ignore_leading_space=1 ;; + n) sort_numeric=1 sort_ignore_leading_space=1 ;; + k) sort_field="${OPTARG%%,*}" ;; # only up to first comma + # NB: Unlike sort(1) only one POS allowed + t) sort_sep="$OPTARG" + if [ ${#sort_sep} -gt 1 ]; then + echo "$funcname: multi-character tab \`$sort_sep'" >&2 + return 1 + fi + sort_strict_fields=1 + ;; + \?) return 1 ;; + esac + done + shift $(( $OPTIND - 1 )) + + # Create transformation pattern to trim leading text if desired + case "$sort_field" in + ""|[!0-9]*|*[!0-9.]*) + echo "$funcname: invalid sort field \`$sort_field'" >&2 + return 1 + ;; + *.*) + skip_leading=${sort_field#*.} sort_field=${sort_field%%.*} + while [ ${skip_leading:-0} -gt 1 ] 2> /dev/null; do + trim="$trim?" skip_leading=$(( $skip_leading - 1 )) + done + esac + + # Copy input to series of local numbered variables + # NB: IFS of NULL preserves leading whitespace + local LINE + while IFS= read -r LINE || [ "$LINE" ]; do + nitems=$(( $nitems + 1 )) + local src_$nitems="$LINE" + done + + # + # Sort numbered locals using insertion sort + # + local curitem curitem_orig curitem_mod curitem_haskey + local dest dest_orig dest_mod dest_haskey + local d gt n + local i=1 + while [ $i -le $nitems ]; do + curitem_haskey=1 # Assume sort field (-k POS) exists + eval curitem=\"\$src_$i\" + curitem_mod="$curitem" # for modified comparison + curitem_orig="$curitem" # for original comparison + + # Trim leading whitespace if desired + if [ "$sort_ignore_leading_space" ]; then + while case "$curitem_orig" in + [$IFS]*) : ;; *) false; esac + do + curitem_orig="${curitem_orig#?}" + done + curitem_mod="$curitem_orig" + fi + + # Shift modified comparison value if sort field (-k POS) is > 1 + n=$sort_field + while [ $n -gt 1 ]; do + case "$curitem_mod" in + *[$sort_sep]*) + # Cut text up-to (and incl.) first separator + curitem_mod="${curitem_mod#*[$sort_sep]}" + + # Skip NULLs unless strict field splitting + [ "$sort_strict_fields" ] || + [ "${curitem_mod%%[$sort_sep]*}" ] || + [ $n -eq 2 ] || + continue + ;; + *) + # Asked for a field that doesn't exist + curitem_haskey= break + esac + n=$(( $n - 1 )) + done + + # Trim trailing words if sort field >= 1 + [ $sort_field -ge 1 -a "$sort_numeric" ] && + curitem_mod="${curitem_mod%%[$sort_sep]*}" + + # Apply optional trim (-k POS.TRIM) to cut leading characters + curitem_mod="${curitem_mod#$trim}" + + # Determine the type of modified comparison to use initially + # NB: Prefer numerical if requested but fallback to standard + case "$curitem_mod" in + ""|[!0-9]*) # NULL or begins with non-number + gt=">" + [ "$sort_numeric" ] && curitem_mod=0 + ;; + *) + if [ "$sort_numeric" ]; then + gt="-gt" + curitem_mod="${curitem_mod%%[!0-9]*}" + # NB: trailing non-digits removed + # otherwise numeric comparison fails + else + gt=">" + fi + esac + + # If first time through, short-circuit below position-search + if [ $i -le 1 ]; then + d=0 + else + d=1 + fi + + # + # Find appropriate element position + # + while [ $d -gt 0 ] + do + dest_haskey=$curitem_haskey + eval dest=\"\$dest_$d\" + dest_mod="$dest" # for modified comparison + dest_orig="$dest" # for original comparison + + # Trim leading whitespace if desired + if [ "$sort_ignore_leading_space" ]; then + while case "$dest_orig" in + [$IFS]*) : ;; *) false; esac + do + dest_orig="${dest_orig#?}" + done + dest_mod="$dest_orig" + fi + + # Shift modified value if sort field (-k POS) is > 1 + n=$sort_field + while [ $n -gt 1 ]; do + case "$dest_mod" in + *[$sort_sep]*) + # Cut text up-to (and incl.) 1st sep + dest_mod="${dest_mod#*[$sort_sep]}" + + # Skip NULLs unless strict fields + [ "$sort_strict_fields" ] || + [ "${dest_mod%%[$sort_sep]*}" ] || + [ $n -eq 2 ] || + continue + ;; + *) + # Asked for a field that doesn't exist + dest_haskey= break + esac + n=$(( $n - 1 )) + done + + # Trim trailing words if sort field >= 1 + [ $sort_field -ge 1 -a "$sort_numeric" ] && + dest_mod="${dest_mod%%[$sort_sep]*}" + + # Apply optional trim (-k POS.TRIM), cut leading chars + dest_mod="${dest_mod#$trim}" + + # Determine type of modified comparison to use + # NB: Prefer numerical if requested, fallback to std + case "$dest_mod" in + ""|[!0-9]*) # NULL or begins with non-number + gt=">" + [ "$sort_numeric" ] && dest_mod=0 + ;; + *) + if [ "$sort_numeric" ]; then + gt="-gt" + dest_mod="${dest_mod%%[!0-9]*}" + # NB: kill trailing non-digits + # for numeric comparison safety + else + gt=">" + fi + esac + + # Break if we've found the proper element position + if [ "$curitem_haskey" -a "$dest_haskey" ]; then + if [ "$dest_mod" = "$curitem_mod" ]; then + [ "$dest_orig" ">" "$curitem_orig" ] && + break + elif [ "$dest_mod" $gt "$curitem_mod" ] \ + 2> /dev/null + then + break + fi + else + [ "$dest_orig" ">" "$curitem_orig" ] && break + fi + + # Break if we've hit the end + [ $d -ge $i ] && break + + d=$(( $d + 1 )) + done + + # Shift remaining positions forward, making room for new item + n=$i + while [ $n -ge $d ]; do + # Shift destination item forward one placement + eval dest_$(( $n + 1 ))=\"\$dest_$n\" + n=$(( $n - 1 )) + done + + # Place the element + if [ $i -eq 1 ]; then + local dest_1="$curitem" + else + local dest_$d="$curitem" + fi + + i=$(( $i + 1 )) + done + + # Print sorted results + d=1 + while [ $d -le $nitems ]; do + eval echo \"\$dest_$d\" + d=$(( $d + 1 )) + done +} + +# +# wait_for_pids pid [pid ...] +# spins until none of the pids exist +# +wait_for_pids() +{ + local _list _prefix _nlist _j + + _list="$@" + if [ -z "$_list" ]; then + return + fi + _prefix= + while true; do + _nlist=""; + for _j in $_list; do + if kill -0 $_j 2>/dev/null; then + _nlist="${_nlist}${_nlist:+ }$_j" + [ -n "$_prefix" ] && sleep 1 + fi + done + if [ -z "$_nlist" ]; then + break + fi + _list=$_nlist + echo -n ${_prefix:-"Waiting for PIDS: "}$_list + _prefix=", " + pwait $_list 2>/dev/null + done + if [ -n "$_prefix" ]; then + echo "." + fi +} + +# +# get_pidfile_from_conf string file +# +# Takes a string to search for in the specified file. +# Ignores lines with traditional comment characters. +# +# Example: +# +# if get_pidfile_from_conf string file; then +# pidfile="$_pidfile_from_conf" +# else +# pidfile='appropriate default' +# fi +# +get_pidfile_from_conf() +{ + if [ -z "$1" -o -z "$2" ]; then + err 3 "USAGE: get_pidfile_from_conf string file ($name)" + fi + + local string file line + + string="$1" ; file="$2" + + if [ ! -s "$file" ]; then + err 3 "get_pidfile_from_conf: $file does not exist ($name)" + fi + + while read line; do + case "$line" in + *[#\;]*${string}*) continue ;; + *${string}*) break ;; + esac + done < $file + + if [ -n "$line" ]; then + line=${line#*/} + _pidfile_from_conf="/${line%%[\"\;]*}" + else + return 1 + fi +} + +# +# check_startmsgs +# If rc_quiet is set (usually as a result of using faststart at +# boot time) check if rc_startmsgs is enabled. +# +check_startmsgs() +{ + if [ -n "$rc_quiet" ]; then + checkyesno rc_startmsgs + else + return 0 + fi +} + +# +# run_rc_command argument +# Search for argument in the list of supported commands, which is: +# "start stop restart rcvar status poll ${extra_commands}" +# If there's a match, run ${argument}_cmd or the default method +# (see below). +# +# If argument has a given prefix, then change the operation as follows: +# Prefix Operation +# ------ --------- +# fast Skip the pid check, and set rc_fast=yes, rc_quiet=yes +# force Set ${rcvar} to YES, and set rc_force=yes +# one Set ${rcvar} to YES +# quiet Don't output some diagnostics, and set rc_quiet=yes +# +# The following globals are used: +# +# Name Needed Purpose +# ---- ------ ------- +# name y Name of script. +# +# command n Full path to command. +# Not needed if ${rc_arg}_cmd is set for +# each keyword. +# +# command_args n Optional args/shell directives for command. +# +# command_interpreter n If not empty, command is interpreted, so +# call check_{pidfile,process}() appropriately. +# +# desc n Description of script. +# +# extra_commands n List of extra commands supported. +# +# pidfile n If set, use check_pidfile $pidfile $command, +# otherwise use check_process $command. +# In either case, only check if $command is set. +# +# procname n Process name to check for instead of $command. +# +# rcvar n This is checked with checkyesno to determine +# if the action should be run. +# +# ${name}_program n Full path to command. +# Meant to be used in /etc/rc.conf to override +# ${command}. +# +# ${name}_chroot n Directory to chroot to before running ${command} +# Requires /usr to be mounted. +# +# ${name}_chdir n Directory to cd to before running ${command} +# (if not using ${name}_chroot). +# +# ${name}_flags n Arguments to call ${command} with. +# NOTE: $flags from the parent environment +# can be used to override this. +# +# ${name}_env n Environment variables to run ${command} with. +# +# ${name}_env_file n File to source variables to run ${command} with. +# +# ${name}_fib n Routing table number to run ${command} with. +# +# ${name}_nice n Nice level to run ${command} at. +# +# ${name}_oomprotect n Don't kill ${command} when swap space is exhausted. +# +# ${name}_user n User to run ${command} as, using su(1) if not +# using ${name}_chroot. +# Requires /usr to be mounted. +# +# ${name}_group n Group to run chrooted ${command} as. +# Requires /usr to be mounted. +# +# ${name}_groups n Comma separated list of supplementary groups +# to run the chrooted ${command} with. +# Requires /usr to be mounted. +# +# ${name}_prepend n Command added before ${command}. +# +# ${name}_login_class n Login class to use, else "daemon". +# +# ${name}_limits n limits(1) to apply to ${command}. +# +# ${rc_arg}_cmd n If set, use this as the method when invoked; +# Otherwise, use default command (see below) +# +# ${rc_arg}_precmd n If set, run just before performing the +# ${rc_arg}_cmd method in the default +# operation (i.e, after checking for required +# bits and process (non)existence). +# If this completes with a non-zero exit code, +# don't run ${rc_arg}_cmd. +# +# ${rc_arg}_postcmd n If set, run just after performing the +# ${rc_arg}_cmd method, if that method +# returned a zero exit code. +# +# required_dirs n If set, check for the existence of the given +# directories before running a (re)start command. +# +# required_files n If set, check for the readability of the given +# files before running a (re)start command. +# +# required_modules n If set, ensure the given kernel modules are +# loaded before running a (re)start command. +# The check and possible loads are actually +# done after start_precmd so that the modules +# aren't loaded in vain, should the precmd +# return a non-zero status to indicate a error. +# If a word in the list looks like "foo:bar", +# "foo" is the KLD file name and "bar" is the +# module name. If a word looks like "foo~bar", +# "foo" is the KLD file name and "bar" is a +# egrep(1) pattern matching the module name. +# Otherwise the module name is assumed to be +# the same as the KLD file name, which is most +# common. See load_kld(). +# +# required_vars n If set, perform checkyesno on each of the +# listed variables before running the default +# (re)start command. +# +# Default behaviour for a given argument, if no override method is +# provided: +# +# Argument Default behaviour +# -------- ----------------- +# start if !running && checkyesno ${rcvar} +# ${command} +# +# stop if ${pidfile} +# rc_pid=$(check_pidfile $pidfile $command) +# else +# rc_pid=$(check_process $command) +# kill $sig_stop $rc_pid +# wait_for_pids $rc_pid +# ($sig_stop defaults to TERM.) +# +# reload Similar to stop, except use $sig_reload instead, +# and doesn't wait_for_pids. +# $sig_reload defaults to HUP. +# Note that `reload' isn't provided by default, +# it should be enabled via $extra_commands. +# +# restart Run `stop' then `start'. +# +# status Show if ${command} is running, etc. +# +# poll Wait for ${command} to exit. +# +# rcvar Display what rc.conf variable is used (if any). +# +# enabled Return true if the service is enabled. +# +# describe Show the service's description +# +# extracommands Show the service's extra commands +# +# Variables available to methods, and after run_rc_command() has +# completed: +# +# Variable Purpose +# -------- ------- +# rc_arg Argument to command, after fast/force/one processing +# performed +# +# rc_flags Flags to start the default command with. +# Defaults to ${name}_flags, unless overridden +# by $flags from the environment. +# This variable may be changed by the precmd method. +# +# rc_pid PID of command (if appropriate) +# +# rc_fast Not empty if "fast" was provided (q.v.) +# +# rc_force Not empty if "force" was provided (q.v.) +# +# rc_quiet Not empty if "quiet" was provided +# +# +run_rc_command() +{ + _return=0 + rc_arg=$1 + if [ -z "$name" ]; then + err 3 'run_rc_command: $name is not set.' + fi + + # Don't repeat the first argument when passing additional command- + # line arguments to the command subroutines. + # + shift 1 + rc_extra_args="$*" + + _rc_prefix= + case "$rc_arg" in + fast*) # "fast" prefix; don't check pid + rc_arg=${rc_arg#fast} + rc_fast=yes + rc_quiet=yes + ;; + force*) # "force" prefix; always run + rc_force=yes + _rc_prefix=force + rc_arg=${rc_arg#${_rc_prefix}} + if [ -n "${rcvar}" ]; then + eval ${rcvar}=YES + fi + ;; + one*) # "one" prefix; set ${rcvar}=yes + _rc_prefix=one + rc_arg=${rc_arg#${_rc_prefix}} + if [ -n "${rcvar}" ]; then + eval ${rcvar}=YES + fi + ;; + quiet*) # "quiet" prefix; omit some messages + _rc_prefix=quiet + rc_arg=${rc_arg#${_rc_prefix}} + rc_quiet=yes + ;; + esac + + eval _override_command=\$${name}_program + command=${_override_command:-$command} + + _keywords="start stop restart rcvar enabled describe extracommands $extra_commands" + rc_pid= + _pidcmd= + _procname=${procname:-${command}} + + # setup pid check command + if [ -n "$_procname" ]; then + if [ -n "$pidfile" ]; then + _pidcmd='rc_pid=$(check_pidfile '"$pidfile $_procname $command_interpreter"')' + else + _pidcmd='rc_pid=$(check_process '"$_procname $command_interpreter"')' + fi + _keywords="${_keywords} status poll" + fi + + if [ -z "$rc_arg" ]; then + rc_usage $_keywords + fi + + if [ "$rc_arg" = "enabled" ] ; then + checkyesno ${rcvar} + return $? + fi + + if [ -n "$flags" ]; then # allow override from environment + rc_flags=$flags + else + eval rc_flags=\$${name}_flags + fi + eval _chdir=\$${name}_chdir _chroot=\$${name}_chroot \ + _nice=\$${name}_nice _user=\$${name}_user \ + _group=\$${name}_group _groups=\$${name}_groups \ + _fib=\$${name}_fib _env=\$${name}_env \ + _prepend=\$${name}_prepend _login_class=\${${name}_login_class:-daemon} \ + _limits=\$${name}_limits _oomprotect=\$${name}_oomprotect \ + _env_file=\$${name}_env_file + + if [ -n "$_env_file" ] && [ -r "${_env_file}" ]; then # load env from file + set -a + . $_env_file + set +a + fi + + if [ -n "$_user" ]; then # unset $_user if running as that user + if [ "$_user" = "$(eval $IDCMD)" ]; then + unset _user + fi + fi + + [ -z "$autoboot" ] && eval $_pidcmd # determine the pid if necessary + + for _elem in $_keywords; do + if [ "$_elem" != "$rc_arg" ]; then + continue + fi + # if ${rcvar} is set, $1 is not "rcvar" and not "describe" + # and ${rc_pid} is not set, then run + # checkyesno ${rcvar} + # and return if that failed + # + if [ -n "${rcvar}" -a "$rc_arg" != "rcvar" -a "$rc_arg" != "stop" \ + -a "$rc_arg" != "describe" ] || + [ -n "${rcvar}" -a "$rc_arg" = "stop" -a -z "${rc_pid}" ]; then + if ! checkyesno ${rcvar}; then + if [ -n "${rc_quiet}" ]; then + return 0 + fi + echo -n "Cannot '${rc_arg}' $name. Set ${rcvar} to " + echo -n "YES in /etc/rc.conf or use 'one${rc_arg}' " + echo "instead of '${rc_arg}'." + return 0 + fi + fi + + if [ $rc_arg = "start" -a -z "$rc_fast" -a -n "$rc_pid" ]; then + if [ -z "$rc_quiet" ]; then + echo 1>&2 "${name} already running? " \ + "(pid=$rc_pid)." + fi + return 1 + fi + + # if there's a custom ${XXX_cmd}, + # run that instead of the default + # + eval _cmd=\$${rc_arg}_cmd \ + _precmd=\$${rc_arg}_precmd \ + _postcmd=\$${rc_arg}_postcmd + + if [ -n "$_cmd" ]; then + _run_rc_precmd || return 1 + _run_rc_doit "$_cmd $rc_extra_args" || return 1 + _run_rc_postcmd + return $_return + fi + + case "$rc_arg" in # default operations... + + describe) + if [ -n "$desc" ]; then + echo "$desc" + fi + ;; + + extracommands) + echo "$extra_commands" + ;; + + status) + _run_rc_precmd || return 1 + if [ -n "$rc_pid" ]; then + echo "${name} is running as pid $rc_pid." + else + echo "${name} is not running." + return 1 + fi + _run_rc_postcmd + ;; + + start) + if [ ! -x "${_chroot}${_chroot:+/}${command}" ]; then + warn "run_rc_command: cannot run $command" + return 1 + fi + + if ! _run_rc_precmd; then + warn "failed precmd routine for ${name}" + return 1 + fi + + # setup the full command to run + # + check_startmsgs && echo "Starting ${name}." + if [ -n "$_chroot" ]; then + _cd= + _doit="\ +${_nice:+nice -n $_nice }\ +${_fib:+setfib -F $_fib }\ +${_env:+env $_env }\ +chroot ${_user:+-u $_user }${_group:+-g $_group }${_groups:+-G $_groups }\ +$_chroot $command $rc_flags $command_args" + else + _cd="${_chdir:+cd $_chdir && }" + _doit="\ +${_fib:+setfib -F $_fib }\ +${_env:+env $_env }\ +$command $rc_flags $command_args" + if [ -n "$_user" ]; then + _doit="su -m $_user -c 'sh -c \"$_doit\"'" + fi + if [ -n "$_nice" ]; then + if [ -z "$_user" ]; then + _doit="sh -c \"$_doit\"" + fi + _doit="nice -n $_nice $_doit" + fi + if [ -n "$_prepend" ]; then + _doit="$_prepend $_doit" + fi + fi + + # Prepend default limits + _doit="$_cd limits -C $_login_class $_limits $_doit" + + # run the full command + # + if ! _run_rc_doit "$_doit"; then + warn "failed to start ${name}" + return 1 + fi + + # finally, run postcmd + # + _run_rc_postcmd + ;; + + stop) + if [ -z "$rc_pid" ]; then + [ -n "$rc_fast" ] && return 0 + _run_rc_notrunning + return 1 + fi + + _run_rc_precmd || return 1 + + # send the signal to stop + # + echo "Stopping ${name}." + _doit=$(_run_rc_killcmd "${sig_stop:-TERM}") + _run_rc_doit "$_doit" || return 1 + + # wait for the command to exit, + # and run postcmd. + wait_for_pids $rc_pid + + _run_rc_postcmd + ;; + + reload) + if [ -z "$rc_pid" ]; then + _run_rc_notrunning + return 1 + fi + + _run_rc_precmd || return 1 + + _doit=$(_run_rc_killcmd "${sig_reload:-HUP}") + _run_rc_doit "$_doit" || return 1 + + _run_rc_postcmd + ;; + + restart) + # prevent restart being called more + # than once by any given script + # + if ${_rc_restart_done:-false}; then + return 0 + fi + _rc_restart_done=true + + _run_rc_precmd || return 1 + + # run those in a subshell to keep global variables + ( run_rc_command ${_rc_prefix}stop $rc_extra_args ) + ( run_rc_command ${_rc_prefix}start $rc_extra_args ) + _return=$? + [ $_return -ne 0 ] && [ -z "$rc_force" ] && return 1 + + _run_rc_postcmd + ;; + + poll) + _run_rc_precmd || return 1 + if [ -n "$rc_pid" ]; then + wait_for_pids $rc_pid + fi + _run_rc_postcmd + ;; + + rcvar) + echo -n "# $name" + if [ -n "$desc" ]; then + echo " : $desc" + else + echo "" + fi + echo "#" + # Get unique vars in $rcvar $rcvars + for _v in $rcvar $rcvars; do + case $v in + $_v\ *|\ *$_v|*\ $_v\ *) ;; + *) v="${v# } $_v" ;; + esac + done + + # Display variables. + for _v in $v; do + if [ -z "$_v" ]; then + continue + fi + + eval _desc=\$${_v}_desc + eval _defval=\$${_v}_defval + _h="-" + + eval echo \"$_v=\\\"\$$_v\\\"\" + # decode multiple lines of _desc + while [ -n "$_desc" ]; do + case $_desc in + *^^*) + echo "# $_h ${_desc%%^^*}" + _desc=${_desc#*^^} + _h=" " + ;; + *) + echo "# $_h ${_desc}" + break + ;; + esac + done + echo "# (default: \"$_defval\")" + done + echo "" + ;; + + *) + rc_usage $_keywords + ;; + + esac + + # Apply protect(1) to the PID if ${name}_oomprotect is set. + case "$rc_arg" in + start) + # We cannot use protect(1) inside jails. + if [ -n "$_oomprotect" ] && [ -f "${PROTECT}" ] && + [ "$(sysctl -n security.jail.jailed)" -eq 0 ]; then + pid=$(check_process $command) + case $_oomprotect in + [Aa][Ll][Ll]) + ${PROTECT} -i -p ${pid} + ;; + [Yy][Ee][Ss]) + ${PROTECT} -p ${pid} + ;; + esac + fi + ;; + esac + + return $_return + done + + echo 1>&2 "$0: unknown directive '$rc_arg'." + rc_usage $_keywords + # not reached +} + +# +# Helper functions for run_rc_command: common code. +# They use such global variables besides the exported rc_* ones: +# +# name R/W +# ------------------ +# _precmd R +# _postcmd R +# _return W +# +_run_rc_precmd() +{ + check_required_before "$rc_arg" || return 1 + + if [ -n "$_precmd" ]; then + debug "run_rc_command: ${rc_arg}_precmd: $_precmd $rc_extra_args" + eval "$_precmd $rc_extra_args" + _return=$? + + # If precmd failed and force isn't set, request exit. + if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then + return 1 + fi + fi + + check_required_after "$rc_arg" || return 1 + + return 0 +} + +_run_rc_postcmd() +{ + if [ -n "$_postcmd" ]; then + debug "run_rc_command: ${rc_arg}_postcmd: $_postcmd $rc_extra_args" + eval "$_postcmd $rc_extra_args" + _return=$? + fi + return 0 +} + +_run_rc_doit() +{ + debug "run_rc_command: doit: $*" + eval "$@" + _return=$? + + # If command failed and force isn't set, request exit. + if [ $_return -ne 0 ] && [ -z "$rc_force" ]; then + return 1 + fi + + return 0 +} + +_run_rc_notrunning() +{ + local _pidmsg + + if [ -n "$pidfile" ]; then + _pidmsg=" (check $pidfile)." + else + _pidmsg= + fi + echo 1>&2 "${name} not running?${_pidmsg}" +} + +_run_rc_killcmd() +{ + local _cmd + + _cmd="kill -$1 $rc_pid" + if [ -n "$_user" ]; then + _cmd="su -m ${_user} -c 'sh -c \"${_cmd}\"'" + fi + echo "$_cmd" +} + +# +# run_rc_script file arg +# Start the script `file' with `arg', and correctly handle the +# return value from the script. +# If `file' ends with `.sh' and lives in /etc/rc.d, ignore it as it's +# an old-style startup file. +# If `file' ends with `.sh' and does not live in /etc/rc.d, it's sourced +# into the current environment if $rc_fast_and_loose is set; otherwise +# it is run as a child process. +# If `file' appears to be a backup or scratch file, ignore it. +# Otherwise if it is executable run as a child process. +# +run_rc_script() +{ + _file=$1 + _arg=$2 + if [ -z "$_file" -o -z "$_arg" ]; then + err 3 'USAGE: run_rc_script file arg' + fi + + unset name command command_args command_interpreter \ + extra_commands pidfile procname \ + rcvar rcvars rcvars_obsolete required_dirs required_files \ + required_vars + eval unset ${_arg}_cmd ${_arg}_precmd ${_arg}_postcmd + + case "$_file" in + /etc/rc.d/*.sh) # no longer allowed in the base + warn "Ignoring old-style startup script $_file" + ;; + *[~#]|*.OLD|*.bak|*.orig|*,v) # scratch file; skip + warn "Ignoring scratch file $_file" + ;; + *) # run in subshell + if [ -x $_file ]; then + if [ -n "$rc_fast_and_loose" ]; then + set $_arg; . $_file + else + ( trap "echo Script $_file interrupted >&2 ; kill -QUIT $$" 3 + trap "echo Script $_file interrupted >&2 ; exit 1" 2 + trap "echo Script $_file running >&2" 29 + set $_arg; . $_file ) + fi + fi + ;; + esac +} + +# +# load_rc_config [service] +# Source in the configuration file(s) for a given service. +# If no service is specified, only the global configuration +# file(s) will be loaded. +# +load_rc_config() +{ + local _name _rcvar_val _var _defval _v _msg _new _d + _name=$1 + + if ${_rc_conf_loaded:-false}; then + : + else + if [ -r /etc/defaults/rc.conf ]; then + debug "Sourcing /etc/defaults/rc.conf" + . /etc/defaults/rc.conf + source_rc_confs + elif [ -r /etc/rc.conf ]; then + debug "Sourcing /etc/rc.conf (/etc/defaults/rc.conf doesn't exist)." + . /etc/rc.conf + fi + _rc_conf_loaded=true + fi + + # If a service name was specified, attempt to load + # service-specific configuration + if [ -n "$_name" ] ; then + for _d in /etc ${local_startup}; do + _d=${_d%/rc.d} + if [ -f ${_d}/rc.conf.d/"$_name" ]; then + debug "Sourcing ${_d}/rc.conf.d/$_name" + . ${_d}/rc.conf.d/"$_name" + elif [ -d ${_d}/rc.conf.d/"$_name" ] ; then + local _rc + for _rc in ${_d}/rc.conf.d/"$_name"/* ; do + if [ -f "$_rc" ] ; then + debug "Sourcing $_rc" + . "$_rc" + fi + done + fi + done + fi + + # Set defaults if defined. + for _var in $rcvar $rcvars; do + eval _defval=\$${_var}_defval + if [ -n "$_defval" ]; then + eval : \${$_var:=\$${_var}_defval} + fi + done + + # check obsolete rc.conf variables + for _var in $rcvars_obsolete; do + eval _v=\$$_var + eval _msg=\$${_var}_obsolete_msg + eval _new=\$${_var}_newvar + case $_v in + "") + ;; + *) + if [ -z "$_new" ]; then + _msg="Ignored." + else + eval $_new=\"\$$_var\" + if [ -z "$_msg" ]; then + _msg="Use \$$_new instead." + fi + fi + warn "\$$_var is obsolete. $_msg" + ;; + esac + done +} + +# +# load_rc_config_var name var +# Read the rc.conf(5) var for name and set in the +# current shell, using load_rc_config in a subshell to prevent +# unwanted side effects from other variable assignments. +# +load_rc_config_var() +{ + if [ $# -ne 2 ]; then + err 3 'USAGE: load_rc_config_var name var' + fi + eval $(eval '( + load_rc_config '$1' >/dev/null; + if [ -n "${'$2'}" -o "${'$2'-UNSET}" != "UNSET" ]; then + echo '$2'=\'\''${'$2'}\'\''; + fi + )' ) +} + +# +# rc_usage commands +# Print a usage string for $0, with `commands' being a list of +# valid commands. +# +rc_usage() +{ + echo -n 1>&2 "Usage: $0 [fast|force|one|quiet](" + + _sep= + for _elem; do + echo -n 1>&2 "$_sep$_elem" + _sep="|" + done + echo 1>&2 ")" + exit 1 +} + +# +# err exitval message +# Display message to stderr and log to the syslog, and exit with exitval. +# +err() +{ + exitval=$1 + shift + + if [ -x /usr/bin/logger ]; then + logger "$0: ERROR: $*" + fi + echo 1>&2 "$0: ERROR: $*" + exit $exitval +} + +# +# warn message +# Display message to stderr and log to the syslog. +# +warn() +{ + if [ -x /usr/bin/logger ]; then + logger "$0: WARNING: $*" + fi + echo 1>&2 "$0: WARNING: $*" +} + +# +# info message +# Display informational message to stdout and log to syslog. +# +info() +{ + case ${rc_info} in + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + if [ -x /usr/bin/logger ]; then + logger "$0: INFO: $*" + fi + echo "$0: INFO: $*" + ;; + esac +} + +# +# debug message +# If debugging is enabled in rc.conf output message to stderr. +# BEWARE that you don't call any subroutine that itself calls this +# function. +# +debug() +{ + case ${rc_debug} in + [Yy][Ee][Ss]|[Tt][Rr][Uu][Ee]|[Oo][Nn]|1) + if [ -x /usr/bin/logger ]; then + logger "$0: DEBUG: $*" + fi + echo 1>&2 "$0: DEBUG: $*" + ;; + esac +} + +# +# backup_file action file cur backup +# Make a backup copy of `file' into `cur', and save the previous +# version of `cur' as `backup'. +# +# The `action' keyword can be one of the following: +# +# add `file' is now being backed up (and is possibly +# being reentered into the backups system). `cur' +# is created. +# +# update `file' has changed and needs to be backed up. +# If `cur' exists, it is copied to `back' +# and then `file' is copied to `cur'. +# +# remove `file' is no longer being tracked by the backups +# system. `cur' is moved `back'. +# +# +backup_file() +{ + _action=$1 + _file=$2 + _cur=$3 + _back=$4 + + case $_action in + add|update) + if [ -f $_cur ]; then + cp -p $_cur $_back + fi + cp -p $_file $_cur + chown root:wheel $_cur + ;; + remove) + mv -f $_cur $_back + ;; + esac +} + +# make_symlink src link +# Make a symbolic link 'link' to src from basedir. If the +# directory in which link is to be created does not exist +# a warning will be displayed and an error will be returned. +# Returns 0 on success, 1 otherwise. +# +make_symlink() +{ + local src link linkdir _me + src="$1" + link="$2" + linkdir="`dirname $link`" + _me="make_symlink()" + + if [ -z "$src" -o -z "$link" ]; then + warn "$_me: requires two arguments." + return 1 + fi + if [ ! -d "$linkdir" ]; then + warn "$_me: the directory $linkdir does not exist." + return 1 + fi + if ! ln -sf $src $link; then + warn "$_me: unable to make a symbolic link from $link to $src" + return 1 + fi + return 0 +} + +# devfs_rulesets_from_file file +# Reads a set of devfs commands from file, and creates +# the specified rulesets with their rules. Returns non-zero +# if there was an error. +# +devfs_rulesets_from_file() +{ + local file _err _me _opts + file="$1" + _me="devfs_rulesets_from_file" + _err=0 + + if [ -z "$file" ]; then + warn "$_me: you must specify a file" + return 1 + fi + if [ ! -e "$file" ]; then + debug "$_me: no such file ($file)" + return 0 + fi + + # Disable globbing so that the rule patterns are not expanded + # by accident with matching filesystem entries. + _opts=$-; set -f + + debug "reading rulesets from file ($file)" + { while read line + do + case $line in + \#*) + continue + ;; + \[*\]*) + rulenum=`expr "$line" : "\[.*=\([0-9]*\)\]"` + if [ -z "$rulenum" ]; then + warn "$_me: cannot extract rule number ($line)" + _err=1 + break + fi + rulename=`expr "$line" : "\[\(.*\)=[0-9]*\]"` + if [ -z "$rulename" ]; then + warn "$_me: cannot extract rule name ($line)" + _err=1 + break; + fi + eval $rulename=\$rulenum + debug "found ruleset: $rulename=$rulenum" + if ! /sbin/devfs rule -s $rulenum delset; then + _err=1 + break + fi + ;; + *) + rulecmd="${line%%"\#*"}" + # evaluate the command incase it includes + # other rules + if [ -n "$rulecmd" ]; then + debug "adding rule ($rulecmd)" + if ! eval /sbin/devfs rule -s $rulenum $rulecmd + then + _err=1 + break + fi + fi + ;; + esac + if [ $_err -ne 0 ]; then + debug "error in $_me" + break + fi + done } < $file + case $_opts in *f*) ;; *) set +f ;; esac + return $_err +} + +# devfs_init_rulesets +# Initializes rulesets from configuration files. Returns +# non-zero if there was an error. +# +devfs_init_rulesets() +{ + local file _me + _me="devfs_init_rulesets" + + # Go through this only once + if [ -n "$devfs_rulesets_init" ]; then + debug "$_me: devfs rulesets already initialized" + return + fi + for file in $devfs_rulesets; do + if ! devfs_rulesets_from_file $file; then + warn "$_me: could not read rules from $file" + return 1 + fi + done + devfs_rulesets_init=1 + debug "$_me: devfs rulesets initialized" + return 0 +} + +# devfs_set_ruleset ruleset [dir] +# Sets the default ruleset of dir to ruleset. The ruleset argument +# must be a ruleset name as specified in devfs.rules(5) file. +# Returns non-zero if it could not set it successfully. +# +devfs_set_ruleset() +{ + local devdir rs _me + [ -n "$1" ] && eval rs=\$$1 || rs= + [ -n "$2" ] && devdir="-m "$2"" || devdir= + _me="devfs_set_ruleset" + + if [ -z "$rs" ]; then + warn "$_me: you must specify a ruleset number" + return 1 + fi + debug "$_me: setting ruleset ($rs) on mount-point (${devdir#-m })" + if ! /sbin/devfs $devdir ruleset $rs; then + warn "$_me: unable to set ruleset $rs to ${devdir#-m }" + return 1 + fi + return 0 +} + +# devfs_apply_ruleset ruleset [dir] +# Apply ruleset number $ruleset to the devfs mountpoint $dir. +# The ruleset argument must be a ruleset name as specified +# in a devfs.rules(5) file. Returns 0 on success or non-zero +# if it could not apply the ruleset. +# +devfs_apply_ruleset() +{ + local devdir rs _me + [ -n "$1" ] && eval rs=\$$1 || rs= + [ -n "$2" ] && devdir="-m "$2"" || devdir= + _me="devfs_apply_ruleset" + + if [ -z "$rs" ]; then + warn "$_me: you must specify a ruleset" + return 1 + fi + debug "$_me: applying ruleset ($rs) to mount-point (${devdir#-m })" + if ! /sbin/devfs $devdir rule -s $rs applyset; then + warn "$_me: unable to apply ruleset $rs to ${devdir#-m }" + return 1 + fi + return 0 +} + +# devfs_domount dir [ruleset] +# Mount devfs on dir. If ruleset is specified it is set +# on the mount-point. It must also be a ruleset name as specified +# in a devfs.rules(5) file. Returns 0 on success. +# +devfs_domount() +{ + local devdir rs _me + devdir="$1" + [ -n "$2" ] && rs=$2 || rs= + _me="devfs_domount()" + + if [ -z "$devdir" ]; then + warn "$_me: you must specify a mount-point" + return 1 + fi + debug "$_me: mount-point is ($devdir), ruleset is ($rs)" + if ! mount -t devfs dev "$devdir"; then + warn "$_me: Unable to mount devfs on $devdir" + return 1 + fi + if [ -n "$rs" ]; then + devfs_init_rulesets + devfs_set_ruleset $rs $devdir + devfs -m $devdir rule applyset + fi + return 0 +} + +# Provide a function for normalizing the mounting of memory +# filesystems. This should allow the rest of the code here to remain +# as close as possible between 5-current and 4-stable. +# $1 = size +# $2 = mount point +# $3 = (optional) extra mdmfs flags +mount_md() +{ + if [ -n "$3" ]; then + flags="$3" + fi + /sbin/mdmfs $flags -s $1 ${mfs_type} $2 +} + +# Code common to scripts that need to load a kernel module +# if it isn't in the kernel yet. Syntax: +# load_kld [-e regex] [-m module] file +# where -e or -m chooses the way to check if the module +# is already loaded: +# regex is egrep'd in the output from `kldstat -v', +# module is passed to `kldstat -m'. +# The default way is as though `-m file' were specified. +load_kld() +{ + local _loaded _mod _opt _re + + while getopts "e:m:" _opt; do + case "$_opt" in + e) _re="$OPTARG" ;; + m) _mod="$OPTARG" ;; + *) err 3 'USAGE: load_kld [-e regex] [-m module] file' ;; + esac + done + shift $(($OPTIND - 1)) + if [ $# -ne 1 ]; then + err 3 'USAGE: load_kld [-e regex] [-m module] file' + fi + _mod=${_mod:-$1} + _loaded=false + if [ -n "$_re" ]; then + if kldstat -v | egrep -q -e "$_re"; then + _loaded=true + fi + else + if kldstat -q -m "$_mod"; then + _loaded=true + fi + fi + if ! $_loaded; then + if ! kldload "$1"; then + warn "Unable to load kernel module $1" + return 1 + else + info "$1 kernel module loaded." + fi + else + debug "load_kld: $1 kernel module already loaded." + fi + return 0 +} + +# ltr str src dst [var] +# Change every $src in $str to $dst. +# Useful when /usr is not yet mounted and we cannot use tr(1), sed(1) nor +# awk(1). If var is non-NULL, set it to the result. +ltr() +{ + local _str _src _dst _out _com _var + _str="$1" + _src="$2" + _dst="$3" + _var="$4" + _out="" + + local IFS="${_src}" + for _com in ${_str}; do + if [ -z "${_out}" ]; then + _out="${_com}" + else + _out="${_out}${_dst}${_com}" + fi + done + if [ -n "${_var}" ]; then + setvar "${_var}" "${_out}" + else + echo "${_out}" + fi +} + +# Creates a list of providers for GELI encryption. +geli_make_list() +{ + local devices devices2 + local provider mountpoint type options rest + + # Create list of GELI providers from fstab. + while read provider mountpoint type options rest ; do + case ":${options}" in + :*noauto*) + noauto=yes + ;; + *) + noauto=no + ;; + esac + + case ":${provider}" in + :#*) + continue + ;; + *.eli) + # Skip swap devices. + if [ "${type}" = "swap" -o "${options}" = "sw" -o "${noauto}" = "yes" ]; then + continue + fi + devices="${devices} ${provider}" + ;; + esac + done < /etc/fstab + + # Append providers from geli_devices. + devices="${devices} ${geli_devices}" + + for provider in ${devices}; do + provider=${provider%.eli} + provider=${provider#/dev/} + devices2="${devices2} ${provider}" + done + + echo ${devices2} +} + +# Originally, root mount hold had to be released before mounting +# the root filesystem. This delayed the boot, so it was changed +# to only wait if the root device isn't readily available. This +# can result in rc scripts executing before all the devices - such +# as graid(8), or USB disks - can be accessed. This function can +# be used to explicitly wait for root mount holds to be released. +root_hold_wait() +{ + local wait waited holders + + waited=0 + while true; do + holders="$(sysctl -n vfs.root_mount_hold)" + if [ -z "${holders}" ]; then + break; + fi + if [ ${waited} -eq 0 ]; then + echo -n "Waiting ${root_hold_delay}s" \ + "for the root mount holders: ${holders}" + else + echo -n . + fi + if [ ${waited} -ge ${root_hold_delay} ]; then + echo + break + fi + sleep 1 + waited=$(($waited + 1)) + done +} + +# Find scripts in local_startup directories that use the old syntax +# +find_local_scripts_old() { + zlist='' + slist='' + for dir in ${local_startup}; do + if [ -d "${dir}" ]; then + for file in ${dir}/[0-9]*.sh; do + grep '^# PROVIDE:' $file >/dev/null 2>&1 && + continue + zlist="$zlist $file" + done + for file in ${dir}/[!0-9]*.sh; do + grep '^# PROVIDE:' $file >/dev/null 2>&1 && + continue + slist="$slist $file" + done + fi + done +} + +find_local_scripts_new() { + local_rc='' + for dir in ${local_startup}; do + if [ -d "${dir}" ]; then + for file in `grep -l '^# PROVIDE:' ${dir}/* 2>/dev/null`; do + case "$file" in + *.sample) ;; + *) if [ -x "$file" ]; then + local_rc="${local_rc} ${file}" + fi + ;; + esac + done + fi + done +} + +# check_required_{before|after} command +# Check for things required by the command before and after its precmd, +# respectively. The two separate functions are needed because some +# conditions should prevent precmd from being run while other things +# depend on precmd having already been run. +# +check_required_before() +{ + local _f + + case "$1" in + start) + for _f in $required_vars; do + if ! checkyesno $_f; then + warn "\$${_f} is not enabled." + if [ -z "$rc_force" ]; then + return 1 + fi + fi + done + + for _f in $required_dirs; do + if [ ! -d "${_f}/." ]; then + warn "${_f} is not a directory." + if [ -z "$rc_force" ]; then + return 1 + fi + fi + done + + for _f in $required_files; do + if [ ! -r "${_f}" ]; then + warn "${_f} is not readable." + if [ -z "$rc_force" ]; then + return 1 + fi + fi + done + ;; + esac + + return 0 +} + +check_required_after() +{ + local _f _args + + case "$1" in + start) + for _f in $required_modules; do + case "${_f}" in + *~*) _args="-e ${_f#*~} ${_f%%~*}" ;; + *:*) _args="-m ${_f#*:} ${_f%%:*}" ;; + *) _args="${_f}" ;; + esac + if ! load_kld ${_args}; then + if [ -z "$rc_force" ]; then + return 1 + fi + fi + done + ;; + esac + + return 0 +} + +# check_jail mib +# Return true if security.jail.$mib exists and set to 1. + +check_jail() +{ + local _mib _v + + _mib=$1 + if _v=$(${SYSCTL_N} "security.jail.$_mib" 2> /dev/null); then + case $_v in + 1) return 0;; + esac + fi + return 1 +} + +# check_kern_features mib +# Return existence of kern.features.* sysctl MIB as true or +# false. The result will be cached in $_rc_cache_kern_features_ +# namespace. "0" means the kern.features.X exists. + +check_kern_features() +{ + local _v + + [ -n "$1" ] || return 1; + eval _v=\$_rc_cache_kern_features_$1 + [ -n "$_v" ] && return "$_v"; + + if ${SYSCTL_N} kern.features.$1 > /dev/null 2>&1; then + eval _rc_cache_kern_features_$1=0 + return 0 + else + eval _rc_cache_kern_features_$1=1 + return 1 + fi +} + +# check_namevarlist var +# Return "0" if ${name}_var is reserved in rc.subr. + +_rc_namevarlist="program chroot chdir env flags fib nice user group groups prepend" +check_namevarlist() +{ + local _v + + for _v in $_rc_namevarlist; do + case $1 in + $_v) return 0 ;; + esac + done + + return 1 +} + +# _echoonce var msg mode +# mode=0: Echo $msg if ${$var} is empty. +# After doing echo, a string is set to ${$var}. +# +# mode=1: Echo $msg if ${$var} is a string with non-zero length. +# +_echoonce() +{ + local _var _msg _mode + eval _var=\$$1 + _msg=$2 + _mode=$3 + + case $_mode in + 1) [ -n "$_var" ] && echo "$_msg" ;; + *) [ -z "$_var" ] && echo -n "$_msg" && eval "$1=finished" ;; + esac +} + +# If the loader env variable rc.debug is set, turn on debugging. rc.conf will +# still override this, but /etc/defaults/rc.conf can't unconditionally set this +# since it would undo what we've done here. +if kenv -q rc.debug > /dev/null ; then + rc_debug=YES +fi Property changes on: head/sbin/init/rc.subr ___________________________________________________________________ Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property Index: head/sbin/init/rc.suspend =================================================================== --- head/sbin/init/rc.suspend (nonexistent) +++ head/sbin/init/rc.suspend (revision 336847) @@ -0,0 +1,67 @@ +#!/bin/sh +# +# Copyright (c) 1999 Mitsuru IWASAKI +# 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$ +# + +# sample run command file for APM Suspend Event + +if [ $# -ne 2 ]; then + echo "Usage: $0 [apm|acpi] [standby,suspend|1-4]" + exit 1 +fi + +subsystem=$1 +state=$2 + +if [ -r /var/run/rc.suspend.pid ]; then + exit 1 +fi + +echo $$ 2> /dev/null > /var/run/rc.suspend.pid + +# If you have troubles on suspending with PC-CARD modem, try this. +# See also contrib/pccardq.c (Only for PAO users). +# pccardq | awk -F '~' '$5 == "filled" && $4 ~ /uart/ \ +# { printf("pccardc power %d 0", $1); }' | sh + +# If a device driver has problems suspending, try unloading it before +# suspend and reloading it on resume. Example: +# kldunload usb + +/usr/bin/logger -t $subsystem suspend at `/bin/date +'%Y%m%d %H:%M:%S'` +/bin/sync && /bin/sync && /bin/sync +/bin/sleep 3 + +/bin/rm -f /var/run/rc.suspend.pid +if [ $subsystem = "apm" ]; then + /usr/sbin/zzz +else + # Notify the kernel to continue the suspend process + /usr/sbin/acpiconf -k 0 +fi + +exit 0 Property changes on: head/sbin/init/rc.suspend ___________________________________________________________________ Added: svn:executable ## -0,0 +1 ## +* \ No newline at end of property Added: svn:keywords ## -0,0 +1 ## +FreeBSD=%H \ No newline at end of property