dhclient/wpa_supplicant patch
Brooks Davis
brooks at one-eyed-alien.net
Wed Jun 29 05:33:38 GMT 2005
Below you will find a patch which I believe solves the major issues with
the removable_interfaces variable, and adds wpa_supplicant support to
the startup scripts. The significant behavioral changes are starting
wpa_supplicant it the ifconfig_<ifn> entry contains WPA, always
including removable interfaces in the list of potential interfaces,
always running /etc/rc.d/netif's start/stop code when passed a list of
interfaces on all interfaces, even if they don't exist, and replacing
pccard_ifconfig with a new ifconfig_DEFAULT variable which applies to
all interfaces that lack an ifconfig_<ifn> line.
Please review and test. I plan to commit tomorrow PDT unless there are
issues.
-- Brooks
Index: network.subr
===================================================================
RCS file: /usr/cvs/src/etc/network.subr,v
retrieving revision 1.162
diff -u -p -u -r1.162 network.subr
--- network.subr 7 Jun 2005 23:59:45 -0000 1.162
+++ network.subr 29 Jun 2005 01:22:03 -0000
@@ -48,7 +48,7 @@ ifconfig_up()
fi
if wpaif $1; then
- #/etc/rc.d/wpa_supplicant start $1
+ /etc/rc.d/wpa_supplicant start $1
_cfg=0 # XXX: not sure this should count
fi
@@ -89,7 +89,7 @@ ifconfig_down()
IFS="$oldifs"
if wpaif $1; then
- #/etc/rc.d/wpa_supplicant stop $1
+ /etc/rc.d/wpa_supplicant stop $1
_cfg=0
fi
@@ -113,16 +113,11 @@ _ifconfig_getargs()
fi
eval _args=\$ifconfig_$1
- if [ -z "$_args" -a -n "${pccard_ifconfig}" ]; then
- for _if in ${removable_interfaces} ; do
- if [ "$_if" = "$_ifn" ] ; then
- _args=${pccard_ifconfig}
- break
- fi
- done
+ if [ -z "$_args" ]; then
+ _args=$ifconfig_DEFAULT
fi
- echo $_args
+ echo "$_args"
}
# ifconfig_getargs if
@@ -394,7 +389,7 @@ list_net_interfaces()
_tmplist="`ifconfig -l`"
;;
*)
- _tmplist="${network_interfaces} ${cloned_interfaces}"
+ _tmplist="${network_interfaces} ${removable_interfaces} ${cloned_interfaces}"
;;
esac
@@ -408,37 +403,15 @@ list_net_interfaces()
_aprefix=
_bprefix=
for _if in ${_tmplist} ; do
- eval _ifarg="\$ifconfig_${_if}"
- case "$_ifarg" in
- [Dd][Hh][Cc][Pp])
+ if dhcpif $_if; then
_dhcplist="${_dhcplist}${_aprefix}${_if}"
[ -z "$_aprefix" ] && _aprefix=' '
- ;;
- ''|*)
+ elif [ -n "`_ifconfig_getargs $if`" ]; then
_nodhcplist="${_nodhcplist}${_bprefix}${_if}"
[ -z "$_bprefix" ] && _bprefix=' '
- ;;
- esac
+ fi
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
Index: rc.d/Makefile
===================================================================
RCS file: /usr/cvs/src/etc/rc.d/Makefile,v
retrieving revision 1.52
diff -u -p -u -r1.52 Makefile
--- rc.d/Makefile 29 Apr 2005 23:02:56 -0000 1.52
+++ rc.d/Makefile 29 Jun 2005 01:23:12 -0000
@@ -36,7 +36,7 @@ FILES= DAEMON LOGIN NETWORKING SERVERS \
timed tmp \
ugidfw usbd \
var virecover \
- watchdogd \
+ watchdogd wpa_supplicant \
ypbind yppasswdd ypserv \
ypset ypupdated ypxfrd
FILESDIR= /etc/rc.d
Index: rc.d/netif
===================================================================
RCS file: /usr/cvs/src/etc/rc.d/netif,v
retrieving revision 1.13
diff -u -p -u -r1.13 netif
--- rc.d/netif 7 Jun 2005 04:49:12 -0000 1.13
+++ rc.d/netif 29 Jun 2005 02:13:48 -0000
@@ -109,13 +109,10 @@ network_common()
#
_cooked_list=
if [ -n "$_cmdifn" ]; then
- for i in $_cmdifn ; do
- eval _if=\"`expr "$_ifn_list" : ".*\(${i}\).*"`\"
- if [ -z "$_if" ]; then
- err 1 "No such network interface: $i"
- fi
- _cooked_list="$_cooked_list $_if"
- done
+ # Don't check that the interfaces exist. We need to run
+ # the down code even when the interface doesn't exist to
+ # kill off wpa_supplicant.
+ _cooked_list="$_cmdifn"
else
_cooked_list="$_ifn_list"
fi
--- rc.d/wpa_supplicant Tue Jun 28 22:24:18 2005
+++ rc.d/wpa_supplicant Tue Jun 28 18:51:32 2005
@@ -0,0 +1,33 @@
+#!/bin/sh
+#
+# $FreeBSD$
+#
+
+# PROVIDE: wpa_supplicant
+# REQUIRE: mountcritremote
+# KEYWORD: nojail nostart
+
+. /etc/rc.subr
+. /etc/network.subr
+
+name="wpa_supplicant"
+rcvar=
+command="/usr/sbin/${name}"
+conf_file="/etc/wpa_supplicant.conf"
+
+ifn="$2"
+if [ -z "$ifn" ]; then
+ return 1
+fi
+
+load_rc_config $name
+
+if ! wpaif $ifn; then
+ return 1
+fi
+
+pid_file="/var/run/${name}/${ifn}.pid"
+command_args="-B -q -i $ifn -P $pid_file -c $conf_file"
+required_files=$conf_file
+
+run_rc_command "$1"
--
Any statement of the form "X is the one, true Y" is FALSE.
PGP fingerprint 655D 519C 26A7 82E7 2529 9BF0 5D8E 8BE9 F238 1AD4
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20050628/45175fd7/attachment.bin
More information about the freebsd-current
mailing list