2023-10-03 16:43:57

by Ben Greear

[permalink] [raw]
Subject: [PATCH] mac80211: Allow STA to connect in AX mode to MLD AP.

From: Ben Greear <[email protected]>

Check if user has configured STA to be AX mode, and if so,
skip the check for MLD elements (as they would not be needed
in AX mode).

Signed-off-by: Ben Greear <[email protected]>
---
net/mac80211/mlme.c | 51 +++++++++++++++++++++++++--------------------
1 file changed, 28 insertions(+), 23 deletions(-)

diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index e7d42545851f..5fb0bdad88f4 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -5550,34 +5550,39 @@ static void ieee80211_rx_mgmt_assoc_resp(struct ieee80211_sub_if_data *sdata,
}

if (ieee80211_vif_is_mld(&sdata->vif)) {
- if (!elems->ml_basic) {
- sdata_info(sdata,
- "MLO association with %pM but no multi-link element in response!\n",
- assoc_data->ap_addr);
- goto abandon_assoc;
- }
-
- if (le16_get_bits(elems->ml_basic->control,
- IEEE80211_ML_CONTROL_TYPE) !=
- IEEE80211_ML_CONTROL_TYPE_BASIC) {
- sdata_info(sdata,
- "bad multi-link element (control=0x%x)\n",
- le16_to_cpu(elems->ml_basic->control));
- goto abandon_assoc;
- } else {
- struct ieee80211_mle_basic_common_info *common;
-
- common = (void *)elems->ml_basic->variable;
+ struct ieee80211_link_data *link;

- if (memcmp(assoc_data->ap_addr,
- common->mld_mac_addr, ETH_ALEN)) {
+ link = sdata_dereference(sdata->link[0], sdata);
+ if (!(link && (link->u.mgd.conn_flags & IEEE80211_CONN_DISABLE_EHT))) {
+ if (!elems->ml_basic) {
sdata_info(sdata,
- "AP MLD MAC address mismatch: got %pM expected %pM\n",
- common->mld_mac_addr,
+ "MLO association with %pM but no multi-link element in response!\n",
assoc_data->ap_addr);
goto abandon_assoc;
}
- }
+
+ if (le16_get_bits(elems->ml_basic->control,
+ IEEE80211_ML_CONTROL_TYPE) !=
+ IEEE80211_ML_CONTROL_TYPE_BASIC) {
+ sdata_info(sdata,
+ "bad multi-link element (control=0x%x)\n",
+ le16_to_cpu(elems->ml_basic->control));
+ goto abandon_assoc;
+ } else {
+ struct ieee80211_mle_basic_common_info *common;
+
+ common = (void *)elems->ml_basic->variable;
+
+ if (memcmp(assoc_data->ap_addr,
+ common->mld_mac_addr, ETH_ALEN)) {
+ sdata_info(sdata,
+ "AP MLD MAC address mismatch: got %pM expected %pM\n",
+ common->mld_mac_addr,
+ assoc_data->ap_addr);
+ goto abandon_assoc;
+ }
+ }
+ } /* if we are not configured to disable EHT */
}

sdata->vif.cfg.aid = aid;
--
2.40.0


2023-10-04 19:38:39

by Johannes Berg

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Allow STA to connect in AX mode to MLD AP.

On Tue, 2023-10-03 at 09:43 -0700, [email protected] wrote:
> From: Ben Greear <[email protected]>
>
> Check if user has configured STA to be AX mode, and if so,
> skip the check for MLD elements (as they would not be needed
> in AX mode).

Eh, no, I think this is wrong.

>
> if (ieee80211_vif_is_mld(&sdata->vif)) {

If you get past this if, you've (locally) committed to doing EHT
already, not just HE (née 11ax), so should have an EHT connection?

Though the change is hard to read - but why are you telling the
supplicant to connect with MLO if you wanted to not use EHT?

johannes

2023-10-04 20:43:51

by Ben Greear

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Allow STA to connect in AX mode to MLD AP.

On 10/4/23 12:38, Johannes Berg wrote:
> On Tue, 2023-10-03 at 09:43 -0700, [email protected] wrote:
>> From: Ben Greear <[email protected]>
>>
>> Check if user has configured STA to be AX mode, and if so,
>> skip the check for MLD elements (as they would not be needed
>> in AX mode).
>
> Eh, no, I think this is wrong.
>
>>
>> if (ieee80211_vif_is_mld(&sdata->vif)) {
>
> If you get past this if, you've (locally) committed to doing EHT
> already, not just HE (née 11ax), so should have an EHT connection?
>
> Though the change is hard to read - but why are you telling the
> supplicant to connect with MLO if you wanted to not use EHT?

It is mostly white-space changes, but the diff is ugly.

I caused the DISABLE_EHT flag to be set in mac80211, and that generally
seems to work in my kernel, but something is still trying to do MLO I guess.

I did not specifically tell supplicant to do MLO, and in fact I told
it to disable_be, but maybe that is not fully implemented. My supplicant
is a few months old vs upstream at this point.

Thanks,
Ben

--
Ben Greear <[email protected]>
Candela Technologies Inc http://www.candelatech.com


2023-10-05 23:40:10

by Ben Greear

[permalink] [raw]
Subject: Re: [PATCH] mac80211: Allow STA to connect in AX mode to MLD AP.

On 10/4/23 13:36, Ben Greear wrote:
> On 10/4/23 12:38, Johannes Berg wrote:
>> On Tue, 2023-10-03 at 09:43 -0700, [email protected] wrote:
>>> From: Ben Greear <[email protected]>
>>>
>>> Check if user has configured STA to be AX mode, and if so,
>>> skip the check for MLD elements (as they would not be needed
>>> in AX mode).
>>
>> Eh, no, I think this is wrong.
>>
>>>
>>>           if (ieee80211_vif_is_mld(&sdata->vif)) {
>>
>> If you get past this if, you've (locally) committed to doing EHT
>> already, not just HE (née 11ax), so should have an EHT connection?
>>
>> Though the change is hard to read - but why are you telling the
>> supplicant to connect with MLO if you wanted to not use EHT?
>
> It is mostly white-space changes, but the diff is ugly.
>
> I caused the DISABLE_EHT flag to be set in mac80211, and that generally
> seems to work in my kernel, but something is still trying to do MLO I guess.
>
> I did not specifically tell supplicant to do MLO, and in fact I told
> it to disable_be, but maybe that is not fully implemented.  My supplicant
> is a few months old vs upstream at this point.

I created a patch to supplicant where it will disable MLO if disable_eht
is true, and that seems to have properly associated a non-MLO station
in AX mode.

So I agree that my patch to the kernel is not needed.

Thanks for the patch review and comments.

Thanks,
Ben