1 /* 2 * Wi-Fi Direct - P2P module 3 * Copyright (c) 2009-2010, Atheros Communications 4 * 5 * This software may be distributed under the terms of the BSD license. 6 * See README for more details. 7 */ 8 9 #ifndef P2P_H 10 #define P2P_H 11 12 /** 13 * P2P_MAX_REG_CLASSES - Maximum number of regulatory classes 14 */ 15 #define P2P_MAX_REG_CLASSES 10 16 17 /** 18 * P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class 19 */ 20 #define P2P_MAX_REG_CLASS_CHANNELS 20 21 22 /** 23 * struct p2p_channels - List of supported channels 24 */ 25 struct p2p_channels { 26 /** 27 * struct p2p_reg_class - Supported regulatory class 28 */ 29 struct p2p_reg_class { 30 /** 31 * reg_class - Regulatory class (IEEE 802.11-2007, Annex J) 32 */ 33 u8 reg_class; 34 35 /** 36 * channel - Supported channels 37 */ 38 u8 channel[P2P_MAX_REG_CLASS_CHANNELS]; 39 40 /** 41 * channels - Number of channel entries in use 42 */ 43 size_t channels; 44 } reg_class[P2P_MAX_REG_CLASSES]; 45 46 /** 47 * reg_classes - Number of reg_class entries in use 48 */ 49 size_t reg_classes; 50 }; 51 52 enum p2p_wps_method { 53 WPS_NOT_READY, WPS_PIN_DISPLAY, WPS_PIN_KEYPAD, WPS_PBC 54 }; 55 56 /** 57 * struct p2p_go_neg_results - P2P Group Owner Negotiation results 58 */ 59 struct p2p_go_neg_results { 60 /** 61 * status - Negotiation result (Status Code) 62 * 63 * 0 (P2P_SC_SUCCESS) indicates success. Non-zero values indicate 64 * failed negotiation. 65 */ 66 int status; 67 68 /** 69 * role_go - Whether local end is Group Owner 70 */ 71 int role_go; 72 73 /** 74 * freq - Frequency of the group operational channel in MHz 75 */ 76 int freq; 77 78 int ht40; 79 80 /** 81 * ssid - SSID of the group 82 */ 83 u8 ssid[32]; 84 85 /** 86 * ssid_len - Length of SSID in octets 87 */ 88 size_t ssid_len; 89 90 /** 91 * psk - WPA pre-shared key (256 bits) (GO only) 92 */ 93 u8 psk[32]; 94 95 /** 96 * psk_set - Whether PSK field is configured (GO only) 97 */ 98 int psk_set; 99 100 /** 101 * passphrase - WPA2-Personal passphrase for the group (GO only) 102 */ 103 char passphrase[64]; 104 105 /** 106 * peer_device_addr - P2P Device Address of the peer 107 */ 108 u8 peer_device_addr[ETH_ALEN]; 109 110 /** 111 * peer_interface_addr - P2P Interface Address of the peer 112 */ 113 u8 peer_interface_addr[ETH_ALEN]; 114 115 /** 116 * wps_method - WPS method to be used during provisioning 117 */ 118 enum p2p_wps_method wps_method; 119 120 #define P2P_MAX_CHANNELS 50 121 122 /** 123 * freq_list - Zero-terminated list of possible operational channels 124 */ 125 int freq_list[P2P_MAX_CHANNELS]; 126 127 /** 128 * persistent_group - Whether the group should be made persistent 129 * 0 = not persistent 130 * 1 = persistent group without persistent reconnect 131 * 2 = persistent group with persistent reconnect 132 */ 133 int persistent_group; 134 135 /** 136 * peer_config_timeout - Peer configuration timeout (in 10 msec units) 137 */ 138 unsigned int peer_config_timeout; 139 }; 140 141 struct p2p_data; 142 143 enum p2p_scan_type { 144 P2P_SCAN_SOCIAL, 145 P2P_SCAN_FULL, 146 P2P_SCAN_SOCIAL_PLUS_ONE 147 }; 148 149 #define P2P_MAX_WPS_VENDOR_EXT 10 150 151 /** 152 * struct p2p_peer_info - P2P peer information 153 */ 154 struct p2p_peer_info { 155 /** 156 * p2p_device_addr - P2P Device Address of the peer 157 */ 158 u8 p2p_device_addr[ETH_ALEN]; 159 160 /** 161 * pri_dev_type - Primary Device Type 162 */ 163 u8 pri_dev_type[8]; 164 165 /** 166 * device_name - Device Name (0..32 octets encoded in UTF-8) 167 */ 168 char device_name[33]; 169 170 /** 171 * manufacturer - Manufacturer (0..64 octets encoded in UTF-8) 172 */ 173 char manufacturer[65]; 174 175 /** 176 * model_name - Model Name (0..32 octets encoded in UTF-8) 177 */ 178 char model_name[33]; 179 180 /** 181 * model_number - Model Number (0..32 octets encoded in UTF-8) 182 */ 183 char model_number[33]; 184 185 /** 186 * serial_number - Serial Number (0..32 octets encoded in UTF-8) 187 */ 188 char serial_number[33]; 189 190 /** 191 * level - Signal level 192 */ 193 int level; 194 195 /** 196 * config_methods - WPS Configuration Methods 197 */ 198 u16 config_methods; 199 200 /** 201 * dev_capab - Device Capabilities 202 */ 203 u8 dev_capab; 204 205 /** 206 * group_capab - Group Capabilities 207 */ 208 u8 group_capab; 209 210 /** 211 * wps_sec_dev_type_list - WPS secondary device type list 212 * 213 * This list includes from 0 to 16 Secondary Device Types as indicated 214 * by wps_sec_dev_type_list_len (8 * number of types). 215 */ 216 u8 wps_sec_dev_type_list[128]; 217 218 /** 219 * wps_sec_dev_type_list_len - Length of secondary device type list 220 */ 221 size_t wps_sec_dev_type_list_len; 222 223 struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT]; 224 225 /** 226 * wfd_subelems - Wi-Fi Display subelements from WFD IE(s) 227 */ 228 struct wpabuf *wfd_subelems; 229 }; 230 231 enum p2p_prov_disc_status { 232 P2P_PROV_DISC_SUCCESS, 233 P2P_PROV_DISC_TIMEOUT, 234 P2P_PROV_DISC_REJECTED, 235 P2P_PROV_DISC_TIMEOUT_JOIN, 236 }; 237 238 struct p2p_channel { 239 u8 op_class; 240 u8 chan; 241 }; 242 243 /** 244 * struct p2p_config - P2P configuration 245 * 246 * This configuration is provided to the P2P module during initialization with 247 * p2p_init(). 248 */ 249 struct p2p_config { 250 /** 251 * country - Country code to use in P2P operations 252 */ 253 char country[3]; 254 255 /** 256 * reg_class - Regulatory class for own listen channel 257 */ 258 u8 reg_class; 259 260 /** 261 * channel - Own listen channel 262 */ 263 u8 channel; 264 265 /** 266 * Regulatory class for own operational channel 267 */ 268 u8 op_reg_class; 269 270 /** 271 * op_channel - Own operational channel 272 */ 273 u8 op_channel; 274 275 /** 276 * cfg_op_channel - Whether op_channel is hardcoded in configuration 277 */ 278 u8 cfg_op_channel; 279 280 /** 281 * channels - Own supported regulatory classes and channels 282 * 283 * List of supposerted channels per regulatory class. The regulatory 284 * classes are defined in IEEE Std 802.11-2007 Annex J and the 285 * numbering of the clases depends on the configured country code. 286 */ 287 struct p2p_channels channels; 288 289 /** 290 * num_pref_chan - Number of pref_chan entries 291 */ 292 unsigned int num_pref_chan; 293 294 /** 295 * pref_chan - Preferred channels for GO Negotiation 296 */ 297 struct p2p_channel *pref_chan; 298 299 /** 300 * pri_dev_type - Primary Device Type (see WPS) 301 */ 302 u8 pri_dev_type[8]; 303 304 /** 305 * P2P_SEC_DEVICE_TYPES - Maximum number of secondary device types 306 */ 307 #define P2P_SEC_DEVICE_TYPES 5 308 309 /** 310 * sec_dev_type - Optional secondary device types 311 */ 312 u8 sec_dev_type[P2P_SEC_DEVICE_TYPES][8]; 313 314 /** 315 * num_sec_dev_types - Number of sec_dev_type entries 316 */ 317 size_t num_sec_dev_types; 318 319 /** 320 * dev_addr - P2P Device Address 321 */ 322 u8 dev_addr[ETH_ALEN]; 323 324 /** 325 * dev_name - Device Name 326 */ 327 char *dev_name; 328 329 char *manufacturer; 330 char *model_name; 331 char *model_number; 332 char *serial_number; 333 334 u8 uuid[16]; 335 u16 config_methods; 336 337 /** 338 * concurrent_operations - Whether concurrent operations are supported 339 */ 340 int concurrent_operations; 341 342 /** 343 * max_peers - Maximum number of discovered peers to remember 344 * 345 * If more peers are discovered, older entries will be removed to make 346 * room for the new ones. 347 */ 348 size_t max_peers; 349 350 /** 351 * p2p_intra_bss - Intra BSS communication is supported 352 */ 353 int p2p_intra_bss; 354 355 /** 356 * ssid_postfix - Postfix data to add to the SSID 357 * 358 * This data will be added to the end of the SSID after the 359 * DIRECT-<random two octets> prefix. 360 */ 361 u8 ssid_postfix[32 - 9]; 362 363 /** 364 * ssid_postfix_len - Length of the ssid_postfix data 365 */ 366 size_t ssid_postfix_len; 367 368 /** 369 * max_listen - Maximum listen duration in ms 370 */ 371 unsigned int max_listen; 372 373 /** 374 * msg_ctx - Context to use with wpa_msg() calls 375 */ 376 void *msg_ctx; 377 378 /** 379 * cb_ctx - Context to use with callback functions 380 */ 381 void *cb_ctx; 382 383 384 /* Callbacks to request lower layer driver operations */ 385 386 /** 387 * p2p_scan - Request a P2P scan/search 388 * @ctx: Callback context from cb_ctx 389 * @type: Scan type 390 * @freq: Specific frequency (MHz) to scan or 0 for no restriction 391 * @num_req_dev_types: Number of requested device types 392 * @req_dev_types: Array containing requested device types 393 * @dev_id: Device ID to search for or %NULL to find all devices 394 * @pw_id: Device Password ID 395 * Returns: 0 on success, -1 on failure 396 * 397 * This callback function is used to request a P2P scan or search 398 * operation to be completed. Type type argument specifies which type 399 * of scan is to be done. @P2P_SCAN_SOCIAL indicates that only the 400 * social channels (1, 6, 11) should be scanned. @P2P_SCAN_FULL 401 * indicates that all channels are to be scanned. 402 * @P2P_SCAN_SOCIAL_PLUS_ONE request scan of all the social channels 403 * plus one extra channel specified by freq. 404 * 405 * The full scan is used for the initial scan to find group owners from 406 * all. The other types are used during search phase scan of the social 407 * channels (with potential variation if the Listen channel of the 408 * target peer is known or if other channels are scanned in steps). 409 * 410 * The scan results are returned after this call by calling 411 * p2p_scan_res_handler() for each scan result that has a P2P IE and 412 * then calling p2p_scan_res_handled() to indicate that all scan 413 * results have been indicated. 414 */ 415 int (*p2p_scan)(void *ctx, enum p2p_scan_type type, int freq, 416 unsigned int num_req_dev_types, 417 const u8 *req_dev_types, const u8 *dev_id, u16 pw_id); 418 419 /** 420 * send_probe_resp - Transmit a Probe Response frame 421 * @ctx: Callback context from cb_ctx 422 * @buf: Probe Response frame (including the header and body) 423 * Returns: 0 on success, -1 on failure 424 * 425 * This function is used to reply to Probe Request frames that were 426 * indicated with a call to p2p_probe_req_rx(). The response is to be 427 * sent on the same channel or to be dropped if the driver is not 428 * anymore listening to Probe Request frames. 429 * 430 * Alternatively, the responsibility for building the Probe Response 431 * frames in Listen state may be in another system component in which 432 * case this function need to be implemented (i.e., the function 433 * pointer can be %NULL). The WPS and P2P IEs to be added for Probe 434 * Response frames in such a case are available from the 435 * start_listen() callback. It should be noted that the received Probe 436 * Request frames must be indicated by calling p2p_probe_req_rx() even 437 * if this send_probe_resp() is not used. 438 */ 439 int (*send_probe_resp)(void *ctx, const struct wpabuf *buf); 440 441 /** 442 * send_action - Transmit an Action frame 443 * @ctx: Callback context from cb_ctx 444 * @freq: Frequency in MHz for the channel on which to transmit 445 * @dst: Destination MAC address (Address 1) 446 * @src: Source MAC address (Address 2) 447 * @bssid: BSSID (Address 3) 448 * @buf: Frame body (starting from Category field) 449 * @len: Length of buf in octets 450 * @wait_time: How many msec to wait for a response frame 451 * Returns: 0 on success, -1 on failure 452 * 453 * The Action frame may not be transmitted immediately and the status 454 * of the transmission must be reported by calling 455 * p2p_send_action_cb() once the frame has either been transmitted or 456 * it has been dropped due to excessive retries or other failure to 457 * transmit. 458 */ 459 int (*send_action)(void *ctx, unsigned int freq, const u8 *dst, 460 const u8 *src, const u8 *bssid, const u8 *buf, 461 size_t len, unsigned int wait_time); 462 463 /** 464 * send_action_done - Notify that Action frame sequence was completed 465 * @ctx: Callback context from cb_ctx 466 * 467 * This function is called when the Action frame sequence that was 468 * started with send_action() has been completed, i.e., when there is 469 * no need to wait for a response from the destination peer anymore. 470 */ 471 void (*send_action_done)(void *ctx); 472 473 /** 474 * start_listen - Start Listen state 475 * @ctx: Callback context from cb_ctx 476 * @freq: Frequency of the listen channel in MHz 477 * @duration: Duration for the Listen state in milliseconds 478 * @probe_resp_ie: IE(s) to be added to Probe Response frames 479 * Returns: 0 on success, -1 on failure 480 * 481 * This Listen state may not start immediately since the driver may 482 * have other pending operations to complete first. Once the Listen 483 * state has started, p2p_listen_cb() must be called to notify the P2P 484 * module. Once the Listen state is stopped, p2p_listen_end() must be 485 * called to notify the P2P module that the driver is not in the Listen 486 * state anymore. 487 * 488 * If the send_probe_resp() is not used for generating the response, 489 * the IEs from probe_resp_ie need to be added to the end of the Probe 490 * Response frame body. If send_probe_resp() is used, the probe_resp_ie 491 * information can be ignored. 492 */ 493 int (*start_listen)(void *ctx, unsigned int freq, 494 unsigned int duration, 495 const struct wpabuf *probe_resp_ie); 496 /** 497 * stop_listen - Stop Listen state 498 * @ctx: Callback context from cb_ctx 499 * 500 * This callback can be used to stop a Listen state operation that was 501 * previously requested with start_listen(). 502 */ 503 void (*stop_listen)(void *ctx); 504 505 /** 506 * get_noa - Get current Notice of Absence attribute payload 507 * @ctx: Callback context from cb_ctx 508 * @interface_addr: P2P Interface Address of the GO 509 * @buf: Buffer for returning NoA 510 * @buf_len: Buffer length in octets 511 * Returns: Number of octets used in buf, 0 to indicate no NoA is being 512 * advertized, or -1 on failure 513 * 514 * This function is used to fetch the current Notice of Absence 515 * attribute value from GO. 516 */ 517 int (*get_noa)(void *ctx, const u8 *interface_addr, u8 *buf, 518 size_t buf_len); 519 520 /* Callbacks to notify events to upper layer management entity */ 521 522 /** 523 * dev_found - Notification of a found P2P Device 524 * @ctx: Callback context from cb_ctx 525 * @addr: Source address of the message triggering this notification 526 * @info: P2P peer information 527 * @new_device: Inform if the peer is newly found 528 * 529 * This callback is used to notify that a new P2P Device has been 530 * found. This may happen, e.g., during Search state based on scan 531 * results or during Listen state based on receive Probe Request and 532 * Group Owner Negotiation Request. 533 */ 534 void (*dev_found)(void *ctx, const u8 *addr, 535 const struct p2p_peer_info *info, 536 int new_device); 537 538 /** 539 * dev_lost - Notification of a lost P2P Device 540 * @ctx: Callback context from cb_ctx 541 * @dev_addr: P2P Device Address of the lost P2P Device 542 * 543 * This callback is used to notify that a P2P Device has been deleted. 544 */ 545 void (*dev_lost)(void *ctx, const u8 *dev_addr); 546 547 /** 548 * go_neg_req_rx - Notification of a receive GO Negotiation Request 549 * @ctx: Callback context from cb_ctx 550 * @src: Source address of the message triggering this notification 551 * @dev_passwd_id: WPS Device Password ID 552 * 553 * This callback is used to notify that a P2P Device is requesting 554 * group owner negotiation with us, but we do not have all the 555 * necessary information to start GO Negotiation. This indicates that 556 * the local user has not authorized the connection yet by providing a 557 * PIN or PBC button press. This information can be provided with a 558 * call to p2p_connect(). 559 */ 560 void (*go_neg_req_rx)(void *ctx, const u8 *src, u16 dev_passwd_id); 561 562 /** 563 * go_neg_completed - Notification of GO Negotiation results 564 * @ctx: Callback context from cb_ctx 565 * @res: GO Negotiation results 566 * 567 * This callback is used to notify that Group Owner Negotiation has 568 * been completed. Non-zero struct p2p_go_neg_results::status indicates 569 * failed negotiation. In case of success, this function is responsible 570 * for creating a new group interface (or using the existing interface 571 * depending on driver features), setting up the group interface in 572 * proper mode based on struct p2p_go_neg_results::role_go and 573 * initializing WPS provisioning either as a Registrar (if GO) or as an 574 * Enrollee. Successful WPS provisioning must be indicated by calling 575 * p2p_wps_success_cb(). The callee is responsible for timing out group 576 * formation if WPS provisioning cannot be completed successfully 577 * within 15 seconds. 578 */ 579 void (*go_neg_completed)(void *ctx, struct p2p_go_neg_results *res); 580 581 /** 582 * sd_request - Callback on Service Discovery Request 583 * @ctx: Callback context from cb_ctx 584 * @freq: Frequency (in MHz) of the channel 585 * @sa: Source address of the request 586 * @dialog_token: Dialog token 587 * @update_indic: Service Update Indicator from the source of request 588 * @tlvs: P2P Service Request TLV(s) 589 * @tlvs_len: Length of tlvs buffer in octets 590 * 591 * This callback is used to indicate reception of a service discovery 592 * request. Response to the query must be indicated by calling 593 * p2p_sd_response() with the context information from the arguments to 594 * this callback function. 595 * 596 * This callback handler can be set to %NULL to indicate that service 597 * discovery is not supported. 598 */ 599 void (*sd_request)(void *ctx, int freq, const u8 *sa, u8 dialog_token, 600 u16 update_indic, const u8 *tlvs, size_t tlvs_len); 601 602 /** 603 * sd_response - Callback on Service Discovery Response 604 * @ctx: Callback context from cb_ctx 605 * @sa: Source address of the request 606 * @update_indic: Service Update Indicator from the source of response 607 * @tlvs: P2P Service Response TLV(s) 608 * @tlvs_len: Length of tlvs buffer in octets 609 * 610 * This callback is used to indicate reception of a service discovery 611 * response. This callback handler can be set to %NULL if no service 612 * discovery requests are used. The information provided with this call 613 * is replies to the queries scheduled with p2p_sd_request(). 614 */ 615 void (*sd_response)(void *ctx, const u8 *sa, u16 update_indic, 616 const u8 *tlvs, size_t tlvs_len); 617 618 /** 619 * prov_disc_req - Callback on Provisiong Discovery Request 620 * @ctx: Callback context from cb_ctx 621 * @peer: Source address of the request 622 * @config_methods: Requested WPS Config Method 623 * @dev_addr: P2P Device Address of the found P2P Device 624 * @pri_dev_type: Primary Device Type 625 * @dev_name: Device Name 626 * @supp_config_methods: Supported configuration Methods 627 * @dev_capab: Device Capabilities 628 * @group_capab: Group Capabilities 629 * @group_id: P2P Group ID (or %NULL if not included) 630 * @group_id_len: Length of P2P Group ID 631 * 632 * This callback is used to indicate reception of a Provision Discovery 633 * Request frame that the P2P module accepted. 634 */ 635 void (*prov_disc_req)(void *ctx, const u8 *peer, u16 config_methods, 636 const u8 *dev_addr, const u8 *pri_dev_type, 637 const char *dev_name, u16 supp_config_methods, 638 u8 dev_capab, u8 group_capab, 639 const u8 *group_id, size_t group_id_len); 640 641 /** 642 * prov_disc_resp - Callback on Provisiong Discovery Response 643 * @ctx: Callback context from cb_ctx 644 * @peer: Source address of the response 645 * @config_methods: Value from p2p_prov_disc_req() or 0 on failure 646 * 647 * This callback is used to indicate reception of a Provision Discovery 648 * Response frame for a pending request scheduled with 649 * p2p_prov_disc_req(). This callback handler can be set to %NULL if 650 * provision discovery is not used. 651 */ 652 void (*prov_disc_resp)(void *ctx, const u8 *peer, u16 config_methods); 653 654 /** 655 * prov_disc_fail - Callback on Provision Discovery failure 656 * @ctx: Callback context from cb_ctx 657 * @peer: Source address of the response 658 * @status: Cause of failure, will not be %P2P_PROV_DISC_SUCCESS 659 * 660 * This callback is used to indicate either a failure or no response 661 * to an earlier provision discovery request. 662 * 663 * This callback handler can be set to %NULL if provision discovery 664 * is not used or failures do not need to be indicated. 665 */ 666 void (*prov_disc_fail)(void *ctx, const u8 *peer, 667 enum p2p_prov_disc_status status); 668 669 /** 670 * invitation_process - Optional callback for processing Invitations 671 * @ctx: Callback context from cb_ctx 672 * @sa: Source address of the Invitation Request 673 * @bssid: P2P Group BSSID from the request or %NULL if not included 674 * @go_dev_addr: GO Device Address from P2P Group ID 675 * @ssid: SSID from P2P Group ID 676 * @ssid_len: Length of ssid buffer in octets 677 * @go: Variable for returning whether the local end is GO in the group 678 * @group_bssid: Buffer for returning P2P Group BSSID (if local end GO) 679 * @force_freq: Variable for returning forced frequency for the group 680 * @persistent_group: Whether this is an invitation to reinvoke a 681 * persistent group (instead of invitation to join an active 682 * group) 683 * Returns: Status code (P2P_SC_*) 684 * 685 * This optional callback can be used to implement persistent reconnect 686 * by allowing automatic restarting of persistent groups without user 687 * interaction. If this callback is not implemented (i.e., is %NULL), 688 * the received Invitation Request frames are replied with 689 * %P2P_SC_REQ_RECEIVED status and indicated to upper layer with the 690 * invitation_result() callback. 691 * 692 * If the requested parameters are acceptable and the group is known, 693 * %P2P_SC_SUCCESS may be returned. If the requested group is unknown, 694 * %P2P_SC_FAIL_UNKNOWN_GROUP should be returned. %P2P_SC_REQ_RECEIVED 695 * can be returned if there is not enough data to provide immediate 696 * response, i.e., if some sort of user interaction is needed. The 697 * invitation_received() callback will be called in that case 698 * immediately after this call. 699 */ 700 u8 (*invitation_process)(void *ctx, const u8 *sa, const u8 *bssid, 701 const u8 *go_dev_addr, const u8 *ssid, 702 size_t ssid_len, int *go, u8 *group_bssid, 703 int *force_freq, int persistent_group); 704 705 /** 706 * invitation_received - Callback on Invitation Request RX 707 * @ctx: Callback context from cb_ctx 708 * @sa: Source address of the Invitation Request 709 * @bssid: P2P Group BSSID or %NULL if not received 710 * @ssid: SSID of the group 711 * @ssid_len: Length of ssid in octets 712 * @go_dev_addr: GO Device Address 713 * @status: Response Status 714 * @op_freq: Operational frequency for the group 715 * 716 * This callback is used to indicate sending of an Invitation Response 717 * for a received Invitation Request. If status == 0 (success), the 718 * upper layer code is responsible for starting the group. status == 1 719 * indicates need to get user authorization for the group. Other status 720 * values indicate that the invitation request was rejected. 721 */ 722 void (*invitation_received)(void *ctx, const u8 *sa, const u8 *bssid, 723 const u8 *ssid, size_t ssid_len, 724 const u8 *go_dev_addr, u8 status, 725 int op_freq); 726 727 /** 728 * invitation_result - Callback on Invitation result 729 * @ctx: Callback context from cb_ctx 730 * @status: Negotiation result (Status Code) 731 * @bssid: P2P Group BSSID or %NULL if not received 732 * 733 * This callback is used to indicate result of an Invitation procedure 734 * started with a call to p2p_invite(). The indicated status code is 735 * the value received from the peer in Invitation Response with 0 736 * (P2P_SC_SUCCESS) indicating success or -1 to indicate a timeout or a 737 * local failure in transmitting the Invitation Request. 738 */ 739 void (*invitation_result)(void *ctx, int status, const u8 *bssid); 740 741 /** 742 * go_connected - Check whether we are connected to a GO 743 * @ctx: Callback context from cb_ctx 744 * @dev_addr: P2P Device Address of a GO 745 * Returns: 1 if we are connected as a P2P client to the specified GO 746 * or 0 if not. 747 */ 748 int (*go_connected)(void *ctx, const u8 *dev_addr); 749 }; 750 751 752 /* P2P module initialization/deinitialization */ 753 754 /** 755 * p2p_init - Initialize P2P module 756 * @cfg: P2P module configuration 757 * Returns: Pointer to private data or %NULL on failure 758 * 759 * This function is used to initialize global P2P module context (one per 760 * device). The P2P module will keep a copy of the configuration data, so the 761 * caller does not need to maintain this structure. However, the callback 762 * functions and the context parameters to them must be kept available until 763 * the P2P module is deinitialized with p2p_deinit(). 764 */ 765 struct p2p_data * p2p_init(const struct p2p_config *cfg); 766 767 /** 768 * p2p_deinit - Deinitialize P2P module 769 * @p2p: P2P module context from p2p_init() 770 */ 771 void p2p_deinit(struct p2p_data *p2p); 772 773 /** 774 * p2p_flush - Flush P2P module state 775 * @p2p: P2P module context from p2p_init() 776 * 777 * This command removes the P2P module state like peer device entries. 778 */ 779 void p2p_flush(struct p2p_data *p2p); 780 781 /** 782 * p2p_unauthorize - Unauthorize the specified peer device 783 * @p2p: P2P module context from p2p_init() 784 * @addr: P2P peer entry to be unauthorized 785 * Returns: 0 on success, -1 on failure 786 * 787 * This command removes any connection authorization from the specified P2P 788 * peer device address. This can be used, e.g., to cancel effect of a previous 789 * p2p_authorize() or p2p_connect() call that has not yet resulted in completed 790 * GO Negotiation. 791 */ 792 int p2p_unauthorize(struct p2p_data *p2p, const u8 *addr); 793 794 /** 795 * p2p_set_dev_name - Set device name 796 * @p2p: P2P module context from p2p_init() 797 * Returns: 0 on success, -1 on failure 798 * 799 * This function can be used to update the P2P module configuration with 800 * information that was not available at the time of the p2p_init() call. 801 */ 802 int p2p_set_dev_name(struct p2p_data *p2p, const char *dev_name); 803 804 int p2p_set_manufacturer(struct p2p_data *p2p, const char *manufacturer); 805 int p2p_set_model_name(struct p2p_data *p2p, const char *model_name); 806 int p2p_set_model_number(struct p2p_data *p2p, const char *model_number); 807 int p2p_set_serial_number(struct p2p_data *p2p, const char *serial_number); 808 809 void p2p_set_config_methods(struct p2p_data *p2p, u16 config_methods); 810 void p2p_set_uuid(struct p2p_data *p2p, const u8 *uuid); 811 812 /** 813 * p2p_set_pri_dev_type - Set primary device type 814 * @p2p: P2P module context from p2p_init() 815 * Returns: 0 on success, -1 on failure 816 * 817 * This function can be used to update the P2P module configuration with 818 * information that was not available at the time of the p2p_init() call. 819 */ 820 int p2p_set_pri_dev_type(struct p2p_data *p2p, const u8 *pri_dev_type); 821 822 /** 823 * p2p_set_sec_dev_types - Set secondary device types 824 * @p2p: P2P module context from p2p_init() 825 * Returns: 0 on success, -1 on failure 826 * 827 * This function can be used to update the P2P module configuration with 828 * information that was not available at the time of the p2p_init() call. 829 */ 830 int p2p_set_sec_dev_types(struct p2p_data *p2p, const u8 dev_types[][8], 831 size_t num_dev_types); 832 833 int p2p_set_country(struct p2p_data *p2p, const char *country); 834 835 836 /* Commands from upper layer management entity */ 837 838 enum p2p_discovery_type { 839 P2P_FIND_START_WITH_FULL, 840 P2P_FIND_ONLY_SOCIAL, 841 P2P_FIND_PROGRESSIVE 842 }; 843 844 /** 845 * p2p_find - Start P2P Find (Device Discovery) 846 * @p2p: P2P module context from p2p_init() 847 * @timeout: Timeout for find operation in seconds or 0 for no timeout 848 * @type: Device Discovery type 849 * @num_req_dev_types: Number of requested device types 850 * @req_dev_types: Requested device types array, must be an array 851 * containing num_req_dev_types * WPS_DEV_TYPE_LEN bytes; %NULL if no 852 * requested device types. 853 * @dev_id: Device ID to search for or %NULL to find all devices 854 * @search_delay: Extra delay in milliseconds between search iterations 855 * Returns: 0 on success, -1 on failure 856 */ 857 int p2p_find(struct p2p_data *p2p, unsigned int timeout, 858 enum p2p_discovery_type type, 859 unsigned int num_req_dev_types, const u8 *req_dev_types, 860 const u8 *dev_id, unsigned int search_delay); 861 862 /** 863 * p2p_stop_find - Stop P2P Find (Device Discovery) 864 * @p2p: P2P module context from p2p_init() 865 */ 866 void p2p_stop_find(struct p2p_data *p2p); 867 868 /** 869 * p2p_stop_find_for_freq - Stop P2P Find for next oper on specific freq 870 * @p2p: P2P module context from p2p_init() 871 * @freq: Frequency in MHz for next operation 872 * 873 * This is like p2p_stop_find(), but Listen state is not stopped if we are 874 * already on the same frequency. 875 */ 876 void p2p_stop_find_for_freq(struct p2p_data *p2p, int freq); 877 878 /** 879 * p2p_listen - Start P2P Listen state for specified duration 880 * @p2p: P2P module context from p2p_init() 881 * @timeout: Listen state duration in milliseconds 882 * Returns: 0 on success, -1 on failure 883 * 884 * This function can be used to request the P2P module to keep the device 885 * discoverable on the listen channel for an extended set of time. At least in 886 * its current form, this is mainly used for testing purposes and may not be of 887 * much use for normal P2P operations. 888 */ 889 int p2p_listen(struct p2p_data *p2p, unsigned int timeout); 890 891 /** 892 * p2p_connect - Start P2P group formation (GO negotiation) 893 * @p2p: P2P module context from p2p_init() 894 * @peer_addr: MAC address of the peer P2P client 895 * @wps_method: WPS method to be used in provisioning 896 * @go_intent: Local GO intent value (1..15) 897 * @own_interface_addr: Intended interface address to use with the group 898 * @force_freq: The only allowed channel frequency in MHz or 0 899 * @persistent_group: Whether to create a persistent group (0 = no, 1 = 900 * persistent group without persistent reconnect, 2 = persistent group with 901 * persistent reconnect) 902 * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate 903 * a new SSID 904 * @force_ssid_len: Length of $force_ssid buffer 905 * @pd_before_go_neg: Whether to send Provision Discovery prior to GO 906 * Negotiation as an interoperability workaround when initiating group 907 * formation 908 * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if 909 * force_freq == 0) 910 * Returns: 0 on success, -1 on failure 911 */ 912 int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr, 913 enum p2p_wps_method wps_method, 914 int go_intent, const u8 *own_interface_addr, 915 unsigned int force_freq, int persistent_group, 916 const u8 *force_ssid, size_t force_ssid_len, 917 int pd_before_go_neg, unsigned int pref_freq); 918 919 /** 920 * p2p_authorize - Authorize P2P group formation (GO negotiation) 921 * @p2p: P2P module context from p2p_init() 922 * @peer_addr: MAC address of the peer P2P client 923 * @wps_method: WPS method to be used in provisioning 924 * @go_intent: Local GO intent value (1..15) 925 * @own_interface_addr: Intended interface address to use with the group 926 * @force_freq: The only allowed channel frequency in MHz or 0 927 * @persistent_group: Whether to create a persistent group (0 = no, 1 = 928 * persistent group without persistent reconnect, 2 = persistent group with 929 * persistent reconnect) 930 * @force_ssid: Forced SSID for the group if we become GO or %NULL to generate 931 * a new SSID 932 * @force_ssid_len: Length of $force_ssid buffer 933 * @pref_freq: Preferred operating frequency in MHz or 0 (this is only used if 934 * force_freq == 0) 935 * Returns: 0 on success, -1 on failure 936 * 937 * This is like p2p_connect(), but the actual group negotiation is not 938 * initiated automatically, i.e., the other end is expected to do that. 939 */ 940 int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr, 941 enum p2p_wps_method wps_method, 942 int go_intent, const u8 *own_interface_addr, 943 unsigned int force_freq, int persistent_group, 944 const u8 *force_ssid, size_t force_ssid_len, 945 unsigned int pref_freq); 946 947 /** 948 * p2p_reject - Reject peer device (explicitly block connection attempts) 949 * @p2p: P2P module context from p2p_init() 950 * @peer_addr: MAC address of the peer P2P client 951 * Returns: 0 on success, -1 on failure 952 */ 953 int p2p_reject(struct p2p_data *p2p, const u8 *peer_addr); 954 955 /** 956 * p2p_prov_disc_req - Send Provision Discovery Request 957 * @p2p: P2P module context from p2p_init() 958 * @peer_addr: MAC address of the peer P2P client 959 * @config_methods: WPS Config Methods value (only one bit set) 960 * @join: Whether this is used by a client joining an active group 961 * @force_freq: Forced TX frequency for the frame (mainly for the join case) 962 * @user_initiated_pd: Flag to indicate if initiated by user or not 963 * Returns: 0 on success, -1 on failure 964 * 965 * This function can be used to request a discovered P2P peer to display a PIN 966 * (config_methods = WPS_CONFIG_DISPLAY) or be prepared to enter a PIN from us 967 * (config_methods = WPS_CONFIG_KEYPAD). The Provision Discovery Request frame 968 * is transmitted once immediately and if no response is received, the frame 969 * will be sent again whenever the target device is discovered during device 970 * dsicovery (start with a p2p_find() call). Response from the peer is 971 * indicated with the p2p_config::prov_disc_resp() callback. 972 */ 973 int p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr, 974 u16 config_methods, int join, int force_freq, 975 int user_initiated_pd); 976 977 /** 978 * p2p_sd_request - Schedule a service discovery query 979 * @p2p: P2P module context from p2p_init() 980 * @dst: Destination peer or %NULL to apply for all peers 981 * @tlvs: P2P Service Query TLV(s) 982 * Returns: Reference to the query or %NULL on failure 983 * 984 * Response to the query is indicated with the p2p_config::sd_response() 985 * callback. 986 */ 987 void * p2p_sd_request(struct p2p_data *p2p, const u8 *dst, 988 const struct wpabuf *tlvs); 989 990 #ifdef CONFIG_WIFI_DISPLAY 991 void * p2p_sd_request_wfd(struct p2p_data *p2p, const u8 *dst, 992 const struct wpabuf *tlvs); 993 #endif /* CONFIG_WIFI_DISPLAY */ 994 995 /** 996 * p2p_sd_cancel_request - Cancel a pending service discovery query 997 * @p2p: P2P module context from p2p_init() 998 * @req: Query reference from p2p_sd_request() 999 * Returns: 0 if request for cancelled; -1 if not found 1000 */ 1001 int p2p_sd_cancel_request(struct p2p_data *p2p, void *req); 1002 1003 /** 1004 * p2p_sd_response - Send response to a service discovery query 1005 * @p2p: P2P module context from p2p_init() 1006 * @freq: Frequency from p2p_config::sd_request() callback 1007 * @dst: Destination address from p2p_config::sd_request() callback 1008 * @dialog_token: Dialog token from p2p_config::sd_request() callback 1009 * @resp_tlvs: P2P Service Response TLV(s) 1010 * 1011 * This function is called as a response to the request indicated with 1012 * p2p_config::sd_request() callback. 1013 */ 1014 void p2p_sd_response(struct p2p_data *p2p, int freq, const u8 *dst, 1015 u8 dialog_token, const struct wpabuf *resp_tlvs); 1016 1017 /** 1018 * p2p_sd_service_update - Indicate a change in local services 1019 * @p2p: P2P module context from p2p_init() 1020 * 1021 * This function needs to be called whenever there is a change in availability 1022 * of the local services. This will increment the Service Update Indicator 1023 * value which will be used in SD Request and Response frames. 1024 */ 1025 void p2p_sd_service_update(struct p2p_data *p2p); 1026 1027 1028 enum p2p_invite_role { 1029 P2P_INVITE_ROLE_GO, 1030 P2P_INVITE_ROLE_ACTIVE_GO, 1031 P2P_INVITE_ROLE_CLIENT 1032 }; 1033 1034 /** 1035 * p2p_invite - Invite a P2P Device into a group 1036 * @p2p: P2P module context from p2p_init() 1037 * @peer: Device Address of the peer P2P Device 1038 * @role: Local role in the group 1039 * @bssid: Group BSSID or %NULL if not known 1040 * @ssid: Group SSID 1041 * @ssid_len: Length of ssid in octets 1042 * @force_freq: The only allowed channel frequency in MHz or 0 1043 * @go_dev_addr: Forced GO Device Address or %NULL if none 1044 * @persistent_group: Whether this is to reinvoke a persistent group 1045 * Returns: 0 on success, -1 on failure 1046 */ 1047 int p2p_invite(struct p2p_data *p2p, const u8 *peer, enum p2p_invite_role role, 1048 const u8 *bssid, const u8 *ssid, size_t ssid_len, 1049 unsigned int force_freq, const u8 *go_dev_addr, 1050 int persistent_group); 1051 1052 /** 1053 * p2p_presence_req - Request GO presence 1054 * @p2p: P2P module context from p2p_init() 1055 * @go_interface_addr: GO P2P Interface Address 1056 * @own_interface_addr: Own P2P Interface Address for this group 1057 * @freq: Group operating frequence (in MHz) 1058 * @duration1: Preferred presence duration in microseconds 1059 * @interval1: Preferred presence interval in microseconds 1060 * @duration2: Acceptable presence duration in microseconds 1061 * @interval2: Acceptable presence interval in microseconds 1062 * Returns: 0 on success, -1 on failure 1063 * 1064 * If both duration and interval values are zero, the parameter pair is not 1065 * specified (i.e., to remove Presence Request, use duration1 = interval1 = 0). 1066 */ 1067 int p2p_presence_req(struct p2p_data *p2p, const u8 *go_interface_addr, 1068 const u8 *own_interface_addr, unsigned int freq, 1069 u32 duration1, u32 interval1, u32 duration2, 1070 u32 interval2); 1071 1072 /** 1073 * p2p_ext_listen - Set Extended Listen Timing 1074 * @p2p: P2P module context from p2p_init() 1075 * @freq: Group operating frequence (in MHz) 1076 * @period: Availability period in milliseconds (1-65535; 0 to disable) 1077 * @interval: Availability interval in milliseconds (1-65535; 0 to disable) 1078 * Returns: 0 on success, -1 on failure 1079 * 1080 * This function can be used to enable or disable (period = interval = 0) 1081 * Extended Listen Timing. When enabled, the P2P Device will become 1082 * discoverable (go into Listen State) every @interval milliseconds for at 1083 * least @period milliseconds. 1084 */ 1085 int p2p_ext_listen(struct p2p_data *p2p, unsigned int period, 1086 unsigned int interval); 1087 1088 /* Event notifications from upper layer management operations */ 1089 1090 /** 1091 * p2p_wps_success_cb - Report successfully completed WPS provisioning 1092 * @p2p: P2P module context from p2p_init() 1093 * @mac_addr: Peer address 1094 * 1095 * This function is used to report successfully completed WPS provisioning 1096 * during group formation in both GO/Registrar and client/Enrollee roles. 1097 */ 1098 void p2p_wps_success_cb(struct p2p_data *p2p, const u8 *mac_addr); 1099 1100 /** 1101 * p2p_group_formation_failed - Report failed WPS provisioning 1102 * @p2p: P2P module context from p2p_init() 1103 * 1104 * This function is used to report failed group formation. This can happen 1105 * either due to failed WPS provisioning or due to 15 second timeout during 1106 * the provisioning phase. 1107 */ 1108 void p2p_group_formation_failed(struct p2p_data *p2p); 1109 1110 /** 1111 * p2p_get_provisioning_info - Get any stored provisioning info 1112 * @p2p: P2P module context from p2p_init() 1113 * @addr: Peer P2P Device Address 1114 * Returns: WPS provisioning information (WPS config method) or 0 if no 1115 * information is available 1116 * 1117 * This function is used to retrieve stored WPS provisioning info for the given 1118 * peer. 1119 */ 1120 u16 p2p_get_provisioning_info(struct p2p_data *p2p, const u8 *addr); 1121 1122 /** 1123 * p2p_clear_provisioning_info - Clear any stored provisioning info 1124 * @p2p: P2P module context from p2p_init() 1125 * @iface_addr: Peer P2P Device Address 1126 * 1127 * This function is used to clear stored WPS provisioning info for the given 1128 * peer. 1129 */ 1130 void p2p_clear_provisioning_info(struct p2p_data *p2p, const u8 *addr); 1131 1132 1133 /* Event notifications from lower layer driver operations */ 1134 1135 /** 1136 * enum p2p_probe_req_status 1137 * 1138 * @P2P_PREQ_MALFORMED: frame was not well-formed 1139 * @P2P_PREQ_NOT_LISTEN: device isn't in listen state, frame ignored 1140 * @P2P_PREQ_NOT_P2P: frame was not a P2P probe request 1141 * @P2P_PREQ_P2P_NOT_PROCESSED: frame was P2P but wasn't processed 1142 * @P2P_PREQ_P2P_PROCESSED: frame has been processed by P2P 1143 */ 1144 enum p2p_probe_req_status { 1145 P2P_PREQ_MALFORMED, 1146 P2P_PREQ_NOT_LISTEN, 1147 P2P_PREQ_NOT_P2P, 1148 P2P_PREQ_NOT_PROCESSED, 1149 P2P_PREQ_PROCESSED 1150 }; 1151 1152 /** 1153 * p2p_probe_req_rx - Report reception of a Probe Request frame 1154 * @p2p: P2P module context from p2p_init() 1155 * @addr: Source MAC address 1156 * @dst: Destination MAC address if available or %NULL 1157 * @bssid: BSSID if available or %NULL 1158 * @ie: Information elements from the Probe Request frame body 1159 * @ie_len: Length of ie buffer in octets 1160 * Returns: value indicating the type and status of the probe request 1161 */ 1162 enum p2p_probe_req_status 1163 p2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *dst, 1164 const u8 *bssid, const u8 *ie, size_t ie_len); 1165 1166 /** 1167 * p2p_rx_action - Report received Action frame 1168 * @p2p: P2P module context from p2p_init() 1169 * @da: Destination address of the received Action frame 1170 * @sa: Source address of the received Action frame 1171 * @bssid: Address 3 of the received Action frame 1172 * @category: Category of the received Action frame 1173 * @data: Action frame body after the Category field 1174 * @len: Length of the data buffer in octets 1175 * @freq: Frequency (in MHz) on which the frame was received 1176 */ 1177 void p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa, 1178 const u8 *bssid, u8 category, 1179 const u8 *data, size_t len, int freq); 1180 1181 /** 1182 * p2p_scan_res_handler - Indicate a P2P scan results 1183 * @p2p: P2P module context from p2p_init() 1184 * @bssid: BSSID of the scan result 1185 * @freq: Frequency of the channel on which the device was found in MHz 1186 * @age: Age of the scan result in milliseconds 1187 * @level: Signal level (signal strength of the received Beacon/Probe Response 1188 * frame) 1189 * @ies: Pointer to IEs from the scan result 1190 * @ies_len: Length of the ies buffer 1191 * Returns: 0 to continue or 1 to stop scan result indication 1192 * 1193 * This function is called to indicate a scan result entry with P2P IE from a 1194 * scan requested with struct p2p_config::p2p_scan(). This can be called during 1195 * the actual scan process (i.e., whenever a new device is found) or as a 1196 * sequence of calls after the full scan has been completed. The former option 1197 * can result in optimized operations, but may not be supported by all 1198 * driver/firmware designs. The ies buffer need to include at least the P2P IE, 1199 * but it is recommended to include all IEs received from the device. The 1200 * caller does not need to check that the IEs contain a P2P IE before calling 1201 * this function since frames will be filtered internally if needed. 1202 * 1203 * This function will return 1 if it wants to stop scan result iteration (and 1204 * scan in general if it is still in progress). This is used to allow faster 1205 * start of a pending operation, e.g., to start a pending GO negotiation. 1206 */ 1207 int p2p_scan_res_handler(struct p2p_data *p2p, const u8 *bssid, int freq, 1208 unsigned int age, int level, const u8 *ies, 1209 size_t ies_len); 1210 1211 /** 1212 * p2p_scan_res_handled - Indicate end of scan results 1213 * @p2p: P2P module context from p2p_init() 1214 * 1215 * This function is called to indicate that all P2P scan results from a scan 1216 * have been reported with zero or more calls to p2p_scan_res_handler(). This 1217 * function must be called as a response to successful 1218 * struct p2p_config::p2p_scan() call if none of the p2p_scan_res_handler() 1219 * calls stopped iteration. 1220 */ 1221 void p2p_scan_res_handled(struct p2p_data *p2p); 1222 1223 enum p2p_send_action_result { 1224 P2P_SEND_ACTION_SUCCESS /* Frame was send and acknowledged */, 1225 P2P_SEND_ACTION_NO_ACK /* Frame was sent, but not acknowledged */, 1226 P2P_SEND_ACTION_FAILED /* Frame was not sent due to a failure */ 1227 }; 1228 1229 /** 1230 * p2p_send_action_cb - Notify TX status of an Action frame 1231 * @p2p: P2P module context from p2p_init() 1232 * @freq: Channel frequency in MHz 1233 * @dst: Destination MAC address (Address 1) 1234 * @src: Source MAC address (Address 2) 1235 * @bssid: BSSID (Address 3) 1236 * @result: Result of the transmission attempt 1237 * 1238 * This function is used to indicate the result of an Action frame transmission 1239 * that was requested with struct p2p_config::send_action() callback. 1240 */ 1241 void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst, 1242 const u8 *src, const u8 *bssid, 1243 enum p2p_send_action_result result); 1244 1245 /** 1246 * p2p_listen_cb - Indicate the start of a requested Listen state 1247 * @p2p: P2P module context from p2p_init() 1248 * @freq: Listen channel frequency in MHz 1249 * @duration: Duration for the Listen state in milliseconds 1250 * 1251 * This function is used to indicate that a Listen state requested with 1252 * struct p2p_config::start_listen() callback has started. 1253 */ 1254 void p2p_listen_cb(struct p2p_data *p2p, unsigned int freq, 1255 unsigned int duration); 1256 1257 /** 1258 * p2p_listen_end - Indicate the end of a requested Listen state 1259 * @p2p: P2P module context from p2p_init() 1260 * @freq: Listen channel frequency in MHz 1261 * Returns: 0 if no operations were started, 1 if an operation was started 1262 * 1263 * This function is used to indicate that a Listen state requested with 1264 * struct p2p_config::start_listen() callback has ended. 1265 */ 1266 int p2p_listen_end(struct p2p_data *p2p, unsigned int freq); 1267 1268 void p2p_deauth_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code, 1269 const u8 *ie, size_t ie_len); 1270 1271 void p2p_disassoc_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code, 1272 const u8 *ie, size_t ie_len); 1273 1274 1275 /* Per-group P2P state for GO */ 1276 1277 struct p2p_group; 1278 1279 /** 1280 * struct p2p_group_config - P2P group configuration 1281 * 1282 * This configuration is provided to the P2P module during initialization of 1283 * the per-group information with p2p_group_init(). 1284 */ 1285 struct p2p_group_config { 1286 /** 1287 * persistent_group - Whether the group is persistent 1288 * 0 = not a persistent group 1289 * 1 = persistent group without persistent reconnect 1290 * 2 = persistent group with persistent reconnect 1291 */ 1292 int persistent_group; 1293 1294 /** 1295 * interface_addr - P2P Interface Address of the group 1296 */ 1297 u8 interface_addr[ETH_ALEN]; 1298 1299 /** 1300 * max_clients - Maximum number of clients in the group 1301 */ 1302 unsigned int max_clients; 1303 1304 /** 1305 * ssid - Group SSID 1306 */ 1307 u8 ssid[32]; 1308 1309 /** 1310 * ssid_len - Length of SSID 1311 */ 1312 size_t ssid_len; 1313 1314 /** 1315 * cb_ctx - Context to use with callback functions 1316 */ 1317 void *cb_ctx; 1318 1319 /** 1320 * ie_update - Notification of IE update 1321 * @ctx: Callback context from cb_ctx 1322 * @beacon_ies: P2P IE for Beacon frames or %NULL if no change 1323 * @proberesp_ies: P2P Ie for Probe Response frames 1324 * 1325 * P2P module uses this callback function to notify whenever the P2P IE 1326 * in Beacon or Probe Response frames should be updated based on group 1327 * events. 1328 * 1329 * The callee is responsible for freeing the returned buffer(s) with 1330 * wpabuf_free(). 1331 */ 1332 void (*ie_update)(void *ctx, struct wpabuf *beacon_ies, 1333 struct wpabuf *proberesp_ies); 1334 1335 /** 1336 * idle_update - Notification of changes in group idle state 1337 * @ctx: Callback context from cb_ctx 1338 * @idle: Whether the group is idle (no associated stations) 1339 */ 1340 void (*idle_update)(void *ctx, int idle); 1341 }; 1342 1343 /** 1344 * p2p_group_init - Initialize P2P group 1345 * @p2p: P2P module context from p2p_init() 1346 * @config: P2P group configuration (will be freed by p2p_group_deinit()) 1347 * Returns: Pointer to private data or %NULL on failure 1348 * 1349 * This function is used to initialize per-group P2P module context. Currently, 1350 * this is only used to manage GO functionality and P2P clients do not need to 1351 * create an instance of this per-group information. 1352 */ 1353 struct p2p_group * p2p_group_init(struct p2p_data *p2p, 1354 struct p2p_group_config *config); 1355 1356 /** 1357 * p2p_group_deinit - Deinitialize P2P group 1358 * @group: P2P group context from p2p_group_init() 1359 */ 1360 void p2p_group_deinit(struct p2p_group *group); 1361 1362 /** 1363 * p2p_group_notif_assoc - Notification of P2P client association with GO 1364 * @group: P2P group context from p2p_group_init() 1365 * @addr: Interface address of the P2P client 1366 * @ie: IEs from the (Re)association Request frame 1367 * @len: Length of the ie buffer in octets 1368 * Returns: 0 on success, -1 on failure 1369 */ 1370 int p2p_group_notif_assoc(struct p2p_group *group, const u8 *addr, 1371 const u8 *ie, size_t len); 1372 1373 /** 1374 * p2p_group_assoc_resp_ie - Build P2P IE for (re)association response 1375 * @group: P2P group context from p2p_group_init() 1376 * @status: Status value (P2P_SC_SUCCESS if association succeeded) 1377 * Returns: P2P IE for (Re)association Response or %NULL on failure 1378 * 1379 * The caller is responsible for freeing the returned buffer with 1380 * wpabuf_free(). 1381 */ 1382 struct wpabuf * p2p_group_assoc_resp_ie(struct p2p_group *group, u8 status); 1383 1384 /** 1385 * p2p_group_notif_disassoc - Notification of P2P client disassociation from GO 1386 * @group: P2P group context from p2p_group_init() 1387 * @addr: Interface address of the P2P client 1388 */ 1389 void p2p_group_notif_disassoc(struct p2p_group *group, const u8 *addr); 1390 1391 /** 1392 * p2p_group_notif_formation_done - Notification of completed group formation 1393 * @group: P2P group context from p2p_group_init() 1394 */ 1395 void p2p_group_notif_formation_done(struct p2p_group *group); 1396 1397 /** 1398 * p2p_group_notif_noa - Notification of NoA change 1399 * @group: P2P group context from p2p_group_init() 1400 * @noa: Notice of Absence attribute payload, %NULL if none 1401 * @noa_len: Length of noa buffer in octets 1402 * Returns: 0 on success, -1 on failure 1403 * 1404 * Notify the P2P group management about a new NoA contents. This will be 1405 * inserted into the P2P IEs in Beacon and Probe Response frames with rest of 1406 * the group information. 1407 */ 1408 int p2p_group_notif_noa(struct p2p_group *group, const u8 *noa, 1409 size_t noa_len); 1410 1411 /** 1412 * p2p_group_match_dev_type - Match device types in group with requested type 1413 * @group: P2P group context from p2p_group_init() 1414 * @wps: WPS TLVs from Probe Request frame (concatenated WPS IEs) 1415 * Returns: 1 on match, 0 on mismatch 1416 * 1417 * This function can be used to match the Requested Device Type attribute in 1418 * WPS IE with the device types of a group member for deciding whether a GO 1419 * should reply to a Probe Request frame. Match will be reported if the WPS IE 1420 * is not requested any specific device type. 1421 */ 1422 int p2p_group_match_dev_type(struct p2p_group *group, struct wpabuf *wps); 1423 1424 /** 1425 * p2p_group_match_dev_id - Match P2P Device Address in group with requested device id 1426 */ 1427 int p2p_group_match_dev_id(struct p2p_group *group, struct wpabuf *p2p); 1428 1429 /** 1430 * p2p_group_go_discover - Send GO Discoverability Request to a group client 1431 * @group: P2P group context from p2p_group_init() 1432 * Returns: 0 on success (frame scheduled); -1 if client was not found 1433 */ 1434 int p2p_group_go_discover(struct p2p_group *group, const u8 *dev_id, 1435 const u8 *searching_dev, int rx_freq); 1436 1437 1438 /* Generic helper functions */ 1439 1440 /** 1441 * p2p_ie_text - Build text format description of P2P IE 1442 * @p2p_ie: P2P IE 1443 * @buf: Buffer for returning text 1444 * @end: Pointer to the end of the buf area 1445 * Returns: Number of octets written to the buffer or -1 on failure 1446 * 1447 * This function can be used to parse P2P IE contents into text format 1448 * field=value lines. 1449 */ 1450 int p2p_ie_text(struct wpabuf *p2p_ie, char *buf, char *end); 1451 1452 /** 1453 * p2p_scan_result_text - Build text format description of P2P IE 1454 * @ies: Information elements from scan results 1455 * @ies_len: ies buffer length in octets 1456 * @buf: Buffer for returning text 1457 * @end: Pointer to the end of the buf area 1458 * Returns: Number of octets written to the buffer or -1 on failure 1459 * 1460 * This function can be used to parse P2P IE contents into text format 1461 * field=value lines. 1462 */ 1463 int p2p_scan_result_text(const u8 *ies, size_t ies_len, char *buf, char *end); 1464 1465 /** 1466 * p2p_parse_dev_addr_in_p2p_ie - Parse P2P Device Address from a concatenated 1467 * P2P IE 1468 * @p2p_ie: P2P IE 1469 * @dev_addr: Buffer for returning P2P Device Address 1470 * Returns: 0 on success or -1 if P2P Device Address could not be parsed 1471 */ 1472 int p2p_parse_dev_addr_in_p2p_ie(struct wpabuf *p2p_ie, u8 *dev_addr); 1473 1474 /** 1475 * p2p_parse_dev_addr - Parse P2P Device Address from P2P IE(s) 1476 * @ies: Information elements from scan results 1477 * @ies_len: ies buffer length in octets 1478 * @dev_addr: Buffer for returning P2P Device Address 1479 * Returns: 0 on success or -1 if P2P Device Address could not be parsed 1480 */ 1481 int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr); 1482 1483 /** 1484 * p2p_assoc_req_ie - Build P2P IE for (Re)Association Request frame 1485 * @p2p: P2P module context from p2p_init() 1486 * @bssid: BSSID 1487 * @buf: Buffer for writing the P2P IE 1488 * @len: Maximum buf length in octets 1489 * @p2p_group: Whether this is for association with a P2P GO 1490 * @p2p_ie: Reassembled P2P IE data from scan results or %NULL if none 1491 * Returns: Number of octets written into buf or -1 on failure 1492 */ 1493 int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf, 1494 size_t len, int p2p_group, struct wpabuf *p2p_ie); 1495 1496 /** 1497 * p2p_scan_ie - Build P2P IE for Probe Request 1498 * @p2p: P2P module context from p2p_init() 1499 * @ies: Buffer for writing P2P IE 1500 * @dev_id: Device ID to search for or %NULL for any 1501 */ 1502 void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id); 1503 1504 /** 1505 * p2p_scan_ie_buf_len - Get maximum buffer length needed for p2p_scan_ie 1506 * @p2p: P2P module context from p2p_init() 1507 * Returns: Number of octets that p2p_scan_ie() may add to the buffer 1508 */ 1509 size_t p2p_scan_ie_buf_len(struct p2p_data *p2p); 1510 1511 /** 1512 * p2p_go_params - Generate random P2P group parameters 1513 * @p2p: P2P module context from p2p_init() 1514 * @params: Buffer for parameters 1515 * Returns: 0 on success, -1 on failure 1516 */ 1517 int p2p_go_params(struct p2p_data *p2p, struct p2p_go_neg_results *params); 1518 1519 /** 1520 * p2p_get_group_capab - Get Group Capability from P2P IE data 1521 * @p2p_ie: P2P IE(s) contents 1522 * Returns: Group Capability 1523 */ 1524 u8 p2p_get_group_capab(const struct wpabuf *p2p_ie); 1525 1526 /** 1527 * p2p_get_cross_connect_disallowed - Does WLAN AP disallows cross connection 1528 * @p2p_ie: P2P IE(s) contents 1529 * Returns: 0 if cross connection is allow, 1 if not 1530 */ 1531 int p2p_get_cross_connect_disallowed(const struct wpabuf *p2p_ie); 1532 1533 /** 1534 * p2p_get_go_dev_addr - Get P2P Device Address from P2P IE data 1535 * @p2p_ie: P2P IE(s) contents 1536 * Returns: Pointer to P2P Device Address or %NULL if not included 1537 */ 1538 const u8 * p2p_get_go_dev_addr(const struct wpabuf *p2p_ie); 1539 1540 /** 1541 * p2p_get_peer_info - Get P2P peer information 1542 * @p2p: P2P module context from p2p_init() 1543 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer 1544 * @next: Whether to select the peer entry following the one indicated by addr 1545 * Returns: Pointer to peer info or %NULL if not found 1546 */ 1547 const struct p2p_peer_info * p2p_get_peer_info(struct p2p_data *p2p, 1548 const u8 *addr, int next); 1549 1550 /** 1551 * p2p_get_peer_info_txt - Get internal P2P peer information in text format 1552 * @info: Pointer to P2P peer info from p2p_get_peer_info() 1553 * @buf: Buffer for returning text 1554 * @buflen: Maximum buffer length 1555 * Returns: Number of octets written to the buffer or -1 on failure 1556 * 1557 * Note: This information is internal to the P2P module and subject to change. 1558 * As such, this should not really be used by external programs for purposes 1559 * other than debugging. 1560 */ 1561 int p2p_get_peer_info_txt(const struct p2p_peer_info *info, 1562 char *buf, size_t buflen); 1563 1564 /** 1565 * p2p_peer_known - Check whether P2P peer is known 1566 * @p2p: P2P module context from p2p_init() 1567 * @addr: P2P Device Address of the peer 1568 * Returns: 1 if the specified device is in the P2P peer table or 0 if not 1569 */ 1570 int p2p_peer_known(struct p2p_data *p2p, const u8 *addr); 1571 1572 /** 1573 * p2p_set_client_discoverability - Set client discoverability capability 1574 * @p2p: P2P module context from p2p_init() 1575 * @enabled: Whether client discoverability will be enabled 1576 * 1577 * This function can be used to disable (and re-enable) client discoverability. 1578 * This capability is enabled by default and should not be disabled in normal 1579 * use cases, i.e., this is mainly for testing purposes. 1580 */ 1581 void p2p_set_client_discoverability(struct p2p_data *p2p, int enabled); 1582 1583 /** 1584 * p2p_set_managed_oper - Set managed P2P Device operations capability 1585 * @p2p: P2P module context from p2p_init() 1586 * @enabled: Whether managed P2P Device operations will be enabled 1587 */ 1588 void p2p_set_managed_oper(struct p2p_data *p2p, int enabled); 1589 1590 int p2p_set_listen_channel(struct p2p_data *p2p, u8 reg_class, u8 channel); 1591 1592 int p2p_set_ssid_postfix(struct p2p_data *p2p, const u8 *postfix, size_t len); 1593 1594 int p2p_get_interface_addr(struct p2p_data *p2p, const u8 *dev_addr, 1595 u8 *iface_addr); 1596 int p2p_get_dev_addr(struct p2p_data *p2p, const u8 *iface_addr, 1597 u8 *dev_addr); 1598 1599 void p2p_set_peer_filter(struct p2p_data *p2p, const u8 *addr); 1600 1601 /** 1602 * p2p_set_cross_connect - Set cross connection capability 1603 * @p2p: P2P module context from p2p_init() 1604 * @enabled: Whether cross connection will be enabled 1605 */ 1606 void p2p_set_cross_connect(struct p2p_data *p2p, int enabled); 1607 1608 int p2p_get_oper_freq(struct p2p_data *p2p, const u8 *iface_addr); 1609 1610 /** 1611 * p2p_set_intra_bss_dist - Set intra BSS distribution 1612 * @p2p: P2P module context from p2p_init() 1613 * @enabled: Whether intra BSS distribution will be enabled 1614 */ 1615 void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled); 1616 1617 /** 1618 * p2p_supported_freq - Check whether channel is supported for P2P 1619 * @p2p: P2P module context from p2p_init() 1620 * @freq: Channel frequency in MHz 1621 * Returns: 0 if channel not usable for P2P, 1 if usable for P2P 1622 */ 1623 int p2p_supported_freq(struct p2p_data *p2p, unsigned int freq); 1624 1625 void p2p_update_channel_list(struct p2p_data *p2p, struct p2p_channels *chan); 1626 1627 /** 1628 * p2p_set_best_channels - Update best channel information 1629 * @p2p: P2P module context from p2p_init() 1630 * @freq_24: Frequency (MHz) of best channel in 2.4 GHz band 1631 * @freq_5: Frequency (MHz) of best channel in 5 GHz band 1632 * @freq_overall: Frequency (MHz) of best channel overall 1633 */ 1634 void p2p_set_best_channels(struct p2p_data *p2p, int freq_24, int freq_5, 1635 int freq_overall); 1636 1637 const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p); 1638 1639 /** 1640 * p2p_get_group_num_members - Get number of members in group 1641 * @group: P2P group context from p2p_group_init() 1642 * Returns: Number of members in the group 1643 */ 1644 unsigned int p2p_get_group_num_members(struct p2p_group *group); 1645 1646 /** 1647 * p2p_iterate_group_members - Iterate group members 1648 * @group: P2P group context from p2p_group_init() 1649 * @next: iteration pointer, must be a pointer to a void * that is set to %NULL 1650 * on the first call and not modified later 1651 * Returns: A P2P Interface Address for each call and %NULL for no more members 1652 */ 1653 const u8 * p2p_iterate_group_members(struct p2p_group *group, void **next); 1654 1655 /** 1656 * p2p_group_get_dev_addr - Get a P2P Device Address of a client in a group 1657 * @group: P2P group context from p2p_group_init() 1658 * @addr: P2P Interface Address of the client 1659 * Returns: P2P Device Address of the client if found or %NULL if no match 1660 * found 1661 */ 1662 const u8 * p2p_group_get_dev_addr(struct p2p_group *group, const u8 *addr); 1663 1664 /** 1665 * p2p_group_is_client_connected - Check whether a specific client is connected 1666 * @group: P2P group context from p2p_group_init() 1667 * @addr: P2P Device Address of the client 1668 * Returns: 1 if client is connected or 0 if not 1669 */ 1670 int p2p_group_is_client_connected(struct p2p_group *group, const u8 *dev_addr); 1671 1672 /** 1673 * p2p_get_peer_found - Get P2P peer info structure of a found peer 1674 * @p2p: P2P module context from p2p_init() 1675 * @addr: P2P Device Address of the peer or %NULL to indicate the first peer 1676 * @next: Whether to select the peer entry following the one indicated by addr 1677 * Returns: The first P2P peer info available or %NULL if no such peer exists 1678 */ 1679 const struct p2p_peer_info * 1680 p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next); 1681 1682 /** 1683 * p2p_remove_wps_vendor_extensions - Remove WPS vendor extensions 1684 * @p2p: P2P module context from p2p_init() 1685 */ 1686 void p2p_remove_wps_vendor_extensions(struct p2p_data *p2p); 1687 1688 /** 1689 * p2p_add_wps_vendor_extension - Add a WPS vendor extension 1690 * @p2p: P2P module context from p2p_init() 1691 * @vendor_ext: The vendor extensions to add 1692 * Returns: 0 on success, -1 on failure 1693 * 1694 * The wpabuf structures in the array are owned by the P2P 1695 * module after this call. 1696 */ 1697 int p2p_add_wps_vendor_extension(struct p2p_data *p2p, 1698 const struct wpabuf *vendor_ext); 1699 1700 /** 1701 * p2p_set_oper_channel - Set the P2P operating channel 1702 * @p2p: P2P module context from p2p_init() 1703 * @op_reg_class: Operating regulatory class to set 1704 * @op_channel: operating channel to set 1705 * @cfg_op_channel : Whether op_channel is hardcoded in configuration 1706 * Returns: 0 on success, -1 on failure 1707 */ 1708 int p2p_set_oper_channel(struct p2p_data *p2p, u8 op_reg_class, u8 op_channel, 1709 int cfg_op_channel); 1710 1711 /** 1712 * p2p_set_pref_chan - Set P2P preferred channel list 1713 * @p2p: P2P module context from p2p_init() 1714 * @num_pref_chan: Number of entries in pref_chan list 1715 * @pref_chan: Preferred channels or %NULL to remove preferences 1716 * Returns: 0 on success, -1 on failure 1717 */ 1718 int p2p_set_pref_chan(struct p2p_data *p2p, unsigned int num_pref_chan, 1719 const struct p2p_channel *pref_chan); 1720 1721 /** 1722 * p2p_in_progress - Check whether a P2P operation is progress 1723 * @p2p: P2P module context from p2p_init() 1724 * Returns: 0 if P2P module is idle or 1 if an operation is in progress 1725 */ 1726 int p2p_in_progress(struct p2p_data *p2p); 1727 1728 /** 1729 * p2p_other_scan_completed - Notify completion of non-P2P scan 1730 * @p2p: P2P module context from p2p_init() 1731 * Returns: 0 if P2P module is idle or 1 if an operation was started 1732 */ 1733 int p2p_other_scan_completed(struct p2p_data *p2p); 1734 1735 const char * p2p_wps_method_text(enum p2p_wps_method method); 1736 1737 /** 1738 * p2p_set_config_timeout - Set local config timeouts 1739 * @p2p: P2P module context from p2p_init() 1740 * @go_timeout: Time in 10 ms units it takes to start the GO mode 1741 * @client_timeout: Time in 10 ms units it takes to start the client mode 1742 */ 1743 void p2p_set_config_timeout(struct p2p_data *p2p, u8 go_timeout, 1744 u8 client_timeout); 1745 1746 void p2p_increase_search_delay(struct p2p_data *p2p, unsigned int delay); 1747 1748 int p2p_set_wfd_ie_beacon(struct p2p_data *p2p, struct wpabuf *ie); 1749 int p2p_set_wfd_ie_probe_req(struct p2p_data *p2p, struct wpabuf *ie); 1750 int p2p_set_wfd_ie_probe_resp(struct p2p_data *p2p, struct wpabuf *ie); 1751 int p2p_set_wfd_ie_assoc_req(struct p2p_data *p2p, struct wpabuf *ie); 1752 int p2p_set_wfd_ie_invitation(struct p2p_data *p2p, struct wpabuf *ie); 1753 int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie); 1754 int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie); 1755 int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie); 1756 int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem); 1757 int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem); 1758 int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p, 1759 const struct wpabuf *elem); 1760 struct wpabuf * wifi_display_encaps(struct wpabuf *subelems); 1761 1762 /** 1763 * p2p_set_disc_int - Set min/max discoverable interval for p2p_find 1764 * @p2p: P2P module context from p2p_init() 1765 * @min_disc_int: minDiscoverableInterval (in units of 100 TU); default 1 1766 * @max_disc_int: maxDiscoverableInterval (in units of 100 TU); default 3 1767 * @max_disc_tu: Maximum number of TUs (1.024 ms) for discoverable interval; or 1768 * -1 not to limit 1769 * Returns: 0 on success, or -1 on failure 1770 * 1771 * This function can be used to configure minDiscoverableInterval and 1772 * maxDiscoverableInterval parameters for the Listen state during device 1773 * discovery (p2p_find). A random number of 100 TU units is picked for each 1774 * Listen state iteration from [min_disc_int,max_disc_int] range. 1775 * 1776 * max_disc_tu can be used to futher limit the discoverable duration. However, 1777 * it should be noted that use of this parameter is not recommended since it 1778 * would not be compliant with the P2P specification. 1779 */ 1780 int p2p_set_disc_int(struct p2p_data *p2p, int min_disc_int, int max_disc_int, 1781 int max_disc_tu); 1782 1783 #endif /* P2P_H */ 1784