diff mbox

cfg80211: Add mesh peer AID setting API

Message ID 1467277258-2331-1-git-send-email-masashi.honma@gmail.com (mailing list archive)
State Changes Requested
Delegated to: Johannes Berg
Headers show

Commit Message

Masashi Honma June 30, 2016, 9 a.m. UTC
Previously, mesh peer AID is not reported to kernel when local mesh
STA is created without iw command. The mesh peer AID is needed by
mesh peer power management functionality to identify a AID in a TIM
element.

This patch creates mesh peer AID setting API.

Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
---
 include/net/cfg80211.h       | 1 +
 include/uapi/linux/nl80211.h | 5 +++++
 net/mac80211/cfg.c           | 1 +
 net/wireless/nl80211.c       | 3 +++
 4 files changed, 10 insertions(+)

Comments

kernel test robot June 30, 2016, 10:03 a.m. UTC | #1
Hi,

[auto build test WARNING on mac80211-next/master]
[also build test WARNING on next-20160629]
[cannot apply to v4.7-rc5]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Masashi-Honma/cfg80211-Add-mesh-peer-AID-setting-API/20160630-171005
base:   https://git.kernel.org/pub/scm/linux/kernel/git/jberg/mac80211-next.git master
reproduce: make htmldocs

All warnings (new ones prefixed by >>):

>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'
>> include/net/cfg80211.h:827: warning: No description found for parameter 'mesh_aid'

vim +/mesh_aid +827 include/net/cfg80211.h

