/* * Copyright (C) 2014 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_I_H__ #define __NAN_I_H__ #include "common.h" #include "cpp_bindings.h" #include "wifi_hal.h" #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef PACKED #define PACKED __attribute__((packed)) #endif #define BIT_NONE 0x00 #define BIT_0 0x01 #define BIT_1 0x02 #define BIT_2 0x04 #define BIT_3 0x08 #define BIT_4 0x10 #define BIT_5 0x20 #define BIT_6 0x40 #define BIT_7 0x80 #define BIT_8 0x0100 #define BIT_9 0x0200 #define BIT_10 0x0400 #define BIT_11 0x0800 #define BIT_12 0x1000 #define BIT_13 0x2000 #define BIT_14 0x4000 #define BIT_15 0x8000 #define BIT_16 0x010000 #define BIT_17 0x020000 #define BIT_18 0x040000 #define BIT_19 0x080000 #define BIT_20 0x100000 #define BIT_21 0x200000 #define BIT_22 0x400000 #define BIT_23 0x800000 #define BIT_24 0x01000000 #define BIT_25 0x02000000 #define BIT_26 0x04000000 #define BIT_27 0x08000000 #define BIT_28 0x10000000 #define BIT_29 0x20000000 #define BIT_30 0x40000000 #define BIT_31 0x80000000 typedef u8 SirMacAddr[NAN_MAC_ADDR_LEN]; /*--------------------------------------------------------------------------- * WLAN NAN CONSTANTS *--------------------------------------------------------------------------*/ typedef enum { NAN_MSG_ID_ERROR_RSP = 0, NAN_MSG_ID_CONFIGURATION_REQ = 1, NAN_MSG_ID_CONFIGURATION_RSP = 2, NAN_MSG_ID_PUBLISH_SERVICE_REQ = 3, NAN_MSG_ID_PUBLISH_SERVICE_RSP = 4, NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_REQ = 5, NAN_MSG_ID_PUBLISH_SERVICE_CANCEL_RSP = 6, NAN_MSG_ID_PUBLISH_REPLIED_IND = 7, NAN_MSG_ID_PUBLISH_TERMINATED_IND = 8, NAN_MSG_ID_SUBSCRIBE_SERVICE_REQ = 9, NAN_MSG_ID_SUBSCRIBE_SERVICE_RSP = 10, NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_REQ = 11, NAN_MSG_ID_SUBSCRIBE_SERVICE_CANCEL_RSP = 12, NAN_MSG_ID_MATCH_IND = 13, NAN_MSG_ID_MATCH_EXPIRED_IND = 14, NAN_MSG_ID_SUBSCRIBE_TERMINATED_IND = 15, NAN_MSG_ID_DE_EVENT_IND = 16, NAN_MSG_ID_TRANSMIT_FOLLOWUP_REQ = 17, NAN_MSG_ID_TRANSMIT_FOLLOWUP_RSP = 18, NAN_MSG_ID_FOLLOWUP_IND = 19, NAN_MSG_ID_STATS_REQ = 20, NAN_MSG_ID_STATS_RSP = 21, NAN_MSG_ID_ENABLE_REQ = 22, NAN_MSG_ID_ENABLE_RSP = 23, NAN_MSG_ID_DISABLE_REQ = 24, NAN_MSG_ID_DISABLE_RSP = 25, NAN_MSG_ID_DISABLE_IND = 26, NAN_MSG_ID_TCA_REQ = 27, NAN_MSG_ID_TCA_RSP = 28, NAN_MSG_ID_TCA_IND = 29, NAN_MSG_ID_BEACON_SDF_REQ = 30, NAN_MSG_ID_BEACON_SDF_RSP = 31, NAN_MSG_ID_BEACON_SDF_IND = 32, NAN_MSG_ID_CAPABILITIES_REQ = 33, NAN_MSG_ID_CAPABILITIES_RSP = 34 } NanMsgId; /* Various TLV Type ID sent as part of NAN Stats Response or NAN TCA Indication */ typedef enum { NAN_TLV_TYPE_FIRST = 0, /* Service Discovery Frame types */ NAN_TLV_TYPE_SDF_FIRST = NAN_TLV_TYPE_FIRST, NAN_TLV_TYPE_SERVICE_NAME = NAN_TLV_TYPE_SDF_FIRST, NAN_TLV_TYPE_SDF_MATCH_FILTER, NAN_TLV_TYPE_TX_MATCH_FILTER, NAN_TLV_TYPE_RX_MATCH_FILTER, NAN_TLV_TYPE_SERVICE_SPECIFIC_INFO, NAN_TLV_TYPE_EXT_SERVICE_SPECIFIC_INFO =5, NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_TRANSMIT = 6, NAN_TLV_TYPE_VENDOR_SPECIFIC_ATTRIBUTE_RECEIVE = 7, NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_RECEIVE = 8, NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_RECEIVE = 9, NAN_TLV_TYPE_BEACON_SDF_PAYLOAD_RECEIVE = 10, NAN_TLV_TYPE_SDF_LAST = 4095, /* Configuration types */ NAN_TLV_TYPE_CONFIG_FIRST = 4096, NAN_TLV_TYPE_24G_SUPPORT = NAN_TLV_TYPE_CONFIG_FIRST, NAN_TLV_TYPE_24G_BEACON, NAN_TLV_TYPE_24G_SDF, NAN_TLV_TYPE_24G_RSSI_CLOSE, NAN_TLV_TYPE_24G_RSSI_MIDDLE = 4100, NAN_TLV_TYPE_24G_RSSI_CLOSE_PROXIMITY, NAN_TLV_TYPE_5G_SUPPORT, NAN_TLV_TYPE_5G_BEACON, NAN_TLV_TYPE_5G_SDF, NAN_TLV_TYPE_5G_RSSI_CLOSE, NAN_TLV_TYPE_5G_RSSI_MIDDLE, NAN_TLV_TYPE_5G_RSSI_CLOSE_PROXIMITY, NAN_TLV_TYPE_SID_BEACON, NAN_TLV_TYPE_HOP_COUNT_LIMIT, NAN_TLV_TYPE_MASTER_PREFERENCE = 4110, NAN_TLV_TYPE_CLUSTER_ID_LOW, NAN_TLV_TYPE_CLUSTER_ID_HIGH, NAN_TLV_TYPE_RSSI_AVERAGING_WINDOW_SIZE, NAN_TLV_TYPE_CLUSTER_OUI_NETWORK_ID, NAN_TLV_TYPE_SOURCE_MAC_ADDRESS, NAN_TLV_TYPE_CLUSTER_ATTRIBUTE_IN_SDF, NAN_TLV_TYPE_SOCIAL_CHANNEL_SCAN_PARAMS, NAN_TLV_TYPE_DEBUGGING_FLAGS, NAN_TLV_TYPE_POST_NAN_CONNECTIVITY_CAPABILITIES_TRANSMIT, NAN_TLV_TYPE_POST_NAN_DISCOVERY_ATTRIBUTE_TRANSMIT = 4120, NAN_TLV_TYPE_FURTHER_AVAILABILITY_MAP, NAN_TLV_TYPE_HOP_COUNT_FORCE, NAN_TLV_TYPE_RANDOM_FACTOR_FORCE, NAN_TLV_TYPE_RANDOM_UPDATE_TIME = 4124, NAN_TLV_TYPE_EARLY_WAKEUP, NAN_TLV_TYPE_PERIODIC_SCAN_INTERVAL, NAN_TLV_TYPE_DW_INTERVAL = 4128, NAN_TLV_TYPE_DB_INTERVAL, NAN_TLV_TYPE_FURTHER_AVAILABILITY, NAN_TLV_TYPE_24G_CHANNEL, NAN_TLV_TYPE_5G_CHANNEL, NAN_TLV_TYPE_CONFIG_LAST = 8191, /* Attributes types */ NAN_TLV_TYPE_ATTRS_FIRST = 8192, NAN_TLV_TYPE_AVAILABILITY_INTERVALS_MAP = NAN_TLV_TYPE_ATTRS_FIRST, NAN_TLV_TYPE_WLAN_MESH_ID, NAN_TLV_TYPE_MAC_ADDRESS, NAN_TLV_TYPE_RECEIVED_RSSI_VALUE, NAN_TLV_TYPE_CLUSTER_ATTRIBUTE, NAN_TLV_TYPE_WLAN_INFRA_SSID, NAN_TLV_TYPE_ATTRS_LAST = 12287, /* Events Type */ NAN_TLV_TYPE_EVENTS_FIRST = 12288, NAN_TLV_TYPE_EVENT_SELF_STATION_MAC_ADDRESS = NAN_TLV_TYPE_EVENTS_FIRST, NAN_TLV_TYPE_EVENT_STARTED_CLUSTER, NAN_TLV_TYPE_EVENT_JOINED_CLUSTER, NAN_TLV_TYPE_EVENT_CLUSTER_SCAN_RESULTS, NAN_TLV_TYPE_FAW_MEM_AVAIL, NAN_TLV_TYPE_EVENTS_LAST = 16383, /* TCA types */ NAN_TLV_TYPE_TCA_FIRST = 16384, NAN_TLV_TYPE_CLUSTER_SIZE_REQ = NAN_TLV_TYPE_TCA_FIRST, NAN_TLV_TYPE_CLUSTER_SIZE_RSP, NAN_TLV_TYPE_TCA_LAST = 32767, /* Statistics types */ NAN_TLV_TYPE_STATS_FIRST = 32768, NAN_TLV_TYPE_DE_PUBLISH_STATS = NAN_TLV_TYPE_STATS_FIRST, NAN_TLV_TYPE_DE_SUBSCRIBE_STATS, NAN_TLV_TYPE_DE_MAC_STATS, NAN_TLV_TYPE_DE_TIMING_SYNC_STATS, NAN_TLV_TYPE_DE_DW_STATS, NAN_TLV_TYPE_DE_STATS, NAN_TLV_TYPE_STATS_LAST = 36863, NAN_TLV_TYPE_LAST = 65535 } NanTlvType; /* 8-byte control message header used by NAN*/ typedef struct PACKED { u16 msgVersion:4; u16 msgId:12; u16 msgLen; u16 handle; u16 transactionId; } NanMsgHeader, *pNanMsgHeader; /* Enumeration for Version */ typedef enum { NAN_MSG_VERSION1 = 1, }NanMsgVersion; typedef struct PACKED { u16 type; u16 length; u8* value; } NanTlv, *pNanTlv; #define SIZEOF_TLV_HDR (sizeof(NanTlv::type) + sizeof(NanTlv::length)) /* NAN TLV Groups and Types */ typedef enum { NAN_TLV_GROUP_FIRST = 0, NAN_TLV_GROUP_SDF = NAN_TLV_GROUP_FIRST, NAN_TLV_GROUP_CONFIG, NAN_TLV_GROUP_STATS, NAN_TLV_GROUP_ATTRS, NAN_TLV_NUM_GROUPS, NAN_TLV_GROUP_LAST = NAN_TLV_NUM_GROUPS } NanTlvGroup; /* NAN Miscellaneous Constants */ #define NAN_TTL_INFINITE 0 #define NAN_REPLY_COUNT_INFINITE 0 /* NAN Confguration 5G Channel Access Bit */ #define NAN_5G_CHANNEL_ACCESS_UNSUPPORTED 0 #define NAN_5G_CHANNEL_ACCESS_SUPPORTED 1 /* NAN Configuration Service IDs Enclosure Bit */ #define NAN_SIDS_NOT_ENCLOSED_IN_BEACONS 0 #define NAN_SIBS_ENCLOSED_IN_BEACONS 1 /* NAN Configuration Priority */ #define NAN_CFG_PRIORITY_SERVICE_DISCOVERY 0 #define NAN_CFG_PRIORITY_DATA_CONNECTION 1 /* NAN Configuration 5G Channel Usage */ #define NAN_5G_CHANNEL_USAGE_SYNC_AND_DISCOVERY 0 #define NAN_5G_CHANNEL_USAGE_DISCOVERY_ONLY 1 /* NAN Configuration TX_Beacon Content */ #define NAN_TX_BEACON_CONTENT_OLD_AM_INFO 0 #define NAN_TX_BEACON_CONTENT_UPDATED_AM_INFO 1 /* NAN Configuration Miscellaneous Constants */ #define NAN_MAC_INTERFACE_PERIODICITY_MIN 30 #define NAN_MAC_INTERFACE_PERIODICITY_MAX 255 #define NAN_DW_RANDOM_TIME_MIN 120 #define NAN_DW_RANDOM_TIME_MAX 240 #define NAN_INITIAL_SCAN_MIN_IDEAL_PERIOD 200 #define NAN_INITIAL_SCAN_MAX_IDEAL_PERIOD 300 #define NAN_ONGOING_SCAN_MIN_PERIOD 10 #define NAN_ONGOING_SCAN_MAX_PERIOD 30 #define NAN_HOP_COUNT_LIMIT 5 #define NAN_WINDOW_DW 0 #define NAN_WINDOW_FAW 1 /* NAN Error Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; u16 status; u16 value; } NanErrorRspMsg, *pNanErrorRspMsg; //* NAN Publish Service Req */ typedef struct PACKED { u16 ttl; u16 period; u32 reserved:1; u32 publishType:2; u32 txType:1; u32 rssiThresholdFlag:1; u32 ota_flag:1; u32 matchAlg:2; u32 count:8; u32 connmap:8; u32 pubTerminatedIndDisableFlag:1; u32 pubMatchExpiredIndDisableFlag:1; u32 followupRxIndDisableFlag:1; u32 reserved2:5; /* * Excludes TLVs * * Required: Service Name, * Optional: Tx Match Filter, Rx Match Filter, Service Specific Info, */ } NanPublishServiceReqParams, *pNanPublishServiceReqParams; typedef struct PACKED { NanMsgHeader fwHeader; NanPublishServiceReqParams publishServiceReqParams; u8 ptlv[]; } NanPublishServiceReqMsg, *pNanPublishServiceReqMsg; /* NAN Publish Service Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanPublishServiceRspMsg, *pNanPublishServiceRspMsg; /* NAN Publish Service Cancel Req */ typedef struct PACKED { NanMsgHeader fwHeader; } NanPublishServiceCancelReqMsg, *pNanPublishServiceCancelReqMsg; /* NAN Publish Service Cancel Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanPublishServiceCancelRspMsg, *pNanPublishServiceCancelRspMsg; /* NAN Publish Terminated Ind */ typedef struct PACKED { NanMsgHeader fwHeader; /* reason for the termination */ u16 reason; u16 reserved; } NanPublishTerminatedIndMsg, *pNanPublishTerminatedIndMsg; /* NAN Subscribe Service Req */ typedef struct PACKED { u16 ttl; u16 period; u32 subscribeType:1; u32 srfAttr:1; u32 srfInclude:1; u32 srfSend:1; u32 ssiRequired:1; u32 matchAlg:2; u32 xbit:1; u32 count:8; u32 rssiThresholdFlag:1; u32 ota_flag:1; u32 subTerminatedIndDisableFlag:1; u32 subMatchExpiredIndDisableFlag:1; u32 followupRxIndDisableFlag:1; u32 reserved:3; u32 connmap:8; /* * Excludes TLVs * * Required: Service Name * Optional: Rx Match Filter, Tx Match Filter, Service Specific Info, */ } NanSubscribeServiceReqParams, *pNanSubscribeServiceReqParams; typedef struct PACKED { NanMsgHeader fwHeader; NanSubscribeServiceReqParams subscribeServiceReqParams; u8 ptlv[]; } NanSubscribeServiceReqMsg, *pNanSubscribeServiceReqMsg; /* NAN Subscribe Service Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanSubscribeServiceRspMsg, *pNanSubscribeServiceRspMsg; /* NAN Subscribe Service Cancel Req */ typedef struct PACKED { NanMsgHeader fwHeader; } NanSubscribeServiceCancelReqMsg, *pNanSubscribeServiceCancelReqMsg; /* NAN Subscribe Service Cancel Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanSubscribeServiceCancelRspMsg, *pNanSubscribeServiceCancelRspMsg; /* NAN Subscribe Match Ind */ typedef struct PACKED { u32 matchHandle; u32 matchOccuredFlag:1; u32 outOfResourceFlag:1; u32 reserved:30; } NanMatchIndParams; typedef struct PACKED { NanMsgHeader fwHeader; NanMatchIndParams matchIndParams; u8 ptlv[]; } NanMatchIndMsg, *pNanMatchIndMsg; /* NAN Subscribe Unmatch Ind */ typedef struct PACKED { u32 matchHandle; } NanmatchExpiredIndParams; typedef struct PACKED { NanMsgHeader fwHeader; NanmatchExpiredIndParams matchExpiredIndParams; } NanMatchExpiredIndMsg, *pNanMatchExpiredIndMsg; /* NAN Subscribe Terminated Ind */ typedef struct PACKED { NanMsgHeader fwHeader; /* reason for the termination */ u16 reason; u16 reserved; } NanSubscribeTerminatedIndMsg, *pNanSubscribeTerminatedIndMsg; /* Event Ind */ typedef struct PACKED { u32 eventId:8; u32 reserved:24; } NanEventIndParams; typedef struct PACKED { NanMsgHeader fwHeader; u8 ptlv[]; } NanEventIndMsg, *pNanEventIndMsg; /* NAN Transmit Followup Req */ typedef struct PACKED { u32 matchHandle; u32 priority:4; u32 window:1; u32 followupTxRspDisableFlag:1; u32 reserved:26; /* * Excludes TLVs * * Required: Service Specific Info or Extended Service Specific Info */ } NanTransmitFollowupReqParams; typedef struct PACKED { NanMsgHeader fwHeader; NanTransmitFollowupReqParams transmitFollowupReqParams; u8 ptlv[]; } NanTransmitFollowupReqMsg, *pNanTransmitFollowupReqMsg; /* NAN Transmit Followup Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanTransmitFollowupRspMsg, *pNanTransmitFollowupRspMsg; /* NAN Publish Followup Ind */ typedef struct PACKED { u32 matchHandle; u32 window:1; u32 reserved:31; /* * Excludes TLVs * * Required: Service Specific Info or Extended Service Specific Info */ } NanFollowupIndParams; typedef struct PACKED { NanMsgHeader fwHeader; NanFollowupIndParams followupIndParams; u8 ptlv[]; } NanFollowupIndMsg, *pNanFollowupIndMsg; /* NAN Statistics Req */ typedef struct PACKED { u32 statsType:8; u32 clear:1; u32 reserved:23; } NanStatsReqParams, *pNanStatsReqParams; typedef struct PACKED { NanMsgHeader fwHeader; NanStatsReqParams statsReqParams; } NanStatsReqMsg, *pNanStatsReqMsg; /* NAN Statistics Rsp */ typedef struct PACKED { /* status of the request */ u16 status; u16 value; u8 statsType; u8 reserved; } NanStatsRspParams, *pNanStatsRspParams; typedef struct PACKED { NanMsgHeader fwHeader; NanStatsRspParams statsRspParams; u8 ptlv[]; } NanStatsRspMsg, *pNanStatsRspMsg; typedef struct PACKED { u8 count:7; u8 s:1; } NanSidAttr, *pSidAttr; /* NAN Configuration Req */ typedef struct PACKED { NanMsgHeader fwHeader; /* * TLVs: * * Required: None. * Optional: SID, Random Time, Master Preference, WLAN Intra Attr, * P2P Operation Attr, WLAN IBSS Attr, WLAN Mesh Attr */ u8 ptlv[]; } NanConfigurationReqMsg, *pNanConfigurationReqMsg; /* * Because the Configuration Req message has TLVs in it use the macro below * for the size argument to buffer allocation functions (vs. sizeof(msg)). */ #define NAN_MAX_CONFIGURATION_REQ_SIZE \ ( \ sizeof(NanMsgHeader) + \ SIZEOF_TLV_HDR + sizeof(u8) /* SID Beacon */ + \ SIZEOF_TLV_HDR + sizeof(u8) /* Random Time */ + \ SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ ) /* NAN Configuration Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanConfigurationRspMsg, *pNanConfigurationRspMsg; /* * Because the Enable Req message has TLVs in it use the macro below for * the size argument to buffer allocation functions (vs. sizeof(msg)). */ #define NAN_MAX_ENABLE_REQ_SIZE \ ( \ sizeof(NanMsgHeader) + \ SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Low */ + \ SIZEOF_TLV_HDR + sizeof(u16) /* Cluster High */ + \ SIZEOF_TLV_HDR + sizeof(u8) /* Master Pref */ \ ) /* NAN Enable Req */ typedef struct PACKED { NanMsgHeader fwHeader; /* * TLVs: * * Required: Cluster Low, Cluster High, Master Preference, * Optional: 5G Support, SID, 5G Sync Disc, RSSI Close, RSSI Medium, * Hop Count Limit, Random Time, Master Preference, * WLAN Intra Attr, P2P Operation Attr, WLAN IBSS Attr, * WLAN Mesh Attr */ u8 ptlv[]; } NanEnableReqMsg, *pNanEnableReqMsg; /* NAN Enable Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanEnableRspMsg, *pNanEnableRspMsg; /* NAN Disable Req */ typedef struct PACKED { NanMsgHeader fwHeader; } NanDisableReqMsg, *pNanDisableReqMsg; /* NAN Disable Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 reserved; } NanDisableRspMsg, *pNanDisableRspMsg; /* NAN Disable Ind */ typedef struct PACKED { NanMsgHeader fwHeader; /* reason for the termination */ u16 reason; u16 reserved; } NanDisableIndMsg, *pNanDisableIndMsg; typedef struct PACKED { NanMsgHeader fwHeader; u8 ptlv[]; } NanTcaReqMsg, *pNanTcaReqMsg; /* NAN TCA Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 value; } NanTcaRspMsg, *pNanTcaRspMsg; typedef struct PACKED { NanMsgHeader fwHeader; /* * TLVs: * * Optional: Cluster size. */ u8 ptlv[]; } NanTcaIndMsg, *pNanTcaIndMsg; /* * Because the TCA Ind message has TLVs in it use the macro below for the * size argument to buffer allocation functions (vs. sizeof(msg)). */ #define NAN_MAX_TCA_IND_SIZE \ ( \ sizeof(NanMsgHeader) + \ sizeof(NanTcaIndParams) + \ SIZEOF_TLV_HDR + sizeof(u16) /* Cluster Size */ \ ) /* Function Declarations */ u8* addTlv(u16 type, u16 length, const u8* value, u8* pOutTlv); u16 NANTLV_ReadTlv(u8 *pInTlv, pNanTlv pOutTlv); u16 NANTLV_WriteTlv(pNanTlv pInTlv, u8 *pOutTlv); /* NAN Beacon Sdf Payload Req */ typedef struct PACKED { NanMsgHeader fwHeader; /* * TLVs: * * Optional: Vendor specific attribute */ u8 ptlv[]; } NanBeaconSdfPayloadReqMsg, *pNanBeaconSdfPayloadReqMsg; /* NAN Beacon Sdf Payload Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u16 status; u16 reserved; } NanBeaconSdfPayloadRspMsg, *pNanBeaconSdfPayloadRspMsg; /* NAN Beacon Sdf Payload Ind */ typedef struct PACKED { NanMsgHeader fwHeader; /* * TLVs: * * Required: Mac address * Optional: Vendor specific attribute, sdf payload * receive */ u8 ptlv[]; } NanBeaconSdfPayloadIndMsg, *pNanBeaconSdfPayloadIndMsg; typedef struct PACKED { u8 availIntDuration:2; u8 mapId:4; u8 reserved:2; } NanApiEntryCtrl; /* * Valid Operating Classes were derived from IEEE Std. 802.11-2012 Annex E * Table E-4 Global Operating Classe and, filtered by channel, are: 81, 83, * 84, 103, 114, 115, 116, 124, 125. */ typedef struct PACKED { NanApiEntryCtrl entryCtrl; u8 opClass; u8 channel; u8 availIntBitmap[4]; } NanFurtherAvailabilityChan, *pNanFurtherAvailabilityChan; typedef struct PACKED { u8 numChan; u8 pFaChan[]; } NanFurtherAvailabilityMapAttrTlv, *pNanFurtherAvailabilityMapAttrTlv; /* Publish statistics. */ typedef struct PACKED { 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; } FwNanPublishStats, *pFwNanPublishStats; /* Subscribe statistics. */ typedef struct PACKED { 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; } FwNanSubscribeStats, *pFwNanSubscribeStats; /* NAN MAC Statistics. Used for MAC and DW statistics. */ typedef struct PACKED { /* 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; /* Misc stats - ignored for DW. */ u32 twIncreases; u32 twDecreases; u32 twChanges; u32 twHighwater; u32 bloomFilterIndex; } FwNanMacStats, *pFwNanMacStats; /* NAN Sync and DW Statistics*/ typedef struct PACKED { u64 currTsf; u64 myRank; u64 currAmRank; u64 lastAmRank; u32 currAmBTT; u32 lastAmBTT; u8 currAmHopCount; u8 currRole; u16 currClusterId; u32 reserved1; 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; } FwNanSyncStats, *pFwNanSyncStats; /* NAN Misc DE Statistics */ typedef struct PACKED { 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; } FwNanDeStats, *pFwNanDeStats; /* Definition of various NanIndication(events) */ typedef enum { NAN_INDICATION_PUBLISH_TERMINATED =1, NAN_INDICATION_MATCH =2, NAN_INDICATION_MATCH_EXPIRED =3, NAN_INDICATION_SUBSCRIBE_TERMINATED =4, NAN_INDICATION_DE_EVENT =5, NAN_INDICATION_FOLLOWUP =6, NAN_INDICATION_DISABLED =7, NAN_INDICATION_TCA =8, NAN_INDICATION_BEACON_SDF_PAYLOAD =9, NAN_INDICATION_UNKNOWN =0xFFFF } NanIndicationType; typedef struct { /* NAN master rank being advertised by DE */ u64 master_rank; /* NAN master preference being advertised by DE */ u8 master_pref; /* random value being advertised by DE */ u8 random_factor; /* hop_count from anchor master */ u8 hop_count; u32 beacon_transmit_time; } NanStaParameter; /* NAN Capabilities Req */ typedef struct PACKED { NanMsgHeader fwHeader; } NanCapabilitiesReqMsg, *pNanCapabilitiesReqMsg; /* NAN Capabilities Rsp */ typedef struct PACKED { NanMsgHeader fwHeader; /* status of the request */ u32 status; u32 value; 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; } NanCapabilitiesRspMsg, *pNanCapabilitiesRspMsg; /* Function to get the sta_parameter expected by Sigma as per CAPI spec. */ wifi_error nan_get_sta_parameter(wifi_request_id id, wifi_interface_handle iface, NanStaParameter* msg); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* __NAN_I_H__ */