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