From 42e6ebcb327797d091eda1ea22919be175d06d36 Mon Sep 17 00:00:00 2001 From: Iacob Juc Date: Thu, 9 Jul 2026 17:22:50 +0200 Subject: [PATCH] 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 --- .gitlab/testbed.yml | 2 +- .../cram/generic/fixtures/obuspa.expected | 3 +- .gitlab/tests/cram/scripts/wifi.sh | 8 + .../tests/cram/wnc-freedom/100-pwhm_step_1.t | 5 + .../wnc-freedom/109-pwhm_mldunit_setting.t | 201 ++++++++++++++++++ 5 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 .gitlab/tests/cram/wnc-freedom/109-pwhm_mldunit_setting.t diff --git a/.gitlab/testbed.yml b/.gitlab/testbed.yml index 3c3fca617d..6ba0584c16 100644 --- a/.gitlab/testbed.yml +++ b/.gitlab/testbed.yml @@ -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 diff --git a/.gitlab/tests/cram/generic/fixtures/obuspa.expected b/.gitlab/tests/cram/generic/fixtures/obuspa.expected index 11b7d2e7e2..8afb0ec3f2 100644 --- a/.gitlab/tests/cram/generic/fixtures/obuspa.expected +++ b/.gitlab/tests/cram/generic/fixtures/obuspa.expected @@ -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 diff --git a/.gitlab/tests/cram/scripts/wifi.sh b/.gitlab/tests/cram/scripts/wifi.sh index 04b7029c4a..9e20ab199e 100644 --- a/.gitlab/tests/cram/scripts/wifi.sh +++ b/.gitlab/tests/cram/scripts/wifi.sh @@ -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 diff --git a/.gitlab/tests/cram/wnc-freedom/100-pwhm_step_1.t b/.gitlab/tests/cram/wnc-freedom/100-pwhm_step_1.t index 0b8c2677a7..a49c144a4f 100644 --- a/.gitlab/tests/cram/wnc-freedom/100-pwhm_step_1.t +++ b/.gitlab/tests/cram/wnc-freedom/100-pwhm_step_1.t @@ -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: diff --git a/.gitlab/tests/cram/wnc-freedom/109-pwhm_mldunit_setting.t b/.gitlab/tests/cram/wnc-freedom/109-pwhm_mldunit_setting.t new file mode 100644 index 0000000000..1eb4136876 --- /dev/null +++ b/.gitlab/tests/cram/wnc-freedom/109-pwhm_mldunit_setting.t @@ -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