Date: Thu, 2 Dec 2004 20:34:38 GMT From: Sam Leffler <sam@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 66271 for review Message-ID: <200412022034.iB2KYcZo000647@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=66271 Change 66271 by sam@sam_ebb on 2004/12/02 20:34:13 overhaul for new world order; needs more cleanup and testing Affected files ... .. //depot/projects/wifi/etc/pccard_ether#2 edit Differences ... ==== //depot/projects/wifi/etc/pccard_ether#2 (text+ko) ==== @@ -9,79 +9,17 @@ . /etc/network.subr -stop_dhcp() { - # If dhclient is already running, record - # its interfaces. - if [ -x /usr/bin/grep ]; then - eval _active_list=\"`/bin/ps -axwww | \ - /usr/bin/grep dhclient | \ - /usr/bin/grep -v grep | \ - /usr/bin/sed -e 's|^.*dhclient||' | \ - /usr/bin/awk '{for (i=1;i<=NF;i++) \ - { if ($i~/[a-zA-Z].[0-9]$/) \ - { printf(" %s",$i) } }}'` \ - \" - fi +# Suck in the configuration variables +# +if [ -r /etc/defaults/rc.conf ]; then + . /etc/defaults/rc.conf + source_rc_confs +elif [ -r /etc/rc.conf ]; then + . /etc/rc.conf +fi - # Get the rc.conf list of dhcp configured interfaces - static_dhcp_list="`list_net_interfaces dhcp`" - - # Get the current ifconfig list of interfaces - _aprefix= - _nlist= - for _if in ${_active_list} ; do - _test_if=`ifconfig ${_if} 2>&1` - case "$_test_if" in - "ifconfig: interface $_if does not exist") - ;; - ${interface}) - # Don't record the same device twice. - ;; - *) - # - # Catch devices which were specified before, - # but have not been part of the rc. We need - # them again for the restart. - # - for _cif in ${static_dhcp_list} ; do - case "$_cif" in - ${_if}) - # Nothing to add - ;; - *) - # Found interface beside rc.conf - _nlist="${_nlist}${_aprefix}${_if}" - ;; - esac - done - _dhcplist="${_dhcplist}${_aprefix}${_if}" - [ -z "$_aprefix" ] && _aprefix=' ' - ;; - esac - done - - if [ -s /var/run/dhclient.pid ]; then - pidfile="/var/run/dhclient.pid" - else - return - fi - /sbin/dhclient -r ${interface} - rm -f ${pidfile} - case ${startstop} in - [Ss][Tt][Oo][Pp]) - if [ -z "${_nlist}" ]; then - sh `/etc/rc.d/dhclient start` - else - start_dhcp_keep_current - fi - ;; - *) - ;; - esac -} - -start_dhcp() { - stop_dhcp +start_dhcp() +{ case ${pccard_ether_delay} in [Nn][Oo]) ;; @@ -89,37 +27,60 @@ sleep ${pccard_ether_delay} ;; esac + [ -n "$dhcp_program" ] && dhclient_program="$dhcp_program" [ -n "$dhcp_flags" ] && dhclient_flags="$dhcp_flags" if [ -x "${dhclient_program}" ]; then - interfaces=`echo $_dhcplist ${interface} | xargs -n 1 echo | sort -u` - ${dhclient_program} ${dhclient_flags} ${interfaces} + ${dhclient_program} ${dhclient_flags} ${interface} else echo "${dhclient_program}: DHCP client software not available" fi } -# Called after detaching a card, if dhclient has been -# used for more than one interface. -start_dhcp_keep_current() { - [ -n "$dhcp_program" ] && dhclient_program="$dhcp_program" - [ -n "$dhcp_flags" ] && dhclient_flags="$dhcp_flags" - if [ -x "${dhclient_program}" ]; then - ${dhclient_program} ${dhclient_flags} \ - ${_dhcplist} +ifn_isup() +{ + if [ -x /usr/bin/grep ]; then + ifconfig ${interface} | grep -s netmask > /dev/null 2>&1 + return # returns grep exit status else - echo "${dhclient_program}: DHCP client software not available" + return 0 # cannot tell fi } -# Suck in the configuration variables -# -if [ -r /etc/defaults/rc.conf ]; then - . /etc/defaults/rc.conf - source_rc_confs -elif [ -r /etc/rc.conf ]; then - . /etc/rc.conf -fi +# XXX these come from rc.d/netif; if they get moved to network.subr +# XXX we can delete our private copies + +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 +} + +ifn_stop() +{ + local ifn cfg + ifn="$1" + cfg=1 + + [ -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 +} interface=$1 shift @@ -138,47 +99,21 @@ case ${startstop} in [Ss][Tt][Aa][Rr][Tt] | '') - if [ -x /usr/bin/grep ]; then - if ifconfig ${interface} | grep -s netmask > /dev/null 2>&1; then - # Interface is already up, so ignore it. - exit 0 - fi - fi + ifn_isup ${interface} && exit 0 # already configured - if [ -r /etc/start_if.${interface} ]; then - . /etc/start_if.${interface} - fi - eval ifconfig_args=\$ifconfig_${interface} case ${ifconfig_args} in [Nn][Oo] | '') ;; [Dd][Hh][Cc][Pp]) - # Start up the DHCP client program - start_dhcp + ifscript_up ${interface} # run any script + start_dhcp # start DHCP client program ;; *) - # Do the primary ifconfig if specified - ifconfig ${interface} ${ifconfig_args} $* + ifn_start ${interface} # static configuration - # Check to see if aliases need to be added - alias=0 - while : - do - eval ifx_args=\$ifconfig_${interface}_alias${alias} - if [ -n "${ifx_args}" ]; then - ifconfig ${interface} ${ifx_args} alias - alias=`expr ${alias} + 1` - else - break; - fi - done - - # Do ipx address if specified - eval ifx_args=\$ifconfig_${interface}_ipx - if [ -n "${ifx_args}" ]; then - ifconfig ${interface} ${ifx_args} - fi + # XXX this mimics what's in rc.d/routing and should + # XXX probably pulled up into network.subr # Add default route into $static_routes case ${defaultrouter} in @@ -209,26 +144,22 @@ # IPv6 setup case ${ipv6_enable} in [Yy][Ee][Ss]) - if [ -r /etc/network.subr ]; then - . /etc/network.subr - network6_interface_setup ${interface} - fi + network6_interface_setup ${interface} ;; esac ;; # Stop the interface *) - if [ -r /etc/stop_if.${interface} ]; then - . /etc/stop_if.${interface} - fi - eval ifconfig_args=\$ifconfig_${interface} case ${ifconfig_args} in [Nn][Oo] | '') ;; [Dd][Hh][Cc][Pp]) + ifscript_down ${interface} # run any script + # Stop the DHCP client for this interface - stop_dhcp + # nothing to do; any dhclient will note the interface + # go down and terminate ;; *) # Delete static route if specified @@ -240,33 +171,14 @@ done fi - # Delete aliases if exist - alias=0 - while : - do - eval ifx_args=\$ifconfig_${interface}_alias${alias} - if [ -n "${ifx_args}" ]; then - ifconfig ${interface} ${ifx_args} alias delete - alias=`expr ${alias} + 1` - else - break; - fi - done + ifn_down ${interface} ;; esac - # Remove the network interface and cleaning ARP table - ifconfig ${interface} delete + # + # Remove the network interface and cleanup ARP table + # XXX no way to limit arp flush to one interface + # + ifconfig ${interface} delete down arp -d -a - - # Clean the routing table - case ${removable_route_flush} in - [Nn][Oo]) - ;; - *) - # flush beforehand, just in case.... - route -n flush -inet - ;; - esac - ;; esac
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200412022034.iB2KYcZo000647>
