summaryrefslogtreecommitdiffstats
path: root/etc/rc.d/netif
diff options
context:
space:
mode:
authormtm <mtm@FreeBSD.org>2003-06-29 05:34:41 +0000
committermtm <mtm@FreeBSD.org>2003-06-29 05:34:41 +0000
commitf9ef847419e515982d648ef72058bb7865bca782 (patch)
tree17fa04e2f7e33b7c1058cd83c70e044bb00232a8 /etc/rc.d/netif
parent39ca7af95e220ebd0c34c3404205708d0099b4ac (diff)
downloadFreeBSD-src-f9ef847419e515982d648ef72058bb7865bca782.zip
FreeBSD-src-f9ef847419e515982d648ef72058bb7865bca782.tar.gz
Implement individual operations on static and dhcp interfaces. Previously
network interfaces could only be turned on and off as a group (all static interfaces or all dhcp interfaces). When used to start the interface a 'long form' ifconfig output is used to show the status of the interface, but when stopping an interface the script will simply output the name of the interface. This is simply my personal preference. Hopefully as this functionality matures we can stabilize on a prefered form of output for these scripts. A stop command to the dhclient script now explicitly releases the dhcp lease. Behaviour at system shutdown; however, is unchanged since dhclient is not, by default, run at that time. The client will not release its lease at shutdown.
Diffstat (limited to 'etc/rc.d/netif')
-rw-r--r--etc/rc.d/netif121
1 files changed, 99 insertions, 22 deletions
diff --git a/etc/rc.d/netif b/etc/rc.d/netif
index bfc9f81..7c9b2b4 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"
OpenPOWER on IntegriCloud