summaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorMike Makonnen <mtm@FreeBSD.org>2003-06-29 05:34:41 +0000
committerMike Makonnen <mtm@FreeBSD.org>2003-06-29 05:34:41 +0000
commitb166db2bfd43a71d34db4ab42379f55c2271227e (patch)
tree17fa04e2f7e33b7c1058cd83c70e044bb00232a8 /etc
parent2a7ea7e4876b38163126e5f032b6287ca94b0a6f (diff)
downloadsrc-test2-b166db2bfd43a71d34db4ab42379f55c2271227e.tar.gz
src-test2-b166db2bfd43a71d34db4ab42379f55c2271227e.zip
Notes
Diffstat (limited to 'etc')
-rwxr-xr-xetc/rc.d/dhclient63
-rw-r--r--etc/rc.d/netif121
2 files changed, 158 insertions, 26 deletions
diff --git a/etc/rc.d/dhclient b/etc/rc.d/dhclient
index 160b9b2c4acb..71d7c4133579 100755
--- a/etc/rc.d/dhclient
+++ b/etc/rc.d/dhclient
@@ -23,6 +23,9 @@ FreeBSD)
rcvar=
start_precmd="dhclient_prestart"
start_postcmd="dhclient_poststart"
+ stop_cmd="dhclient_stop"
+ stop_precmd="dhclient_prestop"
+ stop_postcmd="dhclient_poststop"
;;
NetBSD)
rcvar=$name
@@ -30,29 +33,81 @@ NetBSD)
;;
esac
-dhclient_prestart()
+dhclient_common()
{
dhcp_list="`list_net_interfaces dhcp`"
if [ -z "$dhcp_list" ]; then
return 1
fi
- for ifn in ${dhcp_list}; do
+ # Determine the scope of the command
+ #
+ _cooked_list="$dhcp_list"
+ if [ -n "$_cmdifn" ]; then
+ eval _cooked_list=\"`expr "$dhcp_list" : ".*\($_cmdifn\).*"`\"
+ if [ -z "$_cooked_list" ]; then
+ err "No such network interface: $_cmdifn"
+ return 1
+ fi
+ fi
+}
+
+dhclient_prestart()
+{
+ dhclient_common || return 1
+
+ for ifn in ${_cooked_list}; do
ifscript_up ${ifn}
done
- rc_flags="${rc_flags} ${dhcp_list}"
+ rc_flags="${rc_flags} ${_cooked_list}"
return 0
}
dhclient_poststart()
{
- for ifn in ${dhcp_list}; do
+ for ifn in ${_cooked_list}; do
ifalias_up ${ifn}
ipx_up ${ifn}
ifconfig ${ifn}
done
}
+dhclient_stop()
+{
+ echo -n "Releasing DHCP leases:"
+ for ifn in $_cooked_list ; do
+ ${command} -r $ifn
+ if [ $? -eq 0 ]; then
+ echo -n " $ifn"
+ else
+ _fail="$_fail $ifn"
+ fi
+ done
+ echo '.'
+ debug "The following leases failed to release: $_fail"
+}
+
+dhclient_prestop()
+{
+ dhclient_common || return 1
+
+ for ifn in ${_cooked_list}; do
+ ipx_down ${ifn}
+ ifalias_down ${ifn}
+ done
+}
+
+dhclient_poststop()
+{
+ for ifn in ${_cooked_list}; do
+ ifscript_down ${ifn}
+ done
+}
+
+if [ -n "$2" ]; then
+ _cmdifn="$2"
+fi
+
load_rc_config $name
run_rc_command "$1"
diff --git a/etc/rc.d/netif b/etc/rc.d/netif
index bfc9f8100630..7c9b2b4bea5f 100644
--- a/etc/rc.d/netif
+++ b/etc/rc.d/netif
@@ -38,52 +38,129 @@ stop_cmd="network_stop"
cloneup_cmd="clone_up"
clonedown_cmd="clone_down"
extra_commands="cloneup clonedown"
+_cmdifn=
network_start()
{
- # Create cloned interfaces
- clone_up
+ if [ -z "$_cmdifn" ]; then
+ #
+ # We're operating as a general network start routine.
+ #
- # Create IPv6<-->IPv4 tunnels
- gif_up
+ # Create cloned interfaces
+ clone_up
+
+ # Create IPv6<-->IPv4 tunnels
+ gif_up
+ fi
+
+ # Configure the interface(s).
+ network_common ifn_start verbose
+
+ # Resync ipfilter
+ /etc/rc.d/ipfilter resync
+}
+
+network_stop()
+{
+ echo -n "Stopping network:"
+
+ # Deconfigure the interface(s)
+ network_common ifn_stop
+ echo '.'
+}
+
+# network_common routine verbose
+# Common configuration subroutine for network interfaces. This
+# routine takes all the preparatory steps needed for configuriing
+# an interface and then calls $routine. If $verbose is specified,
+# it will call ifconfig(8) to show, in long format, the configured
+# interfaces. If $verbose is not given, it will simply output the
+# configured interface(s).
+network_common()
+{
+ _func=
+ _verbose=
+
+ if [ -z "$1" ]; then
+ err "network_common(): No function name specified."
+ else
+ _func="$1"
+ fi
+ [ -n "$2" ] && _verbose=yes
# 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.
+ # Set the scope of the command (all interfaces or just one).
#
- 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
+ _cooked_list="$_ifn_list"
+ if [ -n "$_cmdifn" ]; then
+ eval _cooked_list=\"`expr "$_ifn_list" : ".*\($_cmdifn\).*"`\"
+ if [ -z "$_cooked_list" ]; then
+ err "No such network interface: $_cmdifn"
+ return 1
+ fi
+ fi
- ipx_up ${ifn} && eval showstat_$ifn=1
+ for ifn in ${_cooked_list}; do
+ if ${_func} ${ifn} ; then
+ eval showstat_$ifn=1
+ else
+ _fail="$_fail $ifn"
+ fi
done
# Display interfaces configured by this script
#
- for ifn in ${_ifn_list}; do
+ for ifn in ${_cooked_list}; do
eval showstat=\$showstat_${ifn}
if [ ! -z ${showstat} ]; then
- ifconfig ${ifn}
+ if [ -n "$_verbose" ]; then
+ ifconfig ${ifn}
+ else
+ echo -n " ${ifn}"
+ fi
fi
done
+ debug "The following interfaces were not configured: $_fail"
+}
- # Resync ipfilter
- /etc/rc.d/ipfilter resync
+ifn_start()
+{
+ local ifn cfg
+ ifn="$1"
+ cfg=1
+
+ [ -z "$ifn" ] && return 1
+
+ ifscript_up ${ifn} && cfg=0
+ ifconfig_up ${ifn} && cfg=0
+ ifalias_up ${ifn} && cfg=0
+ ipx_up ${ifn} && cfg=0
+
+ return $cfg
}
-network_stop()
+ifn_stop()
{
- echo -n "Stopping network:"
+ local ifn cfg
+ ifn="$1"
+ cfg=1
- # flush routes
- route -n flush
- echo '.'
+ [ -z "$ifn" ] && return 1
+
+ ipx_down ${ifn} && cfg=0
+ ifalias_down ${ifn} && cfg=0
+ ifconfig_down ${ifn} && cfg=0
+ ifscript_down ${ifn} && cfg=0
+
+ return $cfg
}
+if [ -n "$2" ]; then
+ _cmdifn="$2"
+fi
+
load_rc_config $name
run_rc_command "$1"