From: Louis Kotze <loukot@gmail.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: linux-wireless@vger.kernel.org, linux-kernel@vger.kernel.org,
loukot@gmail.com
Subject: [PATCH v3 2/2] wifi: cfg80211: tests: check BSS lookup failure reasons
Date: Wed, 22 Jul 2026 09:07:34 +0200 [thread overview]
Message-ID: <20260722070734.3612581-3-loukot@gmail.com> (raw)
In-Reply-To: <20260722070734.3612581-1-loukot@gmail.com>
Add a KUnit test for the extack failure reasons that
__cfg80211_get_bss() now reports: no matching scan entry at all, a
matching entry that is expired, and a matching entry whose use_for
flags do not allow the requested use. Also cover the cases that must
not report a failure (a fresh entry, and an expired-but-held entry),
an entry that is both expired and unusable, and the combined message
when one matching entry is expired while another is current but
unusable.
Signed-off-by: Louis Kotze <loukot@gmail.com>
---
v3: message strings updated to match patch 1; the cross-entry case
now checks the combined message.
net/wireless/tests/scan.c | 119 ++++++++++++++++++++++++++++++++++++++
1 file changed, 119 insertions(+)
diff --git a/net/wireless/tests/scan.c b/net/wireless/tests/scan.c
index 2fc717317ac3..8c20278b5d3a 100644
--- a/net/wireless/tests/scan.c
+++ b/net/wireless/tests/scan.c
@@ -402,6 +402,124 @@ static void test_inform_bss_ssid_only(struct kunit *test)
cfg80211_put_bss(wiphy, bss);
}
+static void test_get_bss_miss_reason(struct kunit *test)
+{
+ struct inform_bss ctx = {
+ .test = test,
+ };
+ struct wiphy *wiphy = T_WIPHY(test, ctx);
+ struct cfg80211_inform_bss inform_bss = {
+ .signal = 50,
+ .drv_data = &ctx,
+ };
+ const u8 bssid[ETH_ALEN] = { 0x10, 0x22, 0x33, 0x44, 0x55, 0x66 };
+ const u8 other_bssid[ETH_ALEN] = { 0x66, 0x55, 0x44, 0x33, 0x22, 0x11 };
+ static const u8 ies[] = {
+ [0] = WLAN_EID_SSID,
+ [1] = 4,
+ [2] = 'T', 'E', 'S', 'T'
+ };
+ struct cfg80211_internal_bss *ibss;
+ struct netlink_ext_ack extack = {};
+ struct cfg80211_bss *bss, *bss2, *found;
+
+ inform_bss.chan = ieee80211_get_channel_khz(wiphy, MHZ_TO_KHZ(2412));
+ KUNIT_ASSERT_NOT_NULL(test, inform_bss.chan);
+
+ bss = cfg80211_inform_bss_data(wiphy, &inform_bss,
+ CFG80211_BSS_FTYPE_PRESP, bssid, 0,
+ 0x1234, 100, ies, sizeof(ies),
+ GFP_KERNEL);
+ KUNIT_ASSERT_NOT_NULL(test, bss);
+ ibss = container_of(bss, struct cfg80211_internal_bss, pub);
+
+ /* Fresh usable entry: found, no message is set */
+ found = __cfg80211_get_bss(wiphy, NULL, bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_ASSERT_PTR_EQ(test, found, bss);
+ KUNIT_EXPECT_NULL(test, extack._msg);
+ cfg80211_put_bss(wiphy, found);
+
+ /* No entry at all for this BSSID */
+ found = __cfg80211_get_bss(wiphy, NULL, other_bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_EXPECT_NULL(test, found);
+ KUNIT_EXPECT_STREQ(test, extack._msg, "BSS not found in scan results");
+
+ /* Fresh entry that is not usable for the requested use */
+ extack._msg = NULL;
+ bss->use_for = 0;
+ found = __cfg80211_get_bss(wiphy, NULL, bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_EXPECT_NULL(test, found);
+ KUNIT_EXPECT_STREQ(test, extack._msg,
+ "BSS cannot be used for the requested operation");
+ bss->use_for = NL80211_BSS_USE_FOR_ALL;
+
+ /* Expired entry, > IEEE80211_SCAN_RESULT_EXPIRE (30s) old */
+ extack._msg = NULL;
+ ibss->ts = jiffies - 60 * HZ;
+ found = __cfg80211_get_bss(wiphy, NULL, bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_EXPECT_NULL(test, found);
+ KUNIT_EXPECT_STREQ(test, extack._msg,
+ "BSS entry in scan results is expired");
+
+ /* An entry both expired and unusable reports expired */
+ extack._msg = NULL;
+ bss->use_for = 0;
+ found = __cfg80211_get_bss(wiphy, NULL, bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_EXPECT_NULL(test, found);
+ KUNIT_EXPECT_STREQ(test, extack._msg,
+ "BSS entry in scan results is expired");
+ bss->use_for = NL80211_BSS_USE_FOR_ALL;
+
+ /* Expired but held entries are still usable, no message is set */
+ extack._msg = NULL;
+ atomic_set(&ibss->hold, 1);
+ found = __cfg80211_get_bss(wiphy, NULL, bssid, NULL, 0,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_ASSERT_PTR_EQ(test, found, bss);
+ KUNIT_EXPECT_NULL(test, extack._msg);
+ cfg80211_put_bss(wiphy, found);
+ atomic_set(&ibss->hold, 0);
+
+ /*
+ * With one matching entry expired and another current but
+ * unusable, both reasons are reported.
+ */
+ bss2 = cfg80211_inform_bss_data(wiphy, &inform_bss,
+ CFG80211_BSS_FTYPE_PRESP, other_bssid,
+ 0, 0x1234, 100, ies, sizeof(ies),
+ GFP_KERNEL);
+ KUNIT_ASSERT_NOT_NULL(test, bss2);
+ bss2->use_for = 0;
+ extack._msg = NULL;
+ found = __cfg80211_get_bss(wiphy, NULL, NULL, "TEST", 4,
+ IEEE80211_BSS_TYPE_ANY,
+ IEEE80211_PRIVACY_ANY,
+ NL80211_BSS_USE_FOR_NORMAL, &extack);
+ KUNIT_EXPECT_NULL(test, found);
+ KUNIT_EXPECT_STREQ(test, extack._msg,
+ "BSS entries are expired or cannot be used for the requested operation");
+
+ cfg80211_put_bss(wiphy, bss2);
+ cfg80211_put_bss(wiphy, bss);
+}
+
static struct inform_bss_ml_sta_case {
const char *desc;
int mld_id;
@@ -855,6 +973,7 @@ kunit_test_suite(gen_new_ie);
static struct kunit_case inform_bss_test_cases[] = {
KUNIT_CASE(test_inform_bss_ssid_only),
+ KUNIT_CASE(test_get_bss_miss_reason),
KUNIT_CASE_PARAM(test_inform_bss_ml_sta, inform_bss_ml_sta_gen_params),
{}
};
--
2.55.0
next prev parent reply other threads:[~2026-07-22 7:07 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-11 4:34 [PATCH] wifi: nl80211: say why the association BSS lookup failed Louis Kotze
2026-07-21 15:31 ` Johannes Berg
2026-07-21 18:11 ` [PATCH v2 0/2] wifi: cfg80211: say why the auth/assoc " Louis Kotze
2026-07-21 18:11 ` [PATCH v2 1/2] " Louis Kotze
2026-07-21 22:10 ` Johannes Berg
2026-07-22 7:07 ` Louis Kotze
2026-07-22 7:07 ` [PATCH v3 0/2] " Louis Kotze
2026-07-22 7:07 ` [PATCH v3 1/2] " Louis Kotze
2026-07-22 7:07 ` Louis Kotze [this message]
2026-07-21 18:11 ` [PATCH v2 2/2] wifi: cfg80211: tests: check BSS lookup failure reasons Louis Kotze
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260722070734.3612581-3-loukot@gmail.com \
--to=loukot@gmail.com \
--cc=johannes@sipsolutions.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-wireless@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.