
For non-TxMBSSID ML AP ML probe req may not receive any response from MBSSID AP and later partner link may fail to connect as scan entry is not present. Introduce new flag to suggest whether the partner link scan entry is present or not in the scan DB. If flag is set to true, generate scan entry for such links. Introduce new APIs which will generate ML probe resp using the per-STA profile of partner link from assoc resp frame. Introduce API to get the current candidate scan entry from connect request. Change-Id: I1c33956b01eb468afa26be5b0bfba634ee3a0aee CRs-Fixed: 3675830
770 lines
32 KiB
C
770 lines
32 KiB
C
/*
|
|
* Copyright (c) 2021, The Linux Foundation. All rights reserved.
|
|
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
|
*
|
|
* Permission to use, copy, modify, and/or distribute this software for any
|
|
* purpose with or without fee is hereby granted, provided that the above
|
|
* copyright notice and this permission notice appear in all copies.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
|
*/
|
|
|
|
/*
|
|
* DOC: contains MLO manager containing util public api's
|
|
*/
|
|
#ifndef _WLAN_UTILS_MLO_H_
|
|
#define _WLAN_UTILS_MLO_H_
|
|
|
|
#include <wlan_cmn_ieee80211.h>
|
|
#include "wlan_mlo_mgr_public_structs.h"
|
|
#include <wlan_cm_ucfg_api.h>
|
|
#include <wlan_objmgr_vdev_obj.h>
|
|
#include <wlan_mlo_epcs.h>
|
|
|
|
#ifdef WLAN_FEATURE_11BE_MLO
|
|
|
|
#define MLO_LINKSPECIFIC_ASSOC_REQ_FC0 0x00
|
|
#define MLO_LINKSPECIFIC_ASSOC_REQ_FC1 0x00
|
|
#define MLO_LINKSPECIFIC_ASSOC_RESP_FC0 0x10
|
|
#define MLO_LINKSPECIFIC_ASSOC_RESP_FC1 0x00
|
|
#define MLO_LINKSPECIFIC_PROBE_RESP_FC0 0x50
|
|
#define MLO_LINKSPECIFIC_PROBE_RESP_FC1 0x00
|
|
|
|
/**
|
|
* util_gen_link_assoc_req() - Generate link specific assoc request
|
|
* @frame: Pointer to original association request. This should not contain the
|
|
* 802.11 header, and must start from the fixed fields in the association
|
|
* request. This is required due to some caller semantics built into the end to
|
|
* end design.
|
|
* @frame_len: Length of original association request
|
|
* @isreassoc: Whether this is a re-association request
|
|
* @link_id: Link ID for secondary links
|
|
* @link_addr: Secondary link's MAC address
|
|
* @link_frame: Generated secondary link specific association request. Note that
|
|
* this will start from the 802.11 header (unlike the original association
|
|
* request). This should be ignored in the case of failure.
|
|
* @link_frame_maxsize: Maximum size of generated secondary link specific
|
|
* association request
|
|
* @link_frame_len: Pointer to location where populated length of generated
|
|
* secondary link specific association request should be written. This should be
|
|
* ignored in the case of failure.
|
|
*
|
|
* Generate a link specific logically equivalent association request for the
|
|
* secondary link from the original association request containing a Multi-Link
|
|
* element. This applies to both association and re-association requests.
|
|
* Currently, only two link MLO is supported.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS
|
|
util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len);
|
|
|
|
/**
|
|
* util_gen_link_assoc_rsp() - Generate link specific assoc response
|
|
* @frame: Pointer to original association response. This should not contain the
|
|
* 802.11 header, and must start from the fixed fields in the association
|
|
* response. This is required due to some caller semantics built into the end to
|
|
* end design.
|
|
* @frame_len: Length of original association response
|
|
* @isreassoc: Whether this is a re-association response
|
|
* @link_id: Link ID for secondary links
|
|
* @link_addr: Secondary link's MAC address
|
|
* @link_frame: Generated secondary link specific association response. Note
|
|
* that this will start from the 802.11 header (unlike the original association
|
|
* response). This should be ignored in the case of failure.
|
|
* @link_frame_maxsize: Maximum size of generated secondary link specific
|
|
* association response
|
|
* @link_frame_len: Pointer to location where populated length of generated
|
|
* secondary link specific association response should be written. This should
|
|
* be ignored in the case of failure.
|
|
*
|
|
* Generate a link specific logically equivalent association response for the
|
|
* secondary link from the original association response containing a Multi-Link
|
|
* element. This applies to both association and re-association responses.
|
|
* Currently, only two link MLO is supported.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS
|
|
util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len);
|
|
|
|
/**
|
|
* util_gen_link_probe_rsp_from_assoc_rsp() - Generate link specific
|
|
* probe response from assoc response.
|
|
* @frame: Pointer to original association response. This should not contain the
|
|
* 802.11 header, and must start from the fixed fields in the association
|
|
* response. This is required due to some caller semantics built into the end to
|
|
* end design.
|
|
* @frame_len: Length of original association response
|
|
* @link_id: Link ID for secondary links
|
|
* @link_addr: Secondary link's MAC address
|
|
* @link_frame: Generated secondary link specific association response. Note
|
|
* that this will start from the 802.11 header (unlike the original association
|
|
* response). This should be ignored in the case of failure.
|
|
* @link_frame_maxsize: Maximum size of generated secondary link specific
|
|
* association response
|
|
* @link_frame_len: Pointer to location where populated length of generated
|
|
* secondary link specific association response should be written. This should
|
|
* be ignored in the case of failure.
|
|
* @bcn_prb_ptr: Pointer to probe response of the current link on which assoc
|
|
* response is received, This should not contain the 802.11 header, and must
|
|
* start from the fixed fields in the probe response.
|
|
* @bcn_prb_len: Length of probe response of @bcn_prb_ptr.
|
|
*
|
|
* Generate a link specific logically equivalent probe response for the
|
|
* secondary link from the original association response containing a Multi-Link
|
|
* element.
|
|
* Currently, only two link MLO is supported.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS
|
|
util_gen_link_probe_rsp_from_assoc_rsp(uint8_t *frame, qdf_size_t frame_len,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len,
|
|
uint8_t *bcn_prb_ptr,
|
|
qdf_size_t bcn_prb_len);
|
|
|
|
/**
|
|
* util_gen_link_probe_rsp() - Generate link specific probe response
|
|
* @frame: Pointer to original probe response. This should not contain the
|
|
* 802.11 header, and must start from the fixed fields in the probe
|
|
* response. This is required due to some caller semantics built into the end to
|
|
* end design.
|
|
* @frame_len: Length of original probe response
|
|
* @link_addr: Secondary link's MAC address
|
|
* @link_id: Link ID for secondary links
|
|
* @link_frame: Generated secondary link specific probe response. Note
|
|
* that this will start from the 802.11 header (unlike the original probe
|
|
* response). This should be ignored in the case of failure.
|
|
* @link_frame_maxsize: Maximum size of generated secondary link specific
|
|
* probe response
|
|
* @link_frame_len: Pointer to location where populated length of generated
|
|
* secondary link specific probe response should be written. This should
|
|
* be ignored in the case of failure.
|
|
*
|
|
* Generate a link specific logically equivalent probe response for the
|
|
* secondary link from the original probe response containing a Multi-Link
|
|
* element. This applies to both probe responses.
|
|
* Currently, only two link MLO is supported.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS
|
|
util_gen_link_probe_rsp(uint8_t *frame, qdf_size_t frame_len,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len);
|
|
|
|
/**
|
|
* util_find_mlie - Find the first Multi-Link element or the start of the first
|
|
* Multi-Link element fragment sequence in a given buffer containing elements,
|
|
* if a Multi-Link element or element fragment sequence exists in the given
|
|
* buffer.
|
|
*
|
|
* @buf: Buffer to be searched for the Multi-Link element or the start of the
|
|
* Multi-Link element fragment sequence
|
|
* @buflen: Length of the buffer
|
|
* @mlieseq: Pointer to location where the starting address of the Multi-Link
|
|
* element or Multi-Link element fragment sequence should be updated if found
|
|
* in the given buffer. The value NULL will be updated to this location if the
|
|
* element or element fragment sequence is not found. This should be ignored by
|
|
* the caller if the function returns error.
|
|
* @mlieseqlen: Pointer to location where the total length of the Multi-Link
|
|
* element or Multi-Link element fragment sequence should be updated if found
|
|
* in the given buffer. This should be ignored by the caller if the function
|
|
* returns error, or if the function indicates that the element or element
|
|
* fragment sequence was not found by providing a starting address of NULL.
|
|
*
|
|
* Find the first Multi-Link element or the start of the first Multi-Link
|
|
* element fragment sequence in a given buffer containing elements, if a
|
|
* Multi-Link element or element fragment sequence exists in the given buffer.
|
|
* The buffer should contain only 802.11 Information elements, and thus should
|
|
* not contain other information like 802.11 header, 802.11 frame body
|
|
* components like fields that are not elements (e.g. Capability Information
|
|
* field, Beacon Interval field), etc.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
|
|
qdf_size_t *mlieseqlen);
|
|
|
|
/**
|
|
* util_find_mlie_by_variant - Find the first Multi-Link element or the start of
|
|
* the first Multi-Link element fragment sequence in a given buffer containing
|
|
* elements based on variant, if a Multi-Link element or element fragment
|
|
* sequence exists in the given buffer.
|
|
*
|
|
* @buf: Buffer to be searched for the Multi-Link element or the start of the
|
|
* Multi-Link element fragment sequence
|
|
* @buflen: Length of the buffer
|
|
* @mlieseq: Based on the variant, pointer to location where the starting
|
|
* address of the Multi-Link element or Multi-Link element fragment sequence
|
|
* should be updated if found in the given buffer. The value NULL will be
|
|
* updated to this location if the element or element fragment sequence is not
|
|
* found. This should be ignored by the caller if the function returns error.
|
|
* @mlieseqlen: Pointer to location where the total length of the Multi-Link
|
|
* element or Multi-Link element fragment sequence should be updated if found
|
|
* in the given buffer. This should be ignored by the caller if the function
|
|
* returns error, or if the function indicates that the element or element
|
|
* fragment sequence was not found by providing a starting address of NULL.
|
|
* @variant: Multi-Link element variant. The value should be interpreted by the
|
|
* caller as a member of enum wlan_ml_variant. (This enum is not directly used
|
|
* as an argument, so that non-MLO code that happens to call this function does
|
|
* not need to be aware of the definition of the enum, though such a call would
|
|
* ultimately result in an error).
|
|
*
|
|
* Based on variant, find the Multi-Link element or the start of the Multi-Link
|
|
* element fragment sequence in a given buffer containing elements, if a
|
|
* Multi-Link element or element fragment sequence exists in the given buffer.
|
|
* The buffer should contain only 802.11 Information elements, and thus should
|
|
* not contain other information like 802.11 header, 802.11 frame body
|
|
* components like fields that are not elements (e.g. Capability Information
|
|
* field, Beacon Interval field), etc.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
|
|
qdf_size_t *mlieseqlen, int variant);
|
|
|
|
/**
|
|
* util_get_mlie_variant() - Get ML IE variant
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @variant: Pointer to the location where the value of the variant should be
|
|
* updated. On success, the value should be interpreted by the caller as a
|
|
* member of enum wlan_ml_variant. (This enum is not directly used as an
|
|
* argument, so that non-MLO code that happens to call this function does not
|
|
* need to be aware of the definition of the enum, though such a call would
|
|
* ultimately result in an error). The value should be ignored by the caller if
|
|
* the function returns error.
|
|
*
|
|
* Get the variant of the given Multi-Link element or element fragment sequence.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
int *variant);
|
|
|
|
/**
|
|
* util_get_bvmlie_mldmacaddr() - Get the MLD MAC address
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mldmacaddr: Pointer to the location where the MLD MAC address should be
|
|
* updated. This should be ignored by the caller if the function returns error.
|
|
*
|
|
* Get the MLD MAC address from a given Basic variant Multi-Link element
|
|
* or element fragment sequence.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
struct qdf_mac_addr *mldmacaddr);
|
|
|
|
/**
|
|
* util_get_bvmlie_eml_cap() - Get the EML capabilities
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @eml_cap_found: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the EML cabalility was found or not. This should
|
|
* be ignored by the caller if the function returns error.
|
|
* @eml_cap: Pointer to the location where the EML capabilities should be
|
|
* updated. This should be ignored by the caller if the function indicates
|
|
* that the EML capability was not found.
|
|
*
|
|
* Get the EML capabilities from a given Basic variant Multi-Link element or
|
|
* element fragment sequence.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *eml_cap_found,
|
|
uint16_t *eml_cap);
|
|
|
|
/**
|
|
* util_get_bvmlie_msd_cap() - Get the MSD capabilities for Basic variant
|
|
* MLO IE
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @msd_cap_found: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the MSD cabalility was found or not. This should
|
|
* be ignored by the caller if the function returns error.
|
|
* @msd_cap: Pointer to the location where the MSD capabilities should be
|
|
* updated. This should be ignored by the caller if the function indicates
|
|
* that the MSD capability was not found.
|
|
*
|
|
* Get the MSD capabilities from a given Basic variant Multi-Link element or
|
|
* element fragment sequence.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *msd_cap_found, uint16_t *msd_cap);
|
|
/**
|
|
* util_get_bvmlie_primary_linkid() - Get the link identifier
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @linkidfound: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the link identifier was found or not. This should
|
|
* be ignored by the caller if the function returns error.
|
|
* @linkid: Pointer to the location where the value of the link identifier
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error, or if the function indicates that the link identifier was not
|
|
* found.
|
|
*
|
|
* Get the link identifier from a given Basic variant Multi-Link element or
|
|
* element fragment sequence, of the AP that transmits the Multi-Link
|
|
* element/element fragment sequence or the nontransmitted BSSID in the same
|
|
* multiple BSSID set as the AP that transmits the Multi-Link element/element
|
|
* fragment sequence and that is affiliated with the MLD that is described in
|
|
* the Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *linkidfound, uint8_t *linkid);
|
|
|
|
/**
|
|
* util_get_mlie_common_info_len() - Get the MLD common info len
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @commoninfo_len: Pointer to the location where the value of the MLD common
|
|
* info len should be updated. This should be ignored by the caller if the
|
|
* function returns error.
|
|
*
|
|
* Get the MLD common info len from Multi-Link element transmitted by the AP.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
uint8_t *commoninfo_len);
|
|
|
|
/**
|
|
* util_get_bvmlie_bssparamchangecnt() - Get the MLD BSS PARAM Change Count
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @bssparamchangecntfound: Pointer to the location where a boolean status
|
|
* should be updated indicating whether the MLD BSS PARAM Change Count was
|
|
* found or not. This should be ignored by the caller if the function
|
|
* returns error.
|
|
* @bssparamchangecnt: Pointer to the location where the value of the MLD BSS
|
|
* PARAM Change Count should be updated. This should be ignored by the caller
|
|
* if the function returns error, or if the function indicates that the MLD
|
|
* BSS PARAM Change Count was not found.
|
|
*
|
|
* Get the MLD BSS PARAM Change Count from Multi-Link element transmitted
|
|
* by the AP.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *bssparamchangecntfound,
|
|
uint8_t *bssparamchangecnt);
|
|
|
|
/**
|
|
* util_get_bvmlie_mldcap() - Get the MLD capabilities
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mldcapfound: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the MLD capabilities was found or not. This should
|
|
* be ignored by the caller if the function returns error.
|
|
* @mldcap: Pointer to the location where the value of the MLD capabilities
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error, or if the function indicates that the MLD capabilities was not
|
|
* found.
|
|
*
|
|
* Get the MLD capabilities from a given Basic variant Multi-Link element or
|
|
* element fragment sequence, of the AP that transmits the Multi-Link
|
|
* element/element fragment sequence or the nontransmitted BSSID in the same
|
|
* multiple BSSID set as the AP that transmits the Multi-Link element/element
|
|
* fragment sequence and that is affiliated with the MLD that is described in
|
|
* the Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_mldcap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *mldcapfound, uint16_t *mldcap);
|
|
/**
|
|
* util_get_bvmlie_ext_mld_cap_op_info() - Get Ext MLD Capabilities and
|
|
* operation
|
|
* @mlie_seq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlie_seqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @ext_mld_cap_found: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the Ext MLD capabilities was found or not.
|
|
* This should be ignored by the caller if the function returns error.
|
|
* @ext_mld_cap: Pointer to the location where the value of the Ext MLD
|
|
* capabilities should be updated. This should be ignored by the caller if the
|
|
* function returns error, or if the function indicates that the MLD
|
|
* capabilities was not found.
|
|
*
|
|
* Get the Ext MLD capabilities from a given Basic variant Multi-Link element or
|
|
* element fragment sequence, of the AP that transmits the Multi-Link element/
|
|
* element fragment sequence or the non-transmitted BSSID in the same
|
|
* multiple BSSID set as the AP that transmits the Multi-Link element/element
|
|
* fragment sequence and that is affiliated with the MLD that is described in
|
|
* the Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_ext_mld_cap_op_info(uint8_t *mlie_seq, qdf_size_t mlie_seqlen,
|
|
bool *ext_mld_cap_found,
|
|
uint16_t *ext_mld_cap);
|
|
|
|
/**
|
|
* util_get_bvmlie_persta_partner_info() - Get per-STA partner link information
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @partner_info: Pointer to the location where the partner link information
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error. Note that success will be returned and the number of links in
|
|
* this structure will be reported as 0, if no Link Info is found, or no per-STA
|
|
* profile is found, or if none of the per-STA profiles includes a MAC address
|
|
* in the STA Info field (assuming no errors are encountered).
|
|
*
|
|
* Get partner link information and NSTR capability information in the
|
|
* per-STA profiles present in a Basic variant Multi-Link element.
|
|
* The partner link information is returned only for those per-STA profiles
|
|
* which have a MAC address in the STA Info field.
|
|
* The NSTR capability information is returned only for those per-STA profiles
|
|
* which are Complete per-STA profiles.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct mlo_partner_info *partner_info);
|
|
|
|
/**
|
|
* util_get_prvmlie_mldid - Get the MLD ID from a given Probe Request
|
|
* variant Multi-Link element , of the STA that transmits ML Probe Request
|
|
* with the Multi-Link element
|
|
*
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mldidfound: Pointer to the location where a boolean status should be
|
|
* updated indicating whether the MLD ID was found or not. This should
|
|
* be ignored by the caller if the function returns error.
|
|
* @mldid: Pointer to the location where the value of the MLD ID
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error, or if the function indicates that the MLD ID was not
|
|
* found.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *mldidfound, uint8_t *mldid);
|
|
|
|
/**
|
|
* util_get_prvmlie_persta_link_id() - Get per-STA probe req link information
|
|
*
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @probereq_info: Pointer to the location where the probe req link information
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error. Note that success will be returned and the number of links in
|
|
* this structure will be reported as 0, if no Link Info is found, or no per-STA
|
|
* profile is found.
|
|
*
|
|
* Get probe req link information in the per-STA profiles present in a Probe req
|
|
* variant Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct mlo_probereq_info *probereq_info);
|
|
|
|
/**
|
|
* util_get_rvmlie_mldmacaddr() - Get the MLD MAC address from a given Reconfig
|
|
* variant Multi-Link element.
|
|
*
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mldmacaddr: Pointer to the location where the MLD MAC address should be
|
|
* updated. This should be ignored by the caller if the function returns error.
|
|
* @is_mldmacaddr_found: mld address found or not
|
|
*
|
|
* Get the MLD MAC address from a given Reconfig variant Multi-Link element
|
|
* or element fragment sequence.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure
|
|
*/
|
|
QDF_STATUS
|
|
util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
struct qdf_mac_addr *mldmacaddr,
|
|
bool *is_mldmacaddr_found);
|
|
|
|
/**
|
|
* util_get_rvmlie_persta_link_info() - Get per-STA reconfig link information
|
|
*
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @reconfig_info: Pointer to the location where the reconfig link information
|
|
* should be updated. This should be ignored by the caller if the function
|
|
* returns error. Note that success will be returned and the number of links in
|
|
* this structure will be reported as 0, if no Link Info is found, or no per-STA
|
|
* profile is found.
|
|
*
|
|
* Get reconfig link information in the per-STA profiles present in a Reconfig
|
|
* variant Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS
|
|
util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct ml_rv_info *reconfig_info);
|
|
|
|
/**
|
|
* util_get_pav_mlie_link_info() - Get priority access link information
|
|
*
|
|
* @mlieseq: Starting address of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @mlieseqlen: Total length of the Multi-Link element or Multi-Link element
|
|
* fragment sequence
|
|
* @pa_info: Pointer to the location where the priority access multi link
|
|
* information is stored.
|
|
*
|
|
* Get EPCS priority access information from Priority Access Multi-Link element.
|
|
*
|
|
* Return: QDF_STATUS_SUCCESS in the case of success, QDF_STATUS value giving
|
|
* the reason for error in the case of failure.
|
|
*/
|
|
QDF_STATUS util_get_pav_mlie_link_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct ml_pa_info *pa_info);
|
|
#else
|
|
static inline QDF_STATUS
|
|
util_gen_link_assoc_req(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_gen_link_assoc_rsp(uint8_t *frame, qdf_size_t frame_len, bool isreassoc,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_gen_link_probe_rsp_from_assoc_rsp(uint8_t *frame, qdf_size_t frame_len,
|
|
uint8_t link_id,
|
|
struct qdf_mac_addr link_addr,
|
|
uint8_t *link_frame,
|
|
qdf_size_t link_frame_maxsize,
|
|
qdf_size_t *link_frame_len,
|
|
uint8_t *bcn_prb_ptr,
|
|
qdf_size_t bcn_prb_len)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_find_mlie(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
|
|
qdf_size_t *mlieseqlen)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_find_mlie_by_variant(uint8_t *buf, qdf_size_t buflen, uint8_t **mlieseq,
|
|
qdf_size_t *mlieseqlen)
|
|
{
|
|
return QDF_STATUS_E_FAILURE;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_mlie_variant(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
int *variant)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_mlie_common_info_len(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
uint8_t *commoninfo_len)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_bssparamchangecnt(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *bssparamchangecntfound,
|
|
uint8_t *bssparamchangecnt)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
struct qdf_mac_addr *mldmacaddr)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_eml_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *eml_cap_found,
|
|
uint16_t *eml_cap)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_msd_cap(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *msd_cap_found,
|
|
uint16_t *msd_cap)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_primary_linkid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *linkidfound, uint8_t *linkid)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_bvmlie_persta_partner_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct mlo_partner_info *partner_info)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_prvmlie_persta_link_id(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct mlo_probereq_info *probereq_info)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_prvmlie_mldid(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
bool *mldcapfound, uint8_t *mldcap)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_rvmlie_mldmacaddr(uint8_t *mlieseq, qdf_size_t mlieseqlen,
|
|
struct qdf_mac_addr *mldmacaddr,
|
|
bool *is_mldmacaddr_found)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline QDF_STATUS
|
|
util_get_rvmlie_persta_link_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct ml_rv_info *reconfig_info)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
static inline
|
|
QDF_STATUS util_get_pav_mlie_link_info(uint8_t *mlieseq,
|
|
qdf_size_t mlieseqlen,
|
|
struct ml_pa_info *pa_info)
|
|
{
|
|
return QDF_STATUS_E_NOSUPPORT;
|
|
}
|
|
|
|
#endif /* WLAN_FEATURE_11BE_MLO */
|
|
#endif /* _WLAN_UTILS_MLO_H_ */
|