diff mbox series

brcmfmac: include missing AP scan feature

Message ID 20220224181809.2808754-1-prestwoj@gmail.com (mailing list archive)
State Rejected
Delegated to: Kalle Valo
Headers show
Series brcmfmac: include missing AP scan feature | expand

Commit Message

James Prestwood Feb. 24, 2022, 6:18 p.m. UTC
This driver does not advertise this feature yet scanning with on an
AP interface appears to work just fine.
---
 drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 ++
 1 file changed, 2 insertions(+)

I've submitted this patch mainly to start a discussion about it. I
find it hard to believe that ALL brcmfmac devices support AP scanning
in which case this feature needs to be limited to those devices
only. Trouble is there is no FW feature for AP scanning AFAIK.

In any case I think this driver needs to sort out if it supports this
feature or not, and advertise as such rather than leaving userspace
in the dark.

Comments

Alvin Šipraga Feb. 25, 2022, 10:55 p.m. UTC | #1
Hi James,

James Prestwood <prestwoj@gmail.com> writes:

> This driver does not advertise this feature yet scanning with on an
> AP interface appears to work just fine.
> ---
>  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 ++
>  1 file changed, 2 insertions(+)
>
> I've submitted this patch mainly to start a discussion about it. I
> find it hard to believe that ALL brcmfmac devices support AP scanning
> in which case this feature needs to be limited to those devices
> only. Trouble is there is no FW feature for AP scanning AFAIK.
>
> In any case I think this driver needs to sort out if it supports this
> feature or not, and advertise as such rather than leaving userspace
> in the dark.

By the way, what are the typical use-cases for AP scanning?

I know that hostapd does a passive scan on the AP interface on the
assumption that the driver/firmware will gather channel survey data, but
that's not a universally applicable assumption. Not all implementations
will do that.

Kind regards,
Alvin

>
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> index fb727778312c..b6a50e65dbf6 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> @@ -7729,6 +7729,8 @@ struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
>  #endif
>  	}
>  
> +	wiphy->features |= NL80211_FEATURE_AP_SCAN;
> +
>  	return cfg;
>  
>  detach:
James Prestwood Feb. 25, 2022, 11:22 p.m. UTC | #2
Hi Alvin,

On Fri, 2022-02-25 at 22:55 +0000, Alvin Šipraga wrote:
> Hi James,
> 
> James Prestwood <prestwoj@gmail.com> writes:
> 
> > This driver does not advertise this feature yet scanning with on an
> > AP interface appears to work just fine.
> > ---
> >  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > I've submitted this patch mainly to start a discussion about it. I
> > find it hard to believe that ALL brcmfmac devices support AP
> > scanning
> > in which case this feature needs to be limited to those devices
> > only. Trouble is there is no FW feature for AP scanning AFAIK.
> > 
> > In any case I think this driver needs to sort out if it supports
> > this
> > feature or not, and advertise as such rather than leaving userspace
> > in the dark.
> 
> By the way, what are the typical use-cases for AP scanning?
> 
> I know that hostapd does a passive scan on the AP interface on the
> assumption that the driver/firmware will gather channel survey data,
> but
> that's not a universally applicable assumption. Not all
> implementations
> will do that.

We have someone wanting it for onboarding/configuring a new headless
device. Where on boot, if it is unconfigured, it starts an AP and waits
for a client to configure it.

A client would connect, have the device scan and present available
networks. The client then selects a network and provides credentials.
The new device can then switch back to station mode and connect.

This is a relatively common practice I've seen with IoT devices.

Other than this I cant see much else of a use case besides, like you
mentioned, gathering survey data to choose a low load channel (ACS its
called I think?)

Sadly this onboarding use case is quite perfect for DPP, but since
Apple came up with their own protocol DPP won't work for any products
that want cross compatibility...

