- Fixed issue where valid neighbors were reported multiple times when scan requests included multiple opclasses sharing the same channel.
- Duplicate entries occurred because each opclass result appended the same neighbor repeatedly.
- Implemented a check during insertion to ensure each neighbor is added only once based on BSSID and spectrum_info_present flag.
- Zero-initialized neighbors were reported because multiple spectrum entries existed for the same scan result, which is invalid. Once duplicate neighbor additions were prevented, this issue was resolved as w
ell.
Closes PPM-3698
Signed-off-by: Cem KOC <cem.koc@airties.com>
Radar-triggered channel changes were being reported incorrectly: the agent
sometimes sent Operating Channel Report (OCR) instead of Channel Preference
Report (CPR), sent them in the wrong order, or reported the DFS channel
even after moving to a non-DFS channel.
Fixes implemented:
- On CAC_Completed(success): send only Channel Preference Report.
- On CAC_Completed(failed): do not send CPR/OCR immediately; instead set the
new flag m_accept_dfs_channel_change_after_cac_failure to accept the upcoming
DFS-triggered CSA_Finished event. The CSA_Finished handler then sends CPR
followed by OCR with the correct non-DFS channel.
- When no CAC is running and CSA_Finished is received due to radar: send CPR
first, then OCR with the non-DFS channel.
- Ensures consistent message ordering (CPR -> OCR) and correct reporting of the
new operating channel in radar-related flows.
Closes PPM-3663
Signed-off-by: Durmus Koyuncu <durmus.koyuncu@airties.com>
prplmesh may be deployed on platforms that do not
(yet) support RSN Overriding
adding a field to sRadioInfo in base_wlan_hal_types.h
in bwl::whm, infer RSNO support from
the presence of WPA3-Personal-Compatibility
security mode in any AccessPoint instance
in bwl::dummy, always report true;
Implements: PPM-3352
Signed-off-by: Iacob Juc <iacob.juc_ext@softathome.com>
For R6 testing, prplMesh should be able to return an MLD MAC over CAPI,
given any MLO SSID. This commit adds funtion get_mdl_mac_by_ssid()
to retrieve this MAC from the agent DB and uses it when the CAPI command
dev_get_parameter with parameter MLDAddr is called.
Closes: PPM-3692
Signed-off-by: Maarten De Decker <maarten.dedecker@mind.be>
Agent will be updating wifi 7 agent capabilities TLV in
1. AP Capability Report message
2. Early AP Capability Report message
Closes: PPM-3682
Signed-off-by: Chandana Ramappa <chandana.r@tataelxsi.co.in>
The Steering Request flags received in the 1905 Client Steering Request message
(e.g., the abridged flag) were not matching the flags used in the 802.11v BTM
Request. During inspection of the prplmesh agent, it was observed that these
flags were never forwarded to pwhm.
This change aligns the bitmask construction with the expected 802.11v layout
and ensures all relevant flags are passed correctly to pwhm.
Closes: PPM-3676
Signed-off-by: Durmus Koyuncu <durmus.koyuncu@airties.com>
Agent updates radio capabilities in AgentDB on JOINED_NOTIFICATION,
while AP Manager encodes Wi‑Fi 7 MLO modes (STR, NSTR, EMLSR, EMLMR)
into bitmasks for AP/BSTA in the Agent Capabilities TLV.
Wi-Fi 7 Agent Capabilities TLV will be in below meassges,
1. AP Capability Report message
2. Early AP Capability Report message
Closes PPM-3655
Signed-off-by: Chandana Ramappa <chandana.r@tataelxsi.co.in>
In R6 certification, the testbed will trigger multiple certification_mode resets, to different Multi-AP profiles (mapr3, mapr6).
In case the agent is still in reset state when the second reset is triggered, this profile change is currently discarded.
Solution: check if the Multi-AP profile has changed, compared to last reset.
Fixes: PPM-3627
Signed-off-by: Maarten De Decker <maarten.dedecker@mind.be>
DisabledSubChannelBitmap received from agent is
converted to comma separated list of channels and
is then pushed to respective radio in pWHM
WiFi.Radio.{i}.StaticPuncturing.DisabledSubChannels
Closes PPM-3351
Signed-off-by: Jestin John Mathew <jestin-john.mathew_ext@softathome.com>
If Channel Selection Request Message CMDU contains an
EHT Operations TLV, forward the contents to ap_manager
using existing beerocks messages
Closes PPM-3351
Signed-off-by: Jestin John Mathew <jestin-john.mathew_ext@softathome.com>
Problem:
Log spam in beerocks_agent.log due to a dummy autoconfiguration task.
Fix:
Disabled the dummy autoconfiguration task in Controller-only mode to prevent log spam.
Closes PPW-546
Signed-off-by: sushmitha <sushmitha.s_ext@softathome.com>
Original implementation should read it from driver to share capabilities
PPM-3655 will introduce BWL implementation.
Closes: PPM-3626
Signed-off-by: Cihangir Odabas <cihangir.odabas@prplfoundation.org>
- Except for radio temperature, Airties vendor-specific TLVs no longer
access the data model directly.
- Ethernet port metrics used in the Airties Ethernet Stats TLV are now
retrieved from /proc/net/dev.
- Parameters for the Airties Ethernet Interface TLV are now obtained
via Linux system calls and ethtool.
- Removed AgentDB dependency from both Ethernet Stats and Ethernet
Interface TLVs, and reduced the AgentDB usage scope in several other
places to avoid holding locks for too long.
- Simplified the unique port-ID generation logic for Ethernet ports.
If an interface does not already have an assigned ID, we generate a
new one starting from 1. The first interface gets ID 1, and each new
interface receives the next sequential ID (2, 3, 4, ...). If the
interface is already present in the map, we simply return the previously
assigned ID.
- Consolidated the Airties Ethernet Stats TLV types into a single
unified TLV. Previously there were two different TLV types
(one for optional metrics). Now all metrics, optional or not, are
included in a single TLV.
PPM-3393
Signed-off-by: Durmus Koyuncu <durmus.koyuncu@airties.com>
BPL_IFNAME was used instead of IFNAMSIZ (defined by Linux) and
was larger, resulting in wasted memory. All instances have now
been replaced with IFNAMSIZ. We also switched from using
C-style strings to std::string wherever possible.
PPM-904
Signed-off-by: Dmytro Kysil <d.kysil@inango-systems.com>
Save certification_program in agent_db and use it to detect the current
certification testbed. Only send the BSS Configuration Report TLV when
running on an R6 testbed.
Closes: PPM-3634
Signed-off-by: Igor Plesser <i.plesser@inango-systems.com>
Introduce add_bss_configuration_report_tlv(), a helper that builds and
populates the BSS Configuration Report TLV, and use it to append this TLV
to the Topology Response message.
Closes: PPM-3634
Signed-off-by: Igor Plesser <i.plesser@inango-systems.com>
Currently, pWHM handles AKMs with same security modes.
Event with different ENUMs for SAE, same modes will be used.
If we need to support different AKM Modes independent from pWHM internal logic,
agent code should be changed and proper DMs needs to be set for AKMs.
Closes: PPM-3638
Signed-off-by: Cihangir Odabas <cihangir.odabas@prplfoundation.org>
Ensure radio selection uses both channel and operating class for accurate
frequency matching. Previously, only channel was checked, which could lead
to incorrect radio mapping.
Closes: PPM-3640
Signed-off-by: rramasamy <rramasamy@maxlinear.com>
Obtain the channel survey report from pwhm, which contains a list of channels along with their
corresponding interference factor values (multiplied by 10⁶).
These values are used to determine the rank: a lower interference factor indicates a better rank,
while a higher interference factor indicates a worse rank.
This rank is then used to derive the multi-AP preference.
PPM-3288
Signed-off-by: pavani <kareti-pavani.sireesha-reddy@capgemini.com>
In Early AP Capability reporting, there should be one mandatory
AKM Suites Capability TLV is requested.
Add one empty TLV until values are filled properly in PPM-3618.
Closes: PPM-3619
Signed-off-by: Cihangir Odabas <cihangir.odabas@prplfoundation.org>
Commit 2c382dd and 0386d92 changed the VHT and HE MCS_SET_SIZEs to align
with 1905 spec.
But those constant values are also used to create sNodeHostap Vendor
Specific message.
Because of size change, prplMesh Controller can not parse old Agent's VS
message.
sNodeHostap struct is created with NL802.11 class size instead of 1905
spec.
New sizes are defined only for this VS message.
VHT_MCS_SET_NL802_SIZE as old value as 32
HE_MCS_SET_NL802_SIZE as old value as 32
Also, to minimize the risk, Slave(Agent) will not fill these values.
Because, they are never used in Controller side anyway.
Note: There is still minor case.
Radio Class currently holds 1905 sizes which is less than 32.
Vendor Specific message holds 32.
Same sNodeHostap is also used to communicate between AP Manager and
Slave(Agent).
Event data (32) is filled with less data (8 and 12) while constructing
original Slave Join message.
Both sNodeHostap and sNodeHostapVendorSpec are set to NL802 sizes (32B)
to maintain backward compatibility.
AP Manager Radio Info for MCS SET sizes will be formed with 8 and 12:
std::array<uint8_t, beerocks::message:VHT_MCS_SET_SIZE> -> 8
std::array<uint8_t, beerocks::message:HE_MCS_SET_SIZE> -> 12
In RadioInfo class.
Relevant Messages:
ACTION_APMANAGER_JOINED_NOTIFICATION
ACTION_CONTROL_SLAVE_JOINED_NOTIFICATION
Closes: PPM-3500
Signed-off-by: Cihangir Odabas <cihangir.odabas@prplfoundation.org>
Previously, vap_stats_available was set only if both RX and TX byte counters
were greater than zero. This prevented channel utilization from being reported
when there was no traffic on the VAP.
This patch extends the logic by also setting vap_stats_available when
ap_channel_utilization_reporting_threshold is zero. In this case, reporting
is forced regardless of traffic activity.
Issue:PPM-3476
Signed-off-by: Nefi Guclu <nefi.guclu@airties.com>
Fixed incorrect role set in Media Specific Info of 1905 Device Information TLV.
This caused wireless backhaul links to be reported as Ethernet instead of WiFi.
PPM-3554
Signed-off-by: Durmus Koyuncu <durmus.koyuncu@airties.com>
In Multi-AP R4, the value MULTIAP_PROFILE_1_AS_OF_R4 is defined as
equivalent to Profile 1 for backward compatibility. However, in prplMesh
we convert this value to MULTIAP_PROFILE_1 early during Agent startup,
which causes a problem later: the Agent skips adding the Multi-AP Profile
TLV because it appears to be Profile 1.
To fix this, a new flag `is_multiap_profile_1_as_of_r4` (default: false)
was added to `device_conf` in `agent_db.h`. This flag is set when the
original `m_ap_profile` equals MULTIAP_PROFILE_1_AS_OF_R4, before the
conversion to Profile 1.
The flag is then used in `ApAutoConfigurationTask` to ensure that the
Multi-AP Profile TLV is still included for this specific R4 case, even
though the stored profile value becomes MULTIAP_PROFILE_1.
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
prplMesh previously didn’t propagate the Agent’s Multi-AP profile into the
AP (fronthaul) stack nor initialize the WHM EndPoint with that profile.
As a result MultiAPProfile in pwhm DM has been set to value from
response of Gateway (peer’s profile from the association response).
Anyway EndPoint.MultiAPProfile in pwhm still using ambiguously:
- Before connection, prplMesh now "push" its own local profile
here (to configure supplicant).
- After connection, pwhm overwrites it with the peer’s profile
from the association response.
This issue will be resolved with introducing a new parameter
per EndPoint in pwhm DM - EndPoint.PeerMultiAPProfile.
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
Replace the legacy “send twice” logic in AP-Autoconfiguration Search with a
single-shot send determined by the Agent’s configured Multi-AP profile:
- For R1 (or legacy/unknown), omit the Multi-AP Profile TLV.
- For R2/R3/R4, include the TLV and advertise device_conf.multi_ap_profile.
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
The field bssid_multi_ap_profile in AgentDB was ambiguous: it mixed our own
capability with the upstream AP’s advertised profile. Replace it with a clearly
named backhaul_bss_multi_ap_profile, which is populated from the association response
via pwhm (EndPoint.MultiAPProfile) and treated as read-only from prplMesh.
Update Traffic Separation and Service Prioritization decisions to no longer
check only backhaul_bss_multi_ap_profile > 1. Instead, compute an effective profile.
This ensures that features like TS and SP are only enabled when supported by
all participants (local Agent, upstream AP, and controller).
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
The Agent previously relied on certification_profile and ad-hoc overrides
to decide which Multi-AP Profile to advertise in AutoConfig Search and
Topology Response messages. In practice, this depended on certification
mode flags or pWHM defaults, which caused policy drift and ambiguity.
Introduce device_conf.multi_ap_profile as the single field
for runtime and advertisement:
- add a persistent MultiAPProfile parameter in Agent DM (BPL getter
bpl_cfg_get_agent_multi_ap_profile() with default=R2),
- read the parameter in beerocks_agent_main.cpp at startup,
- store it in device_conf.multi_ap_profile (enum),
- remove certification_profile usage,
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
The Agent currently has no canonical configuration source for the
Multi-AP Profile it should run/advertise. In practice, runtime behavior
may be inferred from external components (e.g. pWHM EndPoint defaults),
which leads to ambiguity and drift between what the Agent intends and
what the system exposes.
Introduce a persistent MultiAPProfile parameter in the
Agent DM schema to make the Agent the single source of truth.
PPM-3434.
Signed-off-by: Dmytro Puz <d.puz@inango-systems.com>
Currently `handle_ap_autoconfiguration_wsc` has miss implementation
in terms of storing values that are parsed from WSC message.
It handles M2/M8/MLD/RSN etc. TLVs but uses only `EncryptedSettingsPayload::config`
struct to store **everything**. It's wrong and makes code maintainability
and readability much worse.
This commit refactors `ApAutoConfigurationTask` to have two structs:
- `sBssInfo` - responsible for storing configs and data related to
BSS configuration, that were received from M2/MLD/RSN TLVs
- `sBStaInfo` - responsible for storing configs and data related to
bSTA configuration, that were received from M8
Also for future integration of Airties Vendor Extensions
(e.g hidden_ssid, bss_type) on prplMesh controller side,
funcs are moved to the general m2 parsing logic in `m2.h`.
Moved:
- `airties_vs_ap_autoconfiguration_wsc_parse_hidden_ssid` -> `m2::hidden_ssid()`
Closes PPM-3576
Signed-off-by: Volodymyr Pavlenko <pavlenko.vv@pm.me>
Previously, the agent skipped switching bandwidth when the current
bandwidth and the controller-requested bandwidth had equal scores,
even if their bandwidths differed. This caused the agent to
ignore the controller's bandwidth request.
Updated logic to ensure that when scores are equal, the agent
prioritizes the controller-requested bandwidth and switches
bandwidth if the bandwidth do not match.
This change improves alignment with controller expectations and
enhances channel selection accuracy.
Closes : PPM-3547
Signed-off-by: rramasamy <rramasamy@maxlinear.com>
Issue:
Legacy clients (without BTM support) are not steered correctly
because they are not added to the btm_steering_disallowed list and
there is no check whether the Station is 11v Capable.
Fix:
Check if the client supports BTM (802.11v) before steering.
If not supported, fallback to DISCONNECT flow.
If supported, proceed with BSS STEER request.
Added config parameter `allow_btm_to_non_11v_sta`:
- 0 -> Skip BTM steering for non-11v STAs.
- 1 -> Allow BTM steering for non-11v STAs.
clear btm_steering_disallowed list in dev_reset_default
Closes : PPM-3505
Signed-off-by: rramasamy <rramasamy@maxlinear.com>
Class `configData` name is not appropriate and does not specify
that it's the class to work with M2/M8's Encrypted Settings
So, to align this class with our code convention and make
naming more clear it's needed to rename it:
- configData -> EncryptedSettingsPayload
Related PPM-3576
Signed-off-by: Volodymyr Pavlenko <pavlenko.vv@pm.me>
During Airties DV testing, 802.11v packets were observed to have a Validity Interval of 2,
while the expected value is 100. Updated BSS_STEER_VALID_INT_BTT from 2 (200 ms) to 100 (10 s)
and removed the BSS_STEER_IMMINENT_VALID_INT_BTT usage.
Issue: PPM-3519
Signed-off-by: Nefi Guclu <nefi.guclu@airties.com>
Previous [CORE_0036] implemented the 1905-spec interpretation:
- When Channel is 255 - send measurement requests only for channels listed in
the Channel Report List.
- When Channel is not 255 - send a single measurement request for the specified channel.
A later commit(see PPM 3318) changed this behaviour to also send a request for
Channel 255 itself in addition to the listed channels, to satisfy WFA certification tests.
This patch restores the original 1905-spec behaviour and adds a special case
for WFA certification tests, allowing an extra request for Channel 255 only when
running in certification test mode.
PPM-3548
Signed-off-by: Durmus Koyuncu <durmus.koyuncu@airties.com>
Set RSN ovverinding to true to warn controller RSN TLV
is supported.
When M2 is received we set the BSS index with value sent.
When the RSN parameters configuration is received,
use BSS index to know which BSS has to be configured.
If the security_ies data received matches the
predifined value for WPA3 Personal Compatibility Mode,
set auth_type to RSN and use new parameter additional_auth
to set WPA3-PCM value.
Note that for now it is only use for WPA3-PCM and old way
is kept for other security modes.
The purpose was to have support for WPA3-PCM with the right
way.
https://prplfoundationcloud.atlassian.net/browse/PPM-3291
Signed-off-by: Vincent Ayme <vincent.ayme@sagemcom.com>
Co-authored-by: Iacob JUC <iacob.juc_ext@softathome.com>