* [RFC 1/2] nl80211: Add support to configure low ack threshold
@ 2015-03-03 12:23 Rajkumar Manoharan
2015-03-03 12:23 ` [RFC 2/2] mac80211: store low ack threshold in bss config Rajkumar Manoharan
2015-03-04 8:14 ` [RFC 1/2] nl80211: Add support to configure low ack threshold Johannes Berg
0 siblings, 2 replies; 4+ messages in thread
From: Rajkumar Manoharan @ 2015-03-03 12:23 UTC (permalink / raw)
To: johannes; +Cc: linville, linux-wireless, Rajkumar Manoharan
Add a new nl80211 attribute to configure low ack threshold (number of
consecutive frames) not being acked by station. This threshold is used
to kickout station by driver through low ack event. This allows user to
tune the parameter to improve robustness under noisy environment.
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
---
include/net/cfg80211.h | 3 +++
include/uapi/linux/nl80211.h | 8 +++++++-
net/wireless/nl80211.c | 6 ++++++
3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 64e09e1..29edb79 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -678,6 +678,8 @@ struct cfg80211_acl_data {
* @p2p_opp_ps: P2P opportunistic PS
* @acl: ACL configuration used by the drivers which has support for
* MAC address based access control
+ * @low_ack_threshold: number of consecutive frames not being ACKed by
+ * station, used to trigger low_ack event.
*/
struct cfg80211_ap_settings {
struct cfg80211_chan_def chandef;
@@ -696,6 +698,7 @@ struct cfg80211_ap_settings {
u8 p2p_ctwindow;
bool p2p_opp_ps;
const struct cfg80211_acl_data *acl;
+ int low_ack_threshold;
};
/**
diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 68b294e..40df4b1 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -219,7 +219,8 @@
* %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
* %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
* %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
- * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
+ * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS
+ * %NL80211_ATTR_LOW_ACK_THRESH.
* The channel to use can be set on the interface or be given using the
* %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width.
* @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
@@ -1740,6 +1741,9 @@ enum nl80211_commands {
* @NL80211_ATTR_SCHED_SCAN_DELAY: delay before a scheduled scan (or a
* WoWLAN net-detect scan) is started, u32 in seconds.
*
+ * @NL80211_ATTR_LOW_ACK_THRESH: number of consecutive frames that are not ACKed
+ * by station. This threshold is used to generate low ack event by driver.
+ *
* @NUM_NL80211_ATTR: total number of nl80211_attrs available
* @NL80211_ATTR_MAX: highest attribute number currently defined
* @__NL80211_ATTR_AFTER_LAST: internal use
@@ -2107,6 +2111,8 @@ enum nl80211_attrs {
NL80211_ATTR_SCHED_SCAN_DELAY,
+ NL80211_ATTR_LOW_ACK_THRESH,
+
/* 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 e9ad9d9..80a90c7 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -399,6 +399,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
[NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG },
[NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 },
[NL80211_ATTR_SCHED_SCAN_DELAY] = { .type = NLA_U32 },
+ [NL80211_ATTR_LOW_ACK_THRESH] = { .type = NLA_U16 },
};
/* policy for the key attributes */
@@ -3434,6 +3435,11 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
params.smps_mode = NL80211_SMPS_OFF;
}
+ if (info->attrs[NL80211_ATTR_LOW_ACK_THRESH]) {
+ params.low_ack_threshold = nla_get_u16(
+ info->attrs[NL80211_ATTR_LOW_ACK_THRESH]);
+ }
+
wdev_lock(wdev);
err = rdev_start_ap(rdev, dev, ¶ms);
if (!err) {
--
2.3.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [RFC 2/2] mac80211: store low ack threshold in bss config
2015-03-03 12:23 [RFC 1/2] nl80211: Add support to configure low ack threshold Rajkumar Manoharan
@ 2015-03-03 12:23 ` Rajkumar Manoharan
2015-03-04 8:15 ` Johannes Berg
2015-03-04 8:14 ` [RFC 1/2] nl80211: Add support to configure low ack threshold Johannes Berg
1 sibling, 1 reply; 4+ messages in thread
From: Rajkumar Manoharan @ 2015-03-03 12:23 UTC (permalink / raw)
To: johannes; +Cc: linville, linux-wireless, Rajkumar Manoharan
Store the low ack threshold configured by user in BSS config.
This will be used by driver for triggering low ack event whenever
the station is not ACKing the number of frames mentioned in
threshold.
Signed-off-by: Rajkumar Manoharan <rmanohar@qti.qualcomm.com>
---
include/net/mac80211.h | 3 +++
net/mac80211/cfg.c | 1 +
2 files changed, 4 insertions(+)
diff --git a/include/net/mac80211.h b/include/net/mac80211.h
index d52914b..ec769dd 100644
--- a/include/net/mac80211.h
+++ b/include/net/mac80211.h
@@ -383,6 +383,8 @@ enum ieee80211_rssi_event {
* userspace), whereas TPC is disabled if %txpower_type is set to
* NL80211_TX_POWER_FIXED (use value configured from userspace)
* @p2p_noa_attr: P2P NoA attribute for P2P powersave
+ * @low_ack_threshold: Number of consecutive packet loss to trigger low ack
+ * event by driver.
*/
struct ieee80211_bss_conf {
const u8 *bssid;
@@ -419,6 +421,7 @@ struct ieee80211_bss_conf {
int txpower;
enum nl80211_tx_power_setting txpower_type;
struct ieee80211_p2p_noa_attr p2p_noa_attr;
+ int low_ack_threshold;
};
/**
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index dd4ff36..514d3ab 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -772,6 +772,7 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev,
sdata->vif.bss_conf.beacon_int = params->beacon_interval;
sdata->vif.bss_conf.dtim_period = params->dtim_period;
sdata->vif.bss_conf.enable_beacon = true;
+ sdata->vif.bss_conf.low_ack_threshold = params->low_ack_threshold;
sdata->vif.bss_conf.ssid_len = params->ssid_len;
if (params->ssid_len)
--
2.3.1
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [RFC 1/2] nl80211: Add support to configure low ack threshold
2015-03-03 12:23 [RFC 1/2] nl80211: Add support to configure low ack threshold Rajkumar Manoharan
2015-03-03 12:23 ` [RFC 2/2] mac80211: store low ack threshold in bss config Rajkumar Manoharan
@ 2015-03-04 8:14 ` Johannes Berg
1 sibling, 0 replies; 4+ messages in thread
From: Johannes Berg @ 2015-03-04 8:14 UTC (permalink / raw)
To: Rajkumar Manoharan; +Cc: linville, linux-wireless
On Tue, 2015-03-03 at 17:53 +0530, Rajkumar Manoharan wrote:
> @@ -696,6 +698,7 @@ struct cfg80211_ap_settings {
> u8 p2p_ctwindow;
> bool p2p_opp_ps;
> const struct cfg80211_acl_data *acl;
> + int low_ack_threshold;
should probably be unsigned?
> };
>
> /**
> diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
> index 68b294e..40df4b1 100644
> --- a/include/uapi/linux/nl80211.h
> +++ b/include/uapi/linux/nl80211.h
> @@ -219,7 +219,8 @@
> * %NL80211_ATTR_CIPHER_GROUP, %NL80211_ATTR_WPA_VERSIONS,
> * %NL80211_ATTR_AKM_SUITES, %NL80211_ATTR_PRIVACY,
> * %NL80211_ATTR_AUTH_TYPE, %NL80211_ATTR_INACTIVITY_TIMEOUT,
> - * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS.
> + * %NL80211_ATTR_ACL_POLICY and %NL80211_ATTR_MAC_ADDRS
> + * %NL80211_ATTR_LOW_ACK_THRESH.
> * The channel to use can be set on the interface or be given using the
> * %NL80211_ATTR_WIPHY_FREQ and the attributes determining channel width.
> * @NL80211_CMD_NEW_BEACON: old alias for %NL80211_CMD_START_AP
> @@ -1740,6 +1741,9 @@ enum nl80211_commands {
> * @NL80211_ATTR_SCHED_SCAN_DELAY: delay before a scheduled scan (or a
> * WoWLAN net-detect scan) is started, u32 in seconds.
> *
> + * @NL80211_ATTR_LOW_ACK_THRESH: number of consecutive frames that are not ACKed
> + * by station. This threshold is used to generate low ack event by driver.
> + *
> * @NUM_NL80211_ATTR: total number of nl80211_attrs available
> * @NL80211_ATTR_MAX: highest attribute number currently defined
> * @__NL80211_ATTR_AFTER_LAST: internal use
> @@ -2107,6 +2111,8 @@ enum nl80211_attrs {
>
> NL80211_ATTR_SCHED_SCAN_DELAY,
>
> + NL80211_ATTR_LOW_ACK_THRESH,
> +
> /* 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 e9ad9d9..80a90c7 100644
> --- a/net/wireless/nl80211.c
> +++ b/net/wireless/nl80211.c
> @@ -399,6 +399,7 @@ static const struct nla_policy nl80211_policy[NUM_NL80211_ATTR] = {
> [NL80211_ATTR_WIPHY_SELF_MANAGED_REG] = { .type = NLA_FLAG },
> [NL80211_ATTR_NETNS_FD] = { .type = NLA_U32 },
> [NL80211_ATTR_SCHED_SCAN_DELAY] = { .type = NLA_U32 },
> + [NL80211_ATTR_LOW_ACK_THRESH] = { .type = NLA_U16 },
> };
>
> /* policy for the key attributes */
> @@ -3434,6 +3435,11 @@ static int nl80211_start_ap(struct sk_buff *skb, struct genl_info *info)
> params.smps_mode = NL80211_SMPS_OFF;
> }
>
> + if (info->attrs[NL80211_ATTR_LOW_ACK_THRESH]) {
> + params.low_ack_threshold = nla_get_u16(
> + info->attrs[NL80211_ATTR_LOW_ACK_THRESH]);
> + }
I think you should provide a sane default value if userspace doesn't
request anything. Also - braces aren't needed here.
johannes
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [RFC 2/2] mac80211: store low ack threshold in bss config
2015-03-03 12:23 ` [RFC 2/2] mac80211: store low ack threshold in bss config Rajkumar Manoharan
@ 2015-03-04 8:15 ` Johannes Berg
0 siblings, 0 replies; 4+ messages in thread
From: Johannes Berg @ 2015-03-04 8:15 UTC (permalink / raw)
To: Rajkumar Manoharan; +Cc: linville, linux-wireless
On Tue, 2015-03-03 at 17:53 +0530, Rajkumar Manoharan wrote:
> Store the low ack threshold configured by user in BSS config.
> This will be used by driver for triggering low ack event whenever
> the station is not ACKing the number of frames mentioned in
> threshold.
Err, this cannot possibly be sufficient. mac80211 already *has* this
functionality built into it, so you need to tie the two together, and if
you need to offload it to the device then you need to also bypass the
mac80211 implementation.
johannes
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2015-03-04 8:15 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-03-03 12:23 [RFC 1/2] nl80211: Add support to configure low ack threshold Rajkumar Manoharan
2015-03-03 12:23 ` [RFC 2/2] mac80211: store low ack threshold in bss config Rajkumar Manoharan
2015-03-04 8:15 ` Johannes Berg
2015-03-04 8:14 ` [RFC 1/2] nl80211: Add support to configure low ack threshold Johannes Berg
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).