1 /* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef __NAN_H__ 18 #define __NAN_H__ 19 20 #include "wifi_hal.h" 21 22 #ifdef __cplusplus 23 extern "C" 24 { 25 #endif /* __cplusplus */ 26 27 /***************************************************************************** 28 * Neighbour Aware Network Service Structures and Functions 29 *****************************************************************************/ 30 31 /* 32 Definitions 33 All multi-byte fields within all NAN protocol stack messages are assumed to be in Little Endian order. 34 */ 35 36 typedef int NanVersion; 37 typedef u16 transaction_id; 38 39 #define NAN_MAC_ADDR_LEN 6 40 #define NAN_MAJOR_VERSION 2 41 #define NAN_MINOR_VERSION 0 42 #define NAN_MICRO_VERSION 0 43 #define NAN_MAX_SOCIAL_CHANNELS 3 44 45 /* NAN Maximum Lengths */ 46 #define NAN_MAX_SERVICE_NAME_LEN 255 47 #define NAN_MAX_MATCH_FILTER_LEN 255 48 #define NAN_MAX_SERVICE_SPECIFIC_INFO_LEN 1024 49 #define NAN_MAX_VSA_DATA_LEN 1024 50 #define NAN_MAX_MESH_DATA_LEN 32 51 #define NAN_MAX_INFRA_DATA_LEN 32 52 #define NAN_MAX_CLUSTER_ATTRIBUTE_LEN 255 53 #define NAN_MAX_SUBSCRIBE_MAX_ADDRESS 42 54 #define NAN_MAX_FAM_CHANNELS 32 55 #define NAN_MAX_POSTDISCOVERY_LEN 5 56 #define NAN_MAX_FRAME_DATA_LEN 504 57 58 /* 59 Definition of various NanResponseType 60 */ 61 typedef enum { 62 NAN_RESPONSE_ENABLED = 0, 63 NAN_RESPONSE_DISABLED = 1, 64 NAN_RESPONSE_PUBLISH = 2, 65 NAN_RESPONSE_PUBLISH_CANCEL = 3, 66 NAN_RESPONSE_TRANSMIT_FOLLOWUP = 4, 67 NAN_RESPONSE_SUBSCRIBE = 5, 68 NAN_RESPONSE_SUBSCRIBE_CANCEL = 6, 69 NAN_RESPONSE_STATS = 7, 70 NAN_RESPONSE_CONFIG = 8, 71 NAN_RESPONSE_TCA = 9, 72 NAN_RESPONSE_ERROR = 10, 73 NAN_RESPONSE_BEACON_SDF_PAYLOAD = 11, 74 NAN_GET_CAPABILITIES = 12 75 } NanResponseType; 76 77 /* NAN Publish Types */ 78 typedef enum { 79 NAN_PUBLISH_TYPE_UNSOLICITED = 0, 80 NAN_PUBLISH_TYPE_SOLICITED, 81 NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED 82 } NanPublishType; 83 84 /* NAN Transmit Priorities */ 85 typedef enum { 86 NAN_TX_PRIORITY_NORMAL = 0, 87 NAN_TX_PRIORITY_HIGH 88 } NanTxPriority; 89 90 /* NAN Statistics Request ID Codes */ 91 typedef enum { 92 NAN_STATS_ID_DE_PUBLISH = 0, 93 NAN_STATS_ID_DE_SUBSCRIBE, 94 NAN_STATS_ID_DE_MAC, 95 NAN_STATS_ID_DE_TIMING_SYNC, 96 NAN_STATS_ID_DE_DW, 97 NAN_STATS_ID_DE 98 } NanStatsType; 99 100 /* NAN Protocol Event ID Codes */ 101 typedef enum { 102 NAN_EVENT_ID_DISC_MAC_ADDR = 0, 103 NAN_EVENT_ID_STARTED_CLUSTER, 104 NAN_EVENT_ID_JOINED_CLUSTER 105 } NanDiscEngEventType; 106 107 /* TCA Type */ 108 typedef enum { 109 NAN_TCA_ID_CLUSTER_SIZE = 0 110 } NanTcaType; 111 112 /* 113 Various NAN Protocol Response code 114 */ 115 typedef enum { 116 /* NAN Protocol Response Codes */ 117 NAN_STATUS_SUCCESS = 0, 118 NAN_STATUS_TIMEOUT = 1, 119 NAN_STATUS_DE_FAILURE = 2, 120 NAN_STATUS_INVALID_MSG_VERSION = 3, 121 NAN_STATUS_INVALID_MSG_LEN = 4, 122 NAN_STATUS_INVALID_MSG_ID = 5, 123 NAN_STATUS_INVALID_HANDLE = 6, 124 NAN_STATUS_NO_SPACE_AVAILABLE = 7, 125 NAN_STATUS_INVALID_PUBLISH_TYPE = 8, 126 NAN_STATUS_INVALID_TX_TYPE = 9, 127 NAN_STATUS_INVALID_MATCH_ALGORITHM = 10, 128 NAN_STATUS_DISABLE_IN_PROGRESS = 11, 129 NAN_STATUS_INVALID_TLV_LEN = 12, 130 NAN_STATUS_INVALID_TLV_TYPE = 13, 131 NAN_STATUS_MISSING_TLV_TYPE = 14, 132 NAN_STATUS_INVALID_TOTAL_TLVS_LEN = 15, 133 NAN_STATUS_INVALID_MATCH_HANDLE= 16, 134 NAN_STATUS_INVALID_TLV_VALUE = 17, 135 NAN_STATUS_INVALID_TX_PRIORITY = 18, 136 NAN_STATUS_INVALID_CONNECTION_MAP = 19, 137 NAN_STATUS_INVALID_TCA_ID = 20, 138 NAN_STATUS_INVALID_STATS_ID = 21, 139 NAN_STATUS_NAN_NOT_ALLOWED = 22, 140 NAN_STATUS_NO_OTA_ACK = 23, 141 NAN_STATUS_TX_FAIL = 24, 142 /* 25-4095 Reserved */ 143 /* NAN Configuration Response codes */ 144 NAN_STATUS_INVALID_RSSI_CLOSE_VALUE = 4096, 145 NAN_STATUS_INVALID_RSSI_MIDDLE_VALUE = 4097, 146 NAN_STATUS_INVALID_HOP_COUNT_LIMIT = 4098, 147 NAN_STATUS_INVALID_MASTER_PREFERENCE_VALUE = 4099, 148 NAN_STATUS_INVALID_LOW_CLUSTER_ID_VALUE = 4100, 149 NAN_STATUS_INVALID_HIGH_CLUSTER_ID_VALUE = 4101, 150 NAN_STATUS_INVALID_BACKGROUND_SCAN_PERIOD = 4102, 151 NAN_STATUS_INVALID_RSSI_PROXIMITY_VALUE = 4103, 152 NAN_STATUS_INVALID_SCAN_CHANNEL = 4104, 153 NAN_STATUS_INVALID_POST_NAN_CONNECTIVITY_CAPABILITIES_BITMAP = 4105, 154 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_NUMCHAN_VALUE = 4106, 155 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_DURATION_VALUE = 4107, 156 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CLASS_VALUE = 4108, 157 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_CHANNEL_VALUE = 4109, 158 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_AVAILABILITY_INTERVAL_BITMAP_VALUE = 4110, 159 NAN_STATUS_INVALID_FURTHER_AVAILABILITY_MAP_MAP_ID = 4111, 160 NAN_STATUS_INVALID_POST_NAN_DISCOVERY_CONN_TYPE_VALUE = 4112, 161 NAN_STATUS_INVALID_POST_NAN_DISCOVERY_DEVICE_ROLE_VALUE = 4113, 162 NAN_STATUS_INVALID_POST_NAN_DISCOVERY_DURATION_VALUE = 4114, 163 NAN_STATUS_INVALID_POST_NAN_DISCOVERY_BITMAP_VALUE = 4115, 164 NAN_STATUS_MISSING_FUTHER_AVAILABILITY_MAP = 4116, 165 NAN_STATUS_INVALID_BAND_CONFIG_FLAGS = 4117, 166 NAN_STATUS_INVALID_RANDOM_FACTOR_UPDATE_TIME_VALUE = 4118, 167 NAN_STATUS_INVALID_ONGOING_SCAN_PERIOD = 4119, 168 NAN_STATUS_INVALID_DW_INTERVAL_VALUE = 4120, 169 NAN_STATUS_INVALID_DB_INTERVAL_VALUE = 4121, 170 /* 4122-8191 RESERVED */ 171 NAN_TERMINATED_REASON_INVALID = 8192, 172 NAN_TERMINATED_REASON_TIMEOUT = 8193, 173 NAN_TERMINATED_REASON_USER_REQUEST = 8194, 174 NAN_TERMINATED_REASON_FAILURE = 8195, 175 NAN_TERMINATED_REASON_COUNT_REACHED = 8196, 176 NAN_TERMINATED_REASON_DE_SHUTDOWN = 8197, 177 NAN_TERMINATED_REASON_DISABLE_IN_PROGRESS = 8198, 178 NAN_TERMINATED_REASON_POST_DISC_ATTR_EXPIRED = 8199, 179 NAN_TERMINATED_REASON_POST_DISC_LEN_EXCEEDED = 8200, 180 NAN_TERMINATED_REASON_FURTHER_AVAIL_MAP_EMPTY = 8201 181 } NanStatusType; 182 183 /* NAN Transmit Types */ 184 typedef enum { 185 NAN_TX_TYPE_BROADCAST = 0, 186 NAN_TX_TYPE_UNICAST 187 } NanTxType; 188 189 /* NAN Subscribe Type */ 190 typedef enum { 191 NAN_SUBSCRIBE_TYPE_PASSIVE = 0, 192 NAN_SUBSCRIBE_TYPE_ACTIVE 193 } NanSubscribeType; 194 195 /* NAN Service Response Filter Attribute Bit */ 196 typedef enum { 197 NAN_SRF_ATTR_BLOOM_FILTER = 0, 198 NAN_SRF_ATTR_PARTIAL_MAC_ADDR 199 } NanSRFType; 200 201 /* NAN Service Response Filter Include Bit */ 202 typedef enum { 203 NAN_SRF_INCLUDE_DO_NOT_RESPOND = 0, 204 NAN_SRF_INCLUDE_RESPOND 205 } NanSRFIncludeType; 206 207 /* NAN Match indication type */ 208 typedef enum { 209 NAN_MATCH_ALG_MATCH_ONCE = 0, 210 NAN_MATCH_ALG_MATCH_CONTINUOUS, 211 NAN_MATCH_ALG_MATCH_NEVER 212 } NanMatchAlg; 213 214 /* NAN Transmit Window Type */ 215 typedef enum { 216 NAN_TRANSMIT_IN_DW = 0, 217 NAN_TRANSMIT_IN_FAW 218 } NanTransmitWindowType; 219 220 /* NAN SRF State in Subscribe */ 221 typedef enum { 222 NAN_USE_SRF = 0, 223 NAN_DO_NOT_USE_SRF 224 } NanSRFState; 225 226 /* NAN Include SSI in MatchInd */ 227 typedef enum { 228 NAN_SSI_NOT_REQUIRED_IN_MATCH_IND = 0, 229 NAN_SSI_REQUIRED_IN_MATCH_IND 230 } NanSsiInMatchInd; 231 232 /* Nan/NDP Capabilites info */ 233 typedef struct { 234 u32 max_concurrent_nan_clusters; 235 u32 max_publishes; 236 u32 max_subscribes; 237 u32 max_service_name_len; 238 u32 max_match_filter_len; 239 u32 max_total_match_filter_len; 240 u32 max_service_specific_info_len; 241 u32 max_vsa_data_len; 242 u32 max_mesh_data_len; 243 u32 max_ndi_interfaces; 244 u32 max_ndp_sessions; 245 u32 max_app_info_len; 246 } NanCapabilities; 247 248 /* 249 Host can send Vendor specific attributes which the Discovery Engine can 250 enclose in Beacons and/or Service Discovery frames transmitted. 251 Below structure is used to populate that. 252 */ 253 typedef struct { 254 /* 255 0 = transmit only in the next discovery window 256 1 = transmit in next 16 discovery window 257 */ 258 u8 payload_transmit_flag; 259 /* 260 Below flags will determine in which all frames 261 the vendor specific attributes should be included 262 */ 263 u8 tx_in_discovery_beacon; 264 u8 tx_in_sync_beacon; 265 u8 tx_in_service_discovery; 266 /* Organizationally Unique Identifier */ 267 u32 vendor_oui; 268 /* 269 vendor specific attribute to be transmitted 270 vsa_len : Length of the vsa data. 271 */ 272 u32 vsa_len; 273 u8 vsa[NAN_MAX_VSA_DATA_LEN]; 274 } NanTransmitVendorSpecificAttribute; 275 276 277 /* 278 Discovery Engine will forward any Vendor Specific Attributes 279 which it received as part of this structure. 280 */ 281 /* Mask to determine on which frames attribute was received */ 282 #define RX_DISCOVERY_BEACON_MASK 0x01 283 #define RX_SYNC_BEACON_MASK 0x02 284 #define RX_SERVICE_DISCOVERY_MASK 0x04 285 typedef struct { 286 /* 287 Frames on which this vendor specific attribute 288 was received. Mask defined above 289 */ 290 u8 vsa_received_on; 291 /* Organizationally Unique Identifier */ 292 u32 vendor_oui; 293 /* vendor specific attribute */ 294 u32 attr_len; 295 u8 vsa[NAN_MAX_VSA_DATA_LEN]; 296 } NanReceiveVendorSpecificAttribute; 297 298 /* 299 NAN Beacon SDF Payload Received structure 300 Discovery engine sends the details of received Beacon or 301 Service Discovery Frames as part of this structure. 302 */ 303 typedef struct { 304 /* Frame data */ 305 u32 frame_len; 306 u8 frame_data[NAN_MAX_FRAME_DATA_LEN]; 307 } NanBeaconSdfPayloadReceive; 308 309 /* 310 Host can set the Periodic scan parameters for each of the 311 3(6, 44, 149) Social channels. Only these channels are allowed 312 any other channels are rejected 313 */ 314 typedef enum { 315 NAN_CHANNEL_24G_BAND = 0, 316 NAN_CHANNEL_5G_BAND_LOW, 317 NAN_CHANNEL_5G_BAND_HIGH 318 } NanChannelIndex; 319 320 /* 321 Structure to set the Social Channel Scan parameters 322 passed as part of NanEnableRequest/NanConfigRequest 323 */ 324 typedef struct { 325 /* 326 Dwell time of each social channel in milliseconds 327 NanChannelIndex corresponds to the respective channel 328 If time set to 0 then the FW default time will be used. 329 */ 330 u8 dwell_time[NAN_MAX_SOCIAL_CHANNELS]; 331 332 /* 333 Scan period of each social channel in seconds 334 NanChannelIndex corresponds to the respective channel 335 If time set to 0 then the FW default time will be used. 336 */ 337 u16 scan_period[NAN_MAX_SOCIAL_CHANNELS]; 338 } NanSocialChannelScanParams; 339 340 /* 341 Host can send Post Connectivity Capability attributes 342 to be included in Service Discovery frames transmitted 343 as part of this structure. 344 */ 345 typedef struct { 346 /* 347 0 = transmit only in the next discovery window 348 1 = transmit in next 16 discovery window 349 */ 350 u8 payload_transmit_flag; 351 /* 1 - Wifi Direct supported 0 - Not supported */ 352 u8 is_wfd_supported; 353 /* 1 - Wifi Direct Services supported 0 - Not supported */ 354 u8 is_wfds_supported; 355 /* 1 - TDLS supported 0 - Not supported */ 356 u8 is_tdls_supported; 357 /* 1 - IBSS supported 0 - Not supported */ 358 u8 is_ibss_supported; 359 /* 1 - Mesh supported 0 - Not supported */ 360 u8 is_mesh_supported; 361 /* 362 1 - NAN Device currently connect to WLAN Infra AP 363 0 - otherwise 364 */ 365 u8 wlan_infra_field; 366 } NanTransmitPostConnectivityCapability; 367 368 /* 369 Discovery engine providing the post connectivity capability 370 received. 371 */ 372 typedef struct { 373 /* 1 - Wifi Direct supported 0 - Not supported */ 374 u8 is_wfd_supported; 375 /* 1 - Wifi Direct Services supported 0 - Not supported */ 376 u8 is_wfds_supported; 377 /* 1 - TDLS supported 0 - Not supported */ 378 u8 is_tdls_supported; 379 /* 1 - IBSS supported 0 - Not supported */ 380 u8 is_ibss_supported; 381 /* 1 - Mesh supported 0 - Not supported */ 382 u8 is_mesh_supported; 383 /* 384 1 - NAN Device currently connect to WLAN Infra AP 385 0 - otherwise 386 */ 387 u8 wlan_infra_field; 388 } NanReceivePostConnectivityCapability; 389 390 /* 391 Indicates the availability interval duration associated with the 392 Availability Intervals Bitmap field 393 */ 394 typedef enum { 395 NAN_DURATION_16MS = 0, 396 NAN_DURATION_32MS = 1, 397 NAN_DURATION_64MS = 2 398 } NanAvailDuration; 399 400 /* Further availability per channel information */ 401 typedef struct { 402 /* Defined above */ 403 NanAvailDuration entry_control; 404 /* 405 1 byte field indicating the frequency band the NAN Device 406 will be available as defined in IEEE Std. 802.11-2012 407 Annex E Table E-4 Global Operating Classes 408 */ 409 u8 class_val; 410 /* 411 1 byte field indicating the channel the NAN Device 412 will be available. 413 */ 414 u8 channel; 415 /* 416 Map Id - 4 bit field which identifies the Further 417 availability map attribute. 418 */ 419 u8 mapid; 420 /* 421 divides the time between the beginnings of consecutive Discovery 422 Windows of a given NAN cluster into consecutive time intervals 423 of equal durations. The time interval duration is specified by 424 the Availability Interval Duration subfield of the Entry Control 425 field. 426 427 A Nan device that sets the i-th bit of the Availability 428 Intervals Bitmap to 1 shall be present during the corresponding 429 i-th time interval in the operation channel indicated by the 430 Operating Class and Channel Number fields in the same Availability Entry. 431 432 A Nan device that sets the i-th bit of the Availability Intervals Bitmap to 433 0 may be present during the corresponding i-th time interval in the operation 434 channel indicated by the Operating Class and Channel Number fields in the same 435 Availability Entry. 436 437 The size of the Bitmap is dependent upon the Availability Interval Duration 438 chosen in the Entry Control Field. The size can be either 1, 2 or 4 bytes long 439 440 - Duration field is equal to 0, only AIB[0] is valid 441 - Duration field is equal to 1, only AIB [0] and AIB [1] is valid 442 - Duration field is equal to 2, AIB [0], AIB [1], AIB [2] and AIB [3] are valid 443 */ 444 u32 avail_interval_bitmap; 445 } NanFurtherAvailabilityChannel; 446 447 /* 448 Further availability map which can be sent and received from 449 Discovery engine 450 */ 451 typedef struct { 452 /* 453 Number of channels indicates the number of channel 454 entries which is part of fam 455 */ 456 u8 numchans; 457 NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS]; 458 } NanFurtherAvailabilityMap; 459 460 /* 461 Host can send Post-Nan Discovery attributes which the Discovery Engine can 462 enclose in Service Discovery frames 463 */ 464 /* Possible connection types in Post NAN Discovery attributes */ 465 typedef enum { 466 NAN_CONN_WLAN_INFRA = 0, 467 NAN_CONN_P2P_OPER = 1, 468 NAN_CONN_WLAN_IBSS = 2, 469 NAN_CONN_WLAN_MESH = 3, 470 NAN_CONN_FURTHER_SERVICE_AVAILABILITY = 4, 471 NAN_CONN_WLAN_RANGING = 5 472 } NanConnectionType; 473 474 /* Possible device roles in Post NAN Discovery attributes */ 475 typedef enum { 476 NAN_WLAN_INFRA_AP = 0, 477 NAN_WLAN_INFRA_STA = 1, 478 NAN_P2P_OPER_GO = 2, 479 NAN_P2P_OPER_DEV = 3, 480 NAN_P2P_OPER_CLI = 4 481 } NanDeviceRole; 482 483 /* Structure of Post NAN Discovery attribute */ 484 typedef struct { 485 /* Connection type of the host */ 486 NanConnectionType type; 487 /* 488 Device role of the host based on 489 the connection type 490 */ 491 NanDeviceRole role; 492 /* 493 Flag to send the information as a single shot or repeated 494 for next 16 discovery windows 495 0 - Single_shot 496 1 - next 16 discovery windows 497 */ 498 u8 transmit_freq; 499 /* Duration of the availability bitmask */ 500 NanAvailDuration duration; 501 /* Availability interval bitmap based on duration */ 502 u32 avail_interval_bitmap; 503 /* 504 Mac address depending on the conn type and device role 505 -------------------------------------------------- 506 | Conn Type | Device Role | Mac address Usage | 507 -------------------------------------------------- 508 | WLAN_INFRA | AP/STA | BSSID of the AP | 509 -------------------------------------------------- 510 | P2P_OPER | GO | GO's address | 511 -------------------------------------------------- 512 | P2P_OPER | P2P_DEVICE | Address of who | 513 | | | would become GO | 514 -------------------------------------------------- 515 | WLAN_IBSS | NA | BSSID | 516 -------------------------------------------------- 517 | WLAN_MESH | NA | BSSID | 518 -------------------------------------------------- 519 */ 520 u8 addr[NAN_MAC_ADDR_LEN]; 521 /* 522 Mandatory mesh id value if connection type is WLAN_MESH 523 Mesh id contains 0-32 octet identifier and should be 524 as per IEEE Std.802.11-2012 spec. 525 */ 526 u16 mesh_id_len; 527 u8 mesh_id[NAN_MAX_MESH_DATA_LEN]; 528 /* 529 Optional infrastructure SSID if conn_type is set to 530 NAN_CONN_WLAN_INFRA 531 */ 532 u16 infrastructure_ssid_len; 533 u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN]; 534 } NanTransmitPostDiscovery; 535 536 /* 537 Discovery engine providing the structure of Post NAN 538 Discovery 539 */ 540 typedef struct { 541 /* Connection type of the host */ 542 NanConnectionType type; 543 /* 544 Device role of the host based on 545 the connection type 546 */ 547 NanDeviceRole role; 548 /* Duration of the availability bitmask */ 549 NanAvailDuration duration; 550 /* Availability interval bitmap based on duration */ 551 u32 avail_interval_bitmap; 552 /* 553 Map Id - 4 bit field which identifies the Further 554 availability map attribute. 555 */ 556 u8 mapid; 557 /* 558 Mac address depending on the conn type and device role 559 -------------------------------------------------- 560 | Conn Type | Device Role | Mac address Usage | 561 -------------------------------------------------- 562 | WLAN_INFRA | AP/STA | BSSID of the AP | 563 -------------------------------------------------- 564 | P2P_OPER | GO | GO's address | 565 -------------------------------------------------- 566 | P2P_OPER | P2P_DEVICE | Address of who | 567 | | | would become GO | 568 -------------------------------------------------- 569 | WLAN_IBSS | NA | BSSID | 570 -------------------------------------------------- 571 | WLAN_MESH | NA | BSSID | 572 -------------------------------------------------- 573 */ 574 u8 addr[NAN_MAC_ADDR_LEN]; 575 /* 576 Mandatory mesh id value if connection type is WLAN_MESH 577 Mesh id contains 0-32 octet identifier and should be 578 as per IEEE Std.802.11-2012 spec. 579 */ 580 u16 mesh_id_len; 581 u8 mesh_id[NAN_MAX_MESH_DATA_LEN]; 582 /* 583 Optional infrastructure SSID if conn_type is set to 584 NAN_CONN_WLAN_INFRA 585 */ 586 u16 infrastructure_ssid_len; 587 u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN]; 588 } NanReceivePostDiscovery; 589 590 /* 591 Enable Request Message Structure 592 The NanEnableReq message instructs the Discovery Engine to enter an operational state 593 */ 594 typedef struct { 595 /* Mandatory parameters below */ 596 u8 master_pref; 597 /* 598 A cluster_low value matching cluster_high indicates a request to join 599 a cluster with that value. If the requested cluster is not found the 600 device will start its own cluster. 601 */ 602 u16 cluster_low; 603 u16 cluster_high; 604 605 /* 606 Optional configuration of Enable request. 607 Each of the optional parameters have configure flag which 608 determine whether configuration is to be passed or not. 609 */ 610 u8 config_support_5g; 611 u8 support_5g_val; 612 /* 613 BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons 614 0 - Do not include SIDs in any beacons 615 1 - Include SIDs in all beacons. 616 Rest 7 bits are count field which allows control over the number of SIDs 617 included in the Beacon. 0 means to include as many SIDs that fit into 618 the maximum allow Beacon frame size 619 */ 620 u8 config_sid_beacon; 621 u8 sid_beacon_val; 622 /* 623 The rssi values below should be specified without sign. 624 For eg: -70dBm should be specified as 70. 625 */ 626 u8 config_2dot4g_rssi_close; 627 u8 rssi_close_2dot4g_val; 628 629 u8 config_2dot4g_rssi_middle; 630 u8 rssi_middle_2dot4g_val; 631 632 u8 config_2dot4g_rssi_proximity; 633 u8 rssi_proximity_2dot4g_val; 634 635 u8 config_hop_count_limit; 636 u8 hop_count_limit_val; 637 638 /* 639 Defines 2.4G channel access support 640 0 - No Support 641 1 - Supported 642 */ 643 u8 config_2dot4g_support; 644 u8 support_2dot4g_val; 645 /* 646 Defines 2.4G channels will be used for sync/discovery beacons 647 0 - 2.4G channels not used for beacons 648 1 - 2.4G channels used for beacons 649 */ 650 u8 config_2dot4g_beacons; 651 u8 beacon_2dot4g_val; 652 /* 653 Defines 2.4G channels will be used for Service Discovery frames 654 0 - 2.4G channels not used for Service Discovery frames 655 1 - 2.4G channels used for Service Discovery frames 656 */ 657 u8 config_2dot4g_sdf; 658 u8 sdf_2dot4g_val; 659 /* 660 Defines 5G channels will be used for sync/discovery beacons 661 0 - 5G channels not used for beacons 662 1 - 5G channels used for beacons 663 */ 664 u8 config_5g_beacons; 665 u8 beacon_5g_val; 666 /* 667 Defines 5G channels will be used for Service Discovery frames 668 0 - 5G channels not used for Service Discovery frames 669 1 - 5G channels used for Service Discovery frames 670 */ 671 u8 config_5g_sdf; 672 u8 sdf_5g_val; 673 /* 674 1 byte value which defines the RSSI in 675 dBm for a close by Peer in 5 Ghz channels. 676 The rssi values should be specified without sign. 677 For eg: -70dBm should be specified as 70. 678 */ 679 u8 config_5g_rssi_close; 680 u8 rssi_close_5g_val; 681 /* 682 1 byte value which defines the RSSI value in 683 dBm for a close by Peer in 5 Ghz channels. 684 The rssi values should be specified without sign. 685 For eg: -70dBm should be specified as 70. 686 687 */ 688 u8 config_5g_rssi_middle; 689 u8 rssi_middle_5g_val; 690 /* 691 1 byte value which defines the RSSI filter 692 threshold. Any Service Descriptors received above this 693 value that are configured for RSSI filtering will be dropped. 694 The rssi values should be specified without sign. 695 For eg: -70dBm should be specified as 70. 696 */ 697 u8 config_5g_rssi_close_proximity; 698 u8 rssi_close_proximity_5g_val; 699 /* 700 1 byte quantity which defines the window size over 701 which the average RSSI will be calculated over. 702 */ 703 u8 config_rssi_window_size; 704 u8 rssi_window_size_val; 705 /* 706 The 24 bit Organizationally Unique ID + the 8 bit Network Id. 707 */ 708 u8 config_oui; 709 u32 oui_val; 710 /* 711 NAN Interface Address, If not configured the Discovery Engine 712 will generate a 6 byte Random MAC. 713 */ 714 u8 config_intf_addr; 715 u8 intf_addr_val[NAN_MAC_ADDR_LEN]; 716 /* 717 If set to 1, the Discovery Engine will enclose the Cluster 718 Attribute only sent in Beacons in a Vendor Specific Attribute 719 and transmit in a Service Descriptor Frame. 720 */ 721 u8 config_cluster_attribute_val; 722 /* 723 The periodicity in seconds between full scans to find any new 724 clusters available in the area. A Full scan should not be done 725 more than every 10 seconds and should not be done less than every 726 30 seconds. 727 */ 728 u8 config_scan_params; 729 NanSocialChannelScanParams scan_params_val; 730 /* 731 1 byte quantity which forces the Random Factor to a particular 732 value for all transmitted Sync/Discovery beacons 733 */ 734 u8 config_random_factor_force; 735 u8 random_factor_force_val; 736 /* 737 1 byte quantity which forces the HC for all transmitted Sync and 738 Discovery Beacon NO matter the real HC being received over the 739 air. 740 */ 741 u8 config_hop_count_force; 742 u8 hop_count_force_val; 743 744 /* channel frequency in MHz to enable Nan on */ 745 u8 config_24g_channel; 746 wifi_channel channel_24g_val; 747 748 u8 config_5g_channel; 749 wifi_channel channel_5g_val; 750 } NanEnableRequest; 751 752 /* 753 Publish Msg Structure 754 Message is used to request the DE to publish the Service Name 755 using the parameters passed into the Discovery Window 756 */ 757 typedef struct { 758 u16 publish_id;/* id 0 means new publish, any other id is existing publish */ 759 u16 ttl; /* how many seconds to run for. 0 means forever until canceled */ 760 u16 period; /* periodicity of OTA unsolicited publish. Specified in increments of 500 ms */ 761 NanPublishType publish_type;/* 0= unsolicited, solicited = 1, 2= both */ 762 NanTxType tx_type; /* 0 = broadcast, 1= unicast if solicited publish */ 763 u8 publish_count; /* number of OTA Publish, 0 means forever until canceled */ 764 u16 service_name_len; /* length of service name */ 765 u8 service_name[NAN_MAX_SERVICE_NAME_LEN];/* UTF-8 encoded string identifying the service */ 766 /* 767 Field which specifies how the matching indication to host is controlled. 768 0 - Match and Indicate Once 769 1 - Match and Indicate continuous 770 2 - Match and Indicate never. This means don't indicate the match to the host. 771 3 - Reserved 772 */ 773 NanMatchAlg publish_match_indicator; 774 775 /* 776 Sequence of values 777 NAN Device that has invoked a Subscribe method corresponding to this Publish method 778 */ 779 u16 service_specific_info_len; 780 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 781 782 /* 783 Ordered sequence of <length, value> pairs which specify further response conditions 784 beyond the service name used to filter subscribe messages to respond to. 785 This is only needed when the PT is set to NAN_SOLICITED or NAN_SOLICITED_UNSOLICITED. 786 */ 787 u16 rx_match_filter_len; 788 u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 789 790 /* 791 Ordered sequence of <length, value> pairs to be included in the Discovery Frame. 792 If present it is always sent in a Discovery Frame 793 */ 794 u16 tx_match_filter_len; 795 u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 796 797 /* 798 flag which specifies that the Publish should use the configured RSSI 799 threshold and the received RSSI in order to filter requests 800 0 ignore the configured RSSI threshold when running a Service 801 Descriptor attribute or Service ID List Attribute through the DE matching logic. 802 1 use the configured RSSI threshold when running a Service 803 Descriptor attribute or Service ID List Attribute through the DE matching logic. 804 805 */ 806 u8 rssi_threshold_flag; 807 808 /* 809 8-bit bitmap which allows the Host to associate this publish 810 with a particular Post-NAN Connectivity attribute 811 which has been sent down in a NanConfigureRequest/NanEnableRequest 812 message. If the DE fails to find a configured Post-NAN 813 connectivity attributes referenced by the bitmap, 814 the DE will return an error code to the Host. 815 If the Publish is configured to use a Post-NAN Connectivity 816 attribute and the Host does not refresh the Post-NAN Connectivity 817 attribute the Publish will be canceled and the Host will be sent 818 a PublishTerminatedIndication message. 819 */ 820 u8 connmap; 821 /* 822 Set/Enable corresponding bits to disable any indications that follow a publish. 823 BIT0 - Disable publish termination indication. 824 BIT1 - Disable match expired indication. 825 BIT2 - Disable followUp indication received (OTA). 826 */ 827 u8 recv_indication_cfg; 828 } NanPublishRequest; 829 830 /* 831 Publish Cancel Msg Structure 832 The PublishServiceCancelReq Message is used to request the DE to stop publishing 833 the Service Name identified by the Publish Id in the message. 834 */ 835 typedef struct { 836 u16 publish_id; 837 } NanPublishCancelRequest; 838 839 /* 840 NAN Subscribe Structure 841 The SubscribeServiceReq message is sent to the Discovery Engine 842 whenever the Upper layers would like to listen for a Service Name 843 */ 844 typedef struct { 845 u16 subscribe_id; /* id 0 means new subscribe, non zero is existing subscribe */ 846 u16 ttl; /* how many seconds to run for. 0 means forever until canceled */ 847 u16 period;/* periodicity of OTA Active Subscribe. Units in increments of 500 ms , 0 = attempt every DW*/ 848 849 /* Flag which specifies how the Subscribe request shall be processed. */ 850 NanSubscribeType subscribe_type; /* 0 - PASSIVE , 1- ACTIVE */ 851 852 /* Flag which specifies on Active Subscribes how the Service Response Filter attribute is populated.*/ 853 NanSRFType serviceResponseFilter; /* 0 - Bloom Filter, 1 - MAC Addr */ 854 855 /* Flag which specifies how the Service Response Filter Include bit is populated.*/ 856 NanSRFIncludeType serviceResponseInclude; /* 0=Do not respond if in the Address Set, 1= Respond */ 857 858 /* Flag which specifies if the Service Response Filter should be used when creating Subscribes.*/ 859 NanSRFState useServiceResponseFilter; /* 0=Do not send the Service Response Filter,1= send */ 860 861 /* 862 Flag which specifies if the Service Specific Info is needed in 863 the Publish message before creating the MatchIndication 864 */ 865 NanSsiInMatchInd ssiRequiredForMatchIndication; /* 0=Not needed, 1= Required */ 866 867 /* 868 Field which specifies how the matching indication to host is controlled. 869 0 - Match and Indicate Once 870 1 - Match and Indicate continuous 871 2 - Match and Indicate never. This means don't indicate the match to the host. 872 3 - Reserved 873 */ 874 NanMatchAlg subscribe_match_indicator; 875 876 /* 877 The number of Subscribe Matches which should occur 878 before the Subscribe request is automatically terminated. 879 */ 880 u8 subscribe_count; /* If this value is 0 this field is not used by the DE.*/ 881 882 u16 service_name_len;/* length of service name */ 883 u8 service_name[NAN_MAX_SERVICE_NAME_LEN]; /* UTF-8 encoded string identifying the service */ 884 885 /* Sequence of values which further specify the published service beyond the service name*/ 886 u16 service_specific_info_len; 887 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 888 889 /* 890 Ordered sequence of <length, value> pairs used to filter out received publish discovery messages. 891 This can be sent both for a Passive or an Active Subscribe 892 */ 893 u16 rx_match_filter_len; 894 u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 895 896 /* 897 Ordered sequence of <length, value> pairs included in the 898 Discovery Frame when an Active Subscribe is used. 899 */ 900 u16 tx_match_filter_len; 901 u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 902 903 /* 904 Flag which specifies that the Subscribe should use the configured RSSI 905 threshold and the received RSSI in order to filter requests 906 0 ignore the configured RSSI threshold when running a Service 907 Descriptor attribute or Service ID List Attribute through the DE matching logic. 908 1 use the configured RSSI threshold when running a Service 909 Descriptor attribute or Service ID List Attribute through the DE matching logic. 910 911 */ 912 u8 rssi_threshold_flag; 913 914 /* 915 8-bit bitmap which allows the Host to associate this Active 916 Subscribe with a particular Post-NAN Connectivity attribute 917 which has been sent down in a NanConfigureRequest/NanEnableRequest 918 message. If the DE fails to find a configured Post-NAN 919 connectivity attributes referenced by the bitmap, 920 the DE will return an error code to the Host. 921 If the Subscribe is configured to use a Post-NAN Connectivity 922 attribute and the Host does not refresh the Post-NAN Connectivity 923 attribute the Subscribe will be canceled and the Host will be sent 924 a SubscribeTerminatedIndication message. 925 */ 926 u8 connmap; 927 /* 928 NAN Interface Address, conforming to the format as described in 929 8.2.4.3.2 of IEEE Std. 802.11-2012. 930 */ 931 u8 num_intf_addr_present; 932 u8 intf_addr[NAN_MAX_SUBSCRIBE_MAX_ADDRESS][NAN_MAC_ADDR_LEN]; 933 /* 934 Set/Enable corresponding bits to disable indications that follow a subscribe. 935 BIT0 - Disable subscribe termination indication. 936 BIT1 - Disable match expired indication. 937 BIT2 - Disable followUp indication received (OTA). 938 */ 939 u8 recv_indication_cfg; 940 } NanSubscribeRequest; 941 942 /* 943 NAN Subscribe Cancel Structure 944 The SubscribeCancelReq Message is used to request the DE to stop looking for the Service Name. 945 */ 946 typedef struct { 947 u16 subscribe_id; 948 } NanSubscribeCancelRequest; 949 950 /* 951 Transmit follow up Structure 952 The TransmitFollowupReq message is sent to the DE to allow the sending of the Service_Specific_Info 953 to a particular MAC address. 954 */ 955 typedef struct { 956 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 957 u16 publish_subscribe_id; 958 959 /* 960 This Id is the Requestor Instance that is passed as 961 part of earlier MatchInd/FollowupInd message. 962 */ 963 u32 requestor_instance_id; 964 u8 addr[NAN_MAC_ADDR_LEN]; /* Unicast address */ 965 NanTxPriority priority; /* priority of the request 2=high */ 966 NanTransmitWindowType dw_or_faw; /* 0= send in a DW, 1=send in FAW */ 967 968 /* 969 Sequence of values which further specify the published service beyond 970 the service name. 971 */ 972 u16 service_specific_info_len; 973 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 974 /* 975 Set/Enable corresponding bits to disable responses after followUp. 976 BIT0 - Disable followUp response from FW. 977 */ 978 u8 recv_indication_cfg; 979 } NanTransmitFollowupRequest; 980 981 /* 982 Stats Request structure 983 The Discovery Engine can be queried at runtime by the Host processor for statistics 984 concerning various parts of the Discovery Engine. 985 */ 986 typedef struct { 987 NanStatsType stats_type; /* NAN Statistics Request Type */ 988 u8 clear; /* 0= Do not clear the stats and return the current contents , 1= Clear the associated stats */ 989 } NanStatsRequest; 990 991 /* 992 Config Structure 993 The NanConfigurationReq message is sent by the Host to the 994 Discovery Engine in order to configure the Discovery Engine during runtime. 995 */ 996 typedef struct { 997 u8 config_sid_beacon; 998 u8 sid_beacon; 999 u8 config_rssi_proximity; 1000 u8 rssi_proximity; 1001 u8 config_master_pref; 1002 u8 master_pref; 1003 /* 1004 1 byte value which defines the RSSI filter threshold. 1005 Any Service Descriptors received above this value 1006 that are configured for RSSI filtering will be dropped. 1007 The rssi values should be specified without sign. 1008 For eg: -70dBm should be specified as 70. 1009 */ 1010 u8 config_5g_rssi_close_proximity; 1011 u8 rssi_close_proximity_5g_val; 1012 /* 1013 Optional configuration of Configure request. 1014 Each of the optional parameters have configure flag which 1015 determine whether configuration is to be passed or not. 1016 */ 1017 /* 1018 2 byte quantity which defines the window size over 1019 which the average RSSI will be calculated over. 1020 */ 1021 u8 config_rssi_window_size; 1022 u16 rssi_window_size_val; 1023 /* 1024 If set to 1, the Discovery Engine will enclose the Cluster 1025 Attribute only sent in Beacons in a Vendor Specific Attribute 1026 and transmit in a Service Descriptor Frame. 1027 */ 1028 u8 config_cluster_attribute_val; 1029 /* 1030 The periodicity in seconds between full scans to find any new 1031 clusters available in the area. A Full scan should not be done 1032 more than every 10 seconds and should not be done less than every 1033 30 seconds. 1034 */ 1035 u8 config_scan_params; 1036 NanSocialChannelScanParams scan_params_val; 1037 /* 1038 1 byte quantity which forces the Random Factor to a particular 1039 value for all transmitted Sync/Discovery beacons 1040 */ 1041 u8 config_random_factor_force; 1042 u8 random_factor_force_val; 1043 /* 1044 1 byte quantity which forces the HC for all transmitted Sync and 1045 Discovery Beacon NO matter the real HC being received over the 1046 air. 1047 */ 1048 u8 config_hop_count_force; 1049 u8 hop_count_force_val; 1050 /* NAN Post Connectivity Capability */ 1051 u8 config_conn_capability; 1052 NanTransmitPostConnectivityCapability conn_capability_val; 1053 /* NAN Post Discover Capability */ 1054 u8 num_config_discovery_attr; 1055 NanTransmitPostDiscovery discovery_attr_val[NAN_MAX_POSTDISCOVERY_LEN]; 1056 /* NAN Further availability Map */ 1057 u8 config_fam; 1058 NanFurtherAvailabilityMap fam_val; 1059 } NanConfigRequest; 1060 1061 /* 1062 TCA Structure 1063 The Discovery Engine can be configured to send up Events whenever a configured 1064 Threshold Crossing Alert (TCA) Type crosses an integral threshold in a particular direction. 1065 */ 1066 typedef struct { 1067 NanTcaType tca_type; /* Nan Protocol Threshold Crossing Alert (TCA) Codes */ 1068 1069 /* flag which control whether or not an event is generated for the Rising direction */ 1070 u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */ 1071 1072 /* flag which control whether or not an event is generated for the Falling direction */ 1073 u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */ 1074 1075 /* flag which requests a previous TCA request to be cleared from the DE */ 1076 u8 clear;/*0= Do not clear the TCA, 1=Clear the TCA */ 1077 1078 /* 32 bit value which represents the threshold to be used.*/ 1079 u32 threshold; 1080 } NanTCARequest; 1081 1082 /* 1083 Beacon Sdf Payload Structure 1084 The Discovery Engine can be configured to publish vendor specific attributes as part of 1085 beacon or service discovery frame transmitted as part of this request.. 1086 */ 1087 typedef struct { 1088 /* 1089 NanVendorAttribute will have the Vendor Specific Attribute which the 1090 vendor wants to publish as part of Discovery or Sync or Service discovery frame 1091 */ 1092 NanTransmitVendorSpecificAttribute vsa; 1093 } NanBeaconSdfPayloadRequest; 1094 1095 /* Publish statistics. */ 1096 typedef struct 1097 { 1098 u32 validPublishServiceReqMsgs; 1099 u32 validPublishServiceRspMsgs; 1100 u32 validPublishServiceCancelReqMsgs; 1101 u32 validPublishServiceCancelRspMsgs; 1102 u32 validPublishRepliedIndMsgs; 1103 u32 validPublishTerminatedIndMsgs; 1104 u32 validActiveSubscribes; 1105 u32 validMatches; 1106 u32 validFollowups; 1107 u32 invalidPublishServiceReqMsgs; 1108 u32 invalidPublishServiceCancelReqMsgs; 1109 u32 invalidActiveSubscribes; 1110 u32 invalidMatches; 1111 u32 invalidFollowups; 1112 u32 publishCount; 1113 u32 publishNewMatchCount; 1114 u32 pubsubGlobalNewMatchCount; 1115 } NanPublishStats; 1116 1117 /* Subscribe statistics. */ 1118 typedef struct 1119 { 1120 u32 validSubscribeServiceReqMsgs; 1121 u32 validSubscribeServiceRspMsgs; 1122 u32 validSubscribeServiceCancelReqMsgs; 1123 u32 validSubscribeServiceCancelRspMsgs; 1124 u32 validSubscribeTerminatedIndMsgs; 1125 u32 validSubscribeMatchIndMsgs; 1126 u32 validSubscribeUnmatchIndMsgs; 1127 u32 validSolicitedPublishes; 1128 u32 validMatches; 1129 u32 validFollowups; 1130 u32 invalidSubscribeServiceReqMsgs; 1131 u32 invalidSubscribeServiceCancelReqMsgs; 1132 u32 invalidSubscribeFollowupReqMsgs; 1133 u32 invalidSolicitedPublishes; 1134 u32 invalidMatches; 1135 u32 invalidFollowups; 1136 u32 subscribeCount; 1137 u32 bloomFilterIndex; 1138 u32 subscribeNewMatchCount; 1139 u32 pubsubGlobalNewMatchCount; 1140 } NanSubscribeStats; 1141 1142 /* NAN DW Statistics*/ 1143 typedef struct 1144 { 1145 /* RX stats */ 1146 u32 validFrames; 1147 u32 validActionFrames; 1148 u32 validBeaconFrames; 1149 u32 ignoredActionFrames; 1150 u32 ignoredBeaconFrames; 1151 u32 invalidFrames; 1152 u32 invalidActionFrames; 1153 u32 invalidBeaconFrames; 1154 u32 invalidMacHeaders; 1155 u32 invalidPafHeaders; 1156 u32 nonNanBeaconFrames; 1157 1158 u32 earlyActionFrames; 1159 u32 inDwActionFrames; 1160 u32 lateActionFrames; 1161 1162 /* TX stats */ 1163 u32 framesQueued; 1164 u32 totalTRSpUpdates; 1165 u32 completeByTRSp; 1166 u32 completeByTp75DW; 1167 u32 completeByTendDW; 1168 u32 lateActionFramesTx; 1169 } NanDWStats; 1170 1171 /* NAN MAC Statistics. */ 1172 typedef struct 1173 { 1174 /* RX stats */ 1175 u32 validFrames; 1176 u32 validActionFrames; 1177 u32 validBeaconFrames; 1178 u32 ignoredActionFrames; 1179 u32 ignoredBeaconFrames; 1180 u32 invalidFrames; 1181 u32 invalidActionFrames; 1182 u32 invalidBeaconFrames; 1183 u32 invalidMacHeaders; 1184 u32 invalidPafHeaders; 1185 u32 nonNanBeaconFrames; 1186 1187 u32 earlyActionFrames; 1188 u32 inDwActionFrames; 1189 u32 lateActionFrames; 1190 1191 /* TX stats */ 1192 u32 framesQueued; 1193 u32 totalTRSpUpdates; 1194 u32 completeByTRSp; 1195 u32 completeByTp75DW; 1196 u32 completeByTendDW; 1197 u32 lateActionFramesTx; 1198 1199 u32 twIncreases; 1200 u32 twDecreases; 1201 u32 twChanges; 1202 u32 twHighwater; 1203 u32 bloomFilterIndex; 1204 } NanMacStats; 1205 1206 /* NAN Sync Statistics*/ 1207 typedef struct 1208 { 1209 u64 currTsf; 1210 u64 myRank; 1211 u64 currAmRank; 1212 u64 lastAmRank; 1213 u32 currAmBTT; 1214 u32 lastAmBTT; 1215 u8 currAmHopCount; 1216 u8 currRole; 1217 u16 currClusterId; 1218 1219 u64 timeSpentInCurrRole; 1220 u64 totalTimeSpentAsMaster; 1221 u64 totalTimeSpentAsNonMasterSync; 1222 u64 totalTimeSpentAsNonMasterNonSync; 1223 u32 transitionsToAnchorMaster; 1224 u32 transitionsToMaster; 1225 u32 transitionsToNonMasterSync; 1226 u32 transitionsToNonMasterNonSync; 1227 u32 amrUpdateCount; 1228 u32 amrUpdateRankChangedCount; 1229 u32 amrUpdateBTTChangedCount; 1230 u32 amrUpdateHcChangedCount; 1231 u32 amrUpdateNewDeviceCount; 1232 u32 amrExpireCount; 1233 u32 mergeCount; 1234 u32 beaconsAboveHcLimit; 1235 u32 beaconsBelowRssiThresh; 1236 u32 beaconsIgnoredNoSpace; 1237 u32 beaconsForOurCluster; 1238 u32 beaconsForOtherCluster; 1239 u32 beaconCancelRequests; 1240 u32 beaconCancelFailures; 1241 u32 beaconUpdateRequests; 1242 u32 beaconUpdateFailures; 1243 u32 syncBeaconTxAttempts; 1244 u32 syncBeaconTxFailures; 1245 u32 discBeaconTxAttempts; 1246 u32 discBeaconTxFailures; 1247 u32 amHopCountExpireCount; 1248 } NanSyncStats; 1249 1250 /* NAN Misc DE Statistics */ 1251 typedef struct 1252 { 1253 u32 validErrorRspMsgs; 1254 u32 validTransmitFollowupReqMsgs; 1255 u32 validTransmitFollowupRspMsgs; 1256 u32 validFollowupIndMsgs; 1257 u32 validConfigurationReqMsgs; 1258 u32 validConfigurationRspMsgs; 1259 u32 validStatsReqMsgs; 1260 u32 validStatsRspMsgs; 1261 u32 validEnableReqMsgs; 1262 u32 validEnableRspMsgs; 1263 u32 validDisableReqMsgs; 1264 u32 validDisableRspMsgs; 1265 u32 validDisableIndMsgs; 1266 u32 validEventIndMsgs; 1267 u32 validTcaReqMsgs; 1268 u32 validTcaRspMsgs; 1269 u32 validTcaIndMsgs; 1270 u32 invalidTransmitFollowupReqMsgs; 1271 u32 invalidConfigurationReqMsgs; 1272 u32 invalidStatsReqMsgs; 1273 u32 invalidEnableReqMsgs; 1274 u32 invalidDisableReqMsgs; 1275 u32 invalidTcaReqMsgs; 1276 } NanDeStats; 1277 1278 /* Publish Response Message structure */ 1279 typedef struct { 1280 u16 publish_id; 1281 } NanPublishResponse; 1282 1283 /* Subscribe Response Message structure */ 1284 typedef struct { 1285 u16 subscribe_id; 1286 } NanSubscribeResponse; 1287 1288 /* 1289 Stats Response Message structure 1290 The Discovery Engine response to a request by the Host for statistics. 1291 */ 1292 typedef struct { 1293 NanStatsType stats_type; 1294 union { 1295 NanPublishStats publish_stats; 1296 NanSubscribeStats subscribe_stats; 1297 NanMacStats mac_stats; 1298 NanSyncStats sync_stats; 1299 NanDeStats de_stats; 1300 NanDWStats dw_stats; 1301 } data; 1302 } NanStatsResponse; 1303 1304 /* 1305 NAN Response messages 1306 */ 1307 typedef struct { 1308 NanStatusType status; /* contains the result code */ 1309 u32 value; /* For error returns the value is returned which was in error */ 1310 NanResponseType response_type; /* NanResponseType Definitions */ 1311 union { 1312 NanPublishResponse publish_response; 1313 NanSubscribeResponse subscribe_response; 1314 NanStatsResponse stats_response; 1315 NanCapabilities nan_capabilities; 1316 } body; 1317 } NanResponseMsg; 1318 1319 /* 1320 Publish Terminated 1321 The PublishTerminatedInd message is sent by the DE whenever a Publish 1322 terminates from a user-specified timeout or a unrecoverable error in the DE. 1323 */ 1324 typedef struct { 1325 /* Id returned during the initial Publish */ 1326 u16 publish_id; 1327 NanStatusType reason; 1328 } NanPublishTerminatedInd; 1329 1330 /* 1331 Match Indication 1332 The MatchInd message is sent once per responding MAC address whenever 1333 the Discovery Engine detects a match for a previous SubscribeServiceReq 1334 or PublishServiceReq. 1335 */ 1336 typedef struct { 1337 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1338 u16 publish_subscribe_id; 1339 /* 1340 A 32 bit Requestor Instance Id which is sent to the Application. 1341 This Id will be sent in any subsequent UnmatchInd/FollowupInd 1342 messages 1343 */ 1344 u32 requestor_instance_id; 1345 u8 addr[NAN_MAC_ADDR_LEN]; 1346 1347 /* 1348 Sequence of octets which were received in a Discovery Frame matching the 1349 Subscribe Request. 1350 */ 1351 u16 service_specific_info_len; 1352 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1353 1354 /* 1355 Ordered sequence of <length, value> pairs received in the Discovery Frame 1356 matching the Subscribe Request. 1357 */ 1358 u16 sdf_match_filter_len; 1359 u8 sdf_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1360 1361 /* 1362 flag to indicate if the Match occurred in a Beacon Frame or in a 1363 Service Discovery Frame. 1364 0 - Match occured in a Service Discovery Frame 1365 1 - Match occured in a Beacon Frame 1366 */ 1367 u8 match_occured_flag; 1368 1369 /* 1370 flag to indicate FW is out of resource and that it can no longer 1371 track this Service Name. The Host still need to send the received 1372 Match_Handle but duplicate MatchInd messages may be received on 1373 this Handle until the resource frees up. 1374 0 - FW is caching this match 1375 1 - FW is unable to cache this match 1376 */ 1377 u8 out_of_resource_flag; 1378 1379 /* 1380 If RSSI filtering was configured in NanSubscribeRequest then this 1381 field will contain the received RSSI value. 0 if not. 1382 All rssi values should be specified without sign. 1383 For eg: -70dBm should be specified as 70. 1384 */ 1385 u8 rssi_value; 1386 1387 /* 1388 optional attributes. Each optional attribute is associated with a flag 1389 which specifies whether the attribute is valid or not 1390 */ 1391 /* NAN Post Connectivity Capability received */ 1392 u8 is_conn_capability_valid; 1393 NanReceivePostConnectivityCapability conn_capability; 1394 1395 /* NAN Post Discover Capability */ 1396 u8 num_rx_discovery_attr; 1397 NanReceivePostDiscovery discovery_attr[NAN_MAX_POSTDISCOVERY_LEN]; 1398 1399 /* NAN Further availability Map */ 1400 u8 num_chans; 1401 NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS]; 1402 1403 /* NAN Cluster Attribute */ 1404 u8 cluster_attribute_len; 1405 u8 cluster_attribute[NAN_MAX_CLUSTER_ATTRIBUTE_LEN]; 1406 } NanMatchInd; 1407 1408 /* 1409 MatchExpired Indication 1410 The MatchExpiredInd message is sent whenever the Discovery Engine detects that 1411 a previously Matched Service has been gone for too long. If the previous 1412 MatchInd message for this Publish/Subscribe Id had the out_of_resource_flag 1413 set then this message will not be received 1414 */ 1415 typedef struct { 1416 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1417 u16 publish_subscribe_id; 1418 /* 1419 32 bit value sent by the DE in a previous 1420 MatchInd/FollowupInd to the application. 1421 */ 1422 u32 requestor_instance_id; 1423 } NanMatchExpiredInd; 1424 1425 /* 1426 Subscribe Terminated 1427 The SubscribeTerminatedInd message is sent by the DE whenever a 1428 Subscribe terminates from a user-specified timeout or a unrecoverable error in the DE. 1429 */ 1430 typedef struct { 1431 /* Id returned during initial Subscribe */ 1432 u16 subscribe_id; 1433 NanStatusType reason; 1434 } NanSubscribeTerminatedInd; 1435 1436 /* 1437 Followup Indication Message 1438 The FollowupInd message is sent by the DE to the Host whenever it receives a 1439 Followup message from another peer. 1440 */ 1441 typedef struct { 1442 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1443 u16 publish_subscribe_id; 1444 /* 1445 A 32 bit Requestor instance Id which is sent to the Application. 1446 This Id will be used in subsequent UnmatchInd/FollowupInd messages. 1447 */ 1448 u32 requestor_instance_id; 1449 u8 addr[NAN_MAC_ADDR_LEN]; 1450 1451 /* Flag which the DE uses to decide if received in a DW or a FAW*/ 1452 u8 dw_or_faw; /* 0=Received in a DW, 1 = Received in a FAW*/ 1453 1454 /* 1455 Sequence of values which further specify the published service beyond 1456 the service name 1457 */ 1458 u16 service_specific_info_len; 1459 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1460 } NanFollowupInd; 1461 1462 /* 1463 Event data notifying the Mac address of the Discovery engine. 1464 which is reported as one of the Discovery engine event 1465 */ 1466 typedef struct { 1467 u8 addr[NAN_MAC_ADDR_LEN]; 1468 } NanMacAddressEvent; 1469 1470 /* 1471 Event data notifying the Cluster address of the cluster 1472 which is reported as one of the Discovery engine event 1473 */ 1474 typedef struct { 1475 u8 addr[NAN_MAC_ADDR_LEN]; 1476 } NanClusterEvent; 1477 1478 /* 1479 Discovery Engine Event Indication 1480 The Discovery Engine can inform the Host when significant events occur 1481 The data following the EventId is dependent upon the EventId type. 1482 In other words, each new event defined will carry a different 1483 structure of information back to the host. 1484 */ 1485 typedef struct { 1486 NanDiscEngEventType event_type; /* NAN Protocol Event Codes */ 1487 union { 1488 /* 1489 MacAddressEvent which will have 6 byte mac address 1490 of the Discovery engine. 1491 */ 1492 NanMacAddressEvent mac_addr; 1493 /* 1494 Cluster Event Data which will be obtained when the 1495 device starts a new cluster or joins a cluster. 1496 The event data will have 6 byte octet string of the 1497 cluster started or joined. 1498 */ 1499 NanClusterEvent cluster; 1500 } data; 1501 } NanDiscEngEventInd; 1502 1503 /* Cluster size TCA event*/ 1504 typedef struct { 1505 /* size of the cluster*/ 1506 u32 cluster_size; 1507 } NanTcaClusterEvent; 1508 1509 /* 1510 NAN TCA Indication 1511 The Discovery Engine can inform the Host when significant events occur. 1512 The data following the TcaId is dependent upon the TcaId type. 1513 In other words, each new event defined will carry a different structure 1514 of information back to the host. 1515 */ 1516 typedef struct { 1517 NanTcaType tca_type; 1518 /* flag which defines if the configured Threshold has risen above the threshold */ 1519 u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */ 1520 1521 /* flag which defines if the configured Threshold has fallen below the threshold */ 1522 u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */ 1523 union { 1524 /* 1525 This event in obtained when the cluser size threshold 1526 is crossed. Event will have the cluster size 1527 */ 1528 NanTcaClusterEvent cluster; 1529 } data; 1530 } NanTCAInd; 1531 1532 /* 1533 NAN Disabled Indication 1534 The NanDisableInd message indicates to the upper layers that the Discovery 1535 Engine has flushed all state and has been shutdown. When this message is received 1536 the DE is guaranteed to have left the NAN cluster it was part of and will have terminated 1537 any in progress Publishes or Subscribes. 1538 */ 1539 typedef struct { 1540 NanStatusType reason; 1541 } NanDisabledInd; 1542 1543 /* 1544 NAN Beacon or SDF Payload Indication 1545 The NanBeaconSdfPayloadInd message indicates to the upper layers that information 1546 elements were received either in a Beacon or SDF which needs to be delivered 1547 outside of a Publish/Subscribe Handle. 1548 */ 1549 typedef struct { 1550 /* The MAC address of the peer which sent the attributes.*/ 1551 u8 addr[NAN_MAC_ADDR_LEN]; 1552 /* 1553 Optional attributes. Each optional attribute is associated with a flag 1554 which specifies whether the attribute is valid or not 1555 */ 1556 /* NAN Receive Vendor Specific Attribute*/ 1557 u8 is_vsa_received; 1558 NanReceiveVendorSpecificAttribute vsa; 1559 1560 /* NAN Beacon or SDF Payload Received*/ 1561 u8 is_beacon_sdf_payload_received; 1562 NanBeaconSdfPayloadReceive data; 1563 } NanBeaconSdfPayloadInd; 1564 1565 /* Response and Event Callbacks */ 1566 typedef struct { 1567 /* NotifyResponse invoked to notify the status of the Request */ 1568 void (*NotifyResponse)(transaction_id id, NanResponseMsg* rsp_data); 1569 /* Callbacks for various Events */ 1570 void (*EventPublishTerminated)(NanPublishTerminatedInd* event); 1571 void (*EventMatch) (NanMatchInd* event); 1572 void (*EventMatchExpired) (NanMatchExpiredInd* event); 1573 void (*EventSubscribeTerminated) (NanSubscribeTerminatedInd* event); 1574 void (*EventFollowup) (NanFollowupInd* event); 1575 void (*EventDiscEngEvent) (NanDiscEngEventInd* event); 1576 void (*EventDisabled) (NanDisabledInd* event); 1577 void (*EventTca) (NanTCAInd* event); 1578 void (*EventBeaconSdfPayload) (NanBeaconSdfPayloadInd* event); 1579 } NanCallbackHandler; 1580 1581 /* Enable NAN functionality. */ 1582 wifi_error nan_enable_request(transaction_id id, 1583 wifi_interface_handle iface, 1584 NanEnableRequest* msg); 1585 1586 /* Disable NAN functionality. */ 1587 wifi_error nan_disable_request(transaction_id id, 1588 wifi_interface_handle iface); 1589 1590 /* Publish request to advertize a service. */ 1591 wifi_error nan_publish_request(transaction_id id, 1592 wifi_interface_handle iface, 1593 NanPublishRequest* msg); 1594 1595 /* Cancel previous publish requests. */ 1596 wifi_error nan_publish_cancel_request(transaction_id id, 1597 wifi_interface_handle iface, 1598 NanPublishCancelRequest* msg); 1599 1600 /* Subscribe request to search for a service. */ 1601 wifi_error nan_subscribe_request(transaction_id id, 1602 wifi_interface_handle iface, 1603 NanSubscribeRequest* msg); 1604 1605 /* Cancel previous subscribe requests. */ 1606 wifi_error nan_subscribe_cancel_request(transaction_id id, 1607 wifi_interface_handle iface, 1608 NanSubscribeCancelRequest* msg); 1609 1610 /* NAN transmit follow up request. */ 1611 wifi_error nan_transmit_followup_request(transaction_id id, 1612 wifi_interface_handle iface, 1613 NanTransmitFollowupRequest* msg); 1614 1615 /* Request NAN statistics from Discovery Engine. */ 1616 wifi_error nan_stats_request(transaction_id id, 1617 wifi_interface_handle iface, 1618 NanStatsRequest* msg); 1619 1620 /* NAN configuration request. */ 1621 wifi_error nan_config_request(transaction_id id, 1622 wifi_interface_handle iface, 1623 NanConfigRequest* msg); 1624 1625 /* Configure the various Threshold crossing alerts. */ 1626 wifi_error nan_tca_request(transaction_id id, 1627 wifi_interface_handle iface, 1628 NanTCARequest* msg); 1629 1630 /* 1631 Set NAN Beacon or sdf payload to discovery engine. 1632 This instructs the Discovery Engine to begin publishing the 1633 received payload in any Beacon or Service Discovery Frame 1634 transmitted 1635 */ 1636 wifi_error nan_beacon_sdf_payload_request(transaction_id id, 1637 wifi_interface_handle iface, 1638 NanBeaconSdfPayloadRequest* msg); 1639 1640 /* Register NAN callbacks. */ 1641 wifi_error nan_register_handler(wifi_interface_handle iface, 1642 NanCallbackHandler handlers); 1643 1644 /* Get NAN HAL version. */ 1645 wifi_error nan_get_version(wifi_handle handle, 1646 NanVersion* version); 1647 1648 /* Get NAN capabilities. */ 1649 wifi_error nan_get_capabilities(transaction_id id, 1650 wifi_interface_handle iface); 1651 #ifdef __cplusplus 1652 } 1653 #endif /* __cplusplus */ 1654 1655 #endif /* __NAN_H__ */ 1656