* [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
@ 2016-07-13 11:45 Yaniv Machani
2016-07-13 12:33 ` Sergei Shtylyov
2016-07-18 13:38 ` Bob Copeland
0 siblings, 2 replies; 5+ messages in thread
From: Yaniv Machani @ 2016-07-13 11:45 UTC (permalink / raw)
To: linux-kernel
Cc: Yaniv Machani, Meirav Kama, Johannes Berg, David S. Miller,
linux-wireless, netdev
The HT capab info field inside the HT capab IE of the mesh beacon
is incorrect (in the case of 20MHz channel width).
To fix this driver will check configuration from cfg and
will build it accordingly.
Signed-off-by: Meirav Kama <meiravk@ti.com>
Signed-off-by: Yaniv Machani <yanivma@ti.com>
---
V3 - Updated comment
- Removed CFG changes, as they are not correct.
net/mac80211/mesh.c | 33 ++++++++++++++++++++++++++++++++-
net/mac80211/util.c | 3 ---
2 files changed, 32 insertions(+), 4 deletions(-)
diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
index 9214bc1..275131d 100644
--- a/net/mac80211/mesh.c
+++ b/net/mac80211/mesh.c
@@ -422,6 +422,8 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
enum nl80211_band band = ieee80211_get_sdata_band(sdata);
struct ieee80211_supported_band *sband;
u8 *pos;
+ u16 cap;
+
sband = local->hw.wiphy->bands[band];
if (!sband->ht_cap.ht_supported ||
@@ -430,11 +432,40 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10)
return 0;
+ /* determine capability flags */
+ cap = sband->ht_cap.cap;
+
+ /* if channel width is 20MHz - configure HT capab accordingly*/
+ if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) {
+ cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
+ cap &= ~IEEE80211_HT_CAP_DSSSCCK40;
+ }
+
+ /* set SM PS mode properly */
+ cap &= ~IEEE80211_HT_CAP_SM_PS;
+ switch (sdata->smps_mode) {
+ case IEEE80211_SMPS_AUTOMATIC:
+ case IEEE80211_SMPS_NUM_MODES:
+ WARN_ON(1);
+ case IEEE80211_SMPS_OFF:
+ cap |= WLAN_HT_CAP_SM_PS_DISABLED <<
+ IEEE80211_HT_CAP_SM_PS_SHIFT;
+ break;
+ case IEEE80211_SMPS_STATIC:
+ cap |= WLAN_HT_CAP_SM_PS_STATIC <<
+ IEEE80211_HT_CAP_SM_PS_SHIFT;
+ break;
+ case IEEE80211_SMPS_DYNAMIC:
+ cap |= WLAN_HT_CAP_SM_PS_DYNAMIC <<
+ IEEE80211_HT_CAP_SM_PS_SHIFT;
+ break;
+ }
+
if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap))
return -ENOMEM;
pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap));
- ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, sband->ht_cap.cap);
+ ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, cap);
return 0;
}
diff --git a/net/mac80211/util.c b/net/mac80211/util.c
index 42bf0b6..5375a82 100644
--- a/net/mac80211/util.c
+++ b/net/mac80211/util.c
@@ -2349,10 +2349,7 @@ u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
ht_oper->operation_mode = cpu_to_le16(prot_mode);
ht_oper->stbc_param = 0x0000;
- /* It seems that Basic MCS set and Supported MCS set
- are identical for the first 10 bytes */
memset(&ht_oper->basic_set, 0, 16);
- memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
return pos + sizeof(struct ieee80211_ht_operation);
}
--
2.9.0
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
2016-07-13 11:45 [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template Yaniv Machani
@ 2016-07-13 12:33 ` Sergei Shtylyov
2016-07-18 13:38 ` Bob Copeland
1 sibling, 0 replies; 5+ messages in thread
From: Sergei Shtylyov @ 2016-07-13 12:33 UTC (permalink / raw)
To: Yaniv Machani, linux-kernel
Cc: Meirav Kama, Johannes Berg, David S. Miller, linux-wireless,
netdev
Hello.
On 7/13/2016 2:45 PM, Yaniv Machani wrote:
> The HT capab info field inside the HT capab IE of the mesh beacon
> is incorrect (in the case of 20MHz channel width).
> To fix this driver will check configuration from cfg and
> will build it accordingly.
>
> Signed-off-by: Meirav Kama <meiravk@ti.com>
> Signed-off-by: Yaniv Machani <yanivma@ti.com>
> ---
> V3 - Updated comment
> - Removed CFG changes, as they are not correct.
>
> net/mac80211/mesh.c | 33 ++++++++++++++++++++++++++++++++-
> net/mac80211/util.c | 3 ---
> 2 files changed, 32 insertions(+), 4 deletions(-)
>
> diff --git a/net/mac80211/mesh.c b/net/mac80211/mesh.c
> index 9214bc1..275131d 100644
> --- a/net/mac80211/mesh.c
> +++ b/net/mac80211/mesh.c
> @@ -422,6 +422,8 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
> enum nl80211_band band = ieee80211_get_sdata_band(sdata);
> struct ieee80211_supported_band *sband;
> u8 *pos;
> + u16 cap;
> +
Why add more empty lines where you already one?
>
> sband = local->hw.wiphy->bands[band];
> if (!sband->ht_cap.ht_supported ||
> @@ -430,11 +432,40 @@ int mesh_add_ht_cap_ie(struct ieee80211_sub_if_data *sdata,
> sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_10)
> return 0;
>
> + /* determine capability flags */
Please use tab, not spaces.
> + cap = sband->ht_cap.cap;
> +
> + /* if channel width is 20MHz - configure HT capab accordingly*/
Likewise.
> + if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) {
> + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
> + cap &= ~IEEE80211_HT_CAP_DSSSCCK40;
> + }
> +
> + /* set SM PS mode properly */
> + cap &= ~IEEE80211_HT_CAP_SM_PS;
> + switch (sdata->smps_mode) {
> + case IEEE80211_SMPS_AUTOMATIC:
> + case IEEE80211_SMPS_NUM_MODES:
> + WARN_ON(1);
No *break*? You need a comment like /* FALL THRU */ then...
> + case IEEE80211_SMPS_OFF:
> + cap |= WLAN_HT_CAP_SM_PS_DISABLED <<
> + IEEE80211_HT_CAP_SM_PS_SHIFT;
> + break;
> + case IEEE80211_SMPS_STATIC:
> + cap |= WLAN_HT_CAP_SM_PS_STATIC <<
> + IEEE80211_HT_CAP_SM_PS_SHIFT;
> + break;
> + case IEEE80211_SMPS_DYNAMIC:
> + cap |= WLAN_HT_CAP_SM_PS_DYNAMIC <<
> + IEEE80211_HT_CAP_SM_PS_SHIFT;
> + break;
> + }
> +
> if (skb_tailroom(skb) < 2 + sizeof(struct ieee80211_ht_cap))
> return -ENOMEM;
>
> pos = skb_put(skb, 2 + sizeof(struct ieee80211_ht_cap));
> - ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, sband->ht_cap.cap);
> + ieee80211_ie_build_ht_cap(pos, &sband->ht_cap, cap);
>
> return 0;
> }
[...]
MBR, Sergei
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
2016-07-13 11:45 [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template Yaniv Machani
2016-07-13 12:33 ` Sergei Shtylyov
@ 2016-07-18 13:38 ` Bob Copeland
2016-07-18 18:52 ` Johannes Berg
1 sibling, 1 reply; 5+ messages in thread
From: Bob Copeland @ 2016-07-18 13:38 UTC (permalink / raw)
To: Yaniv Machani
Cc: linux-kernel, Meirav Kama, Johannes Berg, David S. Miller,
linux-wireless, netdev
On Wed, Jul 13, 2016 at 02:45:40PM +0300, Yaniv Machani wrote:
> The HT capab info field inside the HT capab IE of the mesh beacon
> is incorrect (in the case of 20MHz channel width).
> To fix this driver will check configuration from cfg and
> will build it accordingly.
> + /* determine capability flags */
> + cap = sband->ht_cap.cap;
> +
> + /* if channel width is 20MHz - configure HT capab accordingly*/
> + if (sdata->vif.bss_conf.chandef.width == NL80211_CHAN_WIDTH_20) {
> + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
> + cap &= ~IEEE80211_HT_CAP_DSSSCCK40;
> + }
Is it required that HT capability match the HT operation in this case?
> diff --git a/net/mac80211/util.c b/net/mac80211/util.c
> index 42bf0b6..5375a82 100644
> --- a/net/mac80211/util.c
> +++ b/net/mac80211/util.c
> @@ -2349,10 +2349,7 @@ u8 *ieee80211_ie_build_ht_oper(u8 *pos, struct ieee80211_sta_ht_cap *ht_cap,
> ht_oper->operation_mode = cpu_to_le16(prot_mode);
> ht_oper->stbc_param = 0x0000;
>
> - /* It seems that Basic MCS set and Supported MCS set
> - are identical for the first 10 bytes */
> memset(&ht_oper->basic_set, 0, 16);
> - memcpy(&ht_oper->basic_set, &ht_cap->mcs, 10);
This change doesn't look right (basic mcs set will be all zeroes) but
then, neither does the original code. Basic MCS set for a mesh STA should
be the mandatory MCSes according to 9.7.4.
--
Bob Copeland %% http://bobcopeland.com/
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
2016-07-18 13:38 ` Bob Copeland
@ 2016-07-18 18:52 ` Johannes Berg
2016-07-19 13:17 ` Machani, Yaniv
0 siblings, 1 reply; 5+ messages in thread
From: Johannes Berg @ 2016-07-18 18:52 UTC (permalink / raw)
To: Bob Copeland, Yaniv Machani
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA, Meirav Kama, David S. Miller,
linux-wireless-u79uwXL29TY76Z2rM5mHXA,
netdev-u79uwXL29TY76Z2rM5mHXA
On Mon, 2016-07-18 at 09:38 -0400, Bob Copeland wrote:
> On Wed, Jul 13, 2016 at 02:45:40PM +0300, Yaniv Machani wrote:
> > The HT capab info field inside the HT capab IE of the mesh beacon
> > is incorrect (in the case of 20MHz channel width).
> > To fix this driver will check configuration from cfg and
> > will build it accordingly.
>
> > + /* determine capability flags */
> > + cap = sband->ht_cap.cap;
> > +
> > + /* if channel width is 20MHz - configure HT capab
> > accordingly*/
> > + if (sdata->vif.bss_conf.chandef.width ==
> > NL80211_CHAN_WIDTH_20) {
> > + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
> > + cap &= ~IEEE80211_HT_CAP_DSSSCCK40;
> > + }
>
> Is it required that HT capability match the HT operation in this
> case?
>
Is there ever a case that HT *capability* should be restricted
artificially like that? I can't remember any cases - we do something
like that to work around broken APs in some cases, but here?
johannes
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 5+ messages in thread
* RE: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template
2016-07-18 18:52 ` Johannes Berg
@ 2016-07-19 13:17 ` Machani, Yaniv
0 siblings, 0 replies; 5+ messages in thread
From: Machani, Yaniv @ 2016-07-19 13:17 UTC (permalink / raw)
To: Johannes Berg, Bob Copeland
Cc: linux-kernel@vger.kernel.org, Kama, Meirav, David S. Miller,
linux-wireless@vger.kernel.org, netdev@vger.kernel.org
On Mon, Jul 18, 2016 at 21:52:22, Johannes Berg wrote:
> linux- wireless@vger.kernel.org; netdev@vger.kernel.org
> Subject: Re: [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon
> template
>
> On Mon, 2016-07-18 at 09:38 -0400, Bob Copeland wrote:
> > On Wed, Jul 13, 2016 at 02:45:40PM +0300, Yaniv Machani wrote:
> > > The HT capab info field inside the HT capab IE of the mesh beacon
> > > is incorrect (in the case of 20MHz channel width).
> > > To fix this driver will check configuration from cfg and will
> > > build it accordingly.
> >
> > > + /* determine capability flags */
> > > + cap = sband->ht_cap.cap;
> > > +
> > > + /* if channel width is 20MHz - configure HT capab
> > > accordingly*/
> > > + if (sdata->vif.bss_conf.chandef.width ==
> > > NL80211_CHAN_WIDTH_20) {
> > > + cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
> > > + cap &= ~IEEE80211_HT_CAP_DSSSCCK40;
> > > + }
> >
> > Is it required that HT capability match the HT operation in this case?
> >
>
> Is there ever a case that HT *capability* should be restricted
> artificially like that? I can't remember any cases - we do something
> like that to work around broken APs in some cases, but here?
>
It was done to overcome another mismatch with the defaults of the hostap configuration,
We'll have another look on it.
There is an IOP question here, how to handle a case where you have mixed capabilities of peers.
is it possible to dynamically change the channel bandwidth to allow new peers to join ?
Yaniv
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-07-19 13:17 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-13 11:45 [PATCH 3/3] mac80211: mesh: fixed HT ies in beacon template Yaniv Machani
2016-07-13 12:33 ` Sergei Shtylyov
2016-07-18 13:38 ` Bob Copeland
2016-07-18 18:52 ` Johannes Berg
2016-07-19 13:17 ` Machani, Yaniv
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).