From patchwork Mon Dec 2 14:28:53 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Marek Kwaczynski X-Patchwork-Id: 3265641 Return-Path: X-Original-To: patchwork-linux-wireless@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork2.web.kernel.org (Postfix) with ESMTP id E654BBEEAD for ; Mon, 2 Dec 2013 14:29:36 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 328C6201F5 for ; Mon, 2 Dec 2013 14:29:32 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id CB17B20165 for ; Mon, 2 Dec 2013 14:29:26 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752114Ab3LBO3Y (ORCPT ); Mon, 2 Dec 2013 09:29:24 -0500 Received: from mail-ea0-f176.google.com ([209.85.215.176]:44308 "EHLO mail-ea0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751898Ab3LBO3X (ORCPT ); Mon, 2 Dec 2013 09:29:23 -0500 Received: by mail-ea0-f176.google.com with SMTP id h14so8883861eaj.7 for ; Mon, 02 Dec 2013 06:29:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=tieto.com; s=google; h=from:to:cc:subject:date:message-id; bh=qsYxBKZsS0UYCX/J6Si9Y1hjL5Jessf0nDOQ78z9b+w=; b=MT7FvImzJClt6+XhdNC14AXcMe9s1osBnBenFTB6dt2NKyIurRTL0d/5Hz1KVIrx66 1hHCCNrxSOIem6i6lKXXqcaxWChtSB1zhLSQmjtDc8Pf8/9fqyvVuHbhF8grj6tqHx1h iPRG7lRPZnlRJPL3YMxaFE/RD+edEasX+ScOc= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=qsYxBKZsS0UYCX/J6Si9Y1hjL5Jessf0nDOQ78z9b+w=; b=YMqbxf70kS+kQNDeSbLa0G9JkrmAwreCZeJlP73w7T0St3kGKpcIyzYeK8Un6Lv6Jl Nj4t2NKBi3sxUcksG933M4r+qoaW4f77CWSrFh0sVZ8xLxYnqBMfbFtweDVeITMP+M1O 6uNznhz/EKFJyCkAuo3/Kxp5PBznKPf4Y0KoRYc7e8kp0kJP729UVKi1INEi7gRsv8BW 0y91zXDUW6dBRPUqgc8GhsJOgFfWxH1WZkq009sv4zh6SM75cHfUTsRhwGM5fWFvbTLE 3svNZZ449wXRB6m8LxZYRnV9y1gL7N2mUqzRYsYVHFpYpPBQc75FUa4WVUQhYCOZ3O45 PQsg== X-Gm-Message-State: ALoCoQkv5TFaECZvgbVCt1gqPIPMdnabN42tsF3HwZTjcjRZi/FRE1nG3PvbSg98jaB1IH+zQ3tI03uSVC3NXKXANiIZbkeWjnRfkmdbB/7ucId5CBlZkzo= X-Received: by 10.14.0.72 with SMTP id 48mr2040469eea.50.1385994561859; Mon, 02 Dec 2013 06:29:21 -0800 (PST) Received: from localhost.localdomain (host127.217.146.194.generacja.pl. [194.146.217.127]) by mx.google.com with ESMTPSA id l4sm35804598een.13.2013.12.02.06.29.17 for (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Mon, 02 Dec 2013 06:29:19 -0800 (PST) From: Marek Kwaczynski To: linux-wireless@vger.kernel.org Cc: johannes@sipsolutions.net, Marek Kwaczynski Subject: [PATCH 1/2] nl80211/cfg80211: Set VHT Operating mode Date: Mon, 2 Dec 2013 15:28:53 +0100 Message-Id: <1385994534-13383-1-git-send-email-marek.kwaczynski@tieto.com> X-Mailer: git-send-email 1.7.9.5 X-DomainID: tieto.com Sender: linux-wireless-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-wireless@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This attribuite is needed for setting Operating Mode Notification in AP mode from User Space. This functionality is required when User Space received Assoc Reqeust contains VHT Operation Mode Notification element. Signed-off-by: Marek Kwaczynski --- include/net/cfg80211.h | 4 ++++ include/uapi/linux/nl80211.h | 6 ++++++ net/wireless/nl80211.c | 7 +++++++ 3 files changed, 17 insertions(+) diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index 3eae46c..0b66d91 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -748,6 +748,8 @@ enum station_parameters_apply_mask { * @supported_channels_len: number of supported channels * @supported_oper_classes: supported oper classes in IEEE 802.11 format * @supported_oper_classes_len: number of supported operating classes + * @vht_opmode: operating mode field + * @vht_opmode_used: information if operating mode field is used */ struct station_parameters { const u8 *supported_rates; @@ -771,6 +773,8 @@ struct station_parameters { u8 supported_channels_len; const u8 *supported_oper_classes; u8 supported_oper_classes_len; + u8 vht_opmode; + bool vht_opmode_used; }; /** diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h index f752e98..0240e7d 100644 --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h @@ -1508,6 +1508,10 @@ enum nl80211_commands { * to react to radar events, e.g. initiate a channel switch or leave the * IBSS network. * + * @NL80211_ATTR_VHT_OPMODE: Operating mode field from Operating Mode + * Notification Element based on association request when used with + * NL80211_CMD_NEW_STATION + * * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use */ @@ -1824,6 +1828,8 @@ enum nl80211_attrs { NL80211_ATTR_HANDLE_DFS, + NL80211_ATTR_VHT_OPMODE, + /* 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 a7f4e79..ddd1f71 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -357,6 +357,7 @@ static const struct nla_policy nl80211_policy[NL80211_ATTR_MAX+1] = { [NL80211_ATTR_STA_SUPPORTED_CHANNELS] = { .type = NLA_BINARY }, [NL80211_ATTR_STA_SUPPORTED_OPER_CLASSES] = { .type = NLA_BINARY }, [NL80211_ATTR_HANDLE_DFS] = { .type = NLA_FLAG }, + [NL80211_ATTR_VHT_OPMODE] = { .type = NLA_U8 }, }; /* policy for the key attributes */ @@ -4125,6 +4126,12 @@ static int nl80211_new_station(struct sk_buff *skb, struct genl_info *info) params.vht_capa = nla_data(info->attrs[NL80211_ATTR_VHT_CAPABILITY]); + if (info->attrs[NL80211_ATTR_VHT_OPMODE]) { + params.vht_opmode_used = true; + params.vht_opmode = + nla_get_u8(info->attrs[NL80211_ATTR_VHT_OPMODE]); + } + if (info->attrs[NL80211_ATTR_STA_PLINK_ACTION]) { params.plink_action = nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_ACTION]);