pccard_ether and dhcp handling - please decide ...
Martin Blapp
mb at imp.ch
Mon Aug 11 08:45:56 PDT 2003
Hi all,
I'd like to know if I should commit this patch and make pccard_ether
more useful, while I'm working on a cleaner solution. Until this is
done, a lot of time can pass. Maybe I'll have it done next year.
The goal is to write a dhcp client which is better designed that
the ISC dhclient.
This patch is very useful for me. I know that many of you
may be against it because it's a workaround. But it's still a lot
better than the current situation !
So can we decide it if I should commit it or not ?
If the majority thinks it's bad, I'll just keep it in my homedir
if noone is interested.
Martin
---------------------------------------------------------------
Simplify the pccard dhcp handling a lot. There are now
many configurations which have a NIC on board, and
pccard slots. If a dhclient is 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 you then dhcp on the internal and the
pccard device.
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
--- etc/network.subr Sat Aug 9 11:48:47 2003
+++ etc/network.subr Sat Aug 9 14:10:59 2003
@@ -299,6 +299,24 @@
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
--- etc/pccard_ether Thu Jun 26 04:44:08 2003
+++ etc/pccard_ether Sun Aug 10 23:16:24 2003
@@ -12,11 +12,40 @@
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 @@
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
More information about the freebsd-audit
mailing list