Lines Matching refs:p2p
43 static struct wpabuf * p2p_build_prov_disc_req(struct p2p_data *p2p, in p2p_build_prov_disc_req() argument
53 if (p2p->wfd_ie_prov_disc_req) in p2p_build_prov_disc_req()
54 extra = wpabuf_len(p2p->wfd_ie_prov_disc_req); in p2p_build_prov_disc_req()
57 if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_PD_REQ]) in p2p_build_prov_disc_req()
58 extra += wpabuf_len(p2p->vendor_elem[VENDOR_ELEM_P2P_PD_REQ]); in p2p_build_prov_disc_req()
67 p2p_buf_add_capability(buf, p2p->dev_capab & in p2p_build_prov_disc_req()
69 p2p_buf_add_device_info(buf, p2p, NULL); in p2p_build_prov_disc_req()
80 if (p2p->wfd_ie_prov_disc_req) in p2p_build_prov_disc_req()
81 wpabuf_put_buf(buf, p2p->wfd_ie_prov_disc_req); in p2p_build_prov_disc_req()
84 if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_PD_REQ]) in p2p_build_prov_disc_req()
85 wpabuf_put_buf(buf, p2p->vendor_elem[VENDOR_ELEM_P2P_PD_REQ]); in p2p_build_prov_disc_req()
91 static struct wpabuf * p2p_build_prov_disc_resp(struct p2p_data *p2p, in p2p_build_prov_disc_resp() argument
101 struct wpabuf *wfd_ie = p2p->wfd_ie_prov_disc_resp; in p2p_build_prov_disc_resp()
104 for (i = 0; i < p2p->num_groups; i++) { in p2p_build_prov_disc_resp()
105 struct p2p_group *g = p2p->groups[i]; in p2p_build_prov_disc_resp()
121 if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_PD_RESP]) in p2p_build_prov_disc_resp()
122 extra += wpabuf_len(p2p->vendor_elem[VENDOR_ELEM_P2P_PD_RESP]); in p2p_build_prov_disc_resp()
138 if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_PD_RESP]) in p2p_build_prov_disc_resp()
139 wpabuf_put_buf(buf, p2p->vendor_elem[VENDOR_ELEM_P2P_PD_RESP]); in p2p_build_prov_disc_resp()
145 void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa, in p2p_process_prov_disc_req() argument
157 p2p_dbg(p2p, "Received Provision Discovery Request from " MACSTR in p2p_process_prov_disc_req()
161 dev = p2p_get_device(p2p, sa); in p2p_process_prov_disc_req()
163 p2p_dbg(p2p, "Provision Discovery Request from unknown peer " in p2p_process_prov_disc_req()
166 if (p2p_add_device(p2p, sa, rx_freq, NULL, 0, data + 1, len - 1, in p2p_process_prov_disc_req()
168 p2p_dbg(p2p, "Provision Discovery Request add device failed " in p2p_process_prov_disc_req()
179 p2p_dbg(p2p, "Unsupported Config Methods in Provision Discovery Request"); in p2p_process_prov_disc_req()
185 for (i = 0; i < p2p->num_groups; i++) { in p2p_process_prov_disc_req()
186 if (p2p_group_is_group_id_match(p2p->groups[i], in p2p_process_prov_disc_req()
191 if (i == p2p->num_groups) { in p2p_process_prov_disc_req()
192 p2p_dbg(p2p, "PD request for unknown P2P Group ID - reject"); in p2p_process_prov_disc_req()
201 p2p_dbg(p2p, "Peer " MACSTR in p2p_process_prov_disc_req()
206 p2p_dbg(p2p, "Peer " MACSTR in p2p_process_prov_disc_req()
216 resp = p2p_build_prov_disc_resp(p2p, msg.dialog_token, in p2p_process_prov_disc_req()
223 p2p_dbg(p2p, "Sending Provision Discovery Response"); in p2p_process_prov_disc_req()
227 freq = p2p_channel_to_freq(p2p->cfg->reg_class, in p2p_process_prov_disc_req()
228 p2p->cfg->channel); in p2p_process_prov_disc_req()
230 p2p_dbg(p2p, "Unknown regulatory class/channel"); in p2p_process_prov_disc_req()
235 p2p->pending_action_state = P2P_NO_PENDING_ACTION; in p2p_process_prov_disc_req()
236 if (p2p_send_action(p2p, freq, sa, p2p->cfg->dev_addr, in p2p_process_prov_disc_req()
237 p2p->cfg->dev_addr, in p2p_process_prov_disc_req()
239 p2p_dbg(p2p, "Failed to send Action frame"); in p2p_process_prov_disc_req()
241 p2p->send_action_in_progress = 1; in p2p_process_prov_disc_req()
245 if (!reject && p2p->cfg->prov_disc_req) { in p2p_process_prov_disc_req()
249 p2p->cfg->prov_disc_req(p2p->cfg->cb_ctx, sa, in p2p_process_prov_disc_req()
262 void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa, in p2p_process_prov_disc_resp() argument
273 p2p_dbg(p2p, "Received Provision Discovery Response from " MACSTR in p2p_process_prov_disc_resp()
277 dev = p2p_get_device(p2p, sa); in p2p_process_prov_disc_resp()
279 p2p_dbg(p2p, "Ignore Provision Discovery Response from " MACSTR in p2p_process_prov_disc_resp()
286 p2p_dbg(p2p, "Ignore Provision Discovery Response with unexpected Dialog Token %u (expected %u)", in p2p_process_prov_disc_resp()
292 if (p2p->pending_action_state == P2P_PENDING_PD) { in p2p_process_prov_disc_resp()
293 os_memset(p2p->pending_pd_devaddr, 0, ETH_ALEN); in p2p_process_prov_disc_resp()
294 p2p->pending_action_state = P2P_NO_PENDING_ACTION; in p2p_process_prov_disc_resp()
307 if (p2p->user_initiated_pd && in p2p_process_prov_disc_resp()
308 os_memcmp(p2p->pending_pd_devaddr, sa, ETH_ALEN) == 0) in p2p_process_prov_disc_resp()
309 p2p_reset_pending_pd(p2p); in p2p_process_prov_disc_resp()
312 …p2p_dbg(p2p, "Peer rejected our Provision Discovery Request (received config_methods 0x%x expected… in p2p_process_prov_disc_resp()
314 if (p2p->cfg->prov_disc_fail) in p2p_process_prov_disc_resp()
315 p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx, sa, in p2p_process_prov_disc_resp()
325 p2p_dbg(p2p, "Peer " MACSTR in p2p_process_prov_disc_resp()
329 p2p_dbg(p2p, "Peer " MACSTR in p2p_process_prov_disc_resp()
343 p2p->cfg->send_action_done(p2p->cfg->cb_ctx); in p2p_process_prov_disc_resp()
345 p2p_dbg(p2p, "Start GO Neg after the PD-before-GO-Neg workaround with " in p2p_process_prov_disc_resp()
348 p2p_connect_send(p2p, dev); in p2p_process_prov_disc_resp()
351 if (success && p2p->cfg->prov_disc_resp) in p2p_process_prov_disc_resp()
352 p2p->cfg->prov_disc_resp(p2p->cfg->cb_ctx, sa, in p2p_process_prov_disc_resp()
355 if (p2p->state == P2P_PD_DURING_FIND) { in p2p_process_prov_disc_resp()
356 p2p_clear_timeout(p2p); in p2p_process_prov_disc_resp()
357 p2p_continue_find(p2p); in p2p_process_prov_disc_resp()
362 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev, in p2p_send_prov_disc_req() argument
374 p2p_dbg(p2p, "No Listen/Operating frequency known for the peer " in p2p_send_prov_disc_req()
383 p2p_dbg(p2p, "Cannot use PD with P2P Device " MACSTR in p2p_send_prov_disc_req()
391 req = p2p_build_prov_disc_req(p2p, dev->dialog_token, in p2p_send_prov_disc_req()
397 if (p2p->state != P2P_IDLE) in p2p_send_prov_disc_req()
398 p2p_stop_listen_for_freq(p2p, freq); in p2p_send_prov_disc_req()
399 p2p->pending_action_state = P2P_PENDING_PD; in p2p_send_prov_disc_req()
400 if (p2p_send_action(p2p, freq, dev->info.p2p_device_addr, in p2p_send_prov_disc_req()
401 p2p->cfg->dev_addr, dev->info.p2p_device_addr, in p2p_send_prov_disc_req()
403 p2p_dbg(p2p, "Failed to send Action frame"); in p2p_send_prov_disc_req()
408 os_memcpy(p2p->pending_pd_devaddr, dev->info.p2p_device_addr, ETH_ALEN); in p2p_send_prov_disc_req()
415 int p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr, in p2p_prov_disc_req() argument
421 dev = p2p_get_device(p2p, peer_addr); in p2p_prov_disc_req()
423 dev = p2p_get_device_interface(p2p, peer_addr); in p2p_prov_disc_req()
425 p2p_dbg(p2p, "Provision Discovery Request destination " MACSTR in p2p_prov_disc_req()
430 p2p_dbg(p2p, "Provision Discovery Request with " MACSTR in p2p_prov_disc_req()
445 if (p2p->state != P2P_IDLE && p2p->state != P2P_SEARCH && in p2p_prov_disc_req()
446 p2p->state != P2P_LISTEN_ONLY) { in p2p_prov_disc_req()
447 p2p_dbg(p2p, "Busy with other operations; postpone Provision Discovery Request with " in p2p_prov_disc_req()
453 p2p->user_initiated_pd = user_initiated_pd; in p2p_prov_disc_req()
454 p2p->pd_force_freq = force_freq; in p2p_prov_disc_req()
456 if (p2p->user_initiated_pd) in p2p_prov_disc_req()
457 p2p->pd_retries = MAX_PROV_DISC_REQ_RETRIES; in p2p_prov_disc_req()
467 return p2p_send_prov_disc_req(p2p, dev, join, force_freq); in p2p_prov_disc_req()
471 void p2p_reset_pending_pd(struct p2p_data *p2p) in p2p_reset_pending_pd() argument
475 dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) { in p2p_reset_pending_pd()
476 if (os_memcmp(p2p->pending_pd_devaddr, in p2p_reset_pending_pd()
487 p2p->user_initiated_pd = 0; in p2p_reset_pending_pd()
488 os_memset(p2p->pending_pd_devaddr, 0, ETH_ALEN); in p2p_reset_pending_pd()
489 p2p->pd_retries = 0; in p2p_reset_pending_pd()
490 p2p->pd_force_freq = 0; in p2p_reset_pending_pd()