P2P: Avoid unsafe pre-configured channel as channel preference
[mech_eap.git] / src / p2p / p2p.c
1 /*
2  * Wi-Fi Direct - 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 #include "includes.h"
10
11 #include "common.h"
12 #include "eloop.h"
13 #include "common/ieee802_11_defs.h"
14 #include "common/ieee802_11_common.h"
15 #include "wps/wps_i.h"
16 #include "p2p_i.h"
17 #include "p2p.h"
18
19
20 static void p2p_state_timeout(void *eloop_ctx, void *timeout_ctx);
21 static void p2p_device_free(struct p2p_data *p2p, struct p2p_device *dev);
22 static void p2p_process_presence_req(struct p2p_data *p2p, const u8 *da,
23                                      const u8 *sa, const u8 *data, size_t len,
24                                      int rx_freq);
25 static void p2p_process_presence_resp(struct p2p_data *p2p, const u8 *da,
26                                       const u8 *sa, const u8 *data,
27                                       size_t len);
28 static void p2p_ext_listen_timeout(void *eloop_ctx, void *timeout_ctx);
29 static void p2p_scan_timeout(void *eloop_ctx, void *timeout_ctx);
30
31
32 /*
33  * p2p_scan recovery timeout
34  *
35  * Many drivers are using 30 second timeout on scan results. Allow a bit larger
36  * timeout for this to avoid hitting P2P timeout unnecessarily.
37  */
38 #define P2P_SCAN_TIMEOUT 35
39
40 /**
41  * P2P_PEER_EXPIRATION_AGE - Number of seconds after which inactive peer
42  * entries will be removed
43  */
44 #ifndef P2P_PEER_EXPIRATION_AGE
45 #define P2P_PEER_EXPIRATION_AGE 60
46 #endif /* P2P_PEER_EXPIRATION_AGE */
47
48 #define P2P_PEER_EXPIRATION_INTERVAL (P2P_PEER_EXPIRATION_AGE / 2)
49
50 static void p2p_expire_peers(struct p2p_data *p2p)
51 {
52         struct p2p_device *dev, *n;
53         struct os_reltime now;
54         size_t i;
55
56         os_get_reltime(&now);
57         dl_list_for_each_safe(dev, n, &p2p->devices, struct p2p_device, list) {
58                 if (dev->last_seen.sec + P2P_PEER_EXPIRATION_AGE >= now.sec)
59                         continue;
60
61                 if (dev == p2p->go_neg_peer) {
62                         /*
63                          * GO Negotiation is in progress with the peer, so
64                          * don't expire the peer entry until GO Negotiation
65                          * fails or times out.
66                          */
67                         continue;
68                 }
69
70                 if (p2p->cfg->go_connected &&
71                     p2p->cfg->go_connected(p2p->cfg->cb_ctx,
72                                            dev->info.p2p_device_addr)) {
73                         /*
74                          * We are connected as a client to a group in which the
75                          * peer is the GO, so do not expire the peer entry.
76                          */
77                         os_get_reltime(&dev->last_seen);
78                         continue;
79                 }
80
81                 for (i = 0; i < p2p->num_groups; i++) {
82                         if (p2p_group_is_client_connected(
83                                     p2p->groups[i], dev->info.p2p_device_addr))
84                                 break;
85                 }
86                 if (i < p2p->num_groups) {
87                         /*
88                          * The peer is connected as a client in a group where
89                          * we are the GO, so do not expire the peer entry.
90                          */
91                         os_get_reltime(&dev->last_seen);
92                         continue;
93                 }
94
95                 p2p_dbg(p2p, "Expiring old peer entry " MACSTR,
96                         MAC2STR(dev->info.p2p_device_addr));
97                 dl_list_del(&dev->list);
98                 p2p_device_free(p2p, dev);
99         }
100 }
101
102
103 static void p2p_expiration_timeout(void *eloop_ctx, void *timeout_ctx)
104 {
105         struct p2p_data *p2p = eloop_ctx;
106         p2p_expire_peers(p2p);
107         eloop_register_timeout(P2P_PEER_EXPIRATION_INTERVAL, 0,
108                                p2p_expiration_timeout, p2p, NULL);
109 }
110
111
112 static const char * p2p_state_txt(int state)
113 {
114         switch (state) {
115         case P2P_IDLE:
116                 return "IDLE";
117         case P2P_SEARCH:
118                 return "SEARCH";
119         case P2P_CONNECT:
120                 return "CONNECT";
121         case P2P_CONNECT_LISTEN:
122                 return "CONNECT_LISTEN";
123         case P2P_GO_NEG:
124                 return "GO_NEG";
125         case P2P_LISTEN_ONLY:
126                 return "LISTEN_ONLY";
127         case P2P_WAIT_PEER_CONNECT:
128                 return "WAIT_PEER_CONNECT";
129         case P2P_WAIT_PEER_IDLE:
130                 return "WAIT_PEER_IDLE";
131         case P2P_SD_DURING_FIND:
132                 return "SD_DURING_FIND";
133         case P2P_PROVISIONING:
134                 return "PROVISIONING";
135         case P2P_PD_DURING_FIND:
136                 return "PD_DURING_FIND";
137         case P2P_INVITE:
138                 return "INVITE";
139         case P2P_INVITE_LISTEN:
140                 return "INVITE_LISTEN";
141         default:
142                 return "?";
143         }
144 }
145
146
147 const char * p2p_get_state_txt(struct p2p_data *p2p)
148 {
149         return p2p_state_txt(p2p->state);
150 }
151
152
153 u16 p2p_get_provisioning_info(struct p2p_data *p2p, const u8 *addr)
154 {
155         struct p2p_device *dev = NULL;
156
157         if (!addr || !p2p)
158                 return 0;
159
160         dev = p2p_get_device(p2p, addr);
161         if (dev)
162                 return dev->wps_prov_info;
163         else
164                 return 0;
165 }
166
167
168 void p2p_clear_provisioning_info(struct p2p_data *p2p, const u8 *addr)
169 {
170         struct p2p_device *dev = NULL;
171
172         if (!addr || !p2p)
173                 return;
174
175         dev = p2p_get_device(p2p, addr);
176         if (dev)
177                 dev->wps_prov_info = 0;
178 }
179
180
181 void p2p_set_state(struct p2p_data *p2p, int new_state)
182 {
183         p2p_dbg(p2p, "State %s -> %s",
184                 p2p_state_txt(p2p->state), p2p_state_txt(new_state));
185         p2p->state = new_state;
186 }
187
188
189 void p2p_set_timeout(struct p2p_data *p2p, unsigned int sec, unsigned int usec)
190 {
191         p2p_dbg(p2p, "Set timeout (state=%s): %u.%06u sec",
192                 p2p_state_txt(p2p->state), sec, usec);
193         eloop_cancel_timeout(p2p_state_timeout, p2p, NULL);
194         eloop_register_timeout(sec, usec, p2p_state_timeout, p2p, NULL);
195 }
196
197
198 void p2p_clear_timeout(struct p2p_data *p2p)
199 {
200         p2p_dbg(p2p, "Clear timeout (state=%s)", p2p_state_txt(p2p->state));
201         eloop_cancel_timeout(p2p_state_timeout, p2p, NULL);
202 }
203
204
205 void p2p_go_neg_failed(struct p2p_data *p2p, struct p2p_device *peer,
206                        int status)
207 {
208         struct p2p_go_neg_results res;
209         p2p_clear_timeout(p2p);
210         p2p_set_state(p2p, P2P_IDLE);
211         if (p2p->go_neg_peer) {
212                 p2p->go_neg_peer->flags &= ~P2P_DEV_PEER_WAITING_RESPONSE;
213                 p2p->go_neg_peer->wps_method = WPS_NOT_READY;
214                 p2p->go_neg_peer->oob_pw_id = 0;
215         }
216         p2p->go_neg_peer = NULL;
217
218         os_memset(&res, 0, sizeof(res));
219         res.status = status;
220         if (peer) {
221                 os_memcpy(res.peer_device_addr, peer->info.p2p_device_addr,
222                           ETH_ALEN);
223                 os_memcpy(res.peer_interface_addr, peer->intended_addr,
224                           ETH_ALEN);
225         }
226         p2p->cfg->go_neg_completed(p2p->cfg->cb_ctx, &res);
227 }
228
229
230 static void p2p_listen_in_find(struct p2p_data *p2p, int dev_disc)
231 {
232         unsigned int r, tu;
233         int freq;
234         struct wpabuf *ies;
235
236         p2p_dbg(p2p, "Starting short listen state (state=%s)",
237                 p2p_state_txt(p2p->state));
238
239         freq = p2p_channel_to_freq(p2p->cfg->reg_class, p2p->cfg->channel);
240         if (freq < 0) {
241                 p2p_dbg(p2p, "Unknown regulatory class/channel");
242                 return;
243         }
244
245         os_get_random((u8 *) &r, sizeof(r));
246         tu = (r % ((p2p->max_disc_int - p2p->min_disc_int) + 1) +
247               p2p->min_disc_int) * 100;
248         if (p2p->max_disc_tu >= 0 && tu > (unsigned int) p2p->max_disc_tu)
249                 tu = p2p->max_disc_tu;
250         if (!dev_disc && tu < 100)
251                 tu = 100; /* Need to wait in non-device discovery use cases */
252         if (p2p->cfg->max_listen && 1024 * tu / 1000 > p2p->cfg->max_listen)
253                 tu = p2p->cfg->max_listen * 1000 / 1024;
254
255         if (tu == 0) {
256                 p2p_dbg(p2p, "Skip listen state since duration was 0 TU");
257                 p2p_set_timeout(p2p, 0, 0);
258                 return;
259         }
260
261         p2p->pending_listen_freq = freq;
262         p2p->pending_listen_sec = 0;
263         p2p->pending_listen_usec = 1024 * tu;
264
265         ies = p2p_build_probe_resp_ies(p2p);
266         if (ies == NULL)
267                 return;
268
269         if (p2p->cfg->start_listen(p2p->cfg->cb_ctx, freq, 1024 * tu / 1000,
270                     ies) < 0) {
271                 p2p_dbg(p2p, "Failed to start listen mode");
272                 p2p->pending_listen_freq = 0;
273         }
274         wpabuf_free(ies);
275 }
276
277
278 int p2p_listen(struct p2p_data *p2p, unsigned int timeout)
279 {
280         int freq;
281         struct wpabuf *ies;
282
283         p2p_dbg(p2p, "Going to listen(only) state");
284
285         freq = p2p_channel_to_freq(p2p->cfg->reg_class, p2p->cfg->channel);
286         if (freq < 0) {
287                 p2p_dbg(p2p, "Unknown regulatory class/channel");
288                 return -1;
289         }
290
291         p2p->pending_listen_freq = freq;
292         p2p->pending_listen_sec = timeout / 1000;
293         p2p->pending_listen_usec = (timeout % 1000) * 1000;
294
295         if (p2p->p2p_scan_running) {
296                 if (p2p->start_after_scan == P2P_AFTER_SCAN_CONNECT) {
297                         p2p_dbg(p2p, "p2p_scan running - connect is already pending - skip listen");
298                         return 0;
299                 }
300                 p2p_dbg(p2p, "p2p_scan running - delay start of listen state");
301                 p2p->start_after_scan = P2P_AFTER_SCAN_LISTEN;
302                 return 0;
303         }
304
305         ies = p2p_build_probe_resp_ies(p2p);
306         if (ies == NULL)
307                 return -1;
308
309         if (p2p->cfg->start_listen(p2p->cfg->cb_ctx, freq, timeout, ies) < 0) {
310                 p2p_dbg(p2p, "Failed to start listen mode");
311                 p2p->pending_listen_freq = 0;
312                 wpabuf_free(ies);
313                 return -1;
314         }
315         wpabuf_free(ies);
316
317         p2p_set_state(p2p, P2P_LISTEN_ONLY);
318
319         return 0;
320 }
321
322
323 static void p2p_device_clear_reported(struct p2p_data *p2p)
324 {
325         struct p2p_device *dev;
326         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list)
327                 dev->flags &= ~P2P_DEV_REPORTED;
328 }
329
330
331 /**
332  * p2p_get_device - Fetch a peer entry
333  * @p2p: P2P module context from p2p_init()
334  * @addr: P2P Device Address of the peer
335  * Returns: Pointer to the device entry or %NULL if not found
336  */
337 struct p2p_device * p2p_get_device(struct p2p_data *p2p, const u8 *addr)
338 {
339         struct p2p_device *dev;
340         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
341                 if (os_memcmp(dev->info.p2p_device_addr, addr, ETH_ALEN) == 0)
342                         return dev;
343         }
344         return NULL;
345 }
346
347
348 /**
349  * p2p_get_device_interface - Fetch a peer entry based on P2P Interface Address
350  * @p2p: P2P module context from p2p_init()
351  * @addr: P2P Interface Address of the peer
352  * Returns: Pointer to the device entry or %NULL if not found
353  */
354 struct p2p_device * p2p_get_device_interface(struct p2p_data *p2p,
355                                              const u8 *addr)
356 {
357         struct p2p_device *dev;
358         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
359                 if (os_memcmp(dev->interface_addr, addr, ETH_ALEN) == 0)
360                         return dev;
361         }
362         return NULL;
363 }
364
365
366 /**
367  * p2p_create_device - Create a peer entry
368  * @p2p: P2P module context from p2p_init()
369  * @addr: P2P Device Address of the peer
370  * Returns: Pointer to the device entry or %NULL on failure
371  *
372  * If there is already an entry for the peer, it will be returned instead of
373  * creating a new one.
374  */
375 static struct p2p_device * p2p_create_device(struct p2p_data *p2p,
376                                              const u8 *addr)
377 {
378         struct p2p_device *dev, *oldest = NULL;
379         size_t count = 0;
380
381         dev = p2p_get_device(p2p, addr);
382         if (dev)
383                 return dev;
384
385         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
386                 count++;
387                 if (oldest == NULL ||
388                     os_reltime_before(&dev->last_seen, &oldest->last_seen))
389                         oldest = dev;
390         }
391         if (count + 1 > p2p->cfg->max_peers && oldest) {
392                 p2p_dbg(p2p, "Remove oldest peer entry to make room for a new peer");
393                 dl_list_del(&oldest->list);
394                 p2p_device_free(p2p, oldest);
395         }
396
397         dev = os_zalloc(sizeof(*dev));
398         if (dev == NULL)
399                 return NULL;
400         dl_list_add(&p2p->devices, &dev->list);
401         os_memcpy(dev->info.p2p_device_addr, addr, ETH_ALEN);
402
403         return dev;
404 }
405
406
407 static void p2p_copy_client_info(struct p2p_device *dev,
408                                  struct p2p_client_info *cli)
409 {
410         os_memcpy(dev->info.device_name, cli->dev_name, cli->dev_name_len);
411         dev->info.device_name[cli->dev_name_len] = '\0';
412         dev->info.dev_capab = cli->dev_capab;
413         dev->info.config_methods = cli->config_methods;
414         os_memcpy(dev->info.pri_dev_type, cli->pri_dev_type, 8);
415         dev->info.wps_sec_dev_type_list_len = 8 * cli->num_sec_dev_types;
416         os_memcpy(dev->info.wps_sec_dev_type_list, cli->sec_dev_types,
417                   dev->info.wps_sec_dev_type_list_len);
418 }
419
420
421 static int p2p_add_group_clients(struct p2p_data *p2p, const u8 *go_dev_addr,
422                                  const u8 *go_interface_addr, int freq,
423                                  const u8 *gi, size_t gi_len)
424 {
425         struct p2p_group_info info;
426         size_t c;
427         struct p2p_device *dev;
428
429         if (gi == NULL)
430                 return 0;
431
432         if (p2p_group_info_parse(gi, gi_len, &info) < 0)
433                 return -1;
434
435         /*
436          * Clear old data for this group; if the devices are still in the
437          * group, the information will be restored in the loop following this.
438          */
439         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
440                 if (os_memcmp(dev->member_in_go_iface, go_interface_addr,
441                               ETH_ALEN) == 0) {
442                         os_memset(dev->member_in_go_iface, 0, ETH_ALEN);
443                         os_memset(dev->member_in_go_dev, 0, ETH_ALEN);
444                 }
445         }
446
447         for (c = 0; c < info.num_clients; c++) {
448                 struct p2p_client_info *cli = &info.client[c];
449                 if (os_memcmp(cli->p2p_device_addr, p2p->cfg->dev_addr,
450                               ETH_ALEN) == 0)
451                         continue; /* ignore our own entry */
452                 dev = p2p_get_device(p2p, cli->p2p_device_addr);
453                 if (dev) {
454                         if (dev->flags & (P2P_DEV_GROUP_CLIENT_ONLY |
455                                           P2P_DEV_PROBE_REQ_ONLY)) {
456                                 /*
457                                  * Update information since we have not
458                                  * received this directly from the client.
459                                  */
460                                 p2p_copy_client_info(dev, cli);
461                         } else {
462                                 /*
463                                  * Need to update P2P Client Discoverability
464                                  * flag since it is valid only in P2P Group
465                                  * Info attribute.
466                                  */
467                                 dev->info.dev_capab &=
468                                         ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
469                                 dev->info.dev_capab |=
470                                         cli->dev_capab &
471                                         P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
472                         }
473                         if (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
474                                 dev->flags &= ~P2P_DEV_PROBE_REQ_ONLY;
475                         }
476                 } else {
477                         dev = p2p_create_device(p2p, cli->p2p_device_addr);
478                         if (dev == NULL)
479                                 continue;
480                         dev->flags |= P2P_DEV_GROUP_CLIENT_ONLY;
481                         p2p_copy_client_info(dev, cli);
482                         dev->oper_freq = freq;
483                         p2p->cfg->dev_found(p2p->cfg->cb_ctx,
484                                             dev->info.p2p_device_addr,
485                                             &dev->info, 1);
486                         dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
487                 }
488
489                 os_memcpy(dev->interface_addr, cli->p2p_interface_addr,
490                           ETH_ALEN);
491                 os_get_reltime(&dev->last_seen);
492                 os_memcpy(dev->member_in_go_dev, go_dev_addr, ETH_ALEN);
493                 os_memcpy(dev->member_in_go_iface, go_interface_addr,
494                           ETH_ALEN);
495         }
496
497         return 0;
498 }
499
500
501 static void p2p_copy_wps_info(struct p2p_data *p2p, struct p2p_device *dev,
502                               int probe_req, const struct p2p_message *msg)
503 {
504         os_memcpy(dev->info.device_name, msg->device_name,
505                   sizeof(dev->info.device_name));
506
507         if (msg->manufacturer &&
508             msg->manufacturer_len < sizeof(dev->info.manufacturer)) {
509                 os_memset(dev->info.manufacturer, 0,
510                           sizeof(dev->info.manufacturer));
511                 os_memcpy(dev->info.manufacturer, msg->manufacturer,
512                           msg->manufacturer_len);
513         }
514
515         if (msg->model_name &&
516             msg->model_name_len < sizeof(dev->info.model_name)) {
517                 os_memset(dev->info.model_name, 0,
518                           sizeof(dev->info.model_name));
519                 os_memcpy(dev->info.model_name, msg->model_name,
520                           msg->model_name_len);
521         }
522
523         if (msg->model_number &&
524             msg->model_number_len < sizeof(dev->info.model_number)) {
525                 os_memset(dev->info.model_number, 0,
526                           sizeof(dev->info.model_number));
527                 os_memcpy(dev->info.model_number, msg->model_number,
528                           msg->model_number_len);
529         }
530
531         if (msg->serial_number &&
532             msg->serial_number_len < sizeof(dev->info.serial_number)) {
533                 os_memset(dev->info.serial_number, 0,
534                           sizeof(dev->info.serial_number));
535                 os_memcpy(dev->info.serial_number, msg->serial_number,
536                           msg->serial_number_len);
537         }
538
539         if (msg->pri_dev_type)
540                 os_memcpy(dev->info.pri_dev_type, msg->pri_dev_type,
541                           sizeof(dev->info.pri_dev_type));
542         else if (msg->wps_pri_dev_type)
543                 os_memcpy(dev->info.pri_dev_type, msg->wps_pri_dev_type,
544                           sizeof(dev->info.pri_dev_type));
545
546         if (msg->wps_sec_dev_type_list) {
547                 os_memcpy(dev->info.wps_sec_dev_type_list,
548                           msg->wps_sec_dev_type_list,
549                           msg->wps_sec_dev_type_list_len);
550                 dev->info.wps_sec_dev_type_list_len =
551                         msg->wps_sec_dev_type_list_len;
552         }
553
554         if (msg->capability) {
555                 /*
556                  * P2P Client Discoverability bit is reserved in all frames
557                  * that use this function, so do not change its value here.
558                  */
559                 dev->info.dev_capab &= P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
560                 dev->info.dev_capab |= msg->capability[0] &
561                         ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
562                 dev->info.group_capab = msg->capability[1];
563         }
564
565         if (msg->ext_listen_timing) {
566                 dev->ext_listen_period = WPA_GET_LE16(msg->ext_listen_timing);
567                 dev->ext_listen_interval =
568                         WPA_GET_LE16(msg->ext_listen_timing + 2);
569         }
570
571         if (!probe_req) {
572                 u16 new_config_methods;
573                 new_config_methods = msg->config_methods ?
574                         msg->config_methods : msg->wps_config_methods;
575                 if (new_config_methods &&
576                     dev->info.config_methods != new_config_methods) {
577                         p2p_dbg(p2p, "Update peer " MACSTR
578                                 " config_methods 0x%x -> 0x%x",
579                                 MAC2STR(dev->info.p2p_device_addr),
580                                 dev->info.config_methods,
581                                 new_config_methods);
582                         dev->info.config_methods = new_config_methods;
583                 }
584         }
585 }
586
587
588 /**
589  * p2p_add_device - Add peer entries based on scan results or P2P frames
590  * @p2p: P2P module context from p2p_init()
591  * @addr: Source address of Beacon or Probe Response frame (may be either
592  *      P2P Device Address or P2P Interface Address)
593  * @level: Signal level (signal strength of the received frame from the peer)
594  * @freq: Frequency on which the Beacon or Probe Response frame was received
595  * @rx_time: Time when the result was received
596  * @ies: IEs from the Beacon or Probe Response frame
597  * @ies_len: Length of ies buffer in octets
598  * @scan_res: Whether this was based on scan results
599  * Returns: 0 on success, -1 on failure
600  *
601  * If the scan result is for a GO, the clients in the group will also be added
602  * to the peer table. This function can also be used with some other frames
603  * like Provision Discovery Request that contains P2P Capability and P2P Device
604  * Info attributes.
605  */
606 int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq,
607                    struct os_reltime *rx_time, int level, const u8 *ies,
608                    size_t ies_len, int scan_res)
609 {
610         struct p2p_device *dev;
611         struct p2p_message msg;
612         const u8 *p2p_dev_addr;
613         int i;
614         struct os_reltime time_now;
615
616         os_memset(&msg, 0, sizeof(msg));
617         if (p2p_parse_ies(ies, ies_len, &msg)) {
618                 p2p_dbg(p2p, "Failed to parse P2P IE for a device entry");
619                 p2p_parse_free(&msg);
620                 return -1;
621         }
622
623         if (msg.p2p_device_addr)
624                 p2p_dev_addr = msg.p2p_device_addr;
625         else if (msg.device_id)
626                 p2p_dev_addr = msg.device_id;
627         else {
628                 p2p_dbg(p2p, "Ignore scan data without P2P Device Info or P2P Device Id");
629                 p2p_parse_free(&msg);
630                 return -1;
631         }
632
633         if (!is_zero_ether_addr(p2p->peer_filter) &&
634             os_memcmp(p2p_dev_addr, p2p->peer_filter, ETH_ALEN) != 0) {
635                 p2p_dbg(p2p, "Do not add peer filter for " MACSTR
636                         " due to peer filter", MAC2STR(p2p_dev_addr));
637                 p2p_parse_free(&msg);
638                 return 0;
639         }
640
641         dev = p2p_create_device(p2p, p2p_dev_addr);
642         if (dev == NULL) {
643                 p2p_parse_free(&msg);
644                 return -1;
645         }
646
647         if (rx_time == NULL) {
648                 os_get_reltime(&time_now);
649                 rx_time = &time_now;
650         }
651
652         /*
653          * Update the device entry only if the new peer
654          * entry is newer than the one previously stored.
655          */
656         if (dev->last_seen.sec > 0 &&
657             os_reltime_before(rx_time, &dev->last_seen)) {
658                 p2p_dbg(p2p, "Do not update peer entry based on old frame (rx_time=%u.%06u last_seen=%u.%06u)",
659                         (unsigned int) rx_time->sec,
660                         (unsigned int) rx_time->usec,
661                         (unsigned int) dev->last_seen.sec,
662                         (unsigned int) dev->last_seen.usec);
663                 p2p_parse_free(&msg);
664                 return -1;
665         }
666
667         os_memcpy(&dev->last_seen, rx_time, sizeof(struct os_reltime));
668
669         dev->flags &= ~(P2P_DEV_PROBE_REQ_ONLY | P2P_DEV_GROUP_CLIENT_ONLY);
670
671         if (os_memcmp(addr, p2p_dev_addr, ETH_ALEN) != 0)
672                 os_memcpy(dev->interface_addr, addr, ETH_ALEN);
673         if (msg.ssid &&
674             (msg.ssid[1] != P2P_WILDCARD_SSID_LEN ||
675              os_memcmp(msg.ssid + 2, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN)
676              != 0)) {
677                 os_memcpy(dev->oper_ssid, msg.ssid + 2, msg.ssid[1]);
678                 dev->oper_ssid_len = msg.ssid[1];
679         }
680
681         if (freq >= 2412 && freq <= 2484 && msg.ds_params &&
682             *msg.ds_params >= 1 && *msg.ds_params <= 14) {
683                 int ds_freq;
684                 if (*msg.ds_params == 14)
685                         ds_freq = 2484;
686                 else
687                         ds_freq = 2407 + *msg.ds_params * 5;
688                 if (freq != ds_freq) {
689                         p2p_dbg(p2p, "Update Listen frequency based on DS Parameter Set IE: %d -> %d MHz",
690                                 freq, ds_freq);
691                         freq = ds_freq;
692                 }
693         }
694
695         if (dev->listen_freq && dev->listen_freq != freq && scan_res) {
696                 p2p_dbg(p2p, "Update Listen frequency based on scan results ("
697                         MACSTR " %d -> %d MHz (DS param %d)",
698                         MAC2STR(dev->info.p2p_device_addr), dev->listen_freq,
699                         freq, msg.ds_params ? *msg.ds_params : -1);
700         }
701         if (scan_res) {
702                 dev->listen_freq = freq;
703                 if (msg.group_info)
704                         dev->oper_freq = freq;
705         }
706         dev->info.level = level;
707
708         p2p_copy_wps_info(p2p, dev, 0, &msg);
709
710         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
711                 wpabuf_free(dev->info.wps_vendor_ext[i]);
712                 dev->info.wps_vendor_ext[i] = NULL;
713         }
714
715         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
716                 if (msg.wps_vendor_ext[i] == NULL)
717                         break;
718                 dev->info.wps_vendor_ext[i] = wpabuf_alloc_copy(
719                         msg.wps_vendor_ext[i], msg.wps_vendor_ext_len[i]);
720                 if (dev->info.wps_vendor_ext[i] == NULL)
721                         break;
722         }
723
724         if (msg.wfd_subelems) {
725                 wpabuf_free(dev->info.wfd_subelems);
726                 dev->info.wfd_subelems = wpabuf_dup(msg.wfd_subelems);
727         }
728
729         if (scan_res) {
730                 p2p_add_group_clients(p2p, p2p_dev_addr, addr, freq,
731                                       msg.group_info, msg.group_info_len);
732         }
733
734         p2p_parse_free(&msg);
735
736         if (dev->flags & P2P_DEV_REPORTED)
737                 return 0;
738
739         p2p_dbg(p2p, "Peer found with Listen frequency %d MHz (rx_time=%u.%06u)",
740                 freq, (unsigned int) rx_time->sec,
741                 (unsigned int) rx_time->usec);
742         if (dev->flags & P2P_DEV_USER_REJECTED) {
743                 p2p_dbg(p2p, "Do not report rejected device");
744                 return 0;
745         }
746
747         if (dev->info.config_methods == 0 &&
748             (freq == 2412 || freq == 2437 || freq == 2462)) {
749                 /*
750                  * If we have only seen a Beacon frame from a GO, we do not yet
751                  * know what WPS config methods it supports. Since some
752                  * applications use config_methods value from P2P-DEVICE-FOUND
753                  * events, postpone reporting this peer until we've fully
754                  * discovered its capabilities.
755                  *
756                  * At least for now, do this only if the peer was detected on
757                  * one of the social channels since that peer can be easily be
758                  * found again and there are no limitations of having to use
759                  * passive scan on this channels, so this can be done through
760                  * Probe Response frame that includes the config_methods
761                  * information.
762                  */
763                 p2p_dbg(p2p, "Do not report peer " MACSTR
764                         " with unknown config methods", MAC2STR(addr));
765                 return 0;
766         }
767
768         p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info,
769                             !(dev->flags & P2P_DEV_REPORTED_ONCE));
770         dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
771
772         return 0;
773 }
774
775
776 static void p2p_device_free(struct p2p_data *p2p, struct p2p_device *dev)
777 {
778         int i;
779
780         if (p2p->go_neg_peer == dev) {
781                 /*
782                  * If GO Negotiation is in progress, report that it has failed.
783                  */
784                 p2p_go_neg_failed(p2p, dev, -1);
785                 p2p->go_neg_peer = NULL;
786         }
787         if (p2p->invite_peer == dev)
788                 p2p->invite_peer = NULL;
789         if (p2p->sd_peer == dev)
790                 p2p->sd_peer = NULL;
791         if (p2p->pending_client_disc_go == dev)
792                 p2p->pending_client_disc_go = NULL;
793
794         /* dev_lost() device, but only if it was previously dev_found() */
795         if (dev->flags & P2P_DEV_REPORTED_ONCE)
796                 p2p->cfg->dev_lost(p2p->cfg->cb_ctx,
797                                    dev->info.p2p_device_addr);
798
799         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
800                 wpabuf_free(dev->info.wps_vendor_ext[i]);
801                 dev->info.wps_vendor_ext[i] = NULL;
802         }
803
804         wpabuf_free(dev->info.wfd_subelems);
805
806         os_free(dev);
807 }
808
809
810 static int p2p_get_next_prog_freq(struct p2p_data *p2p)
811 {
812         struct p2p_channels *c;
813         struct p2p_reg_class *cla;
814         size_t cl, ch;
815         int found = 0;
816         u8 reg_class;
817         u8 channel;
818         int freq;
819
820         c = &p2p->cfg->channels;
821         for (cl = 0; cl < c->reg_classes; cl++) {
822                 cla = &c->reg_class[cl];
823                 if (cla->reg_class != p2p->last_prog_scan_class)
824                         continue;
825                 for (ch = 0; ch < cla->channels; ch++) {
826                         if (cla->channel[ch] == p2p->last_prog_scan_chan) {
827                                 found = 1;
828                                 break;
829                         }
830                 }
831                 if (found)
832                         break;
833         }
834
835         if (!found) {
836                 /* Start from beginning */
837                 reg_class = c->reg_class[0].reg_class;
838                 channel = c->reg_class[0].channel[0];
839         } else {
840                 /* Pick the next channel */
841                 ch++;
842                 if (ch == cla->channels) {
843                         cl++;
844                         if (cl == c->reg_classes)
845                                 cl = 0;
846                         ch = 0;
847                 }
848                 reg_class = c->reg_class[cl].reg_class;
849                 channel = c->reg_class[cl].channel[ch];
850         }
851
852         freq = p2p_channel_to_freq(reg_class, channel);
853         p2p_dbg(p2p, "Next progressive search channel: reg_class %u channel %u -> %d MHz",
854                 reg_class, channel, freq);
855         p2p->last_prog_scan_class = reg_class;
856         p2p->last_prog_scan_chan = channel;
857
858         if (freq == 2412 || freq == 2437 || freq == 2462)
859                 return 0; /* No need to add social channels */
860         return freq;
861 }
862
863
864 static void p2p_search(struct p2p_data *p2p)
865 {
866         int freq = 0;
867         enum p2p_scan_type type;
868         u16 pw_id = DEV_PW_DEFAULT;
869         int res;
870
871         if (p2p->drv_in_listen) {
872                 p2p_dbg(p2p, "Driver is still in Listen state - wait for it to end before continuing");
873                 return;
874         }
875         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
876
877         if (p2p->find_type == P2P_FIND_PROGRESSIVE &&
878             (freq = p2p_get_next_prog_freq(p2p)) > 0) {
879                 type = P2P_SCAN_SOCIAL_PLUS_ONE;
880                 p2p_dbg(p2p, "Starting search (+ freq %u)", freq);
881         } else {
882                 type = P2P_SCAN_SOCIAL;
883                 p2p_dbg(p2p, "Starting search");
884         }
885
886         res = p2p->cfg->p2p_scan(p2p->cfg->cb_ctx, type, freq,
887                                  p2p->num_req_dev_types, p2p->req_dev_types,
888                                  p2p->find_dev_id, pw_id);
889         if (res < 0) {
890                 p2p_dbg(p2p, "Scan request failed");
891                 p2p_continue_find(p2p);
892         } else {
893                 p2p_dbg(p2p, "Running p2p_scan");
894                 p2p->p2p_scan_running = 1;
895                 eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
896                 eloop_register_timeout(P2P_SCAN_TIMEOUT, 0, p2p_scan_timeout,
897                                        p2p, NULL);
898         }
899 }
900
901
902 static void p2p_find_timeout(void *eloop_ctx, void *timeout_ctx)
903 {
904         struct p2p_data *p2p = eloop_ctx;
905         p2p_dbg(p2p, "Find timeout -> stop");
906         p2p_stop_find(p2p);
907 }
908
909
910 static int p2p_run_after_scan(struct p2p_data *p2p)
911 {
912         struct p2p_device *dev;
913         enum p2p_after_scan op;
914
915         if (p2p->after_scan_tx) {
916                 p2p->after_scan_tx_in_progress = 1;
917                 p2p_dbg(p2p, "Send pending Action frame at p2p_scan completion");
918                 p2p->cfg->send_action(p2p->cfg->cb_ctx,
919                                       p2p->after_scan_tx->freq,
920                                       p2p->after_scan_tx->dst,
921                                       p2p->after_scan_tx->src,
922                                       p2p->after_scan_tx->bssid,
923                                       (u8 *) (p2p->after_scan_tx + 1),
924                                       p2p->after_scan_tx->len,
925                                       p2p->after_scan_tx->wait_time);
926                 os_free(p2p->after_scan_tx);
927                 p2p->after_scan_tx = NULL;
928                 return 1;
929         }
930
931         op = p2p->start_after_scan;
932         p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
933         switch (op) {
934         case P2P_AFTER_SCAN_NOTHING:
935                 break;
936         case P2P_AFTER_SCAN_LISTEN:
937                 p2p_dbg(p2p, "Start previously requested Listen state");
938                 p2p_listen(p2p, p2p->pending_listen_sec * 1000 +
939                            p2p->pending_listen_usec / 1000);
940                 return 1;
941         case P2P_AFTER_SCAN_CONNECT:
942                 p2p_dbg(p2p, "Start previously requested connect with " MACSTR,
943                         MAC2STR(p2p->after_scan_peer));
944                 dev = p2p_get_device(p2p, p2p->after_scan_peer);
945                 if (dev == NULL) {
946                         p2p_dbg(p2p, "Peer not known anymore");
947                         break;
948                 }
949                 p2p_connect_send(p2p, dev);
950                 return 1;
951         }
952
953         return 0;
954 }
955
956
957 static void p2p_scan_timeout(void *eloop_ctx, void *timeout_ctx)
958 {
959         struct p2p_data *p2p = eloop_ctx;
960         int running;
961         p2p_dbg(p2p, "p2p_scan timeout (running=%d)", p2p->p2p_scan_running);
962         running = p2p->p2p_scan_running;
963         /* Make sure we recover from missed scan results callback */
964         p2p->p2p_scan_running = 0;
965
966         if (running)
967                 p2p_run_after_scan(p2p);
968 }
969
970
971 static void p2p_free_req_dev_types(struct p2p_data *p2p)
972 {
973         p2p->num_req_dev_types = 0;
974         os_free(p2p->req_dev_types);
975         p2p->req_dev_types = NULL;
976 }
977
978
979 int p2p_find(struct p2p_data *p2p, unsigned int timeout,
980              enum p2p_discovery_type type,
981              unsigned int num_req_dev_types, const u8 *req_dev_types,
982              const u8 *dev_id, unsigned int search_delay)
983 {
984         int res;
985
986         p2p_dbg(p2p, "Starting find (type=%d)", type);
987         os_get_reltime(&p2p->find_start);
988         if (p2p->p2p_scan_running) {
989                 p2p_dbg(p2p, "p2p_scan is already running");
990         }
991
992         p2p_free_req_dev_types(p2p);
993         if (req_dev_types && num_req_dev_types) {
994                 p2p->req_dev_types = os_malloc(num_req_dev_types *
995                                                WPS_DEV_TYPE_LEN);
996                 if (p2p->req_dev_types == NULL)
997                         return -1;
998                 os_memcpy(p2p->req_dev_types, req_dev_types,
999                           num_req_dev_types * WPS_DEV_TYPE_LEN);
1000                 p2p->num_req_dev_types = num_req_dev_types;
1001         }
1002
1003         if (dev_id) {
1004                 os_memcpy(p2p->find_dev_id_buf, dev_id, ETH_ALEN);
1005                 p2p->find_dev_id = p2p->find_dev_id_buf;
1006         } else
1007                 p2p->find_dev_id = NULL;
1008
1009         p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
1010         p2p_clear_timeout(p2p);
1011         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1012         p2p->find_type = type;
1013         p2p_device_clear_reported(p2p);
1014         p2p_set_state(p2p, P2P_SEARCH);
1015         p2p->search_delay = search_delay;
1016         p2p->in_search_delay = 0;
1017         eloop_cancel_timeout(p2p_find_timeout, p2p, NULL);
1018         p2p->last_p2p_find_timeout = timeout;
1019         if (timeout)
1020                 eloop_register_timeout(timeout, 0, p2p_find_timeout,
1021                                        p2p, NULL);
1022         switch (type) {
1023         case P2P_FIND_START_WITH_FULL:
1024         case P2P_FIND_PROGRESSIVE:
1025                 res = p2p->cfg->p2p_scan(p2p->cfg->cb_ctx, P2P_SCAN_FULL, 0,
1026                                          p2p->num_req_dev_types,
1027                                          p2p->req_dev_types, dev_id,
1028                                          DEV_PW_DEFAULT);
1029                 break;
1030         case P2P_FIND_ONLY_SOCIAL:
1031                 res = p2p->cfg->p2p_scan(p2p->cfg->cb_ctx, P2P_SCAN_SOCIAL, 0,
1032                                          p2p->num_req_dev_types,
1033                                          p2p->req_dev_types, dev_id,
1034                                          DEV_PW_DEFAULT);
1035                 break;
1036         default:
1037                 return -1;
1038         }
1039
1040         if (res == 0) {
1041                 p2p_dbg(p2p, "Running p2p_scan");
1042                 p2p->p2p_scan_running = 1;
1043                 eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
1044                 eloop_register_timeout(P2P_SCAN_TIMEOUT, 0, p2p_scan_timeout,
1045                                        p2p, NULL);
1046         } else if (p2p->p2p_scan_running) {
1047                 p2p_dbg(p2p, "Failed to start p2p_scan - another p2p_scan was already running");
1048                 /* wait for the previous p2p_scan to complete */
1049                 res = 0; /* do not report failure */
1050         } else {
1051                 p2p_dbg(p2p, "Failed to start p2p_scan");
1052                 p2p_set_state(p2p, P2P_IDLE);
1053                 eloop_cancel_timeout(p2p_find_timeout, p2p, NULL);
1054         }
1055
1056         return res;
1057 }
1058
1059
1060 void p2p_stop_find_for_freq(struct p2p_data *p2p, int freq)
1061 {
1062         p2p_dbg(p2p, "Stopping find");
1063         eloop_cancel_timeout(p2p_find_timeout, p2p, NULL);
1064         p2p_clear_timeout(p2p);
1065         if (p2p->state == P2P_SEARCH)
1066                 p2p->cfg->find_stopped(p2p->cfg->cb_ctx);
1067         p2p_set_state(p2p, P2P_IDLE);
1068         p2p_free_req_dev_types(p2p);
1069         p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
1070         if (p2p->go_neg_peer)
1071                 p2p->go_neg_peer->flags &= ~P2P_DEV_PEER_WAITING_RESPONSE;
1072         p2p->go_neg_peer = NULL;
1073         p2p->sd_peer = NULL;
1074         p2p->invite_peer = NULL;
1075         p2p_stop_listen_for_freq(p2p, freq);
1076 }
1077
1078
1079 void p2p_stop_listen_for_freq(struct p2p_data *p2p, int freq)
1080 {
1081         if (freq > 0 && p2p->drv_in_listen == freq && p2p->in_listen) {
1082                 p2p_dbg(p2p, "Skip stop_listen since we are on correct channel for response");
1083                 return;
1084         }
1085         if (p2p->in_listen) {
1086                 p2p->in_listen = 0;
1087                 p2p_clear_timeout(p2p);
1088         }
1089         if (p2p->drv_in_listen) {
1090                 /*
1091                  * The driver may not deliver callback to p2p_listen_end()
1092                  * when the operation gets canceled, so clear the internal
1093                  * variable that is tracking driver state.
1094                  */
1095                 p2p_dbg(p2p, "Clear drv_in_listen (%d)", p2p->drv_in_listen);
1096                 p2p->drv_in_listen = 0;
1097         }
1098         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1099 }
1100
1101
1102 void p2p_stop_listen(struct p2p_data *p2p)
1103 {
1104         if (p2p->state != P2P_LISTEN_ONLY) {
1105                 p2p_dbg(p2p, "Skip stop_listen since not in listen_only state.");
1106                 return;
1107         }
1108
1109         p2p_stop_listen_for_freq(p2p, 0);
1110         p2p_set_state(p2p, P2P_IDLE);
1111 }
1112
1113
1114 void p2p_stop_find(struct p2p_data *p2p)
1115 {
1116         p2p_stop_find_for_freq(p2p, 0);
1117 }
1118
1119
1120 static int p2p_prepare_channel_pref(struct p2p_data *p2p,
1121                                     unsigned int force_freq,
1122                                     unsigned int pref_freq, int go)
1123 {
1124         u8 op_class, op_channel;
1125         unsigned int freq = force_freq ? force_freq : pref_freq;
1126
1127         p2p_dbg(p2p, "Prepare channel pref - force_freq=%u pref_freq=%u go=%d",
1128                 force_freq, pref_freq, go);
1129         if (p2p_freq_to_channel(freq, &op_class, &op_channel) < 0) {
1130                 p2p_dbg(p2p, "Unsupported frequency %u MHz", freq);
1131                 return -1;
1132         }
1133
1134         if (!p2p_channels_includes(&p2p->cfg->channels, op_class, op_channel) &&
1135             (go || !p2p_channels_includes(&p2p->cfg->cli_channels, op_class,
1136                                           op_channel))) {
1137                 p2p_dbg(p2p, "Frequency %u MHz (oper_class %u channel %u) not allowed for P2P",
1138                         freq, op_class, op_channel);
1139                 return -1;
1140         }
1141
1142         p2p->op_reg_class = op_class;
1143         p2p->op_channel = op_channel;
1144
1145         if (force_freq) {
1146                 p2p->channels.reg_classes = 1;
1147                 p2p->channels.reg_class[0].channels = 1;
1148                 p2p->channels.reg_class[0].reg_class = p2p->op_reg_class;
1149                 p2p->channels.reg_class[0].channel[0] = p2p->op_channel;
1150         } else {
1151                 os_memcpy(&p2p->channels, &p2p->cfg->channels,
1152                           sizeof(struct p2p_channels));
1153         }
1154
1155         return 0;
1156 }
1157
1158
1159 static void p2p_prepare_channel_best(struct p2p_data *p2p)
1160 {
1161         u8 op_class, op_channel;
1162         const int op_classes_5ghz[] = { 124, 115, 0 };
1163         const int op_classes_ht40[] = { 126, 127, 116, 117, 0 };
1164         const int op_classes_vht[] = { 128, 0 };
1165
1166         p2p_dbg(p2p, "Prepare channel best");
1167
1168         if (!p2p->cfg->cfg_op_channel && p2p->best_freq_overall > 0 &&
1169             p2p_supported_freq(p2p, p2p->best_freq_overall) &&
1170             p2p_freq_to_channel(p2p->best_freq_overall, &op_class, &op_channel)
1171             == 0) {
1172                 p2p_dbg(p2p, "Select best overall channel as operating channel preference");
1173                 p2p->op_reg_class = op_class;
1174                 p2p->op_channel = op_channel;
1175         } else if (!p2p->cfg->cfg_op_channel && p2p->best_freq_5 > 0 &&
1176                    p2p_supported_freq(p2p, p2p->best_freq_5) &&
1177                    p2p_freq_to_channel(p2p->best_freq_5, &op_class, &op_channel)
1178                    == 0) {
1179                 p2p_dbg(p2p, "Select best 5 GHz channel as operating channel preference");
1180                 p2p->op_reg_class = op_class;
1181                 p2p->op_channel = op_channel;
1182         } else if (!p2p->cfg->cfg_op_channel && p2p->best_freq_24 > 0 &&
1183                    p2p_supported_freq(p2p, p2p->best_freq_24) &&
1184                    p2p_freq_to_channel(p2p->best_freq_24, &op_class,
1185                                        &op_channel) == 0) {
1186                 p2p_dbg(p2p, "Select best 2.4 GHz channel as operating channel preference");
1187                 p2p->op_reg_class = op_class;
1188                 p2p->op_channel = op_channel;
1189         } else if (p2p->cfg->num_pref_chan > 0 &&
1190                    p2p_channels_includes(&p2p->cfg->channels,
1191                                          p2p->cfg->pref_chan[0].op_class,
1192                                          p2p->cfg->pref_chan[0].chan)) {
1193                 p2p_dbg(p2p, "Select first pref_chan entry as operating channel preference");
1194                 p2p->op_reg_class = p2p->cfg->pref_chan[0].op_class;
1195                 p2p->op_channel = p2p->cfg->pref_chan[0].chan;
1196         } else if (p2p_channel_select(&p2p->cfg->channels, op_classes_vht,
1197                                       &p2p->op_reg_class, &p2p->op_channel) ==
1198                    0) {
1199                 p2p_dbg(p2p, "Select possible VHT channel (op_class %u channel %u) as operating channel preference",
1200                         p2p->op_reg_class, p2p->op_channel);
1201         } else if (p2p_channel_select(&p2p->cfg->channels, op_classes_ht40,
1202                                       &p2p->op_reg_class, &p2p->op_channel) ==
1203                    0) {
1204                 p2p_dbg(p2p, "Select possible HT40 channel (op_class %u channel %u) as operating channel preference",
1205                         p2p->op_reg_class, p2p->op_channel);
1206         } else if (p2p_channel_select(&p2p->cfg->channels, op_classes_5ghz,
1207                                       &p2p->op_reg_class, &p2p->op_channel) ==
1208                    0) {
1209                 p2p_dbg(p2p, "Select possible 5 GHz channel (op_class %u channel %u) as operating channel preference",
1210                         p2p->op_reg_class, p2p->op_channel);
1211         } else if (p2p_channels_includes(&p2p->cfg->channels,
1212                                          p2p->cfg->op_reg_class,
1213                                          p2p->cfg->op_channel)) {
1214                 p2p_dbg(p2p, "Select pre-configured channel as operating channel preference");
1215                 p2p->op_reg_class = p2p->cfg->op_reg_class;
1216                 p2p->op_channel = p2p->cfg->op_channel;
1217         } else {
1218                 u8 op_chans[3];
1219                 u8 *op_chan;
1220                 size_t num_channels = 0;
1221                 unsigned int r;
1222
1223                 /* Try to find available social channels from 2.4 GHz */
1224                 if (p2p_channels_includes(&p2p->cfg->channels, 81, 1))
1225                         op_chans[num_channels++] = 1;
1226                 if (p2p_channels_includes(&p2p->cfg->channels, 81, 6))
1227                         op_chans[num_channels++] = 6;
1228                 if (p2p_channels_includes(&p2p->cfg->channels, 81, 11))
1229                         op_chans[num_channels++] = 11;
1230
1231                 if (num_channels) {
1232                         p2p_dbg(p2p, "Select random available social channel from 2.4 GHz band as operating channel preference");
1233                         op_chan = op_chans;
1234                 } else {
1235                         struct p2p_reg_class *class;
1236
1237                         /* Select any random available channel from the first
1238                          * operating class */
1239                         p2p_dbg(p2p, "Select random available channel from operating class %d as operating channel preference",
1240                                 p2p->op_reg_class);
1241                         class = &p2p->cfg->channels.reg_class[0];
1242                         p2p->op_reg_class = class->reg_class;
1243                         op_chan = &class->channel[0];
1244                         num_channels = class->channels;
1245                         if (num_channels == 0) {
1246                                 /* Should not happen, but make sure we do not
1247                                  * try to divide by zero */
1248                                 op_chan = op_chans;
1249                                 op_chans[0] = 1;
1250                                 num_channels = 1;
1251                         }
1252                 }
1253                 os_get_random((u8 *) &r, sizeof(r));
1254                 r %= num_channels;
1255                 p2p->op_channel = op_chan[r];
1256         }
1257
1258         os_memcpy(&p2p->channels, &p2p->cfg->channels,
1259                   sizeof(struct p2p_channels));
1260 }
1261
1262
1263 /**
1264  * p2p_prepare_channel - Select operating channel for GO Negotiation
1265  * @p2p: P2P module context from p2p_init()
1266  * @dev: Selected peer device
1267  * @force_freq: Forced frequency in MHz or 0 if not forced
1268  * @pref_freq: Preferred frequency in MHz or 0 if no preference
1269  * @go: Whether the local end will be forced to be GO
1270  * Returns: 0 on success, -1 on failure (channel not supported for P2P)
1271  *
1272  * This function is used to do initial operating channel selection for GO
1273  * Negotiation prior to having received peer information. The selected channel
1274  * may be further optimized in p2p_reselect_channel() once the peer information
1275  * is available.
1276  */
1277 int p2p_prepare_channel(struct p2p_data *p2p, struct p2p_device *dev,
1278                         unsigned int force_freq, unsigned int pref_freq, int go)
1279 {
1280         p2p_dbg(p2p, "Prepare channel - force_freq=%u pref_freq=%u go=%d",
1281                 force_freq, pref_freq, go);
1282         if (force_freq || pref_freq) {
1283                 if (p2p_prepare_channel_pref(p2p, force_freq, pref_freq, go) <
1284                     0)
1285                         return -1;
1286         } else {
1287                 p2p_prepare_channel_best(p2p);
1288         }
1289         p2p_channels_dump(p2p, "prepared channels", &p2p->channels);
1290         if (go)
1291                 p2p_channels_remove_freqs(&p2p->channels, &p2p->no_go_freq);
1292         else if (!force_freq)
1293                 p2p_channels_union(&p2p->channels, &p2p->cfg->cli_channels,
1294                                    &p2p->channels);
1295         p2p_channels_dump(p2p, "after go/cli filter/add", &p2p->channels);
1296
1297         p2p_dbg(p2p, "Own preference for operation channel: Operating Class %u Channel %u%s",
1298                 p2p->op_reg_class, p2p->op_channel,
1299                 force_freq ? " (forced)" : "");
1300
1301         if (force_freq)
1302                 dev->flags |= P2P_DEV_FORCE_FREQ;
1303         else
1304                 dev->flags &= ~P2P_DEV_FORCE_FREQ;
1305
1306         return 0;
1307 }
1308
1309
1310 static void p2p_set_dev_persistent(struct p2p_device *dev,
1311                                    int persistent_group)
1312 {
1313         switch (persistent_group) {
1314         case 0:
1315                 dev->flags &= ~(P2P_DEV_PREFER_PERSISTENT_GROUP |
1316                                 P2P_DEV_PREFER_PERSISTENT_RECONN);
1317                 break;
1318         case 1:
1319                 dev->flags |= P2P_DEV_PREFER_PERSISTENT_GROUP;
1320                 dev->flags &= ~P2P_DEV_PREFER_PERSISTENT_RECONN;
1321                 break;
1322         case 2:
1323                 dev->flags |= P2P_DEV_PREFER_PERSISTENT_GROUP |
1324                         P2P_DEV_PREFER_PERSISTENT_RECONN;
1325                 break;
1326         }
1327 }
1328
1329
1330 int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
1331                 enum p2p_wps_method wps_method,
1332                 int go_intent, const u8 *own_interface_addr,
1333                 unsigned int force_freq, int persistent_group,
1334                 const u8 *force_ssid, size_t force_ssid_len,
1335                 int pd_before_go_neg, unsigned int pref_freq, u16 oob_pw_id)
1336 {
1337         struct p2p_device *dev;
1338
1339         p2p_dbg(p2p, "Request to start group negotiation - peer=" MACSTR
1340                 "  GO Intent=%d  Intended Interface Address=" MACSTR
1341                 " wps_method=%d persistent_group=%d pd_before_go_neg=%d "
1342                 "oob_pw_id=%u",
1343                 MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
1344                 wps_method, persistent_group, pd_before_go_neg, oob_pw_id);
1345
1346         dev = p2p_get_device(p2p, peer_addr);
1347         if (dev == NULL || (dev->flags & P2P_DEV_PROBE_REQ_ONLY)) {
1348                 p2p_dbg(p2p, "Cannot connect to unknown P2P Device " MACSTR,
1349                         MAC2STR(peer_addr));
1350                 return -1;
1351         }
1352
1353         if (p2p_prepare_channel(p2p, dev, force_freq, pref_freq,
1354                                 go_intent == 15) < 0)
1355                 return -1;
1356
1357         if (dev->flags & P2P_DEV_GROUP_CLIENT_ONLY) {
1358                 if (!(dev->info.dev_capab &
1359                       P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY)) {
1360                         p2p_dbg(p2p, "Cannot connect to P2P Device " MACSTR
1361                                 " that is in a group and is not discoverable",
1362                                 MAC2STR(peer_addr));
1363                         return -1;
1364                 }
1365                 if (dev->oper_freq <= 0) {
1366                         p2p_dbg(p2p, "Cannot connect to P2P Device " MACSTR
1367                                 " with incomplete information",
1368                                 MAC2STR(peer_addr));
1369                         return -1;
1370                 }
1371
1372                 /*
1373                  * First, try to connect directly. If the peer does not
1374                  * acknowledge frames, assume it is sleeping and use device
1375                  * discoverability via the GO at that point.
1376                  */
1377         }
1378
1379         p2p->ssid_set = 0;
1380         if (force_ssid) {
1381                 wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
1382                                   force_ssid, force_ssid_len);
1383                 os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
1384                 p2p->ssid_len = force_ssid_len;
1385                 p2p->ssid_set = 1;
1386         }
1387
1388         dev->flags &= ~P2P_DEV_NOT_YET_READY;
1389         dev->flags &= ~P2P_DEV_USER_REJECTED;
1390         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
1391         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_CONFIRM;
1392         if (pd_before_go_neg)
1393                 dev->flags |= P2P_DEV_PD_BEFORE_GO_NEG;
1394         else {
1395                 dev->flags &= ~P2P_DEV_PD_BEFORE_GO_NEG;
1396                 /*
1397                  * Assign dialog token and tie breaker here to use the same
1398                  * values in each retry within the same GO Negotiation exchange.
1399                  */
1400                 dev->dialog_token++;
1401                 if (dev->dialog_token == 0)
1402                         dev->dialog_token = 1;
1403                 dev->tie_breaker = p2p->next_tie_breaker;
1404                 p2p->next_tie_breaker = !p2p->next_tie_breaker;
1405         }
1406         dev->connect_reqs = 0;
1407         dev->go_neg_req_sent = 0;
1408         dev->go_state = UNKNOWN_GO;
1409         p2p_set_dev_persistent(dev, persistent_group);
1410         p2p->go_intent = go_intent;
1411         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
1412
1413         if (p2p->state != P2P_IDLE)
1414                 p2p_stop_find(p2p);
1415
1416         if (p2p->after_scan_tx) {
1417                 /*
1418                  * We need to drop the pending frame to avoid issues with the
1419                  * new GO Negotiation, e.g., when the pending frame was from a
1420                  * previous attempt at starting a GO Negotiation.
1421                  */
1422                 p2p_dbg(p2p, "Dropped previous pending Action frame TX that was waiting for p2p_scan completion");
1423                 os_free(p2p->after_scan_tx);
1424                 p2p->after_scan_tx = NULL;
1425         }
1426
1427         dev->wps_method = wps_method;
1428         dev->oob_pw_id = oob_pw_id;
1429         dev->status = P2P_SC_SUCCESS;
1430
1431         if (p2p->p2p_scan_running) {
1432                 p2p_dbg(p2p, "p2p_scan running - delay connect send");
1433                 p2p->start_after_scan = P2P_AFTER_SCAN_CONNECT;
1434                 os_memcpy(p2p->after_scan_peer, peer_addr, ETH_ALEN);
1435                 return 0;
1436         }
1437         p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
1438
1439         return p2p_connect_send(p2p, dev);
1440 }
1441
1442
1443 int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
1444                   enum p2p_wps_method wps_method,
1445                   int go_intent, const u8 *own_interface_addr,
1446                   unsigned int force_freq, int persistent_group,
1447                   const u8 *force_ssid, size_t force_ssid_len,
1448                   unsigned int pref_freq, u16 oob_pw_id)
1449 {
1450         struct p2p_device *dev;
1451
1452         p2p_dbg(p2p, "Request to authorize group negotiation - peer=" MACSTR
1453                 "  GO Intent=%d  Intended Interface Address=" MACSTR
1454                 " wps_method=%d  persistent_group=%d oob_pw_id=%u",
1455                 MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
1456                 wps_method, persistent_group, oob_pw_id);
1457
1458         dev = p2p_get_device(p2p, peer_addr);
1459         if (dev == NULL) {
1460                 p2p_dbg(p2p, "Cannot authorize unknown P2P Device " MACSTR,
1461                         MAC2STR(peer_addr));
1462                 return -1;
1463         }
1464
1465         if (p2p_prepare_channel(p2p, dev, force_freq, pref_freq, go_intent ==
1466                                 15) < 0)
1467                 return -1;
1468
1469         p2p->ssid_set = 0;
1470         if (force_ssid) {
1471                 wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
1472                                   force_ssid, force_ssid_len);
1473                 os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
1474                 p2p->ssid_len = force_ssid_len;
1475                 p2p->ssid_set = 1;
1476         }
1477
1478         dev->flags &= ~P2P_DEV_NOT_YET_READY;
1479         dev->flags &= ~P2P_DEV_USER_REJECTED;
1480         dev->go_neg_req_sent = 0;
1481         dev->go_state = UNKNOWN_GO;
1482         p2p_set_dev_persistent(dev, persistent_group);
1483         p2p->go_intent = go_intent;
1484         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
1485
1486         dev->wps_method = wps_method;
1487         dev->oob_pw_id = oob_pw_id;
1488         dev->status = P2P_SC_SUCCESS;
1489
1490         return 0;
1491 }
1492
1493
1494 void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr,
1495                       struct p2p_device *dev, struct p2p_message *msg)
1496 {
1497         os_get_reltime(&dev->last_seen);
1498
1499         p2p_copy_wps_info(p2p, dev, 0, msg);
1500
1501         if (msg->listen_channel) {
1502                 int freq;
1503                 freq = p2p_channel_to_freq(msg->listen_channel[3],
1504                                            msg->listen_channel[4]);
1505                 if (freq < 0) {
1506                         p2p_dbg(p2p, "Unknown peer Listen channel: "
1507                                 "country=%c%c(0x%02x) reg_class=%u channel=%u",
1508                                 msg->listen_channel[0],
1509                                 msg->listen_channel[1],
1510                                 msg->listen_channel[2],
1511                                 msg->listen_channel[3],
1512                                 msg->listen_channel[4]);
1513                 } else {
1514                         p2p_dbg(p2p, "Update peer " MACSTR
1515                                 " Listen channel: %u -> %u MHz",
1516                                 MAC2STR(dev->info.p2p_device_addr),
1517                                 dev->listen_freq, freq);
1518                         dev->listen_freq = freq;
1519                 }
1520         }
1521
1522         if (msg->wfd_subelems) {
1523                 wpabuf_free(dev->info.wfd_subelems);
1524                 dev->info.wfd_subelems = wpabuf_dup(msg->wfd_subelems);
1525         }
1526
1527         if (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
1528                 dev->flags &= ~P2P_DEV_PROBE_REQ_ONLY;
1529                 p2p_dbg(p2p, "Completed device entry based on data from GO Negotiation Request");
1530         } else {
1531                 p2p_dbg(p2p, "Created device entry based on GO Neg Req: "
1532                         MACSTR " dev_capab=0x%x group_capab=0x%x name='%s' "
1533                         "listen_freq=%d",
1534                         MAC2STR(dev->info.p2p_device_addr),
1535                         dev->info.dev_capab, dev->info.group_capab,
1536                         dev->info.device_name, dev->listen_freq);
1537         }
1538
1539         dev->flags &= ~P2P_DEV_GROUP_CLIENT_ONLY;
1540
1541         if (dev->flags & P2P_DEV_USER_REJECTED) {
1542                 p2p_dbg(p2p, "Do not report rejected device");
1543                 return;
1544         }
1545
1546         p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info,
1547                             !(dev->flags & P2P_DEV_REPORTED_ONCE));
1548         dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
1549 }
1550
1551
1552 void p2p_build_ssid(struct p2p_data *p2p, u8 *ssid, size_t *ssid_len)
1553 {
1554         os_memcpy(ssid, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN);
1555         p2p_random((char *) &ssid[P2P_WILDCARD_SSID_LEN], 2);
1556         os_memcpy(&ssid[P2P_WILDCARD_SSID_LEN + 2],
1557                   p2p->cfg->ssid_postfix, p2p->cfg->ssid_postfix_len);
1558         *ssid_len = P2P_WILDCARD_SSID_LEN + 2 + p2p->cfg->ssid_postfix_len;
1559 }
1560
1561
1562 int p2p_go_params(struct p2p_data *p2p, struct p2p_go_neg_results *params)
1563 {
1564         p2p_build_ssid(p2p, params->ssid, &params->ssid_len);
1565         p2p_random(params->passphrase, 8);
1566         return 0;
1567 }
1568
1569
1570 void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer)
1571 {
1572         struct p2p_go_neg_results res;
1573         int go = peer->go_state == LOCAL_GO;
1574         struct p2p_channels intersection;
1575         int freqs;
1576         size_t i, j;
1577
1578         p2p_dbg(p2p, "GO Negotiation with " MACSTR " completed (%s will be GO)",
1579                 MAC2STR(peer->info.p2p_device_addr), go ? "local end" : "peer");
1580
1581         os_memset(&res, 0, sizeof(res));
1582         res.role_go = go;
1583         os_memcpy(res.peer_device_addr, peer->info.p2p_device_addr, ETH_ALEN);
1584         os_memcpy(res.peer_interface_addr, peer->intended_addr, ETH_ALEN);
1585         res.wps_method = peer->wps_method;
1586         if (peer->flags & P2P_DEV_PREFER_PERSISTENT_GROUP) {
1587                 if (peer->flags & P2P_DEV_PREFER_PERSISTENT_RECONN)
1588                         res.persistent_group = 2;
1589                 else
1590                         res.persistent_group = 1;
1591         }
1592
1593         if (go) {
1594                 /* Setup AP mode for WPS provisioning */
1595                 res.freq = p2p_channel_to_freq(p2p->op_reg_class,
1596                                                p2p->op_channel);
1597                 os_memcpy(res.ssid, p2p->ssid, p2p->ssid_len);
1598                 res.ssid_len = p2p->ssid_len;
1599                 p2p_random(res.passphrase, 8);
1600         } else {
1601                 res.freq = peer->oper_freq;
1602                 if (p2p->ssid_len) {
1603                         os_memcpy(res.ssid, p2p->ssid, p2p->ssid_len);
1604                         res.ssid_len = p2p->ssid_len;
1605                 }
1606         }
1607
1608         p2p_channels_dump(p2p, "own channels", &p2p->channels);
1609         p2p_channels_dump(p2p, "peer channels", &peer->channels);
1610         p2p_channels_intersect(&p2p->channels, &peer->channels,
1611                                &intersection);
1612         if (go) {
1613                 p2p_channels_remove_freqs(&intersection, &p2p->no_go_freq);
1614                 p2p_channels_dump(p2p, "intersection after no-GO removal",
1615                                   &intersection);
1616         }
1617         freqs = 0;
1618         for (i = 0; i < intersection.reg_classes; i++) {
1619                 struct p2p_reg_class *c = &intersection.reg_class[i];
1620                 if (freqs + 1 == P2P_MAX_CHANNELS)
1621                         break;
1622                 for (j = 0; j < c->channels; j++) {
1623                         int freq;
1624                         if (freqs + 1 == P2P_MAX_CHANNELS)
1625                                 break;
1626                         freq = p2p_channel_to_freq(c->reg_class, c->channel[j]);
1627                         if (freq < 0)
1628                                 continue;
1629                         res.freq_list[freqs++] = freq;
1630                 }
1631         }
1632
1633         res.peer_config_timeout = go ? peer->client_timeout : peer->go_timeout;
1634
1635         p2p_clear_timeout(p2p);
1636         p2p->ssid_set = 0;
1637         peer->go_neg_req_sent = 0;
1638         peer->wps_method = WPS_NOT_READY;
1639         peer->oob_pw_id = 0;
1640
1641         p2p_set_state(p2p, P2P_PROVISIONING);
1642         p2p->cfg->go_neg_completed(p2p->cfg->cb_ctx, &res);
1643 }
1644
1645
1646 static void p2p_rx_p2p_action(struct p2p_data *p2p, const u8 *sa,
1647                               const u8 *data, size_t len, int rx_freq)
1648 {
1649         p2p_dbg(p2p, "RX P2P Public Action from " MACSTR, MAC2STR(sa));
1650         wpa_hexdump(MSG_MSGDUMP, "P2P: P2P Public Action contents", data, len);
1651
1652         if (len < 1)
1653                 return;
1654
1655         switch (data[0]) {
1656         case P2P_GO_NEG_REQ:
1657                 p2p_process_go_neg_req(p2p, sa, data + 1, len - 1, rx_freq);
1658                 break;
1659         case P2P_GO_NEG_RESP:
1660                 p2p_process_go_neg_resp(p2p, sa, data + 1, len - 1, rx_freq);
1661                 break;
1662         case P2P_GO_NEG_CONF:
1663                 p2p_process_go_neg_conf(p2p, sa, data + 1, len - 1);
1664                 break;
1665         case P2P_INVITATION_REQ:
1666                 p2p_process_invitation_req(p2p, sa, data + 1, len - 1,
1667                                            rx_freq);
1668                 break;
1669         case P2P_INVITATION_RESP:
1670                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
1671                 p2p_process_invitation_resp(p2p, sa, data + 1, len - 1);
1672                 break;
1673         case P2P_PROV_DISC_REQ:
1674                 p2p_process_prov_disc_req(p2p, sa, data + 1, len - 1, rx_freq);
1675                 break;
1676         case P2P_PROV_DISC_RESP:
1677                 p2p_process_prov_disc_resp(p2p, sa, data + 1, len - 1);
1678                 break;
1679         case P2P_DEV_DISC_REQ:
1680                 p2p_process_dev_disc_req(p2p, sa, data + 1, len - 1, rx_freq);
1681                 break;
1682         case P2P_DEV_DISC_RESP:
1683                 p2p_process_dev_disc_resp(p2p, sa, data + 1, len - 1);
1684                 break;
1685         default:
1686                 p2p_dbg(p2p, "Unsupported P2P Public Action frame type %d",
1687                         data[0]);
1688                 break;
1689         }
1690 }
1691
1692
1693 static void p2p_rx_action_public(struct p2p_data *p2p, const u8 *da,
1694                                  const u8 *sa, const u8 *bssid, const u8 *data,
1695                                  size_t len, int freq)
1696 {
1697         if (len < 1)
1698                 return;
1699
1700         switch (data[0]) {
1701         case WLAN_PA_VENDOR_SPECIFIC:
1702                 data++;
1703                 len--;
1704                 if (len < 4)
1705                         return;
1706                 if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
1707                         return;
1708
1709                 data += 4;
1710                 len -= 4;
1711
1712                 p2p_rx_p2p_action(p2p, sa, data, len, freq);
1713                 break;
1714         case WLAN_PA_GAS_INITIAL_REQ:
1715                 p2p_rx_gas_initial_req(p2p, sa, data + 1, len - 1, freq);
1716                 break;
1717         case WLAN_PA_GAS_INITIAL_RESP:
1718                 p2p_rx_gas_initial_resp(p2p, sa, data + 1, len - 1, freq);
1719                 break;
1720         case WLAN_PA_GAS_COMEBACK_REQ:
1721                 p2p_rx_gas_comeback_req(p2p, sa, data + 1, len - 1, freq);
1722                 break;
1723         case WLAN_PA_GAS_COMEBACK_RESP:
1724                 p2p_rx_gas_comeback_resp(p2p, sa, data + 1, len - 1, freq);
1725                 break;
1726         }
1727 }
1728
1729
1730 void p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa,
1731                    const u8 *bssid, u8 category,
1732                    const u8 *data, size_t len, int freq)
1733 {
1734         if (category == WLAN_ACTION_PUBLIC) {
1735                 p2p_rx_action_public(p2p, da, sa, bssid, data, len, freq);
1736                 return;
1737         }
1738
1739         if (category != WLAN_ACTION_VENDOR_SPECIFIC)
1740                 return;
1741
1742         if (len < 4)
1743                 return;
1744
1745         if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
1746                 return;
1747         data += 4;
1748         len -= 4;
1749
1750         /* P2P action frame */
1751         p2p_dbg(p2p, "RX P2P Action from " MACSTR, MAC2STR(sa));
1752         wpa_hexdump(MSG_MSGDUMP, "P2P: P2P Action contents", data, len);
1753
1754         if (len < 1)
1755                 return;
1756         switch (data[0]) {
1757         case P2P_NOA:
1758                 p2p_dbg(p2p, "Received P2P Action - Notice of Absence");
1759                 /* TODO */
1760                 break;
1761         case P2P_PRESENCE_REQ:
1762                 p2p_process_presence_req(p2p, da, sa, data + 1, len - 1, freq);
1763                 break;
1764         case P2P_PRESENCE_RESP:
1765                 p2p_process_presence_resp(p2p, da, sa, data + 1, len - 1);
1766                 break;
1767         case P2P_GO_DISC_REQ:
1768                 p2p_process_go_disc_req(p2p, da, sa, data + 1, len - 1, freq);
1769                 break;
1770         default:
1771                 p2p_dbg(p2p, "Received P2P Action - unknown type %u", data[0]);
1772                 break;
1773         }
1774 }
1775
1776
1777 static void p2p_go_neg_start(void *eloop_ctx, void *timeout_ctx)
1778 {
1779         struct p2p_data *p2p = eloop_ctx;
1780         if (p2p->go_neg_peer == NULL)
1781                 return;
1782         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1783         p2p->go_neg_peer->status = P2P_SC_SUCCESS;
1784         p2p_connect_send(p2p, p2p->go_neg_peer);
1785 }
1786
1787
1788 static void p2p_invite_start(void *eloop_ctx, void *timeout_ctx)
1789 {
1790         struct p2p_data *p2p = eloop_ctx;
1791         if (p2p->invite_peer == NULL)
1792                 return;
1793         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1794         p2p_invite_send(p2p, p2p->invite_peer, p2p->invite_go_dev_addr,
1795                         p2p->invite_dev_pw_id);
1796 }
1797
1798
1799 static void p2p_add_dev_from_probe_req(struct p2p_data *p2p, const u8 *addr,
1800                                        const u8 *ie, size_t ie_len)
1801 {
1802         struct p2p_message msg;
1803         struct p2p_device *dev;
1804
1805         os_memset(&msg, 0, sizeof(msg));
1806         if (p2p_parse_ies(ie, ie_len, &msg) < 0 || msg.p2p_attributes == NULL)
1807         {
1808                 p2p_parse_free(&msg);
1809                 return; /* not a P2P probe */
1810         }
1811
1812         if (msg.ssid == NULL || msg.ssid[1] != P2P_WILDCARD_SSID_LEN ||
1813             os_memcmp(msg.ssid + 2, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN)
1814             != 0) {
1815                 /* The Probe Request is not part of P2P Device Discovery. It is
1816                  * not known whether the source address of the frame is the P2P
1817                  * Device Address or P2P Interface Address. Do not add a new
1818                  * peer entry based on this frames.
1819                  */
1820                 p2p_parse_free(&msg);
1821                 return;
1822         }
1823
1824         dev = p2p_get_device(p2p, addr);
1825         if (dev) {
1826                 if (dev->country[0] == 0 && msg.listen_channel)
1827                         os_memcpy(dev->country, msg.listen_channel, 3);
1828                 os_get_reltime(&dev->last_seen);
1829                 p2p_parse_free(&msg);
1830                 return; /* already known */
1831         }
1832
1833         dev = p2p_create_device(p2p, addr);
1834         if (dev == NULL) {
1835                 p2p_parse_free(&msg);
1836                 return;
1837         }
1838
1839         os_get_reltime(&dev->last_seen);
1840         dev->flags |= P2P_DEV_PROBE_REQ_ONLY;
1841
1842         if (msg.listen_channel) {
1843                 os_memcpy(dev->country, msg.listen_channel, 3);
1844                 dev->listen_freq = p2p_channel_to_freq(msg.listen_channel[3],
1845                                                        msg.listen_channel[4]);
1846         }
1847
1848         p2p_copy_wps_info(p2p, dev, 1, &msg);
1849
1850         if (msg.wfd_subelems) {
1851                 wpabuf_free(dev->info.wfd_subelems);
1852                 dev->info.wfd_subelems = wpabuf_dup(msg.wfd_subelems);
1853         }
1854
1855         p2p_parse_free(&msg);
1856
1857         p2p_dbg(p2p, "Created device entry based on Probe Req: " MACSTR
1858                 " dev_capab=0x%x group_capab=0x%x name='%s' listen_freq=%d",
1859                 MAC2STR(dev->info.p2p_device_addr), dev->info.dev_capab,
1860                 dev->info.group_capab, dev->info.device_name,
1861                 dev->listen_freq);
1862 }
1863
1864
1865 struct p2p_device * p2p_add_dev_from_go_neg_req(struct p2p_data *p2p,
1866                                                 const u8 *addr,
1867                                                 struct p2p_message *msg)
1868 {
1869         struct p2p_device *dev;
1870
1871         dev = p2p_get_device(p2p, addr);
1872         if (dev) {
1873                 os_get_reltime(&dev->last_seen);
1874                 return dev; /* already known */
1875         }
1876
1877         dev = p2p_create_device(p2p, addr);
1878         if (dev == NULL)
1879                 return NULL;
1880
1881         p2p_add_dev_info(p2p, addr, dev, msg);
1882
1883         return dev;
1884 }
1885
1886
1887 static int dev_type_match(const u8 *dev_type, const u8 *req_dev_type)
1888 {
1889         if (os_memcmp(dev_type, req_dev_type, WPS_DEV_TYPE_LEN) == 0)
1890                 return 1;
1891         if (os_memcmp(dev_type, req_dev_type, 2) == 0 &&
1892             WPA_GET_BE32(&req_dev_type[2]) == 0 &&
1893             WPA_GET_BE16(&req_dev_type[6]) == 0)
1894                 return 1; /* Category match with wildcard OUI/sub-category */
1895         return 0;
1896 }
1897
1898
1899 int dev_type_list_match(const u8 *dev_type, const u8 *req_dev_type[],
1900                         size_t num_req_dev_type)
1901 {
1902         size_t i;
1903         for (i = 0; i < num_req_dev_type; i++) {
1904                 if (dev_type_match(dev_type, req_dev_type[i]))
1905                         return 1;
1906         }
1907         return 0;
1908 }
1909
1910
1911 /**
1912  * p2p_match_dev_type - Match local device type with requested type
1913  * @p2p: P2P module context from p2p_init()
1914  * @wps: WPS TLVs from Probe Request frame (concatenated WPS IEs)
1915  * Returns: 1 on match, 0 on mismatch
1916  *
1917  * This function can be used to match the Requested Device Type attribute in
1918  * WPS IE with the local device types for deciding whether to reply to a Probe
1919  * Request frame.
1920  */
1921 int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps)
1922 {
1923         struct wps_parse_attr attr;
1924         size_t i;
1925
1926         if (wps_parse_msg(wps, &attr))
1927                 return 1; /* assume no Requested Device Type attributes */
1928
1929         if (attr.num_req_dev_type == 0)
1930                 return 1; /* no Requested Device Type attributes -> match */
1931
1932         if (dev_type_list_match(p2p->cfg->pri_dev_type, attr.req_dev_type,
1933                                 attr.num_req_dev_type))
1934                 return 1; /* Own Primary Device Type matches */
1935
1936         for (i = 0; i < p2p->cfg->num_sec_dev_types; i++)
1937                 if (dev_type_list_match(p2p->cfg->sec_dev_type[i],
1938                                         attr.req_dev_type,
1939                                         attr.num_req_dev_type))
1940                 return 1; /* Own Secondary Device Type matches */
1941
1942         /* No matching device type found */
1943         return 0;
1944 }
1945
1946
1947 struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p)
1948 {
1949         struct wpabuf *buf;
1950         u8 *len;
1951         int pw_id = -1;
1952         size_t extra = 0;
1953
1954 #ifdef CONFIG_WIFI_DISPLAY
1955         if (p2p->wfd_ie_probe_resp)
1956                 extra = wpabuf_len(p2p->wfd_ie_probe_resp);
1957 #endif /* CONFIG_WIFI_DISPLAY */
1958
1959         buf = wpabuf_alloc(1000 + extra);
1960         if (buf == NULL)
1961                 return NULL;
1962
1963         if (p2p->go_neg_peer) {
1964                 /* Advertise immediate availability of WPS credential */
1965                 pw_id = p2p_wps_method_pw_id(p2p->go_neg_peer->wps_method);
1966         }
1967
1968         if (p2p_build_wps_ie(p2p, buf, pw_id, 1) < 0) {
1969                 p2p_dbg(p2p, "Failed to build WPS IE for Probe Response");
1970                 wpabuf_free(buf);
1971                 return NULL;
1972         }
1973
1974 #ifdef CONFIG_WIFI_DISPLAY
1975         if (p2p->wfd_ie_probe_resp)
1976                 wpabuf_put_buf(buf, p2p->wfd_ie_probe_resp);
1977 #endif /* CONFIG_WIFI_DISPLAY */
1978
1979         /* P2P IE */
1980         len = p2p_buf_add_ie_hdr(buf);
1981         p2p_buf_add_capability(buf, p2p->dev_capab &
1982                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
1983         if (p2p->ext_listen_interval)
1984                 p2p_buf_add_ext_listen_timing(buf, p2p->ext_listen_period,
1985                                               p2p->ext_listen_interval);
1986         p2p_buf_add_device_info(buf, p2p, NULL);
1987         p2p_buf_update_ie_hdr(buf, len);
1988
1989         return buf;
1990 }
1991
1992
1993 static enum p2p_probe_req_status
1994 p2p_reply_probe(struct p2p_data *p2p, const u8 *addr, const u8 *dst,
1995                 const u8 *bssid, const u8 *ie, size_t ie_len)
1996 {
1997         struct ieee802_11_elems elems;
1998         struct wpabuf *buf;
1999         struct ieee80211_mgmt *resp;
2000         struct p2p_message msg;
2001         struct wpabuf *ies;
2002
2003         if (!p2p->in_listen || !p2p->drv_in_listen) {
2004                 /* not in Listen state - ignore Probe Request */
2005                 p2p_dbg(p2p, "Not in Listen state (in_listen=%d drv_in_listen=%d) - ignore Probe Request",
2006                         p2p->in_listen, p2p->drv_in_listen);
2007                 return P2P_PREQ_NOT_LISTEN;
2008         }
2009
2010         if (ieee802_11_parse_elems((u8 *) ie, ie_len, &elems, 0) ==
2011             ParseFailed) {
2012                 /* Ignore invalid Probe Request frames */
2013                 p2p_dbg(p2p, "Could not parse Probe Request frame - ignore it");
2014                 return P2P_PREQ_MALFORMED;
2015         }
2016
2017         if (elems.p2p == NULL) {
2018                 /* not a P2P probe - ignore it */
2019                 p2p_dbg(p2p, "Not a P2P probe - ignore it");
2020                 return P2P_PREQ_NOT_P2P;
2021         }
2022
2023         if (dst && !is_broadcast_ether_addr(dst) &&
2024             os_memcmp(dst, p2p->cfg->dev_addr, ETH_ALEN) != 0) {
2025                 /* Not sent to the broadcast address or our P2P Device Address
2026                  */
2027                 p2p_dbg(p2p, "Probe Req DA " MACSTR " not ours - ignore it",
2028                         MAC2STR(dst));
2029                 return P2P_PREQ_NOT_PROCESSED;
2030         }
2031
2032         if (bssid && !is_broadcast_ether_addr(bssid)) {
2033                 /* Not sent to the Wildcard BSSID */
2034                 p2p_dbg(p2p, "Probe Req BSSID " MACSTR " not wildcard - ignore it",
2035                         MAC2STR(bssid));
2036                 return P2P_PREQ_NOT_PROCESSED;
2037         }
2038
2039         if (elems.ssid == NULL || elems.ssid_len != P2P_WILDCARD_SSID_LEN ||
2040             os_memcmp(elems.ssid, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN) !=
2041             0) {
2042                 /* not using P2P Wildcard SSID - ignore */
2043                 p2p_dbg(p2p, "Probe Req not using P2P Wildcard SSID - ignore it");
2044                 return P2P_PREQ_NOT_PROCESSED;
2045         }
2046
2047         if (supp_rates_11b_only(&elems)) {
2048                 /* Indicates support for 11b rates only */
2049                 p2p_dbg(p2p, "Probe Req with 11b rates only supported - ignore it");
2050                 return P2P_PREQ_NOT_P2P;
2051         }
2052
2053         os_memset(&msg, 0, sizeof(msg));
2054         if (p2p_parse_ies(ie, ie_len, &msg) < 0) {
2055                 /* Could not parse P2P attributes */
2056                 p2p_dbg(p2p, "Could not parse P2P attributes in Probe Req - ignore it");
2057                 return P2P_PREQ_NOT_P2P;
2058         }
2059
2060         if (msg.device_id &&
2061             os_memcmp(msg.device_id, p2p->cfg->dev_addr, ETH_ALEN) != 0) {
2062                 /* Device ID did not match */
2063                 p2p_dbg(p2p, "Probe Req requested Device ID " MACSTR " did not match - ignore it",
2064                         MAC2STR(msg.device_id));
2065                 p2p_parse_free(&msg);
2066                 return P2P_PREQ_NOT_PROCESSED;
2067         }
2068
2069         /* Check Requested Device Type match */
2070         if (msg.wps_attributes &&
2071             !p2p_match_dev_type(p2p, msg.wps_attributes)) {
2072                 /* No match with Requested Device Type */
2073                 p2p_dbg(p2p, "Probe Req requestred Device Type did not match - ignore it");
2074                 p2p_parse_free(&msg);
2075                 return P2P_PREQ_NOT_PROCESSED;
2076         }
2077         p2p_parse_free(&msg);
2078
2079         if (!p2p->cfg->send_probe_resp) {
2080                 /* Response generated elsewhere */
2081                 p2p_dbg(p2p, "Probe Resp generated elsewhere - do not generate additional response");
2082                 return P2P_PREQ_NOT_PROCESSED;
2083         }
2084
2085         p2p_dbg(p2p, "Reply to P2P Probe Request in Listen state");
2086
2087         /*
2088          * We do not really have a specific BSS that this frame is advertising,
2089          * so build a frame that has some information in valid format. This is
2090          * really only used for discovery purposes, not to learn exact BSS
2091          * parameters.
2092          */
2093         ies = p2p_build_probe_resp_ies(p2p);
2094         if (ies == NULL)
2095                 return P2P_PREQ_NOT_PROCESSED;
2096
2097         buf = wpabuf_alloc(200 + wpabuf_len(ies));
2098         if (buf == NULL) {
2099                 wpabuf_free(ies);
2100                 return P2P_PREQ_NOT_PROCESSED;
2101         }
2102
2103         resp = NULL;
2104         resp = wpabuf_put(buf, resp->u.probe_resp.variable - (u8 *) resp);
2105
2106         resp->frame_control = host_to_le16((WLAN_FC_TYPE_MGMT << 2) |
2107                                            (WLAN_FC_STYPE_PROBE_RESP << 4));
2108         os_memcpy(resp->da, addr, ETH_ALEN);
2109         os_memcpy(resp->sa, p2p->cfg->dev_addr, ETH_ALEN);
2110         os_memcpy(resp->bssid, p2p->cfg->dev_addr, ETH_ALEN);
2111         resp->u.probe_resp.beacon_int = host_to_le16(100);
2112         /* hardware or low-level driver will setup seq_ctrl and timestamp */
2113         resp->u.probe_resp.capab_info =
2114                 host_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE |
2115                              WLAN_CAPABILITY_PRIVACY |
2116                              WLAN_CAPABILITY_SHORT_SLOT_TIME);
2117
2118         wpabuf_put_u8(buf, WLAN_EID_SSID);
2119         wpabuf_put_u8(buf, P2P_WILDCARD_SSID_LEN);
2120         wpabuf_put_data(buf, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN);
2121
2122         wpabuf_put_u8(buf, WLAN_EID_SUPP_RATES);
2123         wpabuf_put_u8(buf, 8);
2124         wpabuf_put_u8(buf, (60 / 5) | 0x80);
2125         wpabuf_put_u8(buf, 90 / 5);
2126         wpabuf_put_u8(buf, (120 / 5) | 0x80);
2127         wpabuf_put_u8(buf, 180 / 5);
2128         wpabuf_put_u8(buf, (240 / 5) | 0x80);
2129         wpabuf_put_u8(buf, 360 / 5);
2130         wpabuf_put_u8(buf, 480 / 5);
2131         wpabuf_put_u8(buf, 540 / 5);
2132
2133         wpabuf_put_u8(buf, WLAN_EID_DS_PARAMS);
2134         wpabuf_put_u8(buf, 1);
2135         wpabuf_put_u8(buf, p2p->cfg->channel);
2136
2137         wpabuf_put_buf(buf, ies);
2138         wpabuf_free(ies);
2139
2140         p2p->cfg->send_probe_resp(p2p->cfg->cb_ctx, buf);
2141
2142         wpabuf_free(buf);
2143
2144         return P2P_PREQ_NOT_PROCESSED;
2145 }
2146
2147
2148 enum p2p_probe_req_status
2149 p2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *dst,
2150                  const u8 *bssid, const u8 *ie, size_t ie_len)
2151 {
2152         enum p2p_probe_req_status res;
2153
2154         p2p_add_dev_from_probe_req(p2p, addr, ie, ie_len);
2155
2156         res = p2p_reply_probe(p2p, addr, dst, bssid, ie, ie_len);
2157
2158         if ((p2p->state == P2P_CONNECT || p2p->state == P2P_CONNECT_LISTEN) &&
2159             p2p->go_neg_peer &&
2160             os_memcmp(addr, p2p->go_neg_peer->info.p2p_device_addr, ETH_ALEN)
2161             == 0 &&
2162             !(p2p->go_neg_peer->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM)) {
2163                 /* Received a Probe Request from GO Negotiation peer */
2164                 p2p_dbg(p2p, "Found GO Negotiation peer - try to start GO negotiation from timeout");
2165                 eloop_cancel_timeout(p2p_go_neg_start, p2p, NULL);
2166                 eloop_register_timeout(0, 0, p2p_go_neg_start, p2p, NULL);
2167                 return P2P_PREQ_PROCESSED;
2168         }
2169
2170         if ((p2p->state == P2P_INVITE || p2p->state == P2P_INVITE_LISTEN) &&
2171             p2p->invite_peer &&
2172             (p2p->invite_peer->flags & P2P_DEV_WAIT_INV_REQ_ACK) &&
2173             os_memcmp(addr, p2p->invite_peer->info.p2p_device_addr, ETH_ALEN)
2174             == 0) {
2175                 /* Received a Probe Request from Invite peer */
2176                 p2p_dbg(p2p, "Found Invite peer - try to start Invite from timeout");
2177                 eloop_cancel_timeout(p2p_invite_start, p2p, NULL);
2178                 eloop_register_timeout(0, 0, p2p_invite_start, p2p, NULL);
2179                 return P2P_PREQ_PROCESSED;
2180         }
2181
2182         return res;
2183 }
2184
2185
2186 static int p2p_assoc_req_ie_wlan_ap(struct p2p_data *p2p, const u8 *bssid,
2187                                     u8 *buf, size_t len, struct wpabuf *p2p_ie)
2188 {
2189         struct wpabuf *tmp;
2190         u8 *lpos;
2191         size_t tmplen;
2192         int res;
2193         u8 group_capab;
2194
2195         if (p2p_ie == NULL)
2196                 return 0; /* WLAN AP is not a P2P manager */
2197
2198         /*
2199          * (Re)Association Request - P2P IE
2200          * P2P Capability attribute (shall be present)
2201          * P2P Interface attribute (present if concurrent device and
2202          *      P2P Management is enabled)
2203          */
2204         tmp = wpabuf_alloc(200);
2205         if (tmp == NULL)
2206                 return -1;
2207
2208         lpos = p2p_buf_add_ie_hdr(tmp);
2209         group_capab = 0;
2210         if (p2p->num_groups > 0) {
2211                 group_capab |= P2P_GROUP_CAPAB_GROUP_OWNER;
2212                 if ((p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER) &&
2213                     (p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED) &&
2214                     p2p->cross_connect)
2215                         group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
2216         }
2217         p2p_buf_add_capability(tmp, p2p->dev_capab, group_capab);
2218         if ((p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER) &&
2219             (p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED))
2220                 p2p_buf_add_p2p_interface(tmp, p2p);
2221         p2p_buf_update_ie_hdr(tmp, lpos);
2222
2223         tmplen = wpabuf_len(tmp);
2224         if (tmplen > len)
2225                 res = -1;
2226         else {
2227                 os_memcpy(buf, wpabuf_head(tmp), tmplen);
2228                 res = tmplen;
2229         }
2230         wpabuf_free(tmp);
2231
2232         return res;
2233 }
2234
2235
2236 int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf,
2237                      size_t len, int p2p_group, struct wpabuf *p2p_ie)
2238 {
2239         struct wpabuf *tmp;
2240         u8 *lpos;
2241         struct p2p_device *peer;
2242         size_t tmplen;
2243         int res;
2244         size_t extra = 0;
2245
2246         if (!p2p_group)
2247                 return p2p_assoc_req_ie_wlan_ap(p2p, bssid, buf, len, p2p_ie);
2248
2249 #ifdef CONFIG_WIFI_DISPLAY
2250         if (p2p->wfd_ie_assoc_req)
2251                 extra = wpabuf_len(p2p->wfd_ie_assoc_req);
2252 #endif /* CONFIG_WIFI_DISPLAY */
2253
2254         /*
2255          * (Re)Association Request - P2P IE
2256          * P2P Capability attribute (shall be present)
2257          * Extended Listen Timing (may be present)
2258          * P2P Device Info attribute (shall be present)
2259          */
2260         tmp = wpabuf_alloc(200 + extra);
2261         if (tmp == NULL)
2262                 return -1;
2263
2264 #ifdef CONFIG_WIFI_DISPLAY
2265         if (p2p->wfd_ie_assoc_req)
2266                 wpabuf_put_buf(tmp, p2p->wfd_ie_assoc_req);
2267 #endif /* CONFIG_WIFI_DISPLAY */
2268
2269         peer = bssid ? p2p_get_device(p2p, bssid) : NULL;
2270
2271         lpos = p2p_buf_add_ie_hdr(tmp);
2272         p2p_buf_add_capability(tmp, p2p->dev_capab, 0);
2273         if (p2p->ext_listen_interval)
2274                 p2p_buf_add_ext_listen_timing(tmp, p2p->ext_listen_period,
2275                                               p2p->ext_listen_interval);
2276         p2p_buf_add_device_info(tmp, p2p, peer);
2277         p2p_buf_update_ie_hdr(tmp, lpos);
2278
2279         tmplen = wpabuf_len(tmp);
2280         if (tmplen > len)
2281                 res = -1;
2282         else {
2283                 os_memcpy(buf, wpabuf_head(tmp), tmplen);
2284                 res = tmplen;
2285         }
2286         wpabuf_free(tmp);
2287
2288         return res;
2289 }
2290
2291
2292 int p2p_scan_result_text(const u8 *ies, size_t ies_len, char *buf, char *end)
2293 {
2294         struct wpabuf *p2p_ie;
2295         int ret;
2296
2297         p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len, P2P_IE_VENDOR_TYPE);
2298         if (p2p_ie == NULL)
2299                 return 0;
2300
2301         ret = p2p_attr_text(p2p_ie, buf, end);
2302         wpabuf_free(p2p_ie);
2303         return ret;
2304 }
2305
2306
2307 int p2p_parse_dev_addr_in_p2p_ie(struct wpabuf *p2p_ie, u8 *dev_addr)
2308 {
2309         struct p2p_message msg;
2310
2311         os_memset(&msg, 0, sizeof(msg));
2312         if (p2p_parse_p2p_ie(p2p_ie, &msg))
2313                 return -1;
2314
2315         if (msg.p2p_device_addr) {
2316                 os_memcpy(dev_addr, msg.p2p_device_addr, ETH_ALEN);
2317                 return 0;
2318         } else if (msg.device_id) {
2319                 os_memcpy(dev_addr, msg.device_id, ETH_ALEN);
2320                 return 0;
2321         }
2322         return -1;
2323 }
2324
2325
2326 int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr)
2327 {
2328         struct wpabuf *p2p_ie;
2329         int ret;
2330
2331         p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len,
2332                                              P2P_IE_VENDOR_TYPE);
2333         if (p2p_ie == NULL)
2334                 return -1;
2335         ret = p2p_parse_dev_addr_in_p2p_ie(p2p_ie, dev_addr);
2336         wpabuf_free(p2p_ie);
2337         return ret;
2338 }
2339
2340
2341 static void p2p_clear_go_neg(struct p2p_data *p2p)
2342 {
2343         p2p->go_neg_peer = NULL;
2344         p2p_clear_timeout(p2p);
2345         p2p_set_state(p2p, P2P_IDLE);
2346 }
2347
2348
2349 void p2p_wps_success_cb(struct p2p_data *p2p, const u8 *mac_addr)
2350 {
2351         if (p2p->go_neg_peer == NULL) {
2352                 p2p_dbg(p2p, "No pending Group Formation - ignore WPS registration success notification");
2353                 return; /* No pending Group Formation */
2354         }
2355
2356         if (os_memcmp(mac_addr, p2p->go_neg_peer->intended_addr, ETH_ALEN) !=
2357             0) {
2358                 p2p_dbg(p2p, "Ignore WPS registration success notification for "
2359                         MACSTR " (GO Negotiation peer " MACSTR ")",
2360                         MAC2STR(mac_addr),
2361                         MAC2STR(p2p->go_neg_peer->intended_addr));
2362                 return; /* Ignore unexpected peer address */
2363         }
2364
2365         p2p_dbg(p2p, "Group Formation completed successfully with " MACSTR,
2366                 MAC2STR(mac_addr));
2367
2368         p2p_clear_go_neg(p2p);
2369 }
2370
2371
2372 void p2p_group_formation_failed(struct p2p_data *p2p)
2373 {
2374         if (p2p->go_neg_peer == NULL) {
2375                 p2p_dbg(p2p, "No pending Group Formation - ignore group formation failure notification");
2376                 return; /* No pending Group Formation */
2377         }
2378
2379         p2p_dbg(p2p, "Group Formation failed with " MACSTR,
2380                 MAC2STR(p2p->go_neg_peer->intended_addr));
2381
2382         p2p_clear_go_neg(p2p);
2383 }
2384
2385
2386 struct p2p_data * p2p_init(const struct p2p_config *cfg)
2387 {
2388         struct p2p_data *p2p;
2389
2390         if (cfg->max_peers < 1)
2391                 return NULL;
2392
2393         p2p = os_zalloc(sizeof(*p2p) + sizeof(*cfg));
2394         if (p2p == NULL)
2395                 return NULL;
2396         p2p->cfg = (struct p2p_config *) (p2p + 1);
2397         os_memcpy(p2p->cfg, cfg, sizeof(*cfg));
2398         if (cfg->dev_name)
2399                 p2p->cfg->dev_name = os_strdup(cfg->dev_name);
2400         if (cfg->manufacturer)
2401                 p2p->cfg->manufacturer = os_strdup(cfg->manufacturer);
2402         if (cfg->model_name)
2403                 p2p->cfg->model_name = os_strdup(cfg->model_name);
2404         if (cfg->model_number)
2405                 p2p->cfg->model_number = os_strdup(cfg->model_number);
2406         if (cfg->serial_number)
2407                 p2p->cfg->serial_number = os_strdup(cfg->serial_number);
2408         if (cfg->pref_chan) {
2409                 p2p->cfg->pref_chan = os_malloc(cfg->num_pref_chan *
2410                                                 sizeof(struct p2p_channel));
2411                 if (p2p->cfg->pref_chan) {
2412                         os_memcpy(p2p->cfg->pref_chan, cfg->pref_chan,
2413                                   cfg->num_pref_chan *
2414                                   sizeof(struct p2p_channel));
2415                 } else
2416                         p2p->cfg->num_pref_chan = 0;
2417         }
2418
2419         p2p->min_disc_int = 1;
2420         p2p->max_disc_int = 3;
2421         p2p->max_disc_tu = -1;
2422
2423         os_get_random(&p2p->next_tie_breaker, 1);
2424         p2p->next_tie_breaker &= 0x01;
2425         if (cfg->sd_request)
2426                 p2p->dev_capab |= P2P_DEV_CAPAB_SERVICE_DISCOVERY;
2427         p2p->dev_capab |= P2P_DEV_CAPAB_INVITATION_PROCEDURE;
2428         if (cfg->concurrent_operations)
2429                 p2p->dev_capab |= P2P_DEV_CAPAB_CONCURRENT_OPER;
2430         p2p->dev_capab |= P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
2431
2432         dl_list_init(&p2p->devices);
2433
2434         eloop_register_timeout(P2P_PEER_EXPIRATION_INTERVAL, 0,
2435                                p2p_expiration_timeout, p2p, NULL);
2436
2437         p2p->go_timeout = 100;
2438         p2p->client_timeout = 20;
2439         p2p->num_p2p_sd_queries = 0;
2440
2441         p2p_dbg(p2p, "initialized");
2442         p2p_channels_dump(p2p, "channels", &p2p->cfg->channels);
2443         p2p_channels_dump(p2p, "cli_channels", &p2p->cfg->cli_channels);
2444
2445         return p2p;
2446 }
2447
2448
2449 void p2p_deinit(struct p2p_data *p2p)
2450 {
2451 #ifdef CONFIG_WIFI_DISPLAY
2452         wpabuf_free(p2p->wfd_ie_beacon);
2453         wpabuf_free(p2p->wfd_ie_probe_req);
2454         wpabuf_free(p2p->wfd_ie_probe_resp);
2455         wpabuf_free(p2p->wfd_ie_assoc_req);
2456         wpabuf_free(p2p->wfd_ie_invitation);
2457         wpabuf_free(p2p->wfd_ie_prov_disc_req);
2458         wpabuf_free(p2p->wfd_ie_prov_disc_resp);
2459         wpabuf_free(p2p->wfd_ie_go_neg);
2460         wpabuf_free(p2p->wfd_dev_info);
2461         wpabuf_free(p2p->wfd_assoc_bssid);
2462         wpabuf_free(p2p->wfd_coupled_sink_info);
2463 #endif /* CONFIG_WIFI_DISPLAY */
2464
2465         eloop_cancel_timeout(p2p_expiration_timeout, p2p, NULL);
2466         eloop_cancel_timeout(p2p_ext_listen_timeout, p2p, NULL);
2467         eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
2468         eloop_cancel_timeout(p2p_go_neg_start, p2p, NULL);
2469         p2p_flush(p2p);
2470         p2p_free_req_dev_types(p2p);
2471         os_free(p2p->cfg->dev_name);
2472         os_free(p2p->cfg->manufacturer);
2473         os_free(p2p->cfg->model_name);
2474         os_free(p2p->cfg->model_number);
2475         os_free(p2p->cfg->serial_number);
2476         os_free(p2p->cfg->pref_chan);
2477         os_free(p2p->groups);
2478         wpabuf_free(p2p->sd_resp);
2479         os_free(p2p->after_scan_tx);
2480         p2p_remove_wps_vendor_extensions(p2p);
2481         os_free(p2p->no_go_freq.range);
2482         os_free(p2p);
2483 }
2484
2485
2486 void p2p_flush(struct p2p_data *p2p)
2487 {
2488         struct p2p_device *dev, *prev;
2489         p2p_stop_find(p2p);
2490         dl_list_for_each_safe(dev, prev, &p2p->devices, struct p2p_device,
2491                               list) {
2492                 dl_list_del(&dev->list);
2493                 p2p_device_free(p2p, dev);
2494         }
2495         p2p_free_sd_queries(p2p);
2496         os_free(p2p->after_scan_tx);
2497         p2p->after_scan_tx = NULL;
2498 }
2499
2500
2501 int p2p_unauthorize(struct p2p_data *p2p, const u8 *addr)
2502 {
2503         struct p2p_device *dev;
2504
2505         dev = p2p_get_device(p2p, addr);
2506         if (dev == NULL)
2507                 return -1;
2508
2509         p2p_dbg(p2p, "Unauthorizing " MACSTR, MAC2STR(addr));
2510
2511         if (p2p->go_neg_peer == dev)
2512                 p2p->go_neg_peer = NULL;
2513
2514         dev->wps_method = WPS_NOT_READY;
2515         dev->oob_pw_id = 0;
2516         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
2517         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_CONFIRM;
2518
2519         /* Check if after_scan_tx is for this peer. If so free it */
2520         if (p2p->after_scan_tx &&
2521             os_memcmp(addr, p2p->after_scan_tx->dst, ETH_ALEN) == 0) {
2522                 os_free(p2p->after_scan_tx);
2523                 p2p->after_scan_tx = NULL;
2524         }
2525
2526         return 0;
2527 }
2528
2529
2530 int p2p_set_dev_name(struct p2p_data *p2p, const char *dev_name)
2531 {
2532         os_free(p2p->cfg->dev_name);
2533         if (dev_name) {
2534                 p2p->cfg->dev_name = os_strdup(dev_name);
2535                 if (p2p->cfg->dev_name == NULL)
2536                         return -1;
2537         } else
2538                 p2p->cfg->dev_name = NULL;
2539         return 0;
2540 }
2541
2542
2543 int p2p_set_manufacturer(struct p2p_data *p2p, const char *manufacturer)
2544 {
2545         os_free(p2p->cfg->manufacturer);
2546         p2p->cfg->manufacturer = NULL;
2547         if (manufacturer) {
2548                 p2p->cfg->manufacturer = os_strdup(manufacturer);
2549                 if (p2p->cfg->manufacturer == NULL)
2550                         return -1;
2551         }
2552
2553         return 0;
2554 }
2555
2556
2557 int p2p_set_model_name(struct p2p_data *p2p, const char *model_name)
2558 {
2559         os_free(p2p->cfg->model_name);
2560         p2p->cfg->model_name = NULL;
2561         if (model_name) {
2562                 p2p->cfg->model_name = os_strdup(model_name);
2563                 if (p2p->cfg->model_name == NULL)
2564                         return -1;
2565         }
2566
2567         return 0;
2568 }
2569
2570
2571 int p2p_set_model_number(struct p2p_data *p2p, const char *model_number)
2572 {
2573         os_free(p2p->cfg->model_number);
2574         p2p->cfg->model_number = NULL;
2575         if (model_number) {
2576                 p2p->cfg->model_number = os_strdup(model_number);
2577                 if (p2p->cfg->model_number == NULL)
2578                         return -1;
2579         }
2580
2581         return 0;
2582 }
2583
2584
2585 int p2p_set_serial_number(struct p2p_data *p2p, const char *serial_number)
2586 {
2587         os_free(p2p->cfg->serial_number);
2588         p2p->cfg->serial_number = NULL;
2589         if (serial_number) {
2590                 p2p->cfg->serial_number = os_strdup(serial_number);
2591                 if (p2p->cfg->serial_number == NULL)
2592                         return -1;
2593         }
2594
2595         return 0;
2596 }
2597
2598
2599 void p2p_set_config_methods(struct p2p_data *p2p, u16 config_methods)
2600 {
2601         p2p->cfg->config_methods = config_methods;
2602 }
2603
2604
2605 void p2p_set_uuid(struct p2p_data *p2p, const u8 *uuid)
2606 {
2607         os_memcpy(p2p->cfg->uuid, uuid, 16);
2608 }
2609
2610
2611 int p2p_set_pri_dev_type(struct p2p_data *p2p, const u8 *pri_dev_type)
2612 {
2613         os_memcpy(p2p->cfg->pri_dev_type, pri_dev_type, 8);
2614         return 0;
2615 }
2616
2617
2618 int p2p_set_sec_dev_types(struct p2p_data *p2p, const u8 dev_types[][8],
2619                           size_t num_dev_types)
2620 {
2621         if (num_dev_types > P2P_SEC_DEVICE_TYPES)
2622                 num_dev_types = P2P_SEC_DEVICE_TYPES;
2623         p2p->cfg->num_sec_dev_types = num_dev_types;
2624         os_memcpy(p2p->cfg->sec_dev_type, dev_types, num_dev_types * 8);
2625         return 0;
2626 }
2627
2628
2629 void p2p_remove_wps_vendor_extensions(struct p2p_data *p2p)
2630 {
2631         int i;
2632
2633         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
2634                 wpabuf_free(p2p->wps_vendor_ext[i]);
2635                 p2p->wps_vendor_ext[i] = NULL;
2636         }
2637 }
2638
2639
2640 int p2p_add_wps_vendor_extension(struct p2p_data *p2p,
2641                                  const struct wpabuf *vendor_ext)
2642 {
2643         int i;
2644
2645         if (vendor_ext == NULL)
2646                 return -1;
2647
2648         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
2649                 if (p2p->wps_vendor_ext[i] == NULL)
2650                         break;
2651         }
2652         if (i >= P2P_MAX_WPS_VENDOR_EXT)
2653                 return -1;
2654
2655         p2p->wps_vendor_ext[i] = wpabuf_dup(vendor_ext);
2656         if (p2p->wps_vendor_ext[i] == NULL)
2657                 return -1;
2658
2659         return 0;
2660 }
2661
2662
2663 int p2p_set_country(struct p2p_data *p2p, const char *country)
2664 {
2665         os_memcpy(p2p->cfg->country, country, 3);
2666         return 0;
2667 }
2668
2669
2670 void p2p_continue_find(struct p2p_data *p2p)
2671 {
2672         struct p2p_device *dev;
2673         p2p_set_state(p2p, P2P_SEARCH);
2674         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
2675                 if (dev->sd_pending_bcast_queries == 0) {
2676                         /* Initialize with total number of registered broadcast
2677                          * SD queries. */
2678                         dev->sd_pending_bcast_queries = p2p->num_p2p_sd_queries;
2679                 }
2680
2681                 if (p2p_start_sd(p2p, dev) == 0)
2682                         return;
2683                 if (dev->req_config_methods &&
2684                     !(dev->flags & P2P_DEV_PD_FOR_JOIN)) {
2685                         p2p_dbg(p2p, "Send pending Provision Discovery Request to "
2686                                 MACSTR " (config methods 0x%x)",
2687                                 MAC2STR(dev->info.p2p_device_addr),
2688                                 dev->req_config_methods);
2689                         if (p2p_send_prov_disc_req(p2p, dev, 0, 0) == 0)
2690                                 return;
2691                 }
2692         }
2693
2694         p2p_listen_in_find(p2p, 1);
2695 }
2696
2697
2698 static void p2p_sd_cb(struct p2p_data *p2p, int success)
2699 {
2700         p2p_dbg(p2p, "Service Discovery Query TX callback: success=%d",
2701                 success);
2702         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2703
2704         if (!success) {
2705                 p2p->sd_peer = NULL;
2706                 p2p_continue_find(p2p);
2707                 return;
2708         }
2709
2710         if (p2p->sd_peer == NULL) {
2711                 p2p_dbg(p2p, "No SD peer entry known");
2712                 p2p_continue_find(p2p);
2713                 return;
2714         }
2715
2716         /* Wait for response from the peer */
2717         p2p_set_state(p2p, P2P_SD_DURING_FIND);
2718         p2p_set_timeout(p2p, 0, 200000);
2719 }
2720
2721
2722 /**
2723  * p2p_retry_pd - Retry any pending provision disc requests in IDLE state
2724  * @p2p: P2P module context from p2p_init()
2725  */
2726 static void p2p_retry_pd(struct p2p_data *p2p)
2727 {
2728         struct p2p_device *dev;
2729
2730         if (p2p->state != P2P_IDLE)
2731                 return;
2732
2733         /*
2734          * Retry the prov disc req attempt only for the peer that the user had
2735          * requested.
2736          */
2737
2738         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
2739                 if (os_memcmp(p2p->pending_pd_devaddr,
2740                               dev->info.p2p_device_addr, ETH_ALEN) != 0)
2741                         continue;
2742                 if (!dev->req_config_methods)
2743                         continue;
2744
2745                 p2p_dbg(p2p, "Send pending Provision Discovery Request to "
2746                         MACSTR " (config methods 0x%x)",
2747                         MAC2STR(dev->info.p2p_device_addr),
2748                         dev->req_config_methods);
2749                 p2p_send_prov_disc_req(p2p, dev,
2750                                        dev->flags & P2P_DEV_PD_FOR_JOIN,
2751                                        p2p->pd_force_freq);
2752                 return;
2753         }
2754 }
2755
2756
2757 static void p2p_prov_disc_cb(struct p2p_data *p2p, int success)
2758 {
2759         p2p_dbg(p2p, "Provision Discovery Request TX callback: success=%d",
2760                 success);
2761
2762         /*
2763          * Postpone resetting the pending action state till after we actually
2764          * time out. This allows us to take some action like notifying any
2765          * interested parties about no response to the request.
2766          *
2767          * When the timer (below) goes off we check in IDLE, SEARCH, or
2768          * LISTEN_ONLY state, which are the only allowed states to issue a PD
2769          * requests in, if this was still pending and then raise notification.
2770          */
2771
2772         if (!success) {
2773                 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2774
2775                 if (p2p->user_initiated_pd &&
2776                     (p2p->state == P2P_SEARCH || p2p->state == P2P_LISTEN_ONLY))
2777                 {
2778                         /* Retry request from timeout to avoid busy loops */
2779                         p2p->pending_action_state = P2P_PENDING_PD;
2780                         p2p_set_timeout(p2p, 0, 50000);
2781                 } else if (p2p->state != P2P_IDLE)
2782                         p2p_continue_find(p2p);
2783                 else if (p2p->user_initiated_pd) {
2784                         p2p->pending_action_state = P2P_PENDING_PD;
2785                         p2p_set_timeout(p2p, 0, 300000);
2786                 }
2787                 return;
2788         }
2789
2790         /*
2791          * This postponing, of resetting pending_action_state, needs to be
2792          * done only for user initiated PD requests and not internal ones.
2793          */
2794         if (p2p->user_initiated_pd)
2795                 p2p->pending_action_state = P2P_PENDING_PD;
2796         else
2797                 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2798
2799         /* Wait for response from the peer */
2800         if (p2p->state == P2P_SEARCH)
2801                 p2p_set_state(p2p, P2P_PD_DURING_FIND);
2802         p2p_set_timeout(p2p, 0, 200000);
2803 }
2804
2805
2806 int p2p_scan_res_handler(struct p2p_data *p2p, const u8 *bssid, int freq,
2807                          struct os_reltime *rx_time, int level, const u8 *ies,
2808                          size_t ies_len)
2809 {
2810         if (os_reltime_before(rx_time, &p2p->find_start)) {
2811                 /*
2812                  * The driver may have cached (e.g., in cfg80211 BSS table) the
2813                  * scan results for relatively long time. To avoid reporting
2814                  * stale information, update P2P peers only based on results
2815                  * that have based on frames received after the last p2p_find
2816                  * operation was started.
2817                  */
2818                 p2p_dbg(p2p, "Ignore old scan result for " MACSTR
2819                         " (rx_time=%u.%06u)",
2820                         MAC2STR(bssid), (unsigned int) rx_time->sec,
2821                         (unsigned int) rx_time->usec);
2822                 return 0;
2823         }
2824
2825         p2p_add_device(p2p, bssid, freq, rx_time, level, ies, ies_len, 1);
2826
2827         return 0;
2828 }
2829
2830
2831 void p2p_scan_res_handled(struct p2p_data *p2p)
2832 {
2833         if (!p2p->p2p_scan_running) {
2834                 p2p_dbg(p2p, "p2p_scan was not running, but scan results received");
2835         }
2836         p2p->p2p_scan_running = 0;
2837         eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
2838
2839         if (p2p_run_after_scan(p2p))
2840                 return;
2841         if (p2p->state == P2P_SEARCH)
2842                 p2p_continue_find(p2p);
2843 }
2844
2845
2846 void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id)
2847 {
2848         u8 *len;
2849
2850 #ifdef CONFIG_WIFI_DISPLAY
2851         if (p2p->wfd_ie_probe_req)
2852                 wpabuf_put_buf(ies, p2p->wfd_ie_probe_req);
2853 #endif /* CONFIG_WIFI_DISPLAY */
2854
2855         len = p2p_buf_add_ie_hdr(ies);
2856         p2p_buf_add_capability(ies, p2p->dev_capab &
2857                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
2858         if (dev_id)
2859                 p2p_buf_add_device_id(ies, dev_id);
2860         if (p2p->cfg->reg_class && p2p->cfg->channel)
2861                 p2p_buf_add_listen_channel(ies, p2p->cfg->country,
2862                                            p2p->cfg->reg_class,
2863                                            p2p->cfg->channel);
2864         if (p2p->ext_listen_interval)
2865                 p2p_buf_add_ext_listen_timing(ies, p2p->ext_listen_period,
2866                                               p2p->ext_listen_interval);
2867         /* TODO: p2p_buf_add_operating_channel() if GO */
2868         p2p_buf_update_ie_hdr(ies, len);
2869 }
2870
2871
2872 size_t p2p_scan_ie_buf_len(struct p2p_data *p2p)
2873 {
2874         size_t len = 100;
2875
2876 #ifdef CONFIG_WIFI_DISPLAY
2877         if (p2p && p2p->wfd_ie_probe_req)
2878                 len += wpabuf_len(p2p->wfd_ie_probe_req);
2879 #endif /* CONFIG_WIFI_DISPLAY */
2880
2881         return len;
2882 }
2883
2884
2885 int p2p_ie_text(struct wpabuf *p2p_ie, char *buf, char *end)
2886 {
2887         return p2p_attr_text(p2p_ie, buf, end);
2888 }
2889
2890
2891 static void p2p_go_neg_req_cb(struct p2p_data *p2p, int success)
2892 {
2893         struct p2p_device *dev = p2p->go_neg_peer;
2894         int timeout;
2895
2896         p2p_dbg(p2p, "GO Negotiation Request TX callback: success=%d", success);
2897
2898         if (dev == NULL) {
2899                 p2p_dbg(p2p, "No pending GO Negotiation");
2900                 return;
2901         }
2902
2903         if (success) {
2904                 if (dev->flags & P2P_DEV_USER_REJECTED) {
2905                         p2p_set_state(p2p, P2P_IDLE);
2906                         return;
2907                 }
2908         } else if (dev->go_neg_req_sent) {
2909                 /* Cancel the increment from p2p_connect_send() on failure */
2910                 dev->go_neg_req_sent--;
2911         }
2912
2913         if (!success &&
2914             (dev->info.dev_capab & P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY) &&
2915             !is_zero_ether_addr(dev->member_in_go_dev)) {
2916                 p2p_dbg(p2p, "Peer " MACSTR " did not acknowledge request - try to use device discoverability through its GO",
2917                         MAC2STR(dev->info.p2p_device_addr));
2918                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
2919                 p2p_send_dev_disc_req(p2p, dev);
2920                 return;
2921         }
2922
2923         /*
2924          * Use P2P find, if needed, to find the other device from its listen
2925          * channel.
2926          */
2927         p2p_set_state(p2p, P2P_CONNECT);
2928         timeout = success ? 500000 : 100000;
2929         if (!success && p2p->go_neg_peer &&
2930             (p2p->go_neg_peer->flags & P2P_DEV_PEER_WAITING_RESPONSE)) {
2931                 unsigned int r;
2932                 /*
2933                  * Peer is expected to wait our response and we will skip the
2934                  * listen phase. Add some randomness to the wait time here to
2935                  * make it less likely to hit cases where we could end up in
2936                  * sync with peer not listening.
2937                  */
2938                 os_get_random((u8 *) &r, sizeof(r));
2939                 timeout += r % 100000;
2940         }
2941         p2p_set_timeout(p2p, 0, timeout);
2942 }
2943
2944
2945 static void p2p_go_neg_resp_cb(struct p2p_data *p2p, int success)
2946 {
2947         p2p_dbg(p2p, "GO Negotiation Response TX callback: success=%d",
2948                 success);
2949         if (!p2p->go_neg_peer && p2p->state == P2P_PROVISIONING) {
2950                 p2p_dbg(p2p, "Ignore TX callback event - GO Negotiation is not running anymore");
2951                 return;
2952         }
2953         p2p_set_state(p2p, P2P_CONNECT);
2954         p2p_set_timeout(p2p, 0, 500000);
2955 }
2956
2957
2958 static void p2p_go_neg_resp_failure_cb(struct p2p_data *p2p, int success,
2959                                        const u8 *addr)
2960 {
2961         p2p_dbg(p2p, "GO Negotiation Response (failure) TX callback: success=%d", success);
2962         if (p2p->go_neg_peer && p2p->go_neg_peer->status != P2P_SC_SUCCESS) {
2963                 p2p_go_neg_failed(p2p, p2p->go_neg_peer,
2964                                   p2p->go_neg_peer->status);
2965         } else if (success) {
2966                 struct p2p_device *dev;
2967                 dev = p2p_get_device(p2p, addr);
2968                 if (dev &&
2969                     dev->status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE)
2970                         dev->flags |= P2P_DEV_PEER_WAITING_RESPONSE;
2971         }
2972 }
2973
2974
2975 static void p2p_go_neg_conf_cb(struct p2p_data *p2p,
2976                                enum p2p_send_action_result result)
2977 {
2978         struct p2p_device *dev;
2979
2980         p2p_dbg(p2p, "GO Negotiation Confirm TX callback: result=%d", result);
2981         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
2982         if (result == P2P_SEND_ACTION_FAILED) {
2983                 p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
2984                 return;
2985         }
2986         if (result == P2P_SEND_ACTION_NO_ACK) {
2987                 /*
2988                  * It looks like the TX status for GO Negotiation Confirm is
2989                  * often showing failure even when the peer has actually
2990                  * received the frame. Since the peer may change channels
2991                  * immediately after having received the frame, we may not see
2992                  * an Ack for retries, so just dropping a single frame may
2993                  * trigger this. To allow the group formation to succeed if the
2994                  * peer did indeed receive the frame, continue regardless of
2995                  * the TX status.
2996                  */
2997                 p2p_dbg(p2p, "Assume GO Negotiation Confirm TX was actually received by the peer even though Ack was not reported");
2998         }
2999
3000         dev = p2p->go_neg_peer;
3001         if (dev == NULL)
3002                 return;
3003
3004         p2p_go_complete(p2p, dev);
3005 }
3006
3007
3008 void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
3009                         const u8 *src, const u8 *bssid,
3010                         enum p2p_send_action_result result)
3011 {
3012         enum p2p_pending_action_state state;
3013         int success;
3014
3015         p2p_dbg(p2p, "Action frame TX callback (state=%d freq=%u dst=" MACSTR
3016                 " src=" MACSTR " bssid=" MACSTR " result=%d",
3017                 p2p->pending_action_state, freq, MAC2STR(dst), MAC2STR(src),
3018                 MAC2STR(bssid), result);
3019         success = result == P2P_SEND_ACTION_SUCCESS;
3020         state = p2p->pending_action_state;
3021         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3022         switch (state) {
3023         case P2P_NO_PENDING_ACTION:
3024                 if (p2p->send_action_in_progress) {
3025                         p2p->send_action_in_progress = 0;
3026                         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3027                 }
3028                 if (p2p->after_scan_tx_in_progress) {
3029                         p2p->after_scan_tx_in_progress = 0;
3030                         if (p2p->start_after_scan != P2P_AFTER_SCAN_NOTHING &&
3031                             p2p_run_after_scan(p2p))
3032                                 break;
3033                         if (p2p->state == P2P_SEARCH) {
3034                                 p2p_dbg(p2p, "Continue find after after_scan_tx completion");
3035                                 p2p_continue_find(p2p);
3036                         }
3037                 }
3038                 break;
3039         case P2P_PENDING_GO_NEG_REQUEST:
3040                 p2p_go_neg_req_cb(p2p, success);
3041                 break;
3042         case P2P_PENDING_GO_NEG_RESPONSE:
3043                 p2p_go_neg_resp_cb(p2p, success);
3044                 break;
3045         case P2P_PENDING_GO_NEG_RESPONSE_FAILURE:
3046                 p2p_go_neg_resp_failure_cb(p2p, success, dst);
3047                 break;
3048         case P2P_PENDING_GO_NEG_CONFIRM:
3049                 p2p_go_neg_conf_cb(p2p, result);
3050                 break;
3051         case P2P_PENDING_SD:
3052                 p2p_sd_cb(p2p, success);
3053                 break;
3054         case P2P_PENDING_PD:
3055                 p2p_prov_disc_cb(p2p, success);
3056                 break;
3057         case P2P_PENDING_INVITATION_REQUEST:
3058                 p2p_invitation_req_cb(p2p, success);
3059                 break;
3060         case P2P_PENDING_INVITATION_RESPONSE:
3061                 p2p_invitation_resp_cb(p2p, success);
3062                 break;
3063         case P2P_PENDING_DEV_DISC_REQUEST:
3064                 p2p_dev_disc_req_cb(p2p, success);
3065                 break;
3066         case P2P_PENDING_DEV_DISC_RESPONSE:
3067                 p2p_dev_disc_resp_cb(p2p, success);
3068                 break;
3069         case P2P_PENDING_GO_DISC_REQ:
3070                 p2p_go_disc_req_cb(p2p, success);
3071                 break;
3072         }
3073
3074         p2p->after_scan_tx_in_progress = 0;
3075 }
3076
3077
3078 void p2p_listen_cb(struct p2p_data *p2p, unsigned int freq,
3079                    unsigned int duration)
3080 {
3081         if (freq == p2p->pending_client_disc_freq) {
3082                 p2p_dbg(p2p, "Client discoverability remain-awake completed");
3083                 p2p->pending_client_disc_freq = 0;
3084                 return;
3085         }
3086
3087         if (freq != p2p->pending_listen_freq) {
3088                 p2p_dbg(p2p, "Unexpected listen callback for freq=%u duration=%u (pending_listen_freq=%u)",
3089                         freq, duration, p2p->pending_listen_freq);
3090                 return;
3091         }
3092
3093         p2p_dbg(p2p, "Starting Listen timeout(%u,%u) on freq=%u based on callback",
3094                 p2p->pending_listen_sec, p2p->pending_listen_usec,
3095                 p2p->pending_listen_freq);
3096         p2p->in_listen = 1;
3097         p2p->drv_in_listen = freq;
3098         if (p2p->pending_listen_sec || p2p->pending_listen_usec) {
3099                 /*
3100                  * Add 20 msec extra wait to avoid race condition with driver
3101                  * remain-on-channel end event, i.e., give driver more time to
3102                  * complete the operation before our timeout expires.
3103                  */
3104                 p2p_set_timeout(p2p, p2p->pending_listen_sec,
3105                                 p2p->pending_listen_usec + 20000);
3106         }
3107
3108         p2p->pending_listen_freq = 0;
3109 }
3110
3111
3112 int p2p_listen_end(struct p2p_data *p2p, unsigned int freq)
3113 {
3114         p2p_dbg(p2p, "Driver ended Listen state (freq=%u)", freq);
3115         p2p->drv_in_listen = 0;
3116         if (p2p->in_listen)
3117                 return 0; /* Internal timeout will trigger the next step */
3118
3119         if (p2p->state == P2P_CONNECT_LISTEN && p2p->go_neg_peer) {
3120                 if (p2p->go_neg_peer->connect_reqs >= 120) {
3121                         p2p_dbg(p2p, "Timeout on sending GO Negotiation Request without getting response");
3122                         p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3123                         return 0;
3124                 }
3125
3126                 p2p_set_state(p2p, P2P_CONNECT);
3127                 p2p_connect_send(p2p, p2p->go_neg_peer);
3128                 return 1;
3129         } else if (p2p->state == P2P_SEARCH) {
3130                 if (p2p->p2p_scan_running) {
3131                          /*
3132                           * Search is already in progress. This can happen if
3133                           * an Action frame RX is reported immediately after
3134                           * the end of a remain-on-channel operation and the
3135                           * response frame to that is sent using an offchannel
3136                           * operation while in p2p_find. Avoid an attempt to
3137                           * restart a scan here.
3138                           */
3139                         p2p_dbg(p2p, "p2p_scan already in progress - do not try to start a new one");
3140                         return 1;
3141                 }
3142                 if (p2p->pending_listen_freq) {
3143                         /*
3144                          * Better wait a bit if the driver is unable to start
3145                          * offchannel operation for some reason. p2p_search()
3146                          * will be started from internal timeout.
3147                          */
3148                         p2p_dbg(p2p, "Listen operation did not seem to start - delay search phase to avoid busy loop");
3149                         p2p_set_timeout(p2p, 0, 100000);
3150                         return 1;
3151                 }
3152                 if (p2p->search_delay) {
3153                         p2p_dbg(p2p, "Delay search operation by %u ms",
3154                                 p2p->search_delay);
3155                         p2p_set_timeout(p2p, p2p->search_delay / 1000,
3156                                         (p2p->search_delay % 1000) * 1000);
3157                         return 1;
3158                 }
3159                 p2p_search(p2p);
3160                 return 1;
3161         }
3162
3163         return 0;
3164 }
3165
3166
3167 static void p2p_timeout_connect(struct p2p_data *p2p)
3168 {
3169         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3170         if (p2p->go_neg_peer &&
3171             (p2p->go_neg_peer->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM)) {
3172                 p2p_dbg(p2p, "Wait for GO Negotiation Confirm timed out - assume GO Negotiation failed");
3173                 p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3174                 return;
3175         }
3176         if (p2p->go_neg_peer &&
3177             (p2p->go_neg_peer->flags & P2P_DEV_PEER_WAITING_RESPONSE) &&
3178             p2p->go_neg_peer->connect_reqs < 120) {
3179                 p2p_dbg(p2p, "Peer expected to wait our response - skip listen");
3180                 p2p_connect_send(p2p, p2p->go_neg_peer);
3181                 return;
3182         }
3183         if (p2p->go_neg_peer && p2p->go_neg_peer->oob_go_neg_freq > 0) {
3184                 p2p_dbg(p2p, "Skip connect-listen since GO Neg channel known (OOB)");
3185                 p2p_set_state(p2p, P2P_CONNECT_LISTEN);
3186                 p2p_set_timeout(p2p, 0, 30000);
3187                 return;
3188         }
3189         p2p_set_state(p2p, P2P_CONNECT_LISTEN);
3190         p2p_listen_in_find(p2p, 0);
3191 }
3192
3193
3194 static void p2p_timeout_connect_listen(struct p2p_data *p2p)
3195 {
3196         if (p2p->go_neg_peer) {
3197                 if (p2p->drv_in_listen) {
3198                         p2p_dbg(p2p, "Driver is still in Listen state; wait for it to complete");
3199                         return;
3200                 }
3201
3202                 if (p2p->go_neg_peer->connect_reqs >= 120) {
3203                         p2p_dbg(p2p, "Timeout on sending GO Negotiation Request without getting response");
3204                         p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3205                         return;
3206                 }
3207
3208                 p2p_set_state(p2p, P2P_CONNECT);
3209                 p2p_connect_send(p2p, p2p->go_neg_peer);
3210         } else
3211                 p2p_set_state(p2p, P2P_IDLE);
3212 }
3213
3214
3215 static void p2p_timeout_wait_peer_connect(struct p2p_data *p2p)
3216 {
3217         p2p_set_state(p2p, P2P_WAIT_PEER_IDLE);
3218
3219         if (p2p->cfg->is_concurrent_session_active &&
3220             p2p->cfg->is_concurrent_session_active(p2p->cfg->cb_ctx))
3221                 p2p_set_timeout(p2p, 0, 500000);
3222         else
3223                 p2p_set_timeout(p2p, 0, 200000);
3224 }
3225
3226
3227 static void p2p_timeout_wait_peer_idle(struct p2p_data *p2p)
3228 {
3229         struct p2p_device *dev = p2p->go_neg_peer;
3230
3231         if (dev == NULL) {
3232                 p2p_dbg(p2p, "Unknown GO Neg peer - stop GO Neg wait");
3233                 return;
3234         }
3235
3236         dev->wait_count++;
3237         if (dev->wait_count >= 120) {
3238                 p2p_dbg(p2p, "Timeout on waiting peer to become ready for GO Negotiation");
3239                 p2p_go_neg_failed(p2p, dev, -1);
3240                 return;
3241         }
3242
3243         p2p_dbg(p2p, "Go to Listen state while waiting for the peer to become ready for GO Negotiation");
3244         p2p_set_state(p2p, P2P_WAIT_PEER_CONNECT);
3245         p2p_listen_in_find(p2p, 0);
3246 }
3247
3248
3249 static void p2p_timeout_sd_during_find(struct p2p_data *p2p)
3250 {
3251         p2p_dbg(p2p, "Service Discovery Query timeout");
3252         if (p2p->sd_peer) {
3253                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3254                 p2p->sd_peer = NULL;
3255         }
3256         p2p_continue_find(p2p);
3257 }
3258
3259
3260 static void p2p_timeout_prov_disc_during_find(struct p2p_data *p2p)
3261 {
3262         p2p_dbg(p2p, "Provision Discovery Request timeout");
3263         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3264         p2p_continue_find(p2p);
3265 }
3266
3267
3268 static void p2p_timeout_prov_disc_req(struct p2p_data *p2p)
3269 {
3270         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3271
3272         /*
3273          * For user initiated PD requests that we have not gotten any responses
3274          * for while in IDLE state, we retry them a couple of times before
3275          * giving up.
3276          */
3277         if (!p2p->user_initiated_pd)
3278                 return;
3279
3280         p2p_dbg(p2p, "User initiated Provision Discovery Request timeout");
3281
3282         if (p2p->pd_retries) {
3283                 p2p->pd_retries--;
3284                 p2p_retry_pd(p2p);
3285         } else {
3286                 struct p2p_device *dev;
3287                 int for_join = 0;
3288
3289                 dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
3290                         if (os_memcmp(p2p->pending_pd_devaddr,
3291                                       dev->info.p2p_device_addr, ETH_ALEN) != 0)
3292                                 continue;
3293                         if (dev->req_config_methods &&
3294                             (dev->flags & P2P_DEV_PD_FOR_JOIN))
3295                                 for_join = 1;
3296                 }
3297
3298                 if (p2p->cfg->prov_disc_fail)
3299                         p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx,
3300                                                  p2p->pending_pd_devaddr,
3301                                                  for_join ?
3302                                                  P2P_PROV_DISC_TIMEOUT_JOIN :
3303                                                  P2P_PROV_DISC_TIMEOUT);
3304                 p2p_reset_pending_pd(p2p);
3305         }
3306 }
3307
3308
3309 static void p2p_timeout_invite(struct p2p_data *p2p)
3310 {
3311         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3312         p2p_set_state(p2p, P2P_INVITE_LISTEN);
3313         if (p2p->inv_role == P2P_INVITE_ROLE_ACTIVE_GO) {
3314                 /*
3315                  * Better remain on operating channel instead of listen channel
3316                  * when running a group.
3317                  */
3318                 p2p_dbg(p2p, "Inviting in active GO role - wait on operating channel");
3319                 p2p_set_timeout(p2p, 0, 100000);
3320                 return;
3321         }
3322         p2p_listen_in_find(p2p, 0);
3323 }
3324
3325
3326 static void p2p_timeout_invite_listen(struct p2p_data *p2p)
3327 {
3328         if (p2p->invite_peer && p2p->invite_peer->invitation_reqs < 100) {
3329                 p2p_set_state(p2p, P2P_INVITE);
3330                 p2p_invite_send(p2p, p2p->invite_peer,
3331                                 p2p->invite_go_dev_addr, p2p->invite_dev_pw_id);
3332         } else {
3333                 if (p2p->invite_peer) {
3334                         p2p_dbg(p2p, "Invitation Request retry limit reached");
3335                         if (p2p->cfg->invitation_result)
3336                                 p2p->cfg->invitation_result(
3337                                         p2p->cfg->cb_ctx, -1, NULL, NULL,
3338                                         p2p->invite_peer->info.p2p_device_addr,
3339                                         0);
3340                 }
3341                 p2p_set_state(p2p, P2P_IDLE);
3342         }
3343 }
3344
3345
3346 static void p2p_state_timeout(void *eloop_ctx, void *timeout_ctx)
3347 {
3348         struct p2p_data *p2p = eloop_ctx;
3349
3350         p2p_dbg(p2p, "Timeout (state=%s)", p2p_state_txt(p2p->state));
3351
3352         p2p->in_listen = 0;
3353
3354         switch (p2p->state) {
3355         case P2P_IDLE:
3356                 /* Check if we timed out waiting for PD req */
3357                 if (p2p->pending_action_state == P2P_PENDING_PD)
3358                         p2p_timeout_prov_disc_req(p2p);
3359                 break;
3360         case P2P_SEARCH:
3361                 /* Check if we timed out waiting for PD req */
3362                 if (p2p->pending_action_state == P2P_PENDING_PD)
3363                         p2p_timeout_prov_disc_req(p2p);
3364                 if (p2p->search_delay && !p2p->in_search_delay) {
3365                         p2p_dbg(p2p, "Delay search operation by %u ms",
3366                                 p2p->search_delay);
3367                         p2p->in_search_delay = 1;
3368                         p2p_set_timeout(p2p, p2p->search_delay / 1000,
3369                                         (p2p->search_delay % 1000) * 1000);
3370                         break;
3371                 }
3372                 p2p->in_search_delay = 0;
3373                 p2p_search(p2p);
3374                 break;
3375         case P2P_CONNECT:
3376                 p2p_timeout_connect(p2p);
3377                 break;
3378         case P2P_CONNECT_LISTEN:
3379                 p2p_timeout_connect_listen(p2p);
3380                 break;
3381         case P2P_GO_NEG:
3382                 break;
3383         case P2P_LISTEN_ONLY:
3384                 /* Check if we timed out waiting for PD req */
3385                 if (p2p->pending_action_state == P2P_PENDING_PD)
3386                         p2p_timeout_prov_disc_req(p2p);
3387
3388                 if (p2p->ext_listen_only) {
3389                         p2p_dbg(p2p, "Extended Listen Timing - Listen State completed");
3390                         p2p->ext_listen_only = 0;
3391                         p2p_set_state(p2p, P2P_IDLE);
3392                 }
3393                 break;
3394         case P2P_WAIT_PEER_CONNECT:
3395                 p2p_timeout_wait_peer_connect(p2p);
3396                 break;
3397         case P2P_WAIT_PEER_IDLE:
3398                 p2p_timeout_wait_peer_idle(p2p);
3399                 break;
3400         case P2P_SD_DURING_FIND:
3401                 p2p_timeout_sd_during_find(p2p);
3402                 break;
3403         case P2P_PROVISIONING:
3404                 break;
3405         case P2P_PD_DURING_FIND:
3406                 p2p_timeout_prov_disc_during_find(p2p);
3407                 break;
3408         case P2P_INVITE:
3409                 p2p_timeout_invite(p2p);
3410                 break;
3411         case P2P_INVITE_LISTEN:
3412                 p2p_timeout_invite_listen(p2p);
3413                 break;
3414         }
3415 }
3416
3417
3418 int p2p_reject(struct p2p_data *p2p, const u8 *peer_addr)
3419 {
3420         struct p2p_device *dev;
3421
3422         dev = p2p_get_device(p2p, peer_addr);
3423         p2p_dbg(p2p, "Local request to reject connection attempts by peer "
3424                 MACSTR, MAC2STR(peer_addr));
3425         if (dev == NULL) {
3426                 p2p_dbg(p2p, "Peer " MACSTR " unknown", MAC2STR(peer_addr));
3427                 return -1;
3428         }
3429         dev->status = P2P_SC_FAIL_REJECTED_BY_USER;
3430         dev->flags |= P2P_DEV_USER_REJECTED;
3431         return 0;
3432 }
3433
3434
3435 const char * p2p_wps_method_text(enum p2p_wps_method method)
3436 {
3437         switch (method) {
3438         case WPS_NOT_READY:
3439                 return "not-ready";
3440         case WPS_PIN_DISPLAY:
3441                 return "Display";
3442         case WPS_PIN_KEYPAD:
3443                 return "Keypad";
3444         case WPS_PBC:
3445                 return "PBC";
3446         case WPS_NFC:
3447                 return "NFC";
3448         }
3449
3450         return "??";
3451 }
3452
3453
3454 static const char * p2p_go_state_text(enum p2p_go_state go_state)
3455 {
3456         switch (go_state) {
3457         case UNKNOWN_GO:
3458                 return "unknown";
3459         case LOCAL_GO:
3460                 return "local";
3461         case  REMOTE_GO:
3462                 return "remote";
3463         }
3464
3465         return "??";
3466 }
3467
3468
3469 const struct p2p_peer_info * p2p_get_peer_info(struct p2p_data *p2p,
3470                                                const u8 *addr, int next)
3471 {
3472         struct p2p_device *dev;
3473
3474         if (addr)
3475                 dev = p2p_get_device(p2p, addr);
3476         else
3477                 dev = dl_list_first(&p2p->devices, struct p2p_device, list);
3478
3479         if (dev && next) {
3480                 dev = dl_list_first(&dev->list, struct p2p_device, list);
3481                 if (&dev->list == &p2p->devices)
3482                         dev = NULL;
3483         }
3484
3485         if (dev == NULL)
3486                 return NULL;
3487
3488         return &dev->info;
3489 }
3490
3491
3492 int p2p_get_peer_info_txt(const struct p2p_peer_info *info,
3493                           char *buf, size_t buflen)
3494 {
3495         struct p2p_device *dev;
3496         int res;
3497         char *pos, *end;
3498         struct os_reltime now;
3499
3500         if (info == NULL)
3501                 return -1;
3502
3503         dev = (struct p2p_device *) (((u8 *) info) -
3504                                      offsetof(struct p2p_device, info));
3505
3506         pos = buf;
3507         end = buf + buflen;
3508
3509         os_get_reltime(&now);
3510         res = os_snprintf(pos, end - pos,
3511                           "age=%d\n"
3512                           "listen_freq=%d\n"
3513                           "wps_method=%s\n"
3514                           "interface_addr=" MACSTR "\n"
3515                           "member_in_go_dev=" MACSTR "\n"
3516                           "member_in_go_iface=" MACSTR "\n"
3517                           "go_neg_req_sent=%d\n"
3518                           "go_state=%s\n"
3519                           "dialog_token=%u\n"
3520                           "intended_addr=" MACSTR "\n"
3521                           "country=%c%c\n"
3522                           "oper_freq=%d\n"
3523                           "req_config_methods=0x%x\n"
3524                           "flags=%s%s%s%s%s%s%s%s%s%s%s%s%s\n"
3525                           "status=%d\n"
3526                           "wait_count=%u\n"
3527                           "invitation_reqs=%u\n",
3528                           (int) (now.sec - dev->last_seen.sec),
3529                           dev->listen_freq,
3530                           p2p_wps_method_text(dev->wps_method),
3531                           MAC2STR(dev->interface_addr),
3532                           MAC2STR(dev->member_in_go_dev),
3533                           MAC2STR(dev->member_in_go_iface),
3534                           dev->go_neg_req_sent,
3535                           p2p_go_state_text(dev->go_state),
3536                           dev->dialog_token,
3537                           MAC2STR(dev->intended_addr),
3538                           dev->country[0] ? dev->country[0] : '_',
3539                           dev->country[1] ? dev->country[1] : '_',
3540                           dev->oper_freq,
3541                           dev->req_config_methods,
3542                           dev->flags & P2P_DEV_PROBE_REQ_ONLY ?
3543                           "[PROBE_REQ_ONLY]" : "",
3544                           dev->flags & P2P_DEV_REPORTED ? "[REPORTED]" : "",
3545                           dev->flags & P2P_DEV_NOT_YET_READY ?
3546                           "[NOT_YET_READY]" : "",
3547                           dev->flags & P2P_DEV_PD_PEER_DISPLAY ?
3548                           "[PD_PEER_DISPLAY]" : "",
3549                           dev->flags & P2P_DEV_PD_PEER_KEYPAD ?
3550                           "[PD_PEER_KEYPAD]" : "",
3551                           dev->flags & P2P_DEV_USER_REJECTED ?
3552                           "[USER_REJECTED]" : "",
3553                           dev->flags & P2P_DEV_PEER_WAITING_RESPONSE ?
3554                           "[PEER_WAITING_RESPONSE]" : "",
3555                           dev->flags & P2P_DEV_PREFER_PERSISTENT_GROUP ?
3556                           "[PREFER_PERSISTENT_GROUP]" : "",
3557                           dev->flags & P2P_DEV_WAIT_GO_NEG_RESPONSE ?
3558                           "[WAIT_GO_NEG_RESPONSE]" : "",
3559                           dev->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM ?
3560                           "[WAIT_GO_NEG_CONFIRM]" : "",
3561                           dev->flags & P2P_DEV_GROUP_CLIENT_ONLY ?
3562                           "[GROUP_CLIENT_ONLY]" : "",
3563                           dev->flags & P2P_DEV_FORCE_FREQ ?
3564                           "[FORCE_FREQ]" : "",
3565                           dev->flags & P2P_DEV_PD_FOR_JOIN ?
3566                           "[PD_FOR_JOIN]" : "",
3567                           dev->status,
3568                           dev->wait_count,
3569                           dev->invitation_reqs);
3570         if (res < 0 || res >= end - pos)
3571                 return pos - buf;
3572         pos += res;
3573
3574         if (dev->ext_listen_period) {
3575                 res = os_snprintf(pos, end - pos,
3576                                   "ext_listen_period=%u\n"
3577                                   "ext_listen_interval=%u\n",
3578                                   dev->ext_listen_period,
3579                                   dev->ext_listen_interval);
3580                 if (res < 0 || res >= end - pos)
3581                         return pos - buf;
3582                 pos += res;
3583         }
3584
3585         if (dev->oper_ssid_len) {
3586                 res = os_snprintf(pos, end - pos,
3587                                   "oper_ssid=%s\n",
3588                                   wpa_ssid_txt(dev->oper_ssid,
3589                                                dev->oper_ssid_len));
3590                 if (res < 0 || res >= end - pos)
3591                         return pos - buf;
3592                 pos += res;
3593         }
3594
3595 #ifdef CONFIG_WIFI_DISPLAY
3596         if (dev->info.wfd_subelems) {
3597                 res = os_snprintf(pos, end - pos, "wfd_subelems=");
3598                 if (res < 0 || res >= end - pos)
3599                         return pos - buf;
3600                 pos += res;
3601
3602                 pos += wpa_snprintf_hex(pos, end - pos,
3603                                         wpabuf_head(dev->info.wfd_subelems),
3604                                         wpabuf_len(dev->info.wfd_subelems));
3605
3606                 res = os_snprintf(pos, end - pos, "\n");
3607                 if (res < 0 || res >= end - pos)
3608                         return pos - buf;
3609                 pos += res;
3610         }
3611 #endif /* CONFIG_WIFI_DISPLAY */
3612
3613         return pos - buf;
3614 }
3615
3616
3617 int p2p_peer_known(struct p2p_data *p2p, const u8 *addr)
3618 {
3619         return p2p_get_device(p2p, addr) != NULL;
3620 }
3621
3622
3623 void p2p_set_client_discoverability(struct p2p_data *p2p, int enabled)
3624 {
3625         if (enabled) {
3626                 p2p_dbg(p2p, "Client discoverability enabled");
3627                 p2p->dev_capab |= P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
3628         } else {
3629                 p2p_dbg(p2p, "Client discoverability disabled");
3630                 p2p->dev_capab &= ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
3631         }
3632 }
3633
3634
3635 static struct wpabuf * p2p_build_presence_req(u32 duration1, u32 interval1,
3636                                               u32 duration2, u32 interval2)
3637 {
3638         struct wpabuf *req;
3639         struct p2p_noa_desc desc1, desc2, *ptr1 = NULL, *ptr2 = NULL;
3640         u8 *len;
3641
3642         req = wpabuf_alloc(100);
3643         if (req == NULL)
3644                 return NULL;
3645
3646         if (duration1 || interval1) {
3647                 os_memset(&desc1, 0, sizeof(desc1));
3648                 desc1.count_type = 1;
3649                 desc1.duration = duration1;
3650                 desc1.interval = interval1;
3651                 ptr1 = &desc1;
3652
3653                 if (duration2 || interval2) {
3654                         os_memset(&desc2, 0, sizeof(desc2));
3655                         desc2.count_type = 2;
3656                         desc2.duration = duration2;
3657                         desc2.interval = interval2;
3658                         ptr2 = &desc2;
3659                 }
3660         }
3661
3662         p2p_buf_add_action_hdr(req, P2P_PRESENCE_REQ, 1);
3663         len = p2p_buf_add_ie_hdr(req);
3664         p2p_buf_add_noa(req, 0, 0, 0, ptr1, ptr2);
3665         p2p_buf_update_ie_hdr(req, len);
3666
3667         return req;
3668 }
3669
3670
3671 int p2p_presence_req(struct p2p_data *p2p, const u8 *go_interface_addr,
3672                      const u8 *own_interface_addr, unsigned int freq,
3673                      u32 duration1, u32 interval1, u32 duration2,
3674                      u32 interval2)
3675 {
3676         struct wpabuf *req;
3677
3678         p2p_dbg(p2p, "Send Presence Request to GO " MACSTR
3679                 " (own interface " MACSTR ") freq=%u dur1=%u int1=%u "
3680                 "dur2=%u int2=%u",
3681                 MAC2STR(go_interface_addr), MAC2STR(own_interface_addr),
3682                 freq, duration1, interval1, duration2, interval2);
3683
3684         req = p2p_build_presence_req(duration1, interval1, duration2,
3685                                      interval2);
3686         if (req == NULL)
3687                 return -1;
3688
3689         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3690         if (p2p_send_action(p2p, freq, go_interface_addr, own_interface_addr,
3691                             go_interface_addr,
3692                             wpabuf_head(req), wpabuf_len(req), 200) < 0) {
3693                 p2p_dbg(p2p, "Failed to send Action frame");
3694         }
3695         wpabuf_free(req);
3696
3697         return 0;
3698 }
3699
3700
3701 static struct wpabuf * p2p_build_presence_resp(u8 status, const u8 *noa,
3702                                                size_t noa_len, u8 dialog_token)
3703 {
3704         struct wpabuf *resp;
3705         u8 *len;
3706
3707         resp = wpabuf_alloc(100 + noa_len);
3708         if (resp == NULL)
3709                 return NULL;
3710
3711         p2p_buf_add_action_hdr(resp, P2P_PRESENCE_RESP, dialog_token);
3712         len = p2p_buf_add_ie_hdr(resp);
3713         p2p_buf_add_status(resp, status);
3714         if (noa) {
3715                 wpabuf_put_u8(resp, P2P_ATTR_NOTICE_OF_ABSENCE);
3716                 wpabuf_put_le16(resp, noa_len);
3717                 wpabuf_put_data(resp, noa, noa_len);
3718         } else
3719                 p2p_buf_add_noa(resp, 0, 0, 0, NULL, NULL);
3720         p2p_buf_update_ie_hdr(resp, len);
3721
3722         return resp;
3723 }
3724
3725
3726 static void p2p_process_presence_req(struct p2p_data *p2p, const u8 *da,
3727                                      const u8 *sa, const u8 *data, size_t len,
3728                                      int rx_freq)
3729 {
3730         struct p2p_message msg;
3731         u8 status;
3732         struct wpabuf *resp;
3733         size_t g;
3734         struct p2p_group *group = NULL;
3735         int parsed = 0;
3736         u8 noa[50];
3737         int noa_len;
3738
3739         p2p_dbg(p2p, "Received P2P Action - P2P Presence Request");
3740
3741         for (g = 0; g < p2p->num_groups; g++) {
3742                 if (os_memcmp(da, p2p_group_get_interface_addr(p2p->groups[g]),
3743                               ETH_ALEN) == 0) {
3744                         group = p2p->groups[g];
3745                         break;
3746                 }
3747         }
3748         if (group == NULL) {
3749                 p2p_dbg(p2p, "Ignore P2P Presence Request for unknown group "
3750                         MACSTR, MAC2STR(da));
3751                 return;
3752         }
3753
3754         if (p2p_parse(data, len, &msg) < 0) {
3755                 p2p_dbg(p2p, "Failed to parse P2P Presence Request");
3756                 status = P2P_SC_FAIL_INVALID_PARAMS;
3757                 goto fail;
3758         }
3759         parsed = 1;
3760
3761         if (msg.noa == NULL) {
3762                 p2p_dbg(p2p, "No NoA attribute in P2P Presence Request");
3763                 status = P2P_SC_FAIL_INVALID_PARAMS;
3764                 goto fail;
3765         }
3766
3767         status = p2p_group_presence_req(group, sa, msg.noa, msg.noa_len);
3768
3769 fail:
3770         if (p2p->cfg->get_noa)
3771                 noa_len = p2p->cfg->get_noa(p2p->cfg->cb_ctx, da, noa,
3772                                             sizeof(noa));
3773         else
3774                 noa_len = -1;
3775         resp = p2p_build_presence_resp(status, noa_len > 0 ? noa : NULL,
3776                                        noa_len > 0 ? noa_len : 0,
3777                                        msg.dialog_token);
3778         if (parsed)
3779                 p2p_parse_free(&msg);
3780         if (resp == NULL)
3781                 return;
3782
3783         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3784         if (p2p_send_action(p2p, rx_freq, sa, da, da,
3785                             wpabuf_head(resp), wpabuf_len(resp), 200) < 0) {
3786                 p2p_dbg(p2p, "Failed to send Action frame");
3787         }
3788         wpabuf_free(resp);
3789 }
3790
3791
3792 static void p2p_process_presence_resp(struct p2p_data *p2p, const u8 *da,
3793                                       const u8 *sa, const u8 *data, size_t len)
3794 {
3795         struct p2p_message msg;
3796
3797         p2p_dbg(p2p, "Received P2P Action - P2P Presence Response");
3798
3799         if (p2p_parse(data, len, &msg) < 0) {
3800                 p2p_dbg(p2p, "Failed to parse P2P Presence Response");
3801                 return;
3802         }
3803
3804         if (msg.status == NULL || msg.noa == NULL) {
3805                 p2p_dbg(p2p, "No Status or NoA attribute in P2P Presence Response");
3806                 p2p_parse_free(&msg);
3807                 return;
3808         }
3809
3810         if (p2p->cfg->presence_resp) {
3811                 p2p->cfg->presence_resp(p2p->cfg->cb_ctx, sa, *msg.status,
3812                                         msg.noa, msg.noa_len);
3813         }
3814
3815         if (*msg.status) {
3816                 p2p_dbg(p2p, "P2P Presence Request was rejected: status %u",
3817                         *msg.status);
3818                 p2p_parse_free(&msg);
3819                 return;
3820         }
3821
3822         p2p_dbg(p2p, "P2P Presence Request was accepted");
3823         wpa_hexdump(MSG_DEBUG, "P2P: P2P Presence Response - NoA",
3824                     msg.noa, msg.noa_len);
3825         /* TODO: process NoA */
3826         p2p_parse_free(&msg);
3827 }
3828
3829
3830 static void p2p_ext_listen_timeout(void *eloop_ctx, void *timeout_ctx)
3831 {
3832         struct p2p_data *p2p = eloop_ctx;
3833
3834         if (p2p->ext_listen_interval) {
3835                 /* Schedule next extended listen timeout */
3836                 eloop_register_timeout(p2p->ext_listen_interval_sec,
3837                                        p2p->ext_listen_interval_usec,
3838                                        p2p_ext_listen_timeout, p2p, NULL);
3839         }
3840
3841         if (p2p->state == P2P_LISTEN_ONLY && p2p->ext_listen_only) {
3842                 /*
3843                  * This should not really happen, but it looks like the Listen
3844                  * command may fail is something else (e.g., a scan) was
3845                  * running at an inconvenient time. As a workaround, allow new
3846                  * Extended Listen operation to be started.
3847                  */
3848                 p2p_dbg(p2p, "Previous Extended Listen operation had not been completed - try again");
3849                 p2p->ext_listen_only = 0;
3850                 p2p_set_state(p2p, P2P_IDLE);
3851         }
3852
3853         if (p2p->state != P2P_IDLE) {
3854                 p2p_dbg(p2p, "Skip Extended Listen timeout in active state (%s)", p2p_state_txt(p2p->state));
3855                 return;
3856         }
3857
3858         p2p_dbg(p2p, "Extended Listen timeout");
3859         p2p->ext_listen_only = 1;
3860         if (p2p_listen(p2p, p2p->ext_listen_period) < 0) {
3861                 p2p_dbg(p2p, "Failed to start Listen state for Extended Listen Timing");
3862                 p2p->ext_listen_only = 0;
3863         }
3864 }
3865
3866
3867 int p2p_ext_listen(struct p2p_data *p2p, unsigned int period,
3868                    unsigned int interval)
3869 {
3870         if (period > 65535 || interval > 65535 || period > interval ||
3871             (period == 0 && interval > 0) || (period > 0 && interval == 0)) {
3872                 p2p_dbg(p2p, "Invalid Extended Listen Timing request: period=%u interval=%u",
3873                         period, interval);
3874                 return -1;
3875         }
3876
3877         eloop_cancel_timeout(p2p_ext_listen_timeout, p2p, NULL);
3878
3879         if (interval == 0) {
3880                 p2p_dbg(p2p, "Disabling Extended Listen Timing");
3881                 p2p->ext_listen_period = 0;
3882                 p2p->ext_listen_interval = 0;
3883                 return 0;
3884         }
3885
3886         p2p_dbg(p2p, "Enabling Extended Listen Timing: period %u msec, interval %u msec",
3887                 period, interval);
3888         p2p->ext_listen_period = period;
3889         p2p->ext_listen_interval = interval;
3890         p2p->ext_listen_interval_sec = interval / 1000;
3891         p2p->ext_listen_interval_usec = (interval % 1000) * 1000;
3892
3893         eloop_register_timeout(p2p->ext_listen_interval_sec,
3894                                p2p->ext_listen_interval_usec,
3895                                p2p_ext_listen_timeout, p2p, NULL);
3896
3897         return 0;
3898 }
3899
3900
3901 void p2p_deauth_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
3902                       const u8 *ie, size_t ie_len)
3903 {
3904         struct p2p_message msg;
3905
3906         if (bssid == NULL || ie == NULL)
3907                 return;
3908
3909         os_memset(&msg, 0, sizeof(msg));
3910         if (p2p_parse_ies(ie, ie_len, &msg))
3911                 return;
3912         if (msg.minor_reason_code == NULL) {
3913                 p2p_parse_free(&msg);
3914                 return;
3915         }
3916
3917         p2p_dbg(p2p, "Deauthentication notification BSSID " MACSTR
3918                 " reason_code=%u minor_reason_code=%u",
3919                 MAC2STR(bssid), reason_code, *msg.minor_reason_code);
3920
3921         p2p_parse_free(&msg);
3922 }
3923
3924
3925 void p2p_disassoc_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
3926                         const u8 *ie, size_t ie_len)
3927 {
3928         struct p2p_message msg;
3929
3930         if (bssid == NULL || ie == NULL)
3931                 return;
3932
3933         os_memset(&msg, 0, sizeof(msg));
3934         if (p2p_parse_ies(ie, ie_len, &msg))
3935                 return;
3936         if (msg.minor_reason_code == NULL) {
3937                 p2p_parse_free(&msg);
3938                 return;
3939         }
3940
3941         p2p_dbg(p2p, "Disassociation notification BSSID " MACSTR
3942                 " reason_code=%u minor_reason_code=%u",
3943                 MAC2STR(bssid), reason_code, *msg.minor_reason_code);
3944
3945         p2p_parse_free(&msg);
3946 }
3947
3948
3949 void p2p_set_managed_oper(struct p2p_data *p2p, int enabled)
3950 {
3951         if (enabled) {
3952                 p2p_dbg(p2p, "Managed P2P Device operations enabled");
3953                 p2p->dev_capab |= P2P_DEV_CAPAB_INFRA_MANAGED;
3954         } else {
3955                 p2p_dbg(p2p, "Managed P2P Device operations disabled");
3956                 p2p->dev_capab &= ~P2P_DEV_CAPAB_INFRA_MANAGED;
3957         }
3958 }
3959
3960
3961 int p2p_set_listen_channel(struct p2p_data *p2p, u8 reg_class, u8 channel)
3962 {
3963         if (p2p_channel_to_freq(reg_class, channel) < 0)
3964                 return -1;
3965
3966         p2p_dbg(p2p, "Set Listen channel: reg_class %u channel %u",
3967                 reg_class, channel);
3968         p2p->cfg->reg_class = reg_class;
3969         p2p->cfg->channel = channel;
3970
3971         return 0;
3972 }
3973
3974
3975 int p2p_set_ssid_postfix(struct p2p_data *p2p, const u8 *postfix, size_t len)
3976 {
3977         p2p_dbg(p2p, "New SSID postfix: %s", wpa_ssid_txt(postfix, len));
3978         if (postfix == NULL) {
3979                 p2p->cfg->ssid_postfix_len = 0;
3980                 return 0;
3981         }
3982         if (len > sizeof(p2p->cfg->ssid_postfix))
3983                 return -1;
3984         os_memcpy(p2p->cfg->ssid_postfix, postfix, len);
3985         p2p->cfg->ssid_postfix_len = len;
3986         return 0;
3987 }
3988
3989
3990 int p2p_set_oper_channel(struct p2p_data *p2p, u8 op_reg_class, u8 op_channel,
3991                          int cfg_op_channel)
3992 {
3993         if (p2p_channel_to_freq(op_reg_class, op_channel) < 0)
3994                 return -1;
3995
3996         p2p_dbg(p2p, "Set Operating channel: reg_class %u channel %u",
3997                 op_reg_class, op_channel);
3998         p2p->cfg->op_reg_class = op_reg_class;
3999         p2p->cfg->op_channel = op_channel;
4000         p2p->cfg->cfg_op_channel = cfg_op_channel;
4001         return 0;
4002 }
4003
4004
4005 int p2p_set_pref_chan(struct p2p_data *p2p, unsigned int num_pref_chan,
4006                       const struct p2p_channel *pref_chan)
4007 {
4008         struct p2p_channel *n;
4009
4010         if (pref_chan) {
4011                 n = os_malloc(num_pref_chan * sizeof(struct p2p_channel));
4012                 if (n == NULL)
4013                         return -1;
4014                 os_memcpy(n, pref_chan,
4015                           num_pref_chan * sizeof(struct p2p_channel));
4016         } else
4017                 n = NULL;
4018
4019         os_free(p2p->cfg->pref_chan);
4020         p2p->cfg->pref_chan = n;
4021         p2p->cfg->num_pref_chan = num_pref_chan;
4022
4023         return 0;
4024 }
4025
4026
4027 int p2p_set_no_go_freq(struct p2p_data *p2p,
4028                        const struct wpa_freq_range_list *list)
4029 {
4030         struct wpa_freq_range *tmp;
4031
4032         if (list == NULL || list->num == 0) {
4033                 os_free(p2p->no_go_freq.range);
4034                 p2p->no_go_freq.range = NULL;
4035                 p2p->no_go_freq.num = 0;
4036                 return 0;
4037         }
4038
4039         tmp = os_calloc(list->num, sizeof(struct wpa_freq_range));
4040         if (tmp == NULL)
4041                 return -1;
4042         os_memcpy(tmp, list->range, list->num * sizeof(struct wpa_freq_range));
4043         os_free(p2p->no_go_freq.range);
4044         p2p->no_go_freq.range = tmp;
4045         p2p->no_go_freq.num = list->num;
4046         p2p_dbg(p2p, "Updated no GO chan list");
4047
4048         return 0;
4049 }
4050
4051
4052 int p2p_get_interface_addr(struct p2p_data *p2p, const u8 *dev_addr,
4053                            u8 *iface_addr)
4054 {
4055         struct p2p_device *dev = p2p_get_device(p2p, dev_addr);
4056         if (dev == NULL || is_zero_ether_addr(dev->interface_addr))
4057                 return -1;
4058         os_memcpy(iface_addr, dev->interface_addr, ETH_ALEN);
4059         return 0;
4060 }
4061
4062
4063 int p2p_get_dev_addr(struct p2p_data *p2p, const u8 *iface_addr,
4064                            u8 *dev_addr)
4065 {
4066         struct p2p_device *dev = p2p_get_device_interface(p2p, iface_addr);
4067         if (dev == NULL)
4068                 return -1;
4069         os_memcpy(dev_addr, dev->info.p2p_device_addr, ETH_ALEN);
4070         return 0;
4071 }
4072
4073
4074 void p2p_set_peer_filter(struct p2p_data *p2p, const u8 *addr)
4075 {
4076         os_memcpy(p2p->peer_filter, addr, ETH_ALEN);
4077         if (is_zero_ether_addr(p2p->peer_filter))
4078                 p2p_dbg(p2p, "Disable peer filter");
4079         else
4080                 p2p_dbg(p2p, "Enable peer filter for " MACSTR,
4081                         MAC2STR(p2p->peer_filter));
4082 }
4083
4084
4085 void p2p_set_cross_connect(struct p2p_data *p2p, int enabled)
4086 {
4087         p2p_dbg(p2p, "Cross connection %s", enabled ? "enabled" : "disabled");
4088         if (p2p->cross_connect == enabled)
4089                 return;
4090         p2p->cross_connect = enabled;
4091         /* TODO: may need to tear down any action group where we are GO(?) */
4092 }
4093
4094
4095 int p2p_get_oper_freq(struct p2p_data *p2p, const u8 *iface_addr)
4096 {
4097         struct p2p_device *dev = p2p_get_device_interface(p2p, iface_addr);
4098         if (dev == NULL)
4099                 return -1;
4100         if (dev->oper_freq <= 0)
4101                 return -1;
4102         return dev->oper_freq;
4103 }
4104
4105
4106 void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled)
4107 {
4108         p2p_dbg(p2p, "Intra BSS distribution %s",
4109                 enabled ? "enabled" : "disabled");
4110         p2p->cfg->p2p_intra_bss = enabled;
4111 }
4112
4113
4114 void p2p_update_channel_list(struct p2p_data *p2p,
4115                              const struct p2p_channels *chan,
4116                              const struct p2p_channels *cli_chan)
4117 {
4118         p2p_dbg(p2p, "Update channel list");
4119         os_memcpy(&p2p->cfg->channels, chan, sizeof(struct p2p_channels));
4120         p2p_channels_dump(p2p, "channels", &p2p->cfg->channels);
4121         os_memcpy(&p2p->cfg->cli_channels, cli_chan,
4122                   sizeof(struct p2p_channels));
4123         p2p_channels_dump(p2p, "cli_channels", &p2p->cfg->cli_channels);
4124 }
4125
4126
4127 int p2p_send_action(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
4128                     const u8 *src, const u8 *bssid, const u8 *buf,
4129                     size_t len, unsigned int wait_time)
4130 {
4131         if (p2p->p2p_scan_running) {
4132                 p2p_dbg(p2p, "Delay Action frame TX until p2p_scan completes");
4133                 if (p2p->after_scan_tx) {
4134                         p2p_dbg(p2p, "Dropped previous pending Action frame TX");
4135                         os_free(p2p->after_scan_tx);
4136                 }
4137                 p2p->after_scan_tx = os_malloc(sizeof(*p2p->after_scan_tx) +
4138                                                len);
4139                 if (p2p->after_scan_tx == NULL)
4140                         return -1;
4141                 p2p->after_scan_tx->freq = freq;
4142                 os_memcpy(p2p->after_scan_tx->dst, dst, ETH_ALEN);
4143                 os_memcpy(p2p->after_scan_tx->src, src, ETH_ALEN);
4144                 os_memcpy(p2p->after_scan_tx->bssid, bssid, ETH_ALEN);
4145                 p2p->after_scan_tx->len = len;
4146                 p2p->after_scan_tx->wait_time = wait_time;
4147                 os_memcpy(p2p->after_scan_tx + 1, buf, len);
4148                 return 0;
4149         }
4150
4151         return p2p->cfg->send_action(p2p->cfg->cb_ctx, freq, dst, src, bssid,
4152                                      buf, len, wait_time);
4153 }
4154
4155
4156 void p2p_set_best_channels(struct p2p_data *p2p, int freq_24, int freq_5,
4157                            int freq_overall)
4158 {
4159         p2p_dbg(p2p, "Best channel: 2.4 GHz: %d,  5 GHz: %d,  overall: %d",
4160                 freq_24, freq_5, freq_overall);
4161         p2p->best_freq_24 = freq_24;
4162         p2p->best_freq_5 = freq_5;
4163         p2p->best_freq_overall = freq_overall;
4164 }
4165
4166
4167 void p2p_set_own_freq_preference(struct p2p_data *p2p, int freq)
4168 {
4169         p2p_dbg(p2p, "Own frequency preference: %d MHz", freq);
4170         p2p->own_freq_preference = freq;
4171 }
4172
4173
4174 const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p)
4175 {
4176         if (p2p == NULL || p2p->go_neg_peer == NULL)
4177                 return NULL;
4178         return p2p->go_neg_peer->info.p2p_device_addr;
4179 }
4180
4181
4182 const struct p2p_peer_info *
4183 p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next)
4184 {
4185         struct p2p_device *dev;
4186
4187         if (addr) {
4188                 dev = p2p_get_device(p2p, addr);
4189                 if (!dev)
4190                         return NULL;
4191
4192                 if (!next) {
4193                         if (dev->flags & P2P_DEV_PROBE_REQ_ONLY)
4194                                 return NULL;
4195
4196                         return &dev->info;
4197                 } else {
4198                         do {
4199                                 dev = dl_list_first(&dev->list,
4200                                                     struct p2p_device,
4201                                                     list);
4202                                 if (&dev->list == &p2p->devices)
4203                                         return NULL;
4204                         } while (dev->flags & P2P_DEV_PROBE_REQ_ONLY);
4205                 }
4206         } else {
4207                 dev = dl_list_first(&p2p->devices, struct p2p_device, list);
4208                 if (!dev)
4209                         return NULL;
4210                 while (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
4211                         dev = dl_list_first(&dev->list,
4212                                             struct p2p_device,
4213                                             list);
4214                         if (&dev->list == &p2p->devices)
4215                                 return NULL;
4216                 }
4217         }
4218
4219         return &dev->info;
4220 }
4221
4222
4223 int p2p_in_progress(struct p2p_data *p2p)
4224 {
4225         if (p2p == NULL)
4226                 return 0;
4227         if (p2p->state == P2P_SEARCH)
4228                 return 2;
4229         return p2p->state != P2P_IDLE && p2p->state != P2P_PROVISIONING;
4230 }
4231
4232
4233 void p2p_set_config_timeout(struct p2p_data *p2p, u8 go_timeout,
4234                             u8 client_timeout)
4235 {
4236         if (p2p) {
4237                 p2p->go_timeout = go_timeout;
4238                 p2p->client_timeout = client_timeout;
4239         }
4240 }
4241
4242
4243 #ifdef CONFIG_WIFI_DISPLAY
4244
4245 static void p2p_update_wfd_ie_groups(struct p2p_data *p2p)
4246 {
4247         size_t g;
4248         struct p2p_group *group;
4249
4250         for (g = 0; g < p2p->num_groups; g++) {
4251                 group = p2p->groups[g];
4252                 p2p_group_force_beacon_update_ies(group);
4253         }
4254 }
4255
4256
4257 int p2p_set_wfd_ie_beacon(struct p2p_data *p2p, struct wpabuf *ie)
4258 {
4259         wpabuf_free(p2p->wfd_ie_beacon);
4260         p2p->wfd_ie_beacon = ie;
4261         p2p_update_wfd_ie_groups(p2p);
4262         return 0;
4263 }
4264
4265
4266 int p2p_set_wfd_ie_probe_req(struct p2p_data *p2p, struct wpabuf *ie)
4267 {
4268         wpabuf_free(p2p->wfd_ie_probe_req);
4269         p2p->wfd_ie_probe_req = ie;
4270         return 0;
4271 }
4272
4273
4274 int p2p_set_wfd_ie_probe_resp(struct p2p_data *p2p, struct wpabuf *ie)
4275 {
4276         wpabuf_free(p2p->wfd_ie_probe_resp);
4277         p2p->wfd_ie_probe_resp = ie;
4278         p2p_update_wfd_ie_groups(p2p);
4279         return 0;
4280 }
4281
4282
4283 int p2p_set_wfd_ie_assoc_req(struct p2p_data *p2p, struct wpabuf *ie)
4284 {
4285         wpabuf_free(p2p->wfd_ie_assoc_req);
4286         p2p->wfd_ie_assoc_req = ie;
4287         return 0;
4288 }
4289
4290
4291 int p2p_set_wfd_ie_invitation(struct p2p_data *p2p, struct wpabuf *ie)
4292 {
4293         wpabuf_free(p2p->wfd_ie_invitation);
4294         p2p->wfd_ie_invitation = ie;
4295         return 0;
4296 }
4297
4298
4299 int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie)
4300 {
4301         wpabuf_free(p2p->wfd_ie_prov_disc_req);
4302         p2p->wfd_ie_prov_disc_req = ie;
4303         return 0;
4304 }
4305
4306
4307 int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie)
4308 {
4309         wpabuf_free(p2p->wfd_ie_prov_disc_resp);
4310         p2p->wfd_ie_prov_disc_resp = ie;
4311         return 0;
4312 }
4313
4314
4315 int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie)
4316 {
4317         wpabuf_free(p2p->wfd_ie_go_neg);
4318         p2p->wfd_ie_go_neg = ie;
4319         return 0;
4320 }
4321
4322
4323 int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem)
4324 {
4325         wpabuf_free(p2p->wfd_dev_info);
4326         if (elem) {
4327                 p2p->wfd_dev_info = wpabuf_dup(elem);
4328                 if (p2p->wfd_dev_info == NULL)
4329                         return -1;
4330         } else
4331                 p2p->wfd_dev_info = NULL;
4332
4333         return 0;
4334 }
4335
4336
4337 int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem)
4338 {
4339         wpabuf_free(p2p->wfd_assoc_bssid);
4340         if (elem) {
4341                 p2p->wfd_assoc_bssid = wpabuf_dup(elem);
4342                 if (p2p->wfd_assoc_bssid == NULL)
4343                         return -1;
4344         } else
4345                 p2p->wfd_assoc_bssid = NULL;
4346
4347         return 0;
4348 }
4349
4350
4351 int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p,
4352                                   const struct wpabuf *elem)
4353 {
4354         wpabuf_free(p2p->wfd_coupled_sink_info);
4355         if (elem) {
4356                 p2p->wfd_coupled_sink_info = wpabuf_dup(elem);
4357                 if (p2p->wfd_coupled_sink_info == NULL)
4358                         return -1;
4359         } else
4360                 p2p->wfd_coupled_sink_info = NULL;
4361
4362         return 0;
4363 }
4364
4365 #endif /* CONFIG_WIFI_DISPLAY */
4366
4367
4368 int p2p_set_disc_int(struct p2p_data *p2p, int min_disc_int, int max_disc_int,
4369                      int max_disc_tu)
4370 {
4371         if (min_disc_int > max_disc_int || min_disc_int < 0 || max_disc_int < 0)
4372                 return -1;
4373
4374         p2p->min_disc_int = min_disc_int;
4375         p2p->max_disc_int = max_disc_int;
4376         p2p->max_disc_tu = max_disc_tu;
4377         p2p_dbg(p2p, "Set discoverable interval: min=%d max=%d max_tu=%d",
4378                 min_disc_int, max_disc_int, max_disc_tu);
4379
4380         return 0;
4381 }
4382
4383
4384 void p2p_dbg(struct p2p_data *p2p, const char *fmt, ...)
4385 {
4386         va_list ap;
4387         char buf[500];
4388
4389         if (!p2p->cfg->debug_print)
4390                 return;
4391
4392         va_start(ap, fmt);
4393         vsnprintf(buf, sizeof(buf), fmt, ap);
4394         buf[sizeof(buf) - 1] = '\0';
4395         va_end(ap);
4396         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_DEBUG, buf);
4397 }
4398
4399
4400 void p2p_info(struct p2p_data *p2p, const char *fmt, ...)
4401 {
4402         va_list ap;
4403         char buf[500];
4404
4405         if (!p2p->cfg->debug_print)
4406                 return;
4407
4408         va_start(ap, fmt);
4409         vsnprintf(buf, sizeof(buf), fmt, ap);
4410         buf[sizeof(buf) - 1] = '\0';
4411         va_end(ap);
4412         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_INFO, buf);
4413 }
4414
4415
4416 void p2p_err(struct p2p_data *p2p, const char *fmt, ...)
4417 {
4418         va_list ap;
4419         char buf[500];
4420
4421         if (!p2p->cfg->debug_print)
4422                 return;
4423
4424         va_start(ap, fmt);
4425         vsnprintf(buf, sizeof(buf), fmt, ap);
4426         buf[sizeof(buf) - 1] = '\0';
4427         va_end(ap);
4428         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_ERROR, buf);
4429 }
4430
4431
4432 #ifdef CONFIG_WPS_NFC
4433
4434 static struct wpabuf * p2p_build_nfc_handover(struct p2p_data *p2p,
4435                                               int client_freq,
4436                                               const u8 *go_dev_addr,
4437                                               const u8 *ssid, size_t ssid_len)
4438 {
4439         struct wpabuf *buf;
4440         u8 op_class, channel;
4441         enum p2p_role_indication role = P2P_DEVICE_NOT_IN_GROUP;
4442
4443         buf = wpabuf_alloc(1000);
4444         if (buf == NULL)
4445                 return NULL;
4446
4447         op_class = p2p->cfg->reg_class;
4448         channel = p2p->cfg->channel;
4449
4450         p2p_buf_add_capability(buf, p2p->dev_capab &
4451                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
4452         p2p_buf_add_device_info(buf, p2p, NULL);
4453
4454         if (p2p->num_groups > 0) {
4455                 role = P2P_GO_IN_A_GROUP;
4456                 p2p_freq_to_channel(p2p_group_get_freq(p2p->groups[0]),
4457                                     &op_class, &channel);
4458         } else if (client_freq > 0) {
4459                 role = P2P_CLIENT_IN_A_GROUP;
4460                 p2p_freq_to_channel(client_freq, &op_class, &channel);
4461         }
4462
4463         p2p_buf_add_oob_go_neg_channel(buf, p2p->cfg->country, op_class,
4464                                        channel, role);
4465
4466         if (p2p->num_groups > 0) {
4467                 /* Limit number of clients to avoid very long message */
4468                 p2p_buf_add_group_info(p2p->groups[0], buf, 5);
4469                 p2p_group_buf_add_id(p2p->groups[0], buf);
4470         } else if (client_freq > 0 &&
4471                    go_dev_addr && !is_zero_ether_addr(go_dev_addr) &&
4472                    ssid && ssid_len > 0) {
4473                 /*
4474                  * Add the optional P2P Group ID to indicate in which group this
4475                  * device is a P2P Client.
4476                  */
4477                 p2p_buf_add_group_id(buf, go_dev_addr, ssid, ssid_len);
4478         }
4479
4480         return buf;
4481 }
4482
4483
4484 struct wpabuf * p2p_build_nfc_handover_req(struct p2p_data *p2p,
4485                                            int client_freq,
4486                                            const u8 *go_dev_addr,
4487                                            const u8 *ssid, size_t ssid_len)
4488 {
4489         return p2p_build_nfc_handover(p2p, client_freq, go_dev_addr, ssid,
4490                                       ssid_len);
4491 }
4492
4493
4494 struct wpabuf * p2p_build_nfc_handover_sel(struct p2p_data *p2p,
4495                                            int client_freq,
4496                                            const u8 *go_dev_addr,
4497                                            const u8 *ssid, size_t ssid_len)
4498 {
4499         return p2p_build_nfc_handover(p2p, client_freq, go_dev_addr, ssid,
4500                                       ssid_len);
4501 }
4502
4503
4504 int p2p_process_nfc_connection_handover(struct p2p_data *p2p,
4505                                         struct p2p_nfc_params *params)
4506 {
4507         struct p2p_message msg;
4508         struct p2p_device *dev;
4509         const u8 *p2p_dev_addr;
4510         int freq;
4511         enum p2p_role_indication role;
4512
4513         params->next_step = NO_ACTION;
4514
4515         if (p2p_parse_ies_separate(params->wsc_attr, params->wsc_len,
4516                                    params->p2p_attr, params->p2p_len, &msg)) {
4517                 p2p_dbg(p2p, "Failed to parse WSC/P2P attributes from NFC");
4518                 p2p_parse_free(&msg);
4519                 return -1;
4520         }
4521
4522         if (msg.p2p_device_addr)
4523                 p2p_dev_addr = msg.p2p_device_addr;
4524         else if (msg.device_id)
4525                 p2p_dev_addr = msg.device_id;
4526         else {
4527                 p2p_dbg(p2p, "Ignore scan data without P2P Device Info or P2P Device Id");
4528                 p2p_parse_free(&msg);
4529                 return -1;
4530         }
4531
4532         if (msg.oob_dev_password) {
4533                 os_memcpy(params->oob_dev_pw, msg.oob_dev_password,
4534                           msg.oob_dev_password_len);
4535                 params->oob_dev_pw_len = msg.oob_dev_password_len;
4536         }
4537
4538         dev = p2p_create_device(p2p, p2p_dev_addr);
4539         if (dev == NULL) {
4540                 p2p_parse_free(&msg);
4541                 return -1;
4542         }
4543
4544         params->peer = &dev->info;
4545
4546         os_get_reltime(&dev->last_seen);
4547         dev->flags &= ~(P2P_DEV_PROBE_REQ_ONLY | P2P_DEV_GROUP_CLIENT_ONLY);
4548         p2p_copy_wps_info(p2p, dev, 0, &msg);
4549
4550         if (!msg.oob_go_neg_channel) {
4551                 p2p_dbg(p2p, "OOB GO Negotiation Channel attribute not included");
4552                 return -1;
4553         }
4554
4555         if (msg.oob_go_neg_channel[3] == 0 &&
4556             msg.oob_go_neg_channel[4] == 0)
4557                 freq = 0;
4558         else
4559                 freq = p2p_channel_to_freq(msg.oob_go_neg_channel[3],
4560                                            msg.oob_go_neg_channel[4]);
4561         if (freq < 0) {
4562                 p2p_dbg(p2p, "Unknown peer OOB GO Neg channel");
4563                 return -1;
4564         }
4565         role = msg.oob_go_neg_channel[5];
4566
4567         if (role == P2P_GO_IN_A_GROUP) {
4568                 p2p_dbg(p2p, "Peer OOB GO operating channel: %u MHz", freq);
4569                 params->go_freq = freq;
4570         } else if (role == P2P_CLIENT_IN_A_GROUP) {
4571                 p2p_dbg(p2p, "Peer (client) OOB GO operating channel: %u MHz",
4572                         freq);
4573                 params->go_freq = freq;
4574         } else
4575                 p2p_dbg(p2p, "Peer OOB GO Neg channel: %u MHz", freq);
4576         dev->oob_go_neg_freq = freq;
4577
4578         if (!params->sel && role != P2P_GO_IN_A_GROUP) {
4579                 freq = p2p_channel_to_freq(p2p->cfg->reg_class,
4580                                            p2p->cfg->channel);
4581                 if (freq < 0) {
4582                         p2p_dbg(p2p, "Own listen channel not known");
4583                         return -1;
4584                 }
4585                 p2p_dbg(p2p, "Use own Listen channel as OOB GO Neg channel: %u MHz", freq);
4586                 dev->oob_go_neg_freq = freq;
4587         }
4588
4589         if (msg.group_id) {
4590                 os_memcpy(params->go_dev_addr, msg.group_id, ETH_ALEN);
4591                 params->go_ssid_len = msg.group_id_len - ETH_ALEN;
4592                 os_memcpy(params->go_ssid, msg.group_id + ETH_ALEN,
4593                           params->go_ssid_len);
4594         }
4595
4596         p2p_parse_free(&msg);
4597
4598         if (dev->flags & P2P_DEV_USER_REJECTED) {
4599                 p2p_dbg(p2p, "Do not report rejected device");
4600                 return 0;
4601         }
4602
4603         if (!(dev->flags & P2P_DEV_REPORTED)) {
4604                 p2p->cfg->dev_found(p2p->cfg->cb_ctx, p2p_dev_addr, &dev->info,
4605                                     !(dev->flags & P2P_DEV_REPORTED_ONCE));
4606                 dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
4607         }
4608
4609         if (role == P2P_GO_IN_A_GROUP && p2p->num_groups > 0)
4610                 params->next_step = BOTH_GO;
4611         else if (role == P2P_GO_IN_A_GROUP)
4612                 params->next_step = JOIN_GROUP;
4613         else if (role == P2P_CLIENT_IN_A_GROUP) {
4614                 dev->flags |= P2P_DEV_GROUP_CLIENT_ONLY;
4615                 params->next_step = PEER_CLIENT;
4616         } else if (p2p->num_groups > 0)
4617                 params->next_step = AUTH_JOIN;
4618         else if (params->sel)
4619                 params->next_step = INIT_GO_NEG;
4620         else
4621                 params->next_step = RESP_GO_NEG;
4622
4623         return 0;
4624 }
4625
4626
4627 void p2p_set_authorized_oob_dev_pw_id(struct p2p_data *p2p, u16 dev_pw_id,
4628                                       int go_intent,
4629                                       const u8 *own_interface_addr)
4630 {
4631
4632         p2p->authorized_oob_dev_pw_id = dev_pw_id;
4633         if (dev_pw_id == 0) {
4634                 p2p_dbg(p2p, "NFC OOB Password unauthorized for static handover");
4635                 return;
4636         }
4637
4638         p2p_dbg(p2p, "NFC OOB Password (id=%u) authorized for static handover",
4639                 dev_pw_id);
4640
4641         p2p->go_intent = go_intent;
4642         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
4643 }
4644
4645 #endif /* CONFIG_WPS_NFC */