286 lines
9.5 KiB
C
Executable File
286 lines
9.5 KiB
C
Executable File
/*
|
|
* Fundamental types and constants relating to WFA MBO
|
|
* (Multiband Operation)
|
|
* Copyright (C) 1999-2019, Broadcom.
|
|
*
|
|
* Unless you and Broadcom execute a separate written software license
|
|
* agreement governing use of this software, this software is licensed to you
|
|
* under the terms of the GNU General Public License version 2 (the "GPL"),
|
|
* available at http://www.broadcom.com/licenses/GPLv2.php, with the
|
|
* following added to such license:
|
|
*
|
|
* As a special exception, the copyright holders of this software give you
|
|
* permission to link this software with independent modules, and to copy and
|
|
* distribute the resulting executable under terms of your choice, provided that
|
|
* you also meet, for each linked independent module, the terms and conditions of
|
|
* the license of that module. An independent module is a module which is not
|
|
* derived from this software. The special exception does not apply to any
|
|
* modifications of the software.
|
|
*
|
|
* Notwithstanding the above, under no circumstances may you combine this
|
|
* software in any way with any other Broadcom software provided under a license
|
|
* other than the GPL, without Broadcom's express prior written consent.
|
|
*
|
|
*
|
|
* <<Broadcom-WL-IPTag/Open:>>
|
|
*
|
|
* $Id$
|
|
*/
|
|
|
|
#ifndef _MBO_H_
|
|
#define _MBO_H_
|
|
|
|
/* This marks the start of a packed structure section. */
|
|
#include <packed_section_start.h>
|
|
|
|
/* WiFi MBO OUI values */
|
|
#define MBO_OUI WFA_OUI /* WiFi OUI 50:6F:9A */
|
|
/* oui_type field identifying the type and version of the MBO IE. */
|
|
#define MBO_OUI_TYPE WFA_OUI_TYPE_MBO /* OUI Type/Version */
|
|
/* IEEE 802.11 vendor specific information element. */
|
|
#define MBO_IE_ID 0xdd
|
|
|
|
/* MBO ATTR related macros */
|
|
#define MBO_ATTR_ID_OFF 0
|
|
#define MBO_ATTR_LEN_OFF 1
|
|
#define MBO_ATTR_DATA_OFF 2
|
|
|
|
#define MBO_ATTR_ID_LEN 1 /* Attr ID field length */
|
|
#define MBO_ATTR_LEN_LEN 1 /* Attr Length field length */
|
|
#define MBO_ATTR_HDR_LEN 2 /* ID + 1-byte length field */
|
|
|
|
/* MBO subelemts related */
|
|
#define MBO_SUBELEM_ID 0xdd
|
|
#define MBO_SUBELEM_OUI WFA_OUI
|
|
|
|
#define MBO_SUBELEM_ID_LEN 1 /* SubElement ID field length */
|
|
#define MBO_SUBELEM_LEN_LEN 1 /* SubElement length field length */
|
|
#define MBO_SUBELEM_HDR_LEN 6 /* ID + length + OUI + OUY TYPE */
|
|
|
|
#define MBO_NON_PREF_CHAN_SUBELEM_LEN_LEN(L) (7 + (L)) /* value of length field */
|
|
#define MBO_NON_PREF_CHAN_SUBELEM_TOT_LEN(L) \
|
|
(MBO_SUBELEM_ID_LEN + MBO_SUBELEM_LEN_LEN + MBO_NON_PREF_CHAN_SUBELEM_LEN_LEN(L))
|
|
/* MBO attributes as defined in the mbo spec */
|
|
enum {
|
|
MBO_ATTR_MBO_AP_CAPABILITY = 1,
|
|
MBO_ATTR_NON_PREF_CHAN_REPORT = 2,
|
|
MBO_ATTR_CELL_DATA_CAP = 3,
|
|
MBO_ATTR_ASSOC_DISALLOWED = 4,
|
|
MBO_ATTR_CELL_DATA_CONN_PREF = 5,
|
|
MBO_ATTR_TRANS_REASON_CODE = 6,
|
|
MBO_ATTR_TRANS_REJ_REASON_CODE = 7,
|
|
MBO_ATTR_ASSOC_RETRY_DELAY = 8
|
|
};
|
|
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_ie_s {
|
|
uint8 id; /* IE ID: MBO_IE_ID 0xDD */
|
|
uint8 len; /* IE length */
|
|
uint8 oui[WFA_OUI_LEN]; /* MBO_OUI 50:6F:9A */
|
|
uint8 oui_type; /* MBO_OUI_TYPE 0x16 */
|
|
uint8 attr[1]; /* var len attributes */
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_ie_t;
|
|
|
|
#define MBO_IE_HDR_SIZE (OFFSETOF(wifi_mbo_ie_t, attr))
|
|
/* oui:3 bytes + oui type:1 byte */
|
|
#define MBO_IE_NO_ATTR_LEN 4
|
|
|
|
/* MBO AP Capability Attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_ap_cap_ind_attr_s {
|
|
/* Attribute ID - 0x01. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* AP capability bitmap */
|
|
uint8 cap_ind;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_ap_cap_ind_attr_t;
|
|
|
|
/* MBO AP Capability Indication Field Values */
|
|
#define MBO_AP_CAP_IND_CELLULAR_AWARE 0x40
|
|
|
|
/* Non-preferred Channel Report Attribute */
|
|
#define MBO_NON_PREF_CHAN_ATTR_OPCALSS_OFF 2
|
|
#define MBO_NON_PREF_CHAN_ATTR_CHANLIST_OFF 3
|
|
#define MBO_NON_PREF_CHAN_ATTR_PREF_OFF(L) \
|
|
(MBO_NON_PREF_CHAN_ATTR_CHANLIST_OFF + (L))
|
|
|
|
#define MBO_NON_PREF_CHAN_ATTR_OPCALSS_LEN 1
|
|
#define MBO_NON_PREF_CHAN_ATTR_PREF_LEN 1
|
|
#define MBO_NON_PREF_CHAN_ATTR_REASON_LEN 1
|
|
|
|
#define MBO_NON_PREF_CHAN_ATTR_LEN(L) ((L) + 3)
|
|
#define MBO_NON_PREF_CHAN_ATTR_TOT_LEN(L) (MBO_ATTR_HDR_LEN + (L) + 3)
|
|
|
|
/* attribute len - (opclass + Pref + Reason) */
|
|
#define MBO_NON_PREF_CHAN_ATTR_CHANLIST_LEN(L) ((L) - 3)
|
|
|
|
/* MBO Non-preferred Channel Report: "Preference" field value */
|
|
enum {
|
|
MBO_STA_NON_OPERABLE_BAND_CHAN = 0,
|
|
MBO_STA_NON_PREFERRED_BAND_CHAN = 1,
|
|
MBO_STA_PREFERRED_BAND_CHAN = 255
|
|
};
|
|
|
|
/* MBO Non-preferred Channel Report: "Reason Code" field value */
|
|
enum {
|
|
MBO_NON_PREF_CHAN_RC_UNSPECIFIED = 0,
|
|
MBO_NON_PREF_CHAN_RC_BCN_STRENGTH = 1,
|
|
MBO_NON_PREF_CHAN_RC_CO_LOC_INTERFERENCE = 2,
|
|
MBO_NON_PREF_CHAN_RC_IN_DEV_INTERFERENCE = 3
|
|
};
|
|
|
|
/* Cellular Data Capability Attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_cell_data_cap_attr_s {
|
|
/* Attribute ID - 0x03. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* MBO STA's cellular capability */
|
|
uint8 cell_conn;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_cell_data_cap_attr_t;
|
|
|
|
/* MBO Cellular Data Capability: "Cellular Connectivity" field value */
|
|
enum {
|
|
MBO_CELL_DATA_CONN_AVAILABLE = 1,
|
|
MBO_CELL_DATA_CONN_NOT_AVAILABLE = 2,
|
|
MBO_CELL_DATA_CONN_NOT_CAPABLE = 3
|
|
};
|
|
|
|
/* Association Disallowed attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_assoc_disallowed_attr_s {
|
|
/* Attribute ID - 0x04. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* Reason of not accepting new association */
|
|
uint8 reason_code;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_assoc_disallowed_attr_t;
|
|
|
|
/* Association Disallowed attr Reason code field values */
|
|
enum {
|
|
MBO_ASSOC_DISALLOWED_RC_UNSPECIFIED = 1,
|
|
MBO_ASSOC_DISALLOWED_RC_MAX_STA_REACHED = 2,
|
|
MBO_ASSOC_DISALLOWED_RC_AIR_IFACE_OVERLOADED = 3,
|
|
MBO_ASSOC_DISALLOWED_RC_AUTH_SRVR_OVERLOADED = 4,
|
|
MBO_ASSOC_DISALLOWED_RC_INSUFFIC_RSSI = 5
|
|
};
|
|
|
|
/* Cellular Data Conn Pref attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_cell_data_conn_pref_attr_s {
|
|
/* Attribute ID - 0x05. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* Preference value of cellular connection */
|
|
uint8 cell_pref;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_cell_data_conn_pref_attr_t;
|
|
|
|
/* Cellular Data Conn Pref attr: Cellular Pref field values */
|
|
enum {
|
|
MBO_CELLULAR_DATA_CONN_EXCLUDED = 1,
|
|
MBO_CELLULAR_DATA_CONN_NOT_PREFERRED = 2,
|
|
MBO_CELLULAR_DATA_CONN_PREFERRED = 255
|
|
};
|
|
|
|
/* Transition Reason Code Attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_trans_reason_code_attr_s {
|
|
/* Attribute ID - 0x06. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* Reason of transition recommendation */
|
|
uint8 trans_reason_code;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_trans_reason_code_attr_t;
|
|
|
|
/* Transition Reason Code Attr: trans reason code field values */
|
|
enum {
|
|
MBO_TRANS_REASON_UNSPECIFIED = 0,
|
|
MBO_TRANS_REASON_EXCESSV_FRM_LOSS_RATE = 1,
|
|
MBO_TRANS_REASON_EXCESSV_TRAFFIC_DELAY = 2,
|
|
MBO_TRANS_REASON_INSUFF_BW = 3,
|
|
MBO_TRANS_REASON_LOAD_BALANCING = 4,
|
|
MBO_TRANS_REASON_LOW_RSSI = 5,
|
|
MBO_TRANS_REASON_EXCESSV_RETRANS_RCVD = 6,
|
|
MBO_TRANS_REASON_HIGH_INTERFERENCE = 7,
|
|
MBO_TRANS_REASON_GRAY_ZONE = 8,
|
|
MBO_TRANS_REASON_PREMIUM_AP_TRANS = 9
|
|
};
|
|
|
|
/* Transition Rejection Reason Code Attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_trans_rej_reason_code_attr_s {
|
|
/* Attribute ID - 0x07. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* Reason of transition rejection */
|
|
uint8 trans_rej_reason_code;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_trans_rej_reason_code_attr_t;
|
|
|
|
/* Transition Rej Reason Code Attr: trans rej reason code field values */
|
|
enum {
|
|
MBO_TRANS_REJ_REASON_UNSPECIFIED = 0,
|
|
MBO_TRANS_REJ_REASON_EXSSIV_FRM_LOSS_RATE = 1,
|
|
MBO_TRANS_REJ_REASON_EXSSIV_TRAFFIC_DELAY = 2,
|
|
MBO_TRANS_REJ_REASON_INSUFF_QOS_CAPACITY = 3,
|
|
MBO_TRANS_REJ_REASON_LOW_RSSI = 4,
|
|
MBO_TRANS_REJ_REASON_HIGH_INTERFERENCE = 5,
|
|
MBO_TRANS_REJ_REASON_SERVICE_UNAVAIL = 6
|
|
};
|
|
|
|
/* Assoc Retry Delay Attribute */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_assoc_retry_delay_attr_s {
|
|
/* Attribute ID - 0x08. */
|
|
uint8 id;
|
|
/* Length of the following fields in the attribute */
|
|
uint8 len;
|
|
/* No of Seconds before next assoc attempt */
|
|
uint16 reassoc_delay;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_assoc_retry_delay_attr_t;
|
|
|
|
#define MBO_ANQP_OUI_TYPE 0x12 /* OUTI Type/Version */
|
|
|
|
/* MBO ANQP Element */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_anqp_elem_s {
|
|
/* ID - 56797 */
|
|
uint16 info_id;
|
|
/* Length of the OUI + Vendor Specific content */
|
|
uint16 len;
|
|
/* WFA_OUI 50:6F:9A */
|
|
uint8 oui[WFA_OUI_LEN];
|
|
/* MBO_ANQP_OUI_TYPE 0x12 */
|
|
uint8 oui_type;
|
|
/* MBO ANQP element type */
|
|
uint8 sub_type;
|
|
/* variable len payload */
|
|
uint8 payload[1];
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_anqp_elem_t;
|
|
|
|
#define MBO_ANQP_ELEM_HDR_SIZE (OFFSETOF(wifi_mbo_anqp_elem_t, payload))
|
|
|
|
/* oui:3 bytes + oui type:1 byte + sub type:1 byte */
|
|
#define MBO_ANQP_ELEM_NO_PAYLOAD_LEN 5
|
|
|
|
/* MBO ANQP Subtype Values */
|
|
enum {
|
|
MBO_ANQP_ELEM_MBO_QUERY_LIST = 1,
|
|
MBO_ANQP_ELEM_CELL_DATA_CONN_PREF = 2
|
|
};
|
|
|
|
/* MBO sub-elements */
|
|
typedef BWL_PRE_PACKED_STRUCT struct wifi_mbo_cell_cap_subelem_s {
|
|
/* 0xDD */
|
|
uint8 sub_elem_id;
|
|
/* Length of the following fields in sub-element */
|
|
uint8 len;
|
|
/* WFA_OUI 50:6F:9A */
|
|
uint8 oui[WFA_OUI_LEN];
|
|
/* OUI_TYPE 0x03 */
|
|
uint8 oui_type;
|
|
/* STA cellular capability */
|
|
uint8 cell_conn;
|
|
} BWL_POST_PACKED_STRUCT wifi_mbo_cell_cap_subelem_t;
|
|
|
|
/* This marks the end of a packed structure section. */
|
|
#include <packed_section_end.h>
|
|
|
|
#endif /* __MBO_H__ */
|