wifi: cfg80211: skip indicating signal for per-STA profile BSSs
authorVeerendranath Jakkam <quic_vjakkam@quicinc.com>
Wed, 4 Sep 2024 03:09:16 +0000 (08:39 +0530)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 6 Sep 2024 10:56:33 +0000 (12:56 +0200)
Currently signal of the BSS entry generated from the per-STA profile
indicated as zero, but userspace may consider it as high signal
strength since 0 dBm is a valid RSSI value.

To avoid this don't report the signal to userspace when the BSS entry
created from a per-STA profile.

Signed-off-by: Veerendranath Jakkam <quic_vjakkam@quicinc.com>
Link: https://patch.msgid.link/20240904030917.3602369-3-quic_vjakkam@quicinc.com
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
net/wireless/core.h
net/wireless/nl80211.c
net/wireless/scan.c

index eace1800f5de89d6278897f5525be24ac416de8f..3b3e3cd7027ac602f32db6868db9228d0aaea934 100644 (file)
@@ -197,6 +197,8 @@ struct cfg80211_internal_bss {
         */
        u8 parent_bssid[ETH_ALEN] __aligned(2);
 
+       enum bss_source_type bss_source;
+
        /* must be last because of priv member */
        struct cfg80211_bss pub;
 };
index b368e23847ddb1aeaf39c4a0af1bc68fa4571889..3a11a1a74a5466f92ad14f28b00eae33a260be47 100644 (file)
@@ -10507,17 +10507,21 @@ static int nl80211_send_bss(struct sk_buff *msg, struct netlink_callback *cb,
                                NL80211_BSS_CHAIN_SIGNAL))
                goto nla_put_failure;
 
-       switch (rdev->wiphy.signal_type) {
-       case CFG80211_SIGNAL_TYPE_MBM:
-               if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM, res->signal))
-                       goto nla_put_failure;
-               break;
-       case CFG80211_SIGNAL_TYPE_UNSPEC:
-               if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC, res->signal))
-                       goto nla_put_failure;
-               break;
-       default:
-               break;
+       if (intbss->bss_source != BSS_SOURCE_STA_PROFILE) {
+               switch (rdev->wiphy.signal_type) {
+               case CFG80211_SIGNAL_TYPE_MBM:
+                       if (nla_put_u32(msg, NL80211_BSS_SIGNAL_MBM,
+                                       res->signal))
+                               goto nla_put_failure;
+                       break;
+               case CFG80211_SIGNAL_TYPE_UNSPEC:
+                       if (nla_put_u8(msg, NL80211_BSS_SIGNAL_UNSPEC,
+                                      res->signal))
+                               goto nla_put_failure;
+                       break;
+               default:
+                       break;
+               }
        }
 
        switch (wdev->iftype) {
index 2d898762853069a9f2cb6037f9685841a551db69..c1417f7cd0295493e8b40772192ad36bac2ba933 100644 (file)
@@ -1910,6 +1910,7 @@ cfg80211_update_known_bss(struct cfg80211_registered_device *rdev,
        known->pub.bssid_index = new->pub.bssid_index;
        known->pub.use_for &= new->pub.use_for;
        known->pub.cannot_use_reasons = new->pub.cannot_use_reasons;
+       known->bss_source = new->bss_source;
 
        return true;
 }
@@ -2264,6 +2265,7 @@ cfg80211_inform_single_bss_data(struct wiphy *wiphy,
               IEEE80211_MAX_CHAINS);
        tmp.pub.use_for = data->use_for;
        tmp.pub.cannot_use_reasons = data->cannot_use_reasons;
+       tmp.bss_source = data->bss_source;
 
        switch (data->bss_source) {
        case BSS_SOURCE_MBSSID: