// SPDX-License-Identifier: GPL-2.0-only
/*
* KUnit tests for inform_bss functions
*
* Copyright (C) 2023-2024 Intel Corporation
*/
#include <linux/ieee80211.h>
#include <net/cfg80211.h>
#include <kunit/test.h>
#include <kunit/skbuff.h>
#include "../core.h"
#include "util.h"
/* mac80211 helpers for element building */
#include "../../mac80211/ieee80211_i.h"
MODULE_IMPORT_NS("EXPORTED_FOR_KUNIT_TESTING");
struct test_elem {
u8 id;
u8 len;
union {
u8 data[255];
struct {
u8 eid;
u8 edata[254];
};
};
};
static struct gen_new_ie_case {
const char *desc;
struct test_elem parent_ies[16];
struct test_elem child_ies[16];
struct test_elem result_ies[16];
} gen_new_ie_cases[] = {
{
.desc = "ML not inherited",
.parent_ies = {
{ .id = WLAN_EID_EXTENSION, .len = 255,
.eid = WLAN_EID_EXT_EHT_MULTI_LINK },
},
.child_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
},
.result_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
},
},
{
.desc = "fragments are ignored if previous len not 255",
.parent_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 254, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
},
.child_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
},
.result_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 254, },
{ .id = WLAN_EID_SSID, .len = 2 },
},
},
{
.desc = "fragments inherited",
.parent_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
},
.child_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
},
.result_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
{ .id = WLAN_EID_SSID, .len = 2 },
},
},
{
.desc = "fragments copied",
.parent_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
},
.child_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
},
.result_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
{ .id = WLAN_EID_SSID, .len = 2 },
},
},
{
.desc = "multiple elements inherit",
.parent_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 123, },
},
.child_ies = {
{ .id = WLAN_EID_SSID, .len = 2 },
},
.result_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 123, },
{ .id = WLAN_EID_SSID, .len = 2 },
},
},
{
.desc = "one child element overrides",
.parent_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 255, },
{ .id = WLAN_EID_FRAGMENT, .len = 125, },
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 123, },
},
.child_ies = {
{ .id = WLAN_EID_REDUCED_NEIGHBOR_REPORT, .len = 127, },
{ .<