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