1 /* 2 * P2P - Internal definitions for 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_I_H 10 #define P2P_I_H 11 12 #include "utils/list.h" 13 #include "p2p.h" 14 15 #define P2P_GO_NEG_CNF_MAX_RETRY_COUNT 1 16 17 enum p2p_role_indication; 18 19 enum p2p_go_state { 20 UNKNOWN_GO, 21 LOCAL_GO, 22 REMOTE_GO 23 }; 24 25 /** 26 * struct p2p_device - P2P Device data (internal to P2P module) 27 */ 28 struct p2p_device { 29 struct dl_list list; 30 struct os_reltime last_seen; 31 int listen_freq; 32 int oob_go_neg_freq; 33 enum p2p_wps_method wps_method; 34 u16 oob_pw_id; 35 36 struct p2p_peer_info info; 37 38 /* 39 * If the peer was discovered based on an interface address (e.g., GO 40 * from Beacon/Probe Response), the interface address is stored here. 41 * p2p_device_addr must still be set in such a case to the unique 42 * identifier for the P2P Device. 43 */ 44 u8 interface_addr[ETH_ALEN]; 45 46 /* 47 * P2P Device Address of the GO in whose group this P2P Device is a 48 * client. 49 */ 50 u8 member_in_go_dev[ETH_ALEN]; 51 52 /* 53 * P2P Interface Address of the GO in whose group this P2P Device is a 54 * client. 55 */ 56 u8 member_in_go_iface[ETH_ALEN]; 57 58 int go_neg_req_sent; 59 enum p2p_go_state go_state; 60 u8 dialog_token; 61 u8 tie_breaker; 62 u8 intended_addr[ETH_ALEN]; 63 64 char country[3]; 65 struct p2p_channels channels; 66 int oper_freq; 67 u8 oper_ssid[32]; 68 size_t oper_ssid_len; 69 70 /** 71 * req_config_methods - Pending provision discovery methods 72 */ 73 u16 req_config_methods; 74 75 /** 76 * wps_prov_info - Stored provisioning WPS config method 77 * 78 * This is used to store pending WPS config method between Provisioning 79 * Discovery and connection to a running group. 80 */ 81 u16 wps_prov_info; 82 83 #define P2P_DEV_PROBE_REQ_ONLY BIT(0) 84 #define P2P_DEV_REPORTED BIT(1) 85 #define P2P_DEV_NOT_YET_READY BIT(2) 86 #define P2P_DEV_PD_PEER_DISPLAY BIT(5) 87 #define P2P_DEV_PD_PEER_KEYPAD BIT(6) 88 #define P2P_DEV_USER_REJECTED BIT(7) 89 #define P2P_DEV_PEER_WAITING_RESPONSE BIT(8) 90 #define P2P_DEV_PREFER_PERSISTENT_GROUP BIT(9) 91 #define P2P_DEV_WAIT_GO_NEG_RESPONSE BIT(10) 92 #define P2P_DEV_WAIT_GO_NEG_CONFIRM BIT(11) 93 #define P2P_DEV_GROUP_CLIENT_ONLY BIT(12) 94 #define P2P_DEV_FORCE_FREQ BIT(13) 95 #define P2P_DEV_PD_FOR_JOIN BIT(14) 96 #define P2P_DEV_REPORTED_ONCE BIT(15) 97 #define P2P_DEV_PREFER_PERSISTENT_RECONN BIT(16) 98 #define P2P_DEV_PD_BEFORE_GO_NEG BIT(17) 99 #define P2P_DEV_NO_PREF_CHAN BIT(18) 100 #define P2P_DEV_WAIT_INV_REQ_ACK BIT(19) 101 unsigned int flags; 102 103 int status; /* enum p2p_status_code */ 104 struct os_reltime go_neg_wait_started; 105 unsigned int wait_count; 106 unsigned int connect_reqs; 107 unsigned int invitation_reqs; 108 109 u16 ext_listen_period; 110 u16 ext_listen_interval; 111 112 u8 go_timeout; 113 u8 client_timeout; 114 115 /** 116 * go_neg_conf_sent - Number of GO Negotiation Confirmation retries 117 */ 118 u8 go_neg_conf_sent; 119 120 /** 121 * freq - Frquency on which the GO Negotiation Confirmation is sent 122 */ 123 int go_neg_conf_freq; 124 125 /** 126 * go_neg_conf - GO Negotiation Confirmation frame 127 */ 128 struct wpabuf *go_neg_conf; 129 130 int sd_pending_bcast_queries; 131 }; 132 133 struct p2p_sd_query { 134 struct p2p_sd_query *next; 135 u8 peer[ETH_ALEN]; 136 int for_all_peers; 137 int wsd; /* Wi-Fi Display Service Discovery Request */ 138 struct wpabuf *tlvs; 139 }; 140 141 struct p2p_pending_action_tx { 142 unsigned int freq; 143 u8 dst[ETH_ALEN]; 144 u8 src[ETH_ALEN]; 145 u8 bssid[ETH_ALEN]; 146 size_t len; 147 unsigned int wait_time; 148 /* Followed by len octets of the frame */ 149 }; 150 151 /** 152 * struct p2p_data - P2P module data (internal to P2P module) 153 */ 154 struct p2p_data { 155 /** 156 * cfg - P2P module configuration 157 * 158 * This is included in the same memory allocation with the 159 * struct p2p_data and as such, must not be freed separately. 160 */ 161 struct p2p_config *cfg; 162 163 /** 164 * state - The current P2P state 165 */ 166 enum p2p_state { 167 /** 168 * P2P_IDLE - Idle 169 */ 170 P2P_IDLE, 171 172 /** 173 * P2P_SEARCH - Search (Device Discovery) 174 */ 175 P2P_SEARCH, 176 177 /** 178 * P2P_CONNECT - Trying to start GO Negotiation 179 */ 180 P2P_CONNECT, 181 182 /** 183 * P2P_CONNECT_LISTEN - Listen during GO Negotiation start 184 */ 185 P2P_CONNECT_LISTEN, 186 187 /** 188 * P2P_GO_NEG - In GO Negotiation 189 */ 190 P2P_GO_NEG, 191 192 /** 193 * P2P_LISTEN_ONLY - Listen only 194 */ 195 P2P_LISTEN_ONLY, 196 197 /** 198 * P2P_WAIT_PEER_CONNECT - Waiting peer in List for GO Neg 199 */ 200 P2P_WAIT_PEER_CONNECT, 201 202 /** 203 * P2P_WAIT_PEER_IDLE - Waiting peer idle for GO Neg 204 */ 205 P2P_WAIT_PEER_IDLE, 206 207 /** 208 * P2P_SD_DURING_FIND - Service Discovery during find 209 */ 210 P2P_SD_DURING_FIND, 211 212 /** 213 * P2P_PROVISIONING - Provisioning (during group formation) 214 */ 215 P2P_PROVISIONING, 216 217 /** 218 * P2P_PD_DURING_FIND - Provision Discovery during find 219 */ 220 P2P_PD_DURING_FIND, 221 222 /** 223 * P2P_INVITE - Trying to start Invite 224 */ 225 P2P_INVITE, 226 227 /** 228 * P2P_INVITE_LISTEN - Listen during Invite 229 */ 230 P2P_INVITE_LISTEN, 231 } state; 232 233 /** 234 * min_disc_int - minDiscoverableInterval 235 */ 236 int min_disc_int; 237 238 /** 239 * max_disc_int - maxDiscoverableInterval 240 */ 241 int max_disc_int; 242 243 /** 244 * max_disc_tu - Maximum number of TUs for discoverable interval 245 */ 246 int max_disc_tu; 247 248 /** 249 * devices - List of known P2P Device peers 250 */ 251 struct dl_list devices; 252 253 /** 254 * go_neg_peer - Pointer to GO Negotiation peer 255 */ 256 struct p2p_device *go_neg_peer; 257 258 /** 259 * invite_peer - Pointer to Invite peer 260 */ 261 struct p2p_device *invite_peer; 262 263 const u8 *invite_go_dev_addr; 264 u8 invite_go_dev_addr_buf[ETH_ALEN]; 265 int invite_dev_pw_id; 266 267 /** 268 * sd_peer - Pointer to Service Discovery peer 269 */ 270 struct p2p_device *sd_peer; 271 272 /** 273 * sd_query - Pointer to Service Discovery query 274 */ 275 struct p2p_sd_query *sd_query; 276 277 /** 278 * num_p2p_sd_queries - Total number of broadcast SD queries present in 279 * the list 280 */ 281 int num_p2p_sd_queries; 282 283 /* GO Negotiation data */ 284 285 /** 286 * intended_addr - Local Intended P2P Interface Address 287 * 288 * This address is used during group owner negotiation as the Intended 289 * P2P Interface Address and the group interface will be created with 290 * address as the local address in case of successfully completed 291 * negotiation. 292 */ 293 u8 intended_addr[ETH_ALEN]; 294 295 /** 296 * go_intent - Local GO Intent to be used during GO Negotiation 297 */ 298 u8 go_intent; 299 300 /** 301 * next_tie_breaker - Next tie-breaker value to use in GO Negotiation 302 */ 303 u8 next_tie_breaker; 304 305 /** 306 * ssid - Selected SSID for GO Negotiation (if local end will be GO) 307 */ 308 u8 ssid[32]; 309 310 /** 311 * ssid_len - ssid length in octets 312 */ 313 size_t ssid_len; 314 315 /** 316 * ssid_set - Whether SSID is already set for GO Negotiation 317 */ 318 int ssid_set; 319 320 /** 321 * Regulatory class for own operational channel 322 */ 323 u8 op_reg_class; 324 325 /** 326 * op_channel - Own operational channel 327 */ 328 u8 op_channel; 329 330 /** 331 * channels - Own supported regulatory classes and channels 332 * 333 * List of supposerted channels per regulatory class. The regulatory 334 * classes are defined in IEEE Std 802.11-2007 Annex J and the 335 * numbering of the clases depends on the configured country code. 336 */ 337 struct p2p_channels channels; 338 339 struct wpa_freq_range_list no_go_freq; 340 341 enum p2p_pending_action_state { 342 P2P_NO_PENDING_ACTION, 343 P2P_PENDING_GO_NEG_REQUEST, 344 P2P_PENDING_GO_NEG_RESPONSE, 345 P2P_PENDING_GO_NEG_RESPONSE_FAILURE, 346 P2P_PENDING_GO_NEG_CONFIRM, 347 P2P_PENDING_SD, 348 P2P_PENDING_PD, 349 P2P_PENDING_INVITATION_REQUEST, 350 P2P_PENDING_INVITATION_RESPONSE, 351 P2P_PENDING_DEV_DISC_REQUEST, 352 P2P_PENDING_DEV_DISC_RESPONSE, 353 P2P_PENDING_GO_DISC_REQ 354 } pending_action_state; 355 356 unsigned int pending_listen_freq; 357 unsigned int pending_listen_sec; 358 unsigned int pending_listen_usec; 359 360 u8 dev_capab; 361 362 int in_listen; 363 int drv_in_listen; 364 365 /** 366 * sd_queries - Pending service discovery queries 367 */ 368 struct p2p_sd_query *sd_queries; 369 370 /** 371 * srv_update_indic - Service Update Indicator for local services 372 */ 373 u16 srv_update_indic; 374 375 struct wpabuf *sd_resp; /* Fragmented SD response */ 376 u8 sd_resp_addr[ETH_ALEN]; 377 u8 sd_resp_dialog_token; 378 size_t sd_resp_pos; /* Offset in sd_resp */ 379 u8 sd_frag_id; 380 381 struct wpabuf *sd_rx_resp; /* Reassembled SD response */ 382 u16 sd_rx_update_indic; 383 384 /* P2P Invitation data */ 385 enum p2p_invite_role inv_role; 386 u8 inv_bssid[ETH_ALEN]; 387 int inv_bssid_set; 388 u8 inv_ssid[32]; 389 size_t inv_ssid_len; 390 u8 inv_sa[ETH_ALEN]; 391 u8 inv_group_bssid[ETH_ALEN]; 392 u8 *inv_group_bssid_ptr; 393 u8 inv_go_dev_addr[ETH_ALEN]; 394 u8 inv_status; 395 int inv_op_freq; 396 int inv_persistent; 397 398 enum p2p_discovery_type find_type; 399 unsigned int last_p2p_find_timeout; 400 u8 last_prog_scan_class; 401 u8 last_prog_scan_chan; 402 int p2p_scan_running; 403 enum p2p_after_scan { 404 P2P_AFTER_SCAN_NOTHING, 405 P2P_AFTER_SCAN_LISTEN, 406 P2P_AFTER_SCAN_CONNECT 407 } start_after_scan; 408 u8 after_scan_peer[ETH_ALEN]; 409 struct p2p_pending_action_tx *after_scan_tx; 410 unsigned int after_scan_tx_in_progress:1; 411 unsigned int send_action_in_progress:1; 412 413 /* Requested device types for find/search */ 414 unsigned int num_req_dev_types; 415 u8 *req_dev_types; 416 u8 *find_dev_id; 417 u8 find_dev_id_buf[ETH_ALEN]; 418 419 struct os_reltime find_start; /* time of last p2p_find start */ 420 421 struct p2p_group **groups; 422 size_t num_groups; 423 424 struct p2p_device *pending_client_disc_go; 425 u8 pending_client_disc_addr[ETH_ALEN]; 426 u8 pending_dev_disc_dialog_token; 427 u8 pending_dev_disc_addr[ETH_ALEN]; 428 int pending_dev_disc_freq; 429 unsigned int pending_client_disc_freq; 430 431 int ext_listen_only; 432 unsigned int ext_listen_period; 433 unsigned int ext_listen_interval; 434 unsigned int ext_listen_interval_sec; 435 unsigned int ext_listen_interval_usec; 436 437 u8 peer_filter[ETH_ALEN]; 438 439 int cross_connect; 440 441 int best_freq_24; 442 int best_freq_5; 443 int best_freq_overall; 444 int own_freq_preference; 445 446 /** 447 * wps_vendor_ext - WPS Vendor Extensions to add 448 */ 449 struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT]; 450 451 /* 452 * user_initiated_pd - Whether a PD request is user initiated or not. 453 */ 454 u8 user_initiated_pd; 455 456 /* 457 * Keep track of which peer a given PD request was sent to. 458 * Used to raise a timeout alert in case there is no response. 459 */ 460 u8 pending_pd_devaddr[ETH_ALEN]; 461 462 /* 463 * Retry counter for provision discovery requests when issued 464 * in IDLE state. 465 */ 466 int pd_retries; 467 468 /** 469 * pd_force_freq - Forced frequency for PD retries or 0 to auto-select 470 * 471 * This is is used during PD retries for join-a-group case to use the 472 * correct operating frequency determined from a BSS entry for the GO. 473 */ 474 int pd_force_freq; 475 476 u8 go_timeout; 477 u8 client_timeout; 478 479 /* Extra delay in milliseconds between search iterations */ 480 unsigned int search_delay; 481 int in_search_delay; 482 483 u8 pending_reg_class; 484 u8 pending_channel; 485 u8 pending_channel_forced; 486 487 #ifdef CONFIG_WIFI_DISPLAY 488 struct wpabuf *wfd_ie_beacon; 489 struct wpabuf *wfd_ie_probe_req; 490 struct wpabuf *wfd_ie_probe_resp; 491 struct wpabuf *wfd_ie_assoc_req; 492 struct wpabuf *wfd_ie_invitation; 493 struct wpabuf *wfd_ie_prov_disc_req; 494 struct wpabuf *wfd_ie_prov_disc_resp; 495 struct wpabuf *wfd_ie_go_neg; 496 struct wpabuf *wfd_dev_info; 497 struct wpabuf *wfd_assoc_bssid; 498 struct wpabuf *wfd_coupled_sink_info; 499 #endif /* CONFIG_WIFI_DISPLAY */ 500 501 u16 authorized_oob_dev_pw_id; 502 503 struct wpabuf **vendor_elem; 504 }; 505 506 /** 507 * struct p2p_message - Parsed P2P message (or P2P IE) 508 */ 509 struct p2p_message { 510 struct wpabuf *p2p_attributes; 511 struct wpabuf *wps_attributes; 512 struct wpabuf *wfd_subelems; 513 514 u8 dialog_token; 515 516 const u8 *capability; 517 const u8 *go_intent; 518 const u8 *status; 519 const u8 *listen_channel; 520 const u8 *operating_channel; 521 const u8 *channel_list; 522 u8 channel_list_len; 523 const u8 *config_timeout; 524 const u8 *intended_addr; 525 const u8 *group_bssid; 526 const u8 *invitation_flags; 527 528 const u8 *group_info; 529 size_t group_info_len; 530 531 const u8 *group_id; 532 size_t group_id_len; 533 534 const u8 *device_id; 535 536 const u8 *manageability; 537 538 const u8 *noa; 539 size_t noa_len; 540 541 const u8 *ext_listen_timing; 542 543 const u8 *minor_reason_code; 544 545 const u8 *oob_go_neg_channel; 546 547 /* P2P Device Info */ 548 const u8 *p2p_device_info; 549 size_t p2p_device_info_len; 550 const u8 *p2p_device_addr; 551 const u8 *pri_dev_type; 552 u8 num_sec_dev_types; 553 char device_name[33]; 554 u16 config_methods; 555 556 /* WPS IE */ 557 u16 dev_password_id; 558 int dev_password_id_present; 559 u16 wps_config_methods; 560 const u8 *wps_pri_dev_type; 561 const u8 *wps_sec_dev_type_list; 562 size_t wps_sec_dev_type_list_len; 563 const u8 *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT]; 564 size_t wps_vendor_ext_len[P2P_MAX_WPS_VENDOR_EXT]; 565 const u8 *manufacturer; 566 size_t manufacturer_len; 567 const u8 *model_name; 568 size_t model_name_len; 569 const u8 *model_number; 570 size_t model_number_len; 571 const u8 *serial_number; 572 size_t serial_number_len; 573 const u8 *oob_dev_password; 574 size_t oob_dev_password_len; 575 576 /* DS Parameter Set IE */ 577 const u8 *ds_params; 578 579 /* SSID IE */ 580 const u8 *ssid; 581 }; 582 583 584 #define P2P_MAX_GROUP_ENTRIES 50 585 586 struct p2p_group_info { 587 unsigned int num_clients; 588 struct p2p_client_info { 589 const u8 *p2p_device_addr; 590 const u8 *p2p_interface_addr; 591 u8 dev_capab; 592 u16 config_methods; 593 const u8 *pri_dev_type; 594 u8 num_sec_dev_types; 595 const u8 *sec_dev_types; 596 const char *dev_name; 597 size_t dev_name_len; 598 } client[P2P_MAX_GROUP_ENTRIES]; 599 }; 600 601 602 /* p2p_utils.c */ 603 int p2p_random(char *buf, size_t len); 604 int p2p_channel_to_freq(int op_class, int channel); 605 int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel); 606 void p2p_channels_intersect(const struct p2p_channels *a, 607 const struct p2p_channels *b, 608 struct p2p_channels *res); 609 void p2p_channels_union(const struct p2p_channels *a, 610 const struct p2p_channels *b, 611 struct p2p_channels *res); 612 void p2p_channels_remove_freqs(struct p2p_channels *chan, 613 const struct wpa_freq_range_list *list); 614 int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class, 615 u8 channel); 616 void p2p_channels_dump(struct p2p_data *p2p, const char *title, 617 const struct p2p_channels *chan); 618 int p2p_channel_select(struct p2p_channels *chans, const int *classes, 619 u8 *op_class, u8 *op_channel); 620 int p2p_channel_random_social(struct p2p_channels *chans, u8 *op_class, 621 u8 *op_channel); 622 623 /* p2p_parse.c */ 624 int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg); 625 int p2p_parse_ies(const u8 *data, size_t len, struct p2p_message *msg); 626 int p2p_parse(const u8 *data, size_t len, struct p2p_message *msg); 627 int p2p_parse_ies_separate(const u8 *wsc, size_t wsc_len, const u8 *p2p, 628 size_t p2p_len, struct p2p_message *msg); 629 void p2p_parse_free(struct p2p_message *msg); 630 int p2p_attr_text(struct wpabuf *data, char *buf, char *end); 631 int p2p_group_info_parse(const u8 *gi, size_t gi_len, 632 struct p2p_group_info *info); 633 634 /* p2p_build.c */ 635 636 struct p2p_noa_desc { 637 u8 count_type; 638 u32 duration; 639 u32 interval; 640 u32 start_time; 641 }; 642 643 /* p2p_group.c */ 644 const u8 * p2p_group_get_interface_addr(struct p2p_group *group); 645 u8 p2p_group_presence_req(struct p2p_group *group, 646 const u8 *client_interface_addr, 647 const u8 *noa, size_t noa_len); 648 int p2p_group_is_group_id_match(struct p2p_group *group, const u8 *group_id, 649 size_t group_id_len); 650 void p2p_group_update_ies(struct p2p_group *group); 651 void p2p_group_force_beacon_update_ies(struct p2p_group *group); 652 struct wpabuf * p2p_group_get_wfd_ie(struct p2p_group *g); 653 void p2p_buf_add_group_info(struct p2p_group *group, struct wpabuf *buf, 654 int max_clients); 655 void p2p_group_buf_add_id(struct p2p_group *group, struct wpabuf *buf); 656 int p2p_group_get_freq(struct p2p_group *group); 657 658 659 void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token); 660 void p2p_buf_add_public_action_hdr(struct wpabuf *buf, u8 subtype, 661 u8 dialog_token); 662 u8 * p2p_buf_add_ie_hdr(struct wpabuf *buf); 663 void p2p_buf_add_status(struct wpabuf *buf, u8 status); 664 void p2p_buf_add_device_info(struct wpabuf *buf, struct p2p_data *p2p, 665 struct p2p_device *peer); 666 void p2p_buf_add_device_id(struct wpabuf *buf, const u8 *dev_addr); 667 void p2p_buf_update_ie_hdr(struct wpabuf *buf, u8 *len); 668 void p2p_buf_add_capability(struct wpabuf *buf, u8 dev_capab, u8 group_capab); 669 void p2p_buf_add_go_intent(struct wpabuf *buf, u8 go_intent); 670 void p2p_buf_add_listen_channel(struct wpabuf *buf, const char *country, 671 u8 reg_class, u8 channel); 672 void p2p_buf_add_operating_channel(struct wpabuf *buf, const char *country, 673 u8 reg_class, u8 channel); 674 void p2p_buf_add_channel_list(struct wpabuf *buf, const char *country, 675 struct p2p_channels *chan); 676 void p2p_buf_add_config_timeout(struct wpabuf *buf, u8 go_timeout, 677 u8 client_timeout); 678 void p2p_buf_add_intended_addr(struct wpabuf *buf, const u8 *interface_addr); 679 void p2p_buf_add_group_bssid(struct wpabuf *buf, const u8 *bssid); 680 void p2p_buf_add_group_id(struct wpabuf *buf, const u8 *dev_addr, 681 const u8 *ssid, size_t ssid_len); 682 void p2p_buf_add_invitation_flags(struct wpabuf *buf, u8 flags); 683 void p2p_buf_add_noa(struct wpabuf *buf, u8 noa_index, u8 opp_ps, u8 ctwindow, 684 struct p2p_noa_desc *desc1, struct p2p_noa_desc *desc2); 685 void p2p_buf_add_ext_listen_timing(struct wpabuf *buf, u16 period, 686 u16 interval); 687 void p2p_buf_add_p2p_interface(struct wpabuf *buf, struct p2p_data *p2p); 688 void p2p_buf_add_oob_go_neg_channel(struct wpabuf *buf, const char *country, 689 u8 oper_class, u8 channel, 690 enum p2p_role_indication role); 691 int p2p_build_wps_ie(struct p2p_data *p2p, struct wpabuf *buf, int pw_id, 692 int all_attr); 693 694 /* p2p_sd.c */ 695 struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p, 696 struct p2p_device *dev); 697 void p2p_free_sd_queries(struct p2p_data *p2p); 698 void p2p_rx_gas_initial_req(struct p2p_data *p2p, const u8 *sa, 699 const u8 *data, size_t len, int rx_freq); 700 void p2p_rx_gas_initial_resp(struct p2p_data *p2p, const u8 *sa, 701 const u8 *data, size_t len, int rx_freq); 702 void p2p_rx_gas_comeback_req(struct p2p_data *p2p, const u8 *sa, 703 const u8 *data, size_t len, int rx_freq); 704 void p2p_rx_gas_comeback_resp(struct p2p_data *p2p, const u8 *sa, 705 const u8 *data, size_t len, int rx_freq); 706 int p2p_start_sd(struct p2p_data *p2p, struct p2p_device *dev); 707 708 /* p2p_go_neg.c */ 709 int p2p_peer_channels_check(struct p2p_data *p2p, struct p2p_channels *own, 710 struct p2p_device *dev, 711 const u8 *channel_list, size_t channel_list_len); 712 void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa, 713 const u8 *data, size_t len, int rx_freq); 714 void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa, 715 const u8 *data, size_t len, int rx_freq); 716 void p2p_process_go_neg_conf(struct p2p_data *p2p, const u8 *sa, 717 const u8 *data, size_t len); 718 int p2p_connect_send(struct p2p_data *p2p, struct p2p_device *dev); 719 u16 p2p_wps_method_pw_id(enum p2p_wps_method wps_method); 720 void p2p_reselect_channel(struct p2p_data *p2p, 721 struct p2p_channels *intersection); 722 723 /* p2p_pd.c */ 724 void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa, 725 const u8 *data, size_t len, int rx_freq); 726 void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa, 727 const u8 *data, size_t len); 728 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev, 729 int join, int force_freq); 730 void p2p_reset_pending_pd(struct p2p_data *p2p); 731 732 /* p2p_invitation.c */ 733 void p2p_process_invitation_req(struct p2p_data *p2p, const u8 *sa, 734 const u8 *data, size_t len, int rx_freq); 735 void p2p_process_invitation_resp(struct p2p_data *p2p, const u8 *sa, 736 const u8 *data, size_t len); 737 int p2p_invite_send(struct p2p_data *p2p, struct p2p_device *dev, 738 const u8 *go_dev_addr, int dev_pw_id); 739 void p2p_invitation_req_cb(struct p2p_data *p2p, int success); 740 void p2p_invitation_resp_cb(struct p2p_data *p2p, int success); 741 742 /* p2p_dev_disc.c */ 743 void p2p_process_dev_disc_req(struct p2p_data *p2p, const u8 *sa, 744 const u8 *data, size_t len, int rx_freq); 745 void p2p_dev_disc_req_cb(struct p2p_data *p2p, int success); 746 int p2p_send_dev_disc_req(struct p2p_data *p2p, struct p2p_device *dev); 747 void p2p_dev_disc_resp_cb(struct p2p_data *p2p, int success); 748 void p2p_process_dev_disc_resp(struct p2p_data *p2p, const u8 *sa, 749 const u8 *data, size_t len); 750 void p2p_go_disc_req_cb(struct p2p_data *p2p, int success); 751 void p2p_process_go_disc_req(struct p2p_data *p2p, const u8 *da, const u8 *sa, 752 const u8 *data, size_t len, int rx_freq); 753 754 /* p2p.c */ 755 void p2p_set_state(struct p2p_data *p2p, int new_state); 756 void p2p_set_timeout(struct p2p_data *p2p, unsigned int sec, 757 unsigned int usec); 758 void p2p_clear_timeout(struct p2p_data *p2p); 759 void p2p_continue_find(struct p2p_data *p2p); 760 struct p2p_device * p2p_add_dev_from_go_neg_req(struct p2p_data *p2p, 761 const u8 *addr, 762 struct p2p_message *msg); 763 void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr, 764 struct p2p_device *dev, struct p2p_message *msg); 765 int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq, 766 struct os_reltime *rx_time, int level, const u8 *ies, 767 size_t ies_len, int scan_res); 768 struct p2p_device * p2p_get_device(struct p2p_data *p2p, const u8 *addr); 769 struct p2p_device * p2p_get_device_interface(struct p2p_data *p2p, 770 const u8 *addr); 771 void p2p_go_neg_failed(struct p2p_data *p2p, struct p2p_device *peer, 772 int status); 773 void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer); 774 int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps); 775 int dev_type_list_match(const u8 *dev_type, const u8 *req_dev_type[], 776 size_t num_req_dev_type); 777 struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p); 778 void p2p_build_ssid(struct p2p_data *p2p, u8 *ssid, size_t *ssid_len); 779 int p2p_send_action(struct p2p_data *p2p, unsigned int freq, const u8 *dst, 780 const u8 *src, const u8 *bssid, const u8 *buf, 781 size_t len, unsigned int wait_time); 782 void p2p_stop_listen_for_freq(struct p2p_data *p2p, int freq); 783 int p2p_prepare_channel(struct p2p_data *p2p, struct p2p_device *dev, 784 unsigned int force_freq, unsigned int pref_freq, 785 int go); 786 void p2p_dbg(struct p2p_data *p2p, const char *fmt, ...) 787 PRINTF_FORMAT(2, 3); 788 void p2p_info(struct p2p_data *p2p, const char *fmt, ...) 789 PRINTF_FORMAT(2, 3); 790 void p2p_err(struct p2p_data *p2p, const char *fmt, ...) 791 PRINTF_FORMAT(2, 3); 792 793 #endif /* P2P_I_H */ 794