> 
> Kind regards,
> Alvin
> 
> > 
> > diff --git
> > a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > index fb727778312c..b6a50e65dbf6 100644
> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > @@ -7729,6 +7729,8 @@ struct brcmf_cfg80211_info
> > *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
> >  #endif
> >         }
> >  
> > +       wiphy->features |= NL80211_FEATURE_AP_SCAN;
> > +
> >         return cfg;
> >  
> >  detach:
Alvin Šipraga Feb. 26, 2022, 11:27 a.m. UTC | #3
Hi James,

James Prestwood <prestwoj@gmail.com> writes:

> Hi Alvin,
>
> On Fri, 2022-02-25 at 22:55 +0000, Alvin Šipraga wrote:
>> Hi James,
>> 
>> James Prestwood <prestwoj@gmail.com> writes:
>> 
>> > This driver does not advertise this feature yet scanning with on an
>> > AP interface appears to work just fine.
>> > ---
>> >  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 ++
>> >  1 file changed, 2 insertions(+)
>> > 
>> > I've submitted this patch mainly to start a discussion about it. I
>> > find it hard to believe that ALL brcmfmac devices support AP
>> > scanning
>> > in which case this feature needs to be limited to those devices
>> > only. Trouble is there is no FW feature for AP scanning AFAIK.
>> > 
>> > In any case I think this driver needs to sort out if it supports
>> > this
>> > feature or not, and advertise as such rather than leaving userspace
>> > in the dark.
>> 
>> By the way, what are the typical use-cases for AP scanning?
>> 
>> I know that hostapd does a passive scan on the AP interface on the
>> assumption that the driver/firmware will gather channel survey data,
>> but
>> that's not a universally applicable assumption. Not all
>> implementations
>> will do that.
>
> We have someone wanting it for onboarding/configuring a new headless
> device. Where on boot, if it is unconfigured, it starts an AP and waits
> for a client to configure it.
>
> A client would connect, have the device scan and present available
> networks. The client then selects a network and provides credentials.
> The new device can then switch back to station mode and connect.
>
> This is a relatively common practice I've seen with IoT devices.

Ah OK! Actually we do pretty much the same here at B&O with
brcmfmac. But rather than starting the AP on the primary interface (the
one default created by the driver), we add a separate AP interface with
the equivalent of the following command:

# iw dev wlan0 add uap0 type __ap

Here wlan0 is the primary interface, and uap0 is what I call my AP.

In that case you can start the AP on uap0, but still do scanning on
wlan0 (which remains in station mode). Don't quote me on it, but I think
this is the canonical approach with this driver. Is it something you
have considered?

>
> Other than this I cant see much else of a use case besides, like you
> mentioned, gathering survey data to choose a low load channel (ACS its
> called I think?)

Yes, see hostap/src/ap/acs.c.

See also
https://lore.kernel.org/linux-wireless/96652669-0cad-8cdb-fbe1-4df0f7161102@bang-olufsen.dk/
for some grumblings of mine on this API.

>
> Sadly this onboarding use case is quite perfect for DPP, but since
> Apple came up with their own protocol DPP won't work for any products
> that want cross compatibility...

Yes, this is a real shame. And I highly doubt that Apple will abandon
their own protocol.

>
>> 
>> Kind regards,
>> Alvin
>> 
>> > 
>> > diff --git
>> > a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> > index fb727778312c..b6a50e65dbf6 100644
>> > --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> > +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> > @@ -7729,6 +7729,8 @@ struct brcmf_cfg80211_info
>> > *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
>> >  #endif
>> >         }
>> >  
>> > +       wiphy->features |= NL80211_FEATURE_AP_SCAN;
>> > +
>> >         return cfg;
>> >  
>> >  detach:
James Prestwood Feb. 28, 2022, 5:17 p.m. UTC | #4
Hi Alvin,

