• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * WPA Supplicant - command line interface for wpa_supplicant daemon
3  * Copyright (c) 2004-2013, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8 
9 #include "utils/common.h"
10 #include "eloop.h"
11 #include "wifi_api.h"
12 #include "ctrl_iface.h"
13 #ifdef CONFIG_LITEOS_WPA
14 #include "wpa_supplicant_i.h"
15 #endif /* CONFIG_LITEOS_WPA */
16 #include "securec.h"
17 
18 #define MAX_WPA_CLI_ARGC_NUM 10
19 
wpa_ctrl_command(void * buf)20 static int wpa_ctrl_command(void *buf)
21 {
22 	if (buf == NULL)
23 		return EXT_WIFI_FAIL;
24 	int ret;
25 	unsigned int int_save;
26 
27 	os_intlock(&int_save);
28 	if (g_ctrl_iface_data == NULL) {
29 		os_intrestore(int_save);
30 		wpa_error_log0(MSG_ERROR, "ctrl command: ctrl iface data is NULL\n");
31 
32 		return EXT_WIFI_FAIL;
33 	}
34 	ret = eloop_post_event(g_ctrl_iface_data->event_queue, buf, 1);
35 	os_intrestore(int_save);
36 	return ret;
37 }
38 
write_cmd(char * buf,size_t buflen,int argc,char * argv[])39 static int write_cmd(char *buf, size_t buflen, int argc, char *argv[])
40 {
41 	int i, res;
42 	char *pos = NULL;
43 	char *end = NULL;
44 
45 	if ((buflen < 1) || (argc <= 0) || (argc > MAX_WPA_CLI_ARGC_NUM))
46 		return EXT_WIFI_FAIL;
47 
48 	pos = buf;
49 	end = buf + buflen;
50 
51 	res = os_snprintf(pos, end - pos, "%s", argv[0]);
52 	if (os_snprintf_error(end - pos, res))
53 		goto fail;
54 	pos += res;
55 
56 	argc--;
57 	argv++;
58 
59 	for (i = 0; i < argc; i++) {
60 		res = os_snprintf(pos, end - pos, " %s", argv[i]);
61 		if (os_snprintf_error(end - pos, res))
62 			goto fail;
63 		pos += res;
64 	}
65 
66 	buf[buflen - 1] = '\0';
67 	return EXT_WIFI_OK;
68 
69 fail:
70 	wpa_error_log0(MSG_ERROR, "write_cmd: cmd is too Long \n");
71 	return EXT_WIFI_FAIL;
72 }
73 
wpa_cli_cmd(struct wpa_supplicant * wpa_s,int argc,char * argv[])74 int wpa_cli_cmd(struct wpa_supplicant *wpa_s, int argc, char *argv[])
75 {
76 	struct ctrl_iface_event_buf *event_buf  = NULL;
77 	char *buf = NULL;
78 	event_buf = (struct ctrl_iface_event_buf *)os_malloc(sizeof(struct ctrl_iface_event_buf));
79 	if (event_buf == NULL)
80 		return EXT_WIFI_FAIL;
81 
82 	buf = (char *)os_malloc(WPA_CTRL_CMD_LEN);
83 	if (buf == NULL)
84 		goto fail_event;
85 
86 	if (write_cmd(buf, WPA_CTRL_CMD_LEN, argc, argv) < 0)
87 		goto fail;
88 
89 	event_buf->wpa_s = wpa_s;
90 	event_buf->buf   = buf;
91 	if (wpa_ctrl_command(event_buf) < 0) {
92 		wpa_printf(MSG_ERROR, "wpa_cli_cmd fail!\n");
93 		goto fail;
94 	}
95 
96 	return EXT_WIFI_OK;
97 fail:
98 	os_memset(buf, 0, WPA_CTRL_CMD_LEN);
99 	os_free(buf);
100 fail_event:
101 	os_free(event_buf);
102 	return EXT_WIFI_FAIL;
103 }
104 
105 #ifdef CONFIG_WPS
wpa_cli_wps_pbc(struct wpa_supplicant * wpa_s,const char * bssid,size_t len)106 int wpa_cli_wps_pbc(struct wpa_supplicant *wpa_s, const char *bssid, size_t len)
107 {
108 	char *cmd_bssid_null[] = {"WPS_PBC"};
109 	char *cmd_bssid[] = {"WPS_PBC", (char *)bssid};
110 
111 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_wps_pbc");
112 	if (bssid == NULL) {
113 		wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_wps_pbc cmd_bssid_null");
114 		return wpa_cli_cmd(wpa_s, 1, cmd_bssid_null);
115 	} else {
116 		if (len == 0)
117 			return EXT_WIFI_FAIL;
118 		return wpa_cli_cmd(wpa_s, 2, cmd_bssid);
119 	}
120 }
121 
wpa_cli_wps_pin(struct wpa_supplicant * wpa_s,const char * pin,size_t pin_len,const char * bssid,size_t len)122 int wpa_cli_wps_pin(struct wpa_supplicant *wpa_s, const char *pin, size_t pin_len, const char *bssid, size_t len)
123 {
124 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_wps_pin");
125 	if ((pin == NULL) || (pin_len != 8)) {    // 8: WPS PIN length
126 		wpa_warning_log0(MSG_DEBUG, "wpa_cli_wps_pin : pin is NULL");
127 		return EXT_WIFI_FAIL;
128 	}
129 	if (bssid != NULL) {
130 		if (len == 0)
131 			return EXT_WIFI_FAIL;
132 		char *cmd_bssid_pin[] = {"WPS_PIN", (char *)bssid, (char *)pin};
133 		return wpa_cli_cmd(wpa_s, 3, cmd_bssid_pin);
134 	} else {
135 		char *cmd_null_pin[] = {"WPS_PIN any", (char *)pin};
136 		return wpa_cli_cmd(wpa_s, 2, cmd_null_pin);
137 	}
138 }
139 #endif /* CONFIG_WPS */
140 
141 #ifdef CONFIG_WNM
wpa_cli_wnm_bss_query(struct wpa_supplicant * wpa_s,const char * buf,size_t len)142 int wpa_cli_wnm_bss_query(struct wpa_supplicant *wpa_s, const char *buf, size_t len)
143 {
144 	char *cmd[] = {"WNM_BSS_QUERY", (char *)buf};
145 	if ((len == 0) && (os_strlen(buf) != 0))
146 		return EXT_WIFI_FAIL;
147 
148 	return wpa_cli_cmd(wpa_s, 2, cmd);
149 }
150 
wpa_cli_wnm_notify(struct wpa_supplicant * wpa_s,const char * buf,size_t len)151 int wpa_cli_wnm_notify(struct wpa_supplicant *wpa_s, const char *buf, size_t len)
152 {
153 	char *cmd[] = {"WNM_Notify", (char *)buf};
154 	if ((len == 0) && (os_strlen(buf) != 0))
155 		return EXT_WIFI_FAIL;
156 
157 	return wpa_cli_cmd(wpa_s, 2, cmd);
158 }
159 #endif /* CONFIG_WNM */
160 
wpa_cli_scan(struct wpa_supplicant * wpa_s,const char * buf,size_t len)161 int wpa_cli_scan(struct wpa_supplicant *wpa_s, const char *buf, size_t len)
162 {
163 	char *cmd[] = {"SCAN", (char *)buf};
164 	if ((len == 0) && (os_strlen(buf) != 0))
165 		return EXT_WIFI_FAIL;
166 
167 	return wpa_cli_cmd(wpa_s, 2, cmd);
168 }
169 
wpa_cli_scan_results(struct wpa_supplicant * wpa_s)170 int wpa_cli_scan_results(struct wpa_supplicant *wpa_s)
171 {
172 	char *cmd[] = {"SCAN_RESULTS"};
173 
174 	return wpa_cli_cmd(wpa_s, 1, cmd);
175 }
176 
wpa_cli_channel_scan(struct wpa_supplicant * wpa_s,int channel)177 int wpa_cli_channel_scan(struct wpa_supplicant *wpa_s, int channel)
178 {
179 	int freq;
180 	char buf[10] = {0};
181 	int ret;
182 
183 	if ((channel > 14) || (channel < 1)) {
184 		wpa_warning_log0(MSG_DEBUG, "set channel error\n");
185 		return EXT_WIFI_FAIL;
186 	}
187 
188 	if (channel != 14)
189 		freq = (channel - 1) * 5 + 2412;
190 	else
191 		freq = 2484;
192 	ret = os_snprintf(buf, sizeof(buf), "freq=%d", freq);
193 	if (os_snprintf_error(sizeof(buf), ret))
194 		return EXT_WIFI_FAIL;
195 
196 	char *cmd[] = {"SCAN", buf};
197 
198 	return wpa_cli_cmd(wpa_s, 2, cmd);
199 }
200 
wpa_cli_ap_deauth(struct wpa_supplicant * wpa_s,const char * buf,size_t len)201 int wpa_cli_ap_deauth(struct wpa_supplicant *wpa_s, const char *buf, size_t len)
202 {
203 	char *cmd[] = {"AP_DEAUTH", (char *)buf};
204 	if (len == 0)
205 		return EXT_WIFI_FAIL;
206 
207 	return wpa_cli_cmd(wpa_s, 2, cmd);
208 }
209 
210 #ifdef LOS_CONFIG_MESH
wpa_cli_mesh_deauth(struct wpa_supplicant * wpa_s,const char * buf,size_t len)211 int wpa_cli_mesh_deauth(struct wpa_supplicant *wpa_s, const char *buf, size_t len)
212 {
213 	char *cmd[] = {"MESH_DEAUTH", (char *)buf};
214 	if (len == 0)
215 		return EXT_WIFI_FAIL;
216 
217 	return wpa_cli_cmd(wpa_s, 2, cmd);
218 }
219 
wpa_cli_join_mesh(struct wpa_supplicant * wpa_s)220 int wpa_cli_join_mesh(struct wpa_supplicant *wpa_s)
221 {
222 	char *cmd[] = {"JOIN_MESH"};
223 
224 	return wpa_cli_cmd(wpa_s, 1, cmd);
225 }
226 
wpa_cli_mesh_set_accept(struct wpa_supplicant * wpa_s,unsigned char enable,enum ext_mesh_enable_flag_type flag)227 int wpa_cli_mesh_set_accept(struct wpa_supplicant *wpa_s, unsigned char enable, enum ext_mesh_enable_flag_type flag)
228 {
229 	char *cmd_sta_accept_enable[] = {"MESH_SET_ACCEPT", "STA", "1"};
230 	char *cmd_sta_accept_disable[] = {"MESH_SET_ACCEPT", "STA", "0"};
231 	char *cmd_peer_accept_enable[] = {"MESH_SET_ACCEPT", "PEER", "1"};
232 	char *cmd_peer_accept_disable[] = {"MESH_SET_ACCEPT", "PEER", "0"};
233 	char **tmp = NULL;
234 	if (flag == EXT_MESH_ENABLE_ACCEPT_STA) {
235 		tmp = (enable == WPA_FLAG_ON) ? cmd_sta_accept_enable : cmd_sta_accept_disable;
236 		return wpa_cli_cmd(wpa_s, 3, tmp);
237 	}
238 	if (flag == EXT_MESH_ENABLE_ACCEPT_PEER) {
239 		tmp = (enable == WPA_FLAG_ON) ? cmd_peer_accept_enable : cmd_peer_accept_disable;
240 		return wpa_cli_cmd(wpa_s, 3, tmp);
241 	}
242 	return EXT_WIFI_FAIL;
243 }
244 
245 #endif /* LOS_CONFIG_MESH */
246 
wpa_cli_ap_scan(struct wpa_supplicant * wpa_s,const char * mode,size_t len)247 int wpa_cli_ap_scan(struct wpa_supplicant *wpa_s, const char *mode, size_t len)
248 {
249 	char *cmd[] = {"AP_SCAN", (char *)mode};
250 	if (len == 0)
251 		return EXT_WIFI_FAIL;
252 
253 	return wpa_cli_cmd(wpa_s, 2, cmd);
254 }
255 
wpa_cli_add_iface(struct wpa_supplicant * wpa_s,const char * ifname)256 int wpa_cli_add_iface(struct wpa_supplicant *wpa_s, const char *ifname)
257 {
258 	char *cmd[] = {"ADD_IFACE", (char *)ifname};
259 
260 	return wpa_cli_cmd(wpa_s, 2, cmd);
261 }
262 
wpa_cli_add_network(struct wpa_supplicant * wpa_s)263 int wpa_cli_add_network(struct wpa_supplicant *wpa_s)
264 {
265 	char *cmd[] = {"ADD_NETWORK"};
266 
267 	return wpa_cli_cmd(wpa_s, 1, cmd);
268 }
269 
wpa_cli_disconnect(struct wpa_supplicant * wpa_s)270 int wpa_cli_disconnect(struct wpa_supplicant *wpa_s)
271 {
272 	char *cmd[] = {"DISCONNECT"};
273 
274 	return wpa_cli_cmd(wpa_s, 1, cmd);
275 }
276 
wpa_cli_remove_network(struct wpa_supplicant * wpa_s,const char * id,size_t len)277 int wpa_cli_remove_network(struct wpa_supplicant *wpa_s, const char *id, size_t len)
278 {
279 	char *cmd_remove_all[] = {"REMOVE_NETWORK all"};
280 	char *cmd_remove[] = {"REMOVE_NETWORK", (char *)id};
281 	unsigned int ret;
282 	unsigned int int_save;
283 
284 	os_intlock(&int_save);
285 	g_wpa_rm_network = SOC_WPA_RM_NETWORK_START;
286 	os_intrestore(int_save);
287 	(void)os_event_clear(g_wpa_event, ~WPA_EVENT_STA_RM_NETWORK_OK);
288 	if (id == NULL) {
289 		(void)wpa_cli_cmd(wpa_s, 1, cmd_remove_all);
290 	} else {
291 		if (len == 0)
292 			return EXT_WIFI_FAIL;
293 		(void)wpa_cli_cmd(wpa_s, 2, cmd_remove);
294 	}
295 	wpa_error_log0(MSG_ERROR, "os_event_read,wait for WPA_EVENT_STA_RM_NETWORK_OK");
296 
297 	(void)os_event_read(g_wpa_event, WPA_EVENT_STA_RM_NETWORK_OK, &ret,
298 	                    WIFI_WAITMODE_OR | WIFI_WAITMODE_CLR, WIFI_EVENT_DELAY_5S);
299 	if (ret == WPA_EVENT_STA_RM_NETWORK_OK)
300 		wpa_error_log0(MSG_INFO, "wpa_cli_remove_network successful.");
301 
302 	g_wpa_rm_network = SOC_WPA_RM_NETWORK_END;
303 	return (ret == WPA_EVENT_STA_RM_NETWORK_OK) ? EXT_WIFI_OK : EXT_WIFI_FAIL;
304 }
305 
wpa_cli_terminate(struct wpa_supplicant * wpa_s,eloop_task_type e_type)306 int wpa_cli_terminate(struct wpa_supplicant *wpa_s, eloop_task_type e_type)
307 {
308 	char buf[10] = {0};
309 	int ret = os_snprintf(buf, sizeof(buf), "%d", e_type);
310 	if (os_snprintf_error(sizeof(buf), ret))
311 		return EXT_WIFI_FAIL;
312 
313 	char *cmd[] = {"ELOOP_TERMINATE", buf};
314 
315 	return wpa_cli_cmd(wpa_s, 2, cmd);
316 }
317 
wpa_cli_remove_iface(struct wpa_supplicant * wpa_s)318 int wpa_cli_remove_iface(struct wpa_supplicant *wpa_s)
319 {
320 	char *cmd[] = {"REMOVE_IFACE"};
321 
322 	return wpa_cli_cmd(wpa_s, 1, cmd);
323 }
324 
wpa_cli_select_network(struct wpa_supplicant * wpa_s,const char * id,size_t len)325 int wpa_cli_select_network(struct wpa_supplicant *wpa_s, const char *id, size_t len)
326 {
327 	char *cmd[] = {"SELECT_NETWORK", (char *)id};
328 	if (len == 0)
329 		return EXT_WIFI_FAIL;
330 
331 	return wpa_cli_cmd(wpa_s, 2, cmd);
332 }
333 
wpa_cli_set_network(struct wpa_supplicant * wpa_s,const char * id,size_t id_len,const char * param,const char * value,size_t value_len)334 int wpa_cli_set_network(struct wpa_supplicant *wpa_s, const char *id, size_t id_len, const char *param,
335 	const char *value, size_t value_len)
336 {
337 	char *cmd[] = {"SET_NETWORK", (char *)id, (char *)param, (char *)value};
338 	if ((id_len == 0) || (value_len == 0))
339 		return EXT_WIFI_FAIL;
340 	return wpa_cli_cmd(wpa_s, 4, cmd);
341 }
342 
wpa_cli_show_sta(struct wpa_supplicant * wpa_s)343 int wpa_cli_show_sta(struct wpa_supplicant *wpa_s)
344 {
345 	char *cmd[] = {"SHOW_STA"};
346 
347 	return wpa_cli_cmd(wpa_s, 1, cmd);
348 }
349 
wpa_cli_list_networks(struct wpa_supplicant * wpa_s)350 int wpa_cli_list_networks(struct wpa_supplicant *wpa_s)
351 {
352 	char *cmd[] = {"LIST_NETWORKS"};
353 
354 	return wpa_cli_cmd(wpa_s, 1, cmd);
355 }
356 
wpa_cli_sta_status(struct wpa_supplicant * wpa_s)357 int wpa_cli_sta_status(struct wpa_supplicant *wpa_s)
358 {
359 	char *cmd[] = {"STA_STATUS"};
360 
361 	return wpa_cli_cmd(wpa_s, 1, cmd);
362 }
363 
wpa_cli_get_sta_status(struct wpa_supplicant * wpa_s,ext_wifi_status_sem * connect_status)364 int wpa_cli_get_sta_status(struct wpa_supplicant *wpa_s, ext_wifi_status_sem *connect_status)
365 {
366     char addr[20];  /* 2^64需要20个字符来存储 */
367 
368     (void)snprintf(addr, sizeof(addr), "%d", connect_status);
369     char *cmd[] = {"STA_STATUS", (char *)addr};
370 
371     return wpa_cli_cmd(wpa_s, 2, cmd);
372 }
373 
wpa_cli_configure_wep(struct wpa_supplicant * wpa_s,const char * id,const struct wpa_assoc_request * assoc)374 int wpa_cli_configure_wep(struct wpa_supplicant *wpa_s, const char *id, const struct wpa_assoc_request *assoc)
375 {
376 	char command[33];
377 	int ret;
378 	if ((assoc == NULL) || (assoc->auth != EXT_WIFI_SECURITY_WEP))
379 		return EXT_WIFI_FAIL;
380 
381 	if ((wpa_cli_set_network(wpa_s, id, WPA_NETWORK_ID_TXT_LEN, "auth_alg",
382 	    	"OPEN SHARED", os_strlen("OPEN SHARED")) != EXT_WIFI_OK) ||
383 	    (wpa_cli_set_network(wpa_s, id, WPA_NETWORK_ID_TXT_LEN, "key_mgmt",
384 	    	"NONE", os_strlen("NONE")) != EXT_WIFI_OK))
385 		return EXT_WIFI_FAIL;
386 	ret = os_snprintf(command, sizeof(command), "wep_key%d", 0);
387 	if (os_snprintf_error(sizeof(command), ret))
388 		return EXT_WIFI_FAIL;
389 
390 	if (wpa_cli_set_network(wpa_s, id, WPA_NETWORK_ID_TXT_LEN, command,
391 	    	assoc->key, os_strlen(assoc->key)) != EXT_WIFI_OK)
392 		return EXT_WIFI_FAIL;
393 
394 	ret = os_snprintf(command, sizeof(command), "%d", 0);
395 	if (os_snprintf_error(sizeof(command), ret))
396 		return EXT_WIFI_FAIL;
397 
398 	if ((wpa_cli_set_network(wpa_s, id, WPA_NETWORK_ID_TXT_LEN, "wep_tx_keyidx",
399 	    	command, os_strlen(command)) != EXT_WIFI_OK))
400 		return EXT_WIFI_FAIL;
401 
402 	return EXT_WIFI_OK;
403 }
404 
wpa_cli_if_start(struct wpa_supplicant * wpa_s,ext_wifi_iftype iftype,const char * ifname,size_t len)405 int wpa_cli_if_start(struct wpa_supplicant *wpa_s, ext_wifi_iftype iftype, const char *ifname, size_t len)
406 {
407 	wpa_error_log0(MSG_ERROR, "---> wpa_cli_if_start enter.");
408 	char *cmd_softap[] = {"SOFTAP_START", (char *)ifname};
409 	char *cmd_wpa[] = {"WPA_START", (char *)ifname};
410 	if (len == 0)
411 		return EXT_WIFI_FAIL;
412 
413 	if (iftype == EXT_WIFI_IFTYPE_AP)
414 		return wpa_cli_cmd(wpa_s, 2, cmd_softap);
415 
416 	return wpa_cli_cmd(wpa_s, 2, cmd_wpa);
417 }
418 
wpa_cli_sta_set_delay_report(struct wpa_supplicant * wpa_s,int enable)419 int wpa_cli_sta_set_delay_report(struct wpa_supplicant *wpa_s, int enable)
420 {
421 	char *cmd_enable[] = {"STA_SET_DELAY_RP", "1"};
422 	char *cmd_disable[] = {"STA_SET_DELAY_RP", "0"};
423 	if (enable == WPA_FLAG_ON)
424 		return wpa_cli_cmd(wpa_s, 2, cmd_enable);
425 	else
426 		return wpa_cli_cmd(wpa_s, 2, cmd_disable);
427 }
428 
429 #ifdef LOS_CONFIG_P2P
wpa_cli_p2p_find(struct wpa_supplicant * wpa_s,char * sec,size_t len)430 int wpa_cli_p2p_find(struct wpa_supplicant *wpa_s, char *sec, size_t len)
431 {
432 	char *cmd[] = {"P2P_FIND", sec};
433 	if (len == 0)
434 		return EXT_WIFI_FAIL;
435 
436 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_find");
437 	return wpa_cli_cmd(wpa_s, 2, cmd);
438 }
439 
wpa_cli_p2p_listen(struct wpa_supplicant * wpa_s,char * time,size_t len)440 int wpa_cli_p2p_listen(struct wpa_supplicant *wpa_s, char *time, size_t len)
441 {
442 	char *cmd[] = {"P2P_EXT_LISTEN", time};
443 	if (len == 0)
444 		return EXT_WIFI_FAIL;
445 
446 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_listen");
447 	return wpa_cli_cmd(wpa_s, 2, cmd);
448 }
449 
wpa_cli_p2p_cancel(struct wpa_supplicant * wpa_s)450 int wpa_cli_p2p_cancel(struct wpa_supplicant *wpa_s)
451 {
452 	char *cmd[] = {"P2P_CANCEL"};
453 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_cancel");
454 	return wpa_cli_cmd(wpa_s, 1, cmd);
455 }
456 
wpa_cli_log_level(struct wpa_supplicant * wpa_s,char * param,size_t len)457 int wpa_cli_log_level(struct wpa_supplicant *wpa_s, char *param, size_t len)
458 {
459 	char *cmd[2] = {"LOG_LEVEL", param};
460 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_log_level");
461 	return wpa_cli_cmd(wpa_s, 2, cmd);
462 }
463 
wpa_cli_p2p_connect(struct wpa_supplicant * wpa_s,int persistent,const p2p_connect_param * param)464 int wpa_cli_p2p_connect(struct wpa_supplicant *wpa_s, int persistent, const p2p_connect_param *param)
465 {
466 	if (param == NULL)
467 		return EXT_WIFI_FAIL;
468 	char *cmd_intent[6] = {"P2P_CONNECT", (char *)param->addr_txt, (char *)param->wps_txt,
469 		(char *)param->join_txt,"persistent", (char *)param->intent_param};
470 	char *cmd[5] = {"P2P_CONNECT", (char *)param->addr_txt, (char *)param->wps_txt, (char *)param->join_txt,
471 		(char *)param->intent_param};
472 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_connect");
473 	if (persistent == 1) {
474 		return wpa_cli_cmd(wpa_s, 6, cmd_intent);
475 	} else {
476 		return wpa_cli_cmd(wpa_s, 5, cmd);
477 	}
478 }
479 
wpa_cli_p2p_reject(struct wpa_supplicant * wpa_s,char * mac,size_t len)480 int wpa_cli_p2p_reject(struct wpa_supplicant *wpa_s, char *mac, size_t len)
481 {
482 	char *cmd[2] = {"P2P_REJECT", mac};
483 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_reject");
484 	if (len == 0)
485 		return EXT_WIFI_FAIL;
486 	return wpa_cli_cmd(wpa_s, 2, cmd);
487 }
488 
wpa_cli_p2p_stop_find(struct wpa_supplicant * wpa_s)489 int wpa_cli_p2p_stop_find(struct wpa_supplicant *wpa_s)
490 {
491 	char *cmd[] = {"P2P_STOP_FIND"};
492 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_stop_find");
493 	return wpa_cli_cmd(wpa_s, 1, cmd);
494 }
495 
wpa_cli_p2p_peer(struct wpa_supplicant * wpa_s)496 int wpa_cli_p2p_peer(struct wpa_supplicant *wpa_s)
497 {
498 	char *cmd[1] = {"P2P_PEER "};
499 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_peer");
500 	return wpa_cli_cmd(wpa_s, 1, cmd);
501 }
502 
wpa_cli_p2p_status(struct wpa_supplicant * wpa_s)503 int wpa_cli_p2p_status(struct wpa_supplicant *wpa_s)
504 {
505 	char *cmd[1] = {"STATUS"};
506 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_status");
507 	return wpa_cli_cmd(wpa_s, 1, cmd);
508 }
509 
wpa_cli_p2p_user_config(struct wpa_supplicant * wpa_s,char * param,size_t len)510 int wpa_cli_p2p_user_config(struct wpa_supplicant *wpa_s, char *param, size_t len)
511 {
512 	char *cmd[] = {"P2P_UPDATE_CONFIG", param};
513 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_update_config");
514 	if (len == 0)
515 		return EXT_WIFI_FAIL;
516 	return wpa_cli_cmd(wpa_s, 2, cmd);
517 }
518 
wpa_cli_p2p_group_remove(struct wpa_supplicant * wpa_s,char * ifname,size_t len)519 int wpa_cli_p2p_group_remove(struct wpa_supplicant *wpa_s, char *ifname, size_t len)
520 {
521 	char *cmd[] = {"P2P_GROUP_REMOVE", ifname};
522 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_group_remove");
523 	if (len == 0)
524 		return EXT_WIFI_FAIL;
525 	return wpa_cli_cmd(wpa_s, 2, cmd);
526 }
527 
wpa_cli_p2p_remove_client(struct wpa_supplicant * wpa_s,char * param,size_t len)528 int wpa_cli_p2p_remove_client(struct wpa_supplicant *wpa_s, char *param, size_t len)
529 {
530 	char *cmd[] = {"P2P_REMOVE_CLIENT", param};
531 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_client_remove");
532 	if (len == 0)
533 		return EXT_WIFI_FAIL;
534 	return wpa_cli_cmd(wpa_s, 2, cmd); /* 2表示参数个数 */
535 }
536 
wpa_cli_p2p_invite(struct wpa_supplicant * wpa_s,const p2p_invite_param * param)537 int wpa_cli_p2p_invite(struct wpa_supplicant *wpa_s, const p2p_invite_param *param)
538 {
539 	if (param == NULL)
540 		return EXT_WIFI_FAIL;
541 	char *cmd_per[3] = {"P2P_INVITE", (char *)param->per_id_set, (char *)param->mac_set};
542 	char *cmd[3] = {"P2P_INVITE", (char *)param->group, (char *)param->mac_set};
543 	wpa_warning_log0(MSG_DEBUG, "Enter wpa_cli_p2p_invite");
544 	if (os_strlen(param->per_id_set) > 0) {
545 		return wpa_cli_cmd(wpa_s, 3, cmd_per);
546 	} else {
547 		return wpa_cli_cmd(wpa_s, 3, cmd);
548 	}
549 }
550 #endif /* LOS_CONFIG_P2P */
551 
552