Home | History | Annotate | Download | only in p2p

Lines Matching refs:p2p

2  * Wi-Fi Direct - P2P provision discovery
15 #include "p2p.h"
42 static struct wpabuf * p2p_build_prov_disc_req(struct p2p_data *p2p,
52 if (p2p->wfd_ie_prov_disc_req)
53 extra = wpabuf_len(p2p->wfd_ie_prov_disc_req);
63 p2p_buf_add_capability(buf, p2p->dev_capab &
65 p2p_buf_add_device_info(buf, p2p, NULL);
76 if (p2p->wfd_ie_prov_disc_req)
77 wpabuf_put_buf(buf, p2p->wfd_ie_prov_disc_req);
84 static struct wpabuf * p2p_build_prov_disc_resp(struct p2p_data *p2p,
94 struct wpabuf *wfd_ie = p2p->wfd_ie_prov_disc_resp;
97 for (i = 0; i < p2p->num_groups; i++) {
98 struct p2p_group *g = p2p->groups[i];
132 void p2p_process_prov_disc_req(struct p2p_data *p2p, const u8 *sa,
144 p2p_dbg(p2p, "Received Provision Discovery Request from " MACSTR
148 dev = p2p_get_device(p2p, sa);
150 p2p_dbg(p2p, "Provision Discovery Request from unknown peer "
153 if (p2p_add_device(p2p, sa, rx_freq, NULL, 0, data + 1, len - 1,
155 p2p_dbg(p2p, "Provision Discovery Request add device failed "
166 p2p_dbg(p2p, "Unsupported Config Methods in Provision Discovery Request");
172 for (i = 0; i < p2p->num_groups; i++) {
173 if (p2p_group_is_group_id_match(p2p->groups[i],
178 if (i == p2p->num_groups) {
179 p2p_dbg(p2p, "PD request for unknown P2P Group ID - reject");
188 p2p_dbg(p2p, "Peer " MACSTR
193 p2p_dbg(p2p, "Peer " MACSTR
203 resp = p2p_build_prov_disc_resp(p2p, msg.dialog_token,
210 p2p_dbg(p2p, "Sending Provision Discovery Response");
214 freq = p2p_channel_to_freq(p2p->cfg->reg_class,
215 p2p->cfg->channel);
217 p2p_dbg(p2p, "Unknown regulatory class/channel");
222 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
223 if (p2p_send_action(p2p, freq, sa, p2p->cfg->dev_addr,
224 p2p->cfg->dev_addr,
226 p2p_dbg(p2p, "Failed to send Action frame");
231 if (!reject && p2p->cfg->prov_disc_req) {
235 p2p->cfg->prov_disc_req(p2p->cfg->cb_ctx, sa,
248 void p2p_process_prov_disc_resp(struct p2p_data *p2p, const u8 *sa,
259 p2p_dbg(p2p, "Received Provision Discovery Response from " MACSTR
263 dev = p2p_get_device(p2p, sa);
265 p2p_dbg(p2p, "Ignore Provision Discovery Response from " MACSTR
272 p2p_dbg(p2p, "Ignore Provision Discovery Response with unexpected Dialog Token %u (expected %u)",
278 if (p2p->pending_action_state == P2P_PENDING_PD) {
279 os_memset(p2p->pending_pd_devaddr, 0, ETH_ALEN);
280 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
293 if (p2p->user_initiated_pd &&
294 os_memcmp(p2p->pending_pd_devaddr, sa, ETH_ALEN) == 0)
295 p2p_reset_pending_pd(p2p);
298 p2p_dbg(p2p, "Peer rejected our Provision Discovery Request (received config_methods 0x%x expected 0x%x",
300 if (p2p->cfg->prov_disc_fail)
301 p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx, sa,
311 p2p_dbg(p2p, "Peer " MACSTR
315 p2p_dbg(p2p, "Peer " MACSTR
329 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
331 p2p_dbg(p2p, "Start GO Neg after the PD-before-GO-Neg workaround with "
334 p2p_connect_send(p2p, dev);
337 if (success && p2p->cfg->prov_disc_resp)
338 p2p->cfg->prov_disc_resp(p2p->cfg->cb_ctx, sa,
341 if (p2p->state == P2P_PD_DURING_FIND) {
342 p2p_clear_timeout(p2p);
343 p2p_continue_find(p2p);
348 int p2p_send_prov_disc_req(struct p2p_data *p2p, struct p2p_device *dev,
360 p2p_dbg(p2p, "No Listen/Operating frequency known for the peer "
369 p2p_dbg(p2p, "Cannot use PD with P2P Device " MACSTR
377 req = p2p_build_prov_disc_req(p2p, dev->dialog_token,
383 if (p2p->state != P2P_IDLE)
384 p2p_stop_listen_for_freq(p2p, freq);
385 p2p->pending_action_state = P2P_PENDING_PD;
386 if (p2p_send_action(p2p, freq, dev->info.p2p_device_addr,
387 p2p->cfg->dev_addr, dev->info.p2p_device_addr,
389 p2p_dbg(p2p, "Failed to send Action frame");
394 os_memcpy(p2p->pending_pd_devaddr, dev->info.p2p_device_addr, ETH_ALEN);
401 int p2p_prov_disc_req(struct p2p_data *p2p, const u8 *peer_addr,
407 dev = p2p_get_device(p2p, peer_addr);
409 dev = p2p_get_device_interface(p2p, peer_addr);
411 p2p_dbg(p2p, "Provision Discovery Request destination " MACSTR
416 p2p_dbg(p2p, "Provision Discovery Request with " MACSTR
431 if (p2p->state != P2P_IDLE && p2p->state != P2P_SEARCH &&
432 p2p->state != P2P_LISTEN_ONLY) {
433 p2p_dbg(p2p, "Busy with other operations; postpone Provision Discovery Request with "
439 p2p->user_initiated_pd = user_initiated_pd;
441 if (p2p->user_initiated_pd)
442 p2p->pd_retries = MAX_PROV_DISC_REQ_RETRIES;
452 return p2p_send_prov_disc_req(p2p, dev, join, force_freq);
456 void p2p_reset_pending_pd(struct p2p_data *p2p)
460 dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
461 if (os_memcmp(p2p->pending_pd_devaddr,
472 p2p->user_initiated_pd = 0;
473 os_memset(p2p->pending_pd_devaddr, 0, ETH_ALEN);
474 p2p->pd_retries = 0;