On Sat, 2022-02-26 at 11:27 +0000, Alvin Šipraga wrote:
> Hi James,
> 
> James Prestwood <prestwoj@gmail.com> writes:
> 
> > Hi Alvin,
> > 
> > On Fri, 2022-02-25 at 22:55 +0000, Alvin Šipraga wrote:
> > > Hi James,
> > > 
> > > James Prestwood <prestwoj@gmail.com> writes:
> > > 
> > > > This driver does not advertise this feature yet scanning with
> > > > on an
> > > > AP interface appears to work just fine.
> > > > ---
> > > >  drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
> > > > 2 ++
> > > >  1 file changed, 2 insertions(+)
> > > > 
> > > > I've submitted this patch mainly to start a discussion about
> > > > it. I
> > > > find it hard to believe that ALL brcmfmac devices support AP
> > > > scanning
> > > > in which case this feature needs to be limited to those devices
> > > > only. Trouble is there is no FW feature for AP scanning AFAIK.
> > > > 
> > > > In any case I think this driver needs to sort out if it
> > > > supports
> > > > this
> > > > feature or not, and advertise as such rather than leaving
> > > > userspace
> > > > in the dark.
> > > 
> > > By the way, what are the typical use-cases for AP scanning?
> > > 
> > > I know that hostapd does a passive scan on the AP interface on
> > > the
> > > assumption that the driver/firmware will gather channel survey
> > > data,
> > > but
> > > that's not a universally applicable assumption. Not all
> > > implementations
> > > will do that.
> > 
> > We have someone wanting it for onboarding/configuring a new
> > headless
> > device. Where on boot, if it is unconfigured, it starts an AP and
> > waits
> > for a client to configure it.
> > 
> > A client would connect, have the device scan and present available
> > networks. The client then selects a network and provides
> > credentials.
> > The new device can then switch back to station mode and connect.
> > 
> > This is a relatively common practice I've seen with IoT devices.
> 
> Ah OK! Actually we do pretty much the same here at B&O with
> brcmfmac. But rather than starting the AP on the primary interface
> (the
> one default created by the driver), we add a separate AP interface
> with
> the equivalent of the following command:
> 
> # iw dev wlan0 add uap0 type __ap
> 
> Here wlan0 is the primary interface, and uap0 is what I call my AP.
> 
> In that case you can start the AP on uap0, but still do scanning on
> wlan0 (which remains in station mode). Don't quote me on it, but I
> think
> this is the canonical approach with this driver. Is it something you
> have considered?

Thanks, this does seem to work on brcmfmac. I had tried this on other
hardware without any luck. I mentioned this to the user but since the
AP scanning feature has been implemented they may want to still use
that, but who knows. I think finding out if brcmfmac is intended to
scan on the AP interface would still be good to know.

