cram: add cram test for Radio.IEEE80211be.MLDUnitSetting

Testing Various valid combinations on 6GHz PrivateVAP

side-effect: default value of MLDUnitSetting changes behavior of PWHM

i.e. new parameter:
Radio.{i}.IEEE80211be.MLDUnitSetting=Assumed
is expected to invalidate current apmld tests
Reset it to Required, the value that keeps old pwhm behavior

OBUSPA:
Prefix IEEE80211be.MLDUnitSetting with X_PRPLWARE-COM_
and add it to obuspa.expected datamodel dump

testbed.yml : increase timeout by 2min (nominal execution time : 1m50s)

Issue: PPM-3545
Signed-off-by: Iacob Juc <iacob.juc_ext@softathome.com>
This commit is contained in:
Iacob Juc 2026-07-09 17:22:50 +02:00 committed by Faouzi Yahya
parent c3f756c8c4
commit 42e6ebcb32
5 changed files with 217 additions and 2 deletions

View File

@ -1,7 +1,7 @@
.testbed:
stage: run
image: "registry.gitlab.com/prpl-foundation/prplos/ci/containers/testbed/testbed:v1.3.0@sha256:7f50dde2279c201542569b7f31e965d43a308e245a4ec973df52d581560b0c28"
timeout: 85 minutes
timeout: 87 minutes
rules:
- if: '$CI_PIPELINE_SOURCE == "schedule"'
when: never

View File

@ -5176,7 +5176,6 @@ Device.WiFi.Radio.{i}.FullScan() input:HomeTime
Device.WiFi.Radio.{i}.FullScan() input:SSID
Device.WiFi.Radio.{i}.GuardInterval proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.IEEE80211ax. proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.IEEE80211be. proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.IEEE80211hEnabled proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.IEEE80211hSupported proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.LastChange proto::prplmesh-dm-mapper
@ -5290,6 +5289,8 @@ Device.WiFi.Radio.{i}.X_PRPLWARE-COM_ChannelMgt.ClearedDfsChannels
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_ChannelMgt.CurrentChanspec. proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_ChannelMgt.TargetChanspec. proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_DFS Done! proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_IEEE80211be. proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_IEEE80211be.MLDUnitSetting proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_IEEE80211kSupported proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_IEEE80211rSupported proto::prplmesh-dm-mapper
Device.WiFi.Radio.{i}.X_PRPLWARE-COM_NaStaMonitor. proto::prplmesh-dm-mapper

View File

@ -331,6 +331,14 @@ get_private_mldunit() {
R 'usp-cli -j -l "Device.WiFi.SSID.[SSID==\"prplOS\"].MLDUnit?" | jsonfilter -e @[0]'[*].MLDUnit'' | head -n 1
}
# Set MLDUnit of private MLD based on SSID
# In : SSID
# In : MLDUnit
# Out : N/A
set_ssid_mldunit() {
R "usp-cli -j -l 'Device.WiFi.SSID.[SSID==\"${1}\"].MLDUnit=${2}' | jsonfilter -e @[0]'[*].MLDUnit'"
}
# Print MLDUnit of private MLD based on default SSID (prplOS-guest)
# In : N/A
# Out : MLDUnit

View File

@ -5,6 +5,11 @@ Create R alias:
$ alias C="${CRAM_REMOTE_COPY:-}"
$ C ${TESTDIR}/../scripts/target/usp-events.lua root@${TARGET_LAN_IP}:/tmp/usp-event.lua 2>/dev/null
Set MLDUnitSetting='Required' for all radios
$ R "ba-cli -l -a \"protected; WiFi.Radio.*.IEEE80211be.MLDUnitSetting='Required'\" | grep Required | wc -l"
3
$ R "logger -t cram 'Starting PWHM test (step 1) ...'"
Wait for Device.WiFi. datamodel availability:

View File

