Break out and rewrite the network setup scripts.
o /etc/network.subr contains common subroutines used for seting up network interfaces o rc.d/hostname sets the hostname if not already set o rc.d/nisdomain sets the nis domain *after* rpcbind but before the yp* daemons. This fixes issues with temporary hangs when looking up informaion in nis before it's ready. o rc.d/netif brings network interfaces (minus dhcp) up. o rc.d/network1 has been disabled and will be retired before RELENG_5. It will be replaced by rc.d/netif Approved by: markm (mentor)
This commit is contained in:
parent
a40f7e92e2
commit
8b3695ab45
@ -10,7 +10,7 @@ BIN1= amd.map apmd.conf auth.conf \
|
|||||||
devd.conf dhclient.conf disktab fbtab ftpusers gettytab group \
|
devd.conf dhclient.conf disktab fbtab ftpusers gettytab group \
|
||||||
hosts hosts.allow hosts.equiv hosts.lpd \
|
hosts hosts.allow hosts.equiv hosts.lpd \
|
||||||
inetd.conf login.access login.conf \
|
inetd.conf login.access login.conf \
|
||||||
mac.conf motd netconfig networks newsyslog.conf \
|
mac.conf motd netconfig network.subr networks newsyslog.conf \
|
||||||
phones printcap profile protocols \
|
phones printcap profile protocols \
|
||||||
rc rc.atm rc.devfs rc.diskless1 rc.diskless2 rc.firewall rc.firewall6 \
|
rc rc.atm rc.devfs rc.diskless1 rc.diskless2 rc.firewall rc.firewall6 \
|
||||||
rc.network rc.network6 rc.pccard rc.sendmail rc.serial rc.shutdown \
|
rc.network rc.network6 rc.pccard rc.sendmail rc.serial rc.shutdown \
|
||||||
|
336
etc/network.subr
336
etc/network.subr
@ -1,67 +1,121 @@
|
|||||||
#!/bin/sh -x
|
#
|
||||||
|
# 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$
|
# $FreeBSD$
|
||||||
#
|
#
|
||||||
|
|
||||||
# PROVIDE: network1
|
#
|
||||||
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
# Subroutines commonly used from network startup scripts.
|
||||||
# KEYWORD: FreeBSD
|
# Requires that rc.conf be loaded first.
|
||||||
|
#
|
||||||
|
|
||||||
. /etc/rc.subr
|
# ifconfig_up if
|
||||||
|
# Evaluate ifconfig(8) arguments for interface $if and
|
||||||
name="network1"
|
# run ifconfig(8) with those arguments. It returns 0 if
|
||||||
start_cmd="network_start"
|
# arguments were found and executed or 1 if the interface
|
||||||
stop_cmd="network_stop"
|
# had no arguments.
|
||||||
|
#
|
||||||
convert_host_conf()
|
ifconfig_up()
|
||||||
{
|
{
|
||||||
host_conf=$1; shift;
|
eval ifconfig_args=\$ifconfig_$1
|
||||||
nsswitch_conf=$1; shift;
|
if [ -n "${ifconfig_args}" ]; then
|
||||||
awk ' \
|
ifconfig $1 ${ifconfig_args}
|
||||||
/^[:blank:]*#/ { next } \
|
return 0
|
||||||
/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next } \
|
fi
|
||||||
/(dns|bind)/ { nsswitch[c] = "dns"; c++; next } \
|
return 1
|
||||||
/nis/ { nsswitch[c] = "nis"; c++; next } \
|
|
||||||
{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" } \
|
|
||||||
END { \
|
|
||||||
printf "hosts: "; \
|
|
||||||
for (i in nsswitch) printf "%s ", nsswitch[i]; \
|
|
||||||
printf "\n"; \
|
|
||||||
}' < $host_conf > $nsswitch_conf
|
|
||||||
}
|
}
|
||||||
|
|
||||||
generate_host_conf()
|
# ifalias_up if
|
||||||
|
# Configure aliases for network interface $if.
|
||||||
|
# It returns 0 if at least one alias was configured or
|
||||||
|
# 1 if there were none.
|
||||||
|
#
|
||||||
|
ifalias_up()
|
||||||
{
|
{
|
||||||
nsswitch_conf=$1; shift;
|
_ret=1
|
||||||
host_conf=$1; shift;
|
alias=0
|
||||||
|
while : ; do
|
||||||
awk '
|
eval ifconfig_args=\$ifconfig_$1_alias${alias}
|
||||||
BEGIN {
|
if [ -n "${ifconfig_args}" ]; then
|
||||||
xlat["files"] = "hosts";
|
ifconfig $1 ${ifconfig_args} alias
|
||||||
xlat["dns"] = "bind";
|
alias=$((${alias} + 1))
|
||||||
xlat["nis"] = "nis";
|
_ret=0
|
||||||
cont = 0;
|
else
|
||||||
}
|
break
|
||||||
sub(/^[\t ]*hosts:/, "") || cont {
|
fi
|
||||||
if (!cont)
|
done
|
||||||
srcs = ""
|
return $_ret
|
||||||
sub(/#.*/, "")
|
|
||||||
gsub(/[][]/, " & ")
|
|
||||||
cont = sub(/\\$/, "")
|
|
||||||
srcs = srcs " " $0
|
|
||||||
}
|
|
||||||
END {
|
|
||||||
print "# Auto-generated from nsswitch.conf, do not edit"
|
|
||||||
ns = split(srcs, s)
|
|
||||||
for (n = 1; n <= ns; ++n) {
|
|
||||||
if (s[n] in xlat)
|
|
||||||
print xlat[s[n]]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
' <$nsswitch_conf >$host_conf
|
|
||||||
}
|
}
|
||||||
|
|
||||||
network_gif_setup() {
|
# ifscript_up if
|
||||||
|
# Evaluate a startup script for the $if interface.
|
||||||
|
# It returns 0 if a script was found and processed or
|
||||||
|
# 1 if no script was found.
|
||||||
|
#
|
||||||
|
ifscript_up()
|
||||||
|
{
|
||||||
|
if [ -r /etc/start_if.$1 ]; then
|
||||||
|
. /etc/start_if.$1
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Create cloneable interfaces.
|
||||||
|
#
|
||||||
|
clone_up()
|
||||||
|
{
|
||||||
|
_prefix=
|
||||||
|
_list=
|
||||||
|
for ifn in ${cloned_interfaces}; do
|
||||||
|
ifconfig ${ifn} create
|
||||||
|
if $? ; then
|
||||||
|
_list="${_list}${_prefix}${ifn}"
|
||||||
|
[ -z "$_prefix" ] && _prefix=' '
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
debug "Cloned: ${_list}"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Destroy cloned interfaces. Destroyed interfaces are echoed
|
||||||
|
# to standard output.
|
||||||
|
#
|
||||||
|
clone_down()
|
||||||
|
{
|
||||||
|
_prefix=
|
||||||
|
_list=
|
||||||
|
for ifn in ${cloned_interfaces}; do
|
||||||
|
ifconfig ${ifn} destroy
|
||||||
|
if $? ; then
|
||||||
|
_list="${_list}${_prefix}${ifn}"
|
||||||
|
[ -z "$_prefix" ] && _prefix=' '
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
debug "Destroyed clones: ${_list}"
|
||||||
|
}
|
||||||
|
|
||||||
|
gif_up() {
|
||||||
case ${gif_interfaces} in
|
case ${gif_interfaces} in
|
||||||
[Nn][Oo] | '')
|
[Nn][Oo] | '')
|
||||||
;;
|
;;
|
||||||
@ -83,144 +137,78 @@ network_gif_setup() {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
network_start()
|
#
|
||||||
|
# ipx_up ifn
|
||||||
|
# Configure any IPX addresses for interface $ifn. Returns 0 if IPX
|
||||||
|
# arguments were found and configured; returns 1 otherwise.
|
||||||
|
#
|
||||||
|
ipx_up()
|
||||||
{
|
{
|
||||||
# set hostname, turn on network
|
ifn="$1"
|
||||||
#
|
eval ifconfig_args=\$ifconfig_${ifn}_ipx
|
||||||
echo -n "Doing initial network setup:"
|
if [ -n "${ifconfig_args}" ]; then
|
||||||
|
ifconfig ${ifn} ${ifconfig_args}
|
||||||
# Generate host.conf for compatibility
|
return 0
|
||||||
#
|
|
||||||
if [ -f "/etc/nsswitch.conf" ]; then
|
|
||||||
echo -n ' host.conf'
|
|
||||||
generate_host_conf /etc/nsswitch.conf /etc/host.conf
|
|
||||||
fi
|
fi
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
# Convert host.conf to nsswitch.conf if necessary
|
#
|
||||||
#
|
# list_net_interfaces type
|
||||||
if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
|
# List all network interfaces. The type of interface returned
|
||||||
echo ''
|
# can be controlled by the type argument. The type
|
||||||
echo 'Warning: /etc/host.conf is no longer used'
|
# argument can be any of the following:
|
||||||
echo ' /etc/nsswitch.conf will be created for you'
|
# nodhcp - all interfaces, excluding DHCP configured interfaces
|
||||||
convert_host_conf /etc/host.conf /etc/nsswitch.conf
|
# dhcp - list only DHCP configured interfaces
|
||||||
fi
|
# If no argument is specified all network interfaces are output.
|
||||||
|
# Note that the list always includes cloned interfaces.
|
||||||
|
#
|
||||||
|
list_net_interfaces()
|
||||||
|
{
|
||||||
|
type=$1
|
||||||
|
|
||||||
# Set the host name if it is not already set
|
# Get a list of ALL the interfaces
|
||||||
#
|
|
||||||
if [ -z "`hostname -s`" ]; then
|
|
||||||
hostname ${hostname}
|
|
||||||
echo -n ' hostname'
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Set the domainname if we're using NIS
|
|
||||||
#
|
|
||||||
case ${nisdomainname} in
|
|
||||||
[Nn][Oo]|'')
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
domainname ${nisdomainname}
|
|
||||||
echo -n ' domain'
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
echo '.'
|
|
||||||
|
|
||||||
# Attempt to create cloned interfaces.
|
|
||||||
for ifn in ${cloned_interfaces}; do
|
|
||||||
ifconfig ${ifn} create
|
|
||||||
done
|
|
||||||
|
|
||||||
# gifconfig
|
|
||||||
network_gif_setup
|
|
||||||
|
|
||||||
# Set up all the network interfaces, calling startup scripts if needed
|
|
||||||
#
|
#
|
||||||
case ${network_interfaces} in
|
case ${network_interfaces} in
|
||||||
[Aa][Uu][Tt][Oo])
|
[Aa][Uu][Tt][Oo])
|
||||||
network_interfaces="`ifconfig -l`"
|
_tmplist="`ifconfig -l`"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
network_interfaces="${network_interfaces} ${cloned_interfaces}"
|
_tmplist="${network_interfaces}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
_tmplist="${_tmplist} ${cloned_interfaces}"
|
||||||
|
|
||||||
dhcp_interfaces=""
|
if [ -z "$type" ]; then
|
||||||
for ifn in ${network_interfaces}; do
|
echo $_tmplist
|
||||||
if [ -r /etc/start_if.${ifn} ]; then
|
return 0
|
||||||
. /etc/start_if.${ifn}
|
fi
|
||||||
eval showstat_$ifn=1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Do the primary ifconfig if specified
|
# Separate out dhcp and non-dhcp intefraces
|
||||||
#
|
#
|
||||||
eval ifconfig_args=\$ifconfig_${ifn}
|
_aprefix=
|
||||||
|
_brefix=
|
||||||
case ${ifconfig_args} in
|
for _if in ${_tmplist} ; do
|
||||||
'')
|
eval _ifarg="\$ifconfig_${_if}"
|
||||||
;;
|
case "$_ifarg" in
|
||||||
[Dd][Hh][Cc][Pp])
|
[Dd][Hh][Cc][Pp])
|
||||||
# DHCP inits are done all in one go below
|
_dhcplist="${_dhcplist}${_aprefix}${_if}"
|
||||||
dhcp_interfaces="$dhcp_interfaces $ifn"
|
[ -z "$_aprefix" ] && _aprefix=' '
|
||||||
eval showstat_$ifn=1
|
|
||||||
;;
|
;;
|
||||||
*)
|
''|*)
|
||||||
ifconfig ${ifn} ${ifconfig_args}
|
_nodhcplist="${_nodhcplist}${_bprefix}${_if}"
|
||||||
eval showstat_$ifn=1
|
[ -z "$_bprefix" ] && _bprefix=' '
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ ! -z "${dhcp_interfaces}" ]; then
|
case "$type" in
|
||||||
${dhcp_program:-/sbin/dhclient} ${dhcp_flags} ${dhcp_interfaces}
|
nodhcp)
|
||||||
fi
|
echo $_nodhcplist
|
||||||
|
;;
|
||||||
for ifn in ${network_interfaces}; do
|
dhcp)
|
||||||
# Check to see if aliases need to be added
|
echo $_dhcplist
|
||||||
#
|
;;
|
||||||
alias=0
|
esac
|
||||||
while : ; do
|
return 0
|
||||||
eval ifconfig_args=\$ifconfig_${ifn}_alias${alias}
|
|
||||||
if [ -n "${ifconfig_args}" ]; then
|
|
||||||
ifconfig ${ifn} ${ifconfig_args} alias
|
|
||||||
eval showstat_$ifn=1
|
|
||||||
alias=$((${alias} + 1))
|
|
||||||
else
|
|
||||||
break;
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Do ipx address if specified
|
|
||||||
#
|
|
||||||
eval ifconfig_args=\$ifconfig_${ifn}_ipx
|
|
||||||
if [ -n "${ifconfig_args}" ]; then
|
|
||||||
ifconfig ${ifn} ${ifconfig_args}
|
|
||||||
eval showstat_$ifn=1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Display ifconfiged interfaces
|
|
||||||
for ifn in ${network_interfaces}; do
|
|
||||||
eval showstat=\$showstat_${ifn}
|
|
||||||
if [ ! -z ${showstat} ]; then
|
|
||||||
ifconfig ${ifn}
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Resync ipfilter
|
|
||||||
/etc/rc.d/ipfilter resync
|
|
||||||
}
|
}
|
||||||
|
|
||||||
network_stop()
|
|
||||||
{
|
|
||||||
echo -n "Stopping network:"
|
|
||||||
|
|
||||||
# flush routes
|
|
||||||
#
|
|
||||||
echo -n " flush routes"
|
|
||||||
route -n flush
|
|
||||||
|
|
||||||
echo '.'
|
|
||||||
}
|
|
||||||
|
|
||||||
load_rc_config $name
|
|
||||||
run_rc_command "$1"
|
|
||||||
|
51
etc/rc.d/hostname
Normal file
51
etc/rc.d/hostname
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 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$
|
||||||
|
#
|
||||||
|
|
||||||
|
# PROVIDE: hostname
|
||||||
|
# REQUIRE: mountcritlocal sysctl tty
|
||||||
|
# BEFORE: netif
|
||||||
|
# KEYWORD: FreeBSD
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
|
||||||
|
name="hostname"
|
||||||
|
start_cmd="hostname_start"
|
||||||
|
stop_cmd=":"
|
||||||
|
|
||||||
|
hostname_start()
|
||||||
|
{
|
||||||
|
# Set the host name if it is not already set
|
||||||
|
#
|
||||||
|
if [ -z "`hostname -s`" ]; then
|
||||||
|
hostname ${hostname}
|
||||||
|
echo "Setting hostname: `hostname`."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
load_rc_config $name
|
||||||
|
run_rc_command "$1"
|
89
etc/rc.d/netif
Normal file
89
etc/rc.d/netif
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# 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 ``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 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$
|
||||||
|
#
|
||||||
|
|
||||||
|
# PROVIDE: netif
|
||||||
|
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
||||||
|
# KEYWORD: FreeBSD
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
. /etc/network.subr
|
||||||
|
|
||||||
|
name="network"
|
||||||
|
start_cmd="network_start"
|
||||||
|
stop_cmd="network_stop"
|
||||||
|
cloneup_cmd="clone_up"
|
||||||
|
clonedown_cmd="clone_down"
|
||||||
|
extra_commands="cloneup clonedown"
|
||||||
|
|
||||||
|
network_start()
|
||||||
|
{
|
||||||
|
# Create cloned interfaces
|
||||||
|
clone_up
|
||||||
|
|
||||||
|
# Create IPv6<-->IPv4 tunnels
|
||||||
|
gif_up
|
||||||
|
|
||||||
|
# Get a list of network interfaces. Do not include dhcp interfaces.
|
||||||
|
_ifn_list="`list_net_interfaces nodhcp`"
|
||||||
|
|
||||||
|
# Setup the supplied network interfaces including startup
|
||||||
|
# scripts, if they exist.
|
||||||
|
#
|
||||||
|
for ifn in ${_ifn_list}; do
|
||||||
|
ifscript_up ${ifn} && eval showstat_$ifn=1
|
||||||
|
|
||||||
|
ifconfig_up ${ifn} && eval showstat_$ifn=1
|
||||||
|
|
||||||
|
ifalias_up ${ifn} && eval showstat_$ifn=1
|
||||||
|
|
||||||
|
ipx_up ${ifn} && eval showstat_$ifn=1
|
||||||
|
done
|
||||||
|
|
||||||
|
# Display interfaces configured by this script
|
||||||
|
#
|
||||||
|
for ifn in ${_ifn_list}; do
|
||||||
|
eval showstat=\$showstat_${ifn}
|
||||||
|
if [ ! -z ${showstat} ]; then
|
||||||
|
ifconfig ${ifn}
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Resync ipfilter
|
||||||
|
/etc/rc.d/ipfilter resync
|
||||||
|
}
|
||||||
|
|
||||||
|
network_stop()
|
||||||
|
{
|
||||||
|
echo -n "Stopping network:"
|
||||||
|
|
||||||
|
# flush routes
|
||||||
|
route -n flush
|
||||||
|
echo '.'
|
||||||
|
}
|
||||||
|
|
||||||
|
load_rc_config $name
|
||||||
|
run_rc_command "$1"
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
# PROVIDE: network1
|
# PROVIDE: network1
|
||||||
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
# REQUIRE: atm1 ipfilter mountcritlocal pccard serial sppp sysctl tty
|
||||||
# KEYWORD: FreeBSD
|
# KEYWORD: FreeBSD nostart
|
||||||
|
|
||||||
. /etc/rc.subr
|
. /etc/rc.subr
|
||||||
|
|
||||||
|
119
etc/rc.d/nisdomain
Normal file
119
etc/rc.d/nisdomain
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Copyright (c) 1993 - 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$
|
||||||
|
#
|
||||||
|
|
||||||
|
# PROVIDE: nisdomain
|
||||||
|
# REQUIRE: SERVERS rpcbind
|
||||||
|
# BEFORE: ypbind ypserv ypxfrd
|
||||||
|
# KEYWORD: FreeBSD
|
||||||
|
|
||||||
|
. /etc/rc.subr
|
||||||
|
|
||||||
|
name="nisdomain"
|
||||||
|
start_cmd="nisdomain_start"
|
||||||
|
stop_cmd=":"
|
||||||
|
|
||||||
|
convert_host_conf()
|
||||||
|
{
|
||||||
|
host_conf=$1; shift;
|
||||||
|
nsswitch_conf=$1; shift;
|
||||||
|
awk ' \
|
||||||
|
/^[:blank:]*#/ { next } \
|
||||||
|
/(hosts|local|file)/ { nsswitch[c] = "files"; c++; next } \
|
||||||
|
/(dns|bind)/ { nsswitch[c] = "dns"; c++; next } \
|
||||||
|
/nis/ { nsswitch[c] = "nis"; c++; next } \
|
||||||
|
{ printf "Warning: unrecognized line [%s]", $0 > "/dev/stderr" } \
|
||||||
|
END { \
|
||||||
|
printf "hosts: "; \
|
||||||
|
for (i in nsswitch) printf "%s ", nsswitch[i]; \
|
||||||
|
printf "\n"; \
|
||||||
|
}' < $host_conf > $nsswitch_conf
|
||||||
|
}
|
||||||
|
|
||||||
|
generate_host_conf()
|
||||||
|
{
|
||||||
|
nsswitch_conf=$1; shift;
|
||||||
|
host_conf=$1; shift;
|
||||||
|
|
||||||
|
awk '
|
||||||
|
BEGIN {
|
||||||
|
xlat["files"] = "hosts";
|
||||||
|
xlat["dns"] = "bind";
|
||||||
|
xlat["nis"] = "nis";
|
||||||
|
cont = 0;
|
||||||
|
}
|
||||||
|
sub(/^[\t ]*hosts:/, "") || cont {
|
||||||
|
if (!cont)
|
||||||
|
srcs = ""
|
||||||
|
sub(/#.*/, "")
|
||||||
|
gsub(/[][]/, " & ")
|
||||||
|
cont = sub(/\\$/, "")
|
||||||
|
srcs = srcs " " $0
|
||||||
|
}
|
||||||
|
END {
|
||||||
|
print "# Auto-generated from nsswitch.conf, do not edit"
|
||||||
|
ns = split(srcs, s)
|
||||||
|
for (n = 1; n <= ns; ++n) {
|
||||||
|
if (s[n] in xlat)
|
||||||
|
print xlat[s[n]]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
' <$nsswitch_conf >$host_conf
|
||||||
|
}
|
||||||
|
|
||||||
|
nisdomain_start()
|
||||||
|
{
|
||||||
|
# Generate host.conf for compatibility
|
||||||
|
#
|
||||||
|
if [ -f "/etc/nsswitch.conf" ]; then
|
||||||
|
echo 'Generating host.conf.'
|
||||||
|
generate_host_conf /etc/nsswitch.conf /etc/host.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Convert host.conf to nsswitch.conf if necessary
|
||||||
|
#
|
||||||
|
if [ -f "/etc/host.conf" -a ! -f "/etc/nsswitch.conf" ]; then
|
||||||
|
echo ''
|
||||||
|
echo 'Warning: /etc/host.conf is no longer used'
|
||||||
|
echo ' /etc/nsswitch.conf will be created for you'
|
||||||
|
convert_host_conf /etc/host.conf /etc/nsswitch.conf
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Set the domainname if we're using NIS
|
||||||
|
#
|
||||||
|
case ${nisdomainname} in
|
||||||
|
[Nn][Oo]|'')
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
domainname ${nisdomainname}
|
||||||
|
echo "Setting NIS domain: `/bin/domainname`."
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
load_rc_config $name
|
||||||
|
run_rc_command "$1"
|
Loading…
x
Reference in New Issue
Block a user