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 <net/if.h> 21 #include <stdbool.h> 22 #include "wifi_hal.h" 23 24 #ifdef __cplusplus 25 extern "C" 26 { 27 #endif /* __cplusplus */ 28 29 /***************************************************************************** 30 * Neighbour Aware Network Service Structures and Functions 31 *****************************************************************************/ 32 33 /* 34 Definitions 35 All multi-byte fields within all NAN protocol stack messages are assumed to be in Little Endian order. 36 */ 37 38 typedef int NanVersion; 39 typedef u16 transaction_id; 40 typedef u32 NanDataPathId; 41 42 #define NAN_MAC_ADDR_LEN 6 43 #define NAN_MAJOR_VERSION 2 44 #define NAN_MINOR_VERSION 0 45 #define NAN_MICRO_VERSION 0 46 #define NAN_MAX_SOCIAL_CHANNELS 3 47 48 /* NAN Maximum Lengths */ 49 #define NAN_MAX_SERVICE_NAME_LEN 255 50 #define NAN_MAX_MATCH_FILTER_LEN 255 51 #define NAN_MAX_SERVICE_SPECIFIC_INFO_LEN 1024 52 #define NAN_MAX_VSA_DATA_LEN 1024 53 #define NAN_MAX_MESH_DATA_LEN 32 54 #define NAN_MAX_INFRA_DATA_LEN 32 55 #define NAN_MAX_CLUSTER_ATTRIBUTE_LEN 255 56 #define NAN_MAX_SUBSCRIBE_MAX_ADDRESS 42 57 #define NAN_MAX_FAM_CHANNELS 32 58 #define NAN_MAX_POSTDISCOVERY_LEN 5 59 #define NAN_MAX_FRAME_DATA_LEN 504 60 #define NAN_DP_MAX_APP_INFO_LEN 512 61 #define NAN_ERROR_STR_LEN 255 62 #define NAN_PMK_INFO_LEN 32 63 #define NAN_MAX_SCID_BUF_LEN 1024 64 #define NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN 1024 65 #define NAN_SECURITY_MIN_PASSPHRASE_LEN 8 66 #define NAN_SECURITY_MAX_PASSPHRASE_LEN 63 67 #define NAN_MAX_CHANNEL_INFO_SUPPORTED 4 68 69 /* 70 Definition of various NanResponseType 71 */ 72 typedef enum { 73 NAN_RESPONSE_ENABLED = 0, 74 NAN_RESPONSE_DISABLED = 1, 75 NAN_RESPONSE_PUBLISH = 2, 76 NAN_RESPONSE_PUBLISH_CANCEL = 3, 77 NAN_RESPONSE_TRANSMIT_FOLLOWUP = 4, 78 NAN_RESPONSE_SUBSCRIBE = 5, 79 NAN_RESPONSE_SUBSCRIBE_CANCEL = 6, 80 NAN_RESPONSE_STATS = 7, 81 NAN_RESPONSE_CONFIG = 8, 82 NAN_RESPONSE_TCA = 9, 83 NAN_RESPONSE_ERROR = 10, 84 NAN_RESPONSE_BEACON_SDF_PAYLOAD = 11, 85 NAN_GET_CAPABILITIES = 12, 86 NAN_DP_INTERFACE_CREATE = 13, 87 NAN_DP_INTERFACE_DELETE = 14, 88 NAN_DP_INITIATOR_RESPONSE = 15, 89 NAN_DP_RESPONDER_RESPONSE = 16, 90 NAN_DP_END = 17 91 } NanResponseType; 92 93 /* NAN Publish Types */ 94 typedef enum { 95 NAN_PUBLISH_TYPE_UNSOLICITED = 0, 96 NAN_PUBLISH_TYPE_SOLICITED, 97 NAN_PUBLISH_TYPE_UNSOLICITED_SOLICITED 98 } NanPublishType; 99 100 /* NAN Transmit Priorities */ 101 typedef enum { 102 NAN_TX_PRIORITY_NORMAL = 0, 103 NAN_TX_PRIORITY_HIGH 104 } NanTxPriority; 105 106 /* NAN Statistics Request ID Codes */ 107 typedef enum { 108 NAN_STATS_ID_DE_PUBLISH = 0, 109 NAN_STATS_ID_DE_SUBSCRIBE, 110 NAN_STATS_ID_DE_MAC, 111 NAN_STATS_ID_DE_TIMING_SYNC, 112 NAN_STATS_ID_DE_DW, 113 NAN_STATS_ID_DE 114 } NanStatsType; 115 116 /* NAN Protocol Event ID Codes */ 117 typedef enum { 118 NAN_EVENT_ID_DISC_MAC_ADDR = 0, 119 NAN_EVENT_ID_STARTED_CLUSTER, 120 NAN_EVENT_ID_JOINED_CLUSTER 121 } NanDiscEngEventType; 122 123 /* NAN Data Path type */ 124 typedef enum { 125 NAN_DATA_PATH_UNICAST_MSG = 0, 126 NAN_DATA_PATH_MULTICAST_MSG 127 } NdpType; 128 129 /* NAN Ranging Configuration */ 130 typedef enum { 131 NAN_RANGING_DISABLE = 0, 132 NAN_RANGING_ENABLE 133 } NanRangingState; 134 135 /* TCA Type */ 136 typedef enum { 137 NAN_TCA_ID_CLUSTER_SIZE = 0 138 } NanTcaType; 139 140 /* NAN Channel Info */ 141 typedef struct { 142 u32 channel; 143 u32 bandwidth; 144 u32 nss; 145 } NanChannelInfo; 146 147 /* 148 Various NAN Protocol Response code 149 */ 150 typedef enum { 151 /* NAN Protocol Response Codes */ 152 NAN_STATUS_SUCCESS = 0, 153 /* NAN Discovery Engine/Host driver failures */ 154 NAN_STATUS_INTERNAL_FAILURE = 1, 155 /* NAN OTA failures */ 156 NAN_STATUS_PROTOCOL_FAILURE = 2, 157 /* if the publish/subscribe id is invalid */ 158 NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID = 3, 159 /* If we run out of resources allocated */ 160 NAN_STATUS_NO_RESOURCE_AVAILABLE = 4, 161 /* if invalid params are passed */ 162 NAN_STATUS_INVALID_PARAM = 5, 163 /* if the requestor instance id is invalid */ 164 NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID = 6, 165 /* if the ndp id is invalid */ 166 NAN_STATUS_INVALID_NDP_ID = 7, 167 /* if NAN is enabled when wifi is turned off */ 168 NAN_STATUS_NAN_NOT_ALLOWED = 8, 169 /* if over the air ack is not received */ 170 NAN_STATUS_NO_OTA_ACK = 9, 171 /* If NAN is already enabled and we are try to re-enable the same */ 172 NAN_STATUS_ALREADY_ENABLED = 10, 173 /* If followup message internal queue is full */ 174 NAN_STATUS_FOLLOWUP_QUEUE_FULL = 11, 175 /* Unsupported concurrency session enabled, NAN disabled notified */ 176 NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED = 12 177 } NanStatusType; 178 179 /* NAN Transmit Types */ 180 typedef enum { 181 NAN_TX_TYPE_BROADCAST = 0, 182 NAN_TX_TYPE_UNICAST 183 } NanTxType; 184 185 /* NAN Subscribe Type */ 186 typedef enum { 187 NAN_SUBSCRIBE_TYPE_PASSIVE = 0, 188 NAN_SUBSCRIBE_TYPE_ACTIVE 189 } NanSubscribeType; 190 191 /* NAN Service Response Filter Attribute Bit */ 192 typedef enum { 193 NAN_SRF_ATTR_BLOOM_FILTER = 0, 194 NAN_SRF_ATTR_PARTIAL_MAC_ADDR 195 } NanSRFType; 196 197 /* NAN Service Response Filter Include Bit */ 198 typedef enum { 199 NAN_SRF_INCLUDE_DO_NOT_RESPOND = 0, 200 NAN_SRF_INCLUDE_RESPOND 201 } NanSRFIncludeType; 202 203 /* NAN Match indication type */ 204 typedef enum { 205 NAN_MATCH_ALG_MATCH_ONCE = 0, 206 NAN_MATCH_ALG_MATCH_CONTINUOUS, 207 NAN_MATCH_ALG_MATCH_NEVER 208 } NanMatchAlg; 209 210 /* NAN Transmit Window Type */ 211 typedef enum { 212 NAN_TRANSMIT_IN_DW = 0, 213 NAN_TRANSMIT_IN_FAW 214 } NanTransmitWindowType; 215 216 /* NAN SRF State in Subscribe */ 217 typedef enum { 218 NAN_DO_NOT_USE_SRF = 0, 219 NAN_USE_SRF 220 } NanSRFState; 221 222 /* NAN Include SSI in MatchInd */ 223 typedef enum { 224 NAN_SSI_NOT_REQUIRED_IN_MATCH_IND = 0, 225 NAN_SSI_REQUIRED_IN_MATCH_IND 226 } NanSsiInMatchInd; 227 228 /* NAN DP security Configuration */ 229 typedef enum { 230 NAN_DP_CONFIG_NO_SECURITY = 0, 231 NAN_DP_CONFIG_SECURITY 232 } NanDataPathSecurityCfgStatus; 233 234 typedef enum { 235 NAN_QOS_NOT_REQUIRED = 0, 236 NAN_QOS_REQUIRED 237 } NanQosCfgStatus; 238 239 240 /* Data request Responder's response */ 241 typedef enum { 242 NAN_DP_REQUEST_ACCEPT = 0, 243 NAN_DP_REQUEST_REJECT 244 } NanDataPathResponseCode; 245 246 /* NAN DP channel config options */ 247 typedef enum { 248 NAN_DP_CHANNEL_NOT_REQUESTED = 0, 249 NAN_DP_REQUEST_CHANNEL_SETUP, 250 NAN_DP_FORCE_CHANNEL_SETUP 251 } NanDataPathChannelCfg; 252 253 /* Enable/Disable NAN Ranging Auto response */ 254 typedef enum { 255 NAN_RANGING_AUTO_RESPONSE_ENABLE = 1, 256 NAN_RANGING_AUTO_RESPONSE_DISABLE 257 } NanRangingAutoResponse; 258 259 /* Enable/Disable NAN service range report */ 260 typedef enum { 261 NAN_DISABLE_RANGE_REPORT = 1, 262 NAN_ENABLE_RANGE_REPORT 263 } NanRangeReport; 264 265 /* NAN Range Response */ 266 typedef enum { 267 NAN_RANGE_REQUEST_ACCEPT = 1, 268 NAN_RANGE_REQUEST_REJECT, 269 NAN_RANGE_REQUEST_CANCEL 270 } NanRangeResponse; 271 272 /* NAN Security Key Input Type*/ 273 typedef enum { 274 NAN_SECURITY_KEY_INPUT_PMK = 1, 275 NAN_SECURITY_KEY_INPUT_PASSPHRASE 276 } NanSecurityKeyInputType; 277 278 typedef struct { 279 /* pmk length */ 280 u32 pmk_len; 281 /* 282 PMK: Info is optional in Discovery phase. 283 PMK info can be passed during 284 the NDP session. 285 */ 286 u8 pmk[NAN_PMK_INFO_LEN]; 287 } NanSecurityPmk; 288 289 typedef struct { 290 /* passphrase length */ 291 u32 passphrase_len; 292 /* 293 passphrase info is optional in Discovery phase. 294 passphrase info can be passed during 295 the NDP session. 296 */ 297 u8 passphrase[NAN_SECURITY_MAX_PASSPHRASE_LEN]; 298 } NanSecurityPassPhrase; 299 300 typedef struct { 301 NanSecurityKeyInputType key_type; 302 union { 303 NanSecurityPmk pmk_info; 304 NanSecurityPassPhrase passphrase_info; 305 } body; 306 } NanSecurityKeyInfo; 307 308 /* NAN Shared Key Security Cipher Suites Mask */ 309 #define NAN_CIPHER_SUITE_SHARED_KEY_NONE 0x00 310 #define NAN_CIPHER_SUITE_SHARED_KEY_128_MASK 0x01 311 #define NAN_CIPHER_SUITE_SHARED_KEY_256_MASK 0x02 312 313 /* NAN ranging indication condition MASKS */ 314 #define NAN_RANGING_INDICATE_CONTINUOUS_MASK 0x01 315 #define NAN_RANGING_INDICATE_INGRESS_MET_MASK 0x02 316 #define NAN_RANGING_INDICATE_EGRESS_MET_MASK 0x04 317 318 /* NAN schedule update reason MASKS */ 319 #define NAN_SCHEDULE_UPDATE_NSS_MASK 0x01 320 #define NAN_SCHEDULE_UPDATE_CHANNEL_MASK 0x02 321 322 /* 323 Structure to set the Service Descriptor Extension 324 Attribute (SDEA) passed as part of NanPublishRequest/ 325 NanSubscribeRequest/NanMatchInd. 326 */ 327 typedef struct { 328 /* 329 Optional configuration of Data Path Enable request. 330 configure flag determines whether configuration needs 331 to be passed or not. 332 */ 333 u8 config_nan_data_path; 334 NdpType ndp_type; 335 /* 336 NAN secuirty required flag to indicate 337 if the security is enabled or disabled 338 */ 339 NanDataPathSecurityCfgStatus security_cfg; 340 /* 341 NAN ranging required flag to indicate 342 if ranging is enabled on disabled 343 */ 344 NanRangingState ranging_state; 345 /* 346 Enable/Disable Ranging report, 347 when configured NanRangeReportInd received 348 */ 349 NanRangeReport range_report; 350 /* 351 NAN QOS required flag to indicate 352 if QOS is required or not. 353 */ 354 NanQosCfgStatus qos_cfg; 355 } NanSdeaCtrlParams; 356 357 /* 358 Nan Ranging Peer Info in MatchInd 359 */ 360 typedef struct { 361 /* 362 Distance to the NAN device with the MAC address indicated 363 with ranged mac address. 364 */ 365 u32 range_measurement_mm; 366 /* Ranging event matching the configuration of continuous/ingress/egress. */ 367 u32 ranging_event_type; 368 } NanRangeInfo; 369 370 /* Nan/NDP Capabilites info */ 371 typedef struct { 372 u32 max_concurrent_nan_clusters; 373 u32 max_publishes; 374 u32 max_subscribes; 375 u32 max_service_name_len; 376 u32 max_match_filter_len; 377 u32 max_total_match_filter_len; 378 u32 max_service_specific_info_len; 379 u32 max_vsa_data_len; 380 u32 max_mesh_data_len; 381 u32 max_ndi_interfaces; 382 u32 max_ndp_sessions; 383 u32 max_app_info_len; 384 u32 max_queued_transmit_followup_msgs; 385 u32 ndp_supported_bands; 386 u32 cipher_suites_supported; 387 u32 max_scid_len; 388 bool is_ndp_security_supported; 389 u32 max_sdea_service_specific_info_len; 390 u32 max_subscribe_address; 391 } NanCapabilities; 392 393 /* 394 Nan accept policy: Per service basis policy 395 Based on this policy(ALL/NONE), responder side 396 will send ACCEPT/REJECT 397 */ 398 typedef enum { 399 NAN_SERVICE_ACCEPT_POLICY_NONE = 0, 400 /* Default value */ 401 NAN_SERVICE_ACCEPT_POLICY_ALL 402 } NanServiceAcceptPolicy; 403 404 /* 405 Host can send Vendor specific attributes which the Discovery Engine can 406 enclose in Beacons and/or Service Discovery frames transmitted. 407 Below structure is used to populate that. 408 */ 409 typedef struct { 410 /* 411 0 = transmit only in the next discovery window 412 1 = transmit in next 16 discovery window 413 */ 414 u8 payload_transmit_flag; 415 /* 416 Below flags will determine in which all frames 417 the vendor specific attributes should be included 418 */ 419 u8 tx_in_discovery_beacon; 420 u8 tx_in_sync_beacon; 421 u8 tx_in_service_discovery; 422 /* Organizationally Unique Identifier */ 423 u32 vendor_oui; 424 /* 425 vendor specific attribute to be transmitted 426 vsa_len : Length of the vsa data. 427 */ 428 u32 vsa_len; 429 u8 vsa[NAN_MAX_VSA_DATA_LEN]; 430 } NanTransmitVendorSpecificAttribute; 431 432 433 /* 434 Discovery Engine will forward any Vendor Specific Attributes 435 which it received as part of this structure. 436 */ 437 /* Mask to determine on which frames attribute was received */ 438 #define RX_DISCOVERY_BEACON_MASK 0x01 439 #define RX_SYNC_BEACON_MASK 0x02 440 #define RX_SERVICE_DISCOVERY_MASK 0x04 441 typedef struct { 442 /* 443 Frames on which this vendor specific attribute 444 was received. Mask defined above 445 */ 446 u8 vsa_received_on; 447 /* Organizationally Unique Identifier */ 448 u32 vendor_oui; 449 /* vendor specific attribute */ 450 u32 attr_len; 451 u8 vsa[NAN_MAX_VSA_DATA_LEN]; 452 } NanReceiveVendorSpecificAttribute; 453 454 /* 455 NAN Beacon SDF Payload Received structure 456 Discovery engine sends the details of received Beacon or 457 Service Discovery Frames as part of this structure. 458 */ 459 typedef struct { 460 /* Frame data */ 461 u32 frame_len; 462 u8 frame_data[NAN_MAX_FRAME_DATA_LEN]; 463 } NanBeaconSdfPayloadReceive; 464 465 /* 466 Host can set the Periodic scan parameters for each of the 467 3(6, 44, 149) Social channels. Only these channels are allowed 468 any other channels are rejected 469 */ 470 typedef enum { 471 NAN_CHANNEL_24G_BAND = 0, 472 NAN_CHANNEL_5G_BAND_LOW, 473 NAN_CHANNEL_5G_BAND_HIGH 474 } NanChannelIndex; 475 476 /* 477 Structure to set the Social Channel Scan parameters 478 passed as part of NanEnableRequest/NanConfigRequest 479 */ 480 typedef struct { 481 /* 482 Dwell time of each social channel in milliseconds 483 NanChannelIndex corresponds to the respective channel 484 If time set to 0 then the FW default time will be used. 485 */ 486 u8 dwell_time[NAN_MAX_SOCIAL_CHANNELS]; // default value 200 msec 487 488 /* 489 Scan period of each social channel in seconds 490 NanChannelIndex corresponds to the respective channel 491 If time set to 0 then the FW default time will be used. 492 */ 493 u16 scan_period[NAN_MAX_SOCIAL_CHANNELS]; // default value 20 sec 494 } NanSocialChannelScanParams; 495 496 /* 497 Host can send Post Connectivity Capability attributes 498 to be included in Service Discovery frames transmitted 499 as part of this structure. 500 */ 501 typedef struct { 502 /* 503 0 = transmit only in the next discovery window 504 1 = transmit in next 16 discovery window 505 */ 506 u8 payload_transmit_flag; 507 /* 1 - Wifi Direct supported 0 - Not supported */ 508 u8 is_wfd_supported; 509 /* 1 - Wifi Direct Services supported 0 - Not supported */ 510 u8 is_wfds_supported; 511 /* 1 - TDLS supported 0 - Not supported */ 512 u8 is_tdls_supported; 513 /* 1 - IBSS supported 0 - Not supported */ 514 u8 is_ibss_supported; 515 /* 1 - Mesh supported 0 - Not supported */ 516 u8 is_mesh_supported; 517 /* 518 1 - NAN Device currently connect to WLAN Infra AP 519 0 - otherwise 520 */ 521 u8 wlan_infra_field; 522 } NanTransmitPostConnectivityCapability; 523 524 /* 525 Discovery engine providing the post connectivity capability 526 received. 527 */ 528 typedef struct { 529 /* 1 - Wifi Direct supported 0 - Not supported */ 530 u8 is_wfd_supported; 531 /* 1 - Wifi Direct Services supported 0 - Not supported */ 532 u8 is_wfds_supported; 533 /* 1 - TDLS supported 0 - Not supported */ 534 u8 is_tdls_supported; 535 /* 1 - IBSS supported 0 - Not supported */ 536 u8 is_ibss_supported; 537 /* 1 - Mesh supported 0 - Not supported */ 538 u8 is_mesh_supported; 539 /* 540 1 - NAN Device currently connect to WLAN Infra AP 541 0 - otherwise 542 */ 543 u8 wlan_infra_field; 544 } NanReceivePostConnectivityCapability; 545 546 /* 547 Indicates the availability interval duration associated with the 548 Availability Intervals Bitmap field 549 */ 550 typedef enum { 551 NAN_DURATION_16MS = 0, 552 NAN_DURATION_32MS = 1, 553 NAN_DURATION_64MS = 2 554 } NanAvailDuration; 555 556 /* Further availability per channel information */ 557 typedef struct { 558 /* Defined above */ 559 NanAvailDuration entry_control; 560 /* 561 1 byte field indicating the frequency band the NAN Device 562 will be available as defined in IEEE Std. 802.11-2012 563 Annex E Table E-4 Global Operating Classes 564 */ 565 u8 class_val; 566 /* 567 1 byte field indicating the channel the NAN Device 568 will be available. 569 */ 570 u8 channel; 571 /* 572 Map Id - 4 bit field which identifies the Further 573 availability map attribute. 574 */ 575 u8 mapid; 576 /* 577 divides the time between the beginnings of consecutive Discovery 578 Windows of a given NAN cluster into consecutive time intervals 579 of equal durations. The time interval duration is specified by 580 the Availability Interval Duration subfield of the Entry Control 581 field. 582 583 A Nan device that sets the i-th bit of the Availability 584 Intervals Bitmap to 1 shall be present during the corresponding 585 i-th time interval in the operation channel indicated by the 586 Operating Class and Channel Number fields in the same Availability Entry. 587 588 A Nan device that sets the i-th bit of the Availability Intervals Bitmap to 589 0 may be present during the corresponding i-th time interval in the operation 590 channel indicated by the Operating Class and Channel Number fields in the same 591 Availability Entry. 592 593 The size of the Bitmap is dependent upon the Availability Interval Duration 594 chosen in the Entry Control Field. The size can be either 1, 2 or 4 bytes long 595 596 - Duration field is equal to 0, only AIB[0] is valid 597 - Duration field is equal to 1, only AIB [0] and AIB [1] is valid 598 - Duration field is equal to 2, AIB [0], AIB [1], AIB [2] and AIB [3] are valid 599 */ 600 u32 avail_interval_bitmap; 601 } NanFurtherAvailabilityChannel; 602 603 /* 604 Further availability map which can be sent and received from 605 Discovery engine 606 */ 607 typedef struct { 608 /* 609 Number of channels indicates the number of channel 610 entries which is part of fam 611 */ 612 u8 numchans; 613 NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS]; 614 } NanFurtherAvailabilityMap; 615 616 /* 617 Host can send Post-Nan Discovery attributes which the Discovery Engine can 618 enclose in Service Discovery frames 619 */ 620 /* Possible connection types in Post NAN Discovery attributes */ 621 typedef enum { 622 NAN_CONN_WLAN_INFRA = 0, 623 NAN_CONN_P2P_OPER = 1, 624 NAN_CONN_WLAN_IBSS = 2, 625 NAN_CONN_WLAN_MESH = 3, 626 NAN_CONN_FURTHER_SERVICE_AVAILABILITY = 4, 627 NAN_CONN_WLAN_RANGING = 5 628 } NanConnectionType; 629 630 /* Possible device roles in Post NAN Discovery attributes */ 631 typedef enum { 632 NAN_WLAN_INFRA_AP = 0, 633 NAN_WLAN_INFRA_STA = 1, 634 NAN_P2P_OPER_GO = 2, 635 NAN_P2P_OPER_DEV = 3, 636 NAN_P2P_OPER_CLI = 4 637 } NanDeviceRole; 638 639 /* Configuration params of NAN Ranging */ 640 typedef struct { 641 /* 642 Interval in milli sec between two ranging measurements. 643 If the Awake DW intervals in NanEnable/Config are larger 644 than the ranging intervals priority is given to Awake DW 645 Intervals. Only on a match the ranging is initiated for the 646 peer 647 */ 648 u32 ranging_interval_msec; 649 /* 650 Flags indicating the type of ranging event to be notified 651 NAN_RANGING_INDICATE_ MASKS are used to set these. 652 BIT0 - Continuous Ranging event notification. 653 BIT1 - Ingress distance is <=. 654 BIT2 - Egress distance is >=. 655 */ 656 u32 config_ranging_indications; 657 /* Ingress distance in millimeters (optional) */ 658 u32 distance_ingress_mm; 659 /* Egress distance in millmilliimeters (optional) */ 660 u32 distance_egress_mm; 661 } NanRangingCfg; 662 663 /* NAN Ranging request's response */ 664 typedef struct { 665 /* Publish Id of an earlier Publisher */ 666 u16 publish_id; 667 /* 668 A 32 bit Requestor instance Id which is sent to the Application. 669 This Id will be used in subsequent RangeResponse on Subscribe side. 670 */ 671 u32 requestor_instance_id; 672 /* Peer MAC addr of Range Requestor */ 673 u8 peer_addr[NAN_MAC_ADDR_LEN]; 674 /* Response indicating ACCEPT/REJECT/CANCEL of Range Request */ 675 NanRangeResponse ranging_response; 676 } NanRangeResponseCfg; 677 678 /* Structure of Post NAN Discovery attribute */ 679 typedef struct { 680 /* Connection type of the host */ 681 NanConnectionType type; 682 /* 683 Device role of the host based on 684 the connection type 685 */ 686 NanDeviceRole role; 687 /* 688 Flag to send the information as a single shot or repeated 689 for next 16 discovery windows 690 0 - Single_shot 691 1 - next 16 discovery windows 692 */ 693 u8 transmit_freq; 694 /* Duration of the availability bitmask */ 695 NanAvailDuration duration; 696 /* Availability interval bitmap based on duration */ 697 u32 avail_interval_bitmap; 698 /* 699 Mac address depending on the conn type and device role 700 -------------------------------------------------- 701 | Conn Type | Device Role | Mac address Usage | 702 -------------------------------------------------- 703 | WLAN_INFRA | AP/STA | BSSID of the AP | 704 -------------------------------------------------- 705 | P2P_OPER | GO | GO's address | 706 -------------------------------------------------- 707 | P2P_OPER | P2P_DEVICE | Address of who | 708 | | | would become GO | 709 -------------------------------------------------- 710 | WLAN_IBSS | NA | BSSID | 711 -------------------------------------------------- 712 | WLAN_MESH | NA | BSSID | 713 -------------------------------------------------- 714 */ 715 u8 addr[NAN_MAC_ADDR_LEN]; 716 /* 717 Mandatory mesh id value if connection type is WLAN_MESH 718 Mesh id contains 0-32 octet identifier and should be 719 as per IEEE Std.802.11-2012 spec. 720 */ 721 u16 mesh_id_len; 722 u8 mesh_id[NAN_MAX_MESH_DATA_LEN]; 723 /* 724 Optional infrastructure SSID if conn_type is set to 725 NAN_CONN_WLAN_INFRA 726 */ 727 u16 infrastructure_ssid_len; 728 u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN]; 729 } NanTransmitPostDiscovery; 730 731 /* 732 Discovery engine providing the structure of Post NAN 733 Discovery 734 */ 735 typedef struct { 736 /* Connection type of the host */ 737 NanConnectionType type; 738 /* 739 Device role of the host based on 740 the connection type 741 */ 742 NanDeviceRole role; 743 /* Duration of the availability bitmask */ 744 NanAvailDuration duration; 745 /* Availability interval bitmap based on duration */ 746 u32 avail_interval_bitmap; 747 /* 748 Map Id - 4 bit field which identifies the Further 749 availability map attribute. 750 */ 751 u8 mapid; 752 /* 753 Mac address depending on the conn type and device role 754 -------------------------------------------------- 755 | Conn Type | Device Role | Mac address Usage | 756 -------------------------------------------------- 757 | WLAN_INFRA | AP/STA | BSSID of the AP | 758 -------------------------------------------------- 759 | P2P_OPER | GO | GO's address | 760 -------------------------------------------------- 761 | P2P_OPER | P2P_DEVICE | Address of who | 762 | | | would become GO | 763 -------------------------------------------------- 764 | WLAN_IBSS | NA | BSSID | 765 -------------------------------------------------- 766 | WLAN_MESH | NA | BSSID | 767 -------------------------------------------------- 768 */ 769 u8 addr[NAN_MAC_ADDR_LEN]; 770 /* 771 Mandatory mesh id value if connection type is WLAN_MESH 772 Mesh id contains 0-32 octet identifier and should be 773 as per IEEE Std.802.11-2012 spec. 774 */ 775 u16 mesh_id_len; 776 u8 mesh_id[NAN_MAX_MESH_DATA_LEN]; 777 /* 778 Optional infrastructure SSID if conn_type is set to 779 NAN_CONN_WLAN_INFRA 780 */ 781 u16 infrastructure_ssid_len; 782 u8 infrastructure_ssid_val[NAN_MAX_INFRA_DATA_LEN]; 783 } NanReceivePostDiscovery; 784 785 /* 786 NAN device level configuration of SDF and Sync beacons in both 787 2.4/5GHz bands 788 */ 789 typedef struct { 790 /* Configure 2.4GHz DW Band */ 791 u8 config_2dot4g_dw_band; 792 /* 793 Indicates the interval for Sync beacons and SDF's in 2.4GHz band. 794 Valid values of DW Interval are: 1, 2, 3, 4 and 5, 0 is reserved. 795 The SDF includes in OTA when enabled. The publish/subscribe period 796 values don't override the device level configurations. 797 */ 798 u32 dw_2dot4g_interval_val; // default value 1 799 /* Configure 5GHz DW Band */ 800 u8 config_5g_dw_band; 801 /* 802 Indicates the interval for Sync beacons and SDF's in 5GHz band 803 Valid values of DW Interval are: 1, 2, 3, 4 and 5, 0 no wake up for 804 any interval. The SDF includes in OTA when enabled. The publish/subscribe 805 period values don't override the device level configurations. 806 */ 807 u32 dw_5g_interval_val; // default value 1 when 5G is enabled 808 } NanConfigDW; 809 810 /* 811 Enable Request Message Structure 812 The NanEnableReq message instructs the Discovery Engine to enter an operational state 813 */ 814 typedef struct { 815 /* Mandatory parameters below */ 816 u8 master_pref; // default value 0x02 817 /* 818 A cluster_low value matching cluster_high indicates a request to join 819 a cluster with that value. If the requested cluster is not found the 820 device will start its own cluster. 821 */ 822 u16 cluster_low; // default value 0 823 u16 cluster_high; // default value 0xFFFF 824 825 /* 826 Optional configuration of Enable request. 827 Each of the optional parameters have configure flag which 828 determine whether configuration is to be passed or not. 829 */ 830 u8 config_support_5g; 831 u8 support_5g_val; // default value 0; turned off by default 832 /* 833 BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons 834 0 - Do not include SIDs in any beacons 835 1 - Include SIDs in all beacons. 836 Rest 7 bits are count field which allows control over the number of SIDs 837 included in the Beacon. 0 means to include as many SIDs that fit into 838 the maximum allow Beacon frame size 839 */ 840 u8 config_sid_beacon; 841 u8 sid_beacon_val; // default value 0x01 842 /* 843 The rssi values below should be specified without sign. 844 For eg: -70dBm should be specified as 70. 845 */ 846 u8 config_2dot4g_rssi_close; 847 u8 rssi_close_2dot4g_val; // default value -60 dBm 848 849 u8 config_2dot4g_rssi_middle; 850 u8 rssi_middle_2dot4g_val; // default value -70 dBm 851 852 u8 config_2dot4g_rssi_proximity; 853 u8 rssi_proximity_2dot4g_val;// default value -60dBm 854 855 u8 config_hop_count_limit; 856 u8 hop_count_limit_val; // default value 0x02 857 858 /* 859 Defines 2.4G channel access support 860 0 - No Support 861 1 - Supported 862 */ 863 u8 config_2dot4g_support; 864 u8 support_2dot4g_val; // default value 0x01 865 /* 866 Defines 2.4G channels will be used for sync/discovery beacons 867 0 - 2.4G channels not used for beacons 868 1 - 2.4G channels used for beacons 869 */ 870 u8 config_2dot4g_beacons; 871 u8 beacon_2dot4g_val; // default value 1 872 /* 873 Defines 2.4G channels will be used for Service Discovery frames 874 0 - 2.4G channels not used for Service Discovery frames 875 1 - 2.4G channels used for Service Discovery frames 876 */ 877 u8 config_2dot4g_sdf; 878 u8 sdf_2dot4g_val; // default value 1 879 /* 880 Defines 5G channels will be used for sync/discovery beacons 881 0 - 5G channels not used for beacons 882 1 - 5G channels used for beacons 883 */ 884 u8 config_5g_beacons; 885 u8 beacon_5g_val; // default value 1 when 5G is enabled 886 /* 887 Defines 5G channels will be used for Service Discovery frames 888 0 - 5G channels not used for Service Discovery frames 889 1 - 5G channels used for Service Discovery frames 890 */ 891 u8 config_5g_sdf; 892 u8 sdf_5g_val; // default value is 0 when 5G is enabled 893 /* 894 1 byte value which defines the RSSI in 895 dBm for a close by Peer in 5 Ghz channels. 896 The rssi values should be specified without sign. 897 For eg: -70dBm should be specified as 70. 898 */ 899 u8 config_5g_rssi_close; 900 u8 rssi_close_5g_val; // default value -60dBm when 5G is enabled 901 /* 902 1 byte value which defines the RSSI value in 903 dBm for a close by Peer in 5 Ghz channels. 904 The rssi values should be specified without sign. 905 For eg: -70dBm should be specified as 70. 906 */ 907 u8 config_5g_rssi_middle; 908 u8 rssi_middle_5g_val; // default value -75dBm when 5G is enabled 909 /* 910 1 byte value which defines the RSSI filter 911 threshold. Any Service Descriptors received above this 912 value that are configured for RSSI filtering will be dropped. 913 The rssi values should be specified without sign. 914 For eg: -70dBm should be specified as 70. 915 */ 916 u8 config_5g_rssi_close_proximity; 917 u8 rssi_close_proximity_5g_val; // default value -60dBm when 5G is enabled 918 /* 919 1 byte quantity which defines the window size over 920 which the average RSSI will be calculated over. 921 */ 922 u8 config_rssi_window_size; 923 u8 rssi_window_size_val; // default value 0x08 924 /* 925 The 24 bit Organizationally Unique ID + the 8 bit Network Id. 926 */ 927 u8 config_oui; 928 u32 oui_val; // default value {0x51, 0x6F, 0x9A, 0x01, 0x00, 0x00} 929 /* 930 NAN Interface Address, If not configured the Discovery Engine 931 will generate a 6 byte Random MAC. 932 */ 933 u8 config_intf_addr; 934 u8 intf_addr_val[NAN_MAC_ADDR_LEN]; 935 /* 936 If set to 1, the Discovery Engine will enclose the Cluster 937 Attribute only sent in Beacons in a Vendor Specific Attribute 938 and transmit in a Service Descriptor Frame. 939 */ 940 u8 config_cluster_attribute_val; 941 /* 942 The periodicity in seconds between full scans to find any new 943 clusters available in the area. A Full scan should not be done 944 more than every 10 seconds and should not be done less than every 945 30 seconds. 946 */ 947 u8 config_scan_params; 948 NanSocialChannelScanParams scan_params_val; 949 /* 950 1 byte quantity which forces the Random Factor to a particular 951 value for all transmitted Sync/Discovery beacons 952 */ 953 u8 config_random_factor_force; 954 u8 random_factor_force_val; // default value off and set to 0x00 955 /* 956 1 byte quantity which forces the HC for all transmitted Sync and 957 Discovery Beacon NO matter the real HC being received over the 958 air. 959 */ 960 u8 config_hop_count_force; 961 u8 hop_count_force_val; // default value 0x00 962 963 /* channel frequency in MHz to enable Nan on */ 964 u8 config_24g_channel; 965 wifi_channel channel_24g_val; // default value channel 0x6 966 967 u8 config_5g_channel; 968 wifi_channel channel_5g_val; // default value channel 44 or 149 regulatory 969 // domain 970 /* Configure 2.4/5GHz DW */ 971 NanConfigDW config_dw; 972 973 /* 974 By default discovery MAC address randomization is enabled 975 and default interval value is 30 minutes i.e. 1800 seconds. 976 The value 0 is used to disable MAC addr randomization. 977 */ 978 u8 config_disc_mac_addr_randomization; 979 u32 disc_mac_addr_rand_interval_sec; // default value 1800 sec 980 981 /* 982 Set/Enable corresponding bits to disable Discovery indications: 983 BIT0 - Disable Discovery MAC Address Event. 984 BIT1 - Disable Started Cluster Event. 985 BIT2 - Disable Joined Cluster Event. 986 */ 987 u8 discovery_indication_cfg; // default value 0x0 988 /* 989 BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons 990 0 - Do not include SIDs in any beacons 991 1 - Include SIDs in all beacons. 992 Rest 7 bits are count field which allows control over the number of SIDs 993 included in the Beacon. 0 means to include as many SIDs that fit into 994 the maximum allow Beacon frame size 995 */ 996 u8 config_subscribe_sid_beacon; 997 u32 subscribe_sid_beacon_val; // default value 0x0 998 /* 999 Discovery Beacon Interval config. 1000 Default value is 128 msec in 2G DW and 176 msec in 2G/5G DW. 1001 When 0 value is passed it is reset to default value of 128 or 176 msec. 1002 */ 1003 u8 config_discovery_beacon_int; 1004 u32 discovery_beacon_interval; 1005 /* 1006 Enable Number of Spatial Streams. 1007 This is NAN Power Optimization feature for NAN discovery. 1008 */ 1009 u8 config_nss; 1010 // default value is implementation specific and passing 0 sets it to default 1011 u32 nss; 1012 /* 1013 Enable device level NAN Ranging feature. 1014 0 - Disable 1015 1 - Enable 1016 */ 1017 u8 config_enable_ranging; 1018 u32 enable_ranging; 1019 /* 1020 Enable/Disable DW Early termination. 1021 0 - Disable 1022 1 - Enable 1023 */ 1024 u8 config_dw_early_termination; 1025 u32 enable_dw_termination; 1026 } NanEnableRequest; 1027 1028 /* 1029 Publish Msg Structure 1030 Message is used to request the DE to publish the Service Name 1031 using the parameters passed into the Discovery Window 1032 */ 1033 typedef struct { 1034 u16 publish_id;/* id 0 means new publish, any other id is existing publish */ 1035 u16 ttl; /* how many seconds to run for. 0 means forever until canceled */ 1036 /* 1037 period: Awake DW Interval for publish(service) 1038 Indicates the interval between two Discovery Windows in which 1039 the device supporting the service is awake to transmit or 1040 receive the Service Discovery frames. 1041 Valid values of Awake DW Interval are: 1, 2, 4, 8 and 16, value 0 will 1042 default to 1. 1043 */ 1044 u16 period; 1045 NanPublishType publish_type;/* 0= unsolicited, solicited = 1, 2= both */ 1046 NanTxType tx_type; /* 0 = broadcast, 1= unicast if solicited publish */ 1047 u8 publish_count; /* number of OTA Publish, 0 means forever until canceled */ 1048 u16 service_name_len; /* length of service name */ 1049 u8 service_name[NAN_MAX_SERVICE_NAME_LEN];/* UTF-8 encoded string identifying the service */ 1050 /* 1051 Field which specifies how the matching indication to host is controlled. 1052 0 - Match and Indicate Once 1053 1 - Match and Indicate continuous 1054 2 - Match and Indicate never. This means don't indicate the match to the host. 1055 3 - Reserved 1056 */ 1057 NanMatchAlg publish_match_indicator; 1058 1059 /* 1060 Sequence of values 1061 NAN Device that has invoked a Subscribe method corresponding to this Publish method 1062 */ 1063 u16 service_specific_info_len; 1064 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1065 1066 /* 1067 Ordered sequence of <length, value> pairs which specify further response conditions 1068 beyond the service name used to filter subscribe messages to respond to. 1069 This is only needed when the PT is set to NAN_SOLICITED or NAN_SOLICITED_UNSOLICITED. 1070 */ 1071 u16 rx_match_filter_len; 1072 u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1073 1074 /* 1075 Ordered sequence of <length, value> pairs to be included in the Discovery Frame. 1076 If present it is always sent in a Discovery Frame 1077 */ 1078 u16 tx_match_filter_len; 1079 u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1080 1081 /* 1082 flag which specifies that the Publish should use the configured RSSI 1083 threshold and the received RSSI in order to filter requests 1084 0 ignore the configured RSSI threshold when running a Service 1085 Descriptor attribute or Service ID List Attribute through the DE matching logic. 1086 1 use the configured RSSI threshold when running a Service 1087 Descriptor attribute or Service ID List Attribute through the DE matching logic. 1088 1089 */ 1090 u8 rssi_threshold_flag; 1091 1092 /* 1093 8-bit bitmap which allows the Host to associate this publish 1094 with a particular Post-NAN Connectivity attribute 1095 which has been sent down in a NanConfigureRequest/NanEnableRequest 1096 message. If the DE fails to find a configured Post-NAN 1097 connectivity attributes referenced by the bitmap, 1098 the DE will return an error code to the Host. 1099 If the Publish is configured to use a Post-NAN Connectivity 1100 attribute and the Host does not refresh the Post-NAN Connectivity 1101 attribute the Publish will be canceled and the Host will be sent 1102 a PublishTerminatedIndication message. 1103 */ 1104 u8 connmap; 1105 /* 1106 Set/Enable corresponding bits to disable any indications that follow a publish. 1107 BIT0 - Disable publish termination indication. 1108 BIT1 - Disable match expired indication. 1109 BIT2 - Disable followUp indication received (OTA). 1110 BIT3 - Disable publishReplied indication. 1111 */ 1112 u8 recv_indication_cfg; 1113 /* 1114 Nan accept policy for the specific service(publish) 1115 */ 1116 NanServiceAcceptPolicy service_responder_policy; 1117 /* NAN Cipher Suite Type */ 1118 u32 cipher_type; 1119 /* 1120 Nan Security Key Info is optional in Discovery phase. 1121 PMK or passphrase info can be passed during 1122 the NDP session. 1123 */ 1124 NanSecurityKeyInfo key_info; 1125 1126 /* Security Context Identifiers length */ 1127 u32 scid_len; 1128 /* 1129 Security Context Identifier attribute contains PMKID 1130 shall be included in NDP setup and response messages. 1131 Security Context Identifier, Identifies the Security 1132 Context. For NAN Shared Key Cipher Suite, this field 1133 contains the 16 octet PMKID identifying the PMK used 1134 for setting up the Secure Data Path. 1135 */ 1136 u8 scid[NAN_MAX_SCID_BUF_LEN]; 1137 1138 /* NAN configure service discovery extended attributes */ 1139 NanSdeaCtrlParams sdea_params; 1140 1141 /* NAN Ranging configuration */ 1142 NanRangingCfg ranging_cfg; 1143 1144 /* Enable/disable NAN serivce Ranging auto response mode */ 1145 NanRangingAutoResponse ranging_auto_response; 1146 1147 /* 1148 When the ranging_auto_response_cfg is not set, NanRangeRequestInd is 1149 received. Nan Range Response to Peer MAC Addr is notified to indicate 1150 ACCEPT/REJECT/CANCEL to the requestor. 1151 */ 1152 NanRangeResponseCfg range_response_cfg; 1153 1154 /* 1155 Sequence of values indicating the service specific info in SDEA 1156 */ 1157 u16 sdea_service_specific_info_len; 1158 u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN]; 1159 } NanPublishRequest; 1160 1161 /* 1162 Publish Cancel Msg Structure 1163 The PublishServiceCancelReq Message is used to request the DE to stop publishing 1164 the Service Name identified by the Publish Id in the message. 1165 */ 1166 typedef struct { 1167 u16 publish_id; 1168 } NanPublishCancelRequest; 1169 1170 /* 1171 NAN Subscribe Structure 1172 The SubscribeServiceReq message is sent to the Discovery Engine 1173 whenever the Upper layers would like to listen for a Service Name 1174 */ 1175 typedef struct { 1176 u16 subscribe_id; /* id 0 means new subscribe, non zero is existing subscribe */ 1177 u16 ttl; /* how many seconds to run for. 0 means forever until canceled */ 1178 /* 1179 period: Awake DW Interval for subscribe(service) 1180 Indicates the interval between two Discovery Windows in which 1181 the device supporting the service is awake to transmit or 1182 receive the Service Discovery frames. 1183 Valid values of Awake DW Interval are: 1, 2, 4, 8 and 16, value 0 will 1184 default to 1. 1185 */ 1186 u16 period; 1187 1188 /* Flag which specifies how the Subscribe request shall be processed. */ 1189 NanSubscribeType subscribe_type; /* 0 - PASSIVE , 1- ACTIVE */ 1190 1191 /* Flag which specifies on Active Subscribes how the Service Response Filter attribute is populated.*/ 1192 NanSRFType serviceResponseFilter; /* 0 - Bloom Filter, 1 - MAC Addr */ 1193 1194 /* Flag which specifies how the Service Response Filter Include bit is populated.*/ 1195 NanSRFIncludeType serviceResponseInclude; /* 0=Do not respond if in the Address Set, 1= Respond */ 1196 1197 /* Flag which specifies if the Service Response Filter should be used when creating Subscribes.*/ 1198 NanSRFState useServiceResponseFilter; /* 0=Do not send the Service Response Filter,1= send */ 1199 1200 /* 1201 Flag which specifies if the Service Specific Info is needed in 1202 the Publish message before creating the MatchIndication 1203 */ 1204 NanSsiInMatchInd ssiRequiredForMatchIndication; /* 0=Not needed, 1= Required */ 1205 1206 /* 1207 Field which specifies how the matching indication to host is controlled. 1208 0 - Match and Indicate Once 1209 1 - Match and Indicate continuous 1210 2 - Match and Indicate never. This means don't indicate the match to the host. 1211 3 - Reserved 1212 */ 1213 NanMatchAlg subscribe_match_indicator; 1214 1215 /* 1216 The number of Subscribe Matches which should occur 1217 before the Subscribe request is automatically terminated. 1218 */ 1219 u8 subscribe_count; /* If this value is 0 this field is not used by the DE.*/ 1220 1221 u16 service_name_len;/* length of service name */ 1222 u8 service_name[NAN_MAX_SERVICE_NAME_LEN]; /* UTF-8 encoded string identifying the service */ 1223 1224 /* Sequence of values which further specify the published service beyond the service name*/ 1225 u16 service_specific_info_len; 1226 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1227 1228 /* 1229 Ordered sequence of <length, value> pairs used to filter out received publish discovery messages. 1230 This can be sent both for a Passive or an Active Subscribe 1231 */ 1232 u16 rx_match_filter_len; 1233 u8 rx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1234 1235 /* 1236 Ordered sequence of <length, value> pairs included in the 1237 Discovery Frame when an Active Subscribe is used. 1238 */ 1239 u16 tx_match_filter_len; 1240 u8 tx_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1241 1242 /* 1243 Flag which specifies that the Subscribe should use the configured RSSI 1244 threshold and the received RSSI in order to filter requests 1245 0 ignore the configured RSSI threshold when running a Service 1246 Descriptor attribute or Service ID List Attribute through the DE matching logic. 1247 1 use the configured RSSI threshold when running a Service 1248 Descriptor attribute or Service ID List Attribute through the DE matching logic. 1249 1250 */ 1251 u8 rssi_threshold_flag; 1252 1253 /* 1254 8-bit bitmap which allows the Host to associate this Active 1255 Subscribe with a particular Post-NAN Connectivity attribute 1256 which has been sent down in a NanConfigureRequest/NanEnableRequest 1257 message. If the DE fails to find a configured Post-NAN 1258 connectivity attributes referenced by the bitmap, 1259 the DE will return an error code to the Host. 1260 If the Subscribe is configured to use a Post-NAN Connectivity 1261 attribute and the Host does not refresh the Post-NAN Connectivity 1262 attribute the Subscribe will be canceled and the Host will be sent 1263 a SubscribeTerminatedIndication message. 1264 */ 1265 u8 connmap; 1266 /* 1267 NAN Interface Address, conforming to the format as described in 1268 8.2.4.3.2 of IEEE Std. 802.11-2012. 1269 */ 1270 u8 num_intf_addr_present; 1271 u8 intf_addr[NAN_MAX_SUBSCRIBE_MAX_ADDRESS][NAN_MAC_ADDR_LEN]; 1272 /* 1273 Set/Enable corresponding bits to disable indications that follow a subscribe. 1274 BIT0 - Disable subscribe termination indication. 1275 BIT1 - Disable match expired indication. 1276 BIT2 - Disable followUp indication received (OTA). 1277 */ 1278 u8 recv_indication_cfg; 1279 1280 /* NAN Cipher Suite Type */ 1281 u32 cipher_type; 1282 /* 1283 Nan Security Key Info is optional in Discovery phase. 1284 PMK or passphrase info can be passed during 1285 the NDP session. 1286 */ 1287 NanSecurityKeyInfo key_info; 1288 1289 /* Security Context Identifiers length */ 1290 u32 scid_len; 1291 /* 1292 Security Context Identifier attribute contains PMKID 1293 shall be included in NDP setup and response messages. 1294 Security Context Identifier, Identifies the Security 1295 Context. For NAN Shared Key Cipher Suite, this field 1296 contains the 16 octet PMKID identifying the PMK used 1297 for setting up the Secure Data Path. 1298 */ 1299 u8 scid[NAN_MAX_SCID_BUF_LEN]; 1300 1301 /* NAN configure service discovery extended attributes */ 1302 NanSdeaCtrlParams sdea_params; 1303 1304 /* NAN Ranging configuration */ 1305 NanRangingCfg ranging_cfg; 1306 1307 /* Enable/disable NAN serivce Ranging auto response mode */ 1308 NanRangingAutoResponse ranging_auto_response; 1309 1310 /* 1311 When the ranging_auto_response_cfg is not set, NanRangeRequestInd is 1312 received. Nan Range Response to Peer MAC Addr is notified to indicate 1313 ACCEPT/REJECT/CANCEL to the requestor. 1314 */ 1315 NanRangeResponseCfg range_response_cfg; 1316 1317 /* 1318 Sequence of values indicating the service specific info in SDEA 1319 */ 1320 u16 sdea_service_specific_info_len; 1321 u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN]; 1322 } NanSubscribeRequest; 1323 1324 /* 1325 NAN Subscribe Cancel Structure 1326 The SubscribeCancelReq Message is used to request the DE to stop looking for the Service Name. 1327 */ 1328 typedef struct { 1329 u16 subscribe_id; 1330 } NanSubscribeCancelRequest; 1331 1332 /* 1333 Transmit follow up Structure 1334 The TransmitFollowupReq message is sent to the DE to allow the sending of the Service_Specific_Info 1335 to a particular MAC address. 1336 */ 1337 typedef struct { 1338 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1339 u16 publish_subscribe_id; 1340 1341 /* 1342 This Id is the Requestor Instance that is passed as 1343 part of earlier MatchInd/FollowupInd message. 1344 */ 1345 u32 requestor_instance_id; 1346 u8 addr[NAN_MAC_ADDR_LEN]; /* Unicast address */ 1347 NanTxPriority priority; /* priority of the request 2=high */ 1348 NanTransmitWindowType dw_or_faw; /* 0= send in a DW, 1=send in FAW */ 1349 1350 /* 1351 Sequence of values which further specify the published service beyond 1352 the service name. 1353 */ 1354 u16 service_specific_info_len; 1355 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1356 /* 1357 Set/Enable corresponding bits to disable responses after followUp. 1358 BIT0 - Disable followUp response from FW. 1359 */ 1360 u8 recv_indication_cfg; 1361 1362 /* 1363 Sequence of values indicating the service specific info in SDEA 1364 */ 1365 u16 sdea_service_specific_info_len; 1366 u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN]; 1367 } NanTransmitFollowupRequest; 1368 1369 /* 1370 Stats Request structure 1371 The Discovery Engine can be queried at runtime by the Host processor for statistics 1372 concerning various parts of the Discovery Engine. 1373 */ 1374 typedef struct { 1375 NanStatsType stats_type; /* NAN Statistics Request Type */ 1376 u8 clear; /* 0= Do not clear the stats and return the current contents , 1= Clear the associated stats */ 1377 } NanStatsRequest; 1378 1379 /* 1380 Config Structure 1381 The NanConfigurationReq message is sent by the Host to the 1382 Discovery Engine in order to configure the Discovery Engine during runtime. 1383 */ 1384 typedef struct { 1385 u8 config_sid_beacon; 1386 u8 sid_beacon; 1387 u8 config_rssi_proximity; 1388 u8 rssi_proximity; // default value -60dBm 1389 u8 config_master_pref; 1390 u8 master_pref; // default value 0x02 1391 /* 1392 1 byte value which defines the RSSI filter threshold. 1393 Any Service Descriptors received above this value 1394 that are configured for RSSI filtering will be dropped. 1395 The rssi values should be specified without sign. 1396 For eg: -70dBm should be specified as 70. 1397 */ 1398 u8 config_5g_rssi_close_proximity; 1399 u8 rssi_close_proximity_5g_val; // default value -60dBm 1400 /* 1401 Optional configuration of Configure request. 1402 Each of the optional parameters have configure flag which 1403 determine whether configuration is to be passed or not. 1404 */ 1405 /* 1406 1 byte quantity which defines the window size over 1407 which the average RSSI will be calculated over. 1408 */ 1409 u8 config_rssi_window_size; 1410 u8 rssi_window_size_val; // default value 0x08 1411 /* 1412 If set to 1, the Discovery Engine will enclose the Cluster 1413 Attribute only sent in Beacons in a Vendor Specific Attribute 1414 and transmit in a Service Descriptor Frame. 1415 */ 1416 u8 config_cluster_attribute_val; 1417 /* 1418 The periodicity in seconds between full scans to find any new 1419 clusters available in the area. A Full scan should not be done 1420 more than every 10 seconds and should not be done less than every 1421 30 seconds. 1422 */ 1423 u8 config_scan_params; 1424 NanSocialChannelScanParams scan_params_val; 1425 /* 1426 1 byte quantity which forces the Random Factor to a particular 1427 value for all transmitted Sync/Discovery beacons 1428 */ 1429 u8 config_random_factor_force; 1430 u8 random_factor_force_val; // default value 0x00 1431 /* 1432 1 byte quantity which forces the HC for all transmitted Sync and 1433 Discovery Beacon NO matter the real HC being received over the 1434 air. 1435 */ 1436 u8 config_hop_count_force; 1437 u8 hop_count_force_val; // default value of 0 1438 /* NAN Post Connectivity Capability */ 1439 u8 config_conn_capability; 1440 NanTransmitPostConnectivityCapability conn_capability_val; 1441 /* NAN Post Discover Capability */ 1442 u8 num_config_discovery_attr; 1443 NanTransmitPostDiscovery discovery_attr_val[NAN_MAX_POSTDISCOVERY_LEN]; 1444 /* NAN Further availability Map */ 1445 u8 config_fam; 1446 NanFurtherAvailabilityMap fam_val; 1447 /* Configure 2.4/5GHz DW */ 1448 NanConfigDW config_dw; 1449 /* 1450 By default discovery MAC address randomization is enabled 1451 and default interval value is 30 minutes i.e. 1800 seconds. 1452 The value 0 is used to disable MAC addr randomization. 1453 */ 1454 u8 config_disc_mac_addr_randomization; 1455 u32 disc_mac_addr_rand_interval_sec; // default value of 30 minutes 1456 1457 /* 1458 Set/Enable corresponding bits to disable Discovery indications: 1459 BIT0 - Disable Discovery MAC Address Event. 1460 BIT1 - Disable Started Cluster Event. 1461 BIT2 - Disable Joined Cluster Event. 1462 */ 1463 u8 discovery_indication_cfg; // default value of 0 1464 /* 1465 BIT 0 is used to specify to include Service IDs in Sync/Discovery beacons 1466 0 - Do not include SIDs in any beacons 1467 1 - Include SIDs in all beacons. 1468 Rest 7 bits are count field which allows control over the number of SIDs 1469 included in the Beacon. 0 means to include as many SIDs that fit into 1470 the maximum allow Beacon frame size 1471 */ 1472 u8 config_subscribe_sid_beacon; 1473 u32 subscribe_sid_beacon_val; // default value 0x0 1474 /* 1475 Discovery Beacon Interval config. 1476 Default value is 128 msec in 2G DW and 176 msec in 2G/5G DW. 1477 When 0 value is passed it is reset to default value of 128 or 176 msec. 1478 */ 1479 u8 config_discovery_beacon_int; 1480 u32 discovery_beacon_interval; 1481 /* 1482 Enable Number of Spatial Streams. 1483 This is NAN Power Optimization feature for NAN discovery. 1484 */ 1485 u8 config_nss; 1486 // default value is implementation specific and passing 0 sets it to default 1487 u32 nss; 1488 /* 1489 Enable device level NAN Ranging feature. 1490 0 - Disable 1491 1 - Enable 1492 */ 1493 u8 config_enable_ranging; 1494 u32 enable_ranging; 1495 /* 1496 Enable/Disable DW Early termination. 1497 0 - Disable 1498 1 - Enable 1499 */ 1500 u8 config_dw_early_termination; 1501 u32 enable_dw_termination; 1502 } NanConfigRequest; 1503 1504 /* 1505 TCA Structure 1506 The Discovery Engine can be configured to send up Events whenever a configured 1507 Threshold Crossing Alert (TCA) Type crosses an integral threshold in a particular direction. 1508 */ 1509 typedef struct { 1510 NanTcaType tca_type; /* Nan Protocol Threshold Crossing Alert (TCA) Codes */ 1511 1512 /* flag which control whether or not an event is generated for the Rising direction */ 1513 u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */ 1514 1515 /* flag which control whether or not an event is generated for the Falling direction */ 1516 u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */ 1517 1518 /* flag which requests a previous TCA request to be cleared from the DE */ 1519 u8 clear;/*0= Do not clear the TCA, 1=Clear the TCA */ 1520 1521 /* 32 bit value which represents the threshold to be used.*/ 1522 u32 threshold; 1523 } NanTCARequest; 1524 1525 /* 1526 Beacon Sdf Payload Structure 1527 The Discovery Engine can be configured to publish vendor specific attributes as part of 1528 beacon or service discovery frame transmitted as part of this request.. 1529 */ 1530 typedef struct { 1531 /* 1532 NanVendorAttribute will have the Vendor Specific Attribute which the 1533 vendor wants to publish as part of Discovery or Sync or Service discovery frame 1534 */ 1535 NanTransmitVendorSpecificAttribute vsa; 1536 } NanBeaconSdfPayloadRequest; 1537 1538 /* Publish statistics. */ 1539 typedef struct 1540 { 1541 u32 validPublishServiceReqMsgs; 1542 u32 validPublishServiceRspMsgs; 1543 u32 validPublishServiceCancelReqMsgs; 1544 u32 validPublishServiceCancelRspMsgs; 1545 u32 validPublishRepliedIndMsgs; 1546 u32 validPublishTerminatedIndMsgs; 1547 u32 validActiveSubscribes; 1548 u32 validMatches; 1549 u32 validFollowups; 1550 u32 invalidPublishServiceReqMsgs; 1551 u32 invalidPublishServiceCancelReqMsgs; 1552 u32 invalidActiveSubscribes; 1553 u32 invalidMatches; 1554 u32 invalidFollowups; 1555 u32 publishCount; 1556 u32 publishNewMatchCount; 1557 u32 pubsubGlobalNewMatchCount; 1558 } NanPublishStats; 1559 1560 /* Subscribe statistics. */ 1561 typedef struct 1562 { 1563 u32 validSubscribeServiceReqMsgs; 1564 u32 validSubscribeServiceRspMsgs; 1565 u32 validSubscribeServiceCancelReqMsgs; 1566 u32 validSubscribeServiceCancelRspMsgs; 1567 u32 validSubscribeTerminatedIndMsgs; 1568 u32 validSubscribeMatchIndMsgs; 1569 u32 validSubscribeUnmatchIndMsgs; 1570 u32 validSolicitedPublishes; 1571 u32 validMatches; 1572 u32 validFollowups; 1573 u32 invalidSubscribeServiceReqMsgs; 1574 u32 invalidSubscribeServiceCancelReqMsgs; 1575 u32 invalidSubscribeFollowupReqMsgs; 1576 u32 invalidSolicitedPublishes; 1577 u32 invalidMatches; 1578 u32 invalidFollowups; 1579 u32 subscribeCount; 1580 u32 bloomFilterIndex; 1581 u32 subscribeNewMatchCount; 1582 u32 pubsubGlobalNewMatchCount; 1583 } NanSubscribeStats; 1584 1585 /* NAN DW Statistics*/ 1586 typedef struct 1587 { 1588 /* RX stats */ 1589 u32 validFrames; 1590 u32 validActionFrames; 1591 u32 validBeaconFrames; 1592 u32 ignoredActionFrames; 1593 u32 ignoredBeaconFrames; 1594 u32 invalidFrames; 1595 u32 invalidActionFrames; 1596 u32 invalidBeaconFrames; 1597 u32 invalidMacHeaders; 1598 u32 invalidPafHeaders; 1599 u32 nonNanBeaconFrames; 1600 1601 u32 earlyActionFrames; 1602 u32 inDwActionFrames; 1603 u32 lateActionFrames; 1604 1605 /* TX stats */ 1606 u32 framesQueued; 1607 u32 totalTRSpUpdates; 1608 u32 completeByTRSp; 1609 u32 completeByTp75DW; 1610 u32 completeByTendDW; 1611 u32 lateActionFramesTx; 1612 } NanDWStats; 1613 1614 /* NAN MAC Statistics. */ 1615 typedef struct 1616 { 1617 /* RX stats */ 1618 u32 validFrames; 1619 u32 validActionFrames; 1620 u32 validBeaconFrames; 1621 u32 ignoredActionFrames; 1622 u32 ignoredBeaconFrames; 1623 u32 invalidFrames; 1624 u32 invalidActionFrames; 1625 u32 invalidBeaconFrames; 1626 u32 invalidMacHeaders; 1627 u32 invalidPafHeaders; 1628 u32 nonNanBeaconFrames; 1629 1630 u32 earlyActionFrames; 1631 u32 inDwActionFrames; 1632 u32 lateActionFrames; 1633 1634 /* TX stats */ 1635 u32 framesQueued; 1636 u32 totalTRSpUpdates; 1637 u32 completeByTRSp; 1638 u32 completeByTp75DW; 1639 u32 completeByTendDW; 1640 u32 lateActionFramesTx; 1641 1642 u32 twIncreases; 1643 u32 twDecreases; 1644 u32 twChanges; 1645 u32 twHighwater; 1646 u32 bloomFilterIndex; 1647 } NanMacStats; 1648 1649 /* NAN Sync Statistics*/ 1650 typedef struct 1651 { 1652 u64 currTsf; 1653 u64 myRank; 1654 u64 currAmRank; 1655 u64 lastAmRank; 1656 u32 currAmBTT; 1657 u32 lastAmBTT; 1658 u8 currAmHopCount; 1659 u8 currRole; 1660 u16 currClusterId; 1661 1662 u64 timeSpentInCurrRole; 1663 u64 totalTimeSpentAsMaster; 1664 u64 totalTimeSpentAsNonMasterSync; 1665 u64 totalTimeSpentAsNonMasterNonSync; 1666 u32 transitionsToAnchorMaster; 1667 u32 transitionsToMaster; 1668 u32 transitionsToNonMasterSync; 1669 u32 transitionsToNonMasterNonSync; 1670 u32 amrUpdateCount; 1671 u32 amrUpdateRankChangedCount; 1672 u32 amrUpdateBTTChangedCount; 1673 u32 amrUpdateHcChangedCount; 1674 u32 amrUpdateNewDeviceCount; 1675 u32 amrExpireCount; 1676 u32 mergeCount; 1677 u32 beaconsAboveHcLimit; 1678 u32 beaconsBelowRssiThresh; 1679 u32 beaconsIgnoredNoSpace; 1680 u32 beaconsForOurCluster; 1681 u32 beaconsForOtherCluster; 1682 u32 beaconCancelRequests; 1683 u32 beaconCancelFailures; 1684 u32 beaconUpdateRequests; 1685 u32 beaconUpdateFailures; 1686 u32 syncBeaconTxAttempts; 1687 u32 syncBeaconTxFailures; 1688 u32 discBeaconTxAttempts; 1689 u32 discBeaconTxFailures; 1690 u32 amHopCountExpireCount; 1691 u32 ndpChannelFreq; 1692 u32 ndpChannelFreq2; 1693 u32 schedUpdateChannelFreq; 1694 } NanSyncStats; 1695 1696 /* NAN Misc DE Statistics */ 1697 typedef struct 1698 { 1699 u32 validErrorRspMsgs; 1700 u32 validTransmitFollowupReqMsgs; 1701 u32 validTransmitFollowupRspMsgs; 1702 u32 validFollowupIndMsgs; 1703 u32 validConfigurationReqMsgs; 1704 u32 validConfigurationRspMsgs; 1705 u32 validStatsReqMsgs; 1706 u32 validStatsRspMsgs; 1707 u32 validEnableReqMsgs; 1708 u32 validEnableRspMsgs; 1709 u32 validDisableReqMsgs; 1710 u32 validDisableRspMsgs; 1711 u32 validDisableIndMsgs; 1712 u32 validEventIndMsgs; 1713 u32 validTcaReqMsgs; 1714 u32 validTcaRspMsgs; 1715 u32 validTcaIndMsgs; 1716 u32 invalidTransmitFollowupReqMsgs; 1717 u32 invalidConfigurationReqMsgs; 1718 u32 invalidStatsReqMsgs; 1719 u32 invalidEnableReqMsgs; 1720 u32 invalidDisableReqMsgs; 1721 u32 invalidTcaReqMsgs; 1722 } NanDeStats; 1723 1724 /* Publish Response Message structure */ 1725 typedef struct { 1726 u16 publish_id; 1727 } NanPublishResponse; 1728 1729 /* Subscribe Response Message structure */ 1730 typedef struct { 1731 u16 subscribe_id; 1732 } NanSubscribeResponse; 1733 1734 /* 1735 Stats Response Message structure 1736 The Discovery Engine response to a request by the Host for statistics. 1737 */ 1738 typedef struct { 1739 NanStatsType stats_type; 1740 union { 1741 NanPublishStats publish_stats; 1742 NanSubscribeStats subscribe_stats; 1743 NanMacStats mac_stats; 1744 NanSyncStats sync_stats; 1745 NanDeStats de_stats; 1746 NanDWStats dw_stats; 1747 } data; 1748 } NanStatsResponse; 1749 1750 /* Response returned for Initiators Data request */ 1751 typedef struct { 1752 /* 1753 Unique token Id generated on the initiator 1754 side used for a NDP session between two NAN devices 1755 */ 1756 NanDataPathId ndp_instance_id; 1757 } NanDataPathRequestResponse; 1758 1759 /* 1760 NAN Response messages 1761 */ 1762 typedef struct { 1763 NanStatusType status; /* contains the result code */ 1764 char nan_error[NAN_ERROR_STR_LEN]; /* Describe the NAN error type */ 1765 NanResponseType response_type; /* NanResponseType Definitions */ 1766 union { 1767 NanPublishResponse publish_response; 1768 NanSubscribeResponse subscribe_response; 1769 NanStatsResponse stats_response; 1770 NanDataPathRequestResponse data_request_response; 1771 NanCapabilities nan_capabilities; 1772 } body; 1773 } NanResponseMsg; 1774 1775 /* 1776 Publish Replied Indication 1777 The PublishRepliedInd Message is sent by the DE when an Active Subscribe is 1778 received over the air and it matches a Solicited PublishServiceReq which had 1779 been created with the replied_event_flag set. 1780 */ 1781 typedef struct { 1782 /* 1783 A 32 bit Requestor Instance Id which is sent to the Application. 1784 This Id will be sent in any subsequent UnmatchInd/FollowupInd 1785 messages 1786 */ 1787 u32 requestor_instance_id; 1788 u8 addr[NAN_MAC_ADDR_LEN]; 1789 /* 1790 If RSSI filtering was configured in NanPublishRequest then this 1791 field will contain the received RSSI value. 0 if not 1792 */ 1793 u8 rssi_value; 1794 } NanPublishRepliedInd; 1795 1796 /* 1797 Publish Terminated 1798 The PublishTerminatedInd message is sent by the DE whenever a Publish 1799 terminates from a user-specified timeout or a unrecoverable error in the DE. 1800 */ 1801 typedef struct { 1802 /* Id returned during the initial Publish */ 1803 u16 publish_id; 1804 /* 1805 For all user configured termination NAN_STATUS_SUCCESS 1806 and no other reasons expected from firmware. 1807 */ 1808 NanStatusType reason; 1809 char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */ 1810 } NanPublishTerminatedInd; 1811 1812 /* 1813 Match Indication 1814 The MatchInd message is sent once per responding MAC address whenever 1815 the Discovery Engine detects a match for a previous SubscribeServiceReq 1816 or PublishServiceReq. 1817 */ 1818 typedef struct { 1819 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1820 u16 publish_subscribe_id; 1821 /* 1822 A 32 bit Requestor Instance Id which is sent to the Application. 1823 This Id will be sent in any subsequent UnmatchInd/FollowupInd 1824 messages 1825 */ 1826 u32 requestor_instance_id; 1827 u8 addr[NAN_MAC_ADDR_LEN]; 1828 1829 /* 1830 Sequence of octets which were received in a Discovery Frame matching the 1831 Subscribe Request. 1832 */ 1833 u16 service_specific_info_len; 1834 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1835 1836 /* 1837 Ordered sequence of <length, value> pairs received in the Discovery Frame 1838 matching the Subscribe Request. 1839 */ 1840 u16 sdf_match_filter_len; 1841 u8 sdf_match_filter[NAN_MAX_MATCH_FILTER_LEN]; 1842 1843 /* 1844 flag to indicate if the Match occurred in a Beacon Frame or in a 1845 Service Discovery Frame. 1846 0 - Match occured in a Service Discovery Frame 1847 1 - Match occured in a Beacon Frame 1848 */ 1849 u8 match_occured_flag; 1850 1851 /* 1852 flag to indicate FW is out of resource and that it can no longer 1853 track this Service Name. The Host still need to send the received 1854 Match_Handle but duplicate MatchInd messages may be received on 1855 this Handle until the resource frees up. 1856 0 - FW is caching this match 1857 1 - FW is unable to cache this match 1858 */ 1859 u8 out_of_resource_flag; 1860 1861 /* 1862 If RSSI filtering was configured in NanSubscribeRequest then this 1863 field will contain the received RSSI value. 0 if not. 1864 All rssi values should be specified without sign. 1865 For eg: -70dBm should be specified as 70. 1866 */ 1867 u8 rssi_value; 1868 1869 /* 1870 optional attributes. Each optional attribute is associated with a flag 1871 which specifies whether the attribute is valid or not 1872 */ 1873 /* NAN Post Connectivity Capability received */ 1874 u8 is_conn_capability_valid; 1875 NanReceivePostConnectivityCapability conn_capability; 1876 1877 /* NAN Post Discover Capability */ 1878 u8 num_rx_discovery_attr; 1879 NanReceivePostDiscovery discovery_attr[NAN_MAX_POSTDISCOVERY_LEN]; 1880 1881 /* NAN Further availability Map */ 1882 u8 num_chans; 1883 NanFurtherAvailabilityChannel famchan[NAN_MAX_FAM_CHANNELS]; 1884 1885 /* NAN Cluster Attribute */ 1886 u8 cluster_attribute_len; 1887 u8 cluster_attribute[NAN_MAX_CLUSTER_ATTRIBUTE_LEN]; 1888 1889 /* NAN Cipher Suite */ 1890 u32 peer_cipher_type; 1891 1892 /* Security Context Identifiers length */ 1893 u32 scid_len; 1894 /* 1895 Security Context Identifier attribute contains PMKID 1896 shall be included in NDP setup and response messages. 1897 Security Context Identifier, Identifies the Security 1898 Context. For NAN Shared Key Cipher Suite, this field 1899 contains the 16 octet PMKID identifying the PMK used 1900 for setting up the Secure Data Path. 1901 */ 1902 u8 scid[NAN_MAX_SCID_BUF_LEN]; 1903 1904 /* Peer service discovery extended attributes */ 1905 NanSdeaCtrlParams peer_sdea_params; 1906 1907 /* 1908 Ranging indication and NanMatchAlg are not tied. 1909 Ex: NanMatchAlg can indicate Match_ONCE, but ranging 1910 indications can be continuous. All ranging indications 1911 depend on SDEA control parameters of ranging required for 1912 continuous, and ingress/egress values in the ranging config. 1913 Ranging indication data is notified if: 1914 1) Ranging required is enabled in SDEA. 1915 range info notified continuous. 1916 2) if range_limit ingress/egress MASKS are enabled 1917 notify once for ingress >= ingress_distance 1918 and egress <= egress_distance, same for ingress_egress_both 1919 3) if the Awake DW intervals are higher than the ranging intervals, 1920 priority is given to the device DW intervalsi. 1921 */ 1922 /* 1923 Range Info includes: 1924 1) distance to the NAN device with the MAC address indicated 1925 with ranged mac address. 1926 2) Ranging event matching the configuration of continuous/ingress/egress. 1927 */ 1928 NanRangeInfo range_info; 1929 1930 /* 1931 Sequence of values indicating the service specific info in SDEA 1932 */ 1933 u16 sdea_service_specific_info_len; 1934 u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN]; 1935 } NanMatchInd; 1936 1937 /* 1938 MatchExpired Indication 1939 The MatchExpiredInd message is sent whenever the Discovery Engine detects that 1940 a previously Matched Service has been gone for too long. If the previous 1941 MatchInd message for this Publish/Subscribe Id had the out_of_resource_flag 1942 set then this message will not be received 1943 */ 1944 typedef struct { 1945 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1946 u16 publish_subscribe_id; 1947 /* 1948 32 bit value sent by the DE in a previous 1949 MatchInd/FollowupInd to the application. 1950 */ 1951 u32 requestor_instance_id; 1952 } NanMatchExpiredInd; 1953 1954 /* 1955 Subscribe Terminated 1956 The SubscribeTerminatedInd message is sent by the DE whenever a 1957 Subscribe terminates from a user-specified timeout or a unrecoverable error in the DE. 1958 */ 1959 typedef struct { 1960 /* Id returned during initial Subscribe */ 1961 u16 subscribe_id; 1962 /* 1963 For all user configured termination NAN_STATUS_SUCCESS 1964 and no other reasons expected from firmware. 1965 */ 1966 NanStatusType reason; 1967 char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */ 1968 } NanSubscribeTerminatedInd; 1969 1970 /* 1971 Followup Indication Message 1972 The FollowupInd message is sent by the DE to the Host whenever it receives a 1973 Followup message from another peer. 1974 */ 1975 typedef struct { 1976 /* Publish or Subscribe Id of an earlier Publish/Subscribe */ 1977 u16 publish_subscribe_id; 1978 /* 1979 A 32 bit Requestor instance Id which is sent to the Application. 1980 This Id will be used in subsequent UnmatchInd/FollowupInd messages. 1981 */ 1982 u32 requestor_instance_id; 1983 u8 addr[NAN_MAC_ADDR_LEN]; 1984 1985 /* Flag which the DE uses to decide if received in a DW or a FAW*/ 1986 u8 dw_or_faw; /* 0=Received in a DW, 1 = Received in a FAW*/ 1987 1988 /* 1989 Sequence of values which further specify the published service beyond 1990 the service name 1991 */ 1992 u16 service_specific_info_len; 1993 u8 service_specific_info[NAN_MAX_SERVICE_SPECIFIC_INFO_LEN]; 1994 1995 /* 1996 Sequence of values indicating the service specific info in SDEA 1997 */ 1998 u16 sdea_service_specific_info_len; 1999 u8 sdea_service_specific_info[NAN_MAX_SDEA_SERVICE_SPECIFIC_INFO_LEN]; 2000 } NanFollowupInd; 2001 2002 /* 2003 Event data notifying the Mac address of the Discovery engine. 2004 which is reported as one of the Discovery engine event 2005 */ 2006 typedef struct { 2007 u8 addr[NAN_MAC_ADDR_LEN]; 2008 } NanMacAddressEvent; 2009 2010 /* 2011 Event data notifying the Cluster address of the cluster 2012 which is reported as one of the Discovery engine event 2013 */ 2014 typedef struct { 2015 u8 addr[NAN_MAC_ADDR_LEN]; 2016 } NanClusterEvent; 2017 2018 /* 2019 Discovery Engine Event Indication 2020 The Discovery Engine can inform the Host when significant events occur 2021 The data following the EventId is dependent upon the EventId type. 2022 In other words, each new event defined will carry a different 2023 structure of information back to the host. 2024 */ 2025 typedef struct { 2026 NanDiscEngEventType event_type; /* NAN Protocol Event Codes */ 2027 union { 2028 /* 2029 MacAddressEvent which will have 6 byte mac address 2030 of the Discovery engine. 2031 */ 2032 NanMacAddressEvent mac_addr; 2033 /* 2034 Cluster Event Data which will be obtained when the 2035 device starts a new cluster or joins a cluster. 2036 The event data will have 6 byte octet string of the 2037 cluster started or joined. 2038 */ 2039 NanClusterEvent cluster; 2040 } data; 2041 } NanDiscEngEventInd; 2042 2043 /* Cluster size TCA event*/ 2044 typedef struct { 2045 /* size of the cluster*/ 2046 u32 cluster_size; 2047 } NanTcaClusterEvent; 2048 2049 /* 2050 NAN TCA Indication 2051 The Discovery Engine can inform the Host when significant events occur. 2052 The data following the TcaId is dependent upon the TcaId type. 2053 In other words, each new event defined will carry a different structure 2054 of information back to the host. 2055 */ 2056 typedef struct { 2057 NanTcaType tca_type; 2058 /* flag which defines if the configured Threshold has risen above the threshold */ 2059 u8 rising_direction_evt_flag; /* 0 - no event, 1 - event */ 2060 2061 /* flag which defines if the configured Threshold has fallen below the threshold */ 2062 u8 falling_direction_evt_flag;/* 0 - no event, 1 - event */ 2063 union { 2064 /* 2065 This event in obtained when the cluser size threshold 2066 is crossed. Event will have the cluster size 2067 */ 2068 NanTcaClusterEvent cluster; 2069 } data; 2070 } NanTCAInd; 2071 2072 /* 2073 NAN Disabled Indication 2074 The NanDisableInd message indicates to the upper layers that the Discovery 2075 Engine has flushed all state and has been shutdown. When this message is received 2076 the DE is guaranteed to have left the NAN cluster it was part of and will have terminated 2077 any in progress Publishes or Subscribes. 2078 */ 2079 typedef struct { 2080 /* 2081 Following reasons expected: 2082 NAN_STATUS_SUCCESS 2083 NAN_STATUS_UNSUPPORTED_CONCURRENCY_NAN_DISABLED 2084 */ 2085 NanStatusType reason; 2086 char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */ 2087 } NanDisabledInd; 2088 2089 /* 2090 NAN Beacon or SDF Payload Indication 2091 The NanBeaconSdfPayloadInd message indicates to the upper layers that information 2092 elements were received either in a Beacon or SDF which needs to be delivered 2093 outside of a Publish/Subscribe Handle. 2094 */ 2095 typedef struct { 2096 /* The MAC address of the peer which sent the attributes.*/ 2097 u8 addr[NAN_MAC_ADDR_LEN]; 2098 /* 2099 Optional attributes. Each optional attribute is associated with a flag 2100 which specifies whether the attribute is valid or not 2101 */ 2102 /* NAN Receive Vendor Specific Attribute*/ 2103 u8 is_vsa_received; 2104 NanReceiveVendorSpecificAttribute vsa; 2105 2106 /* NAN Beacon or SDF Payload Received*/ 2107 u8 is_beacon_sdf_payload_received; 2108 NanBeaconSdfPayloadReceive data; 2109 } NanBeaconSdfPayloadInd; 2110 2111 /* 2112 Event Indication notifying the 2113 transmit followup in progress 2114 */ 2115 typedef struct { 2116 transaction_id id; 2117 /* 2118 Following reason codes returned: 2119 NAN_STATUS_SUCCESS 2120 NAN_STATUS_NO_OTA_ACK 2121 NAN_STATUS_PROTOCOL_FAILURE 2122 */ 2123 NanStatusType reason; 2124 char nan_reason[NAN_ERROR_STR_LEN]; /* Describe the NAN reason type */ 2125 } NanTransmitFollowupInd; 2126 2127 /* 2128 Data request Initiator/Responder 2129 app/service related info 2130 */ 2131 typedef struct { 2132 u16 ndp_app_info_len; 2133 u8 ndp_app_info[NAN_DP_MAX_APP_INFO_LEN]; 2134 } NanDataPathAppInfo; 2135 2136 /* QoS configuration */ 2137 typedef enum { 2138 NAN_DP_CONFIG_NO_QOS = 0, 2139 NAN_DP_CONFIG_QOS 2140 } NanDataPathQosCfg; 2141 2142 /* Configuration params of Data request Initiator/Responder */ 2143 typedef struct { 2144 /* Status Indicating Security/No Security */ 2145 NanDataPathSecurityCfgStatus security_cfg; 2146 NanDataPathQosCfg qos_cfg; 2147 } NanDataPathCfg; 2148 2149 /* Nan Data Path Initiator requesting a data session */ 2150 typedef struct { 2151 /* 2152 Unique Instance Id identifying the Responder's service. 2153 This is same as publish_id notified on the subscribe side 2154 in a publish/subscribe scenario 2155 */ 2156 u32 requestor_instance_id; /* Value 0 for no publish/subscribe */ 2157 2158 /* Config flag for channel request */ 2159 NanDataPathChannelCfg channel_request_type; 2160 /* Channel frequency in MHz to start data-path */ 2161 wifi_channel channel; 2162 /* 2163 Discovery MAC addr of the publisher/peer 2164 */ 2165 u8 peer_disc_mac_addr[NAN_MAC_ADDR_LEN]; 2166 /* 2167 Interface name on which this NDP session is to be started. 2168 This will be the same interface name provided during interface 2169 create. 2170 */ 2171 char ndp_iface[IFNAMSIZ+1]; 2172 /* Initiator/Responder Security/QoS configuration */ 2173 NanDataPathCfg ndp_cfg; 2174 /* App/Service information of the Initiator */ 2175 NanDataPathAppInfo app_info; 2176 /* NAN Cipher Suite Type */ 2177 u32 cipher_type; 2178 /* 2179 Nan Security Key Info is optional in Discovery phase. 2180 PMK or passphrase info can be passed during 2181 the NDP session. 2182 */ 2183 NanSecurityKeyInfo key_info; 2184 /* length of service name */ 2185 u32 service_name_len; 2186 /* 2187 UTF-8 encoded string identifying the service name. 2188 The service name field is only used if a Nan discovery 2189 is not associated with the NDP (out-of-band discovery). 2190 */ 2191 u8 service_name[NAN_MAX_SERVICE_NAME_LEN]; 2192 } NanDataPathInitiatorRequest; 2193 2194 /* 2195 Data struct to initiate a data response on the responder side 2196 for an indication received with a data request 2197 */ 2198 typedef struct { 2199 /* 2200 Unique token Id generated on the initiator/responder 2201 side used for a NDP session between two NAN devices 2202 */ 2203 NanDataPathId ndp_instance_id; 2204 /* 2205 Interface name on which this NDP session is to be started. 2206 This will be the same interface name provided during interface 2207 create. 2208 */ 2209 char ndp_iface[IFNAMSIZ+1]; 2210 /* Initiator/Responder Security/QoS configuration */ 2211 NanDataPathCfg ndp_cfg; 2212 /* App/Service information of the responder */ 2213 NanDataPathAppInfo app_info; 2214 /* Response Code indicating ACCEPT/REJECT/DEFER */ 2215 NanDataPathResponseCode rsp_code; 2216 /* NAN Cipher Suite Type */ 2217 u32 cipher_type; 2218 /* 2219 Nan Security Key Info is optional in Discovery phase. 2220 PMK or passphrase info can be passed during 2221 the NDP session. 2222 */ 2223 NanSecurityKeyInfo key_info; 2224 /* length of service name */ 2225 u32 service_name_len; 2226 /* 2227 UTF-8 encoded string identifying the service name. 2228 The service name field is only used if a Nan discovery 2229 is not associated with the NDP (out-of-band discovery). 2230 */ 2231 u8 service_name[NAN_MAX_SERVICE_NAME_LEN]; 2232 } NanDataPathIndicationResponse; 2233 2234 /* NDP termination info */ 2235 typedef struct { 2236 u8 num_ndp_instances; 2237 /* 2238 Unique token Id generated on the initiator/responder side 2239 used for a NDP session between two NAN devices 2240 */ 2241 NanDataPathId ndp_instance_id[]; 2242 } NanDataPathEndRequest; 2243 2244 /* 2245 Event indication received on the 2246 responder side when a Nan Data request or 2247 NDP session is initiated on the Initiator side 2248 */ 2249 typedef struct { 2250 /* 2251 Unique Instance Id corresponding to a service/session. 2252 This is similar to the publish_id generated on the 2253 publisher side 2254 */ 2255 u16 service_instance_id; 2256 /* Discovery MAC addr of the peer/initiator */ 2257 u8 peer_disc_mac_addr[NAN_MAC_ADDR_LEN]; 2258 /* 2259 Unique token Id generated on the initiator/responder side 2260 used for a NDP session between two NAN devices 2261 */ 2262 NanDataPathId ndp_instance_id; 2263 /* Initiator/Responder Security/QoS configuration */ 2264 NanDataPathCfg ndp_cfg; 2265 /* App/Service information of the initiator */ 2266 NanDataPathAppInfo app_info; 2267 } NanDataPathRequestInd; 2268 2269 /* 2270 Event indication of data confirm is received on both 2271 initiator and responder side confirming a NDP session 2272 */ 2273 typedef struct { 2274 /* 2275 Unique token Id generated on the initiator/responder side 2276 used for a NDP session between two NAN devices 2277 */ 2278 NanDataPathId ndp_instance_id; 2279 /* 2280 NDI mac address of the peer 2281 (required to derive target ipv6 address) 2282 */ 2283 u8 peer_ndi_mac_addr[NAN_MAC_ADDR_LEN]; 2284 /* App/Service information of Initiator/Responder */ 2285 NanDataPathAppInfo app_info; 2286 /* Response code indicating ACCEPT/REJECT/DEFER */ 2287 NanDataPathResponseCode rsp_code; 2288 /* 2289 Reason code indicating the cause for REJECT. 2290 NAN_STATUS_SUCCESS and NAN_STATUS_PROTOCOL_FAILURE are 2291 expected reason codes. 2292 */ 2293 NanStatusType reason_code; 2294 /* Number of channels for which info is indicated */ 2295 u32 num_channels; 2296 /* 2297 Data indicating the Channel list and BW of the channel. 2298 */ 2299 NanChannelInfo channel_info[NAN_MAX_CHANNEL_INFO_SUPPORTED]; 2300 } NanDataPathConfirmInd; 2301 2302 /* 2303 Event indication of schedule update is received on both 2304 initiator and responder when a schedule change occurs 2305 */ 2306 typedef struct { 2307 /* 2308 NMI mac address 2309 */ 2310 u8 peer_mac_addr[NAN_MAC_ADDR_LEN]; 2311 /* 2312 Reason code indicating the cause of schedule update. 2313 BIT_0 NSS Update 2314 BIT_1 Channel list update 2315 */ 2316 u32 schedule_update_reason_code; 2317 /* Number of channels for which info is indicated */ 2318 u32 num_channels; 2319 /* 2320 Data indicating the Channel list and BW of the channel. 2321 */ 2322 NanChannelInfo channel_info[NAN_MAX_CHANNEL_INFO_SUPPORTED]; 2323 /* Number of NDP instance Ids */ 2324 u8 num_ndp_instances; 2325 /* 2326 Unique token Id generated on the initiator/responder side 2327 used for a NDP session between two NAN devices 2328 */ 2329 NanDataPathId ndp_instance_id[]; 2330 } NanDataPathScheduleUpdateInd; 2331 2332 /* 2333 Event indication received on the 2334 initiator/responder side terminating 2335 a NDP session 2336 */ 2337 typedef struct { 2338 u8 num_ndp_instances; 2339 /* 2340 Unique token Id generated on the initiator/responder side 2341 used for a NDP session between two NAN devices 2342 */ 2343 NanDataPathId ndp_instance_id[]; 2344 } NanDataPathEndInd; 2345 2346 /* 2347 Event indicating Range Request received on the 2348 Published side. 2349 */ 2350 typedef struct { 2351 u16 publish_id;/* id is existing publish */ 2352 /* Range Requestor's MAC address */ 2353 u8 range_req_intf_addr[NAN_MAC_ADDR_LEN]; 2354 } NanRangeRequestInd; 2355 2356 /* 2357 Event indicating Range report on the 2358 Published side. 2359 */ 2360 typedef struct { 2361 u16 publish_id;/* id is existing publish */ 2362 /* Range Requestor's MAC address */ 2363 u8 range_req_intf_addr[NAN_MAC_ADDR_LEN]; 2364 /* 2365 Distance to the NAN device with the MAC address indicated 2366 with ranged mac address. 2367 */ 2368 u32 range_measurement_mm; 2369 } NanRangeReportInd; 2370 2371 /* Response and Event Callbacks */ 2372 typedef struct { 2373 /* NotifyResponse invoked to notify the status of the Request */ 2374 void (*NotifyResponse)(transaction_id id, NanResponseMsg* rsp_data); 2375 /* Callbacks for various Events */ 2376 void (*EventPublishReplied)(NanPublishRepliedInd *event); 2377 void (*EventPublishTerminated)(NanPublishTerminatedInd* event); 2378 void (*EventMatch) (NanMatchInd* event); 2379 void (*EventMatchExpired) (NanMatchExpiredInd* event); 2380 void (*EventSubscribeTerminated) (NanSubscribeTerminatedInd* event); 2381 void (*EventFollowup) (NanFollowupInd* event); 2382 void (*EventDiscEngEvent) (NanDiscEngEventInd* event); 2383 void (*EventDisabled) (NanDisabledInd* event); 2384 void (*EventTca) (NanTCAInd* event); 2385 void (*EventBeaconSdfPayload) (NanBeaconSdfPayloadInd* event); 2386 void (*EventDataRequest)(NanDataPathRequestInd* event); 2387 void (*EventDataConfirm)(NanDataPathConfirmInd* event); 2388 void (*EventDataEnd)(NanDataPathEndInd* event); 2389 void (*EventTransmitFollowup) (NanTransmitFollowupInd* event); 2390 void (*EventRangeRequest) (NanRangeRequestInd* event); 2391 void (*EventRangeReport) (NanRangeReportInd* event); 2392 void (*EventScheduleUpdate)(NanDataPathScheduleUpdateInd* event); 2393 } NanCallbackHandler; 2394 2395 /**@brief nan_enable_request 2396 * Enable NAN functionality 2397 * 2398 * @param transaction_id: 2399 * @param wifi_interface_handle: 2400 * @param NanEnableRequest: 2401 * @return Synchronous wifi_error 2402 * @return Asynchronous NotifyResponse CB return 2403 * NAN_STATUS_SUCCESS 2404 * NAN_STATUS_ALREADY_ENABLED 2405 * NAN_STATUS_INVALID_PARAM 2406 * NAN_STATUS_INTERNAL_FAILURE 2407 * NAN_STATUS_PROTOCOL_FAILURE 2408 * NAN_STATUS_NAN_NOT_ALLOWED 2409 */ 2410 wifi_error nan_enable_request(transaction_id id, 2411 wifi_interface_handle iface, 2412 NanEnableRequest* msg); 2413 2414 /**@brief nan_disbale_request 2415 * Disable NAN functionality. 2416 * 2417 * @param transaction_id: 2418 * @param wifi_interface_handle: 2419 * @param NanDisableRequest: 2420 * @return Synchronous wifi_error 2421 * @return Asynchronous NotifyResponse CB return 2422 * NAN_STATUS_SUCCESS 2423 * NAN_STATUS_PROTOCOL_FAILURE 2424 * 2425 */ 2426 wifi_error nan_disable_request(transaction_id id, 2427 wifi_interface_handle iface); 2428 2429 /**@brief nan_publish_request 2430 * Publish request to advertize a service 2431 * 2432 * @param transaction_id: 2433 * @param wifi_interface_handle: 2434 * @param NanPublishRequest: 2435 * @return Synchronous wifi_error 2436 * @return Asynchronous NotifyResponse CB return 2437 * NAN_STATUS_SUCCESS 2438 * NAN_STATUS_INVALID_PARAM 2439 * NAN_STATUS_PROTOCOL_FAILURE 2440 * NAN_STATUS_NO_RESOURCE_AVAILABLE 2441 * NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID 2442 */ 2443 wifi_error nan_publish_request(transaction_id id, 2444 wifi_interface_handle iface, 2445 NanPublishRequest* msg); 2446 2447 /**@brief nan_publish_cancel_request 2448 * Cancel previous publish request 2449 * 2450 * @param transaction_id: 2451 * @param wifi_interface_handle: 2452 * @param NanPublishCancelRequest: 2453 * @return Synchronous wifi_error 2454 * @return Asynchronous NotifyResponse CB return 2455 * NAN_STATUS_SUCCESS 2456 * NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID 2457 * NAN_STATUS_INTERNAL_FAILURE 2458 */ 2459 wifi_error nan_publish_cancel_request(transaction_id id, 2460 wifi_interface_handle iface, 2461 NanPublishCancelRequest* msg); 2462 2463 /**@brief nan_subscribe_request 2464 * Subscribe request to search for a service 2465 * 2466 * @param transaction_id: 2467 * @param wifi_interface_handle: 2468 * @param NanSubscribeRequest: 2469 * @return Synchronous wifi_error 2470 * @return Asynchronous NotifyResponse CB return 2471 * NAN_STATUS_SUCCESS 2472 * NAN_STATUS_INVALID_PARAM 2473 * NAN_STATUS_PROTOCOL_FAILURE 2474 * NAN_STATUS_INTERNAL_FAILURE 2475 * NAN_STATUS_NO_SPACE_AVAILABLE 2476 * NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID 2477 */ 2478 wifi_error nan_subscribe_request(transaction_id id, 2479 wifi_interface_handle iface, 2480 NanSubscribeRequest* msg); 2481 2482 /**@brief nan_subscribe_cancel_request 2483 * Cancel previous subscribe requests. 2484 * 2485 * @param transaction_id: 2486 * @param wifi_interface_handle: 2487 * @param NanSubscribeRequest: 2488 * @return Synchronous wifi_error 2489 * @return Asynchronous NotifyResponse CB return 2490 * NAN_STATUS_SUCCESS 2491 * NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID 2492 * NAN_STATUS_INTERNAL_FAILURE 2493 */ 2494 wifi_error nan_subscribe_cancel_request(transaction_id id, 2495 wifi_interface_handle iface, 2496 NanSubscribeCancelRequest* msg); 2497 2498 /**@brief nan_transmit_followup_request 2499 * NAN transmit follow up request 2500 * 2501 * @param transaction_id: 2502 * @param wifi_interface_handle: 2503 * @param NanTransmitFollowupRequest: 2504 * @return Synchronous wifi_error 2505 * @return Asynchronous NotifyResponse CB return 2506 * NAN_STATUS_SUCCESS 2507 * NAN_STATUS_INVALID_PARAM 2508 * NAN_STATUS_INTERNAL_FAILURE 2509 * NAN_STATUS_INVALID_PUBLISH_SUBSCRIBE_ID 2510 * NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID 2511 * NAN_STATUS_FOLLOWUP_QUEUE_FULL 2512 * @return Asynchronous TransmitFollowupInd CB return 2513 * NAN_STATUS_SUCCESS 2514 * NAN_STATUS_PROTOCOL_FAILURE 2515 * NAN_STATUS_NO_OTA_ACK 2516 */ 2517 wifi_error nan_transmit_followup_request(transaction_id id, 2518 wifi_interface_handle iface, 2519 NanTransmitFollowupRequest* msg); 2520 2521 /**@brief nan_stats_request 2522 * Request NAN statistics from Discovery Engine. 2523 * 2524 * @param transaction_id: 2525 * @param wifi_interface_handle: 2526 * @param NanStatsRequest: 2527 * @return Synchronous wifi_error 2528 * @return Asynchronous NotifyResponse CB return 2529 * NAN_STATUS_SUCCESS 2530 * NAN_STATUS_INTERNAL_FAILURE 2531 * NAN_STATUS_INVALID_PARAM 2532 */ 2533 wifi_error nan_stats_request(transaction_id id, 2534 wifi_interface_handle iface, 2535 NanStatsRequest* msg); 2536 2537 /**@brief nan_config_request 2538 * NAN configuration request. 2539 * 2540 * @param transaction_id: 2541 * @param wifi_interface_handle: 2542 * @param NanConfigRequest: 2543 * @return Synchronous wifi_error 2544 * @return Asynchronous NotifyResponse CB return 2545 * NAN_STATUS_SUCCESS 2546 * NAN_STATUS_INVALID_PARAM 2547 * NAN_STATUS_PROTOCOL_FAILURE 2548 * NAN_STATUS_INTERNAL_FAILURE 2549 */ 2550 wifi_error nan_config_request(transaction_id id, 2551 wifi_interface_handle iface, 2552 NanConfigRequest* msg); 2553 2554 /**@brief nan_tca_request 2555 * Configure the various Threshold crossing alerts 2556 * 2557 * @param transaction_id: 2558 * @param wifi_interface_handle: 2559 * @param NanStatsRequest: 2560 * @return Synchronous wifi_error 2561 * @return Asynchronous NotifyResponse CB return 2562 * NAN_STATUS_SUCCESS 2563 * NAN_STATUS_INVALID_PARAM 2564 * NAN_STATUS_INTERNAL_FAILURE 2565 */ 2566 wifi_error nan_tca_request(transaction_id id, 2567 wifi_interface_handle iface, 2568 NanTCARequest* msg); 2569 2570 /**@brief nan_beacon_sdf_payload_request 2571 * Set NAN Beacon or sdf payload to discovery engine. 2572 * This instructs the Discovery Engine to begin publishing the 2573 * received payload in any Beacon or Service Discovery Frame transmitted 2574 * 2575 * @param transaction_id: 2576 * @param wifi_interface_handle: 2577 * @param NanStatsRequest: 2578 * @return Synchronous wifi_error 2579 * @return Asynchronous NotifyResponse CB return 2580 * NAN_STATUS_SUCCESS 2581 * NAN_STATUS_INVALID_PARAM 2582 * NAN_STATUS_INTERNAL_FAILURE 2583 */ 2584 wifi_error nan_beacon_sdf_payload_request(transaction_id id, 2585 wifi_interface_handle iface, 2586 NanBeaconSdfPayloadRequest* msg); 2587 2588 /* Register NAN callbacks. */ 2589 wifi_error nan_register_handler(wifi_interface_handle iface, 2590 NanCallbackHandler handlers); 2591 2592 /* Get NAN HAL version. */ 2593 wifi_error nan_get_version(wifi_handle handle, 2594 NanVersion* version); 2595 2596 /**@brief nan_get_capabilities 2597 * Get NAN Capabilities 2598 * 2599 * @param transaction_id: 2600 * @param wifi_interface_handle: 2601 * @return Synchronous wifi_error 2602 * @return Asynchronous NotifyResponse CB return 2603 * NAN_STATUS_SUCCESS 2604 */ 2605 /* Get NAN capabilities. */ 2606 wifi_error nan_get_capabilities(transaction_id id, 2607 wifi_interface_handle iface); 2608 2609 /* ========== Nan Data Path APIs ================ */ 2610 /**@brief nan_data_interface_create 2611 * Create NAN Data Interface. 2612 * 2613 * @param transaction_id: 2614 * @param wifi_interface_handle: 2615 * @param iface_name: 2616 * @return Synchronous wifi_error 2617 * @return Asynchronous NotifyResponse CB return 2618 * NAN_STATUS_SUCCESS 2619 * NAN_STATUS_INVALID_PARAM 2620 * NAN_STATUS_INTERNAL_FAILURE 2621 */ 2622 wifi_error nan_data_interface_create(transaction_id id, 2623 wifi_interface_handle iface, 2624 char* iface_name); 2625 2626 /**@brief nan_data_interface_delete 2627 * Delete NAN Data Interface. 2628 * 2629 * @param transaction_id: 2630 * @param wifi_interface_handle: 2631 * @param iface_name: 2632 * @return Synchronous wifi_error 2633 * @return Asynchronous NotifyResponse CB return 2634 * NAN_STATUS_SUCCESS 2635 * NAN_STATUS_INVALID_PARAM 2636 * NAN_STATUS_INTERNAL_FAILURE 2637 */ 2638 wifi_error nan_data_interface_delete(transaction_id id, 2639 wifi_interface_handle iface, 2640 char* iface_name); 2641 2642 /**@brief nan_data_request_initiator 2643 * Initiate a NAN Data Path session. 2644 * 2645 * @param transaction_id: 2646 * @param wifi_interface_handle: 2647 * @param NanDataPathInitiatorRequest: 2648 * @return Synchronous wifi_error 2649 * @return Asynchronous NotifyResponse CB return 2650 * NAN_STATUS_SUCCESS 2651 * NAN_STATUS_INVALID_PARAM 2652 * NAN_STATUS_INTERNAL_FAILURE 2653 * NAN_STATUS_PROTOCOL_FAILURE 2654 * NAN_STATUS_INVALID_REQUESTOR_INSTANCE_ID 2655 */ 2656 wifi_error nan_data_request_initiator(transaction_id id, 2657 wifi_interface_handle iface, 2658 NanDataPathInitiatorRequest* msg); 2659 2660 /**@brief nan_data_indication_response 2661 * Response to a data indication received 2662 * corresponding to a NDP session. An indication 2663 * is received with a data request and the responder 2664 * will send a data response 2665 * 2666 * @param transaction_id: 2667 * @param wifi_interface_handle: 2668 * @param NanDataPathIndicationResponse: 2669 * @return Synchronous wifi_error 2670 * @return Asynchronous NotifyResponse CB return 2671 * NAN_STATUS_SUCCESS 2672 * NAN_STATUS_INVALID_PARAM 2673 * NAN_STATUS_INTERNAL_FAILURE 2674 * NAN_STATUS_PROTOCOL_FAILURE 2675 * NAN_STATUS_INVALID_NDP_ID 2676 */ 2677 wifi_error nan_data_indication_response(transaction_id id, 2678 wifi_interface_handle iface, 2679 NanDataPathIndicationResponse* msg); 2680 2681 /**@brief nan_data_end 2682 * NDL termination request: from either Initiator/Responder 2683 * 2684 * @param transaction_id: 2685 * @param wifi_interface_handle: 2686 * @param NanDataPathEndRequest: 2687 * @return Synchronous wifi_error 2688 * @return Asynchronous NotifyResponse CB return 2689 * NAN_STATUS_SUCCESS 2690 * NAN_STATUS_INVALID_PARAM 2691 * NAN_STATUS_INTERNAL_FAILURE 2692 * NAN_STATUS_PROTOCOL_FAILURE 2693 * NAN_STATUS_INVALID_NDP_ID 2694 */ 2695 wifi_error nan_data_end(transaction_id id, 2696 wifi_interface_handle iface, 2697 NanDataPathEndRequest* msg); 2698 #ifdef __cplusplus 2699 } 2700 #endif /* __cplusplus */ 2701 2702 #endif /* __NAN_H__ */ 2703