wifi: mac80211: make associated BSS pointer visible to the driver
authorMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 6 Feb 2024 14:54:06 +0000 (16:54 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Wed, 21 Feb 2024 14:19:03 +0000 (15:19 +0100)
Some drivers need the data in it, so move it to the link conf,
which is exposed to the driver.

Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240206164849.6fe9782b87b4.Ifbffef638f07ca7f5c2b27f40d2cf2942d21de0b@changeid
[remove bss pointer from internal struct, update docs]
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
include/net/mac80211.h
net/mac80211/ieee80211_i.h
net/mac80211/mlme.c

index 25c892ea9eb345180261015bdb842ff52cd76e61..56c6ecb2c10a230683e2840e9b6a5a0688ad0053 100644 (file)
@@ -557,6 +557,10 @@ struct ieee80211_fils_discovery {
  * to that BSS) that can change during the lifetime of the BSS.
  *
  * @vif: reference to owning VIF
+ * @bss: the cfg80211 bss descriptor. Valid only for a station, and only
+ *     when associated. Note: This contains information which is not
+ *     necessarily authenticated. For example, information coming from probe
+ *     responses.
  * @addr: (link) address used locally
  * @link_id: link ID, or 0 for non-MLO
  * @htc_trig_based_pkt_ext: default PE in 4us units, if BSS supports HE
@@ -700,6 +704,7 @@ struct ieee80211_fils_discovery {
  */
 struct ieee80211_bss_conf {
        struct ieee80211_vif *vif;
+       struct cfg80211_bss *bss;
 
        const u8 *bssid;
        unsigned int link_id;
index f3edb1a148a7fbb82163d1b3488a801104d0c374..4bec625a84d12606a556ceaa56cca9bd142e1ca3 100644 (file)
@@ -1006,8 +1006,6 @@ struct ieee80211_link_data_managed {
        int mu_edca_last_param_set;
 
        u8 bss_param_ch_cnt;
-
-       struct cfg80211_bss *bss;
 };
 
 struct ieee80211_link_data_ap {
index e1554666d706ce354c83f53095c3807d1d6386d5..87ffc19770b8e36dc8e7f55389aa34f5e8ea2982 100644 (file)
@@ -2015,7 +2015,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,
        struct ieee80211_sub_if_data *sdata = link->sdata;
        struct ieee80211_local *local = sdata->local;
        struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
-       struct cfg80211_bss *cbss = link->u.mgd.bss;
+       struct cfg80211_bss *cbss = link->conf->bss;
        struct ieee80211_chanctx_conf *conf;
        struct ieee80211_chanctx *chanctx;
        enum nl80211_band current_band;
@@ -2928,7 +2928,7 @@ static u64 ieee80211_link_set_associated(struct ieee80211_link_data *link,
 
        ieee80211_check_rate_mask(link);
 
-       link->u.mgd.bss = cbss;
+       link->conf->bss = cbss;
        memcpy(link->u.mgd.bssid, cbss->bssid, ETH_ALEN);
 
        if (sdata->vif.p2p ||
@@ -3076,7 +3076,7 @@ static void ieee80211_set_disassoc(struct ieee80211_sub_if_data *sdata,
        ifmgd->associated = false;
 
        /* other links will be destroyed */
-       sdata->deflink.u.mgd.bss = NULL;
+       sdata->deflink.conf->bss = NULL;
        sdata->deflink.smps_mode = IEEE80211_SMPS_OFF;
 
        netif_carrier_off(sdata->dev);
@@ -3406,7 +3406,7 @@ static void ieee80211_mgd_probe_ap_send(struct ieee80211_sub_if_data *sdata)
                ieee80211_mlme_send_probe_req(sdata, sdata->vif.addr, dst,
                                              sdata->vif.cfg.ssid,
                                              sdata->vif.cfg.ssid_len,
-                                             sdata->deflink.u.mgd.bss->channel);
+                                             sdata->deflink.conf->bss->channel);
        }
 
        ifmgd->probe_timeout = jiffies + msecs_to_jiffies(probe_wait_ms);
@@ -3489,7 +3489,7 @@ struct sk_buff *ieee80211_ap_probereq_get(struct ieee80211_hw *hw,
                return NULL;
 
        if (ifmgd->associated)
-               cbss = sdata->deflink.u.mgd.bss;
+               cbss = sdata->deflink.conf->bss;
        else if (ifmgd->auth_data)
                cbss = ifmgd->auth_data->bss;
        else if (ifmgd->assoc_data && ifmgd->assoc_data->link[0].bss)
@@ -3568,8 +3568,8 @@ static void __ieee80211_disconnect(struct ieee80211_sub_if_data *sdata)
                        link = sdata_dereference(sdata->link[link_id], sdata);
                        if (!link)
                                continue;
-                       cfg80211_unlink_bss(local->hw.wiphy, link->u.mgd.bss);
-                       link->u.mgd.bss = NULL;
+                       cfg80211_unlink_bss(local->hw.wiphy, link->conf->bss);
+                       link->conf->bss = NULL;
                }
        }
 
@@ -6208,7 +6208,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_link_data *link,
        }
 
        if (!ifmgd->associated ||
-           !ieee80211_rx_our_beacon(bssid, link->u.mgd.bss))
+           !ieee80211_rx_our_beacon(bssid, link->conf->bss))
                return;
        bssid = link->u.mgd.bssid;
 
@@ -6235,7 +6235,7 @@ static void ieee80211_rx_mgmt_beacon(struct ieee80211_link_data *link,
         */
        if (!ieee80211_is_s1g_beacon(hdr->frame_control))
                ncrc = crc32_be(0, (void *)&mgmt->u.beacon.beacon_int, 4);
-       parse_params.bss = link->u.mgd.bss;
+       parse_params.bss = link->conf->bss;
        parse_params.filter = care_about_ies;
        parse_params.crc = ncrc;
        elems = ieee802_11_parse_elems_full(&parse_params);