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