@ -0,0 +1,201 @@
Create R alias:
$ alias R="${CRAM_REMOTE_COMMAND:-}"
$ . "${TESTDIR}/../scripts/wifi.sh"
$ R "logger -t cram 'Starting MLDUnitSetting test ...'"
$ wifi_dm "PrplMesh.Enable=0" "X_PRPLWARE-COM_ProcessManager." "ba-cli"
X_PRPLWARE-COM_ProcessManager.PrplMesh.Enable=0
Silently set Disabled-MLD MLDUnit for all SSIDs (12 instances)
$ wifi_dm "SSID.*.MLDUnit=-1" "WiFi." "ba-cli" | wc -l
12
$ sleep 2
Check 11be is enabled
$ wifi_dm "AccessPoint.5.RadioReference+.OperatingStandards?" "WiFi." "ba-cli"
Device.WiFi.Radio.\d+.OperatingStandards="ax,be" (re)
Check MLO Support
$ wifi_dm "Radio.2.IEEE80211_Caps?" "WiFi." "ba-cli" | grep MLO | wc -l
1
Disable AccessPoints
$ enable_ap_sync * 0
AccessPoint.*.Enable=0
Enable AccessPoint Under Test
$ enable_ap_sync 5 1
AccessPoint.\d+.Enable=1 (re)
$ wifi_dm "AccessPoint.5.SSIDReference+.Name?" "WiFi." "ba-cli"
Device.WiFi.SSID.\d+.Name="wlan0.1" (re)
Used later to check hostapd config file
$ itf=$(wifi_dm "AccessPoint.5.SSIDReference+.Name?" "WiFi." "ba-cli" | cut -d "=" -f 2 | tr -d "\"")
$ rad_name=$(wifi_dm "AccessPoint.5.RadioReference+.Name?" "WiFi." "ba-cli" | cut -d "=" -f 2 | tr -d "\"")
Subset A : MLDUnit=-1
$ R "logger -t cram 'MLDUnitSetting: Disabled MLDUnit; MLDUnitSetting=NotRequired'"
Set MLDUnitSetting='NotRequired'
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='NotRequired'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="NotRequired"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="NotRequired"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="NotRequired"
Set Disabled-MLD MLDUnit
$ wifi_dm "AccessPoint.5.SSIDReference+.MLDUnit=-1" "WiFi." "ba-cli"
Device.WiFi.SSID.\d+.MLDUnit=-1 (re)
$ sleep 15
Check 11be configuration values : {ieee80211be} enabled for Radio, {mld_ap,disable_11be} = {0,0} for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=1
$ get_hapd_config $itf mld_ap
0
$ get_hapd_config $itf disable_11be
0
$ R "logger -t cram 'MLDUnitSetting: Disabled MLD; MLDUnitSetting=Required'"
Set MLDUnitSetting='Required'
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='Required'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="Required"
$ sleep 15
Check 11be configuration values : {ieee80211be} disabled for Radio, {mld_ap,disable_11be} absent for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=0
$ get_hapd_config $itf mld_ap
Option 'mld_ap' not found
$ get_hapd_config $itf disable_11be
Option 'disable_11be' not found
$ R "logger -t cram 'MLDUnitSetting: Disabled MLD; MLDUnitSetting=Assumed'"
Set MLDUnitSetting='Assumed'; with MLDUnit=-1, this should still result in WiFi7 - EHT + MLO configuration
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='Assumed'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="Assumed"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="Assumed"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="Assumed"
$ sleep 15
Check 11be configuration values : {ieee80211be} enabled for Radio, {mld_ap,disable_11be} = {1,0} for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=1
$ get_hapd_config $itf mld_ap
1
$ get_hapd_config $itf disable_11be
0
Subset B : Valid MLDUnit
$ R "logger -t cram 'MLDUnitSetting: Enabled MLD; MLDUnitSetting=Required'"
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='Required'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="Required"
$ sleep 15
Set arbitrary MLDUnit>(-1)
$ wifi_dm "AccessPoint.5.SSIDReference+.MLDUnit=8" "WiFi." "ba-cli"
Device.WiFi.SSID.\d+.MLDUnit=8 (re)
$ sleep 15
Check 11be configuration values : {ieee80211be} enabled for Radio, {mld_ap,disable_11be} = {1,0} for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=1
$ get_hapd_config $itf mld_ap
1
$ get_hapd_config $itf disable_11be
0
$ R "logger -t cram 'MLDUnitSetting: Enabled MLD; MLDUnitSetting=Required'"
Set MLDUnitSetting='NotRequired'
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='NotRequired'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="NotRequired"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="NotRequired"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="NotRequired"
$ sleep 5
Check 11be configuration values : {ieee80211be} enabled for Radio, {mld_ap,disable_11be} = {1,0} for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=1
$ get_hapd_config $itf mld_ap
1
$ get_hapd_config $itf disable_11be
0
$ R "logger -t cram 'MLDUnitSetting: Enabled MLD; MLDUnitSetting=NotRequired'"
Set MLDUnitSetting='NotRequired'
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='Assumed'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="Assumed"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="Assumed"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="Assumed"
$ sleep 5
Check 11be configuration values : {ieee80211be} enabled for Radio, {mld_ap,disable_11be} = {1,0} for interface
$ R "cat /tmp/${rad_name}_hapd.conf | grep ieee80211be"
ieee80211be=1
$ get_hapd_config $itf mld_ap
1
$ get_hapd_config $itf disable_11be
0
Restore cram-context MLDUnitSetting : 'Required'
$ wifi_dm "Radio.*.IEEE80211be.MLDUnitSetting='Required'" "WiFi." "ba-cli"
WiFi.Radio.1.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.2.IEEE80211be.MLDUnitSetting="Required"
WiFi.Radio.3.IEEE80211be.MLDUnitSetting="Required"
Restore MLDUnit to defaults
$ set_ssid_mldunit prplOS 0
0
0
0
$ set_ssid_mldunit prplOS-guest 1
1
1
1
backhaul SSIDs are instantiated with exact indexes by 33_wld-custom-prplmeshVapsConfiguration.odl
$ wifi_dm "SSID.16.MLDUnit=2" "WiFi." "ba-cli"
WiFi.SSID.16.MLDUnit=2
$ wifi_dm "SSID.17.MLDUnit=2" "WiFi." "ba-cli"
WiFi.SSID.17.MLDUnit=2
$ wifi_dm "SSID.18.MLDUnit=2" "WiFi." "ba-cli"
WiFi.SSID.18.MLDUnit=2