Search Linux Wireless

Re: parsing the multi-link element with STA profile wifi: mac80211: support MLO authentication/association with one link

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

 



On 9/29/2022 3:28 AM, Johannes Berg wrote:
On Wed, 2022-09-28 at 23:33 +0800, Wen Gong wrote:

...

Hi Johannes,

The change below which added in ieee80211_rx_mgmt_assoc_resp() by
patch "wifi: mac80211: support MLO authentication/association with one link (commit 81151ce462e5)"
maybe need refine to meet 2 links.

I hit issue that the BSS of the 2 link will always hold and never free.

My case is:
When connect with 2 links AP, the cfg80211_hold_bss() is called by cfg80211_mlme_assoc()
for each BSS of the 2 links,

When asssocResp from AP is not success(such as status_code==1), the ieee80211_link_data of 2nd link(sdata->link[link_id]) is NULL because ieee80211_assoc_success()->ieee80211_vif_update_links() is not called.

Then struct cfg80211_rx_assoc_resp resp in cfg80211_rx_assoc_resp() and
struct cfg80211_connect_resp_params cr in __cfg80211_connect_result() will only have the data of the 1st link, and finally cfg80211_connect_result_release_bsses() only call cfg80211_unhold_bss() for the 1st link, then BSS of the 2nd link will never free because its hold is awlays > 0 now.

I found it is not easy to refine it, so do you have any advise/idea?

for (link_id = 0; link_id < IEEE80211_MLD_MAX_NUM_LINKS; link_id++) {
        struct ieee80211_link_data *link;

        link = sdata_dereference(sdata->link[link_id], sdata);
        if (!link)
            continue;

        if (!assoc_data->link[link_id].bss)
            continue;

        resp.links[link_id].bss = assoc_data->link[link_id].bss;
        resp.links[link_id].addr = link->conf->addr;
        resp.links[link_id].status = assoc_data->link[link_id].status;




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

  Powered by Linux