Home | History | Annotate | Download | only in p2p
      1 /*
      2  * P2P - Internal definitions for P2P module
      3  * Copyright (c) 2009-2010, Atheros Communications
      4  *
      5  * This program is free software; you can redistribute it and/or modify
      6  * it under the terms of the GNU General Public License version 2 as
      7  * published by the Free Software Foundation.
      8  *
      9  * Alternatively, this software may be distributed under the terms of BSD
     10  * license.
     11  *
     12  * See README and COPYING for more details.
     13  */
     14 
     15 #ifndef P2P_I_H
     16 #define P2P_I_H
     17 
     18 #include "utils/list.h"
     19 #include "p2p.h"
     20 
     21 /* TODO: add removal of expired P2P device entries */
     22 
     23 enum p2p_go_state {
     24 	UNKNOWN_GO,
     25 	LOCAL_GO,
     26 	REMOTE_GO
     27 };
     28 
     29 /**
     30  * struct p2p_device - P2P Device data (internal to P2P module)
     31  */
     32 struct p2p_device {
     33 	struct dl_list list;
     34 	struct os_time last_seen;
     35 	int listen_freq;
     36 	enum p2p_wps_method wps_method;
     37 
     38 	struct p2p_peer_info info;
     39 
     40 	/*
     41 	 * If the peer was discovered based on an interface address (e.g., GO
     42 	 * from Beacon/Probe Response), the interface address is stored here.
     43 	 * p2p_device_addr must still be set in such a case to the unique
     44 	 * identifier for the P2P Device.
     45 	 */
     46 	u8 interface_addr[ETH_ALEN];
     47 
     48 	/*
     49 	 * P2P Device Address of the GO in whose group this P2P Device is a
     50 	 * client.
     51 	 */
     52 	u8 member_in_go_dev[ETH_ALEN];
     53 
     54 	/*
     55 	 * P2P Interface Address of the GO in whose group this P2P Device is a
     56 	 * client.
     57 	 */
     58 	u8 member_in_go_iface[ETH_ALEN];
     59 
     60 	int go_neg_req_sent;
     61 	enum p2p_go_state go_state;
     62 	u8 dialog_token;
     63 	u8 intended_addr[ETH_ALEN];
     64 
     65 	char country[3];
     66 	struct p2p_channels channels;
     67 	int oper_freq;
     68 	u8 oper_ssid[32];
     69 	size_t oper_ssid_len;
     70 
     71 	/**
     72 	 * req_config_methods - Pending provisioning discovery methods
     73 	 */
     74 	u16 req_config_methods;
     75 
     76 #define P2P_DEV_PROBE_REQ_ONLY BIT(0)
     77 #define P2P_DEV_REPORTED BIT(1)
     78 #define P2P_DEV_NOT_YET_READY BIT(2)
     79 #define P2P_DEV_SD_INFO BIT(3)
     80 #define P2P_DEV_SD_SCHEDULE BIT(4)
     81 #define P2P_DEV_PD_PEER_DISPLAY BIT(5)
     82 #define P2P_DEV_PD_PEER_KEYPAD BIT(6)
     83 #define P2P_DEV_USER_REJECTED BIT(7)
     84 #define P2P_DEV_PEER_WAITING_RESPONSE BIT(8)
     85 #define P2P_DEV_PREFER_PERSISTENT_GROUP BIT(9)
     86 #define P2P_DEV_WAIT_GO_NEG_RESPONSE BIT(10)
     87 #define P2P_DEV_WAIT_GO_NEG_CONFIRM BIT(11)
     88 #define P2P_DEV_GROUP_CLIENT_ONLY BIT(12)
     89 #define P2P_DEV_FORCE_FREQ BIT(13)
     90 #define P2P_DEV_PD_FOR_JOIN BIT(14)
     91 #define P2P_DEV_REPORTED_ONCE BIT(15)
     92 	unsigned int flags;
     93 
     94 	int status; /* enum p2p_status_code */
     95 	unsigned int wait_count;
     96 	unsigned int connect_reqs;
     97 	unsigned int invitation_reqs;
     98 
     99 	u16 ext_listen_period;
    100 	u16 ext_listen_interval;
    101 
    102 	u8 go_timeout;
    103 	u8 client_timeout;
    104 };
    105 
    106 struct p2p_sd_query {
    107 	struct p2p_sd_query *next;
    108 	u8 peer[ETH_ALEN];
    109 	int for_all_peers;
    110 	struct wpabuf *tlvs;
    111 };
    112 
    113 struct p2p_pending_action_tx {
    114 	unsigned int freq;
    115 	u8 dst[ETH_ALEN];
    116 	u8 src[ETH_ALEN];
    117 	u8 bssid[ETH_ALEN];
    118 	size_t len;
    119 	unsigned int wait_time;
    120 	/* Followed by len octets of the frame */
    121 };
    122 
    123 /**
    124  * struct p2p_data - P2P module data (internal to P2P module)
    125  */
    126 struct p2p_data {
    127 	/**
    128 	 * cfg - P2P module configuration
    129 	 *
    130 	 * This is included in the same memory allocation with the
    131 	 * struct p2p_data and as such, must not be freed separately.
    132 	 */
    133 	struct p2p_config *cfg;
    134 
    135 	/**
    136 	 * state - The current P2P state
    137 	 */
    138 	enum p2p_state {
    139 		/**
    140 		 * P2P_IDLE - Idle
    141 		 */
    142 		P2P_IDLE,
    143 
    144 		/**
    145 		 * P2P_SEARCH - Search (Device Discovery)
    146 		 */
    147 		P2P_SEARCH,
    148 
    149 		/**
    150 		 * P2P_CONNECT - Trying to start GO Negotiation
    151 		 */
    152 		P2P_CONNECT,
    153 
    154 		/**
    155 		 * P2P_CONNECT_LISTEN - Listen during GO Negotiation start
    156 		 */
    157 		P2P_CONNECT_LISTEN,
    158 
    159 		/**
    160 		 * P2P_GO_NEG - In GO Negotiation
    161 		 */
    162 		P2P_GO_NEG,
    163 
    164 		/**
    165 		 * P2P_LISTEN_ONLY - Listen only
    166 		 */
    167 		P2P_LISTEN_ONLY,
    168 
    169 		/**
    170 		 * P2P_WAIT_PEER_CONNECT - Waiting peer in List for GO Neg
    171 		 */
    172 		P2P_WAIT_PEER_CONNECT,
    173 
    174 		/**
    175 		 * P2P_WAIT_PEER_IDLE - Waiting peer idle for GO Neg
    176 		 */
    177 		P2P_WAIT_PEER_IDLE,
    178 
    179 		/**
    180 		 * P2P_SD_DURING_FIND - Service Discovery during find
    181 		 */
    182 		P2P_SD_DURING_FIND,
    183 
    184 		/**
    185 		 * P2P_PROVISIONING - Provisioning (during group formation)
    186 		 */
    187 		P2P_PROVISIONING,
    188 
    189 		/**
    190 		 * P2P_PD_DURING_FIND - Provision Discovery during find
    191 		 */
    192 		P2P_PD_DURING_FIND,
    193 
    194 		/**
    195 		 * P2P_INVITE - Trying to start Invite
    196 		 */
    197 		P2P_INVITE,
    198 
    199 		/**
    200 		 * P2P_INVITE_LISTEN - Listen during Invite
    201 		 */
    202 		P2P_INVITE_LISTEN,
    203 	} state;
    204 
    205 	/**
    206 	 * min_disc_int - minDiscoverableInterval
    207 	 */
    208 	int min_disc_int;
    209 
    210 	/**
    211 	 * max_disc_int - maxDiscoverableInterval
    212 	 */
    213 	int max_disc_int;
    214 
    215 	/**
    216 	 * devices - List of known P2P Device peers
    217 	 */
    218 	struct dl_list devices;
    219 
    220 	/**
    221 	 * go_neg_peer - Pointer to GO Negotiation peer
    222 	 */
    223 	struct p2p_device *go_neg_peer;
    224 
    225 	/**
    226 	 * invite_peer - Pointer to Invite peer
    227 	 */
    228 	struct p2p_device *invite_peer;
    229 
    230 	const u8 *invite_go_dev_addr;
    231 	u8 invite_go_dev_addr_buf[ETH_ALEN];
    232 
    233 	/**
    234 	 * sd_peer - Pointer to Service Discovery peer
    235 	 */
    236 	struct p2p_device *sd_peer;
    237 
    238 	/**
    239 	 * sd_query - Pointer to Service Discovery query
    240 	 */
    241 	struct p2p_sd_query *sd_query;
    242 
    243 	/* GO Negotiation data */
    244 
    245 	/**
    246 	 * intended_addr - Local Intended P2P Interface Address
    247 	 *
    248 	 * This address is used during group owner negotiation as the Intended
    249 	 * P2P Interface Address and the group interface will be created with
    250 	 * address as the local address in case of successfully completed
    251 	 * negotiation.
    252 	 */
    253 	u8 intended_addr[ETH_ALEN];
    254 
    255 	/**
    256 	 * go_intent - Local GO Intent to be used during GO Negotiation
    257 	 */
    258 	u8 go_intent;
    259 
    260 	/**
    261 	 * next_tie_breaker - Next tie-breaker value to use in GO Negotiation
    262 	 */
    263 	u8 next_tie_breaker;
    264 
    265 	/**
    266 	 * ssid - Selected SSID for GO Negotiation (if local end will be GO)
    267 	 */
    268 	u8 ssid[32];
    269 
    270 	/**
    271 	 * ssid_len - ssid length in octets
    272 	 */
    273 	size_t ssid_len;
    274 
    275 	/**
    276 	 * Regulatory class for own operational channel
    277 	 */
    278 	u8 op_reg_class;
    279 
    280 	/**
    281 	 * op_channel - Own operational channel
    282 	 */
    283 	u8 op_channel;
    284 
    285 	/**
    286 	 * channels - Own supported regulatory classes and channels
    287 	 *
    288 	 * List of supposerted channels per regulatory class. The regulatory
    289 	 * classes are defined in IEEE Std 802.11-2007 Annex J and the
    290 	 * numbering of the clases depends on the configured country code.
    291 	 */
    292 	struct p2p_channels channels;
    293 
    294 	enum p2p_pending_action_state {
    295 		P2P_NO_PENDING_ACTION,
    296 		P2P_PENDING_GO_NEG_REQUEST,
    297 		P2P_PENDING_GO_NEG_RESPONSE,
    298 		P2P_PENDING_GO_NEG_RESPONSE_FAILURE,
    299 		P2P_PENDING_GO_NEG_CONFIRM,
    300 		P2P_PENDING_SD,
    301 		P2P_PENDING_PD,
    302 		P2P_PENDING_INVITATION_REQUEST,
    303 		P2P_PENDING_INVITATION_RESPONSE,
    304 		P2P_PENDING_DEV_DISC_REQUEST,
    305 		P2P_PENDING_DEV_DISC_RESPONSE,
    306 		P2P_PENDING_GO_DISC_REQ
    307 	} pending_action_state;
    308 
    309 	unsigned int pending_listen_freq;
    310 	unsigned int pending_listen_sec;
    311 	unsigned int pending_listen_usec;
    312 
    313 	u8 dev_capab;
    314 
    315 	int in_listen;
    316 	int drv_in_listen;
    317 
    318 	/**
    319 	 * sd_queries - Pending service discovery queries
    320 	 */
    321 	struct p2p_sd_query *sd_queries;
    322 
    323 	/**
    324 	 * srv_update_indic - Service Update Indicator for local services
    325 	 */
    326 	u16 srv_update_indic;
    327 
    328 	struct wpabuf *sd_resp; /* Fragmented SD response */
    329 	u8 sd_resp_addr[ETH_ALEN];
    330 	u8 sd_resp_dialog_token;
    331 	size_t sd_resp_pos; /* Offset in sd_resp */
    332 	u8 sd_frag_id;
    333 
    334 	struct wpabuf *sd_rx_resp; /* Reassembled SD response */
    335 	u16 sd_rx_update_indic;
    336 
    337 	/* P2P Invitation data */
    338 	enum p2p_invite_role inv_role;
    339 	u8 inv_bssid[ETH_ALEN];
    340 	int inv_bssid_set;
    341 	u8 inv_ssid[32];
    342 	size_t inv_ssid_len;
    343 	u8 inv_sa[ETH_ALEN];
    344 	u8 inv_group_bssid[ETH_ALEN];
    345 	u8 *inv_group_bssid_ptr;
    346 	u8 inv_go_dev_addr[ETH_ALEN];
    347 	u8 inv_status;
    348 	int inv_op_freq;
    349 	int inv_persistent;
    350 
    351 	enum p2p_discovery_type find_type;
    352 	u8 last_prog_scan_class;
    353 	u8 last_prog_scan_chan;
    354 	int p2p_scan_running;
    355 	enum p2p_after_scan {
    356 		P2P_AFTER_SCAN_NOTHING,
    357 		P2P_AFTER_SCAN_LISTEN,
    358 		P2P_AFTER_SCAN_CONNECT
    359 	} start_after_scan;
    360 	u8 after_scan_peer[ETH_ALEN];
    361 	struct p2p_pending_action_tx *after_scan_tx;
    362 
    363 	/* Requested device types for find/search */
    364 	unsigned int num_req_dev_types;
    365 	u8 *req_dev_types;
    366 
    367 	struct p2p_group **groups;
    368 	size_t num_groups;
    369 
    370 	struct p2p_device *pending_client_disc_go;
    371 	u8 pending_client_disc_addr[ETH_ALEN];
    372 	u8 pending_dev_disc_dialog_token;
    373 	u8 pending_dev_disc_addr[ETH_ALEN];
    374 	int pending_dev_disc_freq;
    375 	unsigned int pending_client_disc_freq;
    376 
    377 	int ext_listen_only;
    378 	unsigned int ext_listen_period;
    379 	unsigned int ext_listen_interval;
    380 	unsigned int ext_listen_interval_sec;
    381 	unsigned int ext_listen_interval_usec;
    382 
    383 	u8 peer_filter[ETH_ALEN];
    384 
    385 	int cross_connect;
    386 
    387 	int best_freq_24;
    388 	int best_freq_5;
    389 	int best_freq_overall;
    390 
    391 	/**
    392 	 * wps_vendor_ext - WPS Vendor Extensions to add
    393 	 */
    394 	struct wpabuf *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
    395 
    396 	/*
    397 	 * user_initiated_pd - Whether a PD request is user initiated or not.
    398 	 */
    399 	u8 user_initiated_pd;
    400 
    401 	/*
    402 	 * Keep track of which peer a given PD request was sent to.
    403 	 * Used to raise a timeout alert in case there is no response.
    404 	 */
    405 	u8 pending_pd_devaddr[ETH_ALEN];
    406 
    407 	/*
    408 	 * Retry counter for provision discovery requests when issued
    409 	 * in IDLE state.
    410 	 */
    411 	int pd_retries;
    412 };
    413 
    414 /**
    415  * struct p2p_message - Parsed P2P message (or P2P IE)
    416  */
    417 struct p2p_message {
    418 	struct wpabuf *p2p_attributes;
    419 	struct wpabuf *wps_attributes;
    420 
    421 	u8 dialog_token;
    422 
    423 	const u8 *capability;
    424 	const u8 *go_intent;
    425 	const u8 *status;
    426 	const u8 *listen_channel;
    427 	const u8 *operating_channel;
    428 	const u8 *channel_list;
    429 	u8 channel_list_len;
    430 	const u8 *config_timeout;
    431 	const u8 *intended_addr;
    432 	const u8 *group_bssid;
    433 	const u8 *invitation_flags;
    434 
    435 	const u8 *group_info;
    436 	size_t group_info_len;
    437 
    438 	const u8 *group_id;
    439 	size_t group_id_len;
    440 
    441 	const u8 *device_id;
    442 
    443 	const u8 *manageability;
    444 
    445 	const u8 *noa;
    446 	size_t noa_len;
    447 
    448 	const u8 *ext_listen_timing;
    449 
    450 	const u8 *minor_reason_code;
    451 
    452 	/* P2P Device Info */
    453 	const u8 *p2p_device_info;
    454 	size_t p2p_device_info_len;
    455 	const u8 *p2p_device_addr;
    456 	const u8 *pri_dev_type;
    457 	u8 num_sec_dev_types;
    458 	char device_name[33];
    459 	u16 config_methods;
    460 
    461 	/* WPS IE */
    462 	u16 dev_password_id;
    463 	u16 wps_config_methods;
    464 	const u8 *wps_pri_dev_type;
    465 	const u8 *wps_sec_dev_type_list;
    466 	size_t wps_sec_dev_type_list_len;
    467 	const u8 *wps_vendor_ext[P2P_MAX_WPS_VENDOR_EXT];
    468 	size_t wps_vendor_ext_len[P2P_MAX_WPS_VENDOR_EXT];
    469 	const u8 *manufacturer;
    470 	size_t manufacturer_len;
    471 	const u8 *model_name;
    472 	size_t model_name_len;
    473 	const u8 *model_number;
    474 	size_t model_number_len;
    475 	const u8 *serial_number;
    476 	size_t serial_number_len;
    477 
    478 	/* DS Parameter Set IE */
    479 	const u8 *ds_params;
    480 
    481 	/* SSID IE */
    482 	const u8 *ssid;
    483 };
    484 
    485 
    486 #define P2P_MAX_GROUP_ENTRIES 50
    487 
    488 struct p2p_group_info {
    489 	unsigned int num_clients;
    490 	struct p2p_client_info {
    491 		const u8 *p2p_device_addr;
    492 		const u8 *p2p_interface_addr;
    493 		u8 dev_capab;
    494 		u16 config_methods;
    495 		const u8 *pri_dev_type;
    496 		u8 num_sec_dev_types;
    497 		const u8 *sec_dev_types;
    498 		const char *dev_name;
    499 		size_t dev_name_len;
    500 	} client[P2P_MAX_GROUP_ENTRIES];
    501 };
    502 
    503 
    504 /* p2p_utils.c */
    505 int p2p_random(char *buf, size_t len);
    506 int p2p_channel_to_freq(const char *country, int reg_class, int channel);
    507 int p2p_freq_to_channel(const char *country, unsigned int freq, u8 *reg_class,
    508 			u8 *channel);
    509 void p2p_channels_intersect(const struct p2p_channels *a,
    510 			    const struct p2p_channels *b,
    511 			    struct p2p_channels *res);
    512 int p2p_channels_includes(const struct p2p_channels *channels, u8 reg_class,
    513 			  u8 channel);
    514 
    515 /* p2p_parse.c */
    516 int p2p_parse_p2p_ie(const struct wpabuf *buf, struct p2p_message *msg);
    517 int p2p_parse_ies(const u8 *data, size_t len, struct p2p_message *msg);
    518 int p2p_parse(const u8 *data, size_t len, struct p2p_message *msg);
    519 void p2p_parse_free(struct p2p_message *msg);
    520 int p2p_attr_text(struct wpabuf *data, char *buf, char *end);
    521 int p2p_group_info_parse(const u8 *gi, size_t gi_len,
    522 			 struct p2p_group_info *info);
    523 
    524 /* p2p_build.c */
    525 
    526 struct p2p_noa_desc {
    527 	u8 count_type;
    528 	u32 duration;
    529 	u32 interval;
    530 	u32 start_time;
    531 };
    532 
    533 /* p2p_group.c */
    534 const u8 * p2p_group_get_interface_addr(struct p2p_group *group);
    535 
    536 #ifdef ANDROID_BRCM_P2P_PATCH
    537 void p2p_get_group_noa(struct p2p_group *group, u8 *noa, size_t* noa_len);
    538 #endif
    539 
    540 u8 p2p_group_presence_req(struct p2p_group *group,
    541 			  const u8 *client_interface_addr,
    542 			  const u8 *noa, size_t noa_len);
    543 
    544 
    545 void p2p_buf_add_action_hdr(struct wpabuf *buf, u8 subtype, u8 dialog_token);
    546 void p2p_buf_add_public_action_hdr(struct wpabuf *buf, u8 subtype,
    547 				   u8 dialog_token);
    548 u8 * p2p_buf_add_ie_hdr(struct wpabuf *buf);
    549 void p2p_buf_add_status(struct wpabuf *buf, u8 status);
    550 void p2p_buf_add_device_info(struct wpabuf *buf, struct p2p_data *p2p,
    551 			     struct p2p_device *peer);
    552 void p2p_buf_add_device_id(struct wpabuf *buf, const u8 *dev_addr);
    553 void p2p_buf_update_ie_hdr(struct wpabuf *buf, u8 *len);
    554 void p2p_buf_add_capability(struct wpabuf *buf, u8 dev_capab, u8 group_capab);
    555 void p2p_buf_add_go_intent(struct wpabuf *buf, u8 go_intent);
    556 void p2p_buf_add_listen_channel(struct wpabuf *buf, const char *country,
    557 				u8 reg_class, u8 channel);
    558 void p2p_buf_add_operating_channel(struct wpabuf *buf, const char *country,
    559 				   u8 reg_class, u8 channel);
    560 void p2p_buf_add_channel_list(struct wpabuf *buf, const char *country,
    561 			      struct p2p_channels *chan);
    562 void p2p_buf_add_config_timeout(struct wpabuf *buf, u8 go_timeout,
    563 				u8 client_timeout);
    564 void p2p_buf_add_intended_addr(struct wpabuf *buf, const u8 *interface_addr);
    565 void p2p_buf_add_group_bssid(struct wpabuf *buf, const u8 *bssid);
    566 void p2p_buf_add_group_id(struct wpabuf *buf, const u8 *dev_addr,
    567 			  const u8 *ssid, size_t ssid_len);
    568 void p2p_buf_add_invitation_flags(struct wpabuf *buf, u8 flags);
    569 void p2p_buf_add_noa(struct wpabuf *buf, u8 noa_index, u8 opp_ps, u8 ctwindow,
    570 		     struct p2p_noa_desc *desc1, struct p2p_noa_desc *desc2);
    571 void p2p_buf_add_ext_listen_timing(struct wpabuf *buf, u16 period,
    572 				   u16 interval);
    573 void p2p_buf_add_p2p_interface(struct wpabuf *buf, struct p2p_data *p2p);
    574 void p2p_build_wps_ie(struct p2p_data *p2p, struct wpabuf *buf, u16 pw_id,
    575 		      int all_attr);
    576 
    577 /* p2p_sd.c */
    578 struct p2p_sd_query * p2p_pending_sd_req(struct p2p_data *p2p,
    579 					 struct p2p_device *dev);
    580 void p2p_free_sd_queries(struct p2p_data *p2p);
    581 void p2p_rx_gas_initial_req(struct p2p_data *p2p, const u8 *sa,
    582 			    const u8 *data, size_t len, int rx_freq);
    583 void p2p_rx_gas_initial_resp(struct p2p_data *p2p, const u8 *sa,
    584 			     const u8 *data, size_t len, int rx_freq);
    585 void p2p_rx_gas_comeback_req(struct p2p_data *p2p, const u8 *sa,
    586 			     const u8 *data, size_t len, int rx_freq);
    587 void p2p_rx_gas_comeback_resp(struct p2p_data *p2p, const u8 *sa,
    588 			      const u8 *data, size_t len, int rx_freq);
    589 int p2p_start_sd(struct p2p_data *p2p, struct p2p_device *dev);
    590 
    591 /* p2p_go_neg.c */
    592 int p2p_peer_channels_check(struct p2p_data *p2p, struct p2p_channels *own,
    593 			    struct p2p_device *dev,
    594 			    const u8 *channel_list, size_t channel_list_len);
    595 void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa,
    596 			    const u8 *data, size_t len, int rx_freq);
    597 void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa,
    598 			     const u8 *data, size_t len, int rx_freq);
    599 void p2p_process_go_neg_conf(struct p2p_data *p2p, const u8 *sa,
    600 			     const u8 *data, size_t len);
    601 int p2p_connect_send(struct p2p_data *p2p, struct p2p_device *dev);
    602 
    603 /* p2p_pd.c */
    604 void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa,
    605 			       const u8 *data, size_t len, int rx_freq);
    606 void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
    607 				const u8 *data, size_t len);
    608 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev,
    609 			   int join);
    610 void p2p_reset_pending_pd(struct p2p_data *p2p);
    611 
    612 /* p2p_invitation.c */
    613 void p2p_process_invitation_req(struct p2p_data *p2p, const u8 *sa,
    614 				const u8 *data, size_t len, int rx_freq);
    615 void p2p_process_invitation_resp(struct p2p_data *p2p, const u8 *sa,
    616 				 const u8 *data, size_t len);
    617 int p2p_invite_send(struct p2p_data *p2p, struct p2p_device *dev,
    618 		    const u8 *go_dev_addr);
    619 void p2p_invitation_req_cb(struct p2p_data *p2p, int success);
    620 void p2p_invitation_resp_cb(struct p2p_data *p2p, int success);
    621 
    622 /* p2p_dev_disc.c */
    623 void p2p_process_dev_disc_req(struct p2p_data *p2p, const u8 *sa,
    624 			      const u8 *data, size_t len, int rx_freq);
    625 void p2p_dev_disc_req_cb(struct p2p_data *p2p, int success);
    626 int p2p_send_dev_disc_req(struct p2p_data *p2p, struct p2p_device *dev);
    627 void p2p_dev_disc_resp_cb(struct p2p_data *p2p, int success);
    628 void p2p_process_dev_disc_resp(struct p2p_data *p2p, const u8 *sa,
    629 			       const u8 *data, size_t len);
    630 void p2p_go_disc_req_cb(struct p2p_data *p2p, int success);
    631 void p2p_process_go_disc_req(struct p2p_data *p2p, const u8 *da, const u8 *sa,
    632 			     const u8 *data, size_t len, int rx_freq);
    633 
    634 /* p2p.c */
    635 void p2p_set_state(struct p2p_data *p2p, int new_state);
    636 void p2p_set_timeout(struct p2p_data *p2p, unsigned int sec,
    637 		     unsigned int usec);
    638 void p2p_clear_timeout(struct p2p_data *p2p);
    639 void p2p_continue_find(struct p2p_data *p2p);
    640 struct p2p_device * p2p_add_dev_from_go_neg_req(struct p2p_data *p2p,
    641 						const u8 *addr,
    642 						struct p2p_message *msg);
    643 void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr,
    644 		      struct p2p_device *dev, struct p2p_message *msg);
    645 struct p2p_device * p2p_get_device(struct p2p_data *p2p, const u8 *addr);
    646 struct p2p_device * p2p_get_device_interface(struct p2p_data *p2p,
    647 					     const u8 *addr);
    648 void p2p_go_neg_failed(struct p2p_data *p2p, struct p2p_device *peer,
    649 		       int status);
    650 void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer);
    651 int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps);
    652 int dev_type_list_match(const u8 *dev_type, const u8 *req_dev_type[],
    653 			size_t num_req_dev_type);
    654 struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p);
    655 void p2p_build_ssid(struct p2p_data *p2p, u8 *ssid, size_t *ssid_len);
    656 int p2p_send_action(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
    657 		    const u8 *src, const u8 *bssid, const u8 *buf,
    658 		    size_t len, unsigned int wait_time);
    659 
    660 #endif /* P2P_I_H */
    661