Search Linux Wireless

Re: [PATCH 6/9] mac80211: handle width changes from opmode notification IE in beacon

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 8, 2015 at 7:34 PM, Emmanuel Grumbach
<emmanuel.grumbach@xxxxxxxxx> wrote:
>
> From: Eyal Shapira <eyal@xxxxxxxxxx>
>
> An AP can send an operating channel width change in a beacon
> opmode notification IE as long as there's a change in the nss as
> well (See 802.11ac-2013 section 10.41).
> So don't limit updating to nss only from an opmode notification IE.
>
> Signed-off-by: Eyal Shapira <eyalx.shapira@xxxxxxxxx>
> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@xxxxxxxxx>
> ---
>  net/mac80211/cfg.c         |  3 +--
>  net/mac80211/ieee80211_i.h |  4 ++--
>  net/mac80211/mlme.c        |  2 +-
>  net/mac80211/rx.c          |  3 +--
>  net/mac80211/vht.c         | 10 +++-------
>  5 files changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
> index b9e2c2f..a90d875 100644
> --- a/net/mac80211/cfg.c
> +++ b/net/mac80211/cfg.c
> @@ -1198,8 +1198,7 @@ static int sta_apply_parameters(struct ieee80211_local *local,
>                  * rc isn't initialized here yet, so ignore it
>                  */
>                 __ieee80211_vht_handle_opmode(sdata, sta,
> -                                             params->opmode_notif,
> -                                             band, false);
> +                                             params->opmode_notif, band);
>         }
>
>         if (ieee80211_vif_is_mesh(&sdata->vif))
> diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
> index 582ea86..747402d 100644
> --- a/net/mac80211/ieee80211_i.h
> +++ b/net/mac80211/ieee80211_i.h
> @@ -1718,10 +1718,10 @@ void ieee80211_process_mu_groups(struct ieee80211_sub_if_data *sdata,
>                                  struct ieee80211_mgmt *mgmt);
>  u32 __ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
>                                    struct sta_info *sta, u8 opmode,
> -                                  enum ieee80211_band band, bool nss_only);
> +                                 enum ieee80211_band band);
>  void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
>                                  struct sta_info *sta, u8 opmode,
> -                                enum ieee80211_band band, bool nss_only);
> +                                enum ieee80211_band band);
>  void ieee80211_apply_vhtcap_overrides(struct ieee80211_sub_if_data *sdata,
>                                       struct ieee80211_sta_vht_cap *vht_cap);
>  void ieee80211_get_vht_mask_from_cap(__le16 vht_cap,
> diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
> index 1e6b337..62c8e4f 100644
> --- a/net/mac80211/mlme.c
> +++ b/net/mac80211/mlme.c
> @@ -3584,7 +3584,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_sub_if_data *sdata,
>
>         if (sta && elems.opmode_notif)
>                 ieee80211_vht_handle_opmode(sdata, sta, *elems.opmode_notif,
> -                                           rx_status->band, true);
> +                                           rx_status->band);
>         mutex_unlock(&local->sta_mtx);
>
>         changed |= ieee80211_handle_pwr_constr(sdata, chan, mgmt,
> diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c
> index 901c72b..fe675d7 100644
> --- a/net/mac80211/rx.c
> +++ b/net/mac80211/rx.c
> @@ -2738,8 +2738,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
>                         opmode = mgmt->u.action.u.vht_opmode_notif.operating_mode;
>
>                         ieee80211_vht_handle_opmode(rx->sdata, rx->sta,
> -                                                   opmode, status->band,
> -                                                   false);
> +                                                   opmode, status->band);
>                         goto handled;
>                 }
>                 case WLAN_VHT_ACTION_GROUPID_MGMT: {
> diff --git a/net/mac80211/vht.c b/net/mac80211/vht.c
> index d2f2ff6..a02525a 100644
> --- a/net/mac80211/vht.c
> +++ b/net/mac80211/vht.c
> @@ -399,7 +399,7 @@ void ieee80211_sta_set_rx_nss(struct sta_info *sta)
>
>  u32 __ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
>                                   struct sta_info *sta, u8 opmode,
> -                                 enum ieee80211_band band, bool nss_only)
> +                                 enum ieee80211_band band)
>  {
>         struct ieee80211_local *local = sdata->local;
>         struct ieee80211_supported_band *sband;
> @@ -422,9 +422,6 @@ u32 __ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
>                 changed |= IEEE80211_RC_NSS_CHANGED;
>         }
>
> -       if (nss_only)
> -               return changed;
> -
>         switch (opmode & IEEE80211_OPMODE_NOTIF_CHANWIDTH_MASK) {
>         case IEEE80211_OPMODE_NOTIF_CHANWIDTH_20MHZ:
>                 sta->cur_max_bandwidth = IEEE80211_STA_RX_BW_20;
> @@ -473,13 +470,12 @@ void ieee80211_process_mu_groups(struct ieee80211_sub_if_data *sdata,
>
>  void ieee80211_vht_handle_opmode(struct ieee80211_sub_if_data *sdata,
>                                  struct sta_info *sta, u8 opmode,
> -                                enum ieee80211_band band, bool nss_only)
> +                                enum ieee80211_band band)
>  {
>         struct ieee80211_local *local = sdata->local;
>         struct ieee80211_supported_band *sband = local->hw.wiphy->bands[band];
>
> -       u32 changed = __ieee80211_vht_handle_opmode(sdata, sta, opmode,
> -                                                   band, nss_only);
> +       u32 changed = __ieee80211_vht_handle_opmode(sdata, sta, opmode, band);
>
>         if (changed > 0)
>                 rate_control_rate_update(local, sband, sta, changed);

Not related to current change.

I was looking at this code a while ago and found that rate_control_rate_update
doesn't update the rates from rx_nss, rather it updates from HT/VHT
capabilities.

So how does the NSS update from OP MODE IE work?
(BW part is handled in minstrel from sta->bandwidth)
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux