Re: [PATCH 1/1] linux-wireless: Added psk in struct cfg80211_connect_params needed for offloading 4way handshake to driver

From: Arend van Spriel
Date: Tue Nov 11 2014 - 04:44:32 EST


On 11-11-14 06:56, Gautam (Gautam Kumar) Shukla wrote:
>

Hi Gautam,

Good to see more upstream contributions, but it might be useful to have
a driver implementation as well in this series. Maybe we can take a shot
with brcmfmac for obvious reasons. Would you happen to have
wpa_supplicant changes as well?

I added some inline comments below.

Regards,
Arend

> For offloading 4 way handshake to driver, currently we don't have any member of struct cfg80211_connect_params to pass PSK from supplicant to driver. I have added psk for the same and added rest of the code needed in nl80211.h and nl80211.c to parse and make it available to driver.
> From supplicant, we already have psk member field in assoc_params to use .

In the commit message you should not describe what you did, but what
problem you are trying to solve and/or what functional change the patch
provides.

> Tested on x86 linux.
>
> Signed-off-by: Gautam kumar shukla <gautams@xxxxxxxxxxxx>
> ---
> include/net/cfg80211.h | 2 ++
> include/uapi/linux/nl80211.h | 8 +++++++-
> net/wireless/nl80211.c | 4 ++++
> 3 files changed, 13 insertions(+), 1 deletion(-)
>
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index a2ddcf2..6f744e0 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -1758,6 +1758,7 @@ struct cfg80211_ibss_params {
> * allowed to ignore this @bssid_hint if it has knowledge of a better BSS
> * to use.
> * @ssid: SSID
> + * @psk:preshared key for WPA2-PSK connection or %NULL if not specified

add space after the colon sign.

> * @ssid_len: Length of ssid in octets
> * @auth_type: Authentication type (algorithm)
> * @ie: IEs for association request
> @@ -1783,6 +1784,7 @@ struct cfg80211_connect_params {
> const u8 *bssid;
> const u8 *bssid_hint;
> const u8 *ssid;
> + const u8 *psk;
> size_t ssid_len;
> enum nl80211_auth_type auth_type;
> const u8 *ie;
> diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index 4b28dc0..b01d5dd 100644
> --- a/include/uapi/linux/nl80211.h
> +++ b/include/uapi/linux/nl80211.h
> @@ -421,7 +421,7 @@
> * %NL80211_ATTR_MAC, %NL80211_ATTR_WIPHY_FREQ, %NL80211_ATTR_CONTROL_PORT,
> * %NL80211_ATTR_CONTROL_PORT_ETHERTYPE,
> * %NL80211_ATTR_CONTROL_PORT_NO_ENCRYPT, %NL80211_ATTR_MAC_HINT, and
> - * %NL80211_ATTR_WIPHY_FREQ_HINT.
> + * %NL80211_ATTR_WIPHY_FREQ_HINT, and %NL80211_ATTR_PSK.
> * If included, %NL80211_ATTR_MAC and %NL80211_ATTR_WIPHY_FREQ are
> * restrictions on BSS selection, i.e., they effectively prevent roaming
> * within the ESS. %NL80211_ATTR_MAC_HINT and %NL80211_ATTR_WIPHY_FREQ_HINT @@ -1638,6 +1638,10 @@ enum nl80211_commands {
> * @NL80211_ATTR_SMPS_MODE: SMPS mode to use (ap mode). see
> * &enum nl80211_smps_mode.
> *
> + * @NL80211_ATTR_PSK: a PSK value (u8 attribute).This is 32-octet
> + (256-bit)
> + * PSK.
> + *

Some indentation gone haywire here. I would remove '(u8 attribute)'. The
mention of 32-octet seems sufficient to me.

> * @NL80211_ATTR_MAX: highest attribute number currently defined
> * @__NL80211_ATTR_AFTER_LAST: internal use
> */
> @@ -1990,6 +1994,8 @@ enum nl80211_attrs {
>
> NL80211_ATTR_SMPS_MODE,
>
> + NL80211_ATTR_PSK,
> +
> /* add attributes here, update the policy in nl80211.c */
>
> __NL80211_ATTR_AFTER_LAST,
> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index 5839c85..91c24b1 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -395,6 +395,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = {
> [NL80211_ATTR_USER_PRIO] = { .type = NLA_U8 },
> [NL80211_ATTR_ADMITTED_TIME] = { .type = NLA_U16 },
> [NL80211_ATTR_SMPS_MODE] = { .type = NLA_U8 },
> + [NL80211_ATTR_PSK] = { .type = NLA_BINARY, .len = 32 },
> };
>
> /* policy for the key attributes */
> @@ -7310,6 +7311,9 @@ static int nl80211_connect(struct sk_buff *skb, struct genl_info *info)
> connect.flags |= ASSOC_REQ_USE_RRM;
> }
>
> + if (info->attrs[NL80211_ATTR_PSK])
> + connect.psk = nla_data(info->attrs[NL80211_ATTR_PSK]);
> +
> wdev_lock(dev->ieee80211_ptr);
> err = cfg80211_connect(rdev, dev, &connect, connkeys, NULL);
> wdev_unlock(dev->ieee80211_ptr);
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/
>

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