[PATCH 10/27] wifi: mac80211: isolate driver from inactive links
Wen Gong
quic_wgong at quicinc.com
Thu Sep 8 08:23:56 PDT 2022
On 9/2/2022 10:12 PM, Johannes Berg wrote:
> From: Johannes Berg <johannes.berg at intel.com>
>
> In order to let the driver select active links and properly
> make multi-link connections, as a first step isolate the
> driver from inactive links, and set the active links to be
> only the association link for client-side interfaces. For
> AP side nothing changes since APs always have to have all
> their links active.
>
> To simplify things, update the for_each_sta_active_link()
> API to include the appropriate vif pointer.
>
> This also implies not allocating a chanctx for an inactive
> link, which requires a few more changes.
>
> Since we now no longer try to program multiple links to the
> driver, remove the check in the MLME code.
>
> Signed-off-by: Johannes Berg <johannes.berg at intel.com>
> ---
> include/net/mac80211.h | 30 +++----
> net/mac80211/chan.c | 6 ++
> net/mac80211/driver-ops.c | 172 ++++++++++++++++++++++++++++++++++++++
> net/mac80211/driver-ops.h | 165 ++++++------------------------------
> net/mac80211/key.c | 8 ++
> net/mac80211/link.c | 66 ++++++++++++---
> net/mac80211/mlme.c | 25 ++----
> net/mac80211/util.c | 2 +-
> 8 files changed, 286 insertions(+), 188 deletions(-)
>
> diff --git a/include/net/mac80211.h b/include/net/mac80211.h
> index d4e1d73d88cc..20a2f25a38fa 100644
> --- a/include/net/mac80211.h
> +++ b/include/net/mac80211.h
> @@ -1799,6 +1799,9 @@ struct ieee80211_vif_cfg {
> * @link_conf: in case of MLD, the per-link BSS configuration,
> * indexed by link ID
> * @valid_links: bitmap of valid links, or 0 for non-MLO.
> + * @active_links: The bitmap of active links, or 0 for non-MLO.
> + * The driver shouldn't change this directly, but use the
> + * API calls meant for that purpose.
> * @addr: address of this interface
> * @p2p: indicates whether this AP or STA interface is a p2p
> * interface, i.e. a GO or p2p-sta respectively
> @@ -1834,7 +1837,7 @@ struct ieee80211_vif {
> struct ieee80211_vif_cfg cfg;
> struct ieee80211_bss_conf bss_conf;
> struct ieee80211_bss_conf __rcu *link_conf[IEEE80211_MLD_MAX_NUM_LINKS];
> - u16 valid_links;
> + u16 valid_links, active_links;
> u8 addr[ETH_ALEN] __aligned(2);
> bool p2p;
>
...
> @@ -123,11 +132,38 @@ static int ieee80211_check_dup_link_addrs(struct ieee80211_sub_if_data *sdata)
> return 0;
> }
>
> +static void ieee80211_set_vif_links_bitmaps(struct ieee80211_sub_if_data *sdata,
> + u16 links)
> +{
> + sdata->vif.valid_links = links;
> +
> + if (!links) {
> + sdata->vif.active_links = 0;
> + return;
> + }
> +
> + switch (sdata->vif.type) {
> + case NL80211_IFTYPE_AP:
> + /* in an AP all links are always active */
> + sdata->vif.active_links = links;
> + break;
> + case NL80211_IFTYPE_STATION:
> + if (sdata->vif.active_links)
> + break;
> + WARN_ON(hweight16(links) > 1);
> + sdata->vif.active_links = links;
> + break;
> + default:
> + WARN_ON(1);
> + }
> +}
> +
Now I found it only active the primay link(the link for
authentication/assoc request) in my station MLO test,
change_vif_links of struct ieee80211_ops *ops of driver will only be
called one time for the primary link.
it means only one link for MLO.
I plan to revert this patch in my local test now.
Will you implement muti-links later?
> ...
More information about the ath11k
mailing list