P2P: Update op_reg_class in random social channel case
[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                         p2p->op_reg_class = 81;
1234                         op_chan = op_chans;
1235                 } else {
1236                         struct p2p_reg_class *class;
1237
1238                         /* Select any random available channel from the first
1239                          * operating class */
1240                         p2p_dbg(p2p, "Select random available channel from operating class %d as operating channel preference",
1241                                 p2p->op_reg_class);
1242                         class = &p2p->cfg->channels.reg_class[0];
1243                         p2p->op_reg_class = class->reg_class;
1244                         op_chan = &class->channel[0];
1245                         num_channels = class->channels;
1246                         if (num_channels == 0) {
1247                                 /* Should not happen, but make sure we do not
1248                                  * try to divide by zero */
1249                                 op_chan = op_chans;
1250                                 op_chans[0] = 1;
1251                                 num_channels = 1;
1252                         }
1253                 }
1254                 os_get_random((u8 *) &r, sizeof(r));
1255                 r %= num_channels;
1256                 p2p->op_channel = op_chan[r];
1257         }
1258
1259         os_memcpy(&p2p->channels, &p2p->cfg->channels,
1260                   sizeof(struct p2p_channels));
1261 }
1262
1263
1264 /**
1265  * p2p_prepare_channel - Select operating channel for GO Negotiation
1266  * @p2p: P2P module context from p2p_init()
1267  * @dev: Selected peer device
1268  * @force_freq: Forced frequency in MHz or 0 if not forced
1269  * @pref_freq: Preferred frequency in MHz or 0 if no preference
1270  * @go: Whether the local end will be forced to be GO
1271  * Returns: 0 on success, -1 on failure (channel not supported for P2P)
1272  *
1273  * This function is used to do initial operating channel selection for GO
1274  * Negotiation prior to having received peer information. The selected channel
1275  * may be further optimized in p2p_reselect_channel() once the peer information
1276  * is available.
1277  */
1278 int p2p_prepare_channel(struct p2p_data *p2p, struct p2p_device *dev,
1279                         unsigned int force_freq, unsigned int pref_freq, int go)
1280 {
1281         p2p_dbg(p2p, "Prepare channel - force_freq=%u pref_freq=%u go=%d",
1282                 force_freq, pref_freq, go);
1283         if (force_freq || pref_freq) {
1284                 if (p2p_prepare_channel_pref(p2p, force_freq, pref_freq, go) <
1285                     0)
1286                         return -1;
1287         } else {
1288                 p2p_prepare_channel_best(p2p);
1289         }
1290         p2p_channels_dump(p2p, "prepared channels", &p2p->channels);
1291         if (go)
1292                 p2p_channels_remove_freqs(&p2p->channels, &p2p->no_go_freq);
1293         else if (!force_freq)
1294                 p2p_channels_union(&p2p->channels, &p2p->cfg->cli_channels,
1295                                    &p2p->channels);
1296         p2p_channels_dump(p2p, "after go/cli filter/add", &p2p->channels);
1297
1298         p2p_dbg(p2p, "Own preference for operation channel: Operating Class %u Channel %u%s",
1299                 p2p->op_reg_class, p2p->op_channel,
1300                 force_freq ? " (forced)" : "");
1301
1302         if (force_freq)
1303                 dev->flags |= P2P_DEV_FORCE_FREQ;
1304         else
1305                 dev->flags &= ~P2P_DEV_FORCE_FREQ;
1306
1307         return 0;
1308 }
1309
1310
1311 static void p2p_set_dev_persistent(struct p2p_device *dev,
1312                                    int persistent_group)
1313 {
1314         switch (persistent_group) {
1315         case 0:
1316                 dev->flags &= ~(P2P_DEV_PREFER_PERSISTENT_GROUP |
1317                                 P2P_DEV_PREFER_PERSISTENT_RECONN);
1318                 break;
1319         case 1:
1320                 dev->flags |= P2P_DEV_PREFER_PERSISTENT_GROUP;
1321                 dev->flags &= ~P2P_DEV_PREFER_PERSISTENT_RECONN;
1322                 break;
1323         case 2:
1324                 dev->flags |= P2P_DEV_PREFER_PERSISTENT_GROUP |
1325                         P2P_DEV_PREFER_PERSISTENT_RECONN;
1326                 break;
1327         }
1328 }
1329
1330
1331 int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
1332                 enum p2p_wps_method wps_method,
1333                 int go_intent, const u8 *own_interface_addr,
1334                 unsigned int force_freq, int persistent_group,
1335                 const u8 *force_ssid, size_t force_ssid_len,
1336                 int pd_before_go_neg, unsigned int pref_freq, u16 oob_pw_id)
1337 {
1338         struct p2p_device *dev;
1339
1340         p2p_dbg(p2p, "Request to start group negotiation - peer=" MACSTR
1341                 "  GO Intent=%d  Intended Interface Address=" MACSTR
1342                 " wps_method=%d persistent_group=%d pd_before_go_neg=%d "
1343                 "oob_pw_id=%u",
1344                 MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
1345                 wps_method, persistent_group, pd_before_go_neg, oob_pw_id);
1346
1347         dev = p2p_get_device(p2p, peer_addr);
1348         if (dev == NULL || (dev->flags & P2P_DEV_PROBE_REQ_ONLY)) {
1349                 p2p_dbg(p2p, "Cannot connect to unknown P2P Device " MACSTR,
1350                         MAC2STR(peer_addr));
1351                 return -1;
1352         }
1353
1354         if (p2p_prepare_channel(p2p, dev, force_freq, pref_freq,
1355                                 go_intent == 15) < 0)
1356                 return -1;
1357
1358         if (dev->flags & P2P_DEV_GROUP_CLIENT_ONLY) {
1359                 if (!(dev->info.dev_capab &
1360                       P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY)) {
1361                         p2p_dbg(p2p, "Cannot connect to P2P Device " MACSTR
1362                                 " that is in a group and is not discoverable",
1363                                 MAC2STR(peer_addr));
1364                         return -1;
1365                 }
1366                 if (dev->oper_freq <= 0) {
1367                         p2p_dbg(p2p, "Cannot connect to P2P Device " MACSTR
1368                                 " with incomplete information",
1369                                 MAC2STR(peer_addr));
1370                         return -1;
1371                 }
1372
1373                 /*
1374                  * First, try to connect directly. If the peer does not
1375                  * acknowledge frames, assume it is sleeping and use device
1376                  * discoverability via the GO at that point.
1377                  */
1378         }
1379
1380         p2p->ssid_set = 0;
1381         if (force_ssid) {
1382                 wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
1383                                   force_ssid, force_ssid_len);
1384                 os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
1385                 p2p->ssid_len = force_ssid_len;
1386                 p2p->ssid_set = 1;
1387         }
1388
1389         dev->flags &= ~P2P_DEV_NOT_YET_READY;
1390         dev->flags &= ~P2P_DEV_USER_REJECTED;
1391         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
1392         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_CONFIRM;
1393         if (pd_before_go_neg)
1394                 dev->flags |= P2P_DEV_PD_BEFORE_GO_NEG;
1395         else {
1396                 dev->flags &= ~P2P_DEV_PD_BEFORE_GO_NEG;
1397                 /*
1398                  * Assign dialog token and tie breaker here to use the same
1399                  * values in each retry within the same GO Negotiation exchange.
1400                  */
1401                 dev->dialog_token++;
1402                 if (dev->dialog_token == 0)
1403                         dev->dialog_token = 1;
1404                 dev->tie_breaker = p2p->next_tie_breaker;
1405                 p2p->next_tie_breaker = !p2p->next_tie_breaker;
1406         }
1407         dev->connect_reqs = 0;
1408         dev->go_neg_req_sent = 0;
1409         dev->go_state = UNKNOWN_GO;
1410         p2p_set_dev_persistent(dev, persistent_group);
1411         p2p->go_intent = go_intent;
1412         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
1413
1414         if (p2p->state != P2P_IDLE)
1415                 p2p_stop_find(p2p);
1416
1417         if (p2p->after_scan_tx) {
1418                 /*
1419                  * We need to drop the pending frame to avoid issues with the
1420                  * new GO Negotiation, e.g., when the pending frame was from a
1421                  * previous attempt at starting a GO Negotiation.
1422                  */
1423                 p2p_dbg(p2p, "Dropped previous pending Action frame TX that was waiting for p2p_scan completion");
1424                 os_free(p2p->after_scan_tx);
1425                 p2p->after_scan_tx = NULL;
1426         }
1427
1428         dev->wps_method = wps_method;
1429         dev->oob_pw_id = oob_pw_id;
1430         dev->status = P2P_SC_SUCCESS;
1431
1432         if (p2p->p2p_scan_running) {
1433                 p2p_dbg(p2p, "p2p_scan running - delay connect send");
1434                 p2p->start_after_scan = P2P_AFTER_SCAN_CONNECT;
1435                 os_memcpy(p2p->after_scan_peer, peer_addr, ETH_ALEN);
1436                 return 0;
1437         }
1438         p2p->start_after_scan = P2P_AFTER_SCAN_NOTHING;
1439
1440         return p2p_connect_send(p2p, dev);
1441 }
1442
1443
1444 int p2p_authorize(struct p2p_data *p2p, const u8 *peer_addr,
1445                   enum p2p_wps_method wps_method,
1446                   int go_intent, const u8 *own_interface_addr,
1447                   unsigned int force_freq, int persistent_group,
1448                   const u8 *force_ssid, size_t force_ssid_len,
1449                   unsigned int pref_freq, u16 oob_pw_id)
1450 {
1451         struct p2p_device *dev;
1452
1453         p2p_dbg(p2p, "Request to authorize group negotiation - peer=" MACSTR
1454                 "  GO Intent=%d  Intended Interface Address=" MACSTR
1455                 " wps_method=%d  persistent_group=%d oob_pw_id=%u",
1456                 MAC2STR(peer_addr), go_intent, MAC2STR(own_interface_addr),
1457                 wps_method, persistent_group, oob_pw_id);
1458
1459         dev = p2p_get_device(p2p, peer_addr);
1460         if (dev == NULL) {
1461                 p2p_dbg(p2p, "Cannot authorize unknown P2P Device " MACSTR,
1462                         MAC2STR(peer_addr));
1463                 return -1;
1464         }
1465
1466         if (p2p_prepare_channel(p2p, dev, force_freq, pref_freq, go_intent ==
1467                                 15) < 0)
1468                 return -1;
1469
1470         p2p->ssid_set = 0;
1471         if (force_ssid) {
1472                 wpa_hexdump_ascii(MSG_DEBUG, "P2P: Forced SSID",
1473                                   force_ssid, force_ssid_len);
1474                 os_memcpy(p2p->ssid, force_ssid, force_ssid_len);
1475                 p2p->ssid_len = force_ssid_len;
1476                 p2p->ssid_set = 1;
1477         }
1478
1479         dev->flags &= ~P2P_DEV_NOT_YET_READY;
1480         dev->flags &= ~P2P_DEV_USER_REJECTED;
1481         dev->go_neg_req_sent = 0;
1482         dev->go_state = UNKNOWN_GO;
1483         p2p_set_dev_persistent(dev, persistent_group);
1484         p2p->go_intent = go_intent;
1485         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
1486
1487         dev->wps_method = wps_method;
1488         dev->oob_pw_id = oob_pw_id;
1489         dev->status = P2P_SC_SUCCESS;
1490
1491         return 0;
1492 }
1493
1494
1495 void p2p_add_dev_info(struct p2p_data *p2p, const u8 *addr,
1496                       struct p2p_device *dev, struct p2p_message *msg)
1497 {
1498         os_get_reltime(&dev->last_seen);
1499
1500         p2p_copy_wps_info(p2p, dev, 0, msg);
1501
1502         if (msg->listen_channel) {
1503                 int freq;
1504                 freq = p2p_channel_to_freq(msg->listen_channel[3],
1505                                            msg->listen_channel[4]);
1506                 if (freq < 0) {
1507                         p2p_dbg(p2p, "Unknown peer Listen channel: "
1508                                 "country=%c%c(0x%02x) reg_class=%u channel=%u",
1509                                 msg->listen_channel[0],
1510                                 msg->listen_channel[1],
1511                                 msg->listen_channel[2],
1512                                 msg->listen_channel[3],
1513                                 msg->listen_channel[4]);
1514                 } else {
1515                         p2p_dbg(p2p, "Update peer " MACSTR
1516                                 " Listen channel: %u -> %u MHz",
1517                                 MAC2STR(dev->info.p2p_device_addr),
1518                                 dev->listen_freq, freq);
1519                         dev->listen_freq = freq;
1520                 }
1521         }
1522
1523         if (msg->wfd_subelems) {
1524                 wpabuf_free(dev->info.wfd_subelems);
1525                 dev->info.wfd_subelems = wpabuf_dup(msg->wfd_subelems);
1526         }
1527
1528         if (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
1529                 dev->flags &= ~P2P_DEV_PROBE_REQ_ONLY;
1530                 p2p_dbg(p2p, "Completed device entry based on data from GO Negotiation Request");
1531         } else {
1532                 p2p_dbg(p2p, "Created device entry based on GO Neg Req: "
1533                         MACSTR " dev_capab=0x%x group_capab=0x%x name='%s' "
1534                         "listen_freq=%d",
1535                         MAC2STR(dev->info.p2p_device_addr),
1536                         dev->info.dev_capab, dev->info.group_capab,
1537                         dev->info.device_name, dev->listen_freq);
1538         }
1539
1540         dev->flags &= ~P2P_DEV_GROUP_CLIENT_ONLY;
1541
1542         if (dev->flags & P2P_DEV_USER_REJECTED) {
1543                 p2p_dbg(p2p, "Do not report rejected device");
1544                 return;
1545         }
1546
1547         p2p->cfg->dev_found(p2p->cfg->cb_ctx, addr, &dev->info,
1548                             !(dev->flags & P2P_DEV_REPORTED_ONCE));
1549         dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
1550 }
1551
1552
1553 void p2p_build_ssid(struct p2p_data *p2p, u8 *ssid, size_t *ssid_len)
1554 {
1555         os_memcpy(ssid, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN);
1556         p2p_random((char *) &ssid[P2P_WILDCARD_SSID_LEN], 2);
1557         os_memcpy(&ssid[P2P_WILDCARD_SSID_LEN + 2],
1558                   p2p->cfg->ssid_postfix, p2p->cfg->ssid_postfix_len);
1559         *ssid_len = P2P_WILDCARD_SSID_LEN + 2 + p2p->cfg->ssid_postfix_len;
1560 }
1561
1562
1563 int p2p_go_params(struct p2p_data *p2p, struct p2p_go_neg_results *params)
1564 {
1565         p2p_build_ssid(p2p, params->ssid, &params->ssid_len);
1566         p2p_random(params->passphrase, 8);
1567         return 0;
1568 }
1569
1570
1571 void p2p_go_complete(struct p2p_data *p2p, struct p2p_device *peer)
1572 {
1573         struct p2p_go_neg_results res;
1574         int go = peer->go_state == LOCAL_GO;
1575         struct p2p_channels intersection;
1576         int freqs;
1577         size_t i, j;
1578
1579         p2p_dbg(p2p, "GO Negotiation with " MACSTR " completed (%s will be GO)",
1580                 MAC2STR(peer->info.p2p_device_addr), go ? "local end" : "peer");
1581
1582         os_memset(&res, 0, sizeof(res));
1583         res.role_go = go;
1584         os_memcpy(res.peer_device_addr, peer->info.p2p_device_addr, ETH_ALEN);
1585         os_memcpy(res.peer_interface_addr, peer->intended_addr, ETH_ALEN);
1586         res.wps_method = peer->wps_method;
1587         if (peer->flags & P2P_DEV_PREFER_PERSISTENT_GROUP) {
1588                 if (peer->flags & P2P_DEV_PREFER_PERSISTENT_RECONN)
1589                         res.persistent_group = 2;
1590                 else
1591                         res.persistent_group = 1;
1592         }
1593
1594         if (go) {
1595                 /* Setup AP mode for WPS provisioning */
1596                 res.freq = p2p_channel_to_freq(p2p->op_reg_class,
1597                                                p2p->op_channel);
1598                 os_memcpy(res.ssid, p2p->ssid, p2p->ssid_len);
1599                 res.ssid_len = p2p->ssid_len;
1600                 p2p_random(res.passphrase, 8);
1601         } else {
1602                 res.freq = peer->oper_freq;
1603                 if (p2p->ssid_len) {
1604                         os_memcpy(res.ssid, p2p->ssid, p2p->ssid_len);
1605                         res.ssid_len = p2p->ssid_len;
1606                 }
1607         }
1608
1609         p2p_channels_dump(p2p, "own channels", &p2p->channels);
1610         p2p_channels_dump(p2p, "peer channels", &peer->channels);
1611         p2p_channels_intersect(&p2p->channels, &peer->channels,
1612                                &intersection);
1613         if (go) {
1614                 p2p_channels_remove_freqs(&intersection, &p2p->no_go_freq);
1615                 p2p_channels_dump(p2p, "intersection after no-GO removal",
1616                                   &intersection);
1617         }
1618         freqs = 0;
1619         for (i = 0; i < intersection.reg_classes; i++) {
1620                 struct p2p_reg_class *c = &intersection.reg_class[i];
1621                 if (freqs + 1 == P2P_MAX_CHANNELS)
1622                         break;
1623                 for (j = 0; j < c->channels; j++) {
1624                         int freq;
1625                         if (freqs + 1 == P2P_MAX_CHANNELS)
1626                                 break;
1627                         freq = p2p_channel_to_freq(c->reg_class, c->channel[j]);
1628                         if (freq < 0)
1629                                 continue;
1630                         res.freq_list[freqs++] = freq;
1631                 }
1632         }
1633
1634         res.peer_config_timeout = go ? peer->client_timeout : peer->go_timeout;
1635
1636         p2p_clear_timeout(p2p);
1637         p2p->ssid_set = 0;
1638         peer->go_neg_req_sent = 0;
1639         peer->wps_method = WPS_NOT_READY;
1640         peer->oob_pw_id = 0;
1641
1642         p2p_set_state(p2p, P2P_PROVISIONING);
1643         p2p->cfg->go_neg_completed(p2p->cfg->cb_ctx, &res);
1644 }
1645
1646
1647 static void p2p_rx_p2p_action(struct p2p_data *p2p, const u8 *sa,
1648                               const u8 *data, size_t len, int rx_freq)
1649 {
1650         p2p_dbg(p2p, "RX P2P Public Action from " MACSTR, MAC2STR(sa));
1651         wpa_hexdump(MSG_MSGDUMP, "P2P: P2P Public Action contents", data, len);
1652
1653         if (len < 1)
1654                 return;
1655
1656         switch (data[0]) {
1657         case P2P_GO_NEG_REQ:
1658                 p2p_process_go_neg_req(p2p, sa, data + 1, len - 1, rx_freq);
1659                 break;
1660         case P2P_GO_NEG_RESP:
1661                 p2p_process_go_neg_resp(p2p, sa, data + 1, len - 1, rx_freq);
1662                 break;
1663         case P2P_GO_NEG_CONF:
1664                 p2p_process_go_neg_conf(p2p, sa, data + 1, len - 1);
1665                 break;
1666         case P2P_INVITATION_REQ:
1667                 p2p_process_invitation_req(p2p, sa, data + 1, len - 1,
1668                                            rx_freq);
1669                 break;
1670         case P2P_INVITATION_RESP:
1671                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
1672                 p2p_process_invitation_resp(p2p, sa, data + 1, len - 1);
1673                 break;
1674         case P2P_PROV_DISC_REQ:
1675                 p2p_process_prov_disc_req(p2p, sa, data + 1, len - 1, rx_freq);
1676                 break;
1677         case P2P_PROV_DISC_RESP:
1678                 p2p_process_prov_disc_resp(p2p, sa, data + 1, len - 1);
1679                 break;
1680         case P2P_DEV_DISC_REQ:
1681                 p2p_process_dev_disc_req(p2p, sa, data + 1, len - 1, rx_freq);
1682                 break;
1683         case P2P_DEV_DISC_RESP:
1684                 p2p_process_dev_disc_resp(p2p, sa, data + 1, len - 1);
1685                 break;
1686         default:
1687                 p2p_dbg(p2p, "Unsupported P2P Public Action frame type %d",
1688                         data[0]);
1689                 break;
1690         }
1691 }
1692
1693
1694 static void p2p_rx_action_public(struct p2p_data *p2p, const u8 *da,
1695                                  const u8 *sa, const u8 *bssid, const u8 *data,
1696                                  size_t len, int freq)
1697 {
1698         if (len < 1)
1699                 return;
1700
1701         switch (data[0]) {
1702         case WLAN_PA_VENDOR_SPECIFIC:
1703                 data++;
1704                 len--;
1705                 if (len < 4)
1706                         return;
1707                 if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
1708                         return;
1709
1710                 data += 4;
1711                 len -= 4;
1712
1713                 p2p_rx_p2p_action(p2p, sa, data, len, freq);
1714                 break;
1715         case WLAN_PA_GAS_INITIAL_REQ:
1716                 p2p_rx_gas_initial_req(p2p, sa, data + 1, len - 1, freq);
1717                 break;
1718         case WLAN_PA_GAS_INITIAL_RESP:
1719                 p2p_rx_gas_initial_resp(p2p, sa, data + 1, len - 1, freq);
1720                 break;
1721         case WLAN_PA_GAS_COMEBACK_REQ:
1722                 p2p_rx_gas_comeback_req(p2p, sa, data + 1, len - 1, freq);
1723                 break;
1724         case WLAN_PA_GAS_COMEBACK_RESP:
1725                 p2p_rx_gas_comeback_resp(p2p, sa, data + 1, len - 1, freq);
1726                 break;
1727         }
1728 }
1729
1730
1731 void p2p_rx_action(struct p2p_data *p2p, const u8 *da, const u8 *sa,
1732                    const u8 *bssid, u8 category,
1733                    const u8 *data, size_t len, int freq)
1734 {
1735         if (category == WLAN_ACTION_PUBLIC) {
1736                 p2p_rx_action_public(p2p, da, sa, bssid, data, len, freq);
1737                 return;
1738         }
1739
1740         if (category != WLAN_ACTION_VENDOR_SPECIFIC)
1741                 return;
1742
1743         if (len < 4)
1744                 return;
1745
1746         if (WPA_GET_BE32(data) != P2P_IE_VENDOR_TYPE)
1747                 return;
1748         data += 4;
1749         len -= 4;
1750
1751         /* P2P action frame */
1752         p2p_dbg(p2p, "RX P2P Action from " MACSTR, MAC2STR(sa));
1753         wpa_hexdump(MSG_MSGDUMP, "P2P: P2P Action contents", data, len);
1754
1755         if (len < 1)
1756                 return;
1757         switch (data[0]) {
1758         case P2P_NOA:
1759                 p2p_dbg(p2p, "Received P2P Action - Notice of Absence");
1760                 /* TODO */
1761                 break;
1762         case P2P_PRESENCE_REQ:
1763                 p2p_process_presence_req(p2p, da, sa, data + 1, len - 1, freq);
1764                 break;
1765         case P2P_PRESENCE_RESP:
1766                 p2p_process_presence_resp(p2p, da, sa, data + 1, len - 1);
1767                 break;
1768         case P2P_GO_DISC_REQ:
1769                 p2p_process_go_disc_req(p2p, da, sa, data + 1, len - 1, freq);
1770                 break;
1771         default:
1772                 p2p_dbg(p2p, "Received P2P Action - unknown type %u", data[0]);
1773                 break;
1774         }
1775 }
1776
1777
1778 static void p2p_go_neg_start(void *eloop_ctx, void *timeout_ctx)
1779 {
1780         struct p2p_data *p2p = eloop_ctx;
1781         if (p2p->go_neg_peer == NULL)
1782                 return;
1783         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1784         p2p->go_neg_peer->status = P2P_SC_SUCCESS;
1785         p2p_connect_send(p2p, p2p->go_neg_peer);
1786 }
1787
1788
1789 static void p2p_invite_start(void *eloop_ctx, void *timeout_ctx)
1790 {
1791         struct p2p_data *p2p = eloop_ctx;
1792         if (p2p->invite_peer == NULL)
1793                 return;
1794         p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
1795         p2p_invite_send(p2p, p2p->invite_peer, p2p->invite_go_dev_addr,
1796                         p2p->invite_dev_pw_id);
1797 }
1798
1799
1800 static void p2p_add_dev_from_probe_req(struct p2p_data *p2p, const u8 *addr,
1801                                        const u8 *ie, size_t ie_len)
1802 {
1803         struct p2p_message msg;
1804         struct p2p_device *dev;
1805
1806         os_memset(&msg, 0, sizeof(msg));
1807         if (p2p_parse_ies(ie, ie_len, &msg) < 0 || msg.p2p_attributes == NULL)
1808         {
1809                 p2p_parse_free(&msg);
1810                 return; /* not a P2P probe */
1811         }
1812
1813         if (msg.ssid == NULL || msg.ssid[1] != P2P_WILDCARD_SSID_LEN ||
1814             os_memcmp(msg.ssid + 2, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN)
1815             != 0) {
1816                 /* The Probe Request is not part of P2P Device Discovery. It is
1817                  * not known whether the source address of the frame is the P2P
1818                  * Device Address or P2P Interface Address. Do not add a new
1819                  * peer entry based on this frames.
1820                  */
1821                 p2p_parse_free(&msg);
1822                 return;
1823         }
1824
1825         dev = p2p_get_device(p2p, addr);
1826         if (dev) {
1827                 if (dev->country[0] == 0 && msg.listen_channel)
1828                         os_memcpy(dev->country, msg.listen_channel, 3);
1829                 os_get_reltime(&dev->last_seen);
1830                 p2p_parse_free(&msg);
1831                 return; /* already known */
1832         }
1833
1834         dev = p2p_create_device(p2p, addr);
1835         if (dev == NULL) {
1836                 p2p_parse_free(&msg);
1837                 return;
1838         }
1839
1840         os_get_reltime(&dev->last_seen);
1841         dev->flags |= P2P_DEV_PROBE_REQ_ONLY;
1842
1843         if (msg.listen_channel) {
1844                 os_memcpy(dev->country, msg.listen_channel, 3);
1845                 dev->listen_freq = p2p_channel_to_freq(msg.listen_channel[3],
1846                                                        msg.listen_channel[4]);
1847         }
1848
1849         p2p_copy_wps_info(p2p, dev, 1, &msg);
1850
1851         if (msg.wfd_subelems) {
1852                 wpabuf_free(dev->info.wfd_subelems);
1853                 dev->info.wfd_subelems = wpabuf_dup(msg.wfd_subelems);
1854         }
1855
1856         p2p_parse_free(&msg);
1857
1858         p2p_dbg(p2p, "Created device entry based on Probe Req: " MACSTR
1859                 " dev_capab=0x%x group_capab=0x%x name='%s' listen_freq=%d",
1860                 MAC2STR(dev->info.p2p_device_addr), dev->info.dev_capab,
1861                 dev->info.group_capab, dev->info.device_name,
1862                 dev->listen_freq);
1863 }
1864
1865
1866 struct p2p_device * p2p_add_dev_from_go_neg_req(struct p2p_data *p2p,
1867                                                 const u8 *addr,
1868                                                 struct p2p_message *msg)
1869 {
1870         struct p2p_device *dev;
1871
1872         dev = p2p_get_device(p2p, addr);
1873         if (dev) {
1874                 os_get_reltime(&dev->last_seen);
1875                 return dev; /* already known */
1876         }
1877
1878         dev = p2p_create_device(p2p, addr);
1879         if (dev == NULL)
1880                 return NULL;
1881
1882         p2p_add_dev_info(p2p, addr, dev, msg);
1883
1884         return dev;
1885 }
1886
1887
1888 static int dev_type_match(const u8 *dev_type, const u8 *req_dev_type)
1889 {
1890         if (os_memcmp(dev_type, req_dev_type, WPS_DEV_TYPE_LEN) == 0)
1891                 return 1;
1892         if (os_memcmp(dev_type, req_dev_type, 2) == 0 &&
1893             WPA_GET_BE32(&req_dev_type[2]) == 0 &&
1894             WPA_GET_BE16(&req_dev_type[6]) == 0)
1895                 return 1; /* Category match with wildcard OUI/sub-category */
1896         return 0;
1897 }
1898
1899
1900 int dev_type_list_match(const u8 *dev_type, const u8 *req_dev_type[],
1901                         size_t num_req_dev_type)
1902 {
1903         size_t i;
1904         for (i = 0; i < num_req_dev_type; i++) {
1905                 if (dev_type_match(dev_type, req_dev_type[i]))
1906                         return 1;
1907         }
1908         return 0;
1909 }
1910
1911
1912 /**
1913  * p2p_match_dev_type - Match local device type with requested type
1914  * @p2p: P2P module context from p2p_init()
1915  * @wps: WPS TLVs from Probe Request frame (concatenated WPS IEs)
1916  * Returns: 1 on match, 0 on mismatch
1917  *
1918  * This function can be used to match the Requested Device Type attribute in
1919  * WPS IE with the local device types for deciding whether to reply to a Probe
1920  * Request frame.
1921  */
1922 int p2p_match_dev_type(struct p2p_data *p2p, struct wpabuf *wps)
1923 {
1924         struct wps_parse_attr attr;
1925         size_t i;
1926
1927         if (wps_parse_msg(wps, &attr))
1928                 return 1; /* assume no Requested Device Type attributes */
1929
1930         if (attr.num_req_dev_type == 0)
1931                 return 1; /* no Requested Device Type attributes -> match */
1932
1933         if (dev_type_list_match(p2p->cfg->pri_dev_type, attr.req_dev_type,
1934                                 attr.num_req_dev_type))
1935                 return 1; /* Own Primary Device Type matches */
1936
1937         for (i = 0; i < p2p->cfg->num_sec_dev_types; i++)
1938                 if (dev_type_list_match(p2p->cfg->sec_dev_type[i],
1939                                         attr.req_dev_type,
1940                                         attr.num_req_dev_type))
1941                 return 1; /* Own Secondary Device Type matches */
1942
1943         /* No matching device type found */
1944         return 0;
1945 }
1946
1947
1948 struct wpabuf * p2p_build_probe_resp_ies(struct p2p_data *p2p)
1949 {
1950         struct wpabuf *buf;
1951         u8 *len;
1952         int pw_id = -1;
1953         size_t extra = 0;
1954
1955 #ifdef CONFIG_WIFI_DISPLAY
1956         if (p2p->wfd_ie_probe_resp)
1957                 extra = wpabuf_len(p2p->wfd_ie_probe_resp);
1958 #endif /* CONFIG_WIFI_DISPLAY */
1959
1960         buf = wpabuf_alloc(1000 + extra);
1961         if (buf == NULL)
1962                 return NULL;
1963
1964         if (p2p->go_neg_peer) {
1965                 /* Advertise immediate availability of WPS credential */
1966                 pw_id = p2p_wps_method_pw_id(p2p->go_neg_peer->wps_method);
1967         }
1968
1969         if (p2p_build_wps_ie(p2p, buf, pw_id, 1) < 0) {
1970                 p2p_dbg(p2p, "Failed to build WPS IE for Probe Response");
1971                 wpabuf_free(buf);
1972                 return NULL;
1973         }
1974
1975 #ifdef CONFIG_WIFI_DISPLAY
1976         if (p2p->wfd_ie_probe_resp)
1977                 wpabuf_put_buf(buf, p2p->wfd_ie_probe_resp);
1978 #endif /* CONFIG_WIFI_DISPLAY */
1979
1980         /* P2P IE */
1981         len = p2p_buf_add_ie_hdr(buf);
1982         p2p_buf_add_capability(buf, p2p->dev_capab &
1983                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
1984         if (p2p->ext_listen_interval)
1985                 p2p_buf_add_ext_listen_timing(buf, p2p->ext_listen_period,
1986                                               p2p->ext_listen_interval);
1987         p2p_buf_add_device_info(buf, p2p, NULL);
1988         p2p_buf_update_ie_hdr(buf, len);
1989
1990         return buf;
1991 }
1992
1993
1994 static enum p2p_probe_req_status
1995 p2p_reply_probe(struct p2p_data *p2p, const u8 *addr, const u8 *dst,
1996                 const u8 *bssid, const u8 *ie, size_t ie_len)
1997 {
1998         struct ieee802_11_elems elems;
1999         struct wpabuf *buf;
2000         struct ieee80211_mgmt *resp;
2001         struct p2p_message msg;
2002         struct wpabuf *ies;
2003
2004         if (!p2p->in_listen || !p2p->drv_in_listen) {
2005                 /* not in Listen state - ignore Probe Request */
2006                 p2p_dbg(p2p, "Not in Listen state (in_listen=%d drv_in_listen=%d) - ignore Probe Request",
2007                         p2p->in_listen, p2p->drv_in_listen);
2008                 return P2P_PREQ_NOT_LISTEN;
2009         }
2010
2011         if (ieee802_11_parse_elems((u8 *) ie, ie_len, &elems, 0) ==
2012             ParseFailed) {
2013                 /* Ignore invalid Probe Request frames */
2014                 p2p_dbg(p2p, "Could not parse Probe Request frame - ignore it");
2015                 return P2P_PREQ_MALFORMED;
2016         }
2017
2018         if (elems.p2p == NULL) {
2019                 /* not a P2P probe - ignore it */
2020                 p2p_dbg(p2p, "Not a P2P probe - ignore it");
2021                 return P2P_PREQ_NOT_P2P;
2022         }
2023
2024         if (dst && !is_broadcast_ether_addr(dst) &&
2025             os_memcmp(dst, p2p->cfg->dev_addr, ETH_ALEN) != 0) {
2026                 /* Not sent to the broadcast address or our P2P Device Address
2027                  */
2028                 p2p_dbg(p2p, "Probe Req DA " MACSTR " not ours - ignore it",
2029                         MAC2STR(dst));
2030                 return P2P_PREQ_NOT_PROCESSED;
2031         }
2032
2033         if (bssid && !is_broadcast_ether_addr(bssid)) {
2034                 /* Not sent to the Wildcard BSSID */
2035                 p2p_dbg(p2p, "Probe Req BSSID " MACSTR " not wildcard - ignore it",
2036                         MAC2STR(bssid));
2037                 return P2P_PREQ_NOT_PROCESSED;
2038         }
2039
2040         if (elems.ssid == NULL || elems.ssid_len != P2P_WILDCARD_SSID_LEN ||
2041             os_memcmp(elems.ssid, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN) !=
2042             0) {
2043                 /* not using P2P Wildcard SSID - ignore */
2044                 p2p_dbg(p2p, "Probe Req not using P2P Wildcard SSID - ignore it");
2045                 return P2P_PREQ_NOT_PROCESSED;
2046         }
2047
2048         if (supp_rates_11b_only(&elems)) {
2049                 /* Indicates support for 11b rates only */
2050                 p2p_dbg(p2p, "Probe Req with 11b rates only supported - ignore it");
2051                 return P2P_PREQ_NOT_P2P;
2052         }
2053
2054         os_memset(&msg, 0, sizeof(msg));
2055         if (p2p_parse_ies(ie, ie_len, &msg) < 0) {
2056                 /* Could not parse P2P attributes */
2057                 p2p_dbg(p2p, "Could not parse P2P attributes in Probe Req - ignore it");
2058                 return P2P_PREQ_NOT_P2P;
2059         }
2060
2061         if (msg.device_id &&
2062             os_memcmp(msg.device_id, p2p->cfg->dev_addr, ETH_ALEN) != 0) {
2063                 /* Device ID did not match */
2064                 p2p_dbg(p2p, "Probe Req requested Device ID " MACSTR " did not match - ignore it",
2065                         MAC2STR(msg.device_id));
2066                 p2p_parse_free(&msg);
2067                 return P2P_PREQ_NOT_PROCESSED;
2068         }
2069
2070         /* Check Requested Device Type match */
2071         if (msg.wps_attributes &&
2072             !p2p_match_dev_type(p2p, msg.wps_attributes)) {
2073                 /* No match with Requested Device Type */
2074                 p2p_dbg(p2p, "Probe Req requestred Device Type did not match - ignore it");
2075                 p2p_parse_free(&msg);
2076                 return P2P_PREQ_NOT_PROCESSED;
2077         }
2078         p2p_parse_free(&msg);
2079
2080         if (!p2p->cfg->send_probe_resp) {
2081                 /* Response generated elsewhere */
2082                 p2p_dbg(p2p, "Probe Resp generated elsewhere - do not generate additional response");
2083                 return P2P_PREQ_NOT_PROCESSED;
2084         }
2085
2086         p2p_dbg(p2p, "Reply to P2P Probe Request in Listen state");
2087
2088         /*
2089          * We do not really have a specific BSS that this frame is advertising,
2090          * so build a frame that has some information in valid format. This is
2091          * really only used for discovery purposes, not to learn exact BSS
2092          * parameters.
2093          */
2094         ies = p2p_build_probe_resp_ies(p2p);
2095         if (ies == NULL)
2096                 return P2P_PREQ_NOT_PROCESSED;
2097
2098         buf = wpabuf_alloc(200 + wpabuf_len(ies));
2099         if (buf == NULL) {
2100                 wpabuf_free(ies);
2101                 return P2P_PREQ_NOT_PROCESSED;
2102         }
2103
2104         resp = NULL;
2105         resp = wpabuf_put(buf, resp->u.probe_resp.variable - (u8 *) resp);
2106
2107         resp->frame_control = host_to_le16((WLAN_FC_TYPE_MGMT << 2) |
2108                                            (WLAN_FC_STYPE_PROBE_RESP << 4));
2109         os_memcpy(resp->da, addr, ETH_ALEN);
2110         os_memcpy(resp->sa, p2p->cfg->dev_addr, ETH_ALEN);
2111         os_memcpy(resp->bssid, p2p->cfg->dev_addr, ETH_ALEN);
2112         resp->u.probe_resp.beacon_int = host_to_le16(100);
2113         /* hardware or low-level driver will setup seq_ctrl and timestamp */
2114         resp->u.probe_resp.capab_info =
2115                 host_to_le16(WLAN_CAPABILITY_SHORT_PREAMBLE |
2116                              WLAN_CAPABILITY_PRIVACY |
2117                              WLAN_CAPABILITY_SHORT_SLOT_TIME);
2118
2119         wpabuf_put_u8(buf, WLAN_EID_SSID);
2120         wpabuf_put_u8(buf, P2P_WILDCARD_SSID_LEN);
2121         wpabuf_put_data(buf, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN);
2122
2123         wpabuf_put_u8(buf, WLAN_EID_SUPP_RATES);
2124         wpabuf_put_u8(buf, 8);
2125         wpabuf_put_u8(buf, (60 / 5) | 0x80);
2126         wpabuf_put_u8(buf, 90 / 5);
2127         wpabuf_put_u8(buf, (120 / 5) | 0x80);
2128         wpabuf_put_u8(buf, 180 / 5);
2129         wpabuf_put_u8(buf, (240 / 5) | 0x80);
2130         wpabuf_put_u8(buf, 360 / 5);
2131         wpabuf_put_u8(buf, 480 / 5);
2132         wpabuf_put_u8(buf, 540 / 5);
2133
2134         wpabuf_put_u8(buf, WLAN_EID_DS_PARAMS);
2135         wpabuf_put_u8(buf, 1);
2136         wpabuf_put_u8(buf, p2p->cfg->channel);
2137
2138         wpabuf_put_buf(buf, ies);
2139         wpabuf_free(ies);
2140
2141         p2p->cfg->send_probe_resp(p2p->cfg->cb_ctx, buf);
2142
2143         wpabuf_free(buf);
2144
2145         return P2P_PREQ_NOT_PROCESSED;
2146 }
2147
2148
2149 enum p2p_probe_req_status
2150 p2p_probe_req_rx(struct p2p_data *p2p, const u8 *addr, const u8 *dst,
2151                  const u8 *bssid, const u8 *ie, size_t ie_len)
2152 {
2153         enum p2p_probe_req_status res;
2154
2155         p2p_add_dev_from_probe_req(p2p, addr, ie, ie_len);
2156
2157         res = p2p_reply_probe(p2p, addr, dst, bssid, ie, ie_len);
2158
2159         if ((p2p->state == P2P_CONNECT || p2p->state == P2P_CONNECT_LISTEN) &&
2160             p2p->go_neg_peer &&
2161             os_memcmp(addr, p2p->go_neg_peer->info.p2p_device_addr, ETH_ALEN)
2162             == 0 &&
2163             !(p2p->go_neg_peer->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM)) {
2164                 /* Received a Probe Request from GO Negotiation peer */
2165                 p2p_dbg(p2p, "Found GO Negotiation peer - try to start GO negotiation from timeout");
2166                 eloop_cancel_timeout(p2p_go_neg_start, p2p, NULL);
2167                 eloop_register_timeout(0, 0, p2p_go_neg_start, p2p, NULL);
2168                 return P2P_PREQ_PROCESSED;
2169         }
2170
2171         if ((p2p->state == P2P_INVITE || p2p->state == P2P_INVITE_LISTEN) &&
2172             p2p->invite_peer &&
2173             (p2p->invite_peer->flags & P2P_DEV_WAIT_INV_REQ_ACK) &&
2174             os_memcmp(addr, p2p->invite_peer->info.p2p_device_addr, ETH_ALEN)
2175             == 0) {
2176                 /* Received a Probe Request from Invite peer */
2177                 p2p_dbg(p2p, "Found Invite peer - try to start Invite from timeout");
2178                 eloop_cancel_timeout(p2p_invite_start, p2p, NULL);
2179                 eloop_register_timeout(0, 0, p2p_invite_start, p2p, NULL);
2180                 return P2P_PREQ_PROCESSED;
2181         }
2182
2183         return res;
2184 }
2185
2186
2187 static int p2p_assoc_req_ie_wlan_ap(struct p2p_data *p2p, const u8 *bssid,
2188                                     u8 *buf, size_t len, struct wpabuf *p2p_ie)
2189 {
2190         struct wpabuf *tmp;
2191         u8 *lpos;
2192         size_t tmplen;
2193         int res;
2194         u8 group_capab;
2195
2196         if (p2p_ie == NULL)
2197                 return 0; /* WLAN AP is not a P2P manager */
2198
2199         /*
2200          * (Re)Association Request - P2P IE
2201          * P2P Capability attribute (shall be present)
2202          * P2P Interface attribute (present if concurrent device and
2203          *      P2P Management is enabled)
2204          */
2205         tmp = wpabuf_alloc(200);
2206         if (tmp == NULL)
2207                 return -1;
2208
2209         lpos = p2p_buf_add_ie_hdr(tmp);
2210         group_capab = 0;
2211         if (p2p->num_groups > 0) {
2212                 group_capab |= P2P_GROUP_CAPAB_GROUP_OWNER;
2213                 if ((p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER) &&
2214                     (p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED) &&
2215                     p2p->cross_connect)
2216                         group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
2217         }
2218         p2p_buf_add_capability(tmp, p2p->dev_capab, group_capab);
2219         if ((p2p->dev_capab & P2P_DEV_CAPAB_CONCURRENT_OPER) &&
2220             (p2p->dev_capab & P2P_DEV_CAPAB_INFRA_MANAGED))
2221                 p2p_buf_add_p2p_interface(tmp, p2p);
2222         p2p_buf_update_ie_hdr(tmp, lpos);
2223
2224         tmplen = wpabuf_len(tmp);
2225         if (tmplen > len)
2226                 res = -1;
2227         else {
2228                 os_memcpy(buf, wpabuf_head(tmp), tmplen);
2229                 res = tmplen;
2230         }
2231         wpabuf_free(tmp);
2232
2233         return res;
2234 }
2235
2236
2237 int p2p_assoc_req_ie(struct p2p_data *p2p, const u8 *bssid, u8 *buf,
2238                      size_t len, int p2p_group, struct wpabuf *p2p_ie)
2239 {
2240         struct wpabuf *tmp;
2241         u8 *lpos;
2242         struct p2p_device *peer;
2243         size_t tmplen;
2244         int res;
2245         size_t extra = 0;
2246
2247         if (!p2p_group)
2248                 return p2p_assoc_req_ie_wlan_ap(p2p, bssid, buf, len, p2p_ie);
2249
2250 #ifdef CONFIG_WIFI_DISPLAY
2251         if (p2p->wfd_ie_assoc_req)
2252                 extra = wpabuf_len(p2p->wfd_ie_assoc_req);
2253 #endif /* CONFIG_WIFI_DISPLAY */
2254
2255         /*
2256          * (Re)Association Request - P2P IE
2257          * P2P Capability attribute (shall be present)
2258          * Extended Listen Timing (may be present)
2259          * P2P Device Info attribute (shall be present)
2260          */
2261         tmp = wpabuf_alloc(200 + extra);
2262         if (tmp == NULL)
2263                 return -1;
2264
2265 #ifdef CONFIG_WIFI_DISPLAY
2266         if (p2p->wfd_ie_assoc_req)
2267                 wpabuf_put_buf(tmp, p2p->wfd_ie_assoc_req);
2268 #endif /* CONFIG_WIFI_DISPLAY */
2269
2270         peer = bssid ? p2p_get_device(p2p, bssid) : NULL;
2271
2272         lpos = p2p_buf_add_ie_hdr(tmp);
2273         p2p_buf_add_capability(tmp, p2p->dev_capab, 0);
2274         if (p2p->ext_listen_interval)
2275                 p2p_buf_add_ext_listen_timing(tmp, p2p->ext_listen_period,
2276                                               p2p->ext_listen_interval);
2277         p2p_buf_add_device_info(tmp, p2p, peer);
2278         p2p_buf_update_ie_hdr(tmp, lpos);
2279
2280         tmplen = wpabuf_len(tmp);
2281         if (tmplen > len)
2282                 res = -1;
2283         else {
2284                 os_memcpy(buf, wpabuf_head(tmp), tmplen);
2285                 res = tmplen;
2286         }
2287         wpabuf_free(tmp);
2288
2289         return res;
2290 }
2291
2292
2293 int p2p_scan_result_text(const u8 *ies, size_t ies_len, char *buf, char *end)
2294 {
2295         struct wpabuf *p2p_ie;
2296         int ret;
2297
2298         p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len, P2P_IE_VENDOR_TYPE);
2299         if (p2p_ie == NULL)
2300                 return 0;
2301
2302         ret = p2p_attr_text(p2p_ie, buf, end);
2303         wpabuf_free(p2p_ie);
2304         return ret;
2305 }
2306
2307
2308 int p2p_parse_dev_addr_in_p2p_ie(struct wpabuf *p2p_ie, u8 *dev_addr)
2309 {
2310         struct p2p_message msg;
2311
2312         os_memset(&msg, 0, sizeof(msg));
2313         if (p2p_parse_p2p_ie(p2p_ie, &msg))
2314                 return -1;
2315
2316         if (msg.p2p_device_addr) {
2317                 os_memcpy(dev_addr, msg.p2p_device_addr, ETH_ALEN);
2318                 return 0;
2319         } else if (msg.device_id) {
2320                 os_memcpy(dev_addr, msg.device_id, ETH_ALEN);
2321                 return 0;
2322         }
2323         return -1;
2324 }
2325
2326
2327 int p2p_parse_dev_addr(const u8 *ies, size_t ies_len, u8 *dev_addr)
2328 {
2329         struct wpabuf *p2p_ie;
2330         int ret;
2331
2332         p2p_ie = ieee802_11_vendor_ie_concat(ies, ies_len,
2333                                              P2P_IE_VENDOR_TYPE);
2334         if (p2p_ie == NULL)
2335                 return -1;
2336         ret = p2p_parse_dev_addr_in_p2p_ie(p2p_ie, dev_addr);
2337         wpabuf_free(p2p_ie);
2338         return ret;
2339 }
2340
2341
2342 static void p2p_clear_go_neg(struct p2p_data *p2p)
2343 {
2344         p2p->go_neg_peer = NULL;
2345         p2p_clear_timeout(p2p);
2346         p2p_set_state(p2p, P2P_IDLE);
2347 }
2348
2349
2350 void p2p_wps_success_cb(struct p2p_data *p2p, const u8 *mac_addr)
2351 {
2352         if (p2p->go_neg_peer == NULL) {
2353                 p2p_dbg(p2p, "No pending Group Formation - ignore WPS registration success notification");
2354                 return; /* No pending Group Formation */
2355         }
2356
2357         if (os_memcmp(mac_addr, p2p->go_neg_peer->intended_addr, ETH_ALEN) !=
2358             0) {
2359                 p2p_dbg(p2p, "Ignore WPS registration success notification for "
2360                         MACSTR " (GO Negotiation peer " MACSTR ")",
2361                         MAC2STR(mac_addr),
2362                         MAC2STR(p2p->go_neg_peer->intended_addr));
2363                 return; /* Ignore unexpected peer address */
2364         }
2365
2366         p2p_dbg(p2p, "Group Formation completed successfully with " MACSTR,
2367                 MAC2STR(mac_addr));
2368
2369         p2p_clear_go_neg(p2p);
2370 }
2371
2372
2373 void p2p_group_formation_failed(struct p2p_data *p2p)
2374 {
2375         if (p2p->go_neg_peer == NULL) {
2376                 p2p_dbg(p2p, "No pending Group Formation - ignore group formation failure notification");
2377                 return; /* No pending Group Formation */
2378         }
2379
2380         p2p_dbg(p2p, "Group Formation failed with " MACSTR,
2381                 MAC2STR(p2p->go_neg_peer->intended_addr));
2382
2383         p2p_clear_go_neg(p2p);
2384 }
2385
2386
2387 struct p2p_data * p2p_init(const struct p2p_config *cfg)
2388 {
2389         struct p2p_data *p2p;
2390
2391         if (cfg->max_peers < 1)
2392                 return NULL;
2393
2394         p2p = os_zalloc(sizeof(*p2p) + sizeof(*cfg));
2395         if (p2p == NULL)
2396                 return NULL;
2397         p2p->cfg = (struct p2p_config *) (p2p + 1);
2398         os_memcpy(p2p->cfg, cfg, sizeof(*cfg));
2399         if (cfg->dev_name)
2400                 p2p->cfg->dev_name = os_strdup(cfg->dev_name);
2401         if (cfg->manufacturer)
2402                 p2p->cfg->manufacturer = os_strdup(cfg->manufacturer);
2403         if (cfg->model_name)
2404                 p2p->cfg->model_name = os_strdup(cfg->model_name);
2405         if (cfg->model_number)
2406                 p2p->cfg->model_number = os_strdup(cfg->model_number);
2407         if (cfg->serial_number)
2408                 p2p->cfg->serial_number = os_strdup(cfg->serial_number);
2409         if (cfg->pref_chan) {
2410                 p2p->cfg->pref_chan = os_malloc(cfg->num_pref_chan *
2411                                                 sizeof(struct p2p_channel));
2412                 if (p2p->cfg->pref_chan) {
2413                         os_memcpy(p2p->cfg->pref_chan, cfg->pref_chan,
2414                                   cfg->num_pref_chan *
2415                                   sizeof(struct p2p_channel));
2416                 } else
2417                         p2p->cfg->num_pref_chan = 0;
2418         }
2419
2420         p2p->min_disc_int = 1;
2421         p2p->max_disc_int = 3;
2422         p2p->max_disc_tu = -1;
2423
2424         os_get_random(&p2p->next_tie_breaker, 1);
2425         p2p->next_tie_breaker &= 0x01;
2426         if (cfg->sd_request)
2427                 p2p->dev_capab |= P2P_DEV_CAPAB_SERVICE_DISCOVERY;
2428         p2p->dev_capab |= P2P_DEV_CAPAB_INVITATION_PROCEDURE;
2429         if (cfg->concurrent_operations)
2430                 p2p->dev_capab |= P2P_DEV_CAPAB_CONCURRENT_OPER;
2431         p2p->dev_capab |= P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
2432
2433         dl_list_init(&p2p->devices);
2434
2435         eloop_register_timeout(P2P_PEER_EXPIRATION_INTERVAL, 0,
2436                                p2p_expiration_timeout, p2p, NULL);
2437
2438         p2p->go_timeout = 100;
2439         p2p->client_timeout = 20;
2440         p2p->num_p2p_sd_queries = 0;
2441
2442         p2p_dbg(p2p, "initialized");
2443         p2p_channels_dump(p2p, "channels", &p2p->cfg->channels);
2444         p2p_channels_dump(p2p, "cli_channels", &p2p->cfg->cli_channels);
2445
2446         return p2p;
2447 }
2448
2449
2450 void p2p_deinit(struct p2p_data *p2p)
2451 {
2452 #ifdef CONFIG_WIFI_DISPLAY
2453         wpabuf_free(p2p->wfd_ie_beacon);
2454         wpabuf_free(p2p->wfd_ie_probe_req);
2455         wpabuf_free(p2p->wfd_ie_probe_resp);
2456         wpabuf_free(p2p->wfd_ie_assoc_req);
2457         wpabuf_free(p2p->wfd_ie_invitation);
2458         wpabuf_free(p2p->wfd_ie_prov_disc_req);
2459         wpabuf_free(p2p->wfd_ie_prov_disc_resp);
2460         wpabuf_free(p2p->wfd_ie_go_neg);
2461         wpabuf_free(p2p->wfd_dev_info);
2462         wpabuf_free(p2p->wfd_assoc_bssid);
2463         wpabuf_free(p2p->wfd_coupled_sink_info);
2464 #endif /* CONFIG_WIFI_DISPLAY */
2465
2466         eloop_cancel_timeout(p2p_expiration_timeout, p2p, NULL);
2467         eloop_cancel_timeout(p2p_ext_listen_timeout, p2p, NULL);
2468         eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
2469         eloop_cancel_timeout(p2p_go_neg_start, p2p, NULL);
2470         p2p_flush(p2p);
2471         p2p_free_req_dev_types(p2p);
2472         os_free(p2p->cfg->dev_name);
2473         os_free(p2p->cfg->manufacturer);
2474         os_free(p2p->cfg->model_name);
2475         os_free(p2p->cfg->model_number);
2476         os_free(p2p->cfg->serial_number);
2477         os_free(p2p->cfg->pref_chan);
2478         os_free(p2p->groups);
2479         wpabuf_free(p2p->sd_resp);
2480         os_free(p2p->after_scan_tx);
2481         p2p_remove_wps_vendor_extensions(p2p);
2482         os_free(p2p->no_go_freq.range);
2483         os_free(p2p);
2484 }
2485
2486
2487 void p2p_flush(struct p2p_data *p2p)
2488 {
2489         struct p2p_device *dev, *prev;
2490         p2p_stop_find(p2p);
2491         dl_list_for_each_safe(dev, prev, &p2p->devices, struct p2p_device,
2492                               list) {
2493                 dl_list_del(&dev->list);
2494                 p2p_device_free(p2p, dev);
2495         }
2496         p2p_free_sd_queries(p2p);
2497         os_free(p2p->after_scan_tx);
2498         p2p->after_scan_tx = NULL;
2499 }
2500
2501
2502 int p2p_unauthorize(struct p2p_data *p2p, const u8 *addr)
2503 {
2504         struct p2p_device *dev;
2505
2506         dev = p2p_get_device(p2p, addr);
2507         if (dev == NULL)
2508                 return -1;
2509
2510         p2p_dbg(p2p, "Unauthorizing " MACSTR, MAC2STR(addr));
2511
2512         if (p2p->go_neg_peer == dev)
2513                 p2p->go_neg_peer = NULL;
2514
2515         dev->wps_method = WPS_NOT_READY;
2516         dev->oob_pw_id = 0;
2517         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
2518         dev->flags &= ~P2P_DEV_WAIT_GO_NEG_CONFIRM;
2519
2520         /* Check if after_scan_tx is for this peer. If so free it */
2521         if (p2p->after_scan_tx &&
2522             os_memcmp(addr, p2p->after_scan_tx->dst, ETH_ALEN) == 0) {
2523                 os_free(p2p->after_scan_tx);
2524                 p2p->after_scan_tx = NULL;
2525         }
2526
2527         return 0;
2528 }
2529
2530
2531 int p2p_set_dev_name(struct p2p_data *p2p, const char *dev_name)
2532 {
2533         os_free(p2p->cfg->dev_name);
2534         if (dev_name) {
2535                 p2p->cfg->dev_name = os_strdup(dev_name);
2536                 if (p2p->cfg->dev_name == NULL)
2537                         return -1;
2538         } else
2539                 p2p->cfg->dev_name = NULL;
2540         return 0;
2541 }
2542
2543
2544 int p2p_set_manufacturer(struct p2p_data *p2p, const char *manufacturer)
2545 {
2546         os_free(p2p->cfg->manufacturer);
2547         p2p->cfg->manufacturer = NULL;
2548         if (manufacturer) {
2549                 p2p->cfg->manufacturer = os_strdup(manufacturer);
2550                 if (p2p->cfg->manufacturer == NULL)
2551                         return -1;
2552         }
2553
2554         return 0;
2555 }
2556
2557
2558 int p2p_set_model_name(struct p2p_data *p2p, const char *model_name)
2559 {
2560         os_free(p2p->cfg->model_name);
2561         p2p->cfg->model_name = NULL;
2562         if (model_name) {
2563                 p2p->cfg->model_name = os_strdup(model_name);
2564                 if (p2p->cfg->model_name == NULL)
2565                         return -1;
2566         }
2567
2568         return 0;
2569 }
2570
2571
2572 int p2p_set_model_number(struct p2p_data *p2p, const char *model_number)
2573 {
2574         os_free(p2p->cfg->model_number);
2575         p2p->cfg->model_number = NULL;
2576         if (model_number) {
2577                 p2p->cfg->model_number = os_strdup(model_number);
2578                 if (p2p->cfg->model_number == NULL)
2579                         return -1;
2580         }
2581
2582         return 0;
2583 }
2584
2585
2586 int p2p_set_serial_number(struct p2p_data *p2p, const char *serial_number)
2587 {
2588         os_free(p2p->cfg->serial_number);
2589         p2p->cfg->serial_number = NULL;
2590         if (serial_number) {
2591                 p2p->cfg->serial_number = os_strdup(serial_number);
2592                 if (p2p->cfg->serial_number == NULL)
2593                         return -1;
2594         }
2595
2596         return 0;
2597 }
2598
2599
2600 void p2p_set_config_methods(struct p2p_data *p2p, u16 config_methods)
2601 {
2602         p2p->cfg->config_methods = config_methods;
2603 }
2604
2605
2606 void p2p_set_uuid(struct p2p_data *p2p, const u8 *uuid)
2607 {
2608         os_memcpy(p2p->cfg->uuid, uuid, 16);
2609 }
2610
2611
2612 int p2p_set_pri_dev_type(struct p2p_data *p2p, const u8 *pri_dev_type)
2613 {
2614         os_memcpy(p2p->cfg->pri_dev_type, pri_dev_type, 8);
2615         return 0;
2616 }
2617
2618
2619 int p2p_set_sec_dev_types(struct p2p_data *p2p, const u8 dev_types[][8],
2620                           size_t num_dev_types)
2621 {
2622         if (num_dev_types > P2P_SEC_DEVICE_TYPES)
2623                 num_dev_types = P2P_SEC_DEVICE_TYPES;
2624         p2p->cfg->num_sec_dev_types = num_dev_types;
2625         os_memcpy(p2p->cfg->sec_dev_type, dev_types, num_dev_types * 8);
2626         return 0;
2627 }
2628
2629
2630 void p2p_remove_wps_vendor_extensions(struct p2p_data *p2p)
2631 {
2632         int i;
2633
2634         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
2635                 wpabuf_free(p2p->wps_vendor_ext[i]);
2636                 p2p->wps_vendor_ext[i] = NULL;
2637         }
2638 }
2639
2640
2641 int p2p_add_wps_vendor_extension(struct p2p_data *p2p,
2642                                  const struct wpabuf *vendor_ext)
2643 {
2644         int i;
2645
2646         if (vendor_ext == NULL)
2647                 return -1;
2648
2649         for (i = 0; i < P2P_MAX_WPS_VENDOR_EXT; i++) {
2650                 if (p2p->wps_vendor_ext[i] == NULL)
2651                         break;
2652         }
2653         if (i >= P2P_MAX_WPS_VENDOR_EXT)
2654                 return -1;
2655
2656         p2p->wps_vendor_ext[i] = wpabuf_dup(vendor_ext);
2657         if (p2p->wps_vendor_ext[i] == NULL)
2658                 return -1;
2659
2660         return 0;
2661 }
2662
2663
2664 int p2p_set_country(struct p2p_data *p2p, const char *country)
2665 {
2666         os_memcpy(p2p->cfg->country, country, 3);
2667         return 0;
2668 }
2669
2670
2671 void p2p_continue_find(struct p2p_data *p2p)
2672 {
2673         struct p2p_device *dev;
2674         p2p_set_state(p2p, P2P_SEARCH);
2675         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
2676                 if (dev->sd_pending_bcast_queries == 0) {
2677                         /* Initialize with total number of registered broadcast
2678                          * SD queries. */
2679                         dev->sd_pending_bcast_queries = p2p->num_p2p_sd_queries;
2680                 }
2681
2682                 if (p2p_start_sd(p2p, dev) == 0)
2683                         return;
2684                 if (dev->req_config_methods &&
2685                     !(dev->flags & P2P_DEV_PD_FOR_JOIN)) {
2686                         p2p_dbg(p2p, "Send pending Provision Discovery Request to "
2687                                 MACSTR " (config methods 0x%x)",
2688                                 MAC2STR(dev->info.p2p_device_addr),
2689                                 dev->req_config_methods);
2690                         if (p2p_send_prov_disc_req(p2p, dev, 0, 0) == 0)
2691                                 return;
2692                 }
2693         }
2694
2695         p2p_listen_in_find(p2p, 1);
2696 }
2697
2698
2699 static void p2p_sd_cb(struct p2p_data *p2p, int success)
2700 {
2701         p2p_dbg(p2p, "Service Discovery Query TX callback: success=%d",
2702                 success);
2703         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2704
2705         if (!success) {
2706                 p2p->sd_peer = NULL;
2707                 p2p_continue_find(p2p);
2708                 return;
2709         }
2710
2711         if (p2p->sd_peer == NULL) {
2712                 p2p_dbg(p2p, "No SD peer entry known");
2713                 p2p_continue_find(p2p);
2714                 return;
2715         }
2716
2717         /* Wait for response from the peer */
2718         p2p_set_state(p2p, P2P_SD_DURING_FIND);
2719         p2p_set_timeout(p2p, 0, 200000);
2720 }
2721
2722
2723 /**
2724  * p2p_retry_pd - Retry any pending provision disc requests in IDLE state
2725  * @p2p: P2P module context from p2p_init()
2726  */
2727 static void p2p_retry_pd(struct p2p_data *p2p)
2728 {
2729         struct p2p_device *dev;
2730
2731         if (p2p->state != P2P_IDLE)
2732                 return;
2733
2734         /*
2735          * Retry the prov disc req attempt only for the peer that the user had
2736          * requested.
2737          */
2738
2739         dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
2740                 if (os_memcmp(p2p->pending_pd_devaddr,
2741                               dev->info.p2p_device_addr, ETH_ALEN) != 0)
2742                         continue;
2743                 if (!dev->req_config_methods)
2744                         continue;
2745
2746                 p2p_dbg(p2p, "Send pending Provision Discovery Request to "
2747                         MACSTR " (config methods 0x%x)",
2748                         MAC2STR(dev->info.p2p_device_addr),
2749                         dev->req_config_methods);
2750                 p2p_send_prov_disc_req(p2p, dev,
2751                                        dev->flags & P2P_DEV_PD_FOR_JOIN,
2752                                        p2p->pd_force_freq);
2753                 return;
2754         }
2755 }
2756
2757
2758 static void p2p_prov_disc_cb(struct p2p_data *p2p, int success)
2759 {
2760         p2p_dbg(p2p, "Provision Discovery Request TX callback: success=%d",
2761                 success);
2762
2763         /*
2764          * Postpone resetting the pending action state till after we actually
2765          * time out. This allows us to take some action like notifying any
2766          * interested parties about no response to the request.
2767          *
2768          * When the timer (below) goes off we check in IDLE, SEARCH, or
2769          * LISTEN_ONLY state, which are the only allowed states to issue a PD
2770          * requests in, if this was still pending and then raise notification.
2771          */
2772
2773         if (!success) {
2774                 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2775
2776                 if (p2p->user_initiated_pd &&
2777                     (p2p->state == P2P_SEARCH || p2p->state == P2P_LISTEN_ONLY))
2778                 {
2779                         /* Retry request from timeout to avoid busy loops */
2780                         p2p->pending_action_state = P2P_PENDING_PD;
2781                         p2p_set_timeout(p2p, 0, 50000);
2782                 } else if (p2p->state != P2P_IDLE)
2783                         p2p_continue_find(p2p);
2784                 else if (p2p->user_initiated_pd) {
2785                         p2p->pending_action_state = P2P_PENDING_PD;
2786                         p2p_set_timeout(p2p, 0, 300000);
2787                 }
2788                 return;
2789         }
2790
2791         /*
2792          * This postponing, of resetting pending_action_state, needs to be
2793          * done only for user initiated PD requests and not internal ones.
2794          */
2795         if (p2p->user_initiated_pd)
2796                 p2p->pending_action_state = P2P_PENDING_PD;
2797         else
2798                 p2p->pending_action_state = P2P_NO_PENDING_ACTION;
2799
2800         /* Wait for response from the peer */
2801         if (p2p->state == P2P_SEARCH)
2802                 p2p_set_state(p2p, P2P_PD_DURING_FIND);
2803         p2p_set_timeout(p2p, 0, 200000);
2804 }
2805
2806
2807 int p2p_scan_res_handler(struct p2p_data *p2p, const u8 *bssid, int freq,
2808                          struct os_reltime *rx_time, int level, const u8 *ies,
2809                          size_t ies_len)
2810 {
2811         if (os_reltime_before(rx_time, &p2p->find_start)) {
2812                 /*
2813                  * The driver may have cached (e.g., in cfg80211 BSS table) the
2814                  * scan results for relatively long time. To avoid reporting
2815                  * stale information, update P2P peers only based on results
2816                  * that have based on frames received after the last p2p_find
2817                  * operation was started.
2818                  */
2819                 p2p_dbg(p2p, "Ignore old scan result for " MACSTR
2820                         " (rx_time=%u.%06u)",
2821                         MAC2STR(bssid), (unsigned int) rx_time->sec,
2822                         (unsigned int) rx_time->usec);
2823                 return 0;
2824         }
2825
2826         p2p_add_device(p2p, bssid, freq, rx_time, level, ies, ies_len, 1);
2827
2828         return 0;
2829 }
2830
2831
2832 void p2p_scan_res_handled(struct p2p_data *p2p)
2833 {
2834         if (!p2p->p2p_scan_running) {
2835                 p2p_dbg(p2p, "p2p_scan was not running, but scan results received");
2836         }
2837         p2p->p2p_scan_running = 0;
2838         eloop_cancel_timeout(p2p_scan_timeout, p2p, NULL);
2839
2840         if (p2p_run_after_scan(p2p))
2841                 return;
2842         if (p2p->state == P2P_SEARCH)
2843                 p2p_continue_find(p2p);
2844 }
2845
2846
2847 void p2p_scan_ie(struct p2p_data *p2p, struct wpabuf *ies, const u8 *dev_id)
2848 {
2849         u8 *len;
2850
2851 #ifdef CONFIG_WIFI_DISPLAY
2852         if (p2p->wfd_ie_probe_req)
2853                 wpabuf_put_buf(ies, p2p->wfd_ie_probe_req);
2854 #endif /* CONFIG_WIFI_DISPLAY */
2855
2856         len = p2p_buf_add_ie_hdr(ies);
2857         p2p_buf_add_capability(ies, p2p->dev_capab &
2858                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
2859         if (dev_id)
2860                 p2p_buf_add_device_id(ies, dev_id);
2861         if (p2p->cfg->reg_class && p2p->cfg->channel)
2862                 p2p_buf_add_listen_channel(ies, p2p->cfg->country,
2863                                            p2p->cfg->reg_class,
2864                                            p2p->cfg->channel);
2865         if (p2p->ext_listen_interval)
2866                 p2p_buf_add_ext_listen_timing(ies, p2p->ext_listen_period,
2867                                               p2p->ext_listen_interval);
2868         /* TODO: p2p_buf_add_operating_channel() if GO */
2869         p2p_buf_update_ie_hdr(ies, len);
2870 }
2871
2872
2873 size_t p2p_scan_ie_buf_len(struct p2p_data *p2p)
2874 {
2875         size_t len = 100;
2876
2877 #ifdef CONFIG_WIFI_DISPLAY
2878         if (p2p && p2p->wfd_ie_probe_req)
2879                 len += wpabuf_len(p2p->wfd_ie_probe_req);
2880 #endif /* CONFIG_WIFI_DISPLAY */
2881
2882         return len;
2883 }
2884
2885
2886 int p2p_ie_text(struct wpabuf *p2p_ie, char *buf, char *end)
2887 {
2888         return p2p_attr_text(p2p_ie, buf, end);
2889 }
2890
2891
2892 static void p2p_go_neg_req_cb(struct p2p_data *p2p, int success)
2893 {
2894         struct p2p_device *dev = p2p->go_neg_peer;
2895         int timeout;
2896
2897         p2p_dbg(p2p, "GO Negotiation Request TX callback: success=%d", success);
2898
2899         if (dev == NULL) {
2900                 p2p_dbg(p2p, "No pending GO Negotiation");
2901                 return;
2902         }
2903
2904         if (success) {
2905                 if (dev->flags & P2P_DEV_USER_REJECTED) {
2906                         p2p_set_state(p2p, P2P_IDLE);
2907                         return;
2908                 }
2909         } else if (dev->go_neg_req_sent) {
2910                 /* Cancel the increment from p2p_connect_send() on failure */
2911                 dev->go_neg_req_sent--;
2912         }
2913
2914         if (!success &&
2915             (dev->info.dev_capab & P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY) &&
2916             !is_zero_ether_addr(dev->member_in_go_dev)) {
2917                 p2p_dbg(p2p, "Peer " MACSTR " did not acknowledge request - try to use device discoverability through its GO",
2918                         MAC2STR(dev->info.p2p_device_addr));
2919                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
2920                 p2p_send_dev_disc_req(p2p, dev);
2921                 return;
2922         }
2923
2924         /*
2925          * Use P2P find, if needed, to find the other device from its listen
2926          * channel.
2927          */
2928         p2p_set_state(p2p, P2P_CONNECT);
2929         timeout = success ? 500000 : 100000;
2930         if (!success && p2p->go_neg_peer &&
2931             (p2p->go_neg_peer->flags & P2P_DEV_PEER_WAITING_RESPONSE)) {
2932                 unsigned int r;
2933                 /*
2934                  * Peer is expected to wait our response and we will skip the
2935                  * listen phase. Add some randomness to the wait time here to
2936                  * make it less likely to hit cases where we could end up in
2937                  * sync with peer not listening.
2938                  */
2939                 os_get_random((u8 *) &r, sizeof(r));
2940                 timeout += r % 100000;
2941         }
2942         p2p_set_timeout(p2p, 0, timeout);
2943 }
2944
2945
2946 static void p2p_go_neg_resp_cb(struct p2p_data *p2p, int success)
2947 {
2948         p2p_dbg(p2p, "GO Negotiation Response TX callback: success=%d",
2949                 success);
2950         if (!p2p->go_neg_peer && p2p->state == P2P_PROVISIONING) {
2951                 p2p_dbg(p2p, "Ignore TX callback event - GO Negotiation is not running anymore");
2952                 return;
2953         }
2954         p2p_set_state(p2p, P2P_CONNECT);
2955         p2p_set_timeout(p2p, 0, 500000);
2956 }
2957
2958
2959 static void p2p_go_neg_resp_failure_cb(struct p2p_data *p2p, int success,
2960                                        const u8 *addr)
2961 {
2962         p2p_dbg(p2p, "GO Negotiation Response (failure) TX callback: success=%d", success);
2963         if (p2p->go_neg_peer && p2p->go_neg_peer->status != P2P_SC_SUCCESS) {
2964                 p2p_go_neg_failed(p2p, p2p->go_neg_peer,
2965                                   p2p->go_neg_peer->status);
2966         } else if (success) {
2967                 struct p2p_device *dev;
2968                 dev = p2p_get_device(p2p, addr);
2969                 if (dev &&
2970                     dev->status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE)
2971                         dev->flags |= P2P_DEV_PEER_WAITING_RESPONSE;
2972         }
2973 }
2974
2975
2976 static void p2p_go_neg_conf_cb(struct p2p_data *p2p,
2977                                enum p2p_send_action_result result)
2978 {
2979         struct p2p_device *dev;
2980
2981         p2p_dbg(p2p, "GO Negotiation Confirm TX callback: result=%d", result);
2982         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
2983         if (result == P2P_SEND_ACTION_FAILED) {
2984                 p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
2985                 return;
2986         }
2987         if (result == P2P_SEND_ACTION_NO_ACK) {
2988                 /*
2989                  * It looks like the TX status for GO Negotiation Confirm is
2990                  * often showing failure even when the peer has actually
2991                  * received the frame. Since the peer may change channels
2992                  * immediately after having received the frame, we may not see
2993                  * an Ack for retries, so just dropping a single frame may
2994                  * trigger this. To allow the group formation to succeed if the
2995                  * peer did indeed receive the frame, continue regardless of
2996                  * the TX status.
2997                  */
2998                 p2p_dbg(p2p, "Assume GO Negotiation Confirm TX was actually received by the peer even though Ack was not reported");
2999         }
3000
3001         dev = p2p->go_neg_peer;
3002         if (dev == NULL)
3003                 return;
3004
3005         p2p_go_complete(p2p, dev);
3006 }
3007
3008
3009 void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
3010                         const u8 *src, const u8 *bssid,
3011                         enum p2p_send_action_result result)
3012 {
3013         enum p2p_pending_action_state state;
3014         int success;
3015
3016         p2p_dbg(p2p, "Action frame TX callback (state=%d freq=%u dst=" MACSTR
3017                 " src=" MACSTR " bssid=" MACSTR " result=%d",
3018                 p2p->pending_action_state, freq, MAC2STR(dst), MAC2STR(src),
3019                 MAC2STR(bssid), result);
3020         success = result == P2P_SEND_ACTION_SUCCESS;
3021         state = p2p->pending_action_state;
3022         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3023         switch (state) {
3024         case P2P_NO_PENDING_ACTION:
3025                 if (p2p->send_action_in_progress) {
3026                         p2p->send_action_in_progress = 0;
3027                         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3028                 }
3029                 if (p2p->after_scan_tx_in_progress) {
3030                         p2p->after_scan_tx_in_progress = 0;
3031                         if (p2p->start_after_scan != P2P_AFTER_SCAN_NOTHING &&
3032                             p2p_run_after_scan(p2p))
3033                                 break;
3034                         if (p2p->state == P2P_SEARCH) {
3035                                 p2p_dbg(p2p, "Continue find after after_scan_tx completion");
3036                                 p2p_continue_find(p2p);
3037                         }
3038                 }
3039                 break;
3040         case P2P_PENDING_GO_NEG_REQUEST:
3041                 p2p_go_neg_req_cb(p2p, success);
3042                 break;
3043         case P2P_PENDING_GO_NEG_RESPONSE:
3044                 p2p_go_neg_resp_cb(p2p, success);
3045                 break;
3046         case P2P_PENDING_GO_NEG_RESPONSE_FAILURE:
3047                 p2p_go_neg_resp_failure_cb(p2p, success, dst);
3048                 break;
3049         case P2P_PENDING_GO_NEG_CONFIRM:
3050                 p2p_go_neg_conf_cb(p2p, result);
3051                 break;
3052         case P2P_PENDING_SD:
3053                 p2p_sd_cb(p2p, success);
3054                 break;
3055         case P2P_PENDING_PD:
3056                 p2p_prov_disc_cb(p2p, success);
3057                 break;
3058         case P2P_PENDING_INVITATION_REQUEST:
3059                 p2p_invitation_req_cb(p2p, success);
3060                 break;
3061         case P2P_PENDING_INVITATION_RESPONSE:
3062                 p2p_invitation_resp_cb(p2p, success);
3063                 break;
3064         case P2P_PENDING_DEV_DISC_REQUEST:
3065                 p2p_dev_disc_req_cb(p2p, success);
3066                 break;
3067         case P2P_PENDING_DEV_DISC_RESPONSE:
3068                 p2p_dev_disc_resp_cb(p2p, success);
3069                 break;
3070         case P2P_PENDING_GO_DISC_REQ:
3071                 p2p_go_disc_req_cb(p2p, success);
3072                 break;
3073         }
3074
3075         p2p->after_scan_tx_in_progress = 0;
3076 }
3077
3078
3079 void p2p_listen_cb(struct p2p_data *p2p, unsigned int freq,
3080                    unsigned int duration)
3081 {
3082         if (freq == p2p->pending_client_disc_freq) {
3083                 p2p_dbg(p2p, "Client discoverability remain-awake completed");
3084                 p2p->pending_client_disc_freq = 0;
3085                 return;
3086         }
3087
3088         if (freq != p2p->pending_listen_freq) {
3089                 p2p_dbg(p2p, "Unexpected listen callback for freq=%u duration=%u (pending_listen_freq=%u)",
3090                         freq, duration, p2p->pending_listen_freq);
3091                 return;
3092         }
3093
3094         p2p_dbg(p2p, "Starting Listen timeout(%u,%u) on freq=%u based on callback",
3095                 p2p->pending_listen_sec, p2p->pending_listen_usec,
3096                 p2p->pending_listen_freq);
3097         p2p->in_listen = 1;
3098         p2p->drv_in_listen = freq;
3099         if (p2p->pending_listen_sec || p2p->pending_listen_usec) {
3100                 /*
3101                  * Add 20 msec extra wait to avoid race condition with driver
3102                  * remain-on-channel end event, i.e., give driver more time to
3103                  * complete the operation before our timeout expires.
3104                  */
3105                 p2p_set_timeout(p2p, p2p->pending_listen_sec,
3106                                 p2p->pending_listen_usec + 20000);
3107         }
3108
3109         p2p->pending_listen_freq = 0;
3110 }
3111
3112
3113 int p2p_listen_end(struct p2p_data *p2p, unsigned int freq)
3114 {
3115         p2p_dbg(p2p, "Driver ended Listen state (freq=%u)", freq);
3116         p2p->drv_in_listen = 0;
3117         if (p2p->in_listen)
3118                 return 0; /* Internal timeout will trigger the next step */
3119
3120         if (p2p->state == P2P_CONNECT_LISTEN && p2p->go_neg_peer) {
3121                 if (p2p->go_neg_peer->connect_reqs >= 120) {
3122                         p2p_dbg(p2p, "Timeout on sending GO Negotiation Request without getting response");
3123                         p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3124                         return 0;
3125                 }
3126
3127                 p2p_set_state(p2p, P2P_CONNECT);
3128                 p2p_connect_send(p2p, p2p->go_neg_peer);
3129                 return 1;
3130         } else if (p2p->state == P2P_SEARCH) {
3131                 if (p2p->p2p_scan_running) {
3132                          /*
3133                           * Search is already in progress. This can happen if
3134                           * an Action frame RX is reported immediately after
3135                           * the end of a remain-on-channel operation and the
3136                           * response frame to that is sent using an offchannel
3137                           * operation while in p2p_find. Avoid an attempt to
3138                           * restart a scan here.
3139                           */
3140                         p2p_dbg(p2p, "p2p_scan already in progress - do not try to start a new one");
3141                         return 1;
3142                 }
3143                 if (p2p->pending_listen_freq) {
3144                         /*
3145                          * Better wait a bit if the driver is unable to start
3146                          * offchannel operation for some reason. p2p_search()
3147                          * will be started from internal timeout.
3148                          */
3149                         p2p_dbg(p2p, "Listen operation did not seem to start - delay search phase to avoid busy loop");
3150                         p2p_set_timeout(p2p, 0, 100000);
3151                         return 1;
3152                 }
3153                 if (p2p->search_delay) {
3154                         p2p_dbg(p2p, "Delay search operation by %u ms",
3155                                 p2p->search_delay);
3156                         p2p_set_timeout(p2p, p2p->search_delay / 1000,
3157                                         (p2p->search_delay % 1000) * 1000);
3158                         return 1;
3159                 }
3160                 p2p_search(p2p);
3161                 return 1;
3162         }
3163
3164         return 0;
3165 }
3166
3167
3168 static void p2p_timeout_connect(struct p2p_data *p2p)
3169 {
3170         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3171         if (p2p->go_neg_peer &&
3172             (p2p->go_neg_peer->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM)) {
3173                 p2p_dbg(p2p, "Wait for GO Negotiation Confirm timed out - assume GO Negotiation failed");
3174                 p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3175                 return;
3176         }
3177         if (p2p->go_neg_peer &&
3178             (p2p->go_neg_peer->flags & P2P_DEV_PEER_WAITING_RESPONSE) &&
3179             p2p->go_neg_peer->connect_reqs < 120) {
3180                 p2p_dbg(p2p, "Peer expected to wait our response - skip listen");
3181                 p2p_connect_send(p2p, p2p->go_neg_peer);
3182                 return;
3183         }
3184         if (p2p->go_neg_peer && p2p->go_neg_peer->oob_go_neg_freq > 0) {
3185                 p2p_dbg(p2p, "Skip connect-listen since GO Neg channel known (OOB)");
3186                 p2p_set_state(p2p, P2P_CONNECT_LISTEN);
3187                 p2p_set_timeout(p2p, 0, 30000);
3188                 return;
3189         }
3190         p2p_set_state(p2p, P2P_CONNECT_LISTEN);
3191         p2p_listen_in_find(p2p, 0);
3192 }
3193
3194
3195 static void p2p_timeout_connect_listen(struct p2p_data *p2p)
3196 {
3197         if (p2p->go_neg_peer) {
3198                 if (p2p->drv_in_listen) {
3199                         p2p_dbg(p2p, "Driver is still in Listen state; wait for it to complete");
3200                         return;
3201                 }
3202
3203                 if (p2p->go_neg_peer->connect_reqs >= 120) {
3204                         p2p_dbg(p2p, "Timeout on sending GO Negotiation Request without getting response");
3205                         p2p_go_neg_failed(p2p, p2p->go_neg_peer, -1);
3206                         return;
3207                 }
3208
3209                 p2p_set_state(p2p, P2P_CONNECT);
3210                 p2p_connect_send(p2p, p2p->go_neg_peer);
3211         } else
3212                 p2p_set_state(p2p, P2P_IDLE);
3213 }
3214
3215
3216 static void p2p_timeout_wait_peer_connect(struct p2p_data *p2p)
3217 {
3218         p2p_set_state(p2p, P2P_WAIT_PEER_IDLE);
3219
3220         if (p2p->cfg->is_concurrent_session_active &&
3221             p2p->cfg->is_concurrent_session_active(p2p->cfg->cb_ctx))
3222                 p2p_set_timeout(p2p, 0, 500000);
3223         else
3224                 p2p_set_timeout(p2p, 0, 200000);
3225 }
3226
3227
3228 static void p2p_timeout_wait_peer_idle(struct p2p_data *p2p)
3229 {
3230         struct p2p_device *dev = p2p->go_neg_peer;
3231
3232         if (dev == NULL) {
3233                 p2p_dbg(p2p, "Unknown GO Neg peer - stop GO Neg wait");
3234                 return;
3235         }
3236
3237         dev->wait_count++;
3238         if (dev->wait_count >= 120) {
3239                 p2p_dbg(p2p, "Timeout on waiting peer to become ready for GO Negotiation");
3240                 p2p_go_neg_failed(p2p, dev, -1);
3241                 return;
3242         }
3243
3244         p2p_dbg(p2p, "Go to Listen state while waiting for the peer to become ready for GO Negotiation");
3245         p2p_set_state(p2p, P2P_WAIT_PEER_CONNECT);
3246         p2p_listen_in_find(p2p, 0);
3247 }
3248
3249
3250 static void p2p_timeout_sd_during_find(struct p2p_data *p2p)
3251 {
3252         p2p_dbg(p2p, "Service Discovery Query timeout");
3253         if (p2p->sd_peer) {
3254                 p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3255                 p2p->sd_peer = NULL;
3256         }
3257         p2p_continue_find(p2p);
3258 }
3259
3260
3261 static void p2p_timeout_prov_disc_during_find(struct p2p_data *p2p)
3262 {
3263         p2p_dbg(p2p, "Provision Discovery Request timeout");
3264         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3265         p2p_continue_find(p2p);
3266 }
3267
3268
3269 static void p2p_timeout_prov_disc_req(struct p2p_data *p2p)
3270 {
3271         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3272
3273         /*
3274          * For user initiated PD requests that we have not gotten any responses
3275          * for while in IDLE state, we retry them a couple of times before
3276          * giving up.
3277          */
3278         if (!p2p->user_initiated_pd)
3279                 return;
3280
3281         p2p_dbg(p2p, "User initiated Provision Discovery Request timeout");
3282
3283         if (p2p->pd_retries) {
3284                 p2p->pd_retries--;
3285                 p2p_retry_pd(p2p);
3286         } else {
3287                 struct p2p_device *dev;
3288                 int for_join = 0;
3289
3290                 dl_list_for_each(dev, &p2p->devices, struct p2p_device, list) {
3291                         if (os_memcmp(p2p->pending_pd_devaddr,
3292                                       dev->info.p2p_device_addr, ETH_ALEN) != 0)
3293                                 continue;
3294                         if (dev->req_config_methods &&
3295                             (dev->flags & P2P_DEV_PD_FOR_JOIN))
3296                                 for_join = 1;
3297                 }
3298
3299                 if (p2p->cfg->prov_disc_fail)
3300                         p2p->cfg->prov_disc_fail(p2p->cfg->cb_ctx,
3301                                                  p2p->pending_pd_devaddr,
3302                                                  for_join ?
3303                                                  P2P_PROV_DISC_TIMEOUT_JOIN :
3304                                                  P2P_PROV_DISC_TIMEOUT);
3305                 p2p_reset_pending_pd(p2p);
3306         }
3307 }
3308
3309
3310 static void p2p_timeout_invite(struct p2p_data *p2p)
3311 {
3312         p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
3313         p2p_set_state(p2p, P2P_INVITE_LISTEN);
3314         if (p2p->inv_role == P2P_INVITE_ROLE_ACTIVE_GO) {
3315                 /*
3316                  * Better remain on operating channel instead of listen channel
3317                  * when running a group.
3318                  */
3319                 p2p_dbg(p2p, "Inviting in active GO role - wait on operating channel");
3320                 p2p_set_timeout(p2p, 0, 100000);
3321                 return;
3322         }
3323         p2p_listen_in_find(p2p, 0);
3324 }
3325
3326
3327 static void p2p_timeout_invite_listen(struct p2p_data *p2p)
3328 {
3329         if (p2p->invite_peer && p2p->invite_peer->invitation_reqs < 100) {
3330                 p2p_set_state(p2p, P2P_INVITE);
3331                 p2p_invite_send(p2p, p2p->invite_peer,
3332                                 p2p->invite_go_dev_addr, p2p->invite_dev_pw_id);
3333         } else {
3334                 if (p2p->invite_peer) {
3335                         p2p_dbg(p2p, "Invitation Request retry limit reached");
3336                         if (p2p->cfg->invitation_result)
3337                                 p2p->cfg->invitation_result(
3338                                         p2p->cfg->cb_ctx, -1, NULL, NULL,
3339                                         p2p->invite_peer->info.p2p_device_addr,
3340                                         0);
3341                 }
3342                 p2p_set_state(p2p, P2P_IDLE);
3343         }
3344 }
3345
3346
3347 static void p2p_state_timeout(void *eloop_ctx, void *timeout_ctx)
3348 {
3349         struct p2p_data *p2p = eloop_ctx;
3350
3351         p2p_dbg(p2p, "Timeout (state=%s)", p2p_state_txt(p2p->state));
3352
3353         p2p->in_listen = 0;
3354
3355         switch (p2p->state) {
3356         case P2P_IDLE:
3357                 /* Check if we timed out waiting for PD req */
3358                 if (p2p->pending_action_state == P2P_PENDING_PD)
3359                         p2p_timeout_prov_disc_req(p2p);
3360                 break;
3361         case P2P_SEARCH:
3362                 /* Check if we timed out waiting for PD req */
3363                 if (p2p->pending_action_state == P2P_PENDING_PD)
3364                         p2p_timeout_prov_disc_req(p2p);
3365                 if (p2p->search_delay && !p2p->in_search_delay) {
3366                         p2p_dbg(p2p, "Delay search operation by %u ms",
3367                                 p2p->search_delay);
3368                         p2p->in_search_delay = 1;
3369                         p2p_set_timeout(p2p, p2p->search_delay / 1000,
3370                                         (p2p->search_delay % 1000) * 1000);
3371                         break;
3372                 }
3373                 p2p->in_search_delay = 0;
3374                 p2p_search(p2p);
3375                 break;
3376         case P2P_CONNECT:
3377                 p2p_timeout_connect(p2p);
3378                 break;
3379         case P2P_CONNECT_LISTEN:
3380                 p2p_timeout_connect_listen(p2p);
3381                 break;
3382         case P2P_GO_NEG:
3383                 break;
3384         case P2P_LISTEN_ONLY:
3385                 /* Check if we timed out waiting for PD req */
3386                 if (p2p->pending_action_state == P2P_PENDING_PD)
3387                         p2p_timeout_prov_disc_req(p2p);
3388
3389                 if (p2p->ext_listen_only) {
3390                         p2p_dbg(p2p, "Extended Listen Timing - Listen State completed");
3391                         p2p->ext_listen_only = 0;
3392                         p2p_set_state(p2p, P2P_IDLE);
3393                 }
3394                 break;
3395         case P2P_WAIT_PEER_CONNECT:
3396                 p2p_timeout_wait_peer_connect(p2p);
3397                 break;
3398         case P2P_WAIT_PEER_IDLE:
3399                 p2p_timeout_wait_peer_idle(p2p);
3400                 break;
3401         case P2P_SD_DURING_FIND:
3402                 p2p_timeout_sd_during_find(p2p);
3403                 break;
3404         case P2P_PROVISIONING:
3405                 break;
3406         case P2P_PD_DURING_FIND:
3407                 p2p_timeout_prov_disc_during_find(p2p);
3408                 break;
3409         case P2P_INVITE:
3410                 p2p_timeout_invite(p2p);
3411                 break;
3412         case P2P_INVITE_LISTEN:
3413                 p2p_timeout_invite_listen(p2p);
3414                 break;
3415         }
3416 }
3417
3418
3419 int p2p_reject(struct p2p_data *p2p, const u8 *peer_addr)
3420 {
3421         struct p2p_device *dev;
3422
3423         dev = p2p_get_device(p2p, peer_addr);
3424         p2p_dbg(p2p, "Local request to reject connection attempts by peer "
3425                 MACSTR, MAC2STR(peer_addr));
3426         if (dev == NULL) {
3427                 p2p_dbg(p2p, "Peer " MACSTR " unknown", MAC2STR(peer_addr));
3428                 return -1;
3429         }
3430         dev->status = P2P_SC_FAIL_REJECTED_BY_USER;
3431         dev->flags |= P2P_DEV_USER_REJECTED;
3432         return 0;
3433 }
3434
3435
3436 const char * p2p_wps_method_text(enum p2p_wps_method method)
3437 {
3438         switch (method) {
3439         case WPS_NOT_READY:
3440                 return "not-ready";
3441         case WPS_PIN_DISPLAY:
3442                 return "Display";
3443         case WPS_PIN_KEYPAD:
3444                 return "Keypad";
3445         case WPS_PBC:
3446                 return "PBC";
3447         case WPS_NFC:
3448                 return "NFC";
3449         }
3450
3451         return "??";
3452 }
3453
3454
3455 static const char * p2p_go_state_text(enum p2p_go_state go_state)
3456 {
3457         switch (go_state) {
3458         case UNKNOWN_GO:
3459                 return "unknown";
3460         case LOCAL_GO:
3461                 return "local";
3462         case  REMOTE_GO:
3463                 return "remote";
3464         }
3465
3466         return "??";
3467 }
3468
3469
3470 const struct p2p_peer_info * p2p_get_peer_info(struct p2p_data *p2p,
3471                                                const u8 *addr, int next)
3472 {
3473         struct p2p_device *dev;
3474
3475         if (addr)
3476                 dev = p2p_get_device(p2p, addr);
3477         else
3478                 dev = dl_list_first(&p2p->devices, struct p2p_device, list);
3479
3480         if (dev && next) {
3481                 dev = dl_list_first(&dev->list, struct p2p_device, list);
3482                 if (&dev->list == &p2p->devices)
3483                         dev = NULL;
3484         }
3485
3486         if (dev == NULL)
3487                 return NULL;
3488
3489         return &dev->info;
3490 }
3491
3492
3493 int p2p_get_peer_info_txt(const struct p2p_peer_info *info,
3494                           char *buf, size_t buflen)
3495 {
3496         struct p2p_device *dev;
3497         int res;
3498         char *pos, *end;
3499         struct os_reltime now;
3500
3501         if (info == NULL)
3502                 return -1;
3503
3504         dev = (struct p2p_device *) (((u8 *) info) -
3505                                      offsetof(struct p2p_device, info));
3506
3507         pos = buf;
3508         end = buf + buflen;
3509
3510         os_get_reltime(&now);
3511         res = os_snprintf(pos, end - pos,
3512                           "age=%d\n"
3513                           "listen_freq=%d\n"
3514                           "wps_method=%s\n"
3515                           "interface_addr=" MACSTR "\n"
3516                           "member_in_go_dev=" MACSTR "\n"
3517                           "member_in_go_iface=" MACSTR "\n"
3518                           "go_neg_req_sent=%d\n"
3519                           "go_state=%s\n"
3520                           "dialog_token=%u\n"
3521                           "intended_addr=" MACSTR "\n"
3522                           "country=%c%c\n"
3523                           "oper_freq=%d\n"
3524                           "req_config_methods=0x%x\n"
3525                           "flags=%s%s%s%s%s%s%s%s%s%s%s%s%s\n"
3526                           "status=%d\n"
3527                           "wait_count=%u\n"
3528                           "invitation_reqs=%u\n",
3529                           (int) (now.sec - dev->last_seen.sec),
3530                           dev->listen_freq,
3531                           p2p_wps_method_text(dev->wps_method),
3532                           MAC2STR(dev->interface_addr),
3533                           MAC2STR(dev->member_in_go_dev),
3534                           MAC2STR(dev->member_in_go_iface),
3535                           dev->go_neg_req_sent,
3536                           p2p_go_state_text(dev->go_state),
3537                           dev->dialog_token,
3538                           MAC2STR(dev->intended_addr),
3539                           dev->country[0] ? dev->country[0] : '_',
3540                           dev->country[1] ? dev->country[1] : '_',
3541                           dev->oper_freq,
3542                           dev->req_config_methods,
3543                           dev->flags & P2P_DEV_PROBE_REQ_ONLY ?
3544                           "[PROBE_REQ_ONLY]" : "",
3545                           dev->flags & P2P_DEV_REPORTED ? "[REPORTED]" : "",
3546                           dev->flags & P2P_DEV_NOT_YET_READY ?
3547                           "[NOT_YET_READY]" : "",
3548                           dev->flags & P2P_DEV_PD_PEER_DISPLAY ?
3549                           "[PD_PEER_DISPLAY]" : "",
3550                           dev->flags & P2P_DEV_PD_PEER_KEYPAD ?
3551                           "[PD_PEER_KEYPAD]" : "",
3552                           dev->flags & P2P_DEV_USER_REJECTED ?
3553                           "[USER_REJECTED]" : "",
3554                           dev->flags & P2P_DEV_PEER_WAITING_RESPONSE ?
3555                           "[PEER_WAITING_RESPONSE]" : "",
3556                           dev->flags & P2P_DEV_PREFER_PERSISTENT_GROUP ?
3557                           "[PREFER_PERSISTENT_GROUP]" : "",
3558                           dev->flags & P2P_DEV_WAIT_GO_NEG_RESPONSE ?
3559                           "[WAIT_GO_NEG_RESPONSE]" : "",
3560                           dev->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM ?
3561                           "[WAIT_GO_NEG_CONFIRM]" : "",
3562                           dev->flags & P2P_DEV_GROUP_CLIENT_ONLY ?
3563                           "[GROUP_CLIENT_ONLY]" : "",
3564                           dev->flags & P2P_DEV_FORCE_FREQ ?
3565                           "[FORCE_FREQ]" : "",
3566                           dev->flags & P2P_DEV_PD_FOR_JOIN ?
3567                           "[PD_FOR_JOIN]" : "",
3568                           dev->status,
3569                           dev->wait_count,
3570                           dev->invitation_reqs);
3571         if (res < 0 || res >= end - pos)
3572                 return pos - buf;
3573         pos += res;
3574
3575         if (dev->ext_listen_period) {
3576                 res = os_snprintf(pos, end - pos,
3577                                   "ext_listen_period=%u\n"
3578                                   "ext_listen_interval=%u\n",
3579                                   dev->ext_listen_period,
3580                                   dev->ext_listen_interval);
3581                 if (res < 0 || res >= end - pos)
3582                         return pos - buf;
3583                 pos += res;
3584         }
3585
3586         if (dev->oper_ssid_len) {
3587                 res = os_snprintf(pos, end - pos,
3588                                   "oper_ssid=%s\n",
3589                                   wpa_ssid_txt(dev->oper_ssid,
3590                                                dev->oper_ssid_len));
3591                 if (res < 0 || res >= end - pos)
3592                         return pos - buf;
3593                 pos += res;
3594         }
3595
3596 #ifdef CONFIG_WIFI_DISPLAY
3597         if (dev->info.wfd_subelems) {
3598                 res = os_snprintf(pos, end - pos, "wfd_subelems=");
3599                 if (res < 0 || res >= end - pos)
3600                         return pos - buf;
3601                 pos += res;
3602
3603                 pos += wpa_snprintf_hex(pos, end - pos,
3604                                         wpabuf_head(dev->info.wfd_subelems),
3605                                         wpabuf_len(dev->info.wfd_subelems));
3606
3607                 res = os_snprintf(pos, end - pos, "\n");
3608                 if (res < 0 || res >= end - pos)
3609                         return pos - buf;
3610                 pos += res;
3611         }
3612 #endif /* CONFIG_WIFI_DISPLAY */
3613
3614         return pos - buf;
3615 }
3616
3617
3618 int p2p_peer_known(struct p2p_data *p2p, const u8 *addr)
3619 {
3620         return p2p_get_device(p2p, addr) != NULL;
3621 }
3622
3623
3624 void p2p_set_client_discoverability(struct p2p_data *p2p, int enabled)
3625 {
3626         if (enabled) {
3627                 p2p_dbg(p2p, "Client discoverability enabled");
3628                 p2p->dev_capab |= P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
3629         } else {
3630                 p2p_dbg(p2p, "Client discoverability disabled");
3631                 p2p->dev_capab &= ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY;
3632         }
3633 }
3634
3635
3636 static struct wpabuf * p2p_build_presence_req(u32 duration1, u32 interval1,
3637                                               u32 duration2, u32 interval2)
3638 {
3639         struct wpabuf *req;
3640         struct p2p_noa_desc desc1, desc2, *ptr1 = NULL, *ptr2 = NULL;
3641         u8 *len;
3642
3643         req = wpabuf_alloc(100);
3644         if (req == NULL)
3645                 return NULL;
3646
3647         if (duration1 || interval1) {
3648                 os_memset(&desc1, 0, sizeof(desc1));
3649                 desc1.count_type = 1;
3650                 desc1.duration = duration1;
3651                 desc1.interval = interval1;
3652                 ptr1 = &desc1;
3653
3654                 if (duration2 || interval2) {
3655                         os_memset(&desc2, 0, sizeof(desc2));
3656                         desc2.count_type = 2;
3657                         desc2.duration = duration2;
3658                         desc2.interval = interval2;
3659                         ptr2 = &desc2;
3660                 }
3661         }
3662
3663         p2p_buf_add_action_hdr(req, P2P_PRESENCE_REQ, 1);
3664         len = p2p_buf_add_ie_hdr(req);
3665         p2p_buf_add_noa(req, 0, 0, 0, ptr1, ptr2);
3666         p2p_buf_update_ie_hdr(req, len);
3667
3668         return req;
3669 }
3670
3671
3672 int p2p_presence_req(struct p2p_data *p2p, const u8 *go_interface_addr,
3673                      const u8 *own_interface_addr, unsigned int freq,
3674                      u32 duration1, u32 interval1, u32 duration2,
3675                      u32 interval2)
3676 {
3677         struct wpabuf *req;
3678
3679         p2p_dbg(p2p, "Send Presence Request to GO " MACSTR
3680                 " (own interface " MACSTR ") freq=%u dur1=%u int1=%u "
3681                 "dur2=%u int2=%u",
3682                 MAC2STR(go_interface_addr), MAC2STR(own_interface_addr),
3683                 freq, duration1, interval1, duration2, interval2);
3684
3685         req = p2p_build_presence_req(duration1, interval1, duration2,
3686                                      interval2);
3687         if (req == NULL)
3688                 return -1;
3689
3690         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3691         if (p2p_send_action(p2p, freq, go_interface_addr, own_interface_addr,
3692                             go_interface_addr,
3693                             wpabuf_head(req), wpabuf_len(req), 200) < 0) {
3694                 p2p_dbg(p2p, "Failed to send Action frame");
3695         }
3696         wpabuf_free(req);
3697
3698         return 0;
3699 }
3700
3701
3702 static struct wpabuf * p2p_build_presence_resp(u8 status, const u8 *noa,
3703                                                size_t noa_len, u8 dialog_token)
3704 {
3705         struct wpabuf *resp;
3706         u8 *len;
3707
3708         resp = wpabuf_alloc(100 + noa_len);
3709         if (resp == NULL)
3710                 return NULL;
3711
3712         p2p_buf_add_action_hdr(resp, P2P_PRESENCE_RESP, dialog_token);
3713         len = p2p_buf_add_ie_hdr(resp);
3714         p2p_buf_add_status(resp, status);
3715         if (noa) {
3716                 wpabuf_put_u8(resp, P2P_ATTR_NOTICE_OF_ABSENCE);
3717                 wpabuf_put_le16(resp, noa_len);
3718                 wpabuf_put_data(resp, noa, noa_len);
3719         } else
3720                 p2p_buf_add_noa(resp, 0, 0, 0, NULL, NULL);
3721         p2p_buf_update_ie_hdr(resp, len);
3722
3723         return resp;
3724 }
3725
3726
3727 static void p2p_process_presence_req(struct p2p_data *p2p, const u8 *da,
3728                                      const u8 *sa, const u8 *data, size_t len,
3729                                      int rx_freq)
3730 {
3731         struct p2p_message msg;
3732         u8 status;
3733         struct wpabuf *resp;
3734         size_t g;
3735         struct p2p_group *group = NULL;
3736         int parsed = 0;
3737         u8 noa[50];
3738         int noa_len;
3739
3740         p2p_dbg(p2p, "Received P2P Action - P2P Presence Request");
3741
3742         for (g = 0; g < p2p->num_groups; g++) {
3743                 if (os_memcmp(da, p2p_group_get_interface_addr(p2p->groups[g]),
3744                               ETH_ALEN) == 0) {
3745                         group = p2p->groups[g];
3746                         break;
3747                 }
3748         }
3749         if (group == NULL) {
3750                 p2p_dbg(p2p, "Ignore P2P Presence Request for unknown group "
3751                         MACSTR, MAC2STR(da));
3752                 return;
3753         }
3754
3755         if (p2p_parse(data, len, &msg) < 0) {
3756                 p2p_dbg(p2p, "Failed to parse P2P Presence Request");
3757                 status = P2P_SC_FAIL_INVALID_PARAMS;
3758                 goto fail;
3759         }
3760         parsed = 1;
3761
3762         if (msg.noa == NULL) {
3763                 p2p_dbg(p2p, "No NoA attribute in P2P Presence Request");
3764                 status = P2P_SC_FAIL_INVALID_PARAMS;
3765                 goto fail;
3766         }
3767
3768         status = p2p_group_presence_req(group, sa, msg.noa, msg.noa_len);
3769
3770 fail:
3771         if (p2p->cfg->get_noa)
3772                 noa_len = p2p->cfg->get_noa(p2p->cfg->cb_ctx, da, noa,
3773                                             sizeof(noa));
3774         else
3775                 noa_len = -1;
3776         resp = p2p_build_presence_resp(status, noa_len > 0 ? noa : NULL,
3777                                        noa_len > 0 ? noa_len : 0,
3778                                        msg.dialog_token);
3779         if (parsed)
3780                 p2p_parse_free(&msg);
3781         if (resp == NULL)
3782                 return;
3783
3784         p2p->pending_action_state = P2P_NO_PENDING_ACTION;
3785         if (p2p_send_action(p2p, rx_freq, sa, da, da,
3786                             wpabuf_head(resp), wpabuf_len(resp), 200) < 0) {
3787                 p2p_dbg(p2p, "Failed to send Action frame");
3788         }
3789         wpabuf_free(resp);
3790 }
3791
3792
3793 static void p2p_process_presence_resp(struct p2p_data *p2p, const u8 *da,
3794                                       const u8 *sa, const u8 *data, size_t len)
3795 {
3796         struct p2p_message msg;
3797
3798         p2p_dbg(p2p, "Received P2P Action - P2P Presence Response");
3799
3800         if (p2p_parse(data, len, &msg) < 0) {
3801                 p2p_dbg(p2p, "Failed to parse P2P Presence Response");
3802                 return;
3803         }
3804
3805         if (msg.status == NULL || msg.noa == NULL) {
3806                 p2p_dbg(p2p, "No Status or NoA attribute in P2P Presence Response");
3807                 p2p_parse_free(&msg);
3808                 return;
3809         }
3810
3811         if (p2p->cfg->presence_resp) {
3812                 p2p->cfg->presence_resp(p2p->cfg->cb_ctx, sa, *msg.status,
3813                                         msg.noa, msg.noa_len);
3814         }
3815
3816         if (*msg.status) {
3817                 p2p_dbg(p2p, "P2P Presence Request was rejected: status %u",
3818                         *msg.status);
3819                 p2p_parse_free(&msg);
3820                 return;
3821         }
3822
3823         p2p_dbg(p2p, "P2P Presence Request was accepted");
3824         wpa_hexdump(MSG_DEBUG, "P2P: P2P Presence Response - NoA",
3825                     msg.noa, msg.noa_len);
3826         /* TODO: process NoA */
3827         p2p_parse_free(&msg);
3828 }
3829
3830
3831 static void p2p_ext_listen_timeout(void *eloop_ctx, void *timeout_ctx)
3832 {
3833         struct p2p_data *p2p = eloop_ctx;
3834
3835         if (p2p->ext_listen_interval) {
3836                 /* Schedule next extended listen timeout */
3837                 eloop_register_timeout(p2p->ext_listen_interval_sec,
3838                                        p2p->ext_listen_interval_usec,
3839                                        p2p_ext_listen_timeout, p2p, NULL);
3840         }
3841
3842         if (p2p->state == P2P_LISTEN_ONLY && p2p->ext_listen_only) {
3843                 /*
3844                  * This should not really happen, but it looks like the Listen
3845                  * command may fail is something else (e.g., a scan) was
3846                  * running at an inconvenient time. As a workaround, allow new
3847                  * Extended Listen operation to be started.
3848                  */
3849                 p2p_dbg(p2p, "Previous Extended Listen operation had not been completed - try again");
3850                 p2p->ext_listen_only = 0;
3851                 p2p_set_state(p2p, P2P_IDLE);
3852         }
3853
3854         if (p2p->state != P2P_IDLE) {
3855                 p2p_dbg(p2p, "Skip Extended Listen timeout in active state (%s)", p2p_state_txt(p2p->state));
3856                 return;
3857         }
3858
3859         p2p_dbg(p2p, "Extended Listen timeout");
3860         p2p->ext_listen_only = 1;
3861         if (p2p_listen(p2p, p2p->ext_listen_period) < 0) {
3862                 p2p_dbg(p2p, "Failed to start Listen state for Extended Listen Timing");
3863                 p2p->ext_listen_only = 0;
3864         }
3865 }
3866
3867
3868 int p2p_ext_listen(struct p2p_data *p2p, unsigned int period,
3869                    unsigned int interval)
3870 {
3871         if (period > 65535 || interval > 65535 || period > interval ||
3872             (period == 0 && interval > 0) || (period > 0 && interval == 0)) {
3873                 p2p_dbg(p2p, "Invalid Extended Listen Timing request: period=%u interval=%u",
3874                         period, interval);
3875                 return -1;
3876         }
3877
3878         eloop_cancel_timeout(p2p_ext_listen_timeout, p2p, NULL);
3879
3880         if (interval == 0) {
3881                 p2p_dbg(p2p, "Disabling Extended Listen Timing");
3882                 p2p->ext_listen_period = 0;
3883                 p2p->ext_listen_interval = 0;
3884                 return 0;
3885         }
3886
3887         p2p_dbg(p2p, "Enabling Extended Listen Timing: period %u msec, interval %u msec",
3888                 period, interval);
3889         p2p->ext_listen_period = period;
3890         p2p->ext_listen_interval = interval;
3891         p2p->ext_listen_interval_sec = interval / 1000;
3892         p2p->ext_listen_interval_usec = (interval % 1000) * 1000;
3893
3894         eloop_register_timeout(p2p->ext_listen_interval_sec,
3895                                p2p->ext_listen_interval_usec,
3896                                p2p_ext_listen_timeout, p2p, NULL);
3897
3898         return 0;
3899 }
3900
3901
3902 void p2p_deauth_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
3903                       const u8 *ie, size_t ie_len)
3904 {
3905         struct p2p_message msg;
3906
3907         if (bssid == NULL || ie == NULL)
3908                 return;
3909
3910         os_memset(&msg, 0, sizeof(msg));
3911         if (p2p_parse_ies(ie, ie_len, &msg))
3912                 return;
3913         if (msg.minor_reason_code == NULL) {
3914                 p2p_parse_free(&msg);
3915                 return;
3916         }
3917
3918         p2p_dbg(p2p, "Deauthentication notification BSSID " MACSTR
3919                 " reason_code=%u minor_reason_code=%u",
3920                 MAC2STR(bssid), reason_code, *msg.minor_reason_code);
3921
3922         p2p_parse_free(&msg);
3923 }
3924
3925
3926 void p2p_disassoc_notif(struct p2p_data *p2p, const u8 *bssid, u16 reason_code,
3927                         const u8 *ie, size_t ie_len)
3928 {
3929         struct p2p_message msg;
3930
3931         if (bssid == NULL || ie == NULL)
3932                 return;
3933
3934         os_memset(&msg, 0, sizeof(msg));
3935         if (p2p_parse_ies(ie, ie_len, &msg))
3936                 return;
3937         if (msg.minor_reason_code == NULL) {
3938                 p2p_parse_free(&msg);
3939                 return;
3940         }
3941
3942         p2p_dbg(p2p, "Disassociation notification BSSID " MACSTR
3943                 " reason_code=%u minor_reason_code=%u",
3944                 MAC2STR(bssid), reason_code, *msg.minor_reason_code);
3945
3946         p2p_parse_free(&msg);
3947 }
3948
3949
3950 void p2p_set_managed_oper(struct p2p_data *p2p, int enabled)
3951 {
3952         if (enabled) {
3953                 p2p_dbg(p2p, "Managed P2P Device operations enabled");
3954                 p2p->dev_capab |= P2P_DEV_CAPAB_INFRA_MANAGED;
3955         } else {
3956                 p2p_dbg(p2p, "Managed P2P Device operations disabled");
3957                 p2p->dev_capab &= ~P2P_DEV_CAPAB_INFRA_MANAGED;
3958         }
3959 }
3960
3961
3962 int p2p_set_listen_channel(struct p2p_data *p2p, u8 reg_class, u8 channel)
3963 {
3964         if (p2p_channel_to_freq(reg_class, channel) < 0)
3965                 return -1;
3966
3967         p2p_dbg(p2p, "Set Listen channel: reg_class %u channel %u",
3968                 reg_class, channel);
3969         p2p->cfg->reg_class = reg_class;
3970         p2p->cfg->channel = channel;
3971
3972         return 0;
3973 }
3974
3975
3976 int p2p_set_ssid_postfix(struct p2p_data *p2p, const u8 *postfix, size_t len)
3977 {
3978         p2p_dbg(p2p, "New SSID postfix: %s", wpa_ssid_txt(postfix, len));
3979         if (postfix == NULL) {
3980                 p2p->cfg->ssid_postfix_len = 0;
3981                 return 0;
3982         }
3983         if (len > sizeof(p2p->cfg->ssid_postfix))
3984                 return -1;
3985         os_memcpy(p2p->cfg->ssid_postfix, postfix, len);
3986         p2p->cfg->ssid_postfix_len = len;
3987         return 0;
3988 }
3989
3990
3991 int p2p_set_oper_channel(struct p2p_data *p2p, u8 op_reg_class, u8 op_channel,
3992                          int cfg_op_channel)
3993 {
3994         if (p2p_channel_to_freq(op_reg_class, op_channel) < 0)
3995                 return -1;
3996
3997         p2p_dbg(p2p, "Set Operating channel: reg_class %u channel %u",
3998                 op_reg_class, op_channel);
3999         p2p->cfg->op_reg_class = op_reg_class;
4000         p2p->cfg->op_channel = op_channel;
4001         p2p->cfg->cfg_op_channel = cfg_op_channel;
4002         return 0;
4003 }
4004
4005
4006 int p2p_set_pref_chan(struct p2p_data *p2p, unsigned int num_pref_chan,
4007                       const struct p2p_channel *pref_chan)
4008 {
4009         struct p2p_channel *n;
4010
4011         if (pref_chan) {
4012                 n = os_malloc(num_pref_chan * sizeof(struct p2p_channel));
4013                 if (n == NULL)
4014                         return -1;
4015                 os_memcpy(n, pref_chan,
4016                           num_pref_chan * sizeof(struct p2p_channel));
4017         } else
4018                 n = NULL;
4019
4020         os_free(p2p->cfg->pref_chan);
4021         p2p->cfg->pref_chan = n;
4022         p2p->cfg->num_pref_chan = num_pref_chan;
4023
4024         return 0;
4025 }
4026
4027
4028 int p2p_set_no_go_freq(struct p2p_data *p2p,
4029                        const struct wpa_freq_range_list *list)
4030 {
4031         struct wpa_freq_range *tmp;
4032
4033         if (list == NULL || list->num == 0) {
4034                 os_free(p2p->no_go_freq.range);
4035                 p2p->no_go_freq.range = NULL;
4036                 p2p->no_go_freq.num = 0;
4037                 return 0;
4038         }
4039
4040         tmp = os_calloc(list->num, sizeof(struct wpa_freq_range));
4041         if (tmp == NULL)
4042                 return -1;
4043         os_memcpy(tmp, list->range, list->num * sizeof(struct wpa_freq_range));
4044         os_free(p2p->no_go_freq.range);
4045         p2p->no_go_freq.range = tmp;
4046         p2p->no_go_freq.num = list->num;
4047         p2p_dbg(p2p, "Updated no GO chan list");
4048
4049         return 0;
4050 }
4051
4052
4053 int p2p_get_interface_addr(struct p2p_data *p2p, const u8 *dev_addr,
4054                            u8 *iface_addr)
4055 {
4056         struct p2p_device *dev = p2p_get_device(p2p, dev_addr);
4057         if (dev == NULL || is_zero_ether_addr(dev->interface_addr))
4058                 return -1;
4059         os_memcpy(iface_addr, dev->interface_addr, ETH_ALEN);
4060         return 0;
4061 }
4062
4063
4064 int p2p_get_dev_addr(struct p2p_data *p2p, const u8 *iface_addr,
4065                            u8 *dev_addr)
4066 {
4067         struct p2p_device *dev = p2p_get_device_interface(p2p, iface_addr);
4068         if (dev == NULL)
4069                 return -1;
4070         os_memcpy(dev_addr, dev->info.p2p_device_addr, ETH_ALEN);
4071         return 0;
4072 }
4073
4074
4075 void p2p_set_peer_filter(struct p2p_data *p2p, const u8 *addr)
4076 {
4077         os_memcpy(p2p->peer_filter, addr, ETH_ALEN);
4078         if (is_zero_ether_addr(p2p->peer_filter))
4079                 p2p_dbg(p2p, "Disable peer filter");
4080         else
4081                 p2p_dbg(p2p, "Enable peer filter for " MACSTR,
4082                         MAC2STR(p2p->peer_filter));
4083 }
4084
4085
4086 void p2p_set_cross_connect(struct p2p_data *p2p, int enabled)
4087 {
4088         p2p_dbg(p2p, "Cross connection %s", enabled ? "enabled" : "disabled");
4089         if (p2p->cross_connect == enabled)
4090                 return;
4091         p2p->cross_connect = enabled;
4092         /* TODO: may need to tear down any action group where we are GO(?) */
4093 }
4094
4095
4096 int p2p_get_oper_freq(struct p2p_data *p2p, const u8 *iface_addr)
4097 {
4098         struct p2p_device *dev = p2p_get_device_interface(p2p, iface_addr);
4099         if (dev == NULL)
4100                 return -1;
4101         if (dev->oper_freq <= 0)
4102                 return -1;
4103         return dev->oper_freq;
4104 }
4105
4106
4107 void p2p_set_intra_bss_dist(struct p2p_data *p2p, int enabled)
4108 {
4109         p2p_dbg(p2p, "Intra BSS distribution %s",
4110                 enabled ? "enabled" : "disabled");
4111         p2p->cfg->p2p_intra_bss = enabled;
4112 }
4113
4114
4115 void p2p_update_channel_list(struct p2p_data *p2p,
4116                              const struct p2p_channels *chan,
4117                              const struct p2p_channels *cli_chan)
4118 {
4119         p2p_dbg(p2p, "Update channel list");
4120         os_memcpy(&p2p->cfg->channels, chan, sizeof(struct p2p_channels));
4121         p2p_channels_dump(p2p, "channels", &p2p->cfg->channels);
4122         os_memcpy(&p2p->cfg->cli_channels, cli_chan,
4123                   sizeof(struct p2p_channels));
4124         p2p_channels_dump(p2p, "cli_channels", &p2p->cfg->cli_channels);
4125 }
4126
4127
4128 int p2p_send_action(struct p2p_data *p2p, unsigned int freq, const u8 *dst,
4129                     const u8 *src, const u8 *bssid, const u8 *buf,
4130                     size_t len, unsigned int wait_time)
4131 {
4132         if (p2p->p2p_scan_running) {
4133                 p2p_dbg(p2p, "Delay Action frame TX until p2p_scan completes");
4134                 if (p2p->after_scan_tx) {
4135                         p2p_dbg(p2p, "Dropped previous pending Action frame TX");
4136                         os_free(p2p->after_scan_tx);
4137                 }
4138                 p2p->after_scan_tx = os_malloc(sizeof(*p2p->after_scan_tx) +
4139                                                len);
4140                 if (p2p->after_scan_tx == NULL)
4141                         return -1;
4142                 p2p->after_scan_tx->freq = freq;
4143                 os_memcpy(p2p->after_scan_tx->dst, dst, ETH_ALEN);
4144                 os_memcpy(p2p->after_scan_tx->src, src, ETH_ALEN);
4145                 os_memcpy(p2p->after_scan_tx->bssid, bssid, ETH_ALEN);
4146                 p2p->after_scan_tx->len = len;
4147                 p2p->after_scan_tx->wait_time = wait_time;
4148                 os_memcpy(p2p->after_scan_tx + 1, buf, len);
4149                 return 0;
4150         }
4151
4152         return p2p->cfg->send_action(p2p->cfg->cb_ctx, freq, dst, src, bssid,
4153                                      buf, len, wait_time);
4154 }
4155
4156
4157 void p2p_set_best_channels(struct p2p_data *p2p, int freq_24, int freq_5,
4158                            int freq_overall)
4159 {
4160         p2p_dbg(p2p, "Best channel: 2.4 GHz: %d,  5 GHz: %d,  overall: %d",
4161                 freq_24, freq_5, freq_overall);
4162         p2p->best_freq_24 = freq_24;
4163         p2p->best_freq_5 = freq_5;
4164         p2p->best_freq_overall = freq_overall;
4165 }
4166
4167
4168 void p2p_set_own_freq_preference(struct p2p_data *p2p, int freq)
4169 {
4170         p2p_dbg(p2p, "Own frequency preference: %d MHz", freq);
4171         p2p->own_freq_preference = freq;
4172 }
4173
4174
4175 const u8 * p2p_get_go_neg_peer(struct p2p_data *p2p)
4176 {
4177         if (p2p == NULL || p2p->go_neg_peer == NULL)
4178                 return NULL;
4179         return p2p->go_neg_peer->info.p2p_device_addr;
4180 }
4181
4182
4183 const struct p2p_peer_info *
4184 p2p_get_peer_found(struct p2p_data *p2p, const u8 *addr, int next)
4185 {
4186         struct p2p_device *dev;
4187
4188         if (addr) {
4189                 dev = p2p_get_device(p2p, addr);
4190                 if (!dev)
4191                         return NULL;
4192
4193                 if (!next) {
4194                         if (dev->flags & P2P_DEV_PROBE_REQ_ONLY)
4195                                 return NULL;
4196
4197                         return &dev->info;
4198                 } else {
4199                         do {
4200                                 dev = dl_list_first(&dev->list,
4201                                                     struct p2p_device,
4202                                                     list);
4203                                 if (&dev->list == &p2p->devices)
4204                                         return NULL;
4205                         } while (dev->flags & P2P_DEV_PROBE_REQ_ONLY);
4206                 }
4207         } else {
4208                 dev = dl_list_first(&p2p->devices, struct p2p_device, list);
4209                 if (!dev)
4210                         return NULL;
4211                 while (dev->flags & P2P_DEV_PROBE_REQ_ONLY) {
4212                         dev = dl_list_first(&dev->list,
4213                                             struct p2p_device,
4214                                             list);
4215                         if (&dev->list == &p2p->devices)
4216                                 return NULL;
4217                 }
4218         }
4219
4220         return &dev->info;
4221 }
4222
4223
4224 int p2p_in_progress(struct p2p_data *p2p)
4225 {
4226         if (p2p == NULL)
4227                 return 0;
4228         if (p2p->state == P2P_SEARCH)
4229                 return 2;
4230         return p2p->state != P2P_IDLE && p2p->state != P2P_PROVISIONING;
4231 }
4232
4233
4234 void p2p_set_config_timeout(struct p2p_data *p2p, u8 go_timeout,
4235                             u8 client_timeout)
4236 {
4237         if (p2p) {
4238                 p2p->go_timeout = go_timeout;
4239                 p2p->client_timeout = client_timeout;
4240         }
4241 }
4242
4243
4244 #ifdef CONFIG_WIFI_DISPLAY
4245
4246 static void p2p_update_wfd_ie_groups(struct p2p_data *p2p)
4247 {
4248         size_t g;
4249         struct p2p_group *group;
4250
4251         for (g = 0; g < p2p->num_groups; g++) {
4252                 group = p2p->groups[g];
4253                 p2p_group_force_beacon_update_ies(group);
4254         }
4255 }
4256
4257
4258 int p2p_set_wfd_ie_beacon(struct p2p_data *p2p, struct wpabuf *ie)
4259 {
4260         wpabuf_free(p2p->wfd_ie_beacon);
4261         p2p->wfd_ie_beacon = ie;
4262         p2p_update_wfd_ie_groups(p2p);
4263         return 0;
4264 }
4265
4266
4267 int p2p_set_wfd_ie_probe_req(struct p2p_data *p2p, struct wpabuf *ie)
4268 {
4269         wpabuf_free(p2p->wfd_ie_probe_req);
4270         p2p->wfd_ie_probe_req = ie;
4271         return 0;
4272 }
4273
4274
4275 int p2p_set_wfd_ie_probe_resp(struct p2p_data *p2p, struct wpabuf *ie)
4276 {
4277         wpabuf_free(p2p->wfd_ie_probe_resp);
4278         p2p->wfd_ie_probe_resp = ie;
4279         p2p_update_wfd_ie_groups(p2p);
4280         return 0;
4281 }
4282
4283
4284 int p2p_set_wfd_ie_assoc_req(struct p2p_data *p2p, struct wpabuf *ie)
4285 {
4286         wpabuf_free(p2p->wfd_ie_assoc_req);
4287         p2p->wfd_ie_assoc_req = ie;
4288         return 0;
4289 }
4290
4291
4292 int p2p_set_wfd_ie_invitation(struct p2p_data *p2p, struct wpabuf *ie)
4293 {
4294         wpabuf_free(p2p->wfd_ie_invitation);
4295         p2p->wfd_ie_invitation = ie;
4296         return 0;
4297 }
4298
4299
4300 int p2p_set_wfd_ie_prov_disc_req(struct p2p_data *p2p, struct wpabuf *ie)
4301 {
4302         wpabuf_free(p2p->wfd_ie_prov_disc_req);
4303         p2p->wfd_ie_prov_disc_req = ie;
4304         return 0;
4305 }
4306
4307
4308 int p2p_set_wfd_ie_prov_disc_resp(struct p2p_data *p2p, struct wpabuf *ie)
4309 {
4310         wpabuf_free(p2p->wfd_ie_prov_disc_resp);
4311         p2p->wfd_ie_prov_disc_resp = ie;
4312         return 0;
4313 }
4314
4315
4316 int p2p_set_wfd_ie_go_neg(struct p2p_data *p2p, struct wpabuf *ie)
4317 {
4318         wpabuf_free(p2p->wfd_ie_go_neg);
4319         p2p->wfd_ie_go_neg = ie;
4320         return 0;
4321 }
4322
4323
4324 int p2p_set_wfd_dev_info(struct p2p_data *p2p, const struct wpabuf *elem)
4325 {
4326         wpabuf_free(p2p->wfd_dev_info);
4327         if (elem) {
4328                 p2p->wfd_dev_info = wpabuf_dup(elem);
4329                 if (p2p->wfd_dev_info == NULL)
4330                         return -1;
4331         } else
4332                 p2p->wfd_dev_info = NULL;
4333
4334         return 0;
4335 }
4336
4337
4338 int p2p_set_wfd_assoc_bssid(struct p2p_data *p2p, const struct wpabuf *elem)
4339 {
4340         wpabuf_free(p2p->wfd_assoc_bssid);
4341         if (elem) {
4342                 p2p->wfd_assoc_bssid = wpabuf_dup(elem);
4343                 if (p2p->wfd_assoc_bssid == NULL)
4344                         return -1;
4345         } else
4346                 p2p->wfd_assoc_bssid = NULL;
4347
4348         return 0;
4349 }
4350
4351
4352 int p2p_set_wfd_coupled_sink_info(struct p2p_data *p2p,
4353                                   const struct wpabuf *elem)
4354 {
4355         wpabuf_free(p2p->wfd_coupled_sink_info);
4356         if (elem) {
4357                 p2p->wfd_coupled_sink_info = wpabuf_dup(elem);
4358                 if (p2p->wfd_coupled_sink_info == NULL)
4359                         return -1;
4360         } else
4361                 p2p->wfd_coupled_sink_info = NULL;
4362
4363         return 0;
4364 }
4365
4366 #endif /* CONFIG_WIFI_DISPLAY */
4367
4368
4369 int p2p_set_disc_int(struct p2p_data *p2p, int min_disc_int, int max_disc_int,
4370                      int max_disc_tu)
4371 {
4372         if (min_disc_int > max_disc_int || min_disc_int < 0 || max_disc_int < 0)
4373                 return -1;
4374
4375         p2p->min_disc_int = min_disc_int;
4376         p2p->max_disc_int = max_disc_int;
4377         p2p->max_disc_tu = max_disc_tu;
4378         p2p_dbg(p2p, "Set discoverable interval: min=%d max=%d max_tu=%d",
4379                 min_disc_int, max_disc_int, max_disc_tu);
4380
4381         return 0;
4382 }
4383
4384
4385 void p2p_dbg(struct p2p_data *p2p, const char *fmt, ...)
4386 {
4387         va_list ap;
4388         char buf[500];
4389
4390         if (!p2p->cfg->debug_print)
4391                 return;
4392
4393         va_start(ap, fmt);
4394         vsnprintf(buf, sizeof(buf), fmt, ap);
4395         buf[sizeof(buf) - 1] = '\0';
4396         va_end(ap);
4397         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_DEBUG, buf);
4398 }
4399
4400
4401 void p2p_info(struct p2p_data *p2p, const char *fmt, ...)
4402 {
4403         va_list ap;
4404         char buf[500];
4405
4406         if (!p2p->cfg->debug_print)
4407                 return;
4408
4409         va_start(ap, fmt);
4410         vsnprintf(buf, sizeof(buf), fmt, ap);
4411         buf[sizeof(buf) - 1] = '\0';
4412         va_end(ap);
4413         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_INFO, buf);
4414 }
4415
4416
4417 void p2p_err(struct p2p_data *p2p, const char *fmt, ...)
4418 {
4419         va_list ap;
4420         char buf[500];
4421
4422         if (!p2p->cfg->debug_print)
4423                 return;
4424
4425         va_start(ap, fmt);
4426         vsnprintf(buf, sizeof(buf), fmt, ap);
4427         buf[sizeof(buf) - 1] = '\0';
4428         va_end(ap);
4429         p2p->cfg->debug_print(p2p->cfg->cb_ctx, MSG_ERROR, buf);
4430 }
4431
4432
4433 #ifdef CONFIG_WPS_NFC
4434
4435 static struct wpabuf * p2p_build_nfc_handover(struct p2p_data *p2p,
4436                                               int client_freq,
4437                                               const u8 *go_dev_addr,
4438                                               const u8 *ssid, size_t ssid_len)
4439 {
4440         struct wpabuf *buf;
4441         u8 op_class, channel;
4442         enum p2p_role_indication role = P2P_DEVICE_NOT_IN_GROUP;
4443
4444         buf = wpabuf_alloc(1000);
4445         if (buf == NULL)
4446                 return NULL;
4447
4448         op_class = p2p->cfg->reg_class;
4449         channel = p2p->cfg->channel;
4450
4451         p2p_buf_add_capability(buf, p2p->dev_capab &
4452                                ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY, 0);
4453         p2p_buf_add_device_info(buf, p2p, NULL);
4454
4455         if (p2p->num_groups > 0) {
4456                 role = P2P_GO_IN_A_GROUP;
4457                 p2p_freq_to_channel(p2p_group_get_freq(p2p->groups[0]),
4458                                     &op_class, &channel);
4459         } else if (client_freq > 0) {
4460                 role = P2P_CLIENT_IN_A_GROUP;
4461                 p2p_freq_to_channel(client_freq, &op_class, &channel);
4462         }
4463
4464         p2p_buf_add_oob_go_neg_channel(buf, p2p->cfg->country, op_class,
4465                                        channel, role);
4466
4467         if (p2p->num_groups > 0) {
4468                 /* Limit number of clients to avoid very long message */
4469                 p2p_buf_add_group_info(p2p->groups[0], buf, 5);
4470                 p2p_group_buf_add_id(p2p->groups[0], buf);
4471         } else if (client_freq > 0 &&
4472                    go_dev_addr && !is_zero_ether_addr(go_dev_addr) &&
4473                    ssid && ssid_len > 0) {
4474                 /*
4475                  * Add the optional P2P Group ID to indicate in which group this
4476                  * device is a P2P Client.
4477                  */
4478                 p2p_buf_add_group_id(buf, go_dev_addr, ssid, ssid_len);
4479         }
4480
4481         return buf;
4482 }
4483
4484
4485 struct wpabuf * p2p_build_nfc_handover_req(struct p2p_data *p2p,
4486                                            int client_freq,
4487                                            const u8 *go_dev_addr,
4488                                            const u8 *ssid, size_t ssid_len)
4489 {
4490         return p2p_build_nfc_handover(p2p, client_freq, go_dev_addr, ssid,
4491                                       ssid_len);
4492 }
4493
4494
4495 struct wpabuf * p2p_build_nfc_handover_sel(struct p2p_data *p2p,
4496                                            int client_freq,
4497                                            const u8 *go_dev_addr,
4498                                            const u8 *ssid, size_t ssid_len)
4499 {
4500         return p2p_build_nfc_handover(p2p, client_freq, go_dev_addr, ssid,
4501                                       ssid_len);
4502 }
4503
4504
4505 int p2p_process_nfc_connection_handover(struct p2p_data *p2p,
4506                                         struct p2p_nfc_params *params)
4507 {
4508         struct p2p_message msg;
4509         struct p2p_device *dev;
4510         const u8 *p2p_dev_addr;
4511         int freq;
4512         enum p2p_role_indication role;
4513
4514         params->next_step = NO_ACTION;
4515
4516         if (p2p_parse_ies_separate(params->wsc_attr, params->wsc_len,
4517                                    params->p2p_attr, params->p2p_len, &msg)) {
4518                 p2p_dbg(p2p, "Failed to parse WSC/P2P attributes from NFC");
4519                 p2p_parse_free(&msg);
4520                 return -1;
4521         }
4522
4523         if (msg.p2p_device_addr)
4524                 p2p_dev_addr = msg.p2p_device_addr;
4525         else if (msg.device_id)
4526                 p2p_dev_addr = msg.device_id;
4527         else {
4528                 p2p_dbg(p2p, "Ignore scan data without P2P Device Info or P2P Device Id");
4529                 p2p_parse_free(&msg);
4530                 return -1;
4531         }
4532
4533         if (msg.oob_dev_password) {
4534                 os_memcpy(params->oob_dev_pw, msg.oob_dev_password,
4535                           msg.oob_dev_password_len);
4536                 params->oob_dev_pw_len = msg.oob_dev_password_len;
4537         }
4538
4539         dev = p2p_create_device(p2p, p2p_dev_addr);
4540         if (dev == NULL) {
4541                 p2p_parse_free(&msg);
4542                 return -1;
4543         }
4544
4545         params->peer = &dev->info;
4546
4547         os_get_reltime(&dev->last_seen);
4548         dev->flags &= ~(P2P_DEV_PROBE_REQ_ONLY | P2P_DEV_GROUP_CLIENT_ONLY);
4549         p2p_copy_wps_info(p2p, dev, 0, &msg);
4550
4551         if (!msg.oob_go_neg_channel) {
4552                 p2p_dbg(p2p, "OOB GO Negotiation Channel attribute not included");
4553                 return -1;
4554         }
4555
4556         if (msg.oob_go_neg_channel[3] == 0 &&
4557             msg.oob_go_neg_channel[4] == 0)
4558                 freq = 0;
4559         else
4560                 freq = p2p_channel_to_freq(msg.oob_go_neg_channel[3],
4561                                            msg.oob_go_neg_channel[4]);
4562         if (freq < 0) {
4563                 p2p_dbg(p2p, "Unknown peer OOB GO Neg channel");
4564                 return -1;
4565         }
4566         role = msg.oob_go_neg_channel[5];
4567
4568         if (role == P2P_GO_IN_A_GROUP) {
4569                 p2p_dbg(p2p, "Peer OOB GO operating channel: %u MHz", freq);
4570                 params->go_freq = freq;
4571         } else if (role == P2P_CLIENT_IN_A_GROUP) {
4572                 p2p_dbg(p2p, "Peer (client) OOB GO operating channel: %u MHz",
4573                         freq);
4574                 params->go_freq = freq;
4575         } else
4576                 p2p_dbg(p2p, "Peer OOB GO Neg channel: %u MHz", freq);
4577         dev->oob_go_neg_freq = freq;
4578
4579         if (!params->sel && role != P2P_GO_IN_A_GROUP) {
4580                 freq = p2p_channel_to_freq(p2p->cfg->reg_class,
4581                                            p2p->cfg->channel);
4582                 if (freq < 0) {
4583                         p2p_dbg(p2p, "Own listen channel not known");
4584                         return -1;
4585                 }
4586                 p2p_dbg(p2p, "Use own Listen channel as OOB GO Neg channel: %u MHz", freq);
4587                 dev->oob_go_neg_freq = freq;
4588         }
4589
4590         if (msg.group_id) {
4591                 os_memcpy(params->go_dev_addr, msg.group_id, ETH_ALEN);
4592                 params->go_ssid_len = msg.group_id_len - ETH_ALEN;
4593                 os_memcpy(params->go_ssid, msg.group_id + ETH_ALEN,
4594                           params->go_ssid_len);
4595         }
4596
4597         p2p_parse_free(&msg);
4598
4599         if (dev->flags & P2P_DEV_USER_REJECTED) {
4600                 p2p_dbg(p2p, "Do not report rejected device");
4601                 return 0;
4602         }
4603
4604         if (!(dev->flags & P2P_DEV_REPORTED)) {
4605                 p2p->cfg->dev_found(p2p->cfg->cb_ctx, p2p_dev_addr, &dev->info,
4606                                     !(dev->flags & P2P_DEV_REPORTED_ONCE));
4607                 dev->flags |= P2P_DEV_REPORTED | P2P_DEV_REPORTED_ONCE;
4608         }
4609
4610         if (role == P2P_GO_IN_A_GROUP && p2p->num_groups > 0)
4611                 params->next_step = BOTH_GO;
4612         else if (role == P2P_GO_IN_A_GROUP)
4613                 params->next_step = JOIN_GROUP;
4614         else if (role == P2P_CLIENT_IN_A_GROUP) {
4615                 dev->flags |= P2P_DEV_GROUP_CLIENT_ONLY;
4616                 params->next_step = PEER_CLIENT;
4617         } else if (p2p->num_groups > 0)
4618                 params->next_step = AUTH_JOIN;
4619         else if (params->sel)
4620                 params->next_step = INIT_GO_NEG;
4621         else
4622                 params->next_step = RESP_GO_NEG;
4623
4624         return 0;
4625 }
4626
4627
4628 void p2p_set_authorized_oob_dev_pw_id(struct p2p_data *p2p, u16 dev_pw_id,
4629                                       int go_intent,
4630                                       const u8 *own_interface_addr)
4631 {
4632
4633         p2p->authorized_oob_dev_pw_id = dev_pw_id;
4634         if (dev_pw_id == 0) {
4635                 p2p_dbg(p2p, "NFC OOB Password unauthorized for static handover");
4636                 return;
4637         }
4638
4639         p2p_dbg(p2p, "NFC OOB Password (id=%u) authorized for static handover",
4640                 dev_pw_id);
4641
4642         p2p->go_intent = go_intent;
4643         os_memcpy(p2p->intended_addr, own_interface_addr, ETH_ALEN);
4644 }
4645
4646 #endif /* CONFIG_WPS_NFC */