diff mbox series

[1/3] brcmfmac: support AP isolate

Message ID 1584604406-15452-2-git-send-email-wright.feng@cypress.com (mailing list archive)
State Changes Requested
Delegated to: Kalle Valo
Headers show
Series Add AP isolate support and two modules parameters | expand

Commit Message

Wright Feng March 19, 2020, 7:53 a.m. UTC
Hostap daemon has a parameter "ap_isolate" which is used to prevent
low-level bridging of frames between associated stations in the BSS.
For driver side, we add cfg80211 ops method change_bss to support
setting AP isolate from user space.

Signed-off-by: Wright Feng <wright.feng@cypress.com>
Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
---
 .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

Comments

Arend van Spriel March 19, 2020, 8:48 a.m. UTC | #1
On 3/19/2020 8:53 AM, Wright Feng wrote:
> Hostap daemon has a parameter "ap_isolate" which is used to prevent
> low-level bridging of frames between associated stations in the BSS.
> For driver side, we add cfg80211 ops method change_bss to support
> setting AP isolate from user space.
> 
> Signed-off-by: Wright Feng <wright.feng@cypress.com>
> Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
> ---
>   .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 21 +++++++++++++++++++++
>   1 file changed, 21 insertions(+)
> 
> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> index a2328d3..eb49900 100644
> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c

[...]

> @@ -5421,6 +5441,7 @@ static struct cfg80211_ops brcmf_cfg80211_ops = {
>   	.update_connect_params = brcmf_cfg80211_update_conn_params,
>   	.set_pmk = brcmf_cfg80211_set_pmk,
>   	.del_pmk = brcmf_cfg80211_del_pmk,
> +	.change_bss = brcmf_cfg80211_change_bss,

maybe only add this when firmware support "ap_isolate"?

Regards,
Arend
Wright Feng March 20, 2020, 8:04 a.m. UTC | #2
Arend Van Spriel 於 3/19/2020 4:48 PM 寫道:
> On 3/19/2020 8:53 AM, Wright Feng wrote:
>> Hostap daemon has a parameter "ap_isolate" which is used to prevent
>> low-level bridging of frames between associated stations in the BSS.
>> For driver side, we add cfg80211 ops method change_bss to support
>> setting AP isolate from user space.
>>
>> Signed-off-by: Wright Feng <wright.feng@cypress.com>
>> Signed-off-by: Chi-hsien Lin <chi-hsien.lin@cypress.com>
>> ---
>>   .../wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 21 
>> +++++++++++++++++++++
>>   1 file changed, 21 insertions(+)
>>
>> diff --git 
>> a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c 
>> b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> index a2328d3..eb49900 100644
>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
> 
> [...]
> 
>> @@ -5421,6 +5441,7 @@ static struct cfg80211_ops brcmf_cfg80211_ops = {
>>       .update_connect_params = brcmf_cfg80211_update_conn_params,
>>       .set_pmk = brcmf_cfg80211_set_pmk,
>>       .del_pmk = brcmf_cfg80211_del_pmk,
>> +    .change_bss = brcmf_cfg80211_change_bss,
> 
> maybe only add this when firmware support "ap_isolate"?
Sounds great, will do it in V2.
> 
> 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 a2328d3..eb49900 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5376,6 +5376,26 @@  static int brcmf_cfg80211_del_pmk(struct wiphy *wiphy, struct net_device *dev,
 	return brcmf_set_pmk(ifp, NULL, 0);
 }
 
+static int
+brcmf_cfg80211_change_bss(struct wiphy *wiphy, struct net_device *dev,
+			  struct bss_parameters *params)
+{
+	struct brcmf_if *ifp;
+	int ret = 0;
+	u32 ap_isolate;
+
+	brcmf_dbg(TRACE, "Enter\n");
+	ifp = netdev_priv(dev);
+	if (params->ap_isolate >= 0) {
+		ap_isolate = (u32)params->ap_isolate;
+		ret = brcmf_fil_iovar_int_set(ifp, "ap_isolate", ap_isolate);
+		if (ret < 0)
+			brcmf_err("ap_isolate iovar failed: ret=%d\n", ret);
+	}
+
+	return ret;
+}
+
 static struct cfg80211_ops brcmf_cfg80211_ops = {
 	.add_virtual_intf = brcmf_cfg80211_add_iface,
 	.del_virtual_intf = brcmf_cfg80211_del_iface,
@@ -5421,6 +5441,7 @@  static struct cfg80211_ops brcmf_cfg80211_ops = {
 	.update_connect_params = brcmf_cfg80211_update_conn_params,
 	.set_pmk = brcmf_cfg80211_set_pmk,
 	.del_pmk = brcmf_cfg80211_del_pmk,
+	.change_bss = brcmf_cfg80211_change_bss,
 };
 
 struct cfg80211_ops *brcmf_cfg80211_get_ops(struct brcmf_mp_device *settings)