Search Linux Wireless

Re: [PATCH] mac80211: move bss_conf into vif

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

 



On Sat, Oct 11, 2008 at 1:51 AM, Johannes Berg
<johannes@xxxxxxxxxxxxxxxx> wrote:
> Move bss_conf into the vif struct so that drivers can
> access it during ->tx without having to store it in
> the private data or similar. No driver updates because
> this is only for when they want to start using it.

What protection should driver take to be sure it won't be changed underneath ?
With prive copy you know this is changed only in bss_info changed is called.

Thanks
Tomas
>
> Signed-off-by: Johannes Berg <johannes@xxxxxxxxxxxxxxxx>
> ---
>  include/net/mac80211.h        |    3 +++
>  net/mac80211/cfg.c            |    6 +++---
>  net/mac80211/debugfs_netdev.c |    2 +-
>  net/mac80211/ieee80211_i.h    |    3 ---
>  net/mac80211/iface.c          |    2 +-
>  net/mac80211/main.c           |    8 ++++----
>  net/mac80211/mlme.c           |   30 +++++++++++++++---------------
>  net/mac80211/tx.c             |   16 ++++++++--------
>  net/mac80211/util.c           |    6 +++---
>  9 files changed, 38 insertions(+), 38 deletions(-)
>
> --- everything.orig/include/net/mac80211.h      2008-10-11 01:46:05.000000000 +0200
> +++ everything/include/net/mac80211.h   2008-10-11 01:46:29.000000000 +0200
> @@ -519,11 +519,14 @@ struct ieee80211_conf {
>  * use during the life of a virtual interface.
>  *
>  * @type: type of this virtual interface
> + * @bss_conf: BSS configuration for this interface, either our own
> + *     or the BSS we're associated to
>  * @drv_priv: data area for driver use, will always be aligned to
>  *     sizeof(void *).
>  */
>  struct ieee80211_vif {
>        enum nl80211_iftype type;
> +       struct ieee80211_bss_conf bss_conf;
>        /* must be last */
>        u8 drv_priv[0] __attribute__((__aligned__(sizeof(void *))));
>  };
> --- everything.orig/net/mac80211/ieee80211_i.h  2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/ieee80211_i.h       2008-10-11 01:46:29.000000000 +0200
> @@ -440,9 +440,6 @@ struct ieee80211_sub_if_data {
>
>        u16 sequence_number;
>
> -       /* BSS configuration for this interface. */
> -       struct ieee80211_bss_conf bss_conf;
> -
>        /*
>         * AP this belongs to: self in AP mode and
>         * corresponding AP in VLAN mode, NULL for
> --- everything.orig/net/mac80211/main.c 2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/main.c      2008-10-11 01:46:29.000000000 +0200
> @@ -249,15 +249,15 @@ void ieee80211_bss_info_change_notify(st
>        if (local->ops->bss_info_changed)
>                local->ops->bss_info_changed(local_to_hw(local),
>                                             &sdata->vif,
> -                                            &sdata->bss_conf,
> +                                            &sdata->vif.bss_conf,
>                                             changed);
>  }
>
>  u32 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata)
>  {
> -       sdata->bss_conf.use_cts_prot = false;
> -       sdata->bss_conf.use_short_preamble = false;
> -       sdata->bss_conf.use_short_slot = false;
> +       sdata->vif.bss_conf.use_cts_prot = false;
> +       sdata->vif.bss_conf.use_short_preamble = false;
> +       sdata->vif.bss_conf.use_short_slot = false;
>        return BSS_CHANGED_ERP_CTS_PROT |
>               BSS_CHANGED_ERP_PREAMBLE |
>               BSS_CHANGED_ERP_SLOT;
> --- everything.orig/net/mac80211/iface.c        2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/iface.c     2008-10-11 01:46:29.000000000 +0200
> @@ -695,7 +695,7 @@ int ieee80211_if_change_type(struct ieee
>        ieee80211_setup_sdata(sdata, type);
>
>        /* reset some values that shouldn't be kept across type changes */
> -       sdata->bss_conf.basic_rates =
> +       sdata->vif.bss_conf.basic_rates =
>                ieee80211_mandatory_rates(sdata->local,
>                        sdata->local->hw.conf.channel->band);
>        sdata->drop_unencrypted = 0;
> --- everything.orig/net/mac80211/mlme.c 2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/mlme.c      2008-10-11 01:46:29.000000000 +0200
> @@ -572,7 +572,7 @@ static void ieee80211_sta_wmm_params(str
>  static u32 ieee80211_handle_bss_capability(struct ieee80211_sub_if_data *sdata,
>                                           u16 capab, bool erp_valid, u8 erp)
>  {
> -       struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
> +       struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
>  #ifdef CONFIG_MAC80211_VERBOSE_DEBUG
>        struct ieee80211_if_sta *ifsta = &sdata->u.sta;
>        DECLARE_MAC_BUF(mac);
> @@ -720,9 +720,9 @@ static void ieee80211_set_associated(str
>                                   ifsta->ssid, ifsta->ssid_len);
>        if (bss) {
>                /* set timing information */
> -               sdata->bss_conf.beacon_int = bss->beacon_int;
> -               sdata->bss_conf.timestamp = bss->timestamp;
> -               sdata->bss_conf.dtim_period = bss->dtim_period;
> +               sdata->vif.bss_conf.beacon_int = bss->beacon_int;
> +               sdata->vif.bss_conf.timestamp = bss->timestamp;
> +               sdata->vif.bss_conf.dtim_period = bss->dtim_period;
>
>                changed |= ieee80211_handle_bss_capability(sdata,
>                        bss->capability, bss->has_erp_value, bss->erp_value);
> @@ -732,9 +732,9 @@ static void ieee80211_set_associated(str
>
>        if (conf->flags & IEEE80211_CONF_SUPPORT_HT_MODE) {
>                changed |= BSS_CHANGED_HT;
> -               sdata->bss_conf.assoc_ht = 1;
> -               sdata->bss_conf.ht_cap = &conf->ht_cap;
> -               sdata->bss_conf.ht_bss_conf = &conf->ht_bss_conf;
> +               sdata->vif.bss_conf.assoc_ht = 1;
> +               sdata->vif.bss_conf.ht_cap = &conf->ht_cap;
> +               sdata->vif.bss_conf.ht_bss_conf = &conf->ht_bss_conf;
>        }
>
>        ifsta->flags |= IEEE80211_STA_PREV_BSSID_SET;
> @@ -744,7 +744,7 @@ static void ieee80211_set_associated(str
>        ifsta->last_probe = jiffies;
>        ieee80211_led_assoc(local, 1);
>
> -       sdata->bss_conf.assoc = 1;
> +       sdata->vif.bss_conf.assoc = 1;
>        /*
>         * For now just always ask the driver to update the basic rateset
>         * when we have associated, we aren't checking whether it actually
> @@ -853,15 +853,15 @@ static void ieee80211_set_disassoc(struc
>        ifsta->flags &= ~IEEE80211_STA_ASSOCIATED;
>        changed |= ieee80211_reset_erp_info(sdata);
>
> -       if (sdata->bss_conf.assoc_ht)
> +       if (sdata->vif.bss_conf.assoc_ht)
>                changed |= BSS_CHANGED_HT;
>
> -       sdata->bss_conf.assoc_ht = 0;
> -       sdata->bss_conf.ht_cap = NULL;
> -       sdata->bss_conf.ht_bss_conf = NULL;
> +       sdata->vif.bss_conf.assoc_ht = 0;
> +       sdata->vif.bss_conf.ht_cap = NULL;
> +       sdata->vif.bss_conf.ht_bss_conf = NULL;
>
>        ieee80211_led_assoc(local, 0);
> -       sdata->bss_conf.assoc = 0;
> +       sdata->vif.bss_conf.assoc = 0;
>
>        ieee80211_sta_send_apinfo(sdata, ifsta);
>
> @@ -1194,7 +1194,7 @@ static void ieee80211_rx_mgmt_assoc_resp
>        u64 rates, basic_rates;
>        u16 capab_info, status_code, aid;
>        struct ieee802_11_elems elems;
> -       struct ieee80211_bss_conf *bss_conf = &sdata->bss_conf;
> +       struct ieee80211_bss_conf *bss_conf = &sdata->vif.bss_conf;
>        u8 *pos;
>        int i, j;
>        DECLARE_MAC_BUF(mac);
> @@ -1337,7 +1337,7 @@ static void ieee80211_rx_mgmt_assoc_resp
>        }
>
>        sta->sta.supp_rates[local->hw.conf.channel->band] = rates;
> -       sdata->bss_conf.basic_rates = basic_rates;
> +       sdata->vif.bss_conf.basic_rates = basic_rates;
>
>        /* cf. IEEE 802.11 9.2.12 */
>        if (local->hw.conf.channel->band == IEEE80211_BAND_2GHZ &&
> --- everything.orig/net/mac80211/cfg.c  2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/cfg.c       2008-10-11 01:46:29.000000000 +0200
> @@ -966,16 +966,16 @@ static int ieee80211_change_bss(struct w
>                return -EINVAL;
>
>        if (params->use_cts_prot >= 0) {
> -               sdata->bss_conf.use_cts_prot = params->use_cts_prot;
> +               sdata->vif.bss_conf.use_cts_prot = params->use_cts_prot;
>                changed |= BSS_CHANGED_ERP_CTS_PROT;
>        }
>        if (params->use_short_preamble >= 0) {
> -               sdata->bss_conf.use_short_preamble =
> +               sdata->vif.bss_conf.use_short_preamble =
>                        params->use_short_preamble;
>                changed |= BSS_CHANGED_ERP_PREAMBLE;
>        }
>        if (params->use_short_slot_time >= 0) {
> -               sdata->bss_conf.use_short_slot =
> +               sdata->vif.bss_conf.use_short_slot =
>                        params->use_short_slot_time;
>                changed |= BSS_CHANGED_ERP_SLOT;
>        }
> --- everything.orig/net/mac80211/debugfs_netdev.c       2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/debugfs_netdev.c    2008-10-11 01:46:29.000000000 +0200
> @@ -120,7 +120,7 @@ static ssize_t ieee80211_if_fmt_flags(
>                 sdata->u.sta.flags & IEEE80211_STA_AUTHENTICATED ? "AUTH\n" : "",
>                 sdata->u.sta.flags & IEEE80211_STA_ASSOCIATED ? "ASSOC\n" : "",
>                 sdata->u.sta.flags & IEEE80211_STA_PROBEREQ_POLL ? "PROBEREQ POLL\n" : "",
> -                sdata->bss_conf.use_cts_prot ? "CTS prot\n" : "");
> +                sdata->vif.bss_conf.use_cts_prot ? "CTS prot\n" : "");
>  }
>  __IEEE80211_IF_FILE(flags);
>
> --- everything.orig/net/mac80211/tx.c   2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/tx.c        2008-10-11 01:46:29.000000000 +0200
> @@ -116,7 +116,7 @@ static __le16 ieee80211_duration(struct
>                if (r->bitrate > txrate->bitrate)
>                        break;
>
> -               if (tx->sdata->bss_conf.basic_rates & BIT(i))
> +               if (tx->sdata->vif.bss_conf.basic_rates & BIT(i))
>                        rate = r->bitrate;
>
>                switch (sband->band) {
> @@ -150,7 +150,7 @@ static __le16 ieee80211_duration(struct
>         * to closest integer */
>
>        dur = ieee80211_frame_duration(local, 10, rate, erp,
> -                               tx->sdata->bss_conf.use_short_preamble);
> +                               tx->sdata->vif.bss_conf.use_short_preamble);
>
>        if (next_frag_len) {
>                /* Frame is fragmented: duration increases with time needed to
> @@ -159,7 +159,7 @@ static __le16 ieee80211_duration(struct
>                /* next fragment */
>                dur += ieee80211_frame_duration(local, next_frag_len,
>                                txrate->bitrate, erp,
> -                               tx->sdata->bss_conf.use_short_preamble);
> +                               tx->sdata->vif.bss_conf.use_short_preamble);
>        }
>
>        return cpu_to_le16(dur);
> @@ -465,7 +465,7 @@ ieee80211_tx_h_rate_ctrl(struct ieee8021
>        } else
>                info->control.retries[0].rate_idx = -1;
>
> -       if (tx->sdata->bss_conf.use_cts_prot &&
> +       if (tx->sdata->vif.bss_conf.use_cts_prot &&
>            (tx->flags & IEEE80211_TX_FRAGMENTED) && (rsel.nonerp_idx >= 0)) {
>                tx->last_frag_rate_idx = tx->rate_idx;
>                if (rsel.probe_idx >= 0)
> @@ -531,7 +531,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
>        if ((tx->sdata->flags & IEEE80211_SDATA_OPERATING_GMODE) &&
>            (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_ERP_G) &&
>            (tx->flags & IEEE80211_TX_UNICAST) &&
> -           tx->sdata->bss_conf.use_cts_prot &&
> +           tx->sdata->vif.bss_conf.use_cts_prot &&
>            !(info->flags & IEEE80211_TX_CTL_USE_RTS_CTS))
>                info->flags |= IEEE80211_TX_CTL_USE_CTS_PROTECT;
>
> @@ -540,7 +540,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
>         * available on the network at the current point in time. */
>        if (ieee80211_is_data(hdr->frame_control) &&
>            (sband->bitrates[tx->rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE) &&
> -           tx->sdata->bss_conf.use_short_preamble &&
> +           tx->sdata->vif.bss_conf.use_short_preamble &&
>            (!tx->sta || test_sta_flags(tx->sta, WLAN_STA_SHORT_PREAMBLE))) {
>                info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
>        }
> @@ -560,7 +560,7 @@ ieee80211_tx_h_misc(struct ieee80211_tx_
>                for (idx = 0; idx < sband->n_bitrates; idx++) {
>                        if (sband->bitrates[idx].bitrate > rate->bitrate)
>                                continue;
> -                       if (tx->sdata->bss_conf.basic_rates & BIT(idx) &&
> +                       if (tx->sdata->vif.bss_conf.basic_rates & BIT(idx) &&
>                            (baserate < 0 ||
>                             (sband->bitrates[baserate].bitrate
>                              < sband->bitrates[idx].bitrate)))
> @@ -1981,7 +1981,7 @@ struct sk_buff *ieee80211_beacon_get(str
>        info->flags |= IEEE80211_TX_CTL_NO_ACK;
>        info->flags |= IEEE80211_TX_CTL_CLEAR_PS_FILT;
>        info->flags |= IEEE80211_TX_CTL_ASSIGN_SEQ;
> -       if (sdata->bss_conf.use_short_preamble &&
> +       if (sdata->vif.bss_conf.use_short_preamble &&
>            sband->bitrates[rsel.rate_idx].flags & IEEE80211_RATE_SHORT_PREAMBLE)
>                info->flags |= IEEE80211_TX_CTL_SHORT_PREAMBLE;
>
> --- everything.orig/net/mac80211/util.c 2008-10-11 01:46:05.000000000 +0200
> +++ everything/net/mac80211/util.c      2008-10-11 01:46:29.000000000 +0200
> @@ -239,7 +239,7 @@ __le16 ieee80211_generic_frame_duration(
>        erp = 0;
>        if (vif) {
>                sdata = vif_to_sdata(vif);
> -               short_preamble = sdata->bss_conf.use_short_preamble;
> +               short_preamble = sdata->vif.bss_conf.use_short_preamble;
>                if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
>                        erp = rate->flags & IEEE80211_RATE_ERP_G;
>        }
> @@ -272,7 +272,7 @@ __le16 ieee80211_rts_duration(struct iee
>        erp = 0;
>        if (vif) {
>                sdata = vif_to_sdata(vif);
> -               short_preamble = sdata->bss_conf.use_short_preamble;
> +               short_preamble = sdata->vif.bss_conf.use_short_preamble;
>                if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
>                        erp = rate->flags & IEEE80211_RATE_ERP_G;
>        }
> @@ -312,7 +312,7 @@ __le16 ieee80211_ctstoself_duration(stru
>        erp = 0;
>        if (vif) {
>                sdata = vif_to_sdata(vif);
> -               short_preamble = sdata->bss_conf.use_short_preamble;
> +               short_preamble = sdata->vif.bss_conf.use_short_preamble;
>                if (sdata->flags & IEEE80211_SDATA_OPERATING_GMODE)
>                        erp = rate->flags & IEEE80211_RATE_ERP_G;
>        }
>
>
> --
> 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
>
--
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 Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux