11 #define P2P_GO_NEG_CNF_MAX_RETRY_COUNT 1
17 #define P2P_DEV_GROUP_CLIENT_RESP_THRESHOLD 1
19 enum p2p_role_indication;
25 #define MAX_SVC_ADV_LEN 600
26 #define MAX_SVC_ADV_IE_LEN (9 + MAX_SVC_ADV_LEN + (5 * (MAX_SVC_ADV_LEN / 240)))
43 enum p2p_wps_method wps_method;
57 u8 interface_addr[ETH_ALEN];
63 u8 member_in_go_dev[ETH_ALEN];
69 u8 member_in_go_iface[ETH_ALEN];
72 enum p2p_go_state go_state;
75 u8 intended_addr[ETH_ALEN];
80 u8 oper_ssid[SSID_MAX_LEN];
98 #define P2P_DEV_PROBE_REQ_ONLY BIT(0)
99 #define P2P_DEV_REPORTED BIT(1)
100 #define P2P_DEV_NOT_YET_READY BIT(2)
101 #define P2P_DEV_PD_PEER_DISPLAY BIT(5)
102 #define P2P_DEV_PD_PEER_KEYPAD BIT(6)
103 #define P2P_DEV_USER_REJECTED BIT(7)
104 #define P2P_DEV_PEER_WAITING_RESPONSE BIT(8)
105 #define P2P_DEV_PREFER_PERSISTENT_GROUP BIT(9)
106 #define P2P_DEV_WAIT_GO_NEG_RESPONSE BIT(10)
107 #define P2P_DEV_WAIT_GO_NEG_CONFIRM BIT(11)
108 #define P2P_DEV_GROUP_CLIENT_ONLY BIT(12)
109 #define P2P_DEV_FORCE_FREQ BIT(13)
110 #define P2P_DEV_PD_FOR_JOIN BIT(14)
111 #define P2P_DEV_REPORTED_ONCE BIT(15)
112 #define P2P_DEV_PREFER_PERSISTENT_RECONN BIT(16)
113 #define P2P_DEV_PD_BEFORE_GO_NEG BIT(17)
114 #define P2P_DEV_NO_PREF_CHAN BIT(18)
115 #define P2P_DEV_WAIT_INV_REQ_ACK BIT(19)
116 #define P2P_DEV_P2PS_REPORTED BIT(20)
117 #define P2P_DEV_PD_PEER_P2PS BIT(21)
118 #define P2P_DEV_LAST_SEEN_AS_GROUP_CLIENT BIT(22)
123 unsigned int wait_count;
124 unsigned int connect_reqs;
125 unsigned int invitation_reqs;
126 unsigned int sd_reqs;
128 u16 ext_listen_period;
129 u16 ext_listen_interval;
152 int sd_pending_bcast_queries;
169 unsigned int wait_time;
313 const u8 *invite_go_dev_addr;
314 u8 invite_go_dev_addr_buf[ETH_ALEN];
315 int invite_dev_pw_id;
317 unsigned int retry_invite_req:1;
318 unsigned int retry_invite_req_sent:1;
402 enum p2p_pending_action_state {
403 P2P_NO_PENDING_ACTION,
404 P2P_PENDING_GO_NEG_REQUEST,
405 P2P_PENDING_GO_NEG_RESPONSE,
406 P2P_PENDING_GO_NEG_RESPONSE_FAILURE,
407 P2P_PENDING_GO_NEG_CONFIRM,
410 P2P_PENDING_PD_RESPONSE,
411 P2P_PENDING_INVITATION_REQUEST,
412 P2P_PENDING_INVITATION_RESPONSE,
413 P2P_PENDING_DEV_DISC_REQUEST,
414 P2P_PENDING_DEV_DISC_RESPONSE,
415 P2P_PENDING_GO_DISC_REQ
416 } pending_action_state;
418 unsigned int pending_listen_freq;
419 unsigned int pending_listen_sec;
420 unsigned int pending_listen_usec;
440 u8 sd_resp_addr[ETH_ALEN];
441 u8 sd_resp_dialog_token;
445 struct wpabuf *sd_rx_resp;
446 u16 sd_rx_update_indic;
449 enum p2p_invite_role inv_role;
450 u8 inv_bssid[ETH_ALEN];
452 u8 inv_ssid[SSID_MAX_LEN];
455 u8 inv_group_bssid[ETH_ALEN];
456 u8 *inv_group_bssid_ptr;
457 u8 inv_go_dev_addr[ETH_ALEN];
462 enum p2p_discovery_type find_type;
463 unsigned int last_p2p_find_timeout;
464 u8 last_prog_scan_class;
465 u8 last_prog_scan_chan;
466 int p2p_scan_running;
467 enum p2p_after_scan {
468 P2P_AFTER_SCAN_NOTHING,
469 P2P_AFTER_SCAN_LISTEN,
470 P2P_AFTER_SCAN_CONNECT
472 u8 after_scan_peer[ETH_ALEN];
474 unsigned int after_scan_tx_in_progress:1;
475 unsigned int send_action_in_progress:1;
478 unsigned int num_req_dev_types;
481 u8 find_dev_id_buf[ETH_ALEN];
489 u8 pending_client_disc_addr[ETH_ALEN];
490 u8 pending_dev_disc_dialog_token;
491 u8 pending_dev_disc_addr[ETH_ALEN];
492 int pending_dev_disc_freq;
493 unsigned int pending_client_disc_freq;
496 unsigned int ext_listen_period;
497 unsigned int ext_listen_interval;
498 unsigned int ext_listen_interval_sec;
499 unsigned int ext_listen_interval_usec;
501 u8 peer_filter[ETH_ALEN];
507 int best_freq_overall;
508 int own_freq_preference;
519 u8 user_initiated_pd;
525 u8 pending_pd_devaddr[ETH_ALEN];
546 unsigned int search_delay;
549 u8 pending_reg_class;
551 u8 pending_channel_forced;
556 u8 wild_card_hash[P2PS_HASH_LEN];
558 u8 p2ps_seek_hash[P2P_MAX_QUERY_HASH * P2PS_HASH_LEN];
561 #ifdef CONFIG_WIFI_DISPLAY
562 struct wpabuf *wfd_ie_beacon;
563 struct wpabuf *wfd_ie_probe_req;
564 struct wpabuf *wfd_ie_probe_resp;
565 struct wpabuf *wfd_ie_assoc_req;
566 struct wpabuf *wfd_ie_invitation;
567 struct wpabuf *wfd_ie_prov_disc_req;
568 struct wpabuf *wfd_ie_prov_disc_resp;
569 struct wpabuf *wfd_ie_go_neg;
570 struct wpabuf *wfd_dev_info;
571 struct wpabuf *wfd_assoc_bssid;
572 struct wpabuf *wfd_coupled_sink_info;
575 u16 authorized_oob_dev_pw_id;
577 struct wpabuf **vendor_elem;
580 unsigned int num_pref_freq;
588 struct wpabuf *p2p_attributes;
589 struct wpabuf *wps_attributes;
590 struct wpabuf *wfd_subelems;
594 const u8 *capability;
597 const u8 *listen_channel;
598 const u8 *operating_channel;
599 const u8 *channel_list;
601 const u8 *config_timeout;
602 const u8 *intended_addr;
603 const u8 *group_bssid;
604 const u8 *invitation_flags;
606 const u8 *group_info;
607 size_t group_info_len;
614 const u8 *manageability;
619 const u8 *ext_listen_timing;
621 const u8 *minor_reason_code;
623 const u8 *oob_go_neg_channel;
626 const u8 *p2p_device_info;
627 size_t p2p_device_info_len;
628 const u8 *p2p_device_addr;
629 const u8 *pri_dev_type;
630 u8 num_sec_dev_types;
631 char device_name[WPS_DEV_NAME_MAX_LEN + 1];
636 int dev_password_id_present;
637 u16 wps_config_methods;
638 const u8 *wps_pri_dev_type;
639 const u8 *wps_sec_dev_type_list;
640 size_t wps_sec_dev_type_list_len;
641 const u8 *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
642 size_t wps_vendor_ext_len[P2P_MAX_WPS_VENDOR_EXT];
643 const u8 *manufacturer;
644 size_t manufacturer_len;
645 const u8 *model_name;
646 size_t model_name_len;
647 const u8 *model_number;
648 size_t model_number_len;
649 const u8 *serial_number;
650 size_t serial_number_len;
651 const u8 *oob_dev_password;
652 size_t oob_dev_password_len;
661 u8 service_hash_count;
662 const u8 *service_hash;
664 const u8 *session_info;
665 size_t session_info_len;
672 const u8 *adv_service_instance;
673 size_t adv_service_instance_len;
675 const u8 *session_id;
676 const u8 *session_mac;
678 const u8 *feature_cap;
679 size_t feature_cap_len;
681 const u8 *persistent_dev;
682 const u8 *persistent_ssid;
683 size_t persistent_ssid_len;
685 const u8 *pref_freq_list;
686 size_t pref_freq_list_len;
690 #define P2P_MAX_GROUP_ENTRIES 50
693 unsigned int num_clients;
695 const u8 *p2p_device_addr;
696 const u8 *p2p_interface_addr;
699 const u8 *pri_dev_type;
700 u8 num_sec_dev_types;
701 const u8 *sec_dev_types;
702 const char *dev_name;
704 } client[P2P_MAX_GROUP_ENTRIES];
720 void p2p_channels_remove_freqs(
struct p2p_channels *chan,
724 void p2p_channels_dump(
struct p2p_data *p2p,
const char *title,
726 int p2p_channel_select(
struct p2p_channels *chans,
const int *classes,
727 u8 *op_class, u8 *op_channel);
728 int p2p_channel_random_social(
struct p2p_channels *chans, u8 *op_class,
735 int p2p_parse_ies_separate(
const u8 *wsc,
size_t wsc_len,
const u8 *p2p,
739 int p2p_group_info_parse(
const u8 *gi,
size_t gi_len,
752 const u8 * p2p_group_get_interface_addr(
struct p2p_group *group);
753 u8 p2p_group_presence_req(
struct p2p_group *group,
754 const u8 *client_interface_addr,
755 const u8 *noa,
size_t noa_len);
756 int p2p_group_is_group_id_match(
struct p2p_group *group,
const u8 *group_id,
757 size_t group_id_len);
758 void p2p_group_update_ies(
struct p2p_group *group);
759 void p2p_group_force_beacon_update_ies(
struct p2p_group *group);
761 void p2p_buf_add_group_info(
struct p2p_group *group,
struct wpabuf *buf,
763 void p2p_group_buf_add_id(
struct p2p_group *group,
struct wpabuf *buf);
764 int p2p_group_get_freq(
struct p2p_group *group);
767 void p2p_buf_add_action_hdr(
struct wpabuf *buf, u8 subtype, u8 dialog_token);
768 void p2p_buf_add_public_action_hdr(
struct wpabuf *buf, u8 subtype,
770 u8 * p2p_buf_add_ie_hdr(
struct wpabuf *buf);
771 void p2p_buf_add_status(
struct wpabuf *buf, u8 status);
772 void p2p_buf_add_device_info(
struct wpabuf *buf,
struct p2p_data *p2p,
774 void p2p_buf_add_device_id(
struct wpabuf *buf,
const u8 *dev_addr);
775 void p2p_buf_update_ie_hdr(
struct wpabuf *buf, u8 *len);
776 void p2p_buf_add_capability(
struct wpabuf *buf, u8 dev_capab, u8 group_capab);
777 void p2p_buf_add_go_intent(
struct wpabuf *buf, u8 go_intent);
778 void p2p_buf_add_listen_channel(
struct wpabuf *buf,
const char *country,
779 u8 reg_class, u8 channel);
780 void p2p_buf_add_operating_channel(
struct wpabuf *buf,
const char *country,
781 u8 reg_class, u8 channel);
782 void p2p_buf_add_channel_list(
struct wpabuf *buf,
const char *country,
784 void p2p_buf_add_config_timeout(
struct wpabuf *buf, u8 go_timeout,
786 void p2p_buf_add_intended_addr(
struct wpabuf *buf,
const u8 *interface_addr);
787 void p2p_buf_add_group_bssid(
struct wpabuf *buf,
const u8 *bssid);
788 void p2p_buf_add_group_id(
struct wpabuf *buf,
const u8 *dev_addr,
789 const u8 *ssid,
size_t ssid_len);
790 void p2p_buf_add_invitation_flags(
struct wpabuf *buf, u8 flags);
791 void p2p_buf_add_noa(
struct wpabuf *buf, u8 noa_index, u8 opp_ps, u8 ctwindow,
793 void p2p_buf_add_ext_listen_timing(
struct wpabuf *buf, u16 period,
795 void p2p_buf_add_p2p_interface(
struct wpabuf *buf,
struct p2p_data *p2p);
796 void p2p_buf_add_oob_go_neg_channel(
struct wpabuf *buf,
const char *country,
797 u8 oper_class, u8 channel,
798 enum p2p_role_indication role);
799 void p2p_buf_add_service_hash(
struct wpabuf *buf,
struct p2p_data *p2p);
800 void p2p_buf_add_session_info(
struct wpabuf *buf,
const char *info);
801 void p2p_buf_add_connection_capability(
struct wpabuf *buf, u8 connection_cap);
802 void p2p_buf_add_advertisement_id(
struct wpabuf *buf, u32
id,
const u8 *mac);
803 void p2p_buf_add_service_instance(
struct wpabuf *buf,
struct p2p_data *p2p,
804 u8 count,
const u8 *hash,
806 void p2p_buf_add_session_id(
struct wpabuf *buf, u32
id,
const u8 *mac);
807 void p2p_buf_add_feature_capability(
struct wpabuf *buf, u16 len,
809 void p2p_buf_add_persistent_group_info(
struct wpabuf *buf,
const u8 *dev_addr,
810 const u8 *ssid,
size_t ssid_len);
811 int p2p_build_wps_ie(
struct p2p_data *p2p,
struct wpabuf *buf,
int pw_id,
813 void p2p_buf_add_pref_channel_list(
struct wpabuf *buf,
814 const u32 *preferred_freq_list, u32 size);
819 void p2p_free_sd_queries(
struct p2p_data *p2p);
820 void p2p_rx_gas_initial_req(
struct p2p_data *p2p,
const u8 *sa,
821 const u8 *data,
size_t len,
int rx_freq);
822 void p2p_rx_gas_initial_resp(
struct p2p_data *p2p,
const u8 *sa,
823 const u8 *data,
size_t len,
int rx_freq);
824 void p2p_rx_gas_comeback_req(
struct p2p_data *p2p,
const u8 *sa,
825 const u8 *data,
size_t len,
int rx_freq);
826 void p2p_rx_gas_comeback_resp(
struct p2p_data *p2p,
const u8 *sa,
827 const u8 *data,
size_t len,
int rx_freq);
833 const u8 *channel_list,
size_t channel_list_len);
834 void p2p_process_go_neg_req(
struct p2p_data *p2p,
const u8 *sa,
835 const u8 *data,
size_t len,
int rx_freq);
836 void p2p_process_go_neg_resp(
struct p2p_data *p2p,
const u8 *sa,
837 const u8 *data,
size_t len,
int rx_freq);
838 void p2p_process_go_neg_conf(
struct p2p_data *p2p,
const u8 *sa,
839 const u8 *data,
size_t len);
841 u16 p2p_wps_method_pw_id(
enum p2p_wps_method wps_method);
844 void p2p_check_pref_chan(
struct p2p_data *p2p,
int go,
848 void p2p_process_prov_disc_req(
struct p2p_data *p2p,
const u8 *sa,
849 const u8 *data,
size_t len,
int rx_freq);
850 void p2p_process_prov_disc_resp(
struct p2p_data *p2p,
const u8 *sa,
851 const u8 *data,
size_t len);
853 int join,
int force_freq);
854 void p2p_reset_pending_pd(
struct p2p_data *p2p);
855 void p2ps_prov_free(
struct p2p_data *p2p);
858 void p2p_process_invitation_req(
struct p2p_data *p2p,
const u8 *sa,
859 const u8 *data,
size_t len,
int rx_freq);
860 void p2p_process_invitation_resp(
struct p2p_data *p2p,
const u8 *sa,
861 const u8 *data,
size_t len);
863 const u8 *go_dev_addr,
int dev_pw_id);
864 void p2p_invitation_req_cb(
struct p2p_data *p2p,
int success);
865 void p2p_invitation_resp_cb(
struct p2p_data *p2p,
int success);
868 void p2p_process_dev_disc_req(
struct p2p_data *p2p,
const u8 *sa,
869 const u8 *data,
size_t len,
int rx_freq);
870 void p2p_dev_disc_req_cb(
struct p2p_data *p2p,
int success);
872 void p2p_dev_disc_resp_cb(
struct p2p_data *p2p,
int success);
873 void p2p_process_dev_disc_resp(
struct p2p_data *p2p,
const u8 *sa,
874 const u8 *data,
size_t len);
875 void p2p_go_disc_req_cb(
struct p2p_data *p2p,
int success);
876 void p2p_process_go_disc_req(
struct p2p_data *p2p,
const u8 *da,
const u8 *sa,
877 const u8 *data,
size_t len,
int rx_freq);
880 void p2p_set_state(
struct p2p_data *p2p,
int new_state);
881 void p2p_set_timeout(
struct p2p_data *p2p,
unsigned int sec,
883 void p2p_clear_timeout(
struct p2p_data *p2p);
884 void p2p_continue_find(
struct p2p_data *p2p);
888 void p2p_add_dev_info(
struct p2p_data *p2p,
const u8 *addr,
891 struct os_reltime *rx_time,
int level,
const u8 *ies,
892 size_t ies_len,
int scan_res);
896 void p2p_go_neg_failed(
struct p2p_data *p2p,
int status);
899 int dev_type_list_match(
const u8 *dev_type,
const u8 *req_dev_type[],
900 size_t num_req_dev_type);
902 const u8 *query_hash,
904 void p2p_build_ssid(
struct p2p_data *p2p, u8 *ssid,
size_t *ssid_len);
905 int p2p_send_action(
struct p2p_data *p2p,
unsigned int freq,
const u8 *dst,
906 const u8 *src,
const u8 *bssid,
const u8 *buf,
907 size_t len,
unsigned int wait_time);
908 void p2p_stop_listen_for_freq(
struct p2p_data *p2p,
int freq);
910 unsigned int force_freq,
unsigned int pref_freq,
912 void p2p_go_neg_wait_timeout(
void *eloop_ctx,
void *timeout_ctx);
915 void p2p_dbg(
struct p2p_data *p2p,
const char *fmt, ...)
917 void p2p_info(struct
p2p_data *p2p, const
char *fmt, ...)
919 void p2p_err(struct
p2p_data *p2p, const
char *fmt, ...)
struct p2p_device * go_neg_peer
Pointer to GO Negotiation peer.
Definition: p2p_i.h:299
int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq, struct os_reltime *rx_time, int level, const u8 *ies, size_t ies_len, int scan_res)
Add peer entries based on scan results or P2P frames.
Definition: p2p.c:700
int p2p_attr_text(struct wpabuf *data, char *buf, char *end)
Build text format description of P2P IE attributes.
Definition: p2p_parse.c:769
int max_disc_tu
Maximum number of TUs for discoverable interval.
Definition: p2p_i.h:287
Waiting peer in List for GO Neg.
Definition: p2p_i.h:232
Provisioning (during group formation)
Definition: p2p_i.h:250
Parsed P2P message (or P2P IE)
Definition: p2p_i.h:587
struct wpabuf * wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT]
WPS Vendor Extensions to add.
Definition: p2p_i.h:514
struct p2p_device * invite_peer
Pointer to Invite peer.
Definition: p2p_i.h:305
void p2p_parse_free(struct p2p_message *msg)
Free temporary data from P2P parsing.
Definition: p2p_parse.c:610
struct p2p_sd_query * sd_query
Pointer to Service Discovery query.
Definition: p2p_i.h:330
int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class, u8 channel)
Check whether a channel is included in the list.
Definition: p2p_utils.c:250
size_t ssid_len
ssid length in octets
Definition: p2p_i.h:373
int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps)
Match local device type with requested type.
Definition: p2p.c:2122
P2P configuration.
Definition: p2p.h:470
int p2p_random(char *buf, size_t len)
Generate random string for SSID and passphrase.
Definition: p2p_utils.c:22
u8 go_neg_conf_sent
Number of GO Negotiation Confirmation retries.
Definition: p2p_i.h:138
Trying to start GO Negotiation.
Definition: p2p_i.h:208
P2P peer information.
Definition: p2p.h:344
void p2p_reselect_channel(struct p2p_data *p2p, struct p2p_channels *intersection)
Re-select operating channel based on peer information.
Definition: p2p_go_neg.c:374
u8 op_reg_class
Regulatory class for own operational channel.
Definition: p2p_i.h:382
Search (Device Discovery)
Definition: p2p_i.h:202
Provision Discovery during find.
Definition: p2p_i.h:256
void p2p_channels_union(const struct p2p_channels *a, const struct p2p_channels *b, struct p2p_channels *res)
Union of channel lists.
Definition: p2p_utils.c:198
int go_neg_conf_freq
Frquency on which the GO Negotiation Confirmation is sent.
Definition: p2p_i.h:144
void p2p_channels_intersect(const struct p2p_channels *a, const struct p2p_channels *b, struct p2p_channels *res)
Intersection of supported channel lists.
Definition: p2p_utils.c:107
struct p2p_channels channels
Own supported regulatory classes and channels.
Definition: p2p_i.h:398
u8 op_channel
Own operational channel.
Definition: p2p_i.h:388
int p2p_prepare_channel(struct p2p_data *p2p, struct p2p_device *dev, unsigned int force_freq, unsigned int pref_freq, int go)
Select operating channel for GO Negotiation.
Definition: p2p.c:1471
int min_disc_int
minDiscoverableInterval
Definition: p2p_i.h:275
Wi-Fi Direct - P2P module.
struct p2p_device * p2p_get_device_interface(struct p2p_data *p2p, const u8 *addr)
Fetch a peer entry based on P2P Interface Address.
Definition: p2p.c:388
struct p2p_device * p2p_get_device(struct p2p_data *p2p, const u8 *addr)
Fetch a peer entry.
Definition: p2p.c:371
struct p2p_device * sd_peer
Pointer to Service Discovery peer.
Definition: p2p_i.h:324
Trying to start Invite.
Definition: p2p_i.h:262
struct p2p_config * cfg
P2P module configuration.
Definition: p2p_i.h:185
void p2p_channels_union_inplace(struct p2p_channels *res, const struct p2p_channels *b)
Inplace union of channel lists.
Definition: p2p_utils.c:158
Listen during Invite.
Definition: p2p_i.h:268
struct p2p_device * last_p2p_find_oper
Pointer to last pre-find operation peer.
Definition: p2p_i.h:311
P2P Device data (internal to P2P module)
Definition: p2p_i.h:38
List of supported channels.
Definition: p2p.h:44
Idle.
Definition: p2p_i.h:196
u8 intended_addr[ETH_ALEN]
Local Intended P2P Interface Address.
Definition: p2p_i.h:349
P2P module data (internal to P2P module)
Definition: p2p_i.h:177
Waiting peer idle for GO Neg.
Definition: p2p_i.h:238
In GO Negotiation.
Definition: p2p_i.h:220
p2p_state
The current P2P state.
Definition: p2p_i.h:191
Listen during GO Negotiation start.
Definition: p2p_i.h:214
Doubly-linked list.
Definition: list.h:12
int max_disc_int
maxDiscoverableInterval
Definition: p2p_i.h:281
u8 ssid[SSID_MAX_LEN]
Selected SSID for GO Negotiation (if local end will be GO)
Definition: p2p_i.h:367
#define P2P_MAX_PREF_CHANNELS
Maximum number of preferred channels.
Definition: p2p.h:26
int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg)
Parse P2P IE.
Definition: p2p_parse.c:405
int ssid_set
Whether SSID is already set for GO Negotiation.
Definition: p2p_i.h:379
int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel)
Convert frequency into channel info.
Definition: p2p_utils.c:65
u8 next_tie_breaker
Next tie-breaker value to use in GO Negotiation.
Definition: p2p_i.h:361
u16 srv_update_indic
Service Update Indicator for local services.
Definition: p2p_i.h:437
Service Discovery during find.
Definition: p2p_i.h:244
struct p2p_sd_query * sd_queries
Pending service discovery queries.
Definition: p2p_i.h:431
int p2p_channel_to_freq(int op_class, int channel)
Convert channel info to frequency.
Definition: p2p_utils.c:53
u16 req_config_methods
Pending provision discovery methods.
Definition: p2p_i.h:87
struct wpabuf * go_neg_conf
GO Negotiation Confirmation frame.
Definition: p2p_i.h:150
int p2p_parse(const u8 *data, size_t len, struct p2p_message *msg)
Parse a P2P Action frame contents.
Definition: p2p_parse.c:564
Internal P2P module per-group data.
Definition: p2p_group.c:31
int pd_force_freq
Forced frequency for PD retries or 0 to auto-select.
Definition: p2p_i.h:540
u16 wps_prov_info
Stored provisioning WPS config method.
Definition: p2p_i.h:96
u8 go_intent
Local GO Intent to be used during GO Negotiation.
Definition: p2p_i.h:355
int num_p2p_sd_queries
Total number of broadcast SD queries present in the list.
Definition: p2p_i.h:336
struct dl_list devices
List of known P2P Device peers.
Definition: p2p_i.h:293
int p2p_parse_ies(const u8 *data, size_t len, struct p2p_message *msg)
Parse P2P message IEs (both WPS and P2P IE)
Definition: p2p_parse.c:510
Listen only.
Definition: p2p_i.h:226