Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Jun 2005 22:33:35 -0700
From:      Brooks Davis <brooks@one-eyed-alien.net>
To:        current@freebsd.org
Subject:   dhclient/wpa_supplicant patch
Message-ID:  <20050629053335.GA18808@odin.ac.hmc.edu>

next in thread | raw e-mail | index | archive | help

--EVF5PPMfhYS0aIcm
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

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
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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
=20
 	if wpaif $1; then
-		#/etc/rc.d/wpa_supplicant start $1
+		/etc/rc.d/wpa_supplicant start $1
 		_cfg=3D0		# XXX: not sure this should count
 	fi
=20
@@ -89,7 +89,7 @@ ifconfig_down()
 	IFS=3D"$oldifs"
=20
 	if wpaif $1; then
-		#/etc/rc.d/wpa_supplicant stop $1
+		/etc/rc.d/wpa_supplicant stop $1
 		_cfg=3D0
 	fi
=20
@@ -113,16 +113,11 @@ _ifconfig_getargs()
 	fi
=20
 	eval _args=3D\$ifconfig_$1
-	if [ -z "$_args" -a -n "${pccard_ifconfig}" ]; then
-		for _if in ${removable_interfaces} ; do
-			if [ "$_if" =3D "$_ifn" ] ; then
-				_args=3D${pccard_ifconfig}
-				break
-			fi
-		done
+	if [ -z "$_args" ]; then
+		_args=3D$ifconfig_DEFAULT
 	fi
=20
-	echo $_args
+	echo "$_args"
 }
=20
 # ifconfig_getargs if
@@ -394,7 +389,7 @@ list_net_interfaces()
 		_tmplist=3D"`ifconfig -l`"
 		;;
 	*)
-		_tmplist=3D"${network_interfaces} ${cloned_interfaces}"
+		_tmplist=3D"${network_interfaces} ${removable_interfaces} ${cloned_inter=
faces}"
 		;;
 	esac
=20
@@ -408,37 +403,15 @@ list_net_interfaces()
 	_aprefix=3D
 	_bprefix=3D
 	for _if in ${_tmplist} ; do
-		eval _ifarg=3D"\$ifconfig_${_if}"
-		case "$_ifarg" in
-		[Dd][Hh][Cc][Pp])
+		if dhcpif $_if; then
 			_dhcplist=3D"${_dhcplist}${_aprefix}${_if}"
 			[ -z "$_aprefix" ] && _aprefix=3D' '
-			;;
-		''|*)
+		elif [ -n "`_ifconfig_getargs $if`" ]; then
 			_nodhcplist=3D"${_nodhcplist}${_bprefix}${_if}"
 			[ -z "$_bprefix" ] && _bprefix=3D' '
-			;;
-		esac
+		fi
 	done
=20
-	case ${pccard_ifconfig} in
-	[Dd][Hh][Cc][Pp])
-		for _if in ${removable_interfaces} ; do
-			_test_if=3D`ifconfig ${_if} 2>&1`
-			case "$_test_if" in
-			"ifconfig: interface $_if does not exist")
-				;;
-			*)
-				_dhcplist=3D"${_dhcplist}${_aprefix}${_if}"
-				[ -z "$_aprefix" ] && _aprefix=3D' '
-				;;
-			esac
-		done
-		;;
-	*)
-		;;
-	esac
-
 	case "$type" in
 	nodhcp)
 		echo $_nodhcplist
Index: rc.d/Makefile
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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=3D	DAEMON LOGIN NETWORKING SERVERS \
 	timed tmp \
 	ugidfw usbd \
 	var virecover \
-	watchdogd \
+	watchdogd wpa_supplicant \
 	ypbind yppasswdd ypserv \
 	ypset ypupdated ypxfrd
 FILESDIR=3D	/etc/rc.d
Index: rc.d/netif
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
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=3D
 	if [ -n "$_cmdifn" ]; then
-		for i in $_cmdifn ; do
-			eval _if=3D\"`expr "$_ifn_list" : ".*\(${i}\).*"`\"
-			if [ -z "$_if" ]; then
-				err 1 "No such network interface: $i"
-			fi
-			_cooked_list=3D"$_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=3D"$_cmdifn"
 	else
 		_cooked_list=3D"$_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=3D"wpa_supplicant"
+rcvar=3D
+command=3D"/usr/sbin/${name}"
+conf_file=3D"/etc/wpa_supplicant.conf"
+
+ifn=3D"$2"
+if [ -z "$ifn" ]; then
+	return 1
+fi
+
+load_rc_config $name
+
+if ! wpaif $ifn; then
+	return 1
+fi
+
+pid_file=3D"/var/run/${name}/${ifn}.pid"
+command_args=3D"-B -q -i $ifn -P $pid_file -c $conf_file"
+required_files=3D$conf_file
+
+run_rc_command "$1"

--=20
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

--EVF5PPMfhYS0aIcm
Content-Type: application/pgp-signature
Content-Disposition: inline

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.1 (GNU/Linux)

iD8DBQFCwjKuXY6L6fI4GtQRAjD1AKDd2Yg9sRklMnfTBkyWXo8T5yUwWgCeLGhz
2YL701IxMcU8Q1Wbub+UjgU=
=3LGn
-----END PGP SIGNATURE-----

--EVF5PPMfhYS0aIcm--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050629053335.GA18808>