> > 
> > Other than this I cant see much else of a use case besides, like
> > you
> > mentioned, gathering survey data to choose a low load channel (ACS
> > its
> > called I think?)
> 
> Yes, see hostap/src/ap/acs.c.
> 
> See also
> https://lore.kernel.org/linux-wireless/96652669-0cad-8cdb-fbe1-4df0f7161102@bang-olufsen.dk/
> for some grumblings of mine on this API.
> 
> > 
> > Sadly this onboarding use case is quite perfect for DPP, but since
> > Apple came up with their own protocol DPP won't work for any
> > products
> > that want cross compatibility...
> 
> Yes, this is a real shame. And I highly doubt that Apple will abandon
> their own protocol.
> 
> > 
> > > 
> > > Kind regards,
> > > Alvin
> > > 
> > > > 
> > > > diff --git
> > > > a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > > > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > > > index fb727778312c..b6a50e65dbf6 100644
> > > > ---
> > > > a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > > > +++
> > > > b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> > > > @@ -7729,6 +7729,8 @@ struct brcmf_cfg80211_info
> > > > *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
> > > >  #endif
> > > >         }
> > > >  
> > > > +       wiphy->features |= NL80211_FEATURE_AP_SCAN;
> > > > +
> > > >         return cfg;
> > > >  
> > > >  detach:
Arend van Spriel March 2, 2022, 9:24 a.m. UTC | #5
On 2/28/2022 6:17 PM, James Prestwood wrote:
> Hi Alvin,
> 
> On Sat, 2022-02-26 at 11:27 +0000, Alvin Šipraga wrote:
>> Hi James,
>>
>> James Prestwood <prestwoj@gmail.com> writes:
>>
>>> Hi Alvin,
>>>
>>> On Fri, 2022-02-25 at 22:55 +0000, Alvin Šipraga wrote:
>>>> Hi James,
>>>>
>>>> James Prestwood <prestwoj@gmail.com> writes:
>>>>
>>>>> This driver does not advertise this feature yet scanning with
>>>>> on an
>>>>> AP interface appears to work just fine.
>>>>> ---
>>>>>   drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c |
>>>>> 2 ++
>>>>>   1 file changed, 2 insertions(+)
>>>>>
>>>>> I've submitted this patch mainly to start a discussion about
>>>>> it. I
>>>>> find it hard to believe that ALL brcmfmac devices support AP
>>>>> scanning
>>>>> in which case this feature needs to be limited to those devices
>>>>> only. Trouble is there is no FW feature for AP scanning AFAIK.
>>>>>
>>>>> In any case I think this driver needs to sort out if it
>>>>> supports
>>>>> this
>>>>> feature or not, and advertise as such rather than leaving
>>>>> userspace
>>>>> in the dark.
>>>>
>>>> By the way, what are the typical use-cases for AP scanning?
>>>>
>>>> I know that hostapd does a passive scan on the AP interface on
>>>> the
>>>> assumption that the driver/firmware will gather channel survey
>>>> data,
>>>> but
>>>> that's not a universally applicable assumption. Not all
>>>> implementations
>>>> will do that.
>>>
>>> We have someone wanting it for onboarding/configuring a new
>>> headless
>>> device. Where on boot, if it is unconfigured, it starts an AP and
>>> waits
>>> for a client to configure it.
>>>
>>> A client would connect, have the device scan and present available
>>> networks. The client then selects a network and provides
>>> credentials.
>>> The new device can then switch back to station mode and connect.
>>>
>>> This is a relatively common practice I've seen with IoT devices.
>>
>> Ah OK! Actually we do pretty much the same here at B&O with
>> brcmfmac. But rather than starting the AP on the primary interface
>> (the
>> one default created by the driver), we add a separate AP interface
>> with
>> the equivalent of the following command:
>>
>> # iw dev wlan0 add uap0 type __ap
>>
>> Here wlan0 is the primary interface, and uap0 is what I call my AP.
>>
>> In that case you can start the AP on uap0, but still do scanning on
>> wlan0 (which remains in station mode). Don't quote me on it, but I
>> think
>> this is the canonical approach with this driver. Is it something you
>> have considered?
> 
> Thanks, this does seem to work on brcmfmac. I had tried this on other
> hardware without any luck. I mentioned this to the user but since the
> AP scanning feature has been implemented they may want to still use
> that, but who knows. I think finding out if brcmfmac is intended to
> scan on the AP interface would still be good to know.

There is no easy answer to that. It really depends on the 
device/firmware. To be honest I don't know if the older chips can 
support it. Need to check that.

What device are you specifically looking at?

Regards,
Arend
James Prestwood March 2, 2022, 5:51 p.m. UTC | #6
Hi Arend,

