Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

wifi: cfg80211: tests: verify BSS use flags of NSTR links

Extend the test to pass an RNR appropriate for an NSTR and verify that
use_for as well as cannot_use_reasons are set correctly.

Signed-off-by: Benjamin Berg <benjamin.berg@intel.com>
Link: https://msgid.link/20240129220918.b00aee4c4c9f.I942fddf51cabaab761de3865b4e06cce831a46ef@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>

authored by

Benjamin Berg and committed by
Johannes Berg
cfbb2add 45d43937

+56 -12
+56 -12
net/wireless/tests/scan.c
··· 407 407 int mld_id; 408 408 bool sta_prof_vendor_elems; 409 409 bool include_oper_class; 410 + bool nstr; 410 411 } inform_bss_ml_sta_cases[] = { 411 412 { 412 413 .desc = "zero_mld_id", ··· 427 426 .mld_id = 1, 428 427 .sta_prof_vendor_elems = true, 429 428 .include_oper_class = true, 429 + }, { 430 + .desc = "nstr", 431 + .mld_id = 0, 432 + .nstr = true, 430 433 }, 431 434 }; 432 435 KUNIT_ARRAY_PARAM_DESC(inform_bss_ml_sta, inform_bss_ml_sta_cases, desc) ··· 463 458 struct { 464 459 struct ieee80211_neighbor_ap_info info; 465 460 struct ieee80211_tbtt_info_ge_11 ap; 466 - } __packed rnr = { 461 + } __packed rnr_normal = { 467 462 .info = { 468 463 .tbtt_info_hdr = u8_encode_bits(0, IEEE80211_AP_INFO_TBTT_HDR_COUNT), 469 464 .tbtt_info_len = sizeof(struct ieee80211_tbtt_info_ge_11), ··· 482 477 IEEE80211_RNR_MLD_PARAMS_LINK_ID), 483 478 } 484 479 }; 480 + struct { 481 + struct ieee80211_neighbor_ap_info info; 482 + struct ieee80211_rnr_mld_params mld_params; 483 + } __packed rnr_nstr = { 484 + .info = { 485 + .tbtt_info_hdr = 486 + u8_encode_bits(0, IEEE80211_AP_INFO_TBTT_HDR_COUNT) | 487 + u8_encode_bits(IEEE80211_TBTT_INFO_TYPE_MLD, 488 + IEEE80211_AP_INFO_TBTT_HDR_TYPE), 489 + .tbtt_info_len = sizeof(struct ieee80211_rnr_mld_params), 490 + .op_class = 81, 491 + .channel = 11, 492 + }, 493 + .mld_params = { 494 + .mld_id = params->mld_id, 495 + .params = 496 + le16_encode_bits(link_id, 497 + IEEE80211_RNR_MLD_PARAMS_LINK_ID), 498 + } 499 + }; 500 + size_t rnr_len = params->nstr ? sizeof(rnr_nstr) : sizeof(rnr_normal); 501 + void *rnr = params->nstr ? (void *)&rnr_nstr : (void *)&rnr_normal; 485 502 struct { 486 503 __le16 control; 487 504 u8 var_len; ··· 543 516 u16_encode_bits(link_id, 544 517 IEEE80211_MLE_STA_CONTROL_LINK_ID)), 545 518 .var_len = sizeof(sta_prof) - 2 - 2, 546 - .bssid = { *rnr.ap.bssid }, 519 + .bssid = { *rnr_normal.ap.bssid }, 547 520 .beacon_int = cpu_to_le16(101), 548 521 .tsf_offset = cpu_to_le64(-123ll), 549 522 .capabilities = cpu_to_le16(0xdead), ··· 567 540 } 568 541 569 542 skb_put_u8(input, WLAN_EID_REDUCED_NEIGHBOR_REPORT); 570 - skb_put_u8(input, sizeof(rnr)); 571 - skb_put_data(input, &rnr, sizeof(rnr)); 543 + skb_put_u8(input, rnr_len); 544 + skb_put_data(input, rnr, rnr_len); 572 545 573 546 /* build a multi-link element */ 574 547 skb_put_u8(input, WLAN_EID_EXTENSION); ··· 614 587 KUNIT_EXPECT_EQ(test, ctx.inform_bss_count, 2); 615 588 616 589 /* Check link_bss *****************************************************/ 617 - link_bss = cfg80211_get_bss(wiphy, NULL, sta_prof.bssid, NULL, 0, 618 - IEEE80211_BSS_TYPE_ANY, 619 - IEEE80211_PRIVACY_ANY); 590 + link_bss = __cfg80211_get_bss(wiphy, NULL, sta_prof.bssid, NULL, 0, 591 + IEEE80211_BSS_TYPE_ANY, 592 + IEEE80211_PRIVACY_ANY, 593 + 0); 620 594 KUNIT_ASSERT_NOT_NULL(test, link_bss); 621 595 KUNIT_EXPECT_EQ(test, link_bss->signal, 0); 622 596 KUNIT_EXPECT_EQ(test, link_bss->beacon_interval, ··· 628 600 KUNIT_EXPECT_PTR_EQ(test, link_bss->channel, 629 601 ieee80211_get_channel_khz(wiphy, MHZ_TO_KHZ(2462))); 630 602 603 + /* Test wiphy does not set WIPHY_FLAG_SUPPORTS_NSTR_NONPRIMARY */ 604 + if (params->nstr) { 605 + KUNIT_EXPECT_EQ(test, link_bss->use_for, 0); 606 + KUNIT_EXPECT_EQ(test, link_bss->cannot_use_reasons, 607 + NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY); 608 + KUNIT_EXPECT_NULL(test, 609 + cfg80211_get_bss(wiphy, NULL, sta_prof.bssid, 610 + NULL, 0, 611 + IEEE80211_BSS_TYPE_ANY, 612 + IEEE80211_PRIVACY_ANY)); 613 + } else { 614 + KUNIT_EXPECT_EQ(test, link_bss->use_for, 615 + NL80211_BSS_USE_FOR_ALL); 616 + KUNIT_EXPECT_EQ(test, link_bss->cannot_use_reasons, 0); 617 + } 618 + 631 619 rcu_read_lock(); 632 620 ies = rcu_dereference(link_bss->ies); 633 621 KUNIT_EXPECT_NOT_NULL(test, ies); ··· 651 607 /* Resulting length should be: 652 608 * SSID (inherited) + RNR (inherited) + vendor element(s) + 653 609 * operating class (if requested) + 654 - * generated RNR (if MLD ID == 0) + 610 + * generated RNR (if MLD ID == 0 and not NSTR) + 655 611 * MLE common info + MLE header and control 656 612 */ 657 613 if (params->sta_prof_vendor_elems) 658 614 KUNIT_EXPECT_EQ(test, ies->len, 659 - 6 + 2 + sizeof(rnr) + 2 + 160 + 2 + 165 + 615 + 6 + 2 + rnr_len + 2 + 160 + 2 + 165 + 660 616 (params->include_oper_class ? 3 : 0) + 661 - (!params->mld_id ? 22 : 0) + 617 + (!params->mld_id && !params->nstr ? 22 : 0) + 662 618 mle_basic_common_info.var_len + 5); 663 619 else 664 620 KUNIT_EXPECT_EQ(test, ies->len, 665 - 6 + 2 + sizeof(rnr) + 2 + 155 + 621 + 6 + 2 + rnr_len + 2 + 155 + 666 622 (params->include_oper_class ? 3 : 0) + 667 - (!params->mld_id ? 22 : 0) + 623 + (!params->mld_id && !params->nstr ? 22 : 0) + 668 624 mle_basic_common_info.var_len + 5); 669 625 rcu_read_unlock(); 670 626