p2p_go_neg.c revision 2e67f06149ff649fb6f8782bad041d3d9124685e
1/*
2 * Wi-Fi Direct - P2P Group Owner Negotiation
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 "common/ieee802_11_defs.h"
13#include "common/wpa_ctrl.h"
14#include "wps/wps_defs.h"
15#include "p2p_i.h"
16#include "p2p.h"
17
18
19static int p2p_go_det(u8 own_intent, u8 peer_value)
20{
21	u8 peer_intent = peer_value >> 1;
22	if (own_intent == peer_intent) {
23		if (own_intent == P2P_MAX_GO_INTENT)
24			return -1; /* both devices want to become GO */
25
26		/* Use tie breaker bit to determine GO */
27		return (peer_value & 0x01) ? 0 : 1;
28	}
29
30	return own_intent > peer_intent;
31}
32
33
34int p2p_peer_channels_check(struct p2p_data *p2p, struct p2p_channels *own,
35			    struct p2p_device *dev,
36			    const u8 *channel_list, size_t channel_list_len)
37{
38	const u8 *pos, *end;
39	struct p2p_channels *ch;
40	size_t channels;
41	struct p2p_channels intersection;
42
43	ch = &dev->channels;
44	os_memset(ch, 0, sizeof(*ch));
45	pos = channel_list;
46	end = channel_list + channel_list_len;
47
48	if (end - pos < 3)
49		return -1;
50	os_memcpy(dev->country, pos, 3);
51	wpa_hexdump_ascii(MSG_DEBUG, "P2P: Peer country", pos, 3);
52	if (pos[2] != 0x04 && os_memcmp(pos, p2p->cfg->country, 2) != 0) {
53		p2p_info(p2p, "Mismatching country (ours=%c%c peer's=%c%c)",
54			p2p->cfg->country[0], p2p->cfg->country[1],
55			pos[0], pos[1]);
56		return -1;
57	}
58	pos += 3;
59
60	while (pos + 2 < end) {
61		struct p2p_reg_class *cl = &ch->reg_class[ch->reg_classes];
62		cl->reg_class = *pos++;
63		if (pos + 1 + pos[0] > end) {
64			p2p_info(p2p, "Invalid peer Channel List");
65			return -1;
66		}
67		channels = *pos++;
68		cl->channels = channels > P2P_MAX_REG_CLASS_CHANNELS ?
69			P2P_MAX_REG_CLASS_CHANNELS : channels;
70		os_memcpy(cl->channel, pos, cl->channels);
71		pos += channels;
72		ch->reg_classes++;
73		if (ch->reg_classes == P2P_MAX_REG_CLASSES)
74			break;
75	}
76
77	p2p_channels_intersect(own, &dev->channels, &intersection);
78	p2p_dbg(p2p, "Own reg_classes %d peer reg_classes %d intersection reg_classes %d",
79		(int) own->reg_classes,
80		(int) dev->channels.reg_classes,
81		(int) intersection.reg_classes);
82	if (intersection.reg_classes == 0) {
83		p2p_info(p2p, "No common channels found");
84		return -1;
85	}
86	return 0;
87}
88
89
90static int p2p_peer_channels(struct p2p_data *p2p, struct p2p_device *dev,
91			     const u8 *channel_list, size_t channel_list_len)
92{
93	return p2p_peer_channels_check(p2p, &p2p->channels, dev,
94				       channel_list, channel_list_len);
95}
96
97
98u16 p2p_wps_method_pw_id(enum p2p_wps_method wps_method)
99{
100	switch (wps_method) {
101	case WPS_PIN_DISPLAY:
102		return DEV_PW_REGISTRAR_SPECIFIED;
103	case WPS_PIN_KEYPAD:
104		return DEV_PW_USER_SPECIFIED;
105	case WPS_PBC:
106		return DEV_PW_PUSHBUTTON;
107	case WPS_NFC:
108		return DEV_PW_NFC_CONNECTION_HANDOVER;
109	default:
110		return DEV_PW_DEFAULT;
111	}
112}
113
114
115static const char * p2p_wps_method_str(enum p2p_wps_method wps_method)
116{
117	switch (wps_method) {
118	case WPS_PIN_DISPLAY:
119		return "Display";
120	case WPS_PIN_KEYPAD:
121		return "Keypad";
122	case WPS_PBC:
123		return "PBC";
124	case WPS_NFC:
125		return "NFC";
126	default:
127		return "??";
128	}
129}
130
131
132static struct wpabuf * p2p_build_go_neg_req(struct p2p_data *p2p,
133					    struct p2p_device *peer)
134{
135	struct wpabuf *buf;
136	u8 *len;
137	u8 group_capab;
138	size_t extra = 0;
139	u16 pw_id;
140
141#ifdef CONFIG_WIFI_DISPLAY
142	if (p2p->wfd_ie_go_neg)
143		extra = wpabuf_len(p2p->wfd_ie_go_neg);
144#endif /* CONFIG_WIFI_DISPLAY */
145
146	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_REQ])
147		extra += wpabuf_len(p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_REQ]);
148
149	buf = wpabuf_alloc(1000 + extra);
150	if (buf == NULL)
151		return NULL;
152
153	p2p_buf_add_public_action_hdr(buf, P2P_GO_NEG_REQ, peer->dialog_token);
154
155	len = p2p_buf_add_ie_hdr(buf);
156	group_capab = 0;
157	if (peer->flags & P2P_DEV_PREFER_PERSISTENT_GROUP) {
158		group_capab |= P2P_GROUP_CAPAB_PERSISTENT_GROUP;
159		if (peer->flags & P2P_DEV_PREFER_PERSISTENT_RECONN)
160			group_capab |= P2P_GROUP_CAPAB_PERSISTENT_RECONN;
161	}
162	if (p2p->cross_connect)
163		group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
164	if (p2p->cfg->p2p_intra_bss)
165		group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
166	p2p_buf_add_capability(buf, p2p->dev_capab &
167			       ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
168			       group_capab);
169	p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) | peer->tie_breaker);
170	p2p_buf_add_config_timeout(buf, p2p->go_timeout, p2p->client_timeout);
171	p2p_buf_add_listen_channel(buf, p2p->cfg->country, p2p->cfg->reg_class,
172				   p2p->cfg->channel);
173	if (p2p->ext_listen_interval)
174		p2p_buf_add_ext_listen_timing(buf, p2p->ext_listen_period,
175					      p2p->ext_listen_interval);
176	p2p_buf_add_intended_addr(buf, p2p->intended_addr);
177	p2p_buf_add_channel_list(buf, p2p->cfg->country, &p2p->channels);
178	p2p_buf_add_device_info(buf, p2p, peer);
179	p2p_buf_add_operating_channel(buf, p2p->cfg->country,
180				      p2p->op_reg_class, p2p->op_channel);
181	p2p_buf_update_ie_hdr(buf, len);
182
183	/* WPS IE with Device Password ID attribute */
184	pw_id = p2p_wps_method_pw_id(peer->wps_method);
185	if (peer->oob_pw_id)
186		pw_id = peer->oob_pw_id;
187	if (p2p_build_wps_ie(p2p, buf, pw_id, 0) < 0) {
188		p2p_dbg(p2p, "Failed to build WPS IE for GO Negotiation Request");
189		wpabuf_free(buf);
190		return NULL;
191	}
192
193#ifdef CONFIG_WIFI_DISPLAY
194	if (p2p->wfd_ie_go_neg)
195		wpabuf_put_buf(buf, p2p->wfd_ie_go_neg);
196#endif /* CONFIG_WIFI_DISPLAY */
197
198	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_REQ])
199		wpabuf_put_buf(buf, p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_REQ]);
200
201	return buf;
202}
203
204
205int p2p_connect_send(struct p2p_data *p2p, struct p2p_device *dev)
206{
207	struct wpabuf *req;
208	int freq;
209
210	if (dev->flags & P2P_DEV_PD_BEFORE_GO_NEG) {
211		u16 config_method;
212		p2p_dbg(p2p, "Use PD-before-GO-Neg workaround for " MACSTR,
213			MAC2STR(dev->info.p2p_device_addr));
214		if (dev->wps_method == WPS_PIN_DISPLAY)
215			config_method = WPS_CONFIG_KEYPAD;
216		else if (dev->wps_method == WPS_PIN_KEYPAD)
217			config_method = WPS_CONFIG_DISPLAY;
218		else if (dev->wps_method == WPS_PBC)
219			config_method = WPS_CONFIG_PUSHBUTTON;
220		else
221			return -1;
222		return p2p_prov_disc_req(p2p, dev->info.p2p_device_addr,
223					 config_method, 0, 0, 1);
224	}
225
226	freq = dev->listen_freq > 0 ? dev->listen_freq : dev->oper_freq;
227	if (dev->oob_go_neg_freq > 0)
228		freq = dev->oob_go_neg_freq;
229	if (freq <= 0) {
230		p2p_dbg(p2p, "No Listen/Operating frequency known for the peer "
231			MACSTR " to send GO Negotiation Request",
232			MAC2STR(dev->info.p2p_device_addr));
233		return -1;
234	}
235
236	req = p2p_build_go_neg_req(p2p, dev);
237	if (req == NULL)
238		return -1;
239	p2p_dbg(p2p, "Sending GO Negotiation Request");
240	p2p_set_state(p2p, P2P_CONNECT);
241	p2p->pending_action_state = P2P_PENDING_GO_NEG_REQUEST;
242	p2p->go_neg_peer = dev;
243	dev->flags |= P2P_DEV_WAIT_GO_NEG_RESPONSE;
244	dev->connect_reqs++;
245	if (p2p_send_action(p2p, freq, dev->info.p2p_device_addr,
246			    p2p->cfg->dev_addr, dev->info.p2p_device_addr,
247			    wpabuf_head(req), wpabuf_len(req), 500) < 0) {
248		p2p_dbg(p2p, "Failed to send Action frame");
249		/* Use P2P find to recover and retry */
250		p2p_set_timeout(p2p, 0, 0);
251	} else
252		dev->go_neg_req_sent++;
253
254	wpabuf_free(req);
255
256	return 0;
257}
258
259
260static struct wpabuf * p2p_build_go_neg_resp(struct p2p_data *p2p,
261					     struct p2p_device *peer,
262					     u8 dialog_token, u8 status,
263					     u8 tie_breaker)
264{
265	struct wpabuf *buf;
266	u8 *len;
267	u8 group_capab;
268	size_t extra = 0;
269	u16 pw_id;
270
271	p2p_dbg(p2p, "Building GO Negotiation Response");
272
273#ifdef CONFIG_WIFI_DISPLAY
274	if (p2p->wfd_ie_go_neg)
275		extra = wpabuf_len(p2p->wfd_ie_go_neg);
276#endif /* CONFIG_WIFI_DISPLAY */
277
278	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_RESP])
279		extra += wpabuf_len(p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_RESP]);
280
281	buf = wpabuf_alloc(1000 + extra);
282	if (buf == NULL)
283		return NULL;
284
285	p2p_buf_add_public_action_hdr(buf, P2P_GO_NEG_RESP, dialog_token);
286
287	len = p2p_buf_add_ie_hdr(buf);
288	p2p_buf_add_status(buf, status);
289	group_capab = 0;
290	if (peer && peer->go_state == LOCAL_GO) {
291		if (peer->flags & P2P_DEV_PREFER_PERSISTENT_GROUP) {
292			group_capab |= P2P_GROUP_CAPAB_PERSISTENT_GROUP;
293			if (peer->flags & P2P_DEV_PREFER_PERSISTENT_RECONN)
294				group_capab |=
295					P2P_GROUP_CAPAB_PERSISTENT_RECONN;
296		}
297		if (p2p->cross_connect)
298			group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
299		if (p2p->cfg->p2p_intra_bss)
300			group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
301	}
302	p2p_buf_add_capability(buf, p2p->dev_capab &
303			       ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
304			       group_capab);
305	p2p_buf_add_go_intent(buf, (p2p->go_intent << 1) | tie_breaker);
306	p2p_buf_add_config_timeout(buf, p2p->go_timeout, p2p->client_timeout);
307	if (peer && peer->go_state == REMOTE_GO) {
308		p2p_dbg(p2p, "Omit Operating Channel attribute");
309	} else {
310		p2p_buf_add_operating_channel(buf, p2p->cfg->country,
311					      p2p->op_reg_class,
312					      p2p->op_channel);
313	}
314	p2p_buf_add_intended_addr(buf, p2p->intended_addr);
315	if (status || peer == NULL) {
316		p2p_buf_add_channel_list(buf, p2p->cfg->country,
317					 &p2p->channels);
318	} else if (peer->go_state == REMOTE_GO) {
319		p2p_buf_add_channel_list(buf, p2p->cfg->country,
320					 &p2p->channels);
321	} else {
322		struct p2p_channels res;
323		p2p_channels_intersect(&p2p->channels, &peer->channels,
324				       &res);
325		p2p_buf_add_channel_list(buf, p2p->cfg->country, &res);
326	}
327	p2p_buf_add_device_info(buf, p2p, peer);
328	if (peer && peer->go_state == LOCAL_GO) {
329		p2p_buf_add_group_id(buf, p2p->cfg->dev_addr, p2p->ssid,
330				     p2p->ssid_len);
331	}
332	p2p_buf_update_ie_hdr(buf, len);
333
334	/* WPS IE with Device Password ID attribute */
335	pw_id = p2p_wps_method_pw_id(peer ? peer->wps_method : WPS_NOT_READY);
336	if (peer && peer->oob_pw_id)
337		pw_id = peer->oob_pw_id;
338	if (p2p_build_wps_ie(p2p, buf, pw_id, 0) < 0) {
339		p2p_dbg(p2p, "Failed to build WPS IE for GO Negotiation Response");
340		wpabuf_free(buf);
341		return NULL;
342	}
343
344#ifdef CONFIG_WIFI_DISPLAY
345	if (p2p->wfd_ie_go_neg)
346		wpabuf_put_buf(buf, p2p->wfd_ie_go_neg);
347#endif /* CONFIG_WIFI_DISPLAY */
348
349	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_RESP])
350		wpabuf_put_buf(buf, p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_RESP]);
351
352	return buf;
353}
354
355
356/**
357 * p2p_reselect_channel - Re-select operating channel based on peer information
358 * @p2p: P2P module context from p2p_init()
359 * @intersection: Support channel list intersection from local and peer
360 *
361 * This function is used to re-select the best channel after having received
362 * information from the peer to allow supported channel lists to be intersected.
363 * This can be used to improve initial channel selection done in
364 * p2p_prepare_channel() prior to the start of GO Negotiation. In addition, this
365 * can be used for Invitation case.
366 */
367void p2p_reselect_channel(struct p2p_data *p2p,
368			  struct p2p_channels *intersection)
369{
370	struct p2p_reg_class *cl;
371	int freq;
372	u8 op_reg_class, op_channel;
373	unsigned int i;
374	const int op_classes_5ghz[] = { 124, 115, 0 };
375	const int op_classes_ht40[] = { 126, 127, 116, 117, 0 };
376	const int op_classes_vht[] = { 128, 0 };
377
378	if (p2p->own_freq_preference > 0 &&
379	    p2p_freq_to_channel(p2p->own_freq_preference,
380				&op_reg_class, &op_channel) == 0 &&
381	    p2p_channels_includes(intersection, op_reg_class, op_channel)) {
382		p2p_dbg(p2p, "Pick own channel preference (reg_class %u channel %u) from intersection",
383			op_reg_class, op_channel);
384		p2p->op_reg_class = op_reg_class;
385		p2p->op_channel = op_channel;
386		return;
387	}
388
389	if (p2p->best_freq_overall > 0 &&
390	    p2p_freq_to_channel(p2p->best_freq_overall,
391				&op_reg_class, &op_channel) == 0 &&
392	    p2p_channels_includes(intersection, op_reg_class, op_channel)) {
393		p2p_dbg(p2p, "Pick best overall channel (reg_class %u channel %u) from intersection",
394			op_reg_class, op_channel);
395		p2p->op_reg_class = op_reg_class;
396		p2p->op_channel = op_channel;
397		return;
398	}
399
400	/* First, try to pick the best channel from another band */
401	freq = p2p_channel_to_freq(p2p->op_reg_class, p2p->op_channel);
402	if (freq >= 2400 && freq < 2500 && p2p->best_freq_5 > 0 &&
403	    !p2p_channels_includes(intersection, p2p->op_reg_class,
404				   p2p->op_channel) &&
405	    p2p_freq_to_channel(p2p->best_freq_5,
406				&op_reg_class, &op_channel) == 0 &&
407	    p2p_channels_includes(intersection, op_reg_class, op_channel)) {
408		p2p_dbg(p2p, "Pick best 5 GHz channel (reg_class %u channel %u) from intersection",
409			op_reg_class, op_channel);
410		p2p->op_reg_class = op_reg_class;
411		p2p->op_channel = op_channel;
412		return;
413	}
414
415	if (freq >= 4900 && freq < 6000 && p2p->best_freq_24 > 0 &&
416	    !p2p_channels_includes(intersection, p2p->op_reg_class,
417				   p2p->op_channel) &&
418	    p2p_freq_to_channel(p2p->best_freq_24,
419				&op_reg_class, &op_channel) == 0 &&
420	    p2p_channels_includes(intersection, op_reg_class, op_channel)) {
421		p2p_dbg(p2p, "Pick best 2.4 GHz channel (reg_class %u channel %u) from intersection",
422			op_reg_class, op_channel);
423		p2p->op_reg_class = op_reg_class;
424		p2p->op_channel = op_channel;
425		return;
426	}
427
428	/* Select channel with highest preference if the peer supports it */
429	for (i = 0; p2p->cfg->pref_chan && i < p2p->cfg->num_pref_chan; i++) {
430		if (p2p_channels_includes(intersection,
431					  p2p->cfg->pref_chan[i].op_class,
432					  p2p->cfg->pref_chan[i].chan)) {
433			p2p->op_reg_class = p2p->cfg->pref_chan[i].op_class;
434			p2p->op_channel = p2p->cfg->pref_chan[i].chan;
435			p2p_dbg(p2p, "Pick highest preferred channel (op_class %u channel %u) from intersection",
436				p2p->op_reg_class, p2p->op_channel);
437			return;
438		}
439	}
440
441	/* Try a channel where we might be able to use VHT */
442	if (p2p_channel_select(intersection, op_classes_vht,
443			       &p2p->op_reg_class, &p2p->op_channel) == 0) {
444		p2p_dbg(p2p, "Pick possible VHT channel (op_class %u channel %u) from intersection",
445			p2p->op_reg_class, p2p->op_channel);
446		return;
447	}
448
449	/* Try a channel where we might be able to use HT40 */
450	if (p2p_channel_select(intersection, op_classes_ht40,
451			       &p2p->op_reg_class, &p2p->op_channel) == 0) {
452		p2p_dbg(p2p, "Pick possible HT40 channel (op_class %u channel %u) from intersection",
453			p2p->op_reg_class, p2p->op_channel);
454		return;
455	}
456
457	/* Prefer a 5 GHz channel */
458	if (p2p_channel_select(intersection, op_classes_5ghz,
459			       &p2p->op_reg_class, &p2p->op_channel) == 0) {
460		p2p_dbg(p2p, "Pick possible 5 GHz channel (op_class %u channel %u) from intersection",
461			p2p->op_reg_class, p2p->op_channel);
462		return;
463	}
464
465	/*
466	 * Try to see if the original channel is in the intersection. If
467	 * so, no need to change anything, as it already contains some
468	 * randomness.
469	 */
470	if (p2p_channels_includes(intersection, p2p->op_reg_class,
471				  p2p->op_channel)) {
472		p2p_dbg(p2p, "Using original operating class and channel (op_class %u channel %u) from intersection",
473			p2p->op_reg_class, p2p->op_channel);
474		return;
475	}
476
477	/*
478	 * Fall back to whatever is included in the channel intersection since
479	 * no better options seems to be available.
480	 */
481	cl = &intersection->reg_class[0];
482	p2p_dbg(p2p, "Pick another channel (reg_class %u channel %u) from intersection",
483		cl->reg_class, cl->channel[0]);
484	p2p->op_reg_class = cl->reg_class;
485	p2p->op_channel = cl->channel[0];
486}
487
488
489static int p2p_go_select_channel(struct p2p_data *p2p, struct p2p_device *dev,
490				 u8 *status)
491{
492	struct p2p_channels tmp, intersection;
493
494	p2p_channels_dump(p2p, "own channels", &p2p->channels);
495	p2p_channels_dump(p2p, "peer channels", &dev->channels);
496	p2p_channels_intersect(&p2p->channels, &dev->channels, &tmp);
497	p2p_channels_dump(p2p, "intersection", &tmp);
498	p2p_channels_remove_freqs(&tmp, &p2p->no_go_freq);
499	p2p_channels_dump(p2p, "intersection after no-GO removal", &tmp);
500	p2p_channels_intersect(&tmp, &p2p->cfg->channels, &intersection);
501	p2p_channels_dump(p2p, "intersection with local channel list",
502			  &intersection);
503	if (intersection.reg_classes == 0 ||
504	    intersection.reg_class[0].channels == 0) {
505		*status = P2P_SC_FAIL_NO_COMMON_CHANNELS;
506		p2p_dbg(p2p, "No common channels found");
507		return -1;
508	}
509
510	if (!p2p_channels_includes(&intersection, p2p->op_reg_class,
511				   p2p->op_channel)) {
512		if (dev->flags & P2P_DEV_FORCE_FREQ) {
513			*status = P2P_SC_FAIL_NO_COMMON_CHANNELS;
514			p2p_dbg(p2p, "Peer does not support the forced channel");
515			return -1;
516		}
517
518		p2p_dbg(p2p, "Selected operating channel (op_class %u channel %u) not acceptable to the peer",
519			p2p->op_reg_class, p2p->op_channel);
520		p2p_reselect_channel(p2p, &intersection);
521	} else if (!(dev->flags & P2P_DEV_FORCE_FREQ) &&
522		   !p2p->cfg->cfg_op_channel) {
523		p2p_dbg(p2p, "Try to optimize channel selection with peer information received; previously selected op_class %u channel %u",
524			p2p->op_reg_class, p2p->op_channel);
525		p2p_reselect_channel(p2p, &intersection);
526	}
527
528	if (!p2p->ssid_set) {
529		p2p_build_ssid(p2p, p2p->ssid, &p2p->ssid_len);
530		p2p->ssid_set = 1;
531	}
532
533	return 0;
534}
535
536
537void p2p_process_go_neg_req(struct p2p_data *p2p, const u8 *sa,
538			    const u8 *data, size_t len, int rx_freq)
539{
540	struct p2p_device *dev = NULL;
541	struct wpabuf *resp;
542	struct p2p_message msg;
543	u8 status = P2P_SC_FAIL_INVALID_PARAMS;
544	int tie_breaker = 0;
545	int freq;
546
547	p2p_dbg(p2p, "Received GO Negotiation Request from " MACSTR "(freq=%d)",
548		MAC2STR(sa), rx_freq);
549
550	if (p2p_parse(data, len, &msg))
551		return;
552
553	if (!msg.capability) {
554		p2p_dbg(p2p, "Mandatory Capability attribute missing from GO Negotiation Request");
555#ifdef CONFIG_P2P_STRICT
556		goto fail;
557#endif /* CONFIG_P2P_STRICT */
558	}
559
560	if (msg.go_intent)
561		tie_breaker = *msg.go_intent & 0x01;
562	else {
563		p2p_dbg(p2p, "Mandatory GO Intent attribute missing from GO Negotiation Request");
564#ifdef CONFIG_P2P_STRICT
565		goto fail;
566#endif /* CONFIG_P2P_STRICT */
567	}
568
569	if (!msg.config_timeout) {
570		p2p_dbg(p2p, "Mandatory Configuration Timeout attribute missing from GO Negotiation Request");
571#ifdef CONFIG_P2P_STRICT
572		goto fail;
573#endif /* CONFIG_P2P_STRICT */
574	}
575
576	if (!msg.listen_channel) {
577		p2p_dbg(p2p, "No Listen Channel attribute received");
578		goto fail;
579	}
580	if (!msg.operating_channel) {
581		p2p_dbg(p2p, "No Operating Channel attribute received");
582		goto fail;
583	}
584	if (!msg.channel_list) {
585		p2p_dbg(p2p, "No Channel List attribute received");
586		goto fail;
587	}
588	if (!msg.intended_addr) {
589		p2p_dbg(p2p, "No Intended P2P Interface Address attribute received");
590		goto fail;
591	}
592	if (!msg.p2p_device_info) {
593		p2p_dbg(p2p, "No P2P Device Info attribute received");
594		goto fail;
595	}
596
597	if (os_memcmp(msg.p2p_device_addr, sa, ETH_ALEN) != 0) {
598		p2p_dbg(p2p, "Unexpected GO Negotiation Request SA=" MACSTR
599			" != dev_addr=" MACSTR,
600			MAC2STR(sa), MAC2STR(msg.p2p_device_addr));
601		goto fail;
602	}
603
604	dev = p2p_get_device(p2p, sa);
605
606	if (msg.status && *msg.status) {
607		p2p_dbg(p2p, "Unexpected Status attribute (%d) in GO Negotiation Request",
608			*msg.status);
609		if (dev && p2p->go_neg_peer == dev &&
610		    *msg.status == P2P_SC_FAIL_REJECTED_BY_USER) {
611			/*
612			 * This mechanism for using Status attribute in GO
613			 * Negotiation Request is not compliant with the P2P
614			 * specification, but some deployed devices use it to
615			 * indicate rejection of GO Negotiation in a case where
616			 * they have sent out GO Negotiation Response with
617			 * status 1. The P2P specification explicitly disallows
618			 * this. To avoid unnecessary interoperability issues
619			 * and extra frames, mark the pending negotiation as
620			 * failed and do not reply to this GO Negotiation
621			 * Request frame.
622			 */
623			p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
624			p2p_go_neg_failed(p2p, dev, *msg.status);
625			p2p_parse_free(&msg);
626			return;
627		}
628		goto fail;
629	}
630
631	if (dev == NULL)
632		dev = p2p_add_dev_from_go_neg_req(p2p, sa, &msg);
633	else if ((dev->flags & P2P_DEV_PROBE_REQ_ONLY) ||
634		  !(dev->flags & P2P_DEV_REPORTED))
635		p2p_add_dev_info(p2p, sa, dev, &msg);
636	else if (!dev->listen_freq && !dev->oper_freq) {
637		/*
638		 * This may happen if the peer entry was added based on PD
639		 * Request and no Probe Request/Response frame has been received
640		 * from this peer (or that information has timed out).
641		 */
642		p2p_dbg(p2p, "Update peer " MACSTR
643			" based on GO Neg Req since listen/oper freq not known",
644			MAC2STR(dev->info.p2p_device_addr));
645		p2p_add_dev_info(p2p, sa, dev, &msg);
646	}
647
648	if (dev && dev->flags & P2P_DEV_USER_REJECTED) {
649		p2p_dbg(p2p, "User has rejected this peer");
650		status = P2P_SC_FAIL_REJECTED_BY_USER;
651	} else if (dev == NULL ||
652		   (dev->wps_method == WPS_NOT_READY &&
653		    (p2p->authorized_oob_dev_pw_id == 0 ||
654		     p2p->authorized_oob_dev_pw_id !=
655		     msg.dev_password_id))) {
656		p2p_dbg(p2p, "Not ready for GO negotiation with " MACSTR,
657			MAC2STR(sa));
658		status = P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE;
659		p2p->cfg->go_neg_req_rx(p2p->cfg->cb_ctx, sa,
660					msg.dev_password_id);
661	} else if (p2p->go_neg_peer && p2p->go_neg_peer != dev) {
662		p2p_dbg(p2p, "Already in Group Formation with another peer");
663		status = P2P_SC_FAIL_UNABLE_TO_ACCOMMODATE;
664	} else {
665		int go;
666
667		if (!p2p->go_neg_peer) {
668			p2p_dbg(p2p, "Starting GO Negotiation with previously authorized peer");
669			if (!(dev->flags & P2P_DEV_FORCE_FREQ)) {
670				p2p_dbg(p2p, "Use default channel settings");
671				p2p->op_reg_class = p2p->cfg->op_reg_class;
672				p2p->op_channel = p2p->cfg->op_channel;
673				os_memcpy(&p2p->channels, &p2p->cfg->channels,
674					  sizeof(struct p2p_channels));
675			} else {
676				p2p_dbg(p2p, "Use previously configured forced channel settings");
677			}
678		}
679
680		dev->flags &= ~P2P_DEV_NOT_YET_READY;
681
682		if (!msg.go_intent) {
683			p2p_dbg(p2p, "No GO Intent attribute received");
684			goto fail;
685		}
686		if ((*msg.go_intent >> 1) > P2P_MAX_GO_INTENT) {
687			p2p_dbg(p2p, "Invalid GO Intent value (%u) received",
688				*msg.go_intent >> 1);
689			goto fail;
690		}
691
692		if (dev->go_neg_req_sent &&
693		    os_memcmp(sa, p2p->cfg->dev_addr, ETH_ALEN) > 0) {
694			p2p_dbg(p2p, "Do not reply since peer has higher address and GO Neg Request already sent");
695			p2p_parse_free(&msg);
696			return;
697		}
698
699		go = p2p_go_det(p2p->go_intent, *msg.go_intent);
700		if (go < 0) {
701			p2p_dbg(p2p, "Incompatible GO Intent");
702			status = P2P_SC_FAIL_BOTH_GO_INTENT_15;
703			goto fail;
704		}
705
706		if (p2p_peer_channels(p2p, dev, msg.channel_list,
707				      msg.channel_list_len) < 0) {
708			p2p_dbg(p2p, "No common channels found");
709			status = P2P_SC_FAIL_NO_COMMON_CHANNELS;
710			goto fail;
711		}
712
713		switch (msg.dev_password_id) {
714		case DEV_PW_REGISTRAR_SPECIFIED:
715			p2p_dbg(p2p, "PIN from peer Display");
716			if (dev->wps_method != WPS_PIN_KEYPAD) {
717				p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
718					p2p_wps_method_str(dev->wps_method));
719				status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
720				goto fail;
721			}
722			break;
723		case DEV_PW_USER_SPECIFIED:
724			p2p_dbg(p2p, "Peer entered PIN on Keypad");
725			if (dev->wps_method != WPS_PIN_DISPLAY) {
726				p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
727					p2p_wps_method_str(dev->wps_method));
728				status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
729				goto fail;
730			}
731			break;
732		case DEV_PW_PUSHBUTTON:
733			p2p_dbg(p2p, "Peer using pushbutton");
734			if (dev->wps_method != WPS_PBC) {
735				p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
736					p2p_wps_method_str(dev->wps_method));
737				status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
738				goto fail;
739			}
740			break;
741		default:
742			if (msg.dev_password_id &&
743			    msg.dev_password_id == dev->oob_pw_id) {
744				p2p_dbg(p2p, "Peer using NFC");
745				if (dev->wps_method != WPS_NFC) {
746					p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
747						p2p_wps_method_str(
748							dev->wps_method));
749					status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
750					goto fail;
751				}
752				break;
753			}
754#ifdef CONFIG_WPS_NFC
755			if (p2p->authorized_oob_dev_pw_id &&
756			    msg.dev_password_id ==
757			    p2p->authorized_oob_dev_pw_id) {
758				p2p_dbg(p2p, "Using static handover with our device password from NFC Tag");
759				dev->wps_method = WPS_NFC;
760				dev->oob_pw_id = p2p->authorized_oob_dev_pw_id;
761				break;
762			}
763#endif /* CONFIG_WPS_NFC */
764			p2p_dbg(p2p, "Unsupported Device Password ID %d",
765				msg.dev_password_id);
766			status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
767			goto fail;
768		}
769
770		if (go && p2p_go_select_channel(p2p, dev, &status) < 0)
771			goto fail;
772
773		dev->go_state = go ? LOCAL_GO : REMOTE_GO;
774		dev->oper_freq = p2p_channel_to_freq(msg.operating_channel[3],
775						     msg.operating_channel[4]);
776		p2p_dbg(p2p, "Peer operating channel preference: %d MHz",
777			dev->oper_freq);
778
779		if (msg.config_timeout) {
780			dev->go_timeout = msg.config_timeout[0];
781			dev->client_timeout = msg.config_timeout[1];
782		}
783
784		p2p_dbg(p2p, "GO Negotiation with " MACSTR, MAC2STR(sa));
785		if (p2p->state != P2P_IDLE)
786			p2p_stop_find_for_freq(p2p, rx_freq);
787		p2p_set_state(p2p, P2P_GO_NEG);
788		p2p_clear_timeout(p2p);
789		dev->dialog_token = msg.dialog_token;
790		os_memcpy(dev->intended_addr, msg.intended_addr, ETH_ALEN);
791		p2p->go_neg_peer = dev;
792		status = P2P_SC_SUCCESS;
793	}
794
795fail:
796	if (dev)
797		dev->status = status;
798	resp = p2p_build_go_neg_resp(p2p, dev, msg.dialog_token, status,
799				     !tie_breaker);
800	p2p_parse_free(&msg);
801	if (resp == NULL)
802		return;
803	p2p_dbg(p2p, "Sending GO Negotiation Response");
804	if (rx_freq > 0)
805		freq = rx_freq;
806	else
807		freq = p2p_channel_to_freq(p2p->cfg->reg_class,
808					   p2p->cfg->channel);
809	if (freq < 0) {
810		p2p_dbg(p2p, "Unknown regulatory class/channel");
811		wpabuf_free(resp);
812		return;
813	}
814	if (status == P2P_SC_SUCCESS) {
815		p2p->pending_action_state = P2P_PENDING_GO_NEG_RESPONSE;
816		dev->flags |= P2P_DEV_WAIT_GO_NEG_CONFIRM;
817		if (os_memcmp(sa, p2p->cfg->dev_addr, ETH_ALEN) < 0) {
818			/*
819			 * Peer has smaller address, so the GO Negotiation
820			 * Response from us is expected to complete
821			 * negotiation. Ignore a GO Negotiation Response from
822			 * the peer if it happens to be received after this
823			 * point due to a race condition in GO Negotiation
824			 * Request transmission and processing.
825			 */
826			dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
827		}
828	} else
829		p2p->pending_action_state =
830			P2P_PENDING_GO_NEG_RESPONSE_FAILURE;
831	if (p2p_send_action(p2p, freq, sa, p2p->cfg->dev_addr,
832			    p2p->cfg->dev_addr,
833			    wpabuf_head(resp), wpabuf_len(resp), 500) < 0) {
834		p2p_dbg(p2p, "Failed to send Action frame");
835	}
836
837	wpabuf_free(resp);
838}
839
840
841static struct wpabuf * p2p_build_go_neg_conf(struct p2p_data *p2p,
842					     struct p2p_device *peer,
843					     u8 dialog_token, u8 status,
844					     const u8 *resp_chan, int go)
845{
846	struct wpabuf *buf;
847	u8 *len;
848	struct p2p_channels res;
849	u8 group_capab;
850	size_t extra = 0;
851
852	p2p_dbg(p2p, "Building GO Negotiation Confirm");
853
854#ifdef CONFIG_WIFI_DISPLAY
855	if (p2p->wfd_ie_go_neg)
856		extra = wpabuf_len(p2p->wfd_ie_go_neg);
857#endif /* CONFIG_WIFI_DISPLAY */
858
859	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_CONF])
860		extra += wpabuf_len(p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_CONF]);
861
862	buf = wpabuf_alloc(1000 + extra);
863	if (buf == NULL)
864		return NULL;
865
866	p2p_buf_add_public_action_hdr(buf, P2P_GO_NEG_CONF, dialog_token);
867
868	len = p2p_buf_add_ie_hdr(buf);
869	p2p_buf_add_status(buf, status);
870	group_capab = 0;
871	if (peer->go_state == LOCAL_GO) {
872		if (peer->flags & P2P_DEV_PREFER_PERSISTENT_GROUP) {
873			group_capab |= P2P_GROUP_CAPAB_PERSISTENT_GROUP;
874			if (peer->flags & P2P_DEV_PREFER_PERSISTENT_RECONN)
875				group_capab |=
876					P2P_GROUP_CAPAB_PERSISTENT_RECONN;
877		}
878		if (p2p->cross_connect)
879			group_capab |= P2P_GROUP_CAPAB_CROSS_CONN;
880		if (p2p->cfg->p2p_intra_bss)
881			group_capab |= P2P_GROUP_CAPAB_INTRA_BSS_DIST;
882	}
883	p2p_buf_add_capability(buf, p2p->dev_capab &
884			       ~P2P_DEV_CAPAB_CLIENT_DISCOVERABILITY,
885			       group_capab);
886	if (go || resp_chan == NULL)
887		p2p_buf_add_operating_channel(buf, p2p->cfg->country,
888					      p2p->op_reg_class,
889					      p2p->op_channel);
890	else
891		p2p_buf_add_operating_channel(buf, (const char *) resp_chan,
892					      resp_chan[3], resp_chan[4]);
893	p2p_channels_intersect(&p2p->channels, &peer->channels, &res);
894	p2p_buf_add_channel_list(buf, p2p->cfg->country, &res);
895	if (go) {
896		p2p_buf_add_group_id(buf, p2p->cfg->dev_addr, p2p->ssid,
897				     p2p->ssid_len);
898	}
899	p2p_buf_update_ie_hdr(buf, len);
900
901#ifdef CONFIG_WIFI_DISPLAY
902	if (p2p->wfd_ie_go_neg)
903		wpabuf_put_buf(buf, p2p->wfd_ie_go_neg);
904#endif /* CONFIG_WIFI_DISPLAY */
905
906	if (p2p->vendor_elem && p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_CONF])
907		wpabuf_put_buf(buf, p2p->vendor_elem[VENDOR_ELEM_P2P_GO_NEG_CONF]);
908
909	return buf;
910}
911
912
913void p2p_process_go_neg_resp(struct p2p_data *p2p, const u8 *sa,
914			     const u8 *data, size_t len, int rx_freq)
915{
916	struct p2p_device *dev;
917	int go = -1;
918	struct p2p_message msg;
919	u8 status = P2P_SC_SUCCESS;
920	int freq;
921
922	p2p_dbg(p2p, "Received GO Negotiation Response from " MACSTR
923		" (freq=%d)", MAC2STR(sa), rx_freq);
924	dev = p2p_get_device(p2p, sa);
925	if (dev == NULL || dev->wps_method == WPS_NOT_READY ||
926	    dev != p2p->go_neg_peer) {
927		p2p_dbg(p2p, "Not ready for GO negotiation with " MACSTR,
928			MAC2STR(sa));
929		return;
930	}
931
932	if (p2p_parse(data, len, &msg))
933		return;
934
935	if (!(dev->flags & P2P_DEV_WAIT_GO_NEG_RESPONSE)) {
936		p2p_dbg(p2p, "Was not expecting GO Negotiation Response - ignore");
937		p2p_parse_free(&msg);
938		return;
939	}
940	dev->flags &= ~P2P_DEV_WAIT_GO_NEG_RESPONSE;
941
942	if (msg.dialog_token != dev->dialog_token) {
943		p2p_dbg(p2p, "Unexpected Dialog Token %u (expected %u)",
944			msg.dialog_token, dev->dialog_token);
945		p2p_parse_free(&msg);
946		return;
947	}
948
949	if (!msg.status) {
950		p2p_dbg(p2p, "No Status attribute received");
951		status = P2P_SC_FAIL_INVALID_PARAMS;
952		goto fail;
953	}
954	if (*msg.status) {
955		p2p_dbg(p2p, "GO Negotiation rejected: status %d", *msg.status);
956		dev->go_neg_req_sent = 0;
957		if (*msg.status == P2P_SC_FAIL_INFO_CURRENTLY_UNAVAILABLE) {
958			p2p_dbg(p2p, "Wait for the peer to become ready for GO Negotiation");
959			dev->flags |= P2P_DEV_NOT_YET_READY;
960			os_get_reltime(&dev->go_neg_wait_started);
961			p2p_set_state(p2p, P2P_WAIT_PEER_IDLE);
962			p2p_set_timeout(p2p, 0, 0);
963		} else {
964			p2p_dbg(p2p, "Stop GO Negotiation attempt");
965			p2p_go_neg_failed(p2p, dev, *msg.status);
966		}
967		p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
968		p2p_parse_free(&msg);
969		return;
970	}
971
972	if (!msg.capability) {
973		p2p_dbg(p2p, "Mandatory Capability attribute missing from GO Negotiation Response");
974#ifdef CONFIG_P2P_STRICT
975		status = P2P_SC_FAIL_INVALID_PARAMS;
976		goto fail;
977#endif /* CONFIG_P2P_STRICT */
978	}
979
980	if (!msg.p2p_device_info) {
981		p2p_dbg(p2p, "Mandatory P2P Device Info attribute missing from GO Negotiation Response");
982#ifdef CONFIG_P2P_STRICT
983		status = P2P_SC_FAIL_INVALID_PARAMS;
984		goto fail;
985#endif /* CONFIG_P2P_STRICT */
986	}
987
988	if (!msg.intended_addr) {
989		p2p_dbg(p2p, "No Intended P2P Interface Address attribute received");
990		status = P2P_SC_FAIL_INVALID_PARAMS;
991		goto fail;
992	}
993
994	if (!msg.go_intent) {
995		p2p_dbg(p2p, "No GO Intent attribute received");
996		status = P2P_SC_FAIL_INVALID_PARAMS;
997		goto fail;
998	}
999	if ((*msg.go_intent >> 1) > P2P_MAX_GO_INTENT) {
1000		p2p_dbg(p2p, "Invalid GO Intent value (%u) received",
1001			*msg.go_intent >> 1);
1002		status = P2P_SC_FAIL_INVALID_PARAMS;
1003		goto fail;
1004	}
1005
1006	go = p2p_go_det(p2p->go_intent, *msg.go_intent);
1007	if (go < 0) {
1008		p2p_dbg(p2p, "Incompatible GO Intent");
1009		status = P2P_SC_FAIL_INCOMPATIBLE_PARAMS;
1010		goto fail;
1011	}
1012
1013	if (!go && msg.group_id) {
1014		/* Store SSID for Provisioning step */
1015		p2p->ssid_len = msg.group_id_len - ETH_ALEN;
1016		os_memcpy(p2p->ssid, msg.group_id + ETH_ALEN, p2p->ssid_len);
1017	} else if (!go) {
1018		p2p_dbg(p2p, "Mandatory P2P Group ID attribute missing from GO Negotiation Response");
1019		p2p->ssid_len = 0;
1020		status = P2P_SC_FAIL_INVALID_PARAMS;
1021		goto fail;
1022	}
1023
1024	if (!msg.config_timeout) {
1025		p2p_dbg(p2p, "Mandatory Configuration Timeout attribute missing from GO Negotiation Response");
1026#ifdef CONFIG_P2P_STRICT
1027		status = P2P_SC_FAIL_INVALID_PARAMS;
1028		goto fail;
1029#endif /* CONFIG_P2P_STRICT */
1030	} else {
1031		dev->go_timeout = msg.config_timeout[0];
1032		dev->client_timeout = msg.config_timeout[1];
1033	}
1034
1035	if (!msg.operating_channel && !go) {
1036		/*
1037		 * Note: P2P Client may omit Operating Channel attribute to
1038		 * indicate it does not have a preference.
1039		 */
1040		p2p_dbg(p2p, "No Operating Channel attribute received");
1041		status = P2P_SC_FAIL_INVALID_PARAMS;
1042		goto fail;
1043	}
1044	if (!msg.channel_list) {
1045		p2p_dbg(p2p, "No Channel List attribute received");
1046		status = P2P_SC_FAIL_INVALID_PARAMS;
1047		goto fail;
1048	}
1049
1050	if (p2p_peer_channels(p2p, dev, msg.channel_list,
1051			      msg.channel_list_len) < 0) {
1052		p2p_dbg(p2p, "No common channels found");
1053		status = P2P_SC_FAIL_NO_COMMON_CHANNELS;
1054		goto fail;
1055	}
1056
1057	if (msg.operating_channel) {
1058		dev->oper_freq = p2p_channel_to_freq(msg.operating_channel[3],
1059						     msg.operating_channel[4]);
1060		p2p_dbg(p2p, "Peer operating channel preference: %d MHz",
1061			dev->oper_freq);
1062	} else
1063		dev->oper_freq = 0;
1064
1065	switch (msg.dev_password_id) {
1066	case DEV_PW_REGISTRAR_SPECIFIED:
1067		p2p_dbg(p2p, "PIN from peer Display");
1068		if (dev->wps_method != WPS_PIN_KEYPAD) {
1069			p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
1070				p2p_wps_method_str(dev->wps_method));
1071			status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
1072			goto fail;
1073		}
1074		break;
1075	case DEV_PW_USER_SPECIFIED:
1076		p2p_dbg(p2p, "Peer entered PIN on Keypad");
1077		if (dev->wps_method != WPS_PIN_DISPLAY) {
1078			p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
1079				p2p_wps_method_str(dev->wps_method));
1080			status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
1081			goto fail;
1082		}
1083		break;
1084	case DEV_PW_PUSHBUTTON:
1085		p2p_dbg(p2p, "Peer using pushbutton");
1086		if (dev->wps_method != WPS_PBC) {
1087			p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
1088				p2p_wps_method_str(dev->wps_method));
1089			status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
1090			goto fail;
1091		}
1092		break;
1093	default:
1094		if (msg.dev_password_id &&
1095		    msg.dev_password_id == dev->oob_pw_id) {
1096			p2p_dbg(p2p, "Peer using NFC");
1097			if (dev->wps_method != WPS_NFC) {
1098				p2p_dbg(p2p, "We have wps_method=%s -> incompatible",
1099					p2p_wps_method_str(dev->wps_method));
1100				status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
1101				goto fail;
1102			}
1103			break;
1104		}
1105		p2p_dbg(p2p, "Unsupported Device Password ID %d",
1106			msg.dev_password_id);
1107		status = P2P_SC_FAIL_INCOMPATIBLE_PROV_METHOD;
1108		goto fail;
1109	}
1110
1111	if (go && p2p_go_select_channel(p2p, dev, &status) < 0)
1112		goto fail;
1113
1114	p2p_set_state(p2p, P2P_GO_NEG);
1115	p2p_clear_timeout(p2p);
1116
1117	p2p_dbg(p2p, "GO Negotiation with " MACSTR, MAC2STR(sa));
1118	os_memcpy(dev->intended_addr, msg.intended_addr, ETH_ALEN);
1119
1120fail:
1121	/* Store GO Negotiation Confirmation to allow retransmission */
1122	wpabuf_free(dev->go_neg_conf);
1123	dev->go_neg_conf = p2p_build_go_neg_conf(p2p, dev, msg.dialog_token,
1124						 status, msg.operating_channel,
1125						 go);
1126	p2p_parse_free(&msg);
1127	if (dev->go_neg_conf == NULL)
1128		return;
1129	p2p_dbg(p2p, "Sending GO Negotiation Confirm");
1130	if (status == P2P_SC_SUCCESS) {
1131		p2p->pending_action_state = P2P_PENDING_GO_NEG_CONFIRM;
1132		dev->go_state = go ? LOCAL_GO : REMOTE_GO;
1133	} else
1134		p2p->pending_action_state = P2P_NO_PENDING_ACTION;
1135	if (rx_freq > 0)
1136		freq = rx_freq;
1137	else
1138		freq = dev->listen_freq;
1139
1140	dev->go_neg_conf_freq = freq;
1141	dev->go_neg_conf_sent = 0;
1142
1143	if (p2p_send_action(p2p, freq, sa, p2p->cfg->dev_addr, sa,
1144			    wpabuf_head(dev->go_neg_conf),
1145			    wpabuf_len(dev->go_neg_conf), 200) < 0) {
1146		p2p_dbg(p2p, "Failed to send Action frame");
1147		p2p_go_neg_failed(p2p, dev, -1);
1148		p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
1149	} else
1150		dev->go_neg_conf_sent++;
1151	if (status != P2P_SC_SUCCESS) {
1152		p2p_dbg(p2p, "GO Negotiation failed");
1153		p2p_go_neg_failed(p2p, dev, status);
1154	}
1155}
1156
1157
1158void p2p_process_go_neg_conf(struct p2p_data *p2p, const u8 *sa,
1159			     const u8 *data, size_t len)
1160{
1161	struct p2p_device *dev;
1162	struct p2p_message msg;
1163
1164	p2p_dbg(p2p, "Received GO Negotiation Confirm from " MACSTR,
1165		MAC2STR(sa));
1166	dev = p2p_get_device(p2p, sa);
1167	if (dev == NULL || dev->wps_method == WPS_NOT_READY ||
1168	    dev != p2p->go_neg_peer) {
1169		p2p_dbg(p2p, "Not ready for GO negotiation with " MACSTR,
1170			MAC2STR(sa));
1171		return;
1172	}
1173
1174	if (p2p->pending_action_state == P2P_PENDING_GO_NEG_RESPONSE) {
1175		p2p_dbg(p2p, "Stopped waiting for TX status on GO Negotiation Response since we already received Confirmation");
1176		p2p->pending_action_state = P2P_NO_PENDING_ACTION;
1177	}
1178
1179	if (p2p_parse(data, len, &msg))
1180		return;
1181
1182	if (!(dev->flags & P2P_DEV_WAIT_GO_NEG_CONFIRM)) {
1183		p2p_dbg(p2p, "Was not expecting GO Negotiation Confirm - ignore");
1184		p2p_parse_free(&msg);
1185		return;
1186	}
1187	dev->flags &= ~P2P_DEV_WAIT_GO_NEG_CONFIRM;
1188	p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
1189
1190	if (msg.dialog_token != dev->dialog_token) {
1191		p2p_dbg(p2p, "Unexpected Dialog Token %u (expected %u)",
1192			msg.dialog_token, dev->dialog_token);
1193		p2p_parse_free(&msg);
1194		return;
1195	}
1196
1197	if (!msg.status) {
1198		p2p_dbg(p2p, "No Status attribute received");
1199		p2p_parse_free(&msg);
1200		return;
1201	}
1202	if (*msg.status) {
1203		p2p_dbg(p2p, "GO Negotiation rejected: status %d", *msg.status);
1204		p2p_go_neg_failed(p2p, dev, *msg.status);
1205		p2p_parse_free(&msg);
1206		return;
1207	}
1208
1209	if (dev->go_state == REMOTE_GO && msg.group_id) {
1210		/* Store SSID for Provisioning step */
1211		p2p->ssid_len = msg.group_id_len - ETH_ALEN;
1212		os_memcpy(p2p->ssid, msg.group_id + ETH_ALEN, p2p->ssid_len);
1213	} else if (dev->go_state == REMOTE_GO) {
1214		p2p_dbg(p2p, "Mandatory P2P Group ID attribute missing from GO Negotiation Confirmation");
1215		p2p->ssid_len = 0;
1216		p2p_go_neg_failed(p2p, dev, P2P_SC_FAIL_INVALID_PARAMS);
1217		p2p_parse_free(&msg);
1218		return;
1219	}
1220
1221	if (!msg.operating_channel) {
1222		p2p_dbg(p2p, "Mandatory Operating Channel attribute missing from GO Negotiation Confirmation");
1223#ifdef CONFIG_P2P_STRICT
1224		p2p_parse_free(&msg);
1225		return;
1226#endif /* CONFIG_P2P_STRICT */
1227	} else if (dev->go_state == REMOTE_GO) {
1228		int oper_freq = p2p_channel_to_freq(msg.operating_channel[3],
1229						    msg.operating_channel[4]);
1230		if (oper_freq != dev->oper_freq) {
1231			p2p_dbg(p2p, "Updated peer (GO) operating channel preference from %d MHz to %d MHz",
1232				dev->oper_freq, oper_freq);
1233			dev->oper_freq = oper_freq;
1234		}
1235	}
1236
1237	if (!msg.channel_list) {
1238		p2p_dbg(p2p, "Mandatory Operating Channel attribute missing from GO Negotiation Confirmation");
1239#ifdef CONFIG_P2P_STRICT
1240		p2p_parse_free(&msg);
1241		return;
1242#endif /* CONFIG_P2P_STRICT */
1243	}
1244
1245	p2p_parse_free(&msg);
1246
1247	if (dev->go_state == UNKNOWN_GO) {
1248		/*
1249		 * This should not happen since GO negotiation has already
1250		 * been completed.
1251		 */
1252		p2p_dbg(p2p, "Unexpected GO Neg state - do not know which end becomes GO");
1253		return;
1254	}
1255
1256	/*
1257	 * The peer could have missed our ctrl::ack frame for GO Negotiation
1258	 * Confirm and continue retransmitting the frame. To reduce the
1259	 * likelihood of the peer not getting successful TX status for the
1260	 * GO Negotiation Confirm frame, wait a short time here before starting
1261	 * the group so that we will remain on the current channel to
1262	 * acknowledge any possible retransmission from the peer.
1263	 */
1264	p2p_dbg(p2p, "20 ms wait on current channel before starting group");
1265	os_sleep(0, 20000);
1266
1267	p2p_go_complete(p2p, dev);
1268}
1269