Lines Matching +full:link +full:-

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
3 * KUnit tests for link selection functions
11 #include "link.h"
25 u8 chan_util; /* 0-255 , used only if has_chan_util_elem is true */
26 u8 chan_load_by_us; /* 0-100, used only if active is true */;
27 } link; member
33 .input.link = {
44 .input.link = {
55 .input.link = {
67 .input.link = {
78 static void setup_link(struct ieee80211_bss_conf *link) in setup_link() argument
81 struct iwl_mld *mld = test->priv; in setup_link()
83 (const void *)(test->param_value); in setup_link()
85 KUNIT_ALLOC_AND_ASSERT(test, link->bss); in setup_link()
87 link->bss->signal = DBM_TO_MBM(test_param->input.link.signal); in setup_link()
89 link->chanreq.oper = *test_param->input.link.chandef; in setup_link()
91 if (test_param->input.link.has_chan_util_elem) { in setup_link()
94 .channel_util = test_param->input.link.chan_util, in setup_link()
103 memcpy(ies->data, elem, elem_len); in setup_link()
104 ies->len = elem_len; in setup_link()
105 rcu_assign_pointer(link->bss->beacon_ies, ies); in setup_link()
106 rcu_assign_pointer(link->bss->ies, ies); in setup_link()
109 if (test_param->input.link.active) { in setup_link()
111 wiphy_dereference(mld->wiphy, link->chanctx_conf); in setup_link()
118 phy->channel_load_by_us = test_param->input.link.chan_load_by_us; in setup_link()
124 struct iwl_mld *mld = test->priv; in test_link_grading()
126 (const void *)(test->param_value); in test_link_grading()
128 struct ieee80211_bss_conf *link; in test_link_grading() local
131 u8 link_id = test_param->input.link.link_id; in test_link_grading()
132 bool active = test_param->input.link.active; in test_link_grading()
135 .chandef = test_param->input.link.chandef, in test_link_grading()
138 /* If the link is not active, use a different link as the assoc link */ in test_link_grading()
149 wiphy_lock(mld->wiphy); in test_link_grading()
150 link = wiphy_dereference(mld->wiphy, vif->link_conf[link_id]); in test_link_grading()
151 KUNIT_ASSERT_NOT_NULL(test, link); in test_link_grading()
153 setup_link(link); in test_link_grading()
155 actual_grade = iwl_mld_get_link_grade(mld, link); in test_link_grading()
156 wiphy_unlock(mld->wiphy); in test_link_grading()
159 KUNIT_EXPECT_EQ(test, actual_grade, test_param->expected_grade); in test_link_grading()
168 .name = "iwlmld-link-selection-tests",
184 .desc = "Unequal bandwidth, primary link inactive, EMLSR not allowed",
219 .desc = "Different bandwidths (2x ratio), primary link load permits EMLSR",
228 .desc = "Different bandwidths (4x ratio), primary link load permits EMLSR",
237 .desc = "Different bandwidths (16x ratio), primary link load insufficient",
287 const struct link_pair_case *params = test->param_value; in test_iwl_mld_link_pair_allows_emlsr()
288 struct iwl_mld *mld = test->priv; in test_iwl_mld_link_pair_allows_emlsr()
290 /* link A is the primary and link B is the secondary */ in test_iwl_mld_link_pair_allows_emlsr()
292 .chandef = params->chandef_a, in test_iwl_mld_link_pair_allows_emlsr()
296 .chandef = params->chandef_b, in test_iwl_mld_link_pair_allows_emlsr()
300 .chandef = params->primary_link_active ? a.chandef : b.chandef, in test_iwl_mld_link_pair_allows_emlsr()
301 .id = params->primary_link_active ? a.link_id : b.link_id, in test_iwl_mld_link_pair_allows_emlsr()
308 if (params->low_latency_vif) in test_iwl_mld_link_pair_allows_emlsr()
309 iwl_mld_vif_from_mac80211(vif)->low_latency_causes = 1; in test_iwl_mld_link_pair_allows_emlsr()
311 wiphy_lock(mld->wiphy); in test_iwl_mld_link_pair_allows_emlsr()
314 if (params->primary_link_active) { in test_iwl_mld_link_pair_allows_emlsr()
318 phy->avg_channel_load_not_by_us = params->chan_load_not_by_us; in test_iwl_mld_link_pair_allows_emlsr()
323 wiphy_unlock(mld->wiphy); in test_iwl_mld_link_pair_allows_emlsr()
325 KUNIT_EXPECT_EQ(test, result, params->expected_result); in test_iwl_mld_link_pair_allows_emlsr()