2021-08-11 05:47:02

by Muna Sinada

[permalink] [raw]
Subject: [PATCH v2] cfg80211: Handle driver updated MU-EDCA params

Add necessary functions and attributes to receive updated MU-EDCA
parameters from driver and send to user space, where management
frame are updated to reflect latest parameters.

Signed-off-by: Muna Sinada <[email protected]>
---
include/net/cfg80211.h | 12 ++++++++++++
include/uapi/linux/nl80211.h | 13 +++++++++++++
net/wireless/nl80211.c | 36 ++++++++++++++++++++++++++++++++++++
3 files changed, 61 insertions(+)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 161cdf7df1a0..52770f108131 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -8218,4 +8218,16 @@ void cfg80211_update_owe_info_event(struct net_device *netdev,
*/
void cfg80211_bss_flush(struct wiphy *wiphy);

+/**
+ * cfg80211_update_muedca_params_event - Notify userspace about updated
+ * MU-EDCA parameters
+ *
+ * @wiphy: the wiphy
+ * @params: Updated MU-EDCA parameters
+ * @gfp: allocation flags
+ */
+void cfg80211_update_muedca_params_event(struct wiphy *wiphy,
+ struct ieee80211_mu_edca_param_set
+ *params, gfp_t gfp);
+
#endif /* __NET_CFG80211_H */
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index db474994fa73..c2d01881c324 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -1185,6 +1185,11 @@
* passed using %NL80211_ATTR_SAR_SPEC. %NL80211_ATTR_WIPHY is used to
* specify the wiphy index to be applied to.
*
+ * @NL80211_CMD_UPDATE_HE_MUEDCA_PARAMS: Updated MU-EDCA parameters from
+ * driver. This event is used to update dynamic MU-EDCA parameters in
+ * management frames, coming from driver and now need to be reflected in
+ * management frames.
+ *
* @NL80211_CMD_MAX: highest used command number
* @__NL80211_CMD_AFTER_LAST: internal use
*/
@@ -1417,6 +1422,8 @@ enum nl80211_commands {

NL80211_CMD_SET_SAR_SPECS,

+ NL80211_CMD_UPDATE_HE_MUEDCA_PARAMS,
+
/* add new commands above here */

/* used to define NL80211_CMD_MAX below */
@@ -2560,6 +2567,10 @@ enum nl80211_commands {
* disassoc events to indicate that an immediate reconnect to the AP
* is desired.
*
+ * @NL80211_ATTR_HE_MUEDCA_PARAMS: MU-EDCA AC parameters for the
+ * %NL80211_CMD_UPDATE_HE_MUEDCA_PARAMS command in format described in
+ * P802.11ax_D4.0 section 9.4.2.245
+ *
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
@@ -3057,6 +3068,8 @@ enum nl80211_attrs {

NL80211_ATTR_DISABLE_HE,

+ NL80211_ATTR_HE_MUEDCA_PARAMS,
+
/* 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 50eb405b0690..9abe66cef566 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -18093,6 +18093,42 @@ void cfg80211_update_owe_info_event(struct net_device *netdev,
}
EXPORT_SYMBOL(cfg80211_update_owe_info_event);

+void cfg80211_update_muedca_params_event(struct wiphy *wiphy,
+ struct ieee80211_mu_edca_param_set
+ *params, gfp_t gfp)
+{
+ struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
+ struct sk_buff *msg;
+ void *hdr;
+
+ msg = nlmsg_new(NLMSG_DEFAULT_SIZE, gfp);
+ if (!msg)
+ return;
+
+ hdr = nl80211hdr_put(msg, 0, 0, 0, NL80211_CMD_UPDATE_HE_MUEDCA_PARAMS);
+ if (!hdr)
+ goto nla_put_failure;
+
+ if (nla_put_u32(msg, NL80211_ATTR_WIPHY, rdev->wiphy_idx))
+ goto nla_put_failure;
+
+ if (nla_put(msg, NL80211_ATTR_HE_MUEDCA_PARAMS,
+ sizeof(struct ieee80211_mu_edca_param_set),
+ (const void *)params))
+ goto nla_put_failure;
+
+ genlmsg_end(msg, hdr);
+
+ genlmsg_multicast_netns(&nl80211_fam, wiphy_net(&rdev->wiphy), msg, 0,
+ NL80211_MCGRP_MLME, gfp);
+ return;
+
+nla_put_failure:
+ genlmsg_cancel(msg, hdr);
+ nlmsg_free(msg);
+}
+EXPORT_SYMBOL(cfg80211_update_muedca_params_event);
+
/* initialisation/exit functions */

int __init nl80211_init(void)
--
2.7.4


2021-08-17 13:54:50

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH v2] cfg80211: Handle driver updated MU-EDCA params

On Tue, 2021-08-10 at 22:45 -0700, Muna Sinada wrote:
> Add necessary functions and attributes to receive updated MU-EDCA
> parameters from driver and send to user space, where management
> frame are updated to reflect latest parameters.
>

On second thought - this really could use some more explanation?

Why are MU-EDCA parameters determined by the driver? What does this
actually do? Is it meant for AP mode, or client mode? Any spec
references?

Mac80211 parses this coming from the AP, so probably this is meant for
AP mode, but why? Why wouldn't hostapd determine the correct parameters?

etc.

johannes

2021-08-26 23:19:37

by Muna Sinada

[permalink] [raw]
Subject: RE: [PATCH v2] cfg80211: Handle driver updated MU-EDCA params

Hello Johannes,

The firmware algorithm determines better MU-EDCA parameters based on channel conditions. The updated parameters are used and reported to Hostapd to reflect in AP beacons. These dynamic parameter updates are offloaded to firmware for better user experience, and this would also mean that there are hardly any details on specifically how these parameters are determined but we know that the updated parameters need to be reflected in future beacons. This feature is meant for AP mode, and it is a ath11k feature, thus no spec references.

Thank you,
Muna

-----Original Message-----
From: Johannes Berg <[email protected]>
Sent: Tuesday, August 17, 2021 6:54 AM
To: Muna Sinada <[email protected]>
Cc: [email protected]
Subject: Re: [PATCH v2] cfg80211: Handle driver updated MU-EDCA params

On Tue, 2021-08-10 at 22:45 -0700, Muna Sinada wrote:
> Add necessary functions and attributes to receive updated MU-EDCA
> parameters from driver and send to user space, where management frame
> are updated to reflect latest parameters.
>

On second thought - this really could use some more explanation?

Why are MU-EDCA parameters determined by the driver? What does this actually do? Is it meant for AP mode, or client mode? Any spec references?

Mac80211 parses this coming from the AP, so probably this is meant for AP mode, but why? Why wouldn't hostapd determine the correct parameters?

etc.

johannes