On Wed, 2022-03-02 at 10:24 +0100, Arend van Spriel wrote:
> On 2/28/2022 6:17 PM, James Prestwood wrote:
> > Hi Alvin,
> > 
> > On Sat, 2022-02-26 at 11:27 +0000, Alvin Šipraga wrote:
> > > Hi James,
> > > 
> > > James Prestwood <prestwoj@gmail.com> writes:
> > > 
> > > > Hi Alvin,
> > > > 
> > > > On Fri, 2022-02-25 at 22:55 +0000, Alvin Šipraga wrote:
> > > > > Hi James,
> > > > > 
> > > > > James Prestwood <prestwoj@gmail.com> writes:
> > > > > 
> > > > > > This driver does not advertise this feature yet scanning
> > > > > > with
> > > > > > on an
> > > > > > AP interface appears to work just fine.
> > > > > > ---
> > > > > >   drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211
> > > > > > .c |
> > > > > > 2 ++
> > > > > >   1 file changed, 2 insertions(+)
> > > > > > 
> > > > > > I've submitted this patch mainly to start a discussion
> > > > > > about
> > > > > > it. I
> > > > > > find it hard to believe that ALL brcmfmac devices support
> > > > > > AP
> > > > > > scanning
> > > > > > in which case this feature needs to be limited to those
> > > > > > devices
> > > > > > only. Trouble is there is no FW feature for AP scanning
> > > > > > AFAIK.
> > > > > > 
> > > > > > In any case I think this driver needs to sort out if it
> > > > > > supports
> > > > > > this
> > > > > > feature or not, and advertise as such rather than leaving
> > > > > > userspace
> > > > > > in the dark.
> > > > > 
> > > > > By the way, what are the typical use-cases for AP scanning?
> > > > > 
> > > > > I know that hostapd does a passive scan on the AP interface
> > > > > on
> > > > > the
> > > > > assumption that the driver/firmware will gather channel
> > > > > survey
> > > > > data,
> > > > > but
> > > > > that's not a universally applicable assumption. Not all
> > > > > implementations
> > > > > will do that.
> > > > 
> > > > We have someone wanting it for onboarding/configuring a new
> > > > headless
> > > > device. Where on boot, if it is unconfigured, it starts an AP
> > > > and
> > > > waits
> > > > for a client to configure it.
> > > > 
> > > > A client would connect, have the device scan and present
> > > > available
> > > > networks. The client then selects a network and provides
> > > > credentials.
> > > > The new device can then switch back to station mode and
> > > > connect.
> > > > 
> > > > This is a relatively common practice I've seen with IoT
> > > > devices.
> > > 
> > > Ah OK! Actually we do pretty much the same here at B&O with
> > > brcmfmac. But rather than starting the AP on the primary
> > > interface
> > > (the
> > > one default created by the driver), we add a separate AP
> > > interface
> > > with
> > > the equivalent of the following command:
> > > 
> > > # iw dev wlan0 add uap0 type __ap
> > > 
> > > Here wlan0 is the primary interface, and uap0 is what I call my
> > > AP.
> > > 
> > > In that case you can start the AP on uap0, but still do scanning
> > > on
> > > wlan0 (which remains in station mode). Don't quote me on it, but
> > > I
> > > think
> > > this is the canonical approach with this driver. Is it something
> > > you
> > > have considered?
> > 
> > Thanks, this does seem to work on brcmfmac. I had tried this on
> > other
> > hardware without any luck. I mentioned this to the user but since
> > the
> > AP scanning feature has been implemented they may want to still use
> > that, but who knows. I think finding out if brcmfmac is intended to
> > scan on the AP interface would still be good to know.
> 
> There is no easy answer to that. It really depends on the 
> device/firmware. To be honest I don't know if the older chips can 
> support it. Need to check that.

Thats what I figured.

> 
> What device are you specifically looking at?

I've tried on a Raspberry Pi 3, which is a BCM4345 I believe.

But I'm not too concerned about knowing for this one device. We really
would like a general way to know, i.e. the feature flag. If this is
possible to set based on some FW values that would be great to do.
Otherwise, if its not possible, saying "No it doesn't support it" is
also fine with me, and we can continue on assuming brcmfmac as a whole
doesn't support it.

What is confusing (to me) is the lack of the feature flag but the
driver still accepts scans on AP interfaces, as well as accepting the
NL80211_SCAN_FLAG_AP. I would expect CMD_TRIGGER scan to fail with "Not
Supported".

Thanks,
James

> 
> Regards,
> Arend
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index fb727778312c..b6a50e65dbf6 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -7729,6 +7729,8 @@  struct brcmf_cfg80211_info *brcmf_cfg80211_attach(struct brcmf_pub *drvr,
 #endif
 	}
 
+	wiphy->features |= NL80211_FEATURE_AP_SCAN;
+
 	return cfg;
 
 detach: