mirror of
https://github.com/armbian/build
synced 2025-09-24 19:47:06 +07:00
85 lines
3.3 KiB
Diff
85 lines
3.3 KiB
Diff
From 52ad7ed2ac1a591bc370574f13d2c7955ea22a53 Mon Sep 17 00:00:00 2001
|
|
From: Ting-Ying Li <tingying.li@cypress.com>
|
|
Date: Mon, 13 Apr 2020 02:39:44 -0500
|
|
Subject: [PATCH 044/179] brcmfmac: don't allow arp/nd offload to be enabled if
|
|
ap mode exists
|
|
|
|
Add a condition to determine whether arp/nd offload enabling
|
|
request is allowed. If there is any interface acts as ap
|
|
mode and is operating, then reject the request of arp oflload
|
|
enabling from cfg80211.
|
|
|
|
Signed-off-by: Ting-Ying Li <tingying.li@cypress.com>
|
|
---
|
|
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 17 ++++++++++++++++-
|
|
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 1 +
|
|
.../wireless/broadcom/brcm80211/brcmfmac/core.c | 5 +++++
|
|
3 files changed, 22 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
index 0f76e4c1bb1d..9815d9be8a95 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
|
|
@@ -772,6 +772,21 @@ void brcmf_set_mpc(struct brcmf_if *ifp, int mpc)
|
|
}
|
|
}
|
|
|
|
+bool brcmf_is_apmode_operating(struct wiphy *wiphy)
|
|
+{
|
|
+ struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
|
|
+ struct brcmf_cfg80211_vif *vif;
|
|
+ bool ret = false;
|
|
+
|
|
+ list_for_each_entry(vif, &cfg->vif_list, list) {
|
|
+ if (brcmf_is_apmode(vif) &&
|
|
+ test_bit(BRCMF_VIF_STATUS_AP_CREATED, &vif->sme_state))
|
|
+ ret = true;
|
|
+ }
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg,
|
|
struct brcmf_if *ifp, bool aborted,
|
|
bool fw_abort)
|
|
@@ -5075,8 +5090,8 @@ static int brcmf_cfg80211_stop_ap(struct wiphy *wiphy, struct net_device *ndev)
|
|
bphy_err(drvr, "bss_enable config failed %d\n", err);
|
|
}
|
|
brcmf_set_mpc(ifp, 1);
|
|
- brcmf_configure_arp_nd_offload(ifp, true);
|
|
clear_bit(BRCMF_VIF_STATUS_AP_CREATED, &ifp->vif->sme_state);
|
|
+ brcmf_configure_arp_nd_offload(ifp, true);
|
|
brcmf_net_setcarrier(ifp, false);
|
|
|
|
return err;
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
|
index 118a47e1dd7f..2fe90639e65b 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
|
|
@@ -486,5 +486,6 @@ s32 brcmf_notify_escan_complete(struct brcmf_cfg80211_info *cfg,
|
|
void brcmf_set_mpc(struct brcmf_if *ndev, int mpc);
|
|
void brcmf_abort_scanning(struct brcmf_cfg80211_info *cfg);
|
|
void brcmf_cfg80211_free_netdev(struct net_device *ndev);
|
|
+bool brcmf_is_apmode_operating(struct wiphy *wiphy);
|
|
|
|
#endif /* BRCMFMAC_CFG80211_H */
|
|
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
index 6570f83da931..6587d0d92950 100644
|
|
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c
|
|
@@ -104,6 +104,11 @@ void brcmf_configure_arp_nd_offload(struct brcmf_if *ifp, bool enable)
|
|
s32 err;
|
|
u32 mode;
|
|
|
|
+ if (enable && brcmf_is_apmode_operating(ifp->drvr->wiphy)) {
|
|
+ brcmf_dbg(TRACE, "Skip ARP/ND offload enable when soft AP is running\n");
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (enable)
|
|
mode = BRCMF_ARP_OL_AGENT | BRCMF_ARP_OL_PEER_AUTO_REPLY;
|
|
else
|
|
--
|
|
2.17.1
|
|
|