Search Linux Wireless

Re: [PATCH 2/3] PS3: gelic: Use the new PMK interface in the gelic driver

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, 2008-05-30 at 16:52 +0900, Masakazu Mokuno wrote:
> With the new WEXT flags, the PS3 wireless driver can tell the user space that
> it would do handle 4-way handshake by itself and needs the PSK without private
> ioctls.
> 
> Signed-off-by: Masakazu Mokuno <mokuno@xxxxxxxxxxxxx>

Awesome; I assume that once the 4WAY_HANDSHAKE bits get in you can
switch over to the WEXT driver for wpa_supplicant, right?

Acked-by: Dan Williams <dcbw@xxxxxxxxxx>

> ---
>  drivers/net/ps3_gelic_wireless.c |   46 ++++++++++-----------------------------
>  1 file changed, 12 insertions(+), 34 deletions(-)
> 
> --- a/drivers/net/ps3_gelic_wireless.c
> +++ b/drivers/net/ps3_gelic_wireless.c
> @@ -350,7 +350,8 @@ static int gelic_wl_get_range(struct net
>  
>  	/* encryption capability */
>  	range->enc_capa = IW_ENC_CAPA_WPA |
> -		IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP;
> +		IW_ENC_CAPA_CIPHER_TKIP | IW_ENC_CAPA_CIPHER_CCMP |
> +		IW_ENC_CAPA_4WAY_HANDSHAKE;
>  	if (wpa2_capable())
>  		range->enc_capa |= IW_ENC_CAPA_WPA2;
>  	range->encoding_size[0] = 5;	/* 40bit WEP */
> @@ -1256,42 +1257,19 @@ static int gelic_wl_set_encodeext(struct
>  		set_bit(key_index, &wl->key_enabled);
>  		/* remember wep info changed */
>  		set_bit(GELIC_WL_STAT_CONFIGURED, &wl->stat);
> -	} else if ((alg == IW_ENCODE_ALG_TKIP) || (alg == IW_ENCODE_ALG_CCMP)) {
> -		pr_debug("%s: TKIP/CCMP requested alg=%d\n", __func__, alg);
> -		/* check key length */
> -		if (IW_ENCODING_TOKEN_MAX < ext->key_len) {
> -			pr_info("%s: key is too long %d\n", __func__,
> -				ext->key_len);
> +	} else if (alg == IW_ENCODE_ALG_PMK) {
> +		if (ext->key_len != WPA_PSK_LEN) {
> +			pr_err("%s: PSK length wrong %d\n", __func__,
> +			       ext->key_len);
>  			ret = -EINVAL;
>  			goto done;
>  		}
> -		if (alg == IW_ENCODE_ALG_CCMP) {
> -			pr_debug("%s: AES selected\n", __func__);
> -			wl->group_cipher_method = GELIC_WL_CIPHER_AES;
> -			wl->pairwise_cipher_method = GELIC_WL_CIPHER_AES;
> -			wl->wpa_level = GELIC_WL_WPA_LEVEL_WPA2;
> -		} else {
> -			pr_debug("%s: TKIP selected, WPA forced\n", __func__);
> -			wl->group_cipher_method = GELIC_WL_CIPHER_TKIP;
> -			wl->pairwise_cipher_method = GELIC_WL_CIPHER_TKIP;
> -			/* FIXME: how do we do if WPA2 + TKIP? */
> -			wl->wpa_level = GELIC_WL_WPA_LEVEL_WPA;
> -		}
> -		if (flags & IW_ENCODE_RESTRICTED)
> -			BUG();
> -		wl->auth_method = GELIC_EURUS_AUTH_OPEN;
> -		/* We should use same key for both and unicast */
> -		if (ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
> -			pr_debug("%s: group key \n", __func__);
> -		else
> -			pr_debug("%s: unicast key \n", __func__);
> -		/* OK, update the key */
> -		wl->key_len[key_index] = ext->key_len;
> -		memset(wl->key[key_index], 0, IW_ENCODING_TOKEN_MAX);
> -		memcpy(wl->key[key_index], ext->key, ext->key_len);
> -		set_bit(key_index, &wl->key_enabled);
> -		/* remember info changed */
> -		set_bit(GELIC_WL_STAT_CONFIGURED, &wl->stat);
> +		memset(wl->psk, 0, sizeof(wl->psk));
> +		memcpy(wl->psk, ext->key, ext->key_len);
> +		wl->psk_len = ext->key_len;
> +		wl->psk_type = GELIC_EURUS_WPA_PSK_BIN;
> +		/* remember PSK configured */
> +		set_bit(GELIC_WL_STAT_WPA_PSK_SET, &wl->stat);
>  	}
>  done:
>  	spin_unlock_irqrestore(&wl->lock, irqflag);
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html

--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux