All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cfg80211: Add mesh peer AID setting API
@ 2016-06-30  9:00 Masashi Honma
  2016-06-30 10:03 ` kbuild test robot
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Masashi Honma @ 2016-06-30  9:00 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, j, me, Masashi Honma

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(+)

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;
 	}
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] cfg80211: Add mesh peer AID setting API
  2016-06-30  9:00 [PATCH] cfg80211: Add mesh peer AID setting API Masashi Honma
@ 2016-06-30 10:03 ` kbuild test robot
  2016-06-30 11:11 ` Bob Copeland
  2016-07-01  1:19 ` [PATCH v2] " Masashi Honma
  2 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2016-06-30 10:03 UTC (permalink / raw)
  To: Masashi Honma; +Cc: kbuild-all, johannes, linux-wireless, j, me, Masashi Honma

[-- Attachment #1: Type: text/plain, Size: 4438 bytes --]

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

[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 6370 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] cfg80211: Add mesh peer AID setting API
  2016-06-30  9:00 [PATCH] cfg80211: Add mesh peer AID setting API Masashi Honma
  2016-06-30 10:03 ` kbuild test robot
@ 2016-06-30 11:11 ` Bob Copeland
  2016-06-30 12:01   ` Masashi Honma
  2016-07-01  1:19 ` [PATCH v2] " Masashi Honma
  2 siblings, 1 reply; 8+ messages in thread
From: Bob Copeland @ 2016-06-30 11:11 UTC (permalink / raw)
  To: Masashi Honma; +Cc: johannes, linux-wireless, j

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.

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] cfg80211: Add mesh peer AID setting API
  2016-06-30 11:11 ` Bob Copeland
@ 2016-06-30 12:01   ` Masashi Honma
  0 siblings, 0 replies; 8+ messages in thread
From: Masashi Honma @ 2016-06-30 12:01 UTC (permalink / raw)
  To: Bob Copeland; +Cc: johannes, linux-wireless, j

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.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH v2] cfg80211: Add mesh peer AID setting API
  2016-06-30  9:00 [PATCH] cfg80211: Add mesh peer AID setting API Masashi Honma
  2016-06-30 10:03 ` kbuild test robot
  2016-06-30 11:11 ` Bob Copeland
@ 2016-07-01  1:19 ` Masashi Honma
  2016-07-06 12:42   ` Johannes Berg
  2 siblings, 1 reply; 8+ messages in thread
From: Masashi Honma @ 2016-07-01  1:19 UTC (permalink / raw)
  To: johannes; +Cc: linux-wireless, j, me, Masashi Honma

Previously, mesh power management functionality works only with kernel
MPM. Because user space MPM did not report mesh peer AID to kernel,
the kernel could not identify the bit in TIM element. So this patch
adds mesh peer AID setting API.

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

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 7bbb00d..23e34ca 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -774,6 +774,7 @@ enum station_parameters_apply_mask {
  *	(bitmask of BIT(NL80211_STA_FLAG_...))
  * @listen_interval: listen interval or -1 for no change
  * @aid: AID or zero for no change
+ * @peer_aid: mesh peer AID or zero for no change
  * @plink_action: plink action to take
  * @plink_state: set the peer link state for a station
  * @ht_capa: HT capabilities of station
@@ -805,6 +806,7 @@ struct station_parameters {
 	u32 sta_modify_mask;
 	int listen_interval;
 	u16 aid;
+	u16 peer_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..47e99ab8 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->peer_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 244d552..8337349 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -4410,6 +4410,13 @@ 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]) {
+			if (nla_get_u16(info->attrs[NL80211_ATTR_MESH_PEER_AID])
+			    > IEEE80211_MAX_AID)
+				return -EINVAL;
+			params.peer_aid = nla_get_u16(
+				info->attrs[NL80211_ATTR_MESH_PEER_AID]);
+		}
 		params.sta_modify_mask |= STATION_PARAM_APPLY_PLINK_STATE;
 	}
 
