4dac6dcef8
Add instant communication mode and NCS-PK support Bug: 203220137 Test: build Change-Id: I46fd18d1e1780b76c40f59ed05503e39b71e3aa6
2796 lines
92 KiB
C
2796 lines
92 KiB
C
/*
|
||
* Copyright (C) 2016 The Android Open Source Project
|
||
*
|
||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||
* you may not use this file except in compliance with the License.
|
||
* You may obtain a copy of the License at
|
||
*
|
||
* http://www.apache.org/licenses/LICENSE-2.0
|
||
*
|
||
* Unless required by applicable law or agreed to in writing, software
|
||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||
* See the License for the specific language governing permissions and
|
||
* limitations under the License.
|
||
*/
|
||
|
||
#ifndef __NAN_H__
|
||
#define __NAN_H__
|
||
|
||
#include <net/if.h>
|
||
#include <stdbool.h>
|
||
#include "wifi_hal.h"
|
||
|
||
#ifdef __cplusplus
|
||
extern "C"
|
||
{
|
||
#endif /* __cplusplus */
|
||
|
||
/*****************************************************************************
|
||
* Neighbour Aware Network Service Structures and Functions
|
||
*****************************************************************************/
|
||
|
||
/*
|
||
Definitions
|
||
All multi-byte fields within all NAN protocol stack messages are assumed to be in Little Endian order.
|
||
*/
|
||
|
||
typedef int NanVersion;
|
||
typedef u16 transaction_id;
|
||
typedef u32 NanDataPathId;
|
||
|
||
#define NAN_MAC_ADDR_LEN 6
|
||
#define NAN_MAJOR_VERSION 2
|
||
#define NAN_MINOR_VERSION 0
|
||
#define NAN_MICRO_VERSION 1
|
||
#define NAN_MAX_SOCIAL_CHANNELS 3
|
||
|
||
/* NAN Maximum Lengths */
|
||
#define NAN_MAX_SERVICE_NAME_LEN 255
|
||
#define NAN_MAX_MATCH_FILTER_LEN 255
|
||
#define NAN_MAX_SERVICE_SPECIFIC_INFO_LEN 1024
|
||
#define NAN_MAX_VSA_DATA_LEN 1024
|
||
#define NAN_MAX_MESH_DATA_LEN 32
|
||
#define NAN_MAX_INFRA_DATA_LEN 32
|
||
#define NAN_MAX_CLUSTER_ATTRIBUTE_LEN 255
|
||
#define NAN_MAX_SUBSCRIBE_MAX_ADDRESS 42
|
||
#define NAN_MAX_FAM_CHANNELS 32
|
||
#define NAN_MAX_POSTDISCOVERY_LEN 5
|
||
#define NAN_MAX_FRAME_DATA_LEN 504
|
||
#define NAN_DP_MAX_APP_INFO_LEN 512
|
||
#define NAN_ERROR_STR_LEN 255
|
||
#define NAN_PMK_INFO_LEN 32
|
||
#define NAN_MAX_SCID_BUF_LEN 1024
|
||
#define NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN 1024
|
||
#define NAN_SECURITY_MIN_PASSPHRASE_LEN 8
|
||
#define NAN_SECURITY_MAX_PASSPHRASE_LEN 63
|
||
#define NAN_MAX_CHANNEL_INFO_SUPPORTED 4
|
||
|
||
/*
|
||
Definition of various NanResponseType
|
||
*/
|
||
typedef enum {
|
||
NAN_RESPONSE_ENABLED = 0,
|
||
NAN_RESPONSE_DISABLED = 1,
|
||
NAN_RESPONSE_PUBLISH = 2,
|
||
NAN_RESPONSE_PUBLISH_CANCEL = 3,
|
||
NAN_RESPONSE_TRANSMIT_FOLLOWUP = 4,
|
||
NAN_RESPONSE_SUBSCRIBE = 5,
|
||
NAN_RESPONSE_SUBSCRIBE_CANCEL = 6,
|
||
NAN_RESPONSE_STATS = 7,
|
||
NAN_RESPONSE_CONFIG = 8,
|
||
NAN_RESPONSE_TCA = 9,
|
||
NAN_RESPONSE_ERROR = 10,
|
||
NAN_RESPONSE_BEACON_SDF_PAYLOAD = 11,
|
||
NAN_GET_CAPABILITIES = 12,
|
||
NAN_DP_INTERFACE_CREATE = 13,
|
||
NAN_DP_INTERFACE_DELETE = 14,
|
||
NAN_DP_INITIATOR_RESPONSE = 15,
|
||
NAN_DP_RESPONDER_RESPONSE = 16,
|
||
NAN_DP_END = 17
|
||
} NanResponseType;
|
||
|
||
/* NAN Publish Types */
|
||
typedef enum {
|
||
NAN_PUBLISH_TYPE_UNSOLICITED = 0,
|
||
NAN_PUBLISH_TYPE_SOLICITED,
|
||
NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED
|
||
} NanPublishType;
|
||
|
||
/* NAN Transmit Priorities */
|
||
typedef enum {
|
||
NAN_TX_PRIORITY_NORMAL = 0,
|
||
NAN_TX_PRIORITY_HIGH
|
||
} NanTxPriority;
|
||
|
||
/* NAN Statistics Request ID Codes */
|
||
typedef enum {
|
||
NAN_STATS_ID_DE_PUBLISH = 0,
|
||
NAN_STATS_ID_DE_SUBSCRIBE,
|
||
NAN_STATS_ID_DE_MAC,
|
||
NAN_STATS_ID_DE_TIMING_SYNC,
|
||
NAN_STATS_ID_DE_DW,
|
||
NAN_STATS_ID_DE
|
||
} NanStatsType;
|
||
|
||
/* NAN Protocol Event ID Codes */
|
||
typedef enum {
|
||
NAN_EVENT_ID_DISC_MAC_ADDR = 0,
|
||
NAN_EVENT_ID_STARTED_CLUSTER,
|
||
NAN_EVENT_ID_JOINED_CLUSTER
|
||
} NanDiscEngEventType;
|
||
|
||
/* NAN Data Path type */
|
||
typedef enum {
|
||
NAN_DATA_PATH_UNICAST_MSG = 0,
|
||
NAN_DATA_PATH_MULTICAST_MSG
|
||
} NdpType;
|
||
|
||
/* NAN Ranging Configuration */
|
||
typedef enum {
|
||
NAN_RANGING_DISABLE = 0,
|
||
NAN_RANGING_ENABLE
|
||
} NanRangingState;
|
||
|
||
/* TCA Type */
|
||
typedef enum {
|
||
NAN_TCA_ID_CLUSTER_SIZE = 0
|
||
} NanTcaType;
|
||
|
||
/* NAN Channel Info */
|
||
typedef struct {
|
||
u32 channel;
|
||
u32 bandwidth;
|
||
u32 nss;
|
||
} NanChannelInfo;
|
||
|
||
/*
|
||
Various NAN Protocol Response code
|
||
*/
|
||
typedef enum {
|
||
/* NAN Protocol Response Codes */
|
||
NAN_STATUS_SUCCESS = 0,
|
||
/* NAN Discovery Engine/Host driver failures */
|
||
NAN_STATUS_INTERNAL_FAILURE = 1,
|
||
/* NAN OTA failures */
|
||
NAN_STATUS_PROTOCOL_FAILURE = 2,
|
||
/* if the publish/subscribe id is invalid */
|
||
NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID = 3,
|
||
/* If we run out of resources allocated */
|
||
NAN_STATUS_NO_RESOURCE_AVAILABLE = 4,
|
||
/* if invalid params are passed */
|
||
NAN_STATUS_INVALID_PARAM = 5,
|
||
/* if the requestor instance id is invalid */
|
||
NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID = 6,
|
||
/* if the ndp id is invalid */
|
||
NAN_STATUS_INVALID_NDP_ID = 7,
|
||
/* if NAN is enabled when wifi is turned off */
|
||
NAN_STATUS_NAN_NOT_ALLOWED = 8,
|
||
/* if over the air ack is not received */
|
||
NAN_STATUS_NO_OTA_ACK = 9,
|
||
/* If NAN is already enabled and we are try to re-enable the same */
|
||
NAN_STATUS_ALREADY_ENABLED = 10,
|
||
/* If followup message internal queue is full */
|
||
NAN_STATUS_FOLLOWUP_QUEUE_FULL = 11,
|
||
/* Unsupported concurrency session enabled, NAN disabled notified */
|
||
NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED = 12
|
||
} NanStatusType;
|
||
|
||
/* NAN Transmit Types */
|
||
typedef enum {
|
||
NAN_TX_TYPE_BROADCAST = 0,
|
||
NAN_TX_TYPE_UNICAST
|
||
} NanTxType;
|
||
|
||
/* NAN Subscribe Type */
|
||
typedef enum {
|
||
NAN_SUBSCRIBE_TYPE_PASSIVE = 0,
|
||
NAN_SUBSCRIBE_TYPE_ACTIVE
|
||
} NanSubscribeType;
|
||
|
||
/* NAN Service Response Filter Attribute Bit */
|
||
typedef enum {
|
||
NAN_SRF_ATTR_BLOOM_FILTER = 0,
|
||
NAN_SRF_ATTR_PARTIAL_MAC_ADDR
|
||
} NanSRFType;
|
||
|
||
/* NAN Service Response Filter Include Bit */
|
||
typedef enum {
|
||
NAN_SRF_INCLUDE_DO_NOT_RESPOND = 0,
|
||
NAN_SRF_INCLUDE_RESPOND
|
||
} NanSRFIncludeType;
|
||
|
||
/* NAN Match indication type */
|
||
typedef enum {
|
||
NAN_MATCH_ALG_MATCH_ONCE = 0,
|
||
NAN_MATCH_ALG_MATCH_CONTINUOUS,
|
||
NAN_MATCH_ALG_MATCH_NEVER
|
||
} NanMatchAlg;
|
||
|
||
/* NAN Transmit Window Type */
|
||
typedef enum {
|
||
NAN_TRANSMIT_IN_DW = 0,
|
||
NAN_TRANSMIT_IN_FAW
|
||
} NanTransmitWindowType;
|
||
|
||
/* NAN SRF State in Subscribe */
|
||
typedef enum {
|
||
NAN_DO_NOT_USE_SRF = 0,
|
||
NAN_USE_SRF
|
||
} NanSRFState;
|
||
|
||
/* NAN Include SSI in MatchInd */
|
||
typedef enum {
|
||
NAN_SSI_NOT_REQUIRED_IN_MATCH_IND = 0,
|
||
NAN_SSI_REQUIRED_IN_MATCH_IND
|
||
} NanSsiInMatchInd;
|
||
|
||
/* NAN DP security Configuration */
|
||
typedef enum {
|
||
NAN_DP_CONFIG_NO_SECURITY = 0,
|
||
NAN_DP_CONFIG_SECURITY
|
||
} NanDataPathSecurityCfgStatus;
|
||
|
||
typedef enum {
|
||
NAN_QOS_NOT_REQUIRED = 0,
|
||
NAN_QOS_REQUIRED
|
||
} NanQosCfgStatus;
|
||
|
||
|
||
/* Data request Responder's response */
|
||
typedef enum {
|
||
NAN_DP_REQUEST_ACCEPT = 0,
|
||
NAN_DP_REQUEST_REJECT
|
||
} NanDataPathResponseCode;
|
||
|
||
/* NAN DP channel config options */
|
||
typedef enum {
|
||
NAN_DP_CHANNEL_NOT_REQUESTED = 0,
|
||
NAN_DP_REQUEST_CHANNEL_SETUP,
|
||
NAN_DP_FORCE_CHANNEL_SETUP
|
||
} NanDataPathChannelCfg;
|
||
|
||
/* Enable/Disable NAN Ranging Auto response */
|
||
typedef enum {
|
||
NAN_RANGING_AUTO_RESPONSE_ENABLE = 1,
|
||
NAN_RANGING_AUTO_RESPONSE_DISABLE
|
||
} NanRangingAutoResponse;
|
||
|
||
/* Enable/Disable NAN service range report */
|
||
typedef enum {
|
||
NAN_DISABLE_RANGE_REPORT = 1,
|
||
NAN_ENABLE_RANGE_REPORT
|
||
} NanRangeReport;
|
||
|
||
/* NAN Range Response */
|
||
typedef enum {
|
||
NAN_RANGE_REQUEST_ACCEPT = 1,
|
||
NAN_RANGE_REQUEST_REJECT,
|
||
NAN_RANGE_REQUEST_CANCEL
|
||
} NanRangeResponse;
|
||
|
||
/* NAN Security Key Input Type*/
|
||
typedef enum {
|
||
NAN_SECURITY_KEY_INPUT_PMK = 1,
|
||
NAN_SECURITY_KEY_INPUT_PASSPHRASE
|
||
} NanSecurityKeyInputType;
|
||
|
||
typedef struct {
|
||
/* pmk length */
|
||
u32 pmk_len;
|
||
/*
|
||
PMK: Info is optional in Discovery phase.
|
||
PMK info can be passed during
|
||
the NDP session.
|
||
*/
|
||
u8 pmk[NAN_PMK_INFO_LEN];
|
||
} NanSecurityPmk;
|
||
|
||
typedef struct {
|
||
/* passphrase length */
|
||
u32 passphrase_len;
|
||
/*
|
||
passphrase info is optional in Discovery phase.
|
||
passphrase info can be passed during
|
||
the NDP session.
|
||
*/
|
||
u8 passphrase[NAN_SECURITY_MAX_PASSPHRASE_LEN];
|
||
} NanSecurityPassPhrase;
|
||
|
||
typedef struct {
|
||
NanSecurityKeyInputType key_type;
|
||
union {
|
||
NanSecurityPmk pmk_info;
|
||
NanSecurityPassPhrase passphrase_info;
|
||
} body;
|
||
} NanSecurityKeyInfo;
|
||
|
||
/* NAN Security Cipher Suites Mask */
|
||
#define NAN_CIPHER_SUITE_SHARED_KEY_NONE 0x00
|
||
#define NAN_CIPHER_SUITE_SHARED_KEY_128_MASK 0x01
|
||
#define NAN_CIPHER_SUITE_SHARED_KEY_256_MASK 0x02
|
||
#define NAN_CIPHER_SUITE_PUBLIC_KEY_2WDH_128_MASK 0x04
|
||
#define NAN_CIPHER_SUITE_PUBLIC_KEY_2WDH_256_MASK 0x08
|
||
|
||
/* NAN ranging indication condition MASKS */
|
||
#define NAN_RANGING_INDICATE_CONTINUOUS_MASK 0x01
|
||
#define NAN_RANGING_INDICATE_INGRESS_MET_MASK 0x02
|
||
#define NAN_RANGING_INDICATE_EGRESS_MET_MASK 0x04
|
||
|
||
/* NAN schedule update reason MASKS */
|
||
#define NAN_SCHEDULE_UPDATE_NSS_MASK 0x01
|
||
#define NAN_SCHEDULE_UPDATE_CHANNEL_MASK 0x02
|
||
|
||
/*
|
||
Structure to set the Service Descriptor Extension
|
||
Attribute (SDEA) passed as part of NanPublishRequest/
|
||
NanSubscribeRequest/NanMatchInd.
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Optional configuration of Data Path Enable request.
|
||
configure flag determines whether configuration needs
|
||
to be passed or not.
|
||
*/
|
||
u8 config_nan_data_path;
|
||
NdpType ndp_type;
|
||
/*
|
||
NAN secuirty required flag to indicate
|
||
if the security is enabled or disabled
|
||
*/
|
||
NanDataPathSecurityCfgStatus security_cfg;
|
||
/*
|
||
NAN ranging required flag to indicate
|
||
if ranging is enabled on disabled
|
||
*/
|
||
NanRangingState ranging_state;
|
||
/*
|
||
Enable/Disable Ranging report,
|
||
when configured NanRangeReportInd received
|
||
*/
|
||
NanRangeReport range_report;
|
||
/*
|
||
NAN QOS required flag to indicate
|
||
if QOS is required or not.
|
||
*/
|
||
NanQosCfgStatus qos_cfg;
|
||
} NanSdeaCtrlParams;
|
||
|
||
/*
|
||
Nan Ranging Peer Info in MatchInd
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Distance to the NAN device with the MAC address indicated
|
||
with ranged mac address.
|
||
*/
|
||
u32 range_measurement_mm;
|
||
/* Ranging event matching the configuration of continuous/ingress/egress. */
|
||
u32 ranging_event_type;
|
||
} NanRangeInfo;
|
||
|
||
/* Nan/NDP Capabilites info */
|
||
typedef struct {
|
||
u32 max_concurrent_nan_clusters;
|
||
u32 max_publishes;
|
||
u32 max_subscribes;
|
||
u32 max_service_name_len;
|
||
u32 max_match_filter_len;
|
||
u32 max_total_match_filter_len;
|
||
u32 max_service_specific_info_len;
|
||
u32 max_vsa_data_len;
|
||
u32 max_mesh_data_len;
|
||
u32 max_ndi_interfaces;
|
||
u32 max_ndp_sessions;
|
||
u32 max_app_info_len;
|
||
u32 max_queued_transmit_followup_msgs;
|
||
u32 ndp_supported_bands;
|
||
u32 cipher_suites_supported;
|
||
u32 max_scid_len;
|
||
bool is_ndp_security_supported;
|
||
u32 max_sdea_service_specific_info_len;
|
||
u32 max_subscribe_address;
|
||
u32 ndpe_attr_supported;
|
||
bool is_instant_mode_supported;
|
||
} NanCapabilities;
|
||
|
||
/*
|
||
Nan accept policy: Per service basis policy
|
||
Based on this policy(ALL/NONE), responder side
|
||
will send ACCEPT/REJECT
|
||
*/
|
||
typedef enum {
|
||
NAN_SERVICE_ACCEPT_POLICY_NONE = 0,
|
||
/* Default value */
|
||
NAN_SERVICE_ACCEPT_POLICY_ALL
|
||
} NanServiceAcceptPolicy;
|
||
|
||
/*
|
||
Host can send Vendor specific attributes which the Discovery Engine can
|
||
enclose in Beacons and/or Service Discovery frames transmitted.
|
||
Below structure is used to populate that.
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
0 = transmit only in the next discovery window
|
||
1 = transmit in next 16 discovery window
|
||
*/
|
||
u8 payload_transmit_flag;
|
||
/*
|
||
Below flags will determine in which all frames
|
||
the vendor specific attributes should be included
|
||
*/
|
||
u8 tx_in_discovery_beacon;
|
||
u8 tx_in_sync_beacon;
|
||
u8 tx_in_service_discovery;
|
||
/* Organizationally Unique Identifier */
|
||
u32 vendor_oui;
|
||
/*
|
||
vendor specific attribute to be transmitted
|
||
vsa_len : Length of the vsa data.
|
||
*/
|
||
u32 vsa_len;
|
||
u8 vsa[NAN_MAX_VSA_DATA_LEN];
|
||
} NanTransmitVendorSpecificAttribute;
|
||
|
||
|
||
/*
|
||
Discovery Engine will forward any Vendor Specific Attributes
|
||
which it received as part of this structure.
|
||
*/
|
||
/* Mask to determine on which frames attribute was received */
|
||
#define RX_DISCOVERY_BEACON_MASK 0x01
|
||
#define RX_SYNC_BEACON_MASK 0x02
|
||
#define RX_SERVICE_DISCOVERY_MASK 0x04
|
||
typedef struct {
|
||
/*
|
||
Frames on which this vendor specific attribute
|
||
was received. Mask defined above
|
||
*/
|
||
u8 vsa_received_on;
|
||
/* Organizationally Unique Identifier */
|
||
u32 vendor_oui;
|
||
/* vendor specific attribute */
|
||
u32 attr_len;
|
||
u8 vsa[NAN_MAX_VSA_DATA_LEN];
|
||
} NanReceiveVendorSpecificAttribute;
|
||
|
||
/*
|
||
NAN Beacon SDF Payload Received structure
|
||
Discovery engine sends the details of received Beacon or
|
||
Service Discovery Frames as part of this structure.
|
||
*/
|
||
typedef struct {
|
||
/* Frame data */
|
||
u32 frame_len;
|
||
u8 frame_data[NAN_MAX_FRAME_DATA_LEN];
|
||
} NanBeaconSdfPayloadReceive;
|
||
|
||
/*
|
||
Host can set the Periodic scan parameters for each of the
|
||
3(6, 44, 149) Social channels. Only these channels are allowed
|
||
any other channels are rejected
|
||
*/
|
||
typedef enum {
|
||
NAN_CHANNEL_24G_BAND = 0,
|
||
NAN_CHANNEL_5G_BAND_LOW,
|
||
NAN_CHANNEL_5G_BAND_HIGH
|
||
} NanChannelIndex;
|
||
|
||
/*
|
||
Structure to set the Social Channel Scan parameters
|
||
passed as part of NanEnableRequest/NanConfigRequest
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Dwell time of each social channel in milliseconds
|
||
NanChannelIndex corresponds to the respective channel
|
||
If time set to 0 then the FW default time will be used.
|
||
*/
|
||
u8 dwell_time[NAN_MAX_SOCIAL_CHANNELS]; // default value 200 msec
|
||
|
||
/*
|
||
Scan period of each social channel in seconds
|
||
NanChannelIndex corresponds to the respective channel
|
||
If time set to 0 then the FW default time will be used.
|
||
*/
|
||
u16 scan_period[NAN_MAX_SOCIAL_CHANNELS]; // default value 20 sec
|
||
} NanSocialChannelScanParams;
|
||
|
||
/*
|
||
Host can send Post Connectivity Capability attributes
|
||
to be included in Service Discovery frames transmitted
|
||
as part of this structure.
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
0 = transmit only in the next discovery window
|
||
1 = transmit in next 16 discovery window
|
||
*/
|
||
u8 payload_transmit_flag;
|
||
/* 1 - Wifi Direct supported 0 - Not supported */
|
||
u8 is_wfd_supported;
|
||
/* 1 - Wifi Direct Services supported 0 - Not supported */
|
||
u8 is_wfds_supported;
|
||
/* 1 - TDLS supported 0 - Not supported */
|
||
u8 is_tdls_supported;
|
||
/* 1 - IBSS supported 0 - Not supported */
|
||
u8 is_ibss_supported;
|
||
/* 1 - Mesh supported 0 - Not supported */
|
||
u8 is_mesh_supported;
|
||
/*
|
||
1 - NAN Device currently connect to WLAN Infra AP
|
||
0 - otherwise
|
||
*/
|
||
u8 wlan_infra_field;
|
||
} NanTransmitPostConnectivityCapability;
|
||
|
||
/*
|
||
Discovery engine providing the post connectivity capability
|
||
received.
|
||
*/
|
||
typedef struct {
|
||
/* 1 - Wifi Direct supported 0 - Not supported */
|
||
u8 is_wfd_supported;
|
||
/* 1 - Wifi Direct Services supported 0 - Not supported */
|
||
u8 is_wfds_supported;
|
||
/* 1 - TDLS supported 0 - Not supported */
|
||
u8 is_tdls_supported;
|
||
/* 1 - IBSS supported 0 - Not supported */
|
||
u8 is_ibss_supported;
|
||
/* 1 - Mesh supported 0 - Not supported */
|
||
u8 is_mesh_supported;
|
||
/*
|
||
1 - NAN Device currently connect to WLAN Infra AP
|
||
0 - otherwise
|
||
*/
|
||
u8 wlan_infra_field;
|
||
} NanReceivePostConnectivityCapability;
|
||
|
||
/*
|
||
Indicates the availability interval duration associated with the
|
||
Availability Intervals Bitmap field
|
||
*/
|
||
typedef enum {
|
||
NAN_DURATION_16MS = 0,
|
||
NAN_DURATION_32MS = 1,
|
||
NAN_DURATION_64MS = 2
|
||
} NanAvailDuration;
|
||
|
||
/* Further availability per channel information */
|
||
typedef struct {
|
||
/* Defined above */
|
||
NanAvailDuration entry_control;
|
||
/*
|
||
1 byte field indicating the frequency band the NAN Device
|
||
will be available as defined in IEEE Std. 802.11-2012
|
||
Annex E Table E-4 Global Operating Classes
|
||
*/
|
||
u8 class_val;
|
||
/*
|
||
1 byte field indicating the channel the NAN Device
|
||
will be available.
|
||
*/
|
||
u8 channel;
|
||
/*
|
||
Map Id - 4 bit field which identifies the Further
|
||
availability map attribute.
|
||
*/
|
||
u8 mapid;
|
||
/*
|
||
divides the time between the beginnings of consecutive Discovery
|
||
Windows of a given NAN cluster into consecutive time intervals
|
||
of equal durations. The time interval duration is specified by
|
||
the Availability Interval Duration subfield of the Entry Control
|
||
field.
|
||
|
||
A Nan device that sets the i-th bit of the Availability
|
||
Intervals Bitmap to 1 shall be present during the corresponding
|
||
i-th time interval in the operation channel indicated by the
|
||
Operating Class and Channel Number fields in the same Availability Entry.
|
||
|
||
A Nan device that sets the i-th bit of the Availability Intervals Bitmap to
|
||
0 may be present during the corresponding i-th time interval in the operation
|
||
channel indicated by the Operating Class and Channel Number fields in the same
|
||
Availability Entry.
|
||
|
||
The size of the Bitmap is dependent upon the Availability Interval Duration
|
||
chosen in the Entry Control Field. The size can be either 1, 2 or 4 bytes long
|
||
|
||
- Duration field is equal to 0, only AIB[0] is valid
|
||
- Duration field is equal to 1, only AIB [0] and AIB [1] is valid
|
||
- Duration field is equal to 2, AIB [0], AIB [1], AIB [2] and AIB [3] are valid
|
||
*/
|
||
u32 avail_interval_bitmap;
|
||
} NanFurtherAvailabilityChannel;
|
||
|
||
/*
|
||
Further availability map which can be sent and received from
|
||
Discovery engine
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Number of channels indicates the number of channel
|
||
entries which is part of fam
|
||
*/
|
||
u8 numchans;
|
||
NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS];
|
||
} NanFurtherAvailabilityMap;
|
||
|
||
/*
|
||
Host can send Post-Nan Discovery attributes which the Discovery Engine can
|
||
enclose in Service Discovery frames
|
||
*/
|
||
/* Possible connection types in Post NAN Discovery attributes */
|
||
typedef enum {
|
||
NAN_CONN_WLAN_INFRA = 0,
|
||
NAN_CONN_P2P_OPER = 1,
|
||
NAN_CONN_WLAN_IBSS = 2,
|
||
NAN_CONN_WLAN_MESH = 3,
|
||
NAN_CONN_FURTHER_SERVICE_AVAILABILITY = 4,
|
||
NAN_CONN_WLAN_RANGING = 5
|
||
} NanConnectionType;
|
||
|
||
/* Possible device roles in Post NAN Discovery attributes */
|
||
typedef enum {
|
||
NAN_WLAN_INFRA_AP = 0,
|
||
NAN_WLAN_INFRA_STA = 1,
|
||
NAN_P2P_OPER_GO = 2,
|
||
NAN_P2P_OPER_DEV = 3,
|
||
NAN_P2P_OPER_CLI = 4
|
||
} NanDeviceRole;
|
||
|
||
/* Configuration params of NAN Ranging */
|
||
typedef struct {
|
||
/*
|
||
Interval in milli sec between two ranging measurements.
|
||
If the Awake DW intervals in NanEnable/Config are larger
|
||
than the ranging intervals priority is given to Awake DW
|
||
Intervals. Only on a match the ranging is initiated for the
|
||
peer
|
||
*/
|
||
u32 ranging_interval_msec;
|
||
/*
|
||
Flags indicating the type of ranging event to be notified
|
||
NAN_RANGING_INDICATE_ MASKS are used to set these.
|
||
BIT0 - Continuous Ranging event notification.
|
||
BIT1 - Ingress distance is <=.
|
||
BIT2 - Egress distance is >=.
|
||
*/
|
||
u32 config_ranging_indications;
|
||
/* Ingress distance in millimeters (optional) */
|
||
u32 distance_ingress_mm;
|
||
/* Egress distance in millmilliimeters (optional) */
|
||
u32 distance_egress_mm;
|
||
} NanRangingCfg;
|
||
|
||
/* NAN Ranging request's response */
|
||
typedef struct {
|
||
/* Publish Id of an earlier Publisher */
|
||
u16 publish_id;
|
||
/*
|
||
A 32 bit Requestor instance Id which is sent to the Application.
|
||
This Id will be used in subsequent RangeResponse on Subscribe side.
|
||
*/
|
||
u32 requestor_instance_id;
|
||
/* Peer MAC addr of Range Requestor */
|
||
u8 peer_addr[NAN_MAC_ADDR_LEN];
|
||
/* Response indicating ACCEPT/REJECT/CANCEL of Range Request */
|
||
NanRangeResponse ranging_response;
|
||
} NanRangeResponseCfg;
|
||
|
||
/* Structure of Post NAN Discovery attribute */
|
||
typedef struct {
|
||
/* Connection type of the host */
|
||
NanConnectionType type;
|
||
/*
|
||
Device role of the host based on
|
||
the connection type
|
||
*/
|
||
NanDeviceRole role;
|
||
/*
|
||
Flag to send the information as a single shot or repeated
|
||
for next 16 discovery windows
|
||
0 - Single_shot
|
||
1 - next 16 discovery windows
|
||
*/
|
||
u8 transmit_freq;
|
||
/* Duration of the availability bitmask */
|
||
NanAvailDuration duration;
|
||
/* Availability interval bitmap based on duration */
|
||
u32 avail_interval_bitmap;
|
||
/*
|
||
Mac address depending on the conn type and device role
|
||
--------------------------------------------------
|
||
| Conn Type | Device Role | Mac address Usage |
|
||
--------------------------------------------------
|
||
| WLAN_INFRA | AP/STA | BSSID of the AP |
|
||
--------------------------------------------------
|
||
| P2P_OPER | GO | GO's address |
|
||
--------------------------------------------------
|
||
| P2P_OPER | P2P_DEVICE | Address of who |
|
||
| | | would become GO |
|
||
--------------------------------------------------
|
||
| WLAN_IBSS | NA | BSSID |
|
||
--------------------------------------------------
|
||
| WLAN_MESH | NA | BSSID |
|
||
--------------------------------------------------
|
||
*/
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Mandatory mesh id value if connection type is WLAN_MESH
|
||
Mesh id contains 0-32 octet identifier and should be
|
||
as per IEEE Std.802.11-2012 spec.
|
||
*/
|
||
u16 mesh_id_len;
|
||
u8 mesh_id[NAN_MAX_MESH_DATA_LEN];
|
||
/*
|
||
Optional infrastructure SSID if conn_type is set to
|
||
NAN_CONN_WLAN_INFRA
|
||
*/
|
||
u16 infrastructure_ssid_len;
|
||
u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN];
|
||
} NanTransmitPostDiscovery;
|
||
|
||
/*
|
||
Discovery engine providing the structure of Post NAN
|
||
Discovery
|
||
*/
|
||
typedef struct {
|
||
/* Connection type of the host */
|
||
NanConnectionType type;
|
||
/*
|
||
Device role of the host based on
|
||
the connection type
|
||
*/
|
||
NanDeviceRole role;
|
||
/* Duration of the availability bitmask */
|
||
NanAvailDuration duration;
|
||
/* Availability interval bitmap based on duration */
|
||
u32 avail_interval_bitmap;
|
||
/*
|
||
Map Id - 4 bit field which identifies the Further
|
||
availability map attribute.
|
||
*/
|
||
u8 mapid;
|
||
/*
|
||
Mac address depending on the conn type and device role
|
||
--------------------------------------------------
|
||
| Conn Type | Device Role | Mac address Usage |
|
||
--------------------------------------------------
|
||
| WLAN_INFRA | AP/STA | BSSID of the AP |
|
||
--------------------------------------------------
|
||
| P2P_OPER | GO | GO's address |
|
||
--------------------------------------------------
|
||
| P2P_OPER | P2P_DEVICE | Address of who |
|
||
| | | would become GO |
|
||
--------------------------------------------------
|
||
| WLAN_IBSS | NA | BSSID |
|
||
--------------------------------------------------
|
||
| WLAN_MESH | NA | BSSID |
|
||
--------------------------------------------------
|
||
*/
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Mandatory mesh id value if connection type is WLAN_MESH
|
||
Mesh id contains 0-32 octet identifier and should be
|
||
as per IEEE Std.802.11-2012 spec.
|
||
*/
|
||
u16 mesh_id_len;
|
||
u8 mesh_id[NAN_MAX_MESH_DATA_LEN];
|
||
/*
|
||
Optional infrastructure SSID if conn_type is set to
|
||
NAN_CONN_WLAN_INFRA
|
||
*/
|
||
u16 infrastructure_ssid_len;
|
||
u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN];
|
||
} NanReceivePostDiscovery;
|
||
|
||
/*
|
||
NAN device level configuration of SDF and Sync beacons in both
|
||
2.4/5GHz bands
|
||
*/
|
||
typedef struct {
|
||
/* Configure 2.4GHz DW Band */
|
||
u8 config_2dot4g_dw_band;
|
||
/*
|
||
Indicates the interval for Sync beacons and SDF's in 2.4GHz band.
|
||
Valid values of DW Interval are: 1, 2, 3, 4 and 5, 0 is reserved.
|
||
The SDF includes in OTA when enabled. The publish/subscribe period
|
||
values don't override the device level configurations.
|
||
*/
|
||
u32 dw_2dot4g_interval_val; // default value 1
|
||
/* Configure 5GHz DW Band */
|
||
u8 config_5g_dw_band;
|
||
/*
|
||
Indicates the interval for Sync beacons and SDF's in 5GHz band
|
||
Valid values of DW Interval are: 1, 2, 3, 4 and 5, 0 no wake up for
|
||
any interval. The SDF includes in OTA when enabled. The publish/subscribe
|
||
period values don't override the device level configurations.
|
||
*/
|
||
u32 dw_5g_interval_val; // default value 1 when 5G is enabled
|
||
} NanConfigDW;
|
||
|
||
/*
|
||
Enable Request Message Structure
|
||
The NanEnableReq message instructs the Discovery Engine to enter an operational state
|
||
*/
|
||
typedef struct {
|
||
/* Mandatory parameters below */
|
||
u8 master_pref; // default value 0x02
|
||
/*
|
||
A cluster_low value matching cluster_high indicates a request to join
|
||
a cluster with that value. If the requested cluster is not found the
|
||
device will start its own cluster.
|
||
*/
|
||
u16 cluster_low; // default value 0
|
||
u16 cluster_high; // default value 0xFFFF
|
||
|
||
/*
|
||
Optional configuration of Enable request.
|
||
Each of the optional parameters have configure flag which
|
||
determine whether configuration is to be passed or not.
|
||
*/
|
||
u8 config_support_5g;
|
||
u8 support_5g_val; // default value 0; turned off by default
|
||
/*
|
||
BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons
|
||
0 - Do not include SIDs in any beacons
|
||
1 - Include SIDs in all beacons.
|
||
Rest 7 bits are count field which allows control over the number of SIDs
|
||
included in the Beacon. 0 means to include as many SIDs that fit into
|
||
the maximum allow Beacon frame size
|
||
*/
|
||
u8 config_sid_beacon;
|
||
u8 sid_beacon_val; // default value 0x01
|
||
/*
|
||
The rssi values below should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 config_2dot4g_rssi_close;
|
||
u8 rssi_close_2dot4g_val; // default value -60 dBm
|
||
|
||
u8 config_2dot4g_rssi_middle;
|
||
u8 rssi_middle_2dot4g_val; // default value -70 dBm
|
||
|
||
u8 config_2dot4g_rssi_proximity;
|
||
u8 rssi_proximity_2dot4g_val;// default value -60dBm
|
||
|
||
u8 config_hop_count_limit;
|
||
u8 hop_count_limit_val; // default value 0x02
|
||
|
||
/*
|
||
Defines 2.4G channel access support
|
||
0 - No Support
|
||
1 - Supported
|
||
*/
|
||
u8 config_2dot4g_support;
|
||
u8 support_2dot4g_val; // default value 0x01
|
||
/*
|
||
Defines 2.4G channels will be used for sync/discovery beacons
|
||
0 - 2.4G channels not used for beacons
|
||
1 - 2.4G channels used for beacons
|
||
*/
|
||
u8 config_2dot4g_beacons;
|
||
u8 beacon_2dot4g_val; // default value 1
|
||
/*
|
||
Defines 2.4G channels will be used for Service Discovery frames
|
||
0 - 2.4G channels not used for Service Discovery frames
|
||
1 - 2.4G channels used for Service Discovery frames
|
||
*/
|
||
u8 config_2dot4g_sdf;
|
||
u8 sdf_2dot4g_val; // default value 1
|
||
/*
|
||
Defines 5G channels will be used for sync/discovery beacons
|
||
0 - 5G channels not used for beacons
|
||
1 - 5G channels used for beacons
|
||
*/
|
||
u8 config_5g_beacons;
|
||
u8 beacon_5g_val; // default value 1 when 5G is enabled
|
||
/*
|
||
Defines 5G channels will be used for Service Discovery frames
|
||
0 - 5G channels not used for Service Discovery frames
|
||
1 - 5G channels used for Service Discovery frames
|
||
*/
|
||
u8 config_5g_sdf;
|
||
u8 sdf_5g_val; // default value is 0 when 5G is enabled
|
||
/*
|
||
1 byte value which defines the RSSI in
|
||
dBm for a close by Peer in 5 Ghz channels.
|
||
The rssi values should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 config_5g_rssi_close;
|
||
u8 rssi_close_5g_val; // default value -60dBm when 5G is enabled
|
||
/*
|
||
1 byte value which defines the RSSI value in
|
||
dBm for a close by Peer in 5 Ghz channels.
|
||
The rssi values should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 config_5g_rssi_middle;
|
||
u8 rssi_middle_5g_val; // default value -75dBm when 5G is enabled
|
||
/*
|
||
1 byte value which defines the RSSI filter
|
||
threshold. Any Service Descriptors received above this
|
||
value that are configured for RSSI filtering will be dropped.
|
||
The rssi values should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 config_5g_rssi_close_proximity;
|
||
u8 rssi_close_proximity_5g_val; // default value -60dBm when 5G is enabled
|
||
/*
|
||
1 byte quantity which defines the window size over
|
||
which the “average RSSI” will be calculated over.
|
||
*/
|
||
u8 config_rssi_window_size;
|
||
u8 rssi_window_size_val; // default value 0x08
|
||
/*
|
||
The 24 bit Organizationally Unique ID + the 8 bit Network Id.
|
||
*/
|
||
u8 config_oui;
|
||
u32 oui_val; // default value {0x51, 0x6F, 0x9A, 0x01, 0x00, 0x00}
|
||
/*
|
||
NAN Interface Address, If not configured the Discovery Engine
|
||
will generate a 6 byte Random MAC.
|
||
*/
|
||
u8 config_intf_addr;
|
||
u8 intf_addr_val[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
If set to 1, the Discovery Engine will enclose the Cluster
|
||
Attribute only sent in Beacons in a Vendor Specific Attribute
|
||
and transmit in a Service Descriptor Frame.
|
||
*/
|
||
u8 config_cluster_attribute_val;
|
||
/*
|
||
The periodicity in seconds between full scan’s to find any new
|
||
clusters available in the area. A Full scan should not be done
|
||
more than every 10 seconds and should not be done less than every
|
||
30 seconds.
|
||
*/
|
||
u8 config_scan_params;
|
||
NanSocialChannelScanParams scan_params_val;
|
||
/*
|
||
1 byte quantity which forces the Random Factor to a particular
|
||
value for all transmitted Sync/Discovery beacons
|
||
*/
|
||
u8 config_random_factor_force;
|
||
u8 random_factor_force_val; // default value off and set to 0x00
|
||
/*
|
||
1 byte quantity which forces the HC for all transmitted Sync and
|
||
Discovery Beacon NO matter the real HC being received over the
|
||
air.
|
||
*/
|
||
u8 config_hop_count_force;
|
||
u8 hop_count_force_val; // default value 0x00
|
||
|
||
/* channel frequency in MHz to enable Nan on */
|
||
u8 config_24g_channel;
|
||
wifi_channel channel_24g_val; // default value channel 0x6
|
||
|
||
u8 config_5g_channel;
|
||
wifi_channel channel_5g_val; // default value channel 44 or 149 regulatory
|
||
// domain
|
||
/* Configure 2.4/5GHz DW */
|
||
NanConfigDW config_dw;
|
||
|
||
/*
|
||
By default discovery MAC address randomization is enabled
|
||
and default interval value is 30 minutes i.e. 1800 seconds.
|
||
The value 0 is used to disable MAC addr randomization.
|
||
*/
|
||
u8 config_disc_mac_addr_randomization;
|
||
u32 disc_mac_addr_rand_interval_sec; // default value 1800 sec
|
||
|
||
/*
|
||
Set/Enable corresponding bits to disable Discovery indications:
|
||
BIT0 - Disable Discovery MAC Address Event.
|
||
BIT1 - Disable Started Cluster Event.
|
||
BIT2 - Disable Joined Cluster Event.
|
||
*/
|
||
u8 discovery_indication_cfg; // default value 0x0
|
||
/*
|
||
BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons
|
||
0 - Do not include SIDs in any beacons
|
||
1 - Include SIDs in all beacons.
|
||
Rest 7 bits are count field which allows control over the number of SIDs
|
||
included in the Beacon. 0 means to include as many SIDs that fit into
|
||
the maximum allow Beacon frame size
|
||
*/
|
||
u8 config_subscribe_sid_beacon;
|
||
u32 subscribe_sid_beacon_val; // default value 0x0
|
||
/*
|
||
Discovery Beacon Interval config.
|
||
Default value is 128 msec in 2G DW and 176 msec in 2G/5G DW.
|
||
When 0 value is passed it is reset to default value of 128 or 176 msec.
|
||
*/
|
||
u8 config_discovery_beacon_int;
|
||
u32 discovery_beacon_interval;
|
||
/*
|
||
Enable Number of Spatial Streams.
|
||
This is NAN Power Optimization feature for NAN discovery.
|
||
*/
|
||
u8 config_nss;
|
||
// default value is implementation specific and passing 0 sets it to default
|
||
u32 nss;
|
||
/*
|
||
Enable device level NAN Ranging feature.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_enable_ranging;
|
||
u32 enable_ranging;
|
||
/*
|
||
Enable/Disable DW Early termination.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_dw_early_termination;
|
||
u32 enable_dw_termination;
|
||
/*
|
||
Indicate whether to use NDPE attribute to bring-up TCP/IP connection.
|
||
If config_ndpe_attr is not configured, the default behavior is
|
||
not using NDPE attr, and the capability is not advertised.
|
||
0 - Not use
|
||
1 - Use
|
||
*/
|
||
u8 config_ndpe_attr;
|
||
u32 use_ndpe_attr;
|
||
/*
|
||
Enable NAN v3.1 instant communication mode.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_enable_instant_mode;
|
||
u32 enable_instant_mode;
|
||
/*
|
||
Config NAN v3.1 instant communication channel frequency selected over NFC/OOB method.
|
||
If dual band is supported default channel is 149 or 44 as per regulatory domain,
|
||
else channel 6 (send frequency in MHz).
|
||
Sometimes depending on country code retrictions, even 149/44 may be restricted
|
||
in those cases instant channel will be operational only in 2.4GHz.
|
||
Use wifi_get_usable_channels() API to get supported bands/channels before
|
||
Instant mode NFC handshake is triggered
|
||
*/
|
||
u8 config_instant_mode_channel;
|
||
wifi_channel instant_mode_channel;
|
||
} NanEnableRequest;
|
||
|
||
/*
|
||
Publish Msg Structure
|
||
Message is used to request the DE to publish the Service Name
|
||
using the parameters passed into the Discovery Window
|
||
*/
|
||
typedef struct {
|
||
u16 publish_id;/* id 0 means new publish, any other id is existing publish */
|
||
u16 ttl; /* how many seconds to run for. 0 means forever until canceled */
|
||
/*
|
||
period: Awake DW Interval for publish(service)
|
||
Indicates the interval between two Discovery Windows in which
|
||
the device supporting the service is awake to transmit or
|
||
receive the Service Discovery frames.
|
||
Valid values of Awake DW Interval are: 1, 2, 4, 8 and 16, value 0 will
|
||
default to 1.
|
||
*/
|
||
u16 period;
|
||
NanPublishType publish_type;/* 0= unsolicited, solicited = 1, 2= both */
|
||
NanTxType tx_type; /* 0 = broadcast, 1= unicast if solicited publish */
|
||
u8 publish_count; /* number of OTA Publish, 0 means forever until canceled */
|
||
u16 service_name_len; /* length of service name */
|
||
u8 service_name[NAN_MAX_SERVICE_NAME_LEN];/* UTF-8 encoded string identifying the service */
|
||
/*
|
||
Field which specifies how the matching indication to host is controlled.
|
||
0 - Match and Indicate Once
|
||
1 - Match and Indicate continuous
|
||
2 - Match and Indicate never. This means don't indicate the match to the host.
|
||
3 - Reserved
|
||
*/
|
||
NanMatchAlg publish_match_indicator;
|
||
|
||
/*
|
||
Sequence of values
|
||
NAN Device that has invoked a Subscribe method corresponding to this Publish method
|
||
*/
|
||
u16 service_specific_info_len;
|
||
u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN];
|
||
|
||
/*
|
||
Ordered sequence of <length, value> pairs which specify further response conditions
|
||
beyond the service name used to filter subscribe messages to respond to.
|
||
This is only needed when the PT is set to NAN_SOLICITED or NAN_SOLICITED_UNSOLICITED.
|
||
*/
|
||
u16 rx_match_filter_len;
|
||
u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN];
|
||
|
||
/*
|
||
Ordered sequence of <length, value> pairs to be included in the Discovery Frame.
|
||
If present it is always sent in a Discovery Frame
|
||
*/
|
||
u16 tx_match_filter_len;
|
||
u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN];
|
||
|
||
/*
|
||
flag which specifies that the Publish should use the configured RSSI
|
||
threshold and the received RSSI in order to filter requests
|
||
0 – ignore the configured RSSI threshold when running a Service
|
||
Descriptor attribute or Service ID List Attribute through the DE matching logic.
|
||
1 – use the configured RSSI threshold when running a Service
|
||
Descriptor attribute or Service ID List Attribute through the DE matching logic.
|
||
|
||
*/
|
||
u8 rssi_threshold_flag;
|
||
|
||
/*
|
||
8-bit bitmap which allows the Host to associate this publish
|
||
with a particular Post-NAN Connectivity attribute
|
||
which has been sent down in a NanConfigureRequest/NanEnableRequest
|
||
message. If the DE fails to find a configured Post-NAN
|
||
connectivity attributes referenced by the bitmap,
|
||
the DE will return an error code to the Host.
|
||
If the Publish is configured to use a Post-NAN Connectivity
|
||
attribute and the Host does not refresh the Post-NAN Connectivity
|
||
attribute the Publish will be canceled and the Host will be sent
|
||
a PublishTerminatedIndication message.
|
||
*/
|
||
u8 connmap;
|
||
/*
|
||
Set/Enable corresponding bits to disable any indications that follow a publish.
|
||
BIT0 - Disable publish termination indication.
|
||
BIT1 - Disable match expired indication.
|
||
BIT2 - Disable followUp indication received (OTA).
|
||
BIT3 - Disable publishReplied indication.
|
||
*/
|
||
u8 recv_indication_cfg;
|
||
/*
|
||
Nan accept policy for the specific service(publish)
|
||
*/
|
||
NanServiceAcceptPolicy service_responder_policy;
|
||
/* NAN Cipher Suite Type */
|
||
u32 cipher_type;
|
||
/*
|
||
Nan Security Key Info is optional in Discovery phase.
|
||
PMK or passphrase info can be passed during
|
||
the NDP session.
|
||
*/
|
||
NanSecurityKeyInfo key_info;
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
|
||
/* NAN configure service discovery extended attributes */
|
||
NanSdeaCtrlParams sdea_params;
|
||
|
||
/* NAN Ranging configuration */
|
||
NanRangingCfg ranging_cfg;
|
||
|
||
/* Enable/disable NAN serivce Ranging auto response mode */
|
||
NanRangingAutoResponse ranging_auto_response;
|
||
|
||
/*
|
||
When the ranging_auto_response_cfg is not set, NanRangeRequestInd is
|
||
received. Nan Range Response to Peer MAC Addr is notified to indicate
|
||
ACCEPT/REJECT/CANCEL to the requestor.
|
||
*/
|
||
NanRangeResponseCfg range_response_cfg;
|
||
|
||
/*
|
||
Sequence of values indicating the service specific info in SDEA
|
||
*/
|
||
u16 sdea_service_specific_info_len;
|
||
u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN];
|
||
} NanPublishRequest;
|
||
|
||
/*
|
||
Publish Cancel Msg Structure
|
||
The PublishServiceCancelReq Message is used to request the DE to stop publishing
|
||
the Service Name identified by the Publish Id in the message.
|
||
*/
|
||
typedef struct {
|
||
u16 publish_id;
|
||
} NanPublishCancelRequest;
|
||
|
||
/*
|
||
NAN Subscribe Structure
|
||
The SubscribeServiceReq message is sent to the Discovery Engine
|
||
whenever the Upper layers would like to listen for a Service Name
|
||
*/
|
||
typedef struct {
|
||
u16 subscribe_id; /* id 0 means new subscribe, non zero is existing subscribe */
|
||
u16 ttl; /* how many seconds to run for. 0 means forever until canceled */
|
||
/*
|
||
period: Awake DW Interval for subscribe(service)
|
||
Indicates the interval between two Discovery Windows in which
|
||
the device supporting the service is awake to transmit or
|
||
receive the Service Discovery frames.
|
||
Valid values of Awake DW Interval are: 1, 2, 4, 8 and 16, value 0 will
|
||
default to 1.
|
||
*/
|
||
u16 period;
|
||
|
||
/* Flag which specifies how the Subscribe request shall be processed. */
|
||
NanSubscribeType subscribe_type; /* 0 - PASSIVE , 1- ACTIVE */
|
||
|
||
/* Flag which specifies on Active Subscribes how the Service Response Filter attribute is populated.*/
|
||
NanSRFType serviceResponseFilter; /* 0 - Bloom Filter, 1 - MAC Addr */
|
||
|
||
/* Flag which specifies how the Service Response Filter Include bit is populated.*/
|
||
NanSRFIncludeType serviceResponseInclude; /* 0=Do not respond if in the Address Set, 1= Respond */
|
||
|
||
/* Flag which specifies if the Service Response Filter should be used when creating Subscribes.*/
|
||
NanSRFState useServiceResponseFilter; /* 0=Do not send the Service Response Filter,1= send */
|
||
|
||
/*
|
||
Flag which specifies if the Service Specific Info is needed in
|
||
the Publish message before creating the MatchIndication
|
||
*/
|
||
NanSsiInMatchInd ssiRequiredForMatchIndication; /* 0=Not needed, 1= Required */
|
||
|
||
/*
|
||
Field which specifies how the matching indication to host is controlled.
|
||
0 - Match and Indicate Once
|
||
1 - Match and Indicate continuous
|
||
2 - Match and Indicate never. This means don't indicate the match to the host.
|
||
3 - Reserved
|
||
*/
|
||
NanMatchAlg subscribe_match_indicator;
|
||
|
||
/*
|
||
The number of Subscribe Matches which should occur
|
||
before the Subscribe request is automatically terminated.
|
||
*/
|
||
u8 subscribe_count; /* If this value is 0 this field is not used by the DE.*/
|
||
|
||
u16 service_name_len;/* length of service name */
|
||
u8 service_name[NAN_MAX_SERVICE_NAME_LEN]; /* UTF-8 encoded string identifying the service */
|
||
|
||
/* Sequence of values which further specify the published service beyond the service name*/
|
||
u16 service_specific_info_len;
|
||
u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN];
|
||
|
||
/*
|
||
Ordered sequence of <length, value> pairs used to filter out received publish discovery messages.
|
||
This can be sent both for a Passive or an Active Subscribe
|
||
*/
|
||
u16 rx_match_filter_len;
|
||
u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN];
|
||
|
||
/*
|
||
Ordered sequence of <length, value> pairs included in the
|
||
Discovery Frame when an Active Subscribe is used.
|
||
*/
|
||
u16 tx_match_filter_len;
|
||
u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN];
|
||
|
||
/*
|
||
Flag which specifies that the Subscribe should use the configured RSSI
|
||
threshold and the received RSSI in order to filter requests
|
||
0 – ignore the configured RSSI threshold when running a Service
|
||
Descriptor attribute or Service ID List Attribute through the DE matching logic.
|
||
1 – use the configured RSSI threshold when running a Service
|
||
Descriptor attribute or Service ID List Attribute through the DE matching logic.
|
||
|
||
*/
|
||
u8 rssi_threshold_flag;
|
||
|
||
/*
|
||
8-bit bitmap which allows the Host to associate this Active
|
||
Subscribe with a particular Post-NAN Connectivity attribute
|
||
which has been sent down in a NanConfigureRequest/NanEnableRequest
|
||
message. If the DE fails to find a configured Post-NAN
|
||
connectivity attributes referenced by the bitmap,
|
||
the DE will return an error code to the Host.
|
||
If the Subscribe is configured to use a Post-NAN Connectivity
|
||
attribute and the Host does not refresh the Post-NAN Connectivity
|
||
attribute the Subscribe will be canceled and the Host will be sent
|
||
a SubscribeTerminatedIndication message.
|
||
*/
|
||
u8 connmap;
|
||
/*
|
||
NAN Interface Address, conforming to the format as described in
|
||
8.2.4.3.2 of IEEE Std. 802.11-2012.
|
||
*/
|
||
u8 num_intf_addr_present;
|
||
u8 intf_addr[NAN_MAX_SUBSCRIBE_MAX_ADDRESS][NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Set/Enable corresponding bits to disable indications that follow a subscribe.
|
||
BIT0 - Disable subscribe termination indication.
|
||
BIT1 - Disable match expired indication.
|
||
BIT2 - Disable followUp indication received (OTA).
|
||
*/
|
||
u8 recv_indication_cfg;
|
||
|
||
/* NAN Cipher Suite Type */
|
||
u32 cipher_type;
|
||
/*
|
||
Nan Security Key Info is optional in Discovery phase.
|
||
PMK or passphrase info can be passed during
|
||
the NDP session.
|
||
*/
|
||
NanSecurityKeyInfo key_info;
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
|
||
/* NAN configure service discovery extended attributes */
|
||
NanSdeaCtrlParams sdea_params;
|
||
|
||
/* NAN Ranging configuration */
|
||
NanRangingCfg ranging_cfg;
|
||
|
||
/* Enable/disable NAN serivce Ranging auto response mode */
|
||
NanRangingAutoResponse ranging_auto_response;
|
||
|
||
/*
|
||
When the ranging_auto_response_cfg is not set, NanRangeRequestInd is
|
||
received. Nan Range Response to Peer MAC Addr is notified to indicate
|
||
ACCEPT/REJECT/CANCEL to the requestor.
|
||
*/
|
||
NanRangeResponseCfg range_response_cfg;
|
||
|
||
/*
|
||
Sequence of values indicating the service specific info in SDEA
|
||
*/
|
||
u16 sdea_service_specific_info_len;
|
||
u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN];
|
||
} NanSubscribeRequest;
|
||
|
||
/*
|
||
NAN Subscribe Cancel Structure
|
||
The SubscribeCancelReq Message is used to request the DE to stop looking for the Service Name.
|
||
*/
|
||
typedef struct {
|
||
u16 subscribe_id;
|
||
} NanSubscribeCancelRequest;
|
||
|
||
/*
|
||
Transmit follow up Structure
|
||
The TransmitFollowupReq message is sent to the DE to allow the sending of the Service_Specific_Info
|
||
to a particular MAC address.
|
||
*/
|
||
typedef struct {
|
||
/* Publish or Subscribe Id of an earlier Publish/Subscribe */
|
||
u16 publish_subscribe_id;
|
||
|
||
/*
|
||
This Id is the Requestor Instance that is passed as
|
||
part of earlier MatchInd/FollowupInd message.
|
||
*/
|
||
u32 requestor_instance_id;
|
||
u8 addr[NAN_MAC_ADDR_LEN]; /* Unicast address */
|
||
NanTxPriority priority; /* priority of the request 2=high */
|
||
NanTransmitWindowType dw_or_faw; /* 0= send in a DW, 1=send in FAW */
|
||
|
||
/*
|
||
Sequence of values which further specify the published service beyond
|
||
the service name.
|
||
*/
|
||
u16 service_specific_info_len;
|
||
u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN];
|
||
/*
|
||
Set/Enable corresponding bits to disable responses after followUp.
|
||
BIT0 - Disable followUp response from FW.
|
||
*/
|
||
u8 recv_indication_cfg;
|
||
|
||
/*
|
||
Sequence of values indicating the service specific info in SDEA
|
||
*/
|
||
u16 sdea_service_specific_info_len;
|
||
u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN];
|
||
} NanTransmitFollowupRequest;
|
||
|
||
/*
|
||
Stats Request structure
|
||
The Discovery Engine can be queried at runtime by the Host processor for statistics
|
||
concerning various parts of the Discovery Engine.
|
||
*/
|
||
typedef struct {
|
||
NanStatsType stats_type; /* NAN Statistics Request Type */
|
||
u8 clear; /* 0= Do not clear the stats and return the current contents , 1= Clear the associated stats */
|
||
} NanStatsRequest;
|
||
|
||
/*
|
||
Config Structure
|
||
The NanConfigurationReq message is sent by the Host to the
|
||
Discovery Engine in order to configure the Discovery Engine during runtime.
|
||
*/
|
||
typedef struct {
|
||
u8 config_sid_beacon;
|
||
u8 sid_beacon;
|
||
u8 config_rssi_proximity;
|
||
u8 rssi_proximity; // default value -60dBm
|
||
u8 config_master_pref;
|
||
u8 master_pref; // default value 0x02
|
||
/*
|
||
1 byte value which defines the RSSI filter threshold.
|
||
Any Service Descriptors received above this value
|
||
that are configured for RSSI filtering will be dropped.
|
||
The rssi values should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 config_5g_rssi_close_proximity;
|
||
u8 rssi_close_proximity_5g_val; // default value -60dBm
|
||
/*
|
||
Optional configuration of Configure request.
|
||
Each of the optional parameters have configure flag which
|
||
determine whether configuration is to be passed or not.
|
||
*/
|
||
/*
|
||
1 byte quantity which defines the window size over
|
||
which the “average RSSI” will be calculated over.
|
||
*/
|
||
u8 config_rssi_window_size;
|
||
u8 rssi_window_size_val; // default value 0x08
|
||
/*
|
||
If set to 1, the Discovery Engine will enclose the Cluster
|
||
Attribute only sent in Beacons in a Vendor Specific Attribute
|
||
and transmit in a Service Descriptor Frame.
|
||
*/
|
||
u8 config_cluster_attribute_val;
|
||
/*
|
||
The periodicity in seconds between full scan’s to find any new
|
||
clusters available in the area. A Full scan should not be done
|
||
more than every 10 seconds and should not be done less than every
|
||
30 seconds.
|
||
*/
|
||
u8 config_scan_params;
|
||
NanSocialChannelScanParams scan_params_val;
|
||
/*
|
||
1 byte quantity which forces the Random Factor to a particular
|
||
value for all transmitted Sync/Discovery beacons
|
||
*/
|
||
u8 config_random_factor_force;
|
||
u8 random_factor_force_val; // default value 0x00
|
||
/*
|
||
1 byte quantity which forces the HC for all transmitted Sync and
|
||
Discovery Beacon NO matter the real HC being received over the
|
||
air.
|
||
*/
|
||
u8 config_hop_count_force;
|
||
u8 hop_count_force_val; // default value of 0
|
||
/* NAN Post Connectivity Capability */
|
||
u8 config_conn_capability;
|
||
NanTransmitPostConnectivityCapability conn_capability_val;
|
||
/* NAN Post Discover Capability */
|
||
u8 num_config_discovery_attr;
|
||
NanTransmitPostDiscovery discovery_attr_val[NAN_MAX_POSTDISCOVERY_LEN];
|
||
/* NAN Further availability Map */
|
||
u8 config_fam;
|
||
NanFurtherAvailabilityMap fam_val;
|
||
/* Configure 2.4/5GHz DW */
|
||
NanConfigDW config_dw;
|
||
/*
|
||
By default discovery MAC address randomization is enabled
|
||
and default interval value is 30 minutes i.e. 1800 seconds.
|
||
The value 0 is used to disable MAC addr randomization.
|
||
*/
|
||
u8 config_disc_mac_addr_randomization;
|
||
u32 disc_mac_addr_rand_interval_sec; // default value of 30 minutes
|
||
|
||
/*
|
||
Set/Enable corresponding bits to disable Discovery indications:
|
||
BIT0 - Disable Discovery MAC Address Event.
|
||
BIT1 - Disable Started Cluster Event.
|
||
BIT2 - Disable Joined Cluster Event.
|
||
*/
|
||
u8 discovery_indication_cfg; // default value of 0
|
||
/*
|
||
BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons
|
||
0 - Do not include SIDs in any beacons
|
||
1 - Include SIDs in all beacons.
|
||
Rest 7 bits are count field which allows control over the number of SIDs
|
||
included in the Beacon. 0 means to include as many SIDs that fit into
|
||
the maximum allow Beacon frame size
|
||
*/
|
||
u8 config_subscribe_sid_beacon;
|
||
u32 subscribe_sid_beacon_val; // default value 0x0
|
||
/*
|
||
Discovery Beacon Interval config.
|
||
Default value is 128 msec in 2G DW and 176 msec in 2G/5G DW.
|
||
When 0 value is passed it is reset to default value of 128 or 176 msec.
|
||
*/
|
||
u8 config_discovery_beacon_int;
|
||
u32 discovery_beacon_interval;
|
||
/*
|
||
Enable Number of Spatial Streams.
|
||
This is NAN Power Optimization feature for NAN discovery.
|
||
*/
|
||
u8 config_nss;
|
||
// default value is implementation specific and passing 0 sets it to default
|
||
u32 nss;
|
||
/*
|
||
Enable device level NAN Ranging feature.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_enable_ranging;
|
||
u32 enable_ranging;
|
||
/*
|
||
Enable/Disable DW Early termination.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_dw_early_termination;
|
||
u32 enable_dw_termination;
|
||
/*
|
||
Indicate whether to use NDPE attribute to bring-up TCP/IP connection
|
||
If config_ndpe_attr is not configured, the default behavior is
|
||
not using NDPE attr, and the capability is not advertised.
|
||
0 - Not use
|
||
1 - Use
|
||
*/
|
||
u8 config_ndpe_attr;
|
||
u32 use_ndpe_attr;
|
||
/*
|
||
Enable NAN v3.1 instant communication mode.
|
||
0 - Disable
|
||
1 - Enable
|
||
*/
|
||
u8 config_enable_instant_mode;
|
||
u32 enable_instant_mode;
|
||
/*
|
||
Config NAN v3.1 instant communication channel selected over NFC/OOB method.
|
||
If dual band is supported default channel is 149 or 44 as per regulatory domain,
|
||
else channel 6 (send frequency in MHz).
|
||
Sometimes depending on country code retrictions, even 149/44 may be restricted
|
||
in those cases instant channel will be operational only in 2.4GHz.
|
||
Use wifi_get_usable_channels() API to get supported bands/channels before
|
||
Instant mode NFC handshake is triggered
|
||
*/
|
||
u8 config_instant_mode_channel;
|
||
wifi_channel instant_mode_channel;
|
||
} NanConfigRequest;
|
||
|
||
/*
|
||
TCA Structure
|
||
The Discovery Engine can be configured to send up Events whenever a configured
|
||
Threshold Crossing Alert (TCA) Type crosses an integral threshold in a particular direction.
|
||
*/
|
||
typedef struct {
|
||
NanTcaType tca_type; /* Nan Protocol Threshold Crossing Alert (TCA) Codes */
|
||
|
||
/* flag which control whether or not an event is generated for the Rising direction */
|
||
u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */
|
||
|
||
/* flag which control whether or not an event is generated for the Falling direction */
|
||
u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */
|
||
|
||
/* flag which requests a previous TCA request to be cleared from the DE */
|
||
u8 clear;/*0= Do not clear the TCA, 1=Clear the TCA */
|
||
|
||
/* 32 bit value which represents the threshold to be used.*/
|
||
u32 threshold;
|
||
} NanTCARequest;
|
||
|
||
/*
|
||
Beacon Sdf Payload Structure
|
||
The Discovery Engine can be configured to publish vendor specific attributes as part of
|
||
beacon or service discovery frame transmitted as part of this request..
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
NanVendorAttribute will have the Vendor Specific Attribute which the
|
||
vendor wants to publish as part of Discovery or Sync or Service discovery frame
|
||
*/
|
||
NanTransmitVendorSpecificAttribute vsa;
|
||
} NanBeaconSdfPayloadRequest;
|
||
|
||
/* Publish statistics. */
|
||
typedef struct
|
||
{
|
||
u32 validPublishServiceReqMsgs;
|
||
u32 validPublishServiceRspMsgs;
|
||
u32 validPublishServiceCancelReqMsgs;
|
||
u32 validPublishServiceCancelRspMsgs;
|
||
u32 validPublishRepliedIndMsgs;
|
||
u32 validPublishTerminatedIndMsgs;
|
||
u32 validActiveSubscribes;
|
||
u32 validMatches;
|
||
u32 validFollowups;
|
||
u32 invalidPublishServiceReqMsgs;
|
||
u32 invalidPublishServiceCancelReqMsgs;
|
||
u32 invalidActiveSubscribes;
|
||
u32 invalidMatches;
|
||
u32 invalidFollowups;
|
||
u32 publishCount;
|
||
u32 publishNewMatchCount;
|
||
u32 pubsubGlobalNewMatchCount;
|
||
} NanPublishStats;
|
||
|
||
/* Subscribe statistics. */
|
||
typedef struct
|
||
{
|
||
u32 validSubscribeServiceReqMsgs;
|
||
u32 validSubscribeServiceRspMsgs;
|
||
u32 validSubscribeServiceCancelReqMsgs;
|
||
u32 validSubscribeServiceCancelRspMsgs;
|
||
u32 validSubscribeTerminatedIndMsgs;
|
||
u32 validSubscribeMatchIndMsgs;
|
||
u32 validSubscribeUnmatchIndMsgs;
|
||
u32 validSolicitedPublishes;
|
||
u32 validMatches;
|
||
u32 validFollowups;
|
||
u32 invalidSubscribeServiceReqMsgs;
|
||
u32 invalidSubscribeServiceCancelReqMsgs;
|
||
u32 invalidSubscribeFollowupReqMsgs;
|
||
u32 invalidSolicitedPublishes;
|
||
u32 invalidMatches;
|
||
u32 invalidFollowups;
|
||
u32 subscribeCount;
|
||
u32 bloomFilterIndex;
|
||
u32 subscribeNewMatchCount;
|
||
u32 pubsubGlobalNewMatchCount;
|
||
} NanSubscribeStats;
|
||
|
||
/* NAN DW Statistics*/
|
||
typedef struct
|
||
{
|
||
/* RX stats */
|
||
u32 validFrames;
|
||
u32 validActionFrames;
|
||
u32 validBeaconFrames;
|
||
u32 ignoredActionFrames;
|
||
u32 ignoredBeaconFrames;
|
||
u32 invalidFrames;
|
||
u32 invalidActionFrames;
|
||
u32 invalidBeaconFrames;
|
||
u32 invalidMacHeaders;
|
||
u32 invalidPafHeaders;
|
||
u32 nonNanBeaconFrames;
|
||
|
||
u32 earlyActionFrames;
|
||
u32 inDwActionFrames;
|
||
u32 lateActionFrames;
|
||
|
||
/* TX stats */
|
||
u32 framesQueued;
|
||
u32 totalTRSpUpdates;
|
||
u32 completeByTRSp;
|
||
u32 completeByTp75DW;
|
||
u32 completeByTendDW;
|
||
u32 lateActionFramesTx;
|
||
} NanDWStats;
|
||
|
||
/* NAN MAC Statistics. */
|
||
typedef struct
|
||
{
|
||
/* RX stats */
|
||
u32 validFrames;
|
||
u32 validActionFrames;
|
||
u32 validBeaconFrames;
|
||
u32 ignoredActionFrames;
|
||
u32 ignoredBeaconFrames;
|
||
u32 invalidFrames;
|
||
u32 invalidActionFrames;
|
||
u32 invalidBeaconFrames;
|
||
u32 invalidMacHeaders;
|
||
u32 invalidPafHeaders;
|
||
u32 nonNanBeaconFrames;
|
||
|
||
u32 earlyActionFrames;
|
||
u32 inDwActionFrames;
|
||
u32 lateActionFrames;
|
||
|
||
/* TX stats */
|
||
u32 framesQueued;
|
||
u32 totalTRSpUpdates;
|
||
u32 completeByTRSp;
|
||
u32 completeByTp75DW;
|
||
u32 completeByTendDW;
|
||
u32 lateActionFramesTx;
|
||
|
||
u32 twIncreases;
|
||
u32 twDecreases;
|
||
u32 twChanges;
|
||
u32 twHighwater;
|
||
u32 bloomFilterIndex;
|
||
} NanMacStats;
|
||
|
||
/* NAN Sync Statistics*/
|
||
typedef struct
|
||
{
|
||
u64 currTsf;
|
||
u64 myRank;
|
||
u64 currAmRank;
|
||
u64 lastAmRank;
|
||
u32 currAmBTT;
|
||
u32 lastAmBTT;
|
||
u8 currAmHopCount;
|
||
u8 currRole;
|
||
u16 currClusterId;
|
||
|
||
u64 timeSpentInCurrRole;
|
||
u64 totalTimeSpentAsMaster;
|
||
u64 totalTimeSpentAsNonMasterSync;
|
||
u64 totalTimeSpentAsNonMasterNonSync;
|
||
u32 transitionsToAnchorMaster;
|
||
u32 transitionsToMaster;
|
||
u32 transitionsToNonMasterSync;
|
||
u32 transitionsToNonMasterNonSync;
|
||
u32 amrUpdateCount;
|
||
u32 amrUpdateRankChangedCount;
|
||
u32 amrUpdateBTTChangedCount;
|
||
u32 amrUpdateHcChangedCount;
|
||
u32 amrUpdateNewDeviceCount;
|
||
u32 amrExpireCount;
|
||
u32 mergeCount;
|
||
u32 beaconsAboveHcLimit;
|
||
u32 beaconsBelowRssiThresh;
|
||
u32 beaconsIgnoredNoSpace;
|
||
u32 beaconsForOurCluster;
|
||
u32 beaconsForOtherCluster;
|
||
u32 beaconCancelRequests;
|
||
u32 beaconCancelFailures;
|
||
u32 beaconUpdateRequests;
|
||
u32 beaconUpdateFailures;
|
||
u32 syncBeaconTxAttempts;
|
||
u32 syncBeaconTxFailures;
|
||
u32 discBeaconTxAttempts;
|
||
u32 discBeaconTxFailures;
|
||
u32 amHopCountExpireCount;
|
||
u32 ndpChannelFreq;
|
||
u32 ndpChannelFreq2;
|
||
u32 schedUpdateChannelFreq;
|
||
} NanSyncStats;
|
||
|
||
/* NAN Misc DE Statistics */
|
||
typedef struct
|
||
{
|
||
u32 validErrorRspMsgs;
|
||
u32 validTransmitFollowupReqMsgs;
|
||
u32 validTransmitFollowupRspMsgs;
|
||
u32 validFollowupIndMsgs;
|
||
u32 validConfigurationReqMsgs;
|
||
u32 validConfigurationRspMsgs;
|
||
u32 validStatsReqMsgs;
|
||
u32 validStatsRspMsgs;
|
||
u32 validEnableReqMsgs;
|
||
u32 validEnableRspMsgs;
|
||
u32 validDisableReqMsgs;
|
||
u32 validDisableRspMsgs;
|
||
u32 validDisableIndMsgs;
|
||
u32 validEventIndMsgs;
|
||
u32 validTcaReqMsgs;
|
||
u32 validTcaRspMsgs;
|
||
u32 validTcaIndMsgs;
|
||
u32 invalidTransmitFollowupReqMsgs;
|
||
u32 invalidConfigurationReqMsgs;
|
||
u32 invalidStatsReqMsgs;
|
||
u32 invalidEnableReqMsgs;
|
||
u32 invalidDisableReqMsgs;
|
||
u32 invalidTcaReqMsgs;
|
||
} NanDeStats;
|
||
|
||
/* Publish Response Message structure */
|
||
typedef struct {
|
||
u16 publish_id;
|
||
} NanPublishResponse;
|
||
|
||
/* Subscribe Response Message structure */
|
||
typedef struct {
|
||
u16 subscribe_id;
|
||
} NanSubscribeResponse;
|
||
|
||
/*
|
||
Stats Response Message structure
|
||
The Discovery Engine response to a request by the Host for statistics.
|
||
*/
|
||
typedef struct {
|
||
NanStatsType stats_type;
|
||
union {
|
||
NanPublishStats publish_stats;
|
||
NanSubscribeStats subscribe_stats;
|
||
NanMacStats mac_stats;
|
||
NanSyncStats sync_stats;
|
||
NanDeStats de_stats;
|
||
NanDWStats dw_stats;
|
||
} data;
|
||
} NanStatsResponse;
|
||
|
||
/* Response returned for Initiators Data request */
|
||
typedef struct {
|
||
/*
|
||
Unique token Id generated on the initiator
|
||
side used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id;
|
||
} NanDataPathRequestResponse;
|
||
|
||
/*
|
||
NAN Response messages
|
||
*/
|
||
typedef struct {
|
||
NanStatusType status; /* contains the result code */
|
||
char nan_error[NAN_ERROR_STR_LEN]; /* Describe the NAN error type */
|
||
NanResponseType response_type; /* NanResponseType Definitions */
|
||
union {
|
||
NanPublishResponse publish_response;
|
||
NanSubscribeResponse subscribe_response;
|
||
NanStatsResponse stats_response;
|
||
NanDataPathRequestResponse data_request_response;
|
||
NanCapabilities nan_capabilities;
|
||
} body;
|
||
} NanResponseMsg;
|
||
|
||
/*
|
||
Publish Replied Indication
|
||
The PublishRepliedInd Message is sent by the DE when an Active Subscribe is
|
||
received over the air and it matches a Solicited PublishServiceReq which had
|
||
been created with the replied_event_flag set.
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
A 32 bit Requestor Instance Id which is sent to the Application.
|
||
This Id will be sent in any subsequent UnmatchInd/FollowupInd
|
||
messages
|
||
*/
|
||
u32 requestor_instance_id;
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
If RSSI filtering was configured in NanPublishRequest then this
|
||
field will contain the received RSSI value. 0 if not
|
||
*/
|
||
u8 rssi_value;
|
||
} NanPublishRepliedInd;
|
||
|
||
/*
|
||
Publish Terminated
|
||
The PublishTerminatedInd message is sent by the DE whenever a Publish
|
||
terminates from a user-specified timeout or a unrecoverable error in the DE.
|
||
*/
|
||
typedef struct {
|
||
/* Id returned during the initial Publish */
|
||
u16 publish_id;
|
||
/*
|
||
For all user configured termination NAN_STATUS_SUCCESS
|
||
and no other reasons expected from firmware.
|
||
*/
|
||
NanStatusType reason;
|
||
char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
|
||
} NanPublishTerminatedInd;
|
||
|
||
/*
|
||
Match Indication
|
||
The MatchInd message is sent once per responding MAC address whenever
|
||
the Discovery Engine detects a match for a previous SubscribeServiceReq
|
||
or PublishServiceReq.
|
||
*/
|
||
typedef struct {
|
||
/* Publish or Subscribe Id of an earlier Publish/Subscribe */
|
||
u16 publish_subscribe_id;
|
||
/*
|
||
A 32 bit Requestor Instance Id which is sent to the Application.
|
||
This Id will be sent in any subsequent UnmatchInd/FollowupInd
|
||
messages
|
||
*/
|
||
u32 requestor_instance_id;
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
|
||
/*
|
||
Sequence of octets which were received in a Discovery Frame matching the
|
||
Subscribe Request.
|
||
*/
|
||
u16 service_specific_info_len;
|
||
u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN];
|
||
|
||
/*
|
||
Ordered sequence of <length, value> pairs received in the Discovery Frame
|
||
matching the Subscribe Request.
|
||
*/
|
||
u16 sdf_match_filter_len;
|
||
u8 sdf_match_filter[NAN_MAX_MATCH_FILTER_LEN];
|
||
|
||
/*
|
||
flag to indicate if the Match occurred in a Beacon Frame or in a
|
||
Service Discovery Frame.
|
||
0 - Match occured in a Service Discovery Frame
|
||
1 - Match occured in a Beacon Frame
|
||
*/
|
||
u8 match_occured_flag;
|
||
|
||
/*
|
||
flag to indicate FW is out of resource and that it can no longer
|
||
track this Service Name. The Host still need to send the received
|
||
Match_Handle but duplicate MatchInd messages may be received on
|
||
this Handle until the resource frees up.
|
||
0 - FW is caching this match
|
||
1 - FW is unable to cache this match
|
||
*/
|
||
u8 out_of_resource_flag;
|
||
|
||
/*
|
||
If RSSI filtering was configured in NanSubscribeRequest then this
|
||
field will contain the received RSSI value. 0 if not.
|
||
All rssi values should be specified without sign.
|
||
For eg: -70dBm should be specified as 70.
|
||
*/
|
||
u8 rssi_value;
|
||
|
||
/*
|
||
optional attributes. Each optional attribute is associated with a flag
|
||
which specifies whether the attribute is valid or not
|
||
*/
|
||
/* NAN Post Connectivity Capability received */
|
||
u8 is_conn_capability_valid;
|
||
NanReceivePostConnectivityCapability conn_capability;
|
||
|
||
/* NAN Post Discover Capability */
|
||
u8 num_rx_discovery_attr;
|
||
NanReceivePostDiscovery discovery_attr[NAN_MAX_POSTDISCOVERY_LEN];
|
||
|
||
/* NAN Further availability Map */
|
||
u8 num_chans;
|
||
NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS];
|
||
|
||
/* NAN Cluster Attribute */
|
||
u8 cluster_attribute_len;
|
||
u8 cluster_attribute[NAN_MAX_CLUSTER_ATTRIBUTE_LEN];
|
||
|
||
/* NAN Cipher Suite */
|
||
u32 peer_cipher_type;
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
|
||
/* Peer service discovery extended attributes */
|
||
NanSdeaCtrlParams peer_sdea_params;
|
||
|
||
/*
|
||
Ranging indication and NanMatchAlg are not tied.
|
||
Ex: NanMatchAlg can indicate Match_ONCE, but ranging
|
||
indications can be continuous. All ranging indications
|
||
depend on SDEA control parameters of ranging required for
|
||
continuous, and ingress/egress values in the ranging config.
|
||
Ranging indication data is notified if:
|
||
1) Ranging required is enabled in SDEA.
|
||
range info notified continuous.
|
||
2) if range_limit ingress/egress MASKS are enabled
|
||
notify once for ingress >= ingress_distance
|
||
and egress <= egress_distance, same for ingress_egress_both
|
||
3) if the Awake DW intervals are higher than the ranging intervals,
|
||
priority is given to the device DW intervalsi.
|
||
*/
|
||
/*
|
||
Range Info includes:
|
||
1) distance to the NAN device with the MAC address indicated
|
||
with ranged mac address.
|
||
2) Ranging event matching the configuration of continuous/ingress/egress.
|
||
*/
|
||
NanRangeInfo range_info;
|
||
|
||
/*
|
||
Sequence of values indicating the service specific info in SDEA
|
||
*/
|
||
u16 sdea_service_specific_info_len;
|
||
u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN];
|
||
} NanMatchInd;
|
||
|
||
/*
|
||
MatchExpired Indication
|
||
The MatchExpiredInd message is sent whenever the Discovery Engine detects that
|
||
a previously Matched Service has been gone for too long. If the previous
|
||
MatchInd message for this Publish/Subscribe Id had the out_of_resource_flag
|
||
set then this message will not be received
|
||
*/
|
||
typedef struct {
|
||
/* Publish or Subscribe Id of an earlier Publish/Subscribe */
|
||
u16 publish_subscribe_id;
|
||
/*
|
||
32 bit value sent by the DE in a previous
|
||
MatchInd/FollowupInd to the application.
|
||
*/
|
||
u32 requestor_instance_id;
|
||
} NanMatchExpiredInd;
|
||
|
||
/*
|
||
Subscribe Terminated
|
||
The SubscribeTerminatedInd message is sent by the DE whenever a
|
||
Subscribe terminates from a user-specified timeout or a unrecoverable error in the DE.
|
||
*/
|
||
typedef struct {
|
||
/* Id returned during initial Subscribe */
|
||
u16 subscribe_id;
|
||
/*
|
||
For all user configured termination NAN_STATUS_SUCCESS
|
||
and no other reasons expected from firmware.
|
||
*/
|
||
NanStatusType reason;
|
||
char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
|
||
} NanSubscribeTerminatedInd;
|
||
|
||
/*
|
||
Followup Indication Message
|
||
The FollowupInd message is sent by the DE to the Host whenever it receives a
|
||
Followup message from another peer.
|
||
*/
|
||
typedef struct {
|
||
/* Publish or Subscribe Id of an earlier Publish/Subscribe */
|
||
u16 publish_subscribe_id;
|
||
/*
|
||
A 32 bit Requestor instance Id which is sent to the Application.
|
||
This Id will be used in subsequent UnmatchInd/FollowupInd messages.
|
||
*/
|
||
u32 requestor_instance_id;
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
|
||
/* Flag which the DE uses to decide if received in a DW or a FAW*/
|
||
u8 dw_or_faw; /* 0=Received in a DW, 1 = Received in a FAW*/
|
||
|
||
/*
|
||
Sequence of values which further specify the published service beyond
|
||
the service name
|
||
*/
|
||
u16 service_specific_info_len;
|
||
u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN];
|
||
|
||
/*
|
||
Sequence of values indicating the service specific info in SDEA
|
||
*/
|
||
u16 sdea_service_specific_info_len;
|
||
u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN];
|
||
} NanFollowupInd;
|
||
|
||
/*
|
||
Event data notifying the Mac address of the Discovery engine.
|
||
which is reported as one of the Discovery engine event
|
||
*/
|
||
typedef struct {
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
} NanMacAddressEvent;
|
||
|
||
/*
|
||
Event data notifying the Cluster address of the cluster
|
||
which is reported as one of the Discovery engine event
|
||
*/
|
||
typedef struct {
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
} NanClusterEvent;
|
||
|
||
/*
|
||
Discovery Engine Event Indication
|
||
The Discovery Engine can inform the Host when significant events occur
|
||
The data following the EventId is dependent upon the EventId type.
|
||
In other words, each new event defined will carry a different
|
||
structure of information back to the host.
|
||
*/
|
||
typedef struct {
|
||
NanDiscEngEventType event_type; /* NAN Protocol Event Codes */
|
||
union {
|
||
/*
|
||
MacAddressEvent which will have 6 byte mac address
|
||
of the Discovery engine.
|
||
*/
|
||
NanMacAddressEvent mac_addr;
|
||
/*
|
||
Cluster Event Data which will be obtained when the
|
||
device starts a new cluster or joins a cluster.
|
||
The event data will have 6 byte octet string of the
|
||
cluster started or joined.
|
||
*/
|
||
NanClusterEvent cluster;
|
||
} data;
|
||
} NanDiscEngEventInd;
|
||
|
||
/* Cluster size TCA event*/
|
||
typedef struct {
|
||
/* size of the cluster*/
|
||
u32 cluster_size;
|
||
} NanTcaClusterEvent;
|
||
|
||
/*
|
||
NAN TCA Indication
|
||
The Discovery Engine can inform the Host when significant events occur.
|
||
The data following the TcaId is dependent upon the TcaId type.
|
||
In other words, each new event defined will carry a different structure
|
||
of information back to the host.
|
||
*/
|
||
typedef struct {
|
||
NanTcaType tca_type;
|
||
/* flag which defines if the configured Threshold has risen above the threshold */
|
||
u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */
|
||
|
||
/* flag which defines if the configured Threshold has fallen below the threshold */
|
||
u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */
|
||
union {
|
||
/*
|
||
This event in obtained when the cluser size threshold
|
||
is crossed. Event will have the cluster size
|
||
*/
|
||
NanTcaClusterEvent cluster;
|
||
} data;
|
||
} NanTCAInd;
|
||
|
||
/*
|
||
NAN Disabled Indication
|
||
The NanDisableInd message indicates to the upper layers that the Discovery
|
||
Engine has flushed all state and has been shutdown. When this message is received
|
||
the DE is guaranteed to have left the NAN cluster it was part of and will have terminated
|
||
any in progress Publishes or Subscribes.
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Following reasons expected:
|
||
NAN_STATUS_SUCCESS
|
||
NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED
|
||
*/
|
||
NanStatusType reason;
|
||
char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
|
||
} NanDisabledInd;
|
||
|
||
/*
|
||
NAN Beacon or SDF Payload Indication
|
||
The NanBeaconSdfPayloadInd message indicates to the upper layers that information
|
||
elements were received either in a Beacon or SDF which needs to be delivered
|
||
outside of a Publish/Subscribe Handle.
|
||
*/
|
||
typedef struct {
|
||
/* The MAC address of the peer which sent the attributes.*/
|
||
u8 addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Optional attributes. Each optional attribute is associated with a flag
|
||
which specifies whether the attribute is valid or not
|
||
*/
|
||
/* NAN Receive Vendor Specific Attribute*/
|
||
u8 is_vsa_received;
|
||
NanReceiveVendorSpecificAttribute vsa;
|
||
|
||
/* NAN Beacon or SDF Payload Received*/
|
||
u8 is_beacon_sdf_payload_received;
|
||
NanBeaconSdfPayloadReceive data;
|
||
} NanBeaconSdfPayloadInd;
|
||
|
||
/*
|
||
Event Indication notifying the
|
||
transmit followup in progress
|
||
*/
|
||
typedef struct {
|
||
transaction_id id;
|
||
/*
|
||
Following reason codes returned:
|
||
NAN_STATUS_SUCCESS
|
||
NAN_STATUS_NO_OTA_ACK
|
||
NAN_STATUS_PROTOCOL_FAILURE
|
||
*/
|
||
NanStatusType reason;
|
||
char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */
|
||
} NanTransmitFollowupInd;
|
||
|
||
/*
|
||
Data request Initiator/Responder
|
||
app/service related info
|
||
*/
|
||
typedef struct {
|
||
u16 ndp_app_info_len;
|
||
u8 ndp_app_info[NAN_DP_MAX_APP_INFO_LEN];
|
||
} NanDataPathAppInfo;
|
||
|
||
/* QoS configuration */
|
||
typedef enum {
|
||
NAN_DP_CONFIG_NO_QOS = 0,
|
||
NAN_DP_CONFIG_QOS
|
||
} NanDataPathQosCfg;
|
||
|
||
/* Configuration params of Data request Initiator/Responder */
|
||
typedef struct {
|
||
/* Status Indicating Security/No Security */
|
||
NanDataPathSecurityCfgStatus security_cfg;
|
||
NanDataPathQosCfg qos_cfg;
|
||
} NanDataPathCfg;
|
||
|
||
/* Nan Data Path Initiator requesting a data session */
|
||
typedef struct {
|
||
/*
|
||
Unique Instance Id identifying the Responder's service.
|
||
This is same as publish_id notified on the subscribe side
|
||
in a publish/subscribe scenario
|
||
*/
|
||
u32 requestor_instance_id; /* Value 0 for no publish/subscribe */
|
||
|
||
/* Config flag for channel request */
|
||
NanDataPathChannelCfg channel_request_type;
|
||
/* Channel frequency in MHz to start data-path */
|
||
wifi_channel channel;
|
||
/*
|
||
Discovery MAC addr of the publisher/peer
|
||
*/
|
||
u8 peer_disc_mac_addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Interface name on which this NDP session is to be started.
|
||
This will be the same interface name provided during interface
|
||
create.
|
||
*/
|
||
char ndp_iface[IFNAMSIZ+1];
|
||
/* Initiator/Responder Security/QoS configuration */
|
||
NanDataPathCfg ndp_cfg;
|
||
/* App/Service information of the Initiator */
|
||
NanDataPathAppInfo app_info;
|
||
/* NAN Cipher Suite Type */
|
||
u32 cipher_type;
|
||
/*
|
||
Nan Security Key Info is optional in Discovery phase.
|
||
PMK or passphrase info can be passed during
|
||
the NDP session.
|
||
*/
|
||
NanSecurityKeyInfo key_info;
|
||
/* length of service name */
|
||
u32 service_name_len;
|
||
/*
|
||
UTF-8 encoded string identifying the service name.
|
||
The service name field is only used if a Nan discovery
|
||
is not associated with the NDP (out-of-band discovery).
|
||
*/
|
||
u8 service_name[NAN_MAX_SERVICE_NAME_LEN];
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
} NanDataPathInitiatorRequest;
|
||
|
||
/*
|
||
Data struct to initiate a data response on the responder side
|
||
for an indication received with a data request
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Unique token Id generated on the initiator/responder
|
||
side used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id;
|
||
/*
|
||
Interface name on which this NDP session is to be started.
|
||
This will be the same interface name provided during interface
|
||
create.
|
||
*/
|
||
char ndp_iface[IFNAMSIZ+1];
|
||
/* Initiator/Responder Security/QoS configuration */
|
||
NanDataPathCfg ndp_cfg;
|
||
/* App/Service information of the responder */
|
||
NanDataPathAppInfo app_info;
|
||
/* Response Code indicating ACCEPT/REJECT/DEFER */
|
||
NanDataPathResponseCode rsp_code;
|
||
/* NAN Cipher Suite Type */
|
||
u32 cipher_type;
|
||
/*
|
||
Nan Security Key Info is optional in Discovery phase.
|
||
PMK or passphrase info can be passed during
|
||
the NDP session.
|
||
*/
|
||
NanSecurityKeyInfo key_info;
|
||
/* length of service name */
|
||
u32 service_name_len;
|
||
/*
|
||
UTF-8 encoded string identifying the service name.
|
||
The service name field is only used if a Nan discovery
|
||
is not associated with the NDP (out-of-band discovery).
|
||
*/
|
||
u8 service_name[NAN_MAX_SERVICE_NAME_LEN];
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
} NanDataPathIndicationResponse;
|
||
|
||
/* NDP termination info */
|
||
typedef struct {
|
||
u8 num_ndp_instances;
|
||
/*
|
||
Unique token Id generated on the initiator/responder side
|
||
used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id[];
|
||
} NanDataPathEndRequest;
|
||
|
||
/*
|
||
Event indication received on the
|
||
responder side when a Nan Data request or
|
||
NDP session is initiated on the Initiator side
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Unique Instance Id corresponding to a service/session.
|
||
This is similar to the publish_id generated on the
|
||
publisher side
|
||
*/
|
||
u16 service_instance_id;
|
||
/* Discovery MAC addr of the peer/initiator */
|
||
u8 peer_disc_mac_addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Unique token Id generated on the initiator/responder side
|
||
used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id;
|
||
/* Initiator/Responder Security/QoS configuration */
|
||
NanDataPathCfg ndp_cfg;
|
||
/* App/Service information of the initiator */
|
||
NanDataPathAppInfo app_info;
|
||
|
||
/* Security Context Identifiers length */
|
||
u32 scid_len;
|
||
/*
|
||
Security Context Identifier attribute contains PMKID
|
||
shall be included in NDP setup and response messages.
|
||
Security Context Identifier, Identifies the Security
|
||
Context. For NAN Shared Key Cipher Suite, this field
|
||
contains the 16 octet PMKID identifying the PMK used
|
||
for setting up the Secure Data Path.
|
||
*/
|
||
u8 scid[NAN_MAX_SCID_BUF_LEN];
|
||
} NanDataPathRequestInd;
|
||
|
||
/*
|
||
Event indication of data confirm is received on both
|
||
initiator and responder side confirming a NDP session
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
Unique token Id generated on the initiator/responder side
|
||
used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id;
|
||
/*
|
||
NDI mac address of the peer
|
||
(required to derive target ipv6 address)
|
||
*/
|
||
u8 peer_ndi_mac_addr[NAN_MAC_ADDR_LEN];
|
||
/* App/Service information of Initiator/Responder */
|
||
NanDataPathAppInfo app_info;
|
||
/* Response code indicating ACCEPT/REJECT/DEFER */
|
||
NanDataPathResponseCode rsp_code;
|
||
/*
|
||
Reason code indicating the cause for REJECT.
|
||
NAN_STATUS_SUCCESS and NAN_STATUS_PROTOCOL_FAILURE are
|
||
expected reason codes.
|
||
*/
|
||
NanStatusType reason_code;
|
||
/* Number of channels for which info is indicated */
|
||
u32 num_channels;
|
||
/*
|
||
Data indicating the Channel list and BW of the channel.
|
||
*/
|
||
NanChannelInfo channel_info[NAN_MAX_CHANNEL_INFO_SUPPORTED];
|
||
} NanDataPathConfirmInd;
|
||
|
||
/*
|
||
Event indication of schedule update is received on both
|
||
initiator and responder when a schedule change occurs
|
||
*/
|
||
typedef struct {
|
||
/*
|
||
NMI mac address
|
||
*/
|
||
u8 peer_mac_addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Reason code indicating the cause of schedule update.
|
||
BIT_0 NSS Update
|
||
BIT_1 Channel list update
|
||
*/
|
||
u32 schedule_update_reason_code;
|
||
/* Number of channels for which info is indicated */
|
||
u32 num_channels;
|
||
/*
|
||
Data indicating the Channel list and BW of the channel.
|
||
*/
|
||
NanChannelInfo channel_info[NAN_MAX_CHANNEL_INFO_SUPPORTED];
|
||
/* Number of NDP instance Ids */
|
||
u8 num_ndp_instances;
|
||
/*
|
||
Unique token Id generated on the initiator/responder side
|
||
used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id[];
|
||
} NanDataPathScheduleUpdateInd;
|
||
|
||
/*
|
||
Event indication received on the
|
||
initiator/responder side terminating
|
||
a NDP session
|
||
*/
|
||
typedef struct {
|
||
u8 num_ndp_instances;
|
||
/*
|
||
Unique token Id generated on the initiator/responder side
|
||
used for a NDP session between two NAN devices
|
||
*/
|
||
NanDataPathId ndp_instance_id[];
|
||
} NanDataPathEndInd;
|
||
|
||
/*
|
||
Event indicating Range Request received on the
|
||
Published side.
|
||
*/
|
||
typedef struct {
|
||
u16 publish_id;/* id is existing publish */
|
||
/* Range Requestor's MAC address */
|
||
u8 range_req_intf_addr[NAN_MAC_ADDR_LEN];
|
||
} NanRangeRequestInd;
|
||
|
||
/*
|
||
Event indicating Range report on the
|
||
Published side.
|
||
*/
|
||
typedef struct {
|
||
u16 publish_id;/* id is existing publish */
|
||
/* Range Requestor's MAC address */
|
||
u8 range_req_intf_addr[NAN_MAC_ADDR_LEN];
|
||
/*
|
||
Distance to the NAN device with the MAC address indicated
|
||
with ranged mac address.
|
||
*/
|
||
u32 range_measurement_mm;
|
||
} NanRangeReportInd;
|
||
|
||
/* Response and Event Callbacks */
|
||
typedef struct {
|
||
/* NotifyResponse invoked to notify the status of the Request */
|
||
void (*NotifyResponse)(transaction_id id, NanResponseMsg* rsp_data);
|
||
/* Callbacks for various Events */
|
||
void (*EventPublishReplied)(NanPublishRepliedInd *event);
|
||
void (*EventPublishTerminated)(NanPublishTerminatedInd* event);
|
||
void (*EventMatch) (NanMatchInd* event);
|
||
void (*EventMatchExpired) (NanMatchExpiredInd* event);
|
||
void (*EventSubscribeTerminated) (NanSubscribeTerminatedInd* event);
|
||
void (*EventFollowup) (NanFollowupInd* event);
|
||
void (*EventDiscEngEvent) (NanDiscEngEventInd* event);
|
||
void (*EventDisabled) (NanDisabledInd* event);
|
||
void (*EventTca) (NanTCAInd* event);
|
||
void (*EventBeaconSdfPayload) (NanBeaconSdfPayloadInd* event);
|
||
void (*EventDataRequest)(NanDataPathRequestInd* event);
|
||
void (*EventDataConfirm)(NanDataPathConfirmInd* event);
|
||
void (*EventDataEnd)(NanDataPathEndInd* event);
|
||
void (*EventTransmitFollowup) (NanTransmitFollowupInd* event);
|
||
void (*EventRangeRequest) (NanRangeRequestInd* event);
|
||
void (*EventRangeReport) (NanRangeReportInd* event);
|
||
void (*EventScheduleUpdate)(NanDataPathScheduleUpdateInd* event);
|
||
} NanCallbackHandler;
|
||
|
||
/**@brief nan_enable_request
|
||
* Enable NAN functionality
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanEnableRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_ALREADY_ENABLED
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_NAN_NOT_ALLOWED
|
||
*/
|
||
wifi_error nan_enable_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanEnableRequest* msg);
|
||
|
||
/**@brief nan_disbale_request
|
||
* Disable NAN functionality.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanDisableRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
*
|
||
*/
|
||
wifi_error nan_disable_request(transaction_id id,
|
||
wifi_interface_handle iface);
|
||
|
||
/**@brief nan_publish_request
|
||
* Publish request to advertize a service
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanPublishRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_NO_RESOURCE_AVAILABLE
|
||
* NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID
|
||
*/
|
||
wifi_error nan_publish_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanPublishRequest* msg);
|
||
|
||
/**@brief nan_publish_cancel_request
|
||
* Cancel previous publish request
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanPublishCancelRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_publish_cancel_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanPublishCancelRequest* msg);
|
||
|
||
/**@brief nan_subscribe_request
|
||
* Subscribe request to search for a service
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanSubscribeRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_NO_SPACE_AVAILABLE
|
||
* NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID
|
||
*/
|
||
wifi_error nan_subscribe_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanSubscribeRequest* msg);
|
||
|
||
/**@brief nan_subscribe_cancel_request
|
||
* Cancel previous subscribe requests.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanSubscribeRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_subscribe_cancel_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanSubscribeCancelRequest* msg);
|
||
|
||
/**@brief nan_transmit_followup_request
|
||
* NAN transmit follow up request
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanTransmitFollowupRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID
|
||
* NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID
|
||
* NAN_STATUS_FOLLOWUP_QUEUE_FULL
|
||
* @return Asynchronous TransmitFollowupInd CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_NO_OTA_ACK
|
||
*/
|
||
wifi_error nan_transmit_followup_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanTransmitFollowupRequest* msg);
|
||
|
||
/**@brief nan_stats_request
|
||
* Request NAN statistics from Discovery Engine.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanStatsRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_INVALID_PARAM
|
||
*/
|
||
wifi_error nan_stats_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanStatsRequest* msg);
|
||
|
||
/**@brief nan_config_request
|
||
* NAN configuration request.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanConfigRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_config_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanConfigRequest* msg);
|
||
|
||
/**@brief nan_tca_request
|
||
* Configure the various Threshold crossing alerts
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanStatsRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_tca_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanTCARequest* msg);
|
||
|
||
/**@brief nan_beacon_sdf_payload_request
|
||
* Set NAN Beacon or sdf payload to discovery engine.
|
||
* This instructs the Discovery Engine to begin publishing the
|
||
* received payload in any Beacon or Service Discovery Frame transmitted
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanStatsRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_beacon_sdf_payload_request(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanBeaconSdfPayloadRequest* msg);
|
||
|
||
/* Register NAN callbacks. */
|
||
wifi_error nan_register_handler(wifi_interface_handle iface,
|
||
NanCallbackHandler handlers);
|
||
|
||
/* Get NAN HAL version. */
|
||
wifi_error nan_get_version(wifi_handle handle,
|
||
NanVersion* version);
|
||
|
||
/**@brief nan_get_capabilities
|
||
* Get NAN Capabilities
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
*/
|
||
/* Get NAN capabilities. */
|
||
wifi_error nan_get_capabilities(transaction_id id,
|
||
wifi_interface_handle iface);
|
||
|
||
/* ========== Nan Data Path APIs ================ */
|
||
/**@brief nan_data_interface_create
|
||
* Create NAN Data Interface.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param iface_name:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_data_interface_create(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
char* iface_name);
|
||
|
||
/**@brief nan_data_interface_delete
|
||
* Delete NAN Data Interface.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param iface_name:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
*/
|
||
wifi_error nan_data_interface_delete(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
char* iface_name);
|
||
|
||
/**@brief nan_data_request_initiator
|
||
* Initiate a NAN Data Path session.
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanDataPathInitiatorRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID
|
||
*/
|
||
wifi_error nan_data_request_initiator(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanDataPathInitiatorRequest* msg);
|
||
|
||
/**@brief nan_data_indication_response
|
||
* Response to a data indication received
|
||
* corresponding to a NDP session. An indication
|
||
* is received with a data request and the responder
|
||
* will send a data response
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanDataPathIndicationResponse:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_INVALID_NDP_ID
|
||
*/
|
||
wifi_error nan_data_indication_response(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanDataPathIndicationResponse* msg);
|
||
|
||
/**@brief nan_data_end
|
||
* NDL termination request: from either Initiator/Responder
|
||
*
|
||
* @param transaction_id:
|
||
* @param wifi_interface_handle:
|
||
* @param NanDataPathEndRequest:
|
||
* @return Synchronous wifi_error
|
||
* @return Asynchronous NotifyResponse CB return
|
||
* NAN_STATUS_SUCCESS
|
||
* NAN_STATUS_INVALID_PARAM
|
||
* NAN_STATUS_INTERNAL_FAILURE
|
||
* NAN_STATUS_PROTOCOL_FAILURE
|
||
* NAN_STATUS_INVALID_NDP_ID
|
||
*/
|
||
wifi_error nan_data_end(transaction_id id,
|
||
wifi_interface_handle iface,
|
||
NanDataPathEndRequest* msg);
|
||
#ifdef __cplusplus
|
||
}
|
||
#endif /* __cplusplus */
|
||
|
||
#endif /* __NAN_H__ */
|