mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 06:29:23 +01:00
unit: add HE tests to test-band
This tests for all the possible widths selected in 2.4 and 5/6GHz, as well as some failure tests.
This commit is contained in:
parent
aff5663c0b
commit
890f212af2
243
unit/test-band.c
243
unit/test-band.c
@ -32,6 +32,8 @@
|
|||||||
#include <ell/ell.h>
|
#include <ell/ell.h>
|
||||||
|
|
||||||
#include "src/band.h"
|
#include "src/band.h"
|
||||||
|
#include "src/netdev.h"
|
||||||
|
#include "src/ie.h"
|
||||||
|
|
||||||
static struct band *new_band()
|
static struct band *new_band()
|
||||||
{
|
{
|
||||||
@ -284,6 +286,228 @@ static void band_test_vht_1(const void *data)
|
|||||||
band_free(band);
|
band_free(band);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct he_test_data {
|
||||||
|
enum band_freq freq;
|
||||||
|
int32_t rssi;
|
||||||
|
uint64_t expected_rate;
|
||||||
|
int expected_return;
|
||||||
|
/* Own capabilities */
|
||||||
|
struct band_he_capabilities capabilities;
|
||||||
|
/* Peer HE Capabilities IE */
|
||||||
|
uint8_t he_capabilities[31];
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/* IWD doesn't look at this */
|
||||||
|
#define HE_MAC_CAPA 0, 0, 0, 0, 0, 0
|
||||||
|
/* IWD only cares about the width set byte */
|
||||||
|
#define HE_PHY_CAPA(wset) wset, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
|
||||||
|
#define MCS7 0
|
||||||
|
#define MCS9 1
|
||||||
|
#define MCS11 2
|
||||||
|
#define MCS_UNSUP 0xff, 0xff
|
||||||
|
/* A readable macro for defining MCS sets */
|
||||||
|
#define HE_MCS_SET(mcs, nss) \
|
||||||
|
(nss >= 1 ? mcs << 0 : 3 << 0) | \
|
||||||
|
(nss >= 2 ? mcs << 2 : 3 << 2) | \
|
||||||
|
(nss >= 3 ? mcs << 4 : 3 << 4) | \
|
||||||
|
(nss >= 4 ? mcs << 6 : 3 << 6), \
|
||||||
|
(nss >= 5 ? mcs << 0 : 3 << 0) | \
|
||||||
|
(nss >= 6 ? mcs << 2 : 3 << 2) | \
|
||||||
|
(nss >= 7 ? mcs << 4 : 3 << 4) | \
|
||||||
|
(nss >= 8 ? mcs << 6 : 3 << 6)
|
||||||
|
|
||||||
|
/* 2.4GHz, 20MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_2_4_20mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_2_4_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 86000000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x00) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
22, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x00), MCS_UNSUP, HE_MCS_SET(MCS7, 1),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 2.4GHz, 40MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_2_4_40mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_2_4_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 172000000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x02) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
22, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x02), MCS_UNSUP, HE_MCS_SET(MCS7, 1),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, 20MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_5_20mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 86000000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x00) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
22, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x00), MCS_UNSUP, HE_MCS_SET(MCS7, 1)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, 80MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_5_80mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 360300000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x04) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
22, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x04), MCS_UNSUP, HE_MCS_SET(MCS7, 1)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, 160MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_5_160mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 720600000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x0c) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
26, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x0c), MCS_UNSUP, HE_MCS_SET(MCS7, 1),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS7, 1)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, 160/80+80MHz, MCS 7, NSS 1 */
|
||||||
|
const struct he_test_data he_test_5_160_80_P_80_mhz_mcs_7_nss_1 = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 720600000ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS7, 1), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS7, 1), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS7, 1), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x1c) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
30, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x1c), MCS_UNSUP, HE_MCS_SET(MCS7, 1),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS7, 1),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS7, 1)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, max data rate */
|
||||||
|
const struct he_test_data he_test_5_max_data_rate = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 1201000000ULL * 8ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS11, 8), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS11, 8), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS11, 8), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x1c) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
30, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x1c), MCS_UNSUP, HE_MCS_SET(MCS11, 8),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS11, 8),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS11, 8)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
const struct he_test_data he_all_mcs_unsupported = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -20,
|
||||||
|
.expected_rate = 1201000000ULL * 8ULL,
|
||||||
|
.expected_return = -EBADMSG,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { MCS_UNSUP, MCS_UNSUP,
|
||||||
|
MCS_UNSUP, MCS_UNSUP,
|
||||||
|
MCS_UNSUP, MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x1c) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
30, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x1c), MCS_UNSUP, MCS_UNSUP,
|
||||||
|
MCS_UNSUP, MCS_UNSUP,
|
||||||
|
MCS_UNSUP, MCS_UNSUP
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
/* 5GHz, max data rate, low-rssi */
|
||||||
|
const struct he_test_data he_test_5_low_rssi = {
|
||||||
|
.freq = BAND_FREQ_5_GHZ,
|
||||||
|
.rssi = -80, /* Should force 20MHz/MCS0 width to be used */
|
||||||
|
.expected_rate = 8600000ULL * 8ULL,
|
||||||
|
.capabilities = {
|
||||||
|
.he_mcs_set = { HE_MCS_SET(MCS11, 8), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS11, 8), MCS_UNSUP,
|
||||||
|
HE_MCS_SET(MCS11, 8), MCS_UNSUP },
|
||||||
|
.he_phy_capa = { HE_PHY_CAPA(0x1c) },
|
||||||
|
.iftypes = 1 << NETDEV_IFTYPE_STATION,
|
||||||
|
},
|
||||||
|
.he_capabilities = {
|
||||||
|
30, IE_TYPE_HE_CAPABILITIES - 256, HE_MAC_CAPA,
|
||||||
|
HE_PHY_CAPA(0x1c), MCS_UNSUP, HE_MCS_SET(MCS11, 8),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS11, 8),
|
||||||
|
MCS_UNSUP, HE_MCS_SET(MCS11, 8)
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
static void band_test_he(const void *data)
|
||||||
|
{
|
||||||
|
const struct he_test_data *he_data = data;
|
||||||
|
struct band *band;
|
||||||
|
uint64_t rate = 0;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
band = new_band();
|
||||||
|
band->freq = he_data->freq;
|
||||||
|
band->he_capabilities = l_queue_new();
|
||||||
|
|
||||||
|
l_queue_push_tail(band->he_capabilities,
|
||||||
|
(void*)&(he_data->capabilities));
|
||||||
|
|
||||||
|
assert(ie_validate_he_capabilities(he_data->he_capabilities + 2,
|
||||||
|
he_data->he_capabilities[0]));
|
||||||
|
|
||||||
|
ret = band_estimate_he_rx_rate(band, he_data->he_capabilities + 2,
|
||||||
|
he_data->rssi, &rate);
|
||||||
|
assert(ret == he_data->expected_return);
|
||||||
|
|
||||||
|
if (ret == 0)
|
||||||
|
assert(rate == he_data->expected_rate);
|
||||||
|
|
||||||
|
l_queue_destroy(band->he_capabilities, NULL);
|
||||||
|
l_free(band);
|
||||||
|
}
|
||||||
|
|
||||||
struct oci2freq_data {
|
struct oci2freq_data {
|
||||||
unsigned int op;
|
unsigned int op;
|
||||||
unsigned int chan;
|
unsigned int chan;
|
||||||
@ -436,6 +660,25 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
l_test_add("/band/VHT/test1", band_test_vht_1, NULL);
|
l_test_add("/band/VHT/test1", band_test_vht_1, NULL);
|
||||||
|
|
||||||
|
l_test_add("/band/HE/test/2.4GHz/20MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_2_4_20mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/2.4GHz/40MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_2_4_40mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/5GHz/20MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_5_20mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/5GHz/80MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_5_80mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/5GHz/160MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_5_160mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/5GHz/160/80+80MHz/MCS7/NSS1", band_test_he,
|
||||||
|
&he_test_5_160_80_P_80_mhz_mcs_7_nss_1);
|
||||||
|
l_test_add("/band/HE/test/5GHz/max data rate", band_test_he,
|
||||||
|
&he_test_5_max_data_rate);
|
||||||
|
l_test_add("/band/HE/test/all MCS unsupported", band_test_he,
|
||||||
|
&he_all_mcs_unsupported);
|
||||||
|
l_test_add("/band/HE/test/low RSSI", band_test_he,
|
||||||
|
&he_test_5_low_rssi);
|
||||||
|
|
||||||
l_test_add("/band/oci2freq 1", test_oci2freq, &oci2freq_data_1);
|
l_test_add("/band/oci2freq 1", test_oci2freq, &oci2freq_data_1);
|
||||||
l_test_add("/band/oci2freq 2", test_oci2freq, &oci2freq_data_2);
|
l_test_add("/band/oci2freq 2", test_oci2freq, &oci2freq_data_2);
|
||||||
l_test_add("/band/oci2freq 3", test_oci2freq, &oci2freq_data_3);
|
l_test_add("/band/oci2freq 3", test_oci2freq, &oci2freq_data_3);
|
||||||
|
Loading…
Reference in New Issue
Block a user