-- 
2.5.0


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] cfg80211: Add mesh peer AID setting API
  2016-07-01  1:19 ` [PATCH v2] " Masashi Honma
@ 2016-07-06 12:42   ` Johannes Berg
  2016-07-06 12:58     ` Bob Copeland
  0 siblings, 1 reply; 8+ messages in thread
From: Johannes Berg @ 2016-07-06 12:42 UTC (permalink / raw)
  To: Masashi Honma; +Cc: linux-wireless, j, me

On Fri, 2016-07-01 at 10:19 +0900, Masashi Honma wrote:
> Previously, mesh power management functionality works only with
> kernel
> MPM. Because user space MPM did not report mesh peer AID to kernel,
> the kernel could not identify the bit in TIM element. So this patch
> adds mesh peer AID setting API.
> 
> Signed-off-by: Masashi Honma <masashi.honma@gmail.com>
> ---
>  include/net/cfg80211.h       | 2 ++
>  include/uapi/linux/nl80211.h | 5 +++++
>  net/mac80211/cfg.c           | 1 +
>  net/wireless/nl80211.c       | 7 +++++++
>  4 files changed, 15 insertions(+)
> 
> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
> index 7bbb00d..23e34ca 100644
> --- a/include/net/cfg80211.h
> +++ b/include/net/cfg80211.h
> @@ -774,6 +774,7 @@ enum station_parameters_apply_mask {
>   *	(bitmask of BIT(NL80211_STA_FLAG_...))
>   * @listen_interval: listen interval or -1 for no change
>   * @aid: AID or zero for no change
> + * @peer_aid: mesh peer AID or zero for no change
>   * @plink_action: plink action to take
>   * @plink_state: set the peer link state for a station
>   * @ht_capa: HT capabilities of station
> @@ -805,6 +806,7 @@ struct station_parameters {
>  	u32 sta_modify_mask;
>  	int listen_interval;
>  	u16 aid;
> +	u16 peer_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.
> 
Why does this need new API all over?

It seems to me that it could just use the regular NL80211_ATTR_STA_AID
attribute, and the cfg80211 code would already be in place, and you'd
just need to add a single line to mac80211 and
to cfg80211_check_station_change() to accept that.

johannes

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] cfg80211: Add mesh peer AID setting API
  2016-07-06 12:42   ` Johannes Berg
@ 2016-07-06 12:58     ` Bob Copeland
  2016-07-06 13:03       ` Johannes Berg
  0 siblings, 1 reply; 8+ messages in thread
From: Bob Copeland @ 2016-07-06 12:58 UTC (permalink / raw)
  To: Johannes Berg; +Cc: Masashi Honma, linux-wireless, j

On Wed, Jul 06, 2016 at 02:42:34PM +0200, Johannes Berg wrote:
> > + * @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.
> > 
> Why does this need new API all over?
> 
> It seems to me that it could just use the regular NL80211_ATTR_STA_AID
> attribute, and the cfg80211 code would already be in place, and you'd
> just need to add a single line to mac80211 and
> to cfg80211_check_station_change() to accept that.

We are already using NL80211_ATTR_STA_AID, though -- one is for the
station's AID (in our TIM, which is NL80211_ATTR_STA_AID) and the new one
is for our AID in the peer's TIM.

There is the NL80211_ATTR_PEER_AID but that seems specific to TDLS and
also doesn't appear to be processed in the necessary way (e.g. overrides
STA_AID in nl80211_new_station).

-- 
Bob Copeland %% http://bobcopeland.com/

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH v2] cfg80211: Add mesh peer AID setting API
  2016-07-06 12:58     ` Bob Copeland
@ 2016-07-06 13:03       ` Johannes Berg
  0 siblings, 0 replies; 8+ messages in thread
From: Johannes Berg @ 2016-07-06 13:03 UTC (permalink / raw)
  To: Bob Copeland; +Cc: Masashi Honma, linux-wireless, j


> > It seems to me that it could just use the
> > regular NL80211_ATTR_STA_AID
> > attribute, and the cfg80211 code would already be in place, and
> > you'd
> > just need to add a single line to mac80211 and
> > to cfg80211_check_station_change() to accept that.
> 
> We are already using NL80211_ATTR_STA_AID, though -- one is for the
> station's AID (in our TIM, which is NL80211_ATTR_STA_AID) and the new
> one
> is for our AID in the peer's TIM.
> 
> There is the NL80211_ATTR_PEER_AID but that seems specific to TDLS
> and
> also doesn't appear to be processed in the necessary way (e.g.
> overrides
> STA_AID in nl80211_new_station).

Oh, ok. Applied then.

johannes

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2016-07-06 13:03 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-06-30  9:00 [PATCH] cfg80211: Add mesh peer AID setting API Masashi Honma
2016-06-30 10:03 ` kbuild test robot
2016-06-30 11:11 ` Bob Copeland
2016-06-30 12:01   ` Masashi Honma
2016-07-01  1:19 ` [PATCH v2] " Masashi Honma
2016-07-06 12:42   ` Johannes Berg
2016-07-06 12:58     ` Bob Copeland
2016-07-06 13:03       ` Johannes Berg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.