From acfc312466e23b7f6e72da6fc5683de56639f38c Mon Sep 17 00:00:00 2001 From: Dennis Jeon Date: Thu, 2 Nov 2023 13:51:17 -0400 Subject: bcmdhd: Fixed blacklist connection failure In current design, the blocklist only restricts roaming case, not connection case, which meanings driver still triggers the connection to a bssid which is in the blocklist. Fix the logic, and let the blocklist for both roaming and connection case. Bug: 294803097 Bug: 297586285 Test: passed in bench test Change-Id: Id259be9b3217cf25373dde8eda56c634f5b20757 Signed-off-by: Dennis Jeon --- wl_android.c | 74 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ wl_android.h | 4 ++++ wl_cfg80211.c | 18 ++++++-------- wl_cfgvendor.c | 10 ++++---- 4 files changed, 91 insertions(+), 15 deletions(-) diff --git a/wl_android.c b/wl_android.c index 3aa7844..6569172 100644 --- a/wl_android.c +++ b/wl_android.c @@ -15094,3 +15094,77 @@ exit: return bytes_written; } #endif /* SUPPORT_AP_INIT_BWCONF */ + +s32 +wl_android_set_blacklist_bssid(struct net_device *dev, maclist_t *blacklist, + uint32 len, uint32 flush) +{ + s32 err; + s32 macmode; + + if (blacklist) { + err = wldev_ioctl_set(dev, WLC_SET_MACLIST, (u8 *)blacklist, len); + if (err != BCME_OK) { + WL_ERR(("WLC_SET_MACLIST failed %d\n", err)); + return err; + } + } + /* By default programming blacklist flushes out old values */ + macmode = (flush && !blacklist) ? WLC_MACMODE_DISABLED : WLC_MACMODE_DENY; + err = wldev_ioctl_set(dev, WLC_SET_MACMODE, (u8 *)&macmode, sizeof(macmode)); + if (err != BCME_OK) { + WL_ERR(("WLC_SET_MACMODE %d failed %d\n", macmode, err)); + } else { + WL_INFORM_MEM(("WLC_SET_MACMODE %d applied\n", macmode)); + } + return err; +} + +s32 +wl_android_set_whitelist_ssid(struct net_device *dev, wl_ssid_whitelist_t *ssid_whitelist, + uint32 len, uint32 flush) +{ + s32 err; + u8 *buf; + u32 buf_len = WLC_IOCTL_MEDLEN; + wl_ssid_whitelist_t whitelist_ssid_flush; + struct bcm_cfg80211 *cfg = wl_get_cfg(dev); + + if (!ssid_whitelist) { + if (flush) { + ssid_whitelist = &whitelist_ssid_flush; + ssid_whitelist->ssid_count = 0; + } else { + WL_ERR(("%s : Nothing to do here\n", __FUNCTION__)); + return BCME_BADARG; + } + } + + buf = (char *)MALLOC(cfg->osh, buf_len); + if (buf == NULL) { + WL_ERR(("failed to allocated memory %d bytes\n", + WLC_IOCTL_MEDLEN)); + return -ENOMEM; + } + + if ((len + strlen("roam_exp_ssid_whitelist")) >= buf_len) { + WL_ERR(("unexpected len for ssid blklist:%d\n", len)); + err = -EINVAL; + goto exit; + } + + ssid_whitelist->version = SSID_WHITELIST_VERSION_1; + ssid_whitelist->flags = flush ? ROAM_EXP_CLEAR_SSID_WHITELIST : 0; + err = wldev_iovar_setbuf(dev, "roam_exp_ssid_whitelist", + (u8 *)ssid_whitelist, len, buf, buf_len, NULL); + if (err != BCME_OK) { + if (err == BCME_UNSUPPORTED) { + WL_ERR(("roam_exp_bssid_pref, UNSUPPORTED \n")); + } else { + WL_ERR(("Failed to execute roam_exp_bssid_pref %d\n", err)); + } + } +exit: + MFREE(cfg->osh, buf, buf_len); + return err; +} diff --git a/wl_android.h b/wl_android.h index 5e330f3..5120c41 100644 --- a/wl_android.h +++ b/wl_android.h @@ -156,6 +156,10 @@ s32 wl_netlink_send_msg(int pid, int type, int seq, const void *data, size_t siz #define APCS_DEFAULT_5G_CH 149 #define APCS_DEFAULT_6G_CH 5 +extern int wl_android_set_whitelist_ssid(struct net_device *dev, + wl_ssid_whitelist_t *ssid_whitelist, uint32 len, uint32 flush); +extern int wl_android_set_blacklist_bssid(struct net_device *dev, maclist_t *blacklist, + uint32 len, uint32 flush); int wl_android_set_ap_mac_list(struct net_device *dev, int macmode, struct maclist *maclist); #ifdef WL_BCNRECV extern int wl_android_bcnrecv_config(struct net_device *ndev, char *data, diff --git a/wl_cfg80211.c b/wl_cfg80211.c index d655e1b..5d36997 100644 --- a/wl_cfg80211.c +++ b/wl_cfg80211.c @@ -6132,17 +6132,6 @@ wl_do_preassoc_ops(struct bcm_cfg80211 *cfg, wl_restore_ap_bw(cfg); } #endif /* SUPPORT_AP_BWCTRL */ -#if defined(ROAMEXP_SUPPORT) - /* Clear Blacklist bssid and Whitelist ssid list before join issue - * This is temporary fix since currently firmware roaming is not - * disabled by android framework before SSID join from framework - */ - /* Flush blacklist bssid content */ - dhd_dev_set_blacklist_bssid(dev, NULL, 0, true); - /* Flush whitelist ssid content */ - dhd_dev_set_whitelist_ssid(dev, NULL, 0, true); -#endif /* ROAMEXP_SUPPORT */ - WL_DBG(("SME IE : len=%zu\n", sme->ie_len)); if (sme->ie != NULL && sme->ie_len > 0 && (wl_dbg_level & WL_DBG_DBG)) { prhex(NULL, sme->ie, sme->ie_len); @@ -12845,6 +12834,13 @@ wl_post_linkdown_ops(struct bcm_cfg80211 *cfg, } #endif /* SUPPORT_SET_TID */ +#if defined(ROAMEXP_SUPPORT) + /* Flush blacklist bssid content */ + wl_android_set_blacklist_bssid(ndev, NULL, 0, TRUE); + /* Flush whitelist ssid content */ + wl_android_set_whitelist_ssid(ndev, NULL, 0, TRUE); +#endif /* ROAMEXP_SUPPORT */ + return ret; } diff --git a/wl_cfgvendor.c b/wl_cfgvendor.c index da8ee12..91bcbcc 100755 --- a/wl_cfgvendor.c +++ b/wl_cfgvendor.c @@ -2845,6 +2845,7 @@ wl_cfgvendor_set_bssid_blacklist(struct wiphy *wiphy, err = -EINVAL; goto exit; } + WL_INFORM_MEM(("blacklist_flush:%d\n", flush)); break; case GSCAN_ATTRIBUTE_BLACKLIST_BSSID: if (num == 0 || !blacklist) { @@ -2863,8 +2864,9 @@ wl_cfgvendor_set_bssid_blacklist(struct wiphy *wiphy, err = -EINVAL; goto exit; } - memcpy(&(blacklist->ea[blacklist->count]), nla_data(iter), - ETHER_ADDR_LEN); + WL_INFORM_MEM(("blacklist mac_addr:" MACDBG "\n", + MAC2STRDBG(nla_data(iter)))); + eacopy(nla_data(iter), &(blacklist->ea[blacklist->count])); blacklist->count++; break; default: @@ -2880,8 +2882,8 @@ wl_cfgvendor_set_bssid_blacklist(struct wiphy *wiphy, goto exit; } - err = dhd_dev_set_blacklist_bssid(bcmcfg_to_prmry_ndev(cfg), - blacklist, mem_needed, flush); + err = wl_android_set_blacklist_bssid(wdev_to_ndev(wdev), blacklist, + mem_needed, flush); exit: MFREE(cfg->osh, blacklist, mem_needed); return err; -- cgit v1.2.3 From dbe39df719e03c250359c53e175aaa008dde5a67 Mon Sep 17 00:00:00 2001 From: Dewey Lee Date: Thu, 26 Oct 2023 13:34:35 +0900 Subject: bcmdhd: Fixed clm restricted channels to be filtered out for p2p gc case For P22, the driver doesn't support passive channels for entire p2p. Therefore, fixed clm restricted channels to be filtered out from usable channels for p2p gc. Bug: 292411619 Test: Verified with Pixel device Signed-off-by: Dewey Lee Change-Id: I1bf7e1a9ae102be02b5942cc289f840b4fd7c6c7 --- wl_cfg80211.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wl_cfg80211.c b/wl_cfg80211.c index 5d36997..3802ed0 100644 --- a/wl_cfg80211.c +++ b/wl_cfg80211.c @@ -25718,7 +25718,7 @@ int wl_get_usable_channels(struct bcm_cfg80211 *cfg, usable_channel_info_t *u_in } /* Supplicant does scan passive channel but not for DFS channel */ - if (!(chaninfo & WL_CHAN_RADAR) && !ch_160mhz_5g && + if (!restrict_chan && !ch_160mhz_5g && !CHSPEC_IS6G(chspec) && (!is_unii4)) { mask |= (1 << WIFI_INTERFACE_P2P_CLIENT); } -- cgit v1.2.3 From c6b6411e0e6f013f060103689205ba7c713f3cd8 Mon Sep 17 00:00:00 2001 From: Sungjoon Park Date: Tue, 14 Nov 2023 22:54:30 +0900 Subject: bcmdhd: Fixed to apply the DHD_SKIP_COREDUMP_ON_HC properly Enable the DHD_SKIP_COREDUMP_ON_HC for Google project. Bug: 310808379 Test: Verified on simulated by adding 10s delay in wlan_oob_irq Change-Id: I89936e9d327bb69867699408608037e10c8dda08 Signed-off-by: Sungjoon Park --- Kbuild | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Kbuild b/Kbuild index c36f095..629255c 100644 --- a/Kbuild +++ b/Kbuild @@ -298,12 +298,12 @@ DHDCFLAGS += -DDHD_HAL_RING_DUMP_MEMDUMP DHDCFLAGS += -DDHD_DUMP_START_COMMAND # Enable pktid logging DHDCFLAGS += -DDHD_MAP_PKTID_LOGGING +# Skip coredump for certain health check traps +DHDCFLAGS += -DDHD_SKIP_COREDUMP_ON_HC else DHDCFLAGS += -DDHD_FILE_DUMP_EVENT # The debug dump file path is blank in DHD, it is defined in HAL. DHDCFLAGS += -DDHD_COMMON_DUMP_PATH="\"/\"" -# Skip coredump for certain health check traps -DHDCFLAGS += -DDHD_SKIP_COREDUMP_ON_HC endif DHDCFLAGS := $(filter-out -DDHD_DUMP_FILE_WRITE_FROM_KERNEL ,$(DHDCFLAGS)) endif -- cgit v1.2.3