Browse Source

patch wlc and scripts to control wl's builtin wpa supplicant

SVN-Revision: 7875
Mike Baker 18 years ago
parent
commit
ee0977d0d3
2 changed files with 38 additions and 1 deletions
  1. 9 1
      package/broadcom-wl/files/lib/wifi/broadcom.sh
  2. 29 0
      package/broadcom-wl/src/wlc/wlc.c

+ 9 - 1
package/broadcom-wl/files/lib/wifi/broadcom.sh

@@ -201,7 +201,15 @@ enable_broadcom() {
 		[ -z "$nasopts" ] || {
 			eval "${vif}_ssid=\"\$ssid\""
 			mode="-A"
-			[ "$vif" = "$sta_if" ] && mode="-S"
+			[ "$ap" = "0" ] && {
+				mode="-S"
+				[ -z "$bridge" ] || {
+					append vif_pre_up "supplicant 1" "$N"
+					append vif_pre_up "passphrase $key" "$N"
+					
+					nas=""
+				}
+			}
 			[ -z "$nas" ] || nas_cmd="${nas_cmd:+$nas_cmd$N}$nas -P /var/run/nas.$ifname.pid -H 34954 ${bridge:+ -l $bridge} -i $ifname $mode -m $auth -w $wsec -s \"\$${vif}_ssid\" -g 3600 $nasopts &"
 		}
 		_c=$(($_c + 1))

+ 29 - 0
package/broadcom-wl/src/wlc/wlc.c

@@ -679,6 +679,29 @@ static int wlc_wdsmac(wlc_param param, void *data, void *value)
 	return ret;
 }
 
+static int wlc_pmk(wlc_param param, void *data, void *value)
+{
+	int ret = -1;
+	char *str = (char *) value;
+	wsec_pmk_t pmk;
+	
+	/* driver doesn't support GET */
+
+	if ((param & PARAM_MODE) == SET) {
+		strncpy(pmk.key, value, WSEC_MAX_PSK_LEN);
+		pmk.key_len = strlen(value);
+
+		if (pmk.key_len > WSEC_MAX_PSK_LEN)
+			pmk.key_len = WSEC_MAX_PSK_LEN;
+
+		pmk.flags = WSEC_PASSPHRASE;
+
+		ret = wl_ioctl(interface, WLC_SET_WSEC_PMK, &pmk, sizeof(pmk));
+	}
+	
+	return ret;
+}
+
 static const struct wlc_call wlc_calls[] = {
 	{
 		.name = "version",
@@ -864,6 +887,12 @@ static const struct wlc_call wlc_calls[] = {
 		.data.str = "sup_wpa",
 		.desc = "Built-in WPA supplicant"
 	},
+	{
+		.name = "passphrase",
+		.param = STRING,
+		.handler = wlc_pmk,
+		.desc = "Passphrase for built-in WPA supplicant",
+	},
 	{
 		.name = "maxassoc",
 		.param = INT,