diff options
author | mbr <mbr@FreeBSD.org> | 2003-08-11 20:32:00 +0000 |
---|---|---|
committer | mbr <mbr@FreeBSD.org> | 2003-08-11 20:32:00 +0000 |
commit | 58ef380ec1d72fe6be86df1d4d5bab4a03a5f558 (patch) | |
tree | 4d6fc027c46ce90469d7f1a34d104c32464463dd /etc | |
parent | 3777a782bbd63fda941b5c1e9518c39fcddec185 (diff) | |
download | FreeBSD-src-58ef380ec1d72fe6be86df1d4d5bab4a03a5f558.zip FreeBSD-src-58ef380ec1d72fe6be86df1d4d5bab4a03a5f558.tar.gz |
Improve the handling dhcp handling of pccard_ether.
There are now many configurations which have a NIC on board, and
pccard slots. If a dhclient is running on the internal nic, the
Improve the handling dhcp handling of pccard_ether.
Improve the dhcp handling of pccard_ether.
There are now many configurations which have a NIC on board and
Improve the dhcp handling of pccard_ether.
There are now many configurations which have a NIC on board and
cardbus slots too. If a dhclient was already running on the internal
NIC, the user was forced to kill a running dhclient manually.
If now a pccard is included at startup time, /etc/rc.d/dhclient
start does include it into the startup list for dhcp devices.
That means you can now do dhcp on the internal and the pccard devices
at the same time. If the card is plugged in later, a running dhclient
(working for the internal interface only) is killed, and restarted,
but the interface name of the new pccard is added to the internal
name. After removal, /etc/rc.d/dhclient is started again. This
script does nothing if there are no devices in /etc/rc.conf
This is only a workaround for a well known problem. After we have
a dhcp client which handles device adding and removal, it will go
away.
Diffstat (limited to 'etc')
-rw-r--r-- | etc/network.subr | 18 | ||||
-rwxr-xr-x | etc/pccard_ether | 31 |
2 files changed, 48 insertions, 1 deletions
diff --git a/etc/network.subr b/etc/network.subr index 7b7c652..e4b89e1 100644 --- a/etc/network.subr +++ b/etc/network.subr @@ -299,6 +299,24 @@ list_net_interfaces() esac done + case ${pccard_ifconfig} in + [Dd][Hh][Cc][Pp]) + for _if in ${removable_interfaces} ; do + _test_if=`ifconfig ${_if} 2>&1` + case "$_test_if" in + "ifconfig: interface $_if does not exist") + ;; + *) + _dhcplist="${_dhcplist}${_aprefix}${_if}" + [ -z "$_aprefix" ] && _aprefix=' ' + ;; + esac + done + ;; + *) + ;; + esac + case "$type" in nodhcp) echo $_nodhcplist diff --git a/etc/pccard_ether b/etc/pccard_ether index 6afa800..d420ec8 100755 --- a/etc/pccard_ether +++ b/etc/pccard_ether @@ -12,11 +12,40 @@ stop_dhcp() { pidfile="/var/run/dhclient.${interface}.pid" elif [ -s /var/run/dhcpc.${interface}.pid ]; then pidfile="/var/run/dhcpc.${interface}.pid" + elif [ -s /var/run/dhclient.pid ]; then + # If dhclient is already running, record + # it's 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 + + _aprefix= + for _if in _active_list ; do + _test_if=`ifconfig ${_if} 2>&1` + case "$_test_if" in + "ifconfig: interface $_if does not exist") + ;; + *) + _dhcplist="${_dhcplist}${_aprefix}${_if}" + [ -z "$_aprefix" ] && _aprefix=' ' + ;; + esac + done + + pidfile="/var/run/dhclient.pid" else return fi kill `cat ${pidfile}` rm -f ${pidfile} + sh `/etc/rc.d/dhclient start` } start_dhcp() { @@ -35,7 +64,7 @@ start_dhcp() { pidfile="/var/run/dhclient.${interface}.pid" dhclient_flags="${dhclient_flags} -pf ${pidfile}" fi - ${dhclient_program} ${dhclient_flags} ${interface} + ${dhclient_program} ${dhclient_flags} $_dhcplist ${interface} else echo "${dhclient_program}: DHCP client software not available" fi |