mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-19 22:11:22 +00:00

Instead of building invalid chandefs on the fly, use only chandefs throughout and ensure those are valid. Also add more chandefs that will be needed for new tests. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com> Link: https://patch.msgid.link/20250430151952.6643fa8773f1.I644e9053d222a772e1d109799c4bfa0677add4d7@changeid
110 lines
2.5 KiB
C
110 lines
2.5 KiB
C
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
|
|
/*
|
|
* KUnit tests for channel helper functions
|
|
*
|
|
* Copyright (C) 2024-2025 Intel Corporation
|
|
*/
|
|
#include <kunit/static_stub.h>
|
|
|
|
#include "utils.h"
|
|
#include "mld.h"
|
|
#include "link.h"
|
|
#include "iface.h"
|
|
#include "fw/api/mac-cfg.h"
|
|
|
|
static const struct missed_beacon_test_case {
|
|
const char *desc;
|
|
struct {
|
|
struct iwl_missed_beacons_notif notif;
|
|
bool emlsr;
|
|
} input;
|
|
struct {
|
|
bool disconnected;
|
|
bool emlsr;
|
|
} output;
|
|
} missed_beacon_cases[] = {
|
|
{
|
|
.desc = "no EMLSR, no disconnect",
|
|
.input.notif = {
|
|
.consec_missed_beacons = cpu_to_le32(4),
|
|
},
|
|
},
|
|
{
|
|
.desc = "no EMLSR, no beacon loss since Rx, no disconnect",
|
|
.input.notif = {
|
|
.consec_missed_beacons = cpu_to_le32(20),
|
|
},
|
|
},
|
|
{
|
|
.desc = "no EMLSR, beacon loss since Rx, disconnect",
|
|
.input.notif = {
|
|
.consec_missed_beacons = cpu_to_le32(20),
|
|
.consec_missed_beacons_since_last_rx =
|
|
cpu_to_le32(10),
|
|
},
|
|
.output.disconnected = true,
|
|
},
|
|
};
|
|
|
|
KUNIT_ARRAY_PARAM_DESC(test_missed_beacon, missed_beacon_cases, desc);
|
|
|
|
static void fake_ieee80211_connection_loss(struct ieee80211_vif *vif)
|
|
{
|
|
vif->cfg.assoc = false;
|
|
}
|
|
|
|
static void test_missed_beacon(struct kunit *test)
|
|
{
|
|
struct iwl_mld *mld = test->priv;
|
|
struct iwl_missed_beacons_notif *notif;
|
|
const struct missed_beacon_test_case *test_param =
|
|
(const void *)(test->param_value);
|
|
struct ieee80211_vif *vif;
|
|
struct iwl_rx_packet *pkt;
|
|
struct iwl_mld_kunit_link link1 = {
|
|
.id = 0,
|
|
.chandef = &chandef_6ghz_160mhz,
|
|
};
|
|
struct iwl_mld_kunit_link link2 = {
|
|
.id = 1,
|
|
.chandef = &chandef_5ghz_80mhz,
|
|
};
|
|
|
|
kunit_activate_static_stub(test, ieee80211_connection_loss,
|
|
fake_ieee80211_connection_loss);
|
|
pkt = iwl_mld_kunit_create_pkt(test_param->input.notif);
|
|
notif = (void *)pkt->data;
|
|
|
|
if (test_param->input.emlsr) {
|
|
vif = iwlmld_kunit_assoc_emlsr(&link1, &link2);
|
|
} else {
|
|
struct iwl_mld_vif *mld_vif;
|
|
|
|
vif = iwlmld_kunit_setup_non_mlo_assoc(&link1);
|
|
mld_vif = iwl_mld_vif_from_mac80211(vif);
|
|
notif->link_id = cpu_to_le32(mld_vif->deflink.fw_id);
|
|
}
|
|
|
|
wiphy_lock(mld->wiphy);
|
|
|
|
iwl_mld_handle_missed_beacon_notif(mld, pkt);
|
|
|
|
wiphy_unlock(mld->wiphy);
|
|
|
|
KUNIT_ASSERT_NE(test, vif->cfg.assoc, test_param->output.disconnected);
|
|
|
|
/* TODO: add test cases for esr and check */
|
|
}
|
|
|
|
static struct kunit_case link_cases[] = {
|
|
KUNIT_CASE_PARAM(test_missed_beacon, test_missed_beacon_gen_params),
|
|
{},
|
|
};
|
|
|
|
static struct kunit_suite link = {
|
|
.name = "iwlmld-link",
|
|
.test_cases = link_cases,
|
|
.init = iwlmld_kunit_test_init,
|
|
};
|
|
|
|
kunit_test_suite(link);
|