diff options
author | Mike Makonnen <mtm@FreeBSD.org> | 2003-06-29 05:34:41 +0000 |
---|---|---|
committer | Mike Makonnen <mtm@FreeBSD.org> | 2003-06-29 05:34:41 +0000 |
commit | b166db2bfd43a71d34db4ab42379f55c2271227e (patch) | |
tree | 17fa04e2f7e33b7c1058cd83c70e044bb00232a8 /etc | |
parent | 2a7ea7e4876b38163126e5f032b6287ca94b0a6f (diff) | |
download | src-test2-b166db2bfd43a71d34db4ab42379f55c2271227e.tar.gz src-test2-b166db2bfd43a71d34db4ab42379f55c2271227e.zip |
Notes
Diffstat (limited to 'etc')
-rwxr-xr-x | etc/rc.d/dhclient | 63 | ||||
-rw-r--r-- | etc/rc.d/netif | 121 |
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" |