hostapd
p2p_i.h
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 /*
18  * A threshold (in seconds) to prefer a direct Probe Response frame from a P2P
19  * Device over the P2P Client Info received from a GO.
20  */
21 #define P2P_DEV_GROUP_CLIENT_RESP_THRESHOLD 1
22 
23 enum p2p_role_indication;
24 
25 /*
26  * To force Service Instances to fit within a single P2P Tag, MAX_SVC_ADV_LEN
27  * must equal 248 or less. Must have a minimum size of 19.
28  */
29 #define MAX_SVC_ADV_LEN 600
30 #define MAX_SVC_ADV_IE_LEN (9 + MAX_SVC_ADV_LEN + (5 * (MAX_SVC_ADV_LEN / 240)))
31 
32 enum p2p_go_state {
33  UNKNOWN_GO,
34  LOCAL_GO,
35  REMOTE_GO
36 };
37 
41 struct p2p_device {
42  struct dl_list list;
43  struct os_reltime last_seen;
44  int listen_freq;
45  int oob_go_neg_freq;
46  enum p2p_wps_method wps_method;
47  u16 oob_pw_id;
48 
49  struct p2p_peer_info info;
50 
51  /*
52  * If the peer was discovered based on an interface address (e.g., GO
53  * from Beacon/Probe Response), the interface address is stored here.
54  * p2p_device_addr must still be set in such a case to the unique
55  * identifier for the P2P Device.
56  *
57  * This field is also used during P2PS PD to store the intended GO
58  * address of the peer.
59  */
60  u8 interface_addr[ETH_ALEN];
61 
62  /*
63  * P2P Device Address of the GO in whose group this P2P Device is a
64  * client.
65  */
66  u8 member_in_go_dev[ETH_ALEN];
67 
68  /*
69  * P2P Interface Address of the GO in whose group this P2P Device is a
70  * client.
71  */
72  u8 member_in_go_iface[ETH_ALEN];
73 
74  int go_neg_req_sent;
75  enum p2p_go_state go_state;
76  u8 dialog_token;
77  u8 tie_breaker;
78  u8 intended_addr[ETH_ALEN];
79 
80  char country[3];
81  struct p2p_channels channels;
82  int oper_freq;
83  u8 oper_ssid[SSID_MAX_LEN];
84  size_t oper_ssid_len;
85 
90 
98 
99 #define P2P_DEV_PROBE_REQ_ONLY BIT(0)
100 #define P2P_DEV_REPORTED BIT(1)
101 #define P2P_DEV_NOT_YET_READY BIT(2)
102 #define P2P_DEV_PD_PEER_DISPLAY BIT(5)
103 #define P2P_DEV_PD_PEER_KEYPAD BIT(6)
104 #define P2P_DEV_USER_REJECTED BIT(7)
105 #define P2P_DEV_PEER_WAITING_RESPONSE BIT(8)
106 #define P2P_DEV_PREFER_PERSISTENT_GROUP BIT(9)
107 #define P2P_DEV_WAIT_GO_NEG_RESPONSE BIT(10)
108 #define P2P_DEV_WAIT_GO_NEG_CONFIRM BIT(11)
109 #define P2P_DEV_GROUP_CLIENT_ONLY BIT(12)
110 #define P2P_DEV_FORCE_FREQ BIT(13)
111 #define P2P_DEV_PD_FOR_JOIN BIT(14)
112 #define P2P_DEV_REPORTED_ONCE BIT(15)
113 #define P2P_DEV_PREFER_PERSISTENT_RECONN BIT(16)
114 #define P2P_DEV_PD_BEFORE_GO_NEG BIT(17)
115 #define P2P_DEV_NO_PREF_CHAN BIT(18)
116 #define P2P_DEV_WAIT_INV_REQ_ACK BIT(19)
117 #define P2P_DEV_P2PS_REPORTED BIT(20)
118 #define P2P_DEV_PD_PEER_P2PS BIT(21)
119 #define P2P_DEV_LAST_SEEN_AS_GROUP_CLIENT BIT(22)
120 
121  unsigned int flags;
122 
123  int status; /* enum p2p_status_code */
124  unsigned int wait_count;
125  unsigned int connect_reqs;
126  unsigned int invitation_reqs;
127  unsigned int sd_reqs;
128 
129  u16 ext_listen_period;
130  u16 ext_listen_interval;
131 
132  u8 go_timeout;
133  u8 client_timeout;
134 
139 
144 
149 
150  int sd_pending_bcast_queries;
151 };
152 
153 struct p2p_sd_query {
154  struct p2p_sd_query *next;
155  u8 peer[ETH_ALEN];
156  int for_all_peers;
157  int wsd; /* Wi-Fi Display Service Discovery Request */
158  struct wpabuf *tlvs;
159 };
160 
162  unsigned int freq;
163  u8 dst[ETH_ALEN];
164  u8 src[ETH_ALEN];
165  u8 bssid[ETH_ALEN];
166  size_t len;
167  unsigned int wait_time;
168  /* Followed by len octets of the frame */
169 };
170 
174 struct p2p_data {
181  struct p2p_config *cfg;
182 
186  enum p2p_state {
191 
196 
201 
206 
211 
216 
221 
226 
231 
236 
241 
246 
251  } state;
252 
257 
262 
267 
271  struct dl_list devices;
272 
277 
282 
287 
288  const u8 *invite_go_dev_addr;
289  u8 invite_go_dev_addr_buf[ETH_ALEN];
290  int invite_dev_pw_id;
291 
292  unsigned int retry_invite_req:1;
293  unsigned int retry_invite_req_sent:1;
294 
299 
304 
310 
321  u8 sd_query_no_ack[ETH_ALEN];
322 
323  /* GO Negotiation data */
324 
333  u8 intended_addr[ETH_ALEN];
334 
339 
344 
348  u8 ssid[SSID_MAX_LEN];
349 
353  size_t ssid_len;
354 
358  int ssid_set;
359 
364 
369 
377  struct p2p_channels channels;
378 
379  struct wpa_freq_range_list no_go_freq;
380 
381  enum p2p_pending_action_state {
382  P2P_NO_PENDING_ACTION,
383  P2P_PENDING_GO_NEG_REQUEST,
384  P2P_PENDING_GO_NEG_RESPONSE,
385  P2P_PENDING_GO_NEG_RESPONSE_FAILURE,
386  P2P_PENDING_GO_NEG_CONFIRM,
387  P2P_PENDING_SD,
388  P2P_PENDING_PD,
389  P2P_PENDING_PD_RESPONSE,
390  P2P_PENDING_INVITATION_REQUEST,
391  P2P_PENDING_INVITATION_RESPONSE,
392  P2P_PENDING_DEV_DISC_REQUEST,
393  P2P_PENDING_DEV_DISC_RESPONSE,
394  P2P_PENDING_GO_DISC_REQ
395  } pending_action_state;
396 
397  unsigned int pending_listen_freq;
398  unsigned int pending_listen_sec;
399  unsigned int pending_listen_usec;
400 
401  u8 dev_capab;
402 
403  int in_listen;
404  int drv_in_listen;
405 
410 
415 
416  struct wpabuf *sd_resp; /* Fragmented SD response */
417  u8 sd_resp_addr[ETH_ALEN];
418  u8 sd_resp_dialog_token;
419  size_t sd_resp_pos; /* Offset in sd_resp */
420  u8 sd_frag_id;
421 
422  struct wpabuf *sd_rx_resp; /* Reassembled SD response */
423  u16 sd_rx_update_indic;
424 
425  /* P2P Invitation data */
426  enum p2p_invite_role inv_role;
427  u8 inv_bssid[ETH_ALEN];
428  int inv_bssid_set;
429  u8 inv_ssid[SSID_MAX_LEN];
430  size_t inv_ssid_len;
431  u8 inv_sa[ETH_ALEN];
432  u8 inv_group_bssid[ETH_ALEN];
433  u8 *inv_group_bssid_ptr;
434  u8 inv_go_dev_addr[ETH_ALEN];
435  u8 inv_status;
436  int inv_op_freq;
437  int inv_persistent;
438 
439  enum p2p_discovery_type find_type;
440  unsigned int last_p2p_find_timeout;
441  u8 last_prog_scan_class;
442  u8 last_prog_scan_chan;
443  int p2p_scan_running;
444  enum p2p_after_scan {
445  P2P_AFTER_SCAN_NOTHING,
446  P2P_AFTER_SCAN_LISTEN,
447  P2P_AFTER_SCAN_CONNECT
448  } start_after_scan;
449  u8 after_scan_peer[ETH_ALEN];
450  struct p2p_pending_action_tx *after_scan_tx;
451  unsigned int after_scan_tx_in_progress:1;
452  unsigned int send_action_in_progress:1;
453 
454  /* Requested device types for find/search */
455  unsigned int num_req_dev_types;
456  u8 *req_dev_types;
457  u8 *find_dev_id;
458  u8 find_dev_id_buf[ETH_ALEN];
459 
460  struct os_reltime find_start; /* time of last p2p_find start */
461 
462  struct p2p_group **groups;
463  size_t num_groups;
464 
465  struct p2p_device *pending_client_disc_go;
466  u8 pending_client_disc_addr[ETH_ALEN];
467  u8 pending_dev_disc_dialog_token;
468  u8 pending_dev_disc_addr[ETH_ALEN];
469  int pending_dev_disc_freq;
470  unsigned int pending_client_disc_freq;
471 
472  int ext_listen_only;
473  unsigned int ext_listen_period;
474  unsigned int ext_listen_interval;
475  unsigned int ext_listen_interval_sec;
476  unsigned int ext_listen_interval_usec;
477 
478  u8 peer_filter[ETH_ALEN];
479 
480  int cross_connect;
481 
482  int best_freq_24;
483  int best_freq_5;
484  int best_freq_overall;
485  int own_freq_preference;
486 
490  struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
491 
492  /*
493  * user_initiated_pd - Whether a PD request is user initiated or not.
494  */
495  u8 user_initiated_pd;
496 
497  /*
498  * Keep track of which peer a given PD request was sent to.
499  * Used to raise a timeout alert in case there is no response.
500  */
501  u8 pending_pd_devaddr[ETH_ALEN];
502 
503  /*
504  * Retry counter for provision discovery requests when issued
505  * in IDLE state.
506  */
507  int pd_retries;
508 
516 
517  u8 go_timeout;
518  u8 client_timeout;
519 
520  /* Extra delay in milliseconds between search iterations */
521  unsigned int search_delay;
522  int in_search_delay;
523 
524  u8 pending_reg_class;
525  u8 pending_channel;
526  u8 pending_channel_forced;
527 
528  /* ASP Support */
529  struct p2ps_advertisement *p2ps_adv_list;
530  struct p2ps_provision *p2ps_prov;
531  u8 wild_card_hash[P2PS_HASH_LEN];
532  u8 p2ps_seek;
533  u8 p2ps_seek_hash[P2P_MAX_QUERY_HASH * P2PS_HASH_LEN];
534  u8 p2ps_seek_count;
535 
536 #ifdef CONFIG_WIFI_DISPLAY
537  struct wpabuf *wfd_ie_beacon;
538  struct wpabuf *wfd_ie_probe_req;
539  struct wpabuf *wfd_ie_probe_resp;
540  struct wpabuf *wfd_ie_assoc_req;
541  struct wpabuf *wfd_ie_invitation;
542  struct wpabuf *wfd_ie_prov_disc_req;
543  struct wpabuf *wfd_ie_prov_disc_resp;
544  struct wpabuf *wfd_ie_go_neg;
545  struct wpabuf *wfd_dev_info;
546  struct wpabuf *wfd_assoc_bssid;
547  struct wpabuf *wfd_coupled_sink_info;
548 #endif /* CONFIG_WIFI_DISPLAY */
549 
550  u16 authorized_oob_dev_pw_id;
551 
552  struct wpabuf **vendor_elem;
553 
554  unsigned int pref_freq_list[P2P_MAX_PREF_CHANNELS];
555  unsigned int num_pref_freq;
556 };
557 
561 struct p2p_message {
562  struct wpabuf *p2p_attributes;
563  struct wpabuf *wps_attributes;
564  struct wpabuf *wfd_subelems;
565 
566  u8 dialog_token;
567 
568  const u8 *capability;
569  const u8 *go_intent;
570  const u8 *status;
571  const u8 *listen_channel;
572  const u8 *operating_channel;
573  const u8 *channel_list;
574  u8 channel_list_len;
575  const u8 *config_timeout;
576  const u8 *intended_addr;
577  const u8 *group_bssid;
578  const u8 *invitation_flags;
579 
580  const u8 *group_info;
581  size_t group_info_len;
582 
583  const u8 *group_id;
584  size_t group_id_len;
585 
586  const u8 *device_id;
587 
588  const u8 *manageability;
589 
590  const u8 *noa;
591  size_t noa_len;
592 
593  const u8 *ext_listen_timing;
594 
595  const u8 *minor_reason_code;
596 
597  const u8 *oob_go_neg_channel;
598 
599  /* P2P Device Info */
600  const u8 *p2p_device_info;
601  size_t p2p_device_info_len;
602  const u8 *p2p_device_addr;
603  const u8 *pri_dev_type;
604  u8 num_sec_dev_types;
605  char device_name[WPS_DEV_NAME_MAX_LEN + 1];
606  u16 config_methods;
607 
608  /* WPS IE */
609  u16 dev_password_id;
610  int dev_password_id_present;
611  u16 wps_config_methods;
612  const u8 *wps_pri_dev_type;
613  const u8 *wps_sec_dev_type_list;
614  size_t wps_sec_dev_type_list_len;
615  const u8 *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
616  size_t wps_vendor_ext_len[P2P_MAX_WPS_VENDOR_EXT];
617  const u8 *manufacturer;
618  size_t manufacturer_len;
619  const u8 *model_name;
620  size_t model_name_len;
621  const u8 *model_number;
622  size_t model_number_len;
623  const u8 *serial_number;
624  size_t serial_number_len;
625  const u8 *oob_dev_password;
626  size_t oob_dev_password_len;
627 
628  /* DS Parameter Set IE */
629  const u8 *ds_params;
630 
631  /* SSID IE */
632  const u8 *ssid;
633 
634  /* P2PS */
635  u8 service_hash_count;
636  const u8 *service_hash;
637 
638  const u8 *session_info;
639  size_t session_info_len;
640 
641  const u8 *conn_cap;
642 
643  const u8 *adv_id;
644  const u8 *adv_mac;
645 
646  const u8 *adv_service_instance;
647  size_t adv_service_instance_len;
648 
649  const u8 *session_id;
650  const u8 *session_mac;
651 
652  const u8 *feature_cap;
653  size_t feature_cap_len;
654 
655  const u8 *persistent_dev;
656  const u8 *persistent_ssid;
657  size_t persistent_ssid_len;
658 
659  const u8 *pref_freq_list;
660  size_t pref_freq_list_len;
661 };
662 
663 
664 #define P2P_MAX_GROUP_ENTRIES 50
665 
667  unsigned int num_clients;
669  const u8 *p2p_device_addr;
670  const u8 *p2p_interface_addr;
671  u8 dev_capab;
672  u16 config_methods;
673  const u8 *pri_dev_type;
674  u8 num_sec_dev_types;
675  const u8 *sec_dev_types;
676  const char *dev_name;
677  size_t dev_name_len;
678  } client[P2P_MAX_GROUP_ENTRIES];
679 };
680 
681 
682 /* p2p_utils.c */
683 int p2p_random(char *buf, size_t len);
684 int p2p_channel_to_freq(int op_class, int channel);
685 int p2p_freq_to_channel(unsigned int freq, u8 *op_class, u8 *channel);
686 void p2p_channels_intersect(const struct p2p_channels *a,
687  const struct p2p_channels *b,
688  struct p2p_channels *res);
689 void p2p_channels_union_inplace(struct p2p_channels *res,
690  const struct p2p_channels *b);
691 void p2p_channels_union(const struct p2p_channels *a,
692  const struct p2p_channels *b,
693  struct p2p_channels *res);
694 void p2p_channels_remove_freqs(struct p2p_channels *chan,
695  const struct wpa_freq_range_list *list);
696 int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class,
697  u8 channel);
698 void p2p_channels_dump(struct p2p_data *p2p, const char *title,
699  const struct p2p_channels *chan);
700 int p2p_channel_select(struct p2p_channels *chans, const int *classes,
701  u8 *op_class, u8 *op_channel);
702 int p2p_channel_random_social(struct p2p_channels *chans, u8 *op_class,
703  u8 *op_channel);
704 
705 /* p2p_parse.c */
706 void p2p_copy_filter_devname(char *dst, size_t dst_len,
707  const void *src, size_t src_len);
708 int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg);
709 int p2p_parse_ies(const u8 *data, size_t len, struct p2p_message *msg);
710 int p2p_parse(const u8 *data, size_t len, struct p2p_message *msg);
711 int p2p_parse_ies_separate(const u8 *wsc, size_t wsc_len, const u8 *p2p,
712  size_t p2p_len, struct p2p_message *msg);
713 void p2p_parse_free(struct p2p_message *msg);
714 int p2p_attr_text(struct wpabuf *data, char *buf, char *end);
715 int p2p_group_info_parse(const u8 *gi, size_t gi_len,
716  struct p2p_group_info *info);
717 
718 /* p2p_build.c */
719 
720 struct p2p_noa_desc {
721  u8 count_type;
722  u32 duration;
723  u32 interval;
724  u32 start_time;
725 };
726 
727 /* p2p_group.c */
728 const u8 * p2p_group_get_interface_addr(struct p2p_group *group);
729 u8 p2p_group_presence_req(struct p2p_group *group,
730  const u8 *client_interface_addr,
731  const u8 *noa, size_t noa_len);
732 int p2p_group_is_group_id_match(struct p2p_group *group, const u8 *group_id,
733  size_t group_id_len);
734 void p2p_group_update_ies(struct p2p_group *group);
735 void p2p_group_force_beacon_update_ies(struct p2p_group *group);
736 struct wpabuf * p2p_group_get_wfd_ie(struct p2p_group *g);
737 void p2p_buf_add_group_info(struct p2p_group *group, struct wpabuf *buf,
738  int max_clients);
739 void p2p_group_buf_add_id(struct p2p_group *group, struct wpabuf *buf);
740 int p2p_group_get_freq(struct p2p_group *group);
741 
742 
743 void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token);
744 void p2p_buf_add_public_action_hdr(struct wpabuf *buf, u8 subtype,
745  u8 dialog_token);
746 u8 * p2p_buf_add_ie_hdr(struct wpabuf *buf);
747 void p2p_buf_add_status(struct wpabuf *buf, u8 status);
748 void p2p_buf_add_device_info(struct wpabuf *buf, struct p2p_data *p2p,
749  struct p2p_device *peer);
750 void p2p_buf_add_device_id(struct wpabuf *buf, const u8 *dev_addr);
751 void p2p_buf_update_ie_hdr(struct wpabuf *buf, u8 *len);
752 void p2p_buf_add_capability(struct wpabuf *buf, u8 dev_capab, u8 group_capab);
753 void p2p_buf_add_go_intent(struct wpabuf *buf, u8 go_intent);
754 void p2p_buf_add_listen_channel(struct wpabuf *buf, const char *country,
755  u8 reg_class, u8 channel);
756 void p2p_buf_add_operating_channel(struct wpabuf *buf, const char *country,
757  u8 reg_class, u8 channel);
758 void p2p_buf_add_channel_list(struct wpabuf *buf, const char *country,
759  struct p2p_channels *chan);
760 void p2p_buf_add_config_timeout(struct wpabuf *buf, u8 go_timeout,
761  u8 client_timeout);
762 void p2p_buf_add_intended_addr(struct wpabuf *buf, const u8 *interface_addr);
763 void p2p_buf_add_group_bssid(struct wpabuf *buf, const u8 *bssid);
764 void p2p_buf_add_group_id(struct wpabuf *buf, const u8 *dev_addr,
765  const u8 *ssid, size_t ssid_len);
766 void p2p_buf_add_invitation_flags(struct wpabuf *buf, u8 flags);
767 void p2p_buf_add_noa(struct wpabuf *buf, u8 noa_index, u8 opp_ps, u8 ctwindow,
768  struct p2p_noa_desc *desc1, struct p2p_noa_desc *desc2);
769 void p2p_buf_add_ext_listen_timing(struct wpabuf *buf, u16 period,
770  u16 interval);
771 void p2p_buf_add_p2p_interface(struct wpabuf *buf, struct p2p_data *p2p);
772 void p2p_buf_add_oob_go_neg_channel(struct wpabuf *buf, const char *country,
773  u8 oper_class, u8 channel,
774  enum p2p_role_indication role);
775 void p2p_buf_add_service_hash(struct wpabuf *buf, struct p2p_data *p2p);
776 void p2p_buf_add_session_info(struct wpabuf *buf, const char *info);
777 void p2p_buf_add_connection_capability(struct wpabuf *buf, u8 connection_cap);
778 void p2p_buf_add_advertisement_id(struct wpabuf *buf, u32 id, const u8 *mac);
779 void p2p_buf_add_service_instance(struct wpabuf *buf, struct p2p_data *p2p,
780  u8 count, const u8 *hash,
781  struct p2ps_advertisement *adv_list);
782 void p2p_buf_add_session_id(struct wpabuf *buf, u32 id, const u8 *mac);
783 void p2p_buf_add_feature_capability(struct wpabuf *buf, u16 len,
784  const u8 *mask);
785 void p2p_buf_add_persistent_group_info(struct wpabuf *buf, const u8 *dev_addr,
786  const u8 *ssid, size_t ssid_len);
787 int p2p_build_wps_ie(struct p2p_data *p2p, struct wpabuf *buf, int pw_id,
788  int all_attr);
789 void p2p_buf_add_pref_channel_list(struct wpabuf *buf,
790  const u32 *preferred_freq_list, u32 size);
791 
792 /* p2p_sd.c */
793 struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p,
794  struct p2p_device *dev);
795 void p2p_free_sd_queries(struct p2p_data *p2p);
796 void p2p_rx_gas_initial_req(struct p2p_data *p2p, const u8 *sa,
797  const u8 *data, size_t len, int rx_freq);
798 void p2p_rx_gas_initial_resp(struct p2p_data *p2p, const u8 *sa,
799  const u8 *data, size_t len, int rx_freq);
800 void p2p_rx_gas_comeback_req(struct p2p_data *p2p, const u8 *sa,
801  const u8 *data, size_t len, int rx_freq);
802 void p2p_rx_gas_comeback_resp(struct p2p_data *p2p, const u8 *sa,
803  const u8 *data, size_t len, int rx_freq);
804 int p2p_start_sd(struct p2p_data *p2p, struct p2p_device *dev);
805 
806 /* p2p_go_neg.c */
807 int p2p_peer_channels_check(struct p2p_data *p2p, struct p2p_channels *own,
808  struct p2p_device *dev,
809  const u8 *channel_list, size_t channel_list_len);
810 void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa,
811  const u8 *data, size_t len, int rx_freq);
812 void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa,
813  const u8 *data, size_t len, int rx_freq);
814 void p2p_process_go_neg_conf(struct p2p_data *p2p, const u8 *sa,
815  const u8 *data, size_t len);
816 int p2p_connect_send(struct p2p_data *p2p, struct p2p_device *dev);
817 u16 p2p_wps_method_pw_id(enum p2p_wps_method wps_method);
818 void p2p_reselect_channel(struct p2p_data *p2p,
819  struct p2p_channels *intersection);
820 void p2p_check_pref_chan(struct p2p_data *p2p, int go,
821  struct p2p_device *dev, struct p2p_message *msg);
822 
823 /* p2p_pd.c */
824 void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa,
825  const u8 *data, size_t len, int rx_freq);
826 void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
827  const u8 *data, size_t len);
828 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev,
829  int join, int force_freq);
830 void p2p_reset_pending_pd(struct p2p_data *p2p);
831 void p2ps_prov_free(struct p2p_data *p2p);
832 
833 /* p2p_invitation.c */
834 void p2p_process_invitation_req(struct p2p_data *p2p, const u8 *sa,
835  const u8 *data, size_t len, int rx_freq);
836 void p2p_process_invitation_resp(struct p2p_data *p2p, const u8 *sa,
837  const u8 *data, size_t len);
838 int p2p_invite_send(struct p2p_data *p2p, struct p2p_device *dev,
839  const u8 *go_dev_addr, int dev_pw_id);
840 void p2p_invitation_req_cb(struct p2p_data *p2p, int success);
841 void p2p_invitation_resp_cb(struct p2p_data *p2p, int success);
842 
843 /* p2p_dev_disc.c */
844 void p2p_process_dev_disc_req(struct p2p_data *p2p, const u8 *sa,
845  const u8 *data, size_t len, int rx_freq);
846 void p2p_dev_disc_req_cb(struct p2p_data *p2p, int success);
847 int p2p_send_dev_disc_req(struct p2p_data *p2p, struct p2p_device *dev);
848 void p2p_dev_disc_resp_cb(struct p2p_data *p2p, int success);
849 void p2p_process_dev_disc_resp(struct p2p_data *p2p, const u8 *sa,
850  const u8 *data, size_t len);
851 void p2p_go_disc_req_cb(struct p2p_data *p2p, int success);
852 void p2p_process_go_disc_req(struct p2p_data *p2p, const u8 *da, const u8 *sa,
853  const u8 *data, size_t len, int rx_freq);
854 
855 /* p2p.c */
856 void p2p_set_state(struct p2p_data *p2p, int new_state);
857 void p2p_set_timeout(struct p2p_data *p2p, unsigned int sec,
858  unsigned int usec);
859 void p2p_clear_timeout(struct p2p_data *p2p);
860 void p2p_continue_find(struct p2p_data *p2p);
861 struct p2p_device * p2p_add_dev_from_go_neg_req(struct p2p_data *p2p,
862  const u8 *addr,
863  struct p2p_message *msg);
864 void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr,
865  struct p2p_device *dev, struct p2p_message *msg);
866 int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq,
867  struct os_reltime *rx_time, int level, const u8 *ies,
868  size_t ies_len, int scan_res);
869 struct p2p_device * p2p_get_device(struct p2p_data *p2p, const u8 *addr);
870 struct p2p_device * p2p_get_device_interface(struct p2p_data *p2p,
871  const u8 *addr);
872 void p2p_go_neg_failed(struct p2p_data *p2p, int status);
873 void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer);
874 int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps);
875 int dev_type_list_match(const u8 *dev_type, const u8 *req_dev_type[],
876  size_t num_req_dev_type);
877 struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p,
878  const u8 *query_hash,
879  u8 query_count);
880 void p2p_build_ssid(struct p2p_data *p2p, u8 *ssid, size_t *ssid_len);
881 int p2p_send_action(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
882  const u8 *src, const u8 *bssid, const u8 *buf,
883  size_t len, unsigned int wait_time);
884 void p2p_stop_listen_for_freq(struct p2p_data *p2p, int freq);
885 int p2p_prepare_channel(struct p2p_data *p2p, struct p2p_device *dev,
886  unsigned int force_freq, unsigned int pref_freq,
887  int go);
888 void p2p_go_neg_wait_timeout(void *eloop_ctx, void *timeout_ctx);
889 int p2p_go_select_channel(struct p2p_data *p2p, struct p2p_device *dev,
890  u8 *status);
891 void p2p_dbg(struct p2p_data *p2p, const char *fmt, ...)
892 PRINTF_FORMAT(2, 3);
893 void p2p_info(struct p2p_data *p2p, const char *fmt, ...)
894 PRINTF_FORMAT(2, 3);
895 void p2p_err(struct p2p_data *p2p, const char *fmt, ...)
896 PRINTF_FORMAT(2, 3);
897 
898 #endif /* P2P_I_H */
struct p2p_device * go_neg_peer
go_neg_peer - Pointer to GO Negotiation peer
Definition: p2p_i.h:276
Definition: p2p_i.h:161
int max_disc_tu
max_disc_tu - Maximum number of TUs for discoverable interval
Definition: p2p_i.h:266
P2P_WAIT_PEER_CONNECT - Waiting peer in List for GO Neg.
Definition: p2p_i.h:220
P2P_PROVISIONING - Provisioning (during group formation)
Definition: p2p_i.h:235
struct p2p_message - Parsed P2P message (or P2P IE)
Definition: p2p_i.h:561
struct p2p_device * invite_peer
invite_peer - Pointer to Invite peer
Definition: p2p_i.h:281
struct p2p_sd_query * sd_query
sd_query - Pointer to Service Discovery query
Definition: p2p_i.h:303
size_t ssid_len
ssid_len - ssid length in octets
Definition: p2p_i.h:353
struct p2p_config - P2P configuration
Definition: p2p.h:426
u8 go_neg_conf_sent
go_neg_conf_sent - Number of GO Negotiation Confirmation retries
Definition: p2p_i.h:138
P2P_CONNECT - Trying to start GO Negotiation.
Definition: p2p_i.h:200
struct p2p_peer_info - P2P peer information
Definition: p2p.h:317
u8 op_reg_class
Regulatory class for own operational channel.
Definition: p2p_i.h:363
P2P_SEARCH - Search (Device Discovery)
Definition: p2p_i.h:195
P2P_PD_DURING_FIND - Provision Discovery during find.
Definition: p2p_i.h:240
int go_neg_conf_freq
freq - Frquency on which the GO Negotiation Confirmation is sent
Definition: p2p_i.h:143
Definition: wpabuf.h:20
u8 op_channel
op_channel - Own operational channel
Definition: p2p_i.h:368
int min_disc_int
min_disc_int - minDiscoverableInterval
Definition: p2p_i.h:256
struct p2p_device * sd_peer
sd_peer - Pointer to Service Discovery peer
Definition: p2p_i.h:298
P2P_INVITE - Trying to start Invite.
Definition: p2p_i.h:245
Definition: common.h:519
struct p2p_config * cfg
cfg - P2P module configuration
Definition: p2p_i.h:181
P2P_INVITE_LISTEN - Listen during Invite.
Definition: p2p_i.h:250
Definition: p2p.h:167
struct p2p_device * last_p2p_find_oper
last_p2p_find_oper - Pointer to last pre-find operation peer
Definition: p2p_i.h:286
Definition: os.h:26
struct p2p_device - P2P Device data (internal to P2P module)
Definition: p2p_i.h:41
struct p2p_channels - List of supported channels
Definition: p2p.h:44
P2P_IDLE - Idle.
Definition: p2p_i.h:190
struct p2p_data - P2P module data (internal to P2P module)
Definition: p2p_i.h:174
P2P_WAIT_PEER_IDLE - Waiting peer idle for GO Neg.
Definition: p2p_i.h:225
P2P_GO_NEG - In GO Negotiation.
Definition: p2p_i.h:210
p2p_state
state - The current P2P state
Definition: p2p_i.h:186
P2P_CONNECT_LISTEN - Listen during GO Negotiation start.
Definition: p2p_i.h:205
struct dl_list - Doubly-linked list
Definition: list.h:15
int max_disc_int
max_disc_int - maxDiscoverableInterval
Definition: p2p_i.h:261
Definition: p2p_i.h:153
Definition: p2p.h:246
int ssid_set
ssid_set - Whether SSID is already set for GO Negotiation
Definition: p2p_i.h:358
u8 next_tie_breaker
next_tie_breaker - Next tie-breaker value to use in GO Negotiation
Definition: p2p_i.h:343
u16 srv_update_indic
srv_update_indic - Service Update Indicator for local services
Definition: p2p_i.h:414
Definition: p2p_i.h:668
P2P_SD_DURING_FIND - Service Discovery during find.
Definition: p2p_i.h:230
struct p2p_sd_query * sd_queries
sd_queries - Pending service discovery queries
Definition: p2p_i.h:409
u16 req_config_methods
req_config_methods - Pending provision discovery methods
Definition: p2p_i.h:89
struct wpabuf * go_neg_conf
go_neg_conf - GO Negotiation Confirmation frame
Definition: p2p_i.h:148
struct p2p_group - Internal P2P module per-group data
Definition: p2p_group.c:34
int pd_force_freq
pd_force_freq - Forced frequency for PD retries or 0 to auto-select
Definition: p2p_i.h:515
u16 wps_prov_info
wps_prov_info - Stored provisioning WPS config method
Definition: p2p_i.h:97
Definition: p2p_i.h:666
u8 go_intent
go_intent - Local GO Intent to be used during GO Negotiation
Definition: p2p_i.h:338
int num_p2p_sd_queries
num_p2p_sd_queries - Total number of broadcast SD queries present in the list
Definition: p2p_i.h:309
Definition: p2p_i.h:720
P2P_LISTEN_ONLY - Listen only.
Definition: p2p_i.h:215