9c3990aa Javier Cardona   2011-05-03  811  	u8 plink_state;
2c1aabf3 Johannes Berg    2013-02-14  812  	const struct ieee80211_ht_cap *ht_capa;
2c1aabf3 Johannes Berg    2013-02-14  813  	const struct ieee80211_vht_cap *vht_capa;
c75786c9 Eliad Peller     2011-08-23  814  	u8 uapsd_queues;
c75786c9 Eliad Peller     2011-08-23  815  	u8 max_sp;
3b1c5a53 Marco Porsch     2013-01-07  816  	enum nl80211_mesh_power_mode local_pm;
9d62a986 Jouni Malinen    2013-02-14  817  	u16 capability;
2c1aabf3 Johannes Berg    2013-02-14  818  	const u8 *ext_capab;
9d62a986 Jouni Malinen    2013-02-14  819  	u8 ext_capab_len;
c01fc9ad Sunil Dutt       2013-10-09  820  	const u8 *supported_channels;
c01fc9ad Sunil Dutt       2013-10-09  821  	u8 supported_channels_len;
c01fc9ad Sunil Dutt       2013-10-09  822  	const u8 *supported_oper_classes;
c01fc9ad Sunil Dutt       2013-10-09  823  	u8 supported_oper_classes_len;
60f4a7b1 Marek Kwaczynski 2013-12-03  824  	u8 opmode_notif;
60f4a7b1 Marek Kwaczynski 2013-12-03  825  	bool opmode_notif_used;
17b94247 Ayala Beker      2016-03-17  826  	int support_p2p_ps;
5727ef1b Johannes Berg    2007-12-19 @827  };
5727ef1b Johannes Berg    2007-12-19  828  
fd5b74dc Johannes Berg    2007-12-19  829  /**
89c771e5 Jouni Malinen    2014-10-10  830   * struct station_del_parameters - station deletion parameters
89c771e5 Jouni Malinen    2014-10-10  831   *
89c771e5 Jouni Malinen    2014-10-10  832   * Used to delete a station entry (or all stations).
89c771e5 Jouni Malinen    2014-10-10  833   *
89c771e5 Jouni Malinen    2014-10-10  834   * @mac: MAC address of the station to remove or NULL to remove all stations
98856866 Jouni Malinen    2014-10-20  835   * @subtype: Management frame subtype to use for indicating removal

:::::: The code at line 827 was first introduced by commit
:::::: 5727ef1b2e797a1922f5bc239b6afb2b4cfb80bc cfg80211/nl80211: station handling

:::::: TO: Johannes Berg <johannes@sipsolutions.net>
:::::: CC: David S. Miller <davem@davemloft.net>

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation
Bob Copeland June 30, 2016, 11:11 a.m. UTC | #2
On Thu, Jun 30, 2016 at 06:00:58PM +0900, Masashi Honma wrote:
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index 7bbb00d..2fa5896 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -805,6 +805,7 @@ struct station_parameters {
>  	u32 sta_modify_mask;
>  	int listen_interval;
>  	u16 aid;
> +	u16 mesh_aid;

Let's call it peer_aid or mesh_peer_aid or something like that, per my
email on hostapd list.  Also you probably saw kbuild robot pointed out
missing documentation for the field.

> diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
> index c503e96..f41fb61 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -4410,6 +4410,9 @@ static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
>  			nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_STATE]);
>  		if (params.plink_state >= NUM_NL80211_PLINK_STATES)
>  			return -EINVAL;
> +		if (info->attrs[NL80211_ATTR_MESH_PEER_AID])
> +			params.mesh_aid = nla_get_u16(
> +				info->attrs[NL80211_ATTR_MESH_PEER_AID]);

We need a check against IEEE80211_MAX_AID somewhere.
Masashi Honma June 30, 2016, 12:01 p.m. UTC | #3
On 2016年06月30日 20:11, Bob Copeland wrote:
> Let's call it peer_aid or mesh_peer_aid or something like that, per my
> email on hostapd list.  Also you probably saw kbuild robot pointed out
> missing documentation for the field.
Yes. I will modify this also.

> We need a check against IEEE80211_MAX_AID somewhere.
Sure. I will add a check.

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

Patch

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 7bbb00d..2fa5896 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -805,6 +805,7 @@  struct station_parameters {
 	u32 sta_modify_mask;
 	int listen_interval;
 	u16 aid;
+	u16 mesh_aid;
 	u8 supported_rates_len;
 	u8 plink_action;
 	u8 plink_state;
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 53c8278..f8c454e 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -1829,6 +1829,9 @@  enum nl80211_commands {
  *	%NL80211_ATTR_EXT_CAPA_MASK, to specify the extended capabilities per
  *	interface type.
  *
+ * @NL80211_ATTR_MESH_PEER_AID: Association ID for the mesh peer (u16). This is
+ *	used to pull the stored data for mesh peer in power save state.
+ *
  * @NUM_NL80211_ATTR: total number of nl80211_attrs available
  * @NL80211_ATTR_MAX: highest attribute number currently defined
  * @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2213,6 +2216,8 @@  enum nl80211_attrs {
 
 	NL80211_ATTR_IFTYPE_EXT_CAPA,
 
+	NL80211_ATTR_MESH_PEER_AID,
+
 	/* add attributes here, update the policy in nl80211.c */
 
 	__NL80211_ATTR_AFTER_LAST,
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 0c12e40..08802f7 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -997,6 +997,7 @@  static void sta_apply_mesh_params(struct ieee80211_local *local,
 			if (sta->mesh->plink_state != NL80211_PLINK_ESTAB)
 				changed = mesh_plink_inc_estab_count(sdata);
 			sta->mesh->plink_state = params->plink_state;
+			sta->mesh->aid = params->mesh_aid;
 
 			ieee80211_mps_sta_status_update(sta);
 			changed |= ieee80211_mps_set_sta_local_pm(sta,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index c503e96..f41fb61 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4410,6 +4410,9 @@  static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
 			nla_get_u8(info->attrs[NL80211_ATTR_STA_PLINK_STATE]);
 		if (params.plink_state >= NUM_NL80211_PLINK_STATES)
 			return -EINVAL;
+		if (info->attrs[NL80211_ATTR_MESH_PEER_AID])
+			params.mesh_aid = nla_get_u16(
+				info->attrs[NL80211_ATTR_MESH_PEER_AID]);
 		params.sta_modify_mask |= STATION_PARAM_APPLY_PLINK_STATE;
 	}