• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * hidl interface for wpa_supplicant daemon
3  * Copyright (c) 2004-2016, Jouni Malinen <j@w1.fi>
4  * Copyright (c) 2004-2016, Roshan Pius <rpius@google.com>
5  *
6  * This software may be distributed under the terms of the BSD license.
7  * See README for more details.
8  */
9 
10 #include <hwbinder/IPCThreadState.h>
11 
12 #include <hidl/HidlTransportSupport.h>
13 #include "hidl_manager.h"
14 
15 extern "C" {
16 #include "hidl.h"
17 #include "hidl_i.h"
18 #include "utils/common.h"
19 #include "utils/eloop.h"
20 #include "utils/includes.h"
21 }
22 
23 using android::hardware::configureRpcThreadpool;
24 using android::hardware::IPCThreadState;
25 using android::hardware::wifi::supplicant::V1_0::implementation::HidlManager;
26 
wpas_hidl_sock_handler(int,void *,void *)27 void wpas_hidl_sock_handler(
28     int /* sock */, void * /* eloop_ctx */, void * /* sock_ctx */)
29 {
30 	IPCThreadState::self()->handlePolledCommands();
31 }
32 
wpas_hidl_init(struct wpa_global * global)33 struct wpas_hidl_priv *wpas_hidl_init(struct wpa_global *global)
34 {
35 	struct wpas_hidl_priv *priv;
36 	HidlManager *hidl_manager;
37 
38 	priv = (wpas_hidl_priv *)os_zalloc(sizeof(*priv));
39 	if (!priv)
40 		return NULL;
41 	priv->global = global;
42 
43 	wpa_printf(MSG_DEBUG, "Initing hidl control");
44 
45 	configureRpcThreadpool(1, true /* callerWillJoin */);
46 	IPCThreadState::self()->disableBackgroundScheduling(true);
47 	IPCThreadState::self()->setupPolling(&priv->hidl_fd);
48 	if (priv->hidl_fd < 0)
49 		goto err;
50 
51 	wpa_printf(MSG_INFO, "Processing hidl events on FD %d", priv->hidl_fd);
52 	// Look for read events from the hidl socket in the eloop.
53 	if (eloop_register_read_sock(
54 		priv->hidl_fd, wpas_hidl_sock_handler, global, priv) < 0)
55 		goto err;
56 
57 	hidl_manager = HidlManager::getInstance();
58 	if (!hidl_manager)
59 		goto err;
60 	hidl_manager->registerHidlService(global);
61 	// We may not need to store this hidl manager reference in the
62 	// global data strucure because we've made it a singleton class.
63 	priv->hidl_manager = (void *)hidl_manager;
64 
65 	return priv;
66 err:
67 	wpas_hidl_deinit(priv);
68 	return NULL;
69 }
70 
wpas_hidl_deinit(struct wpas_hidl_priv * priv)71 void wpas_hidl_deinit(struct wpas_hidl_priv *priv)
72 {
73 	if (!priv)
74 		return;
75 
76 	wpa_printf(MSG_DEBUG, "Deiniting hidl control");
77 
78 	HidlManager::destroyInstance();
79 	eloop_unregister_read_sock(priv->hidl_fd);
80 	IPCThreadState::shutdown();
81 	os_free(priv);
82 }
83 
wpas_hidl_register_interface(struct wpa_supplicant * wpa_s)84 int wpas_hidl_register_interface(struct wpa_supplicant *wpa_s)
85 {
86 	if (!wpa_s || !wpa_s->global->hidl)
87 		return 1;
88 
89 	wpa_printf(
90 	    MSG_DEBUG, "Registering interface to hidl control: %s",
91 	    wpa_s->ifname);
92 
93 	HidlManager *hidl_manager = HidlManager::getInstance();
94 	if (!hidl_manager)
95 		return 1;
96 
97 	return hidl_manager->registerInterface(wpa_s);
98 }
99 
wpas_hidl_unregister_interface(struct wpa_supplicant * wpa_s)100 int wpas_hidl_unregister_interface(struct wpa_supplicant *wpa_s)
101 {
102 	if (!wpa_s || !wpa_s->global->hidl)
103 		return 1;
104 
105 	wpa_printf(
106 	    MSG_DEBUG, "Deregistering interface from hidl control: %s",
107 	    wpa_s->ifname);
108 
109 	HidlManager *hidl_manager = HidlManager::getInstance();
110 	if (!hidl_manager)
111 		return 1;
112 
113 	return hidl_manager->unregisterInterface(wpa_s);
114 }
115 
wpas_hidl_register_network(struct wpa_supplicant * wpa_s,struct wpa_ssid * ssid)116 int wpas_hidl_register_network(
117     struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
118 {
119 	if (!wpa_s || !wpa_s->global->hidl || !ssid)
120 		return 1;
121 
122 	wpa_printf(
123 	    MSG_DEBUG, "Registering network to hidl control: %d", ssid->id);
124 
125 	HidlManager *hidl_manager = HidlManager::getInstance();
126 	if (!hidl_manager)
127 		return 1;
128 
129 	return hidl_manager->registerNetwork(wpa_s, ssid);
130 }
131 
wpas_hidl_unregister_network(struct wpa_supplicant * wpa_s,struct wpa_ssid * ssid)132 int wpas_hidl_unregister_network(
133     struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid)
134 {
135 	if (!wpa_s || !wpa_s->global->hidl || !ssid)
136 		return 1;
137 
138 	wpa_printf(
139 	    MSG_DEBUG, "Deregistering network from hidl control: %d", ssid->id);
140 
141 	HidlManager *hidl_manager = HidlManager::getInstance();
142 	if (!hidl_manager)
143 		return 1;
144 
145 	return hidl_manager->unregisterNetwork(wpa_s, ssid);
146 }
147 
wpas_hidl_notify_state_changed(struct wpa_supplicant * wpa_s)148 int wpas_hidl_notify_state_changed(struct wpa_supplicant *wpa_s)
149 {
150 	if (!wpa_s || !wpa_s->global->hidl)
151 		return 1;
152 
153 	wpa_printf(
154 	    MSG_DEBUG, "Notifying state change event to hidl control: %d",
155 	    wpa_s->wpa_state);
156 
157 	HidlManager *hidl_manager = HidlManager::getInstance();
158 	if (!hidl_manager)
159 		return 1;
160 
161 	return hidl_manager->notifyStateChange(wpa_s);
162 }
163 
wpas_hidl_notify_network_request(struct wpa_supplicant * wpa_s,struct wpa_ssid * ssid,enum wpa_ctrl_req_type rtype,const char * default_txt)164 int wpas_hidl_notify_network_request(
165     struct wpa_supplicant *wpa_s, struct wpa_ssid *ssid,
166     enum wpa_ctrl_req_type rtype, const char *default_txt)
167 {
168 	if (!wpa_s || !wpa_s->global->hidl || !ssid)
169 		return 1;
170 
171 	wpa_printf(
172 	    MSG_DEBUG, "Notifying network request to hidl control: %d",
173 	    ssid->id);
174 
175 	HidlManager *hidl_manager = HidlManager::getInstance();
176 	if (!hidl_manager)
177 		return 1;
178 
179 	return hidl_manager->notifyNetworkRequest(
180 	    wpa_s, ssid, rtype, default_txt);
181 }
182 
wpas_hidl_notify_anqp_query_done(struct wpa_supplicant * wpa_s,const u8 * bssid,const char * result,const struct wpa_bss_anqp * anqp)183 void wpas_hidl_notify_anqp_query_done(
184     struct wpa_supplicant *wpa_s, const u8 *bssid, const char *result,
185     const struct wpa_bss_anqp *anqp)
186 {
187 	if (!wpa_s || !wpa_s->global->hidl || !bssid || !result || !anqp)
188 		return;
189 
190 	wpa_printf(
191 	    MSG_DEBUG,
192 	    "Notifying ANQP query done to hidl control: " MACSTR "result: %s",
193 	    MAC2STR(bssid), result);
194 
195 	HidlManager *hidl_manager = HidlManager::getInstance();
196 	if (!hidl_manager)
197 		return;
198 
199 	hidl_manager->notifyAnqpQueryDone(wpa_s, bssid, result, anqp);
200 }
201 
wpas_hidl_notify_hs20_icon_query_done(struct wpa_supplicant * wpa_s,const u8 * bssid,const char * file_name,const u8 * image,u32 image_length)202 void wpas_hidl_notify_hs20_icon_query_done(
203     struct wpa_supplicant *wpa_s, const u8 *bssid, const char *file_name,
204     const u8 *image, u32 image_length)
205 {
206 	if (!wpa_s || !wpa_s->global->hidl || !bssid || !file_name || !image)
207 		return;
208 
209 	wpa_printf(
210 	    MSG_DEBUG, "Notifying HS20 icon query done to hidl control: " MACSTR
211 		       "file_name: %s",
212 	    MAC2STR(bssid), file_name);
213 
214 	HidlManager *hidl_manager = HidlManager::getInstance();
215 	if (!hidl_manager)
216 		return;
217 
218 	hidl_manager->notifyHs20IconQueryDone(
219 	    wpa_s, bssid, file_name, image, image_length);
220 }
221 
wpas_hidl_notify_hs20_rx_subscription_remediation(struct wpa_supplicant * wpa_s,const char * url,u8 osu_method)222 void wpas_hidl_notify_hs20_rx_subscription_remediation(
223     struct wpa_supplicant *wpa_s, const char *url, u8 osu_method)
224 {
225 	if (!wpa_s || !wpa_s->global->hidl || !url)
226 		return;
227 
228 	wpa_printf(
229 	    MSG_DEBUG,
230 	    "Notifying HS20 subscription remediation rx to hidl control: %s",
231 	    url);
232 
233 	HidlManager *hidl_manager = HidlManager::getInstance();
234 	if (!hidl_manager)
235 		return;
236 
237 	hidl_manager->notifyHs20RxSubscriptionRemediation(
238 	    wpa_s, url, osu_method);
239 }
240 
wpas_hidl_notify_hs20_rx_deauth_imminent_notice(struct wpa_supplicant * wpa_s,u8 code,u16 reauth_delay,const char * url)241 void wpas_hidl_notify_hs20_rx_deauth_imminent_notice(
242     struct wpa_supplicant *wpa_s, u8 code, u16 reauth_delay, const char *url)
243 {
244 	if (!wpa_s || !wpa_s->global->hidl || !url)
245 		return;
246 
247 	wpa_printf(
248 	    MSG_DEBUG,
249 	    "Notifying HS20 deauth imminent notice rx to hidl control: %s",
250 	    url);
251 
252 	HidlManager *hidl_manager = HidlManager::getInstance();
253 	if (!hidl_manager)
254 		return;
255 
256 	hidl_manager->notifyHs20RxDeauthImminentNotice(
257 	    wpa_s, code, reauth_delay, url);
258 }
259 
wpas_hidl_notify_disconnect_reason(struct wpa_supplicant * wpa_s)260 void wpas_hidl_notify_disconnect_reason(struct wpa_supplicant *wpa_s)
261 {
262 	if (!wpa_s)
263 		return;
264 
265 	wpa_printf(
266 	    MSG_DEBUG, "Notifying disconnect reason to hidl control: %d",
267 	    wpa_s->disconnect_reason);
268 
269 	HidlManager *hidl_manager = HidlManager::getInstance();
270 	if (!hidl_manager)
271 		return;
272 
273 	hidl_manager->notifyDisconnectReason(wpa_s);
274 }
275 
wpas_hidl_notify_assoc_reject(struct wpa_supplicant * wpa_s)276 void wpas_hidl_notify_assoc_reject(struct wpa_supplicant *wpa_s)
277 {
278 	if (!wpa_s)
279 		return;
280 
281 	wpa_printf(
282 	    MSG_DEBUG, "Notifying assoc reject to hidl control: %d",
283 	    wpa_s->assoc_status_code);
284 
285 	HidlManager *hidl_manager = HidlManager::getInstance();
286 	if (!hidl_manager)
287 		return;
288 
289 	hidl_manager->notifyAssocReject(wpa_s);
290 }
291 
wpas_hidl_notify_auth_timeout(struct wpa_supplicant * wpa_s)292 void wpas_hidl_notify_auth_timeout(struct wpa_supplicant *wpa_s)
293 {
294 	if (!wpa_s)
295 		return;
296 
297 	wpa_printf(MSG_DEBUG, "Notifying auth timeout to hidl control");
298 
299 	HidlManager *hidl_manager = HidlManager::getInstance();
300 	if (!hidl_manager)
301 		return;
302 
303 	hidl_manager->notifyAuthTimeout(wpa_s);
304 }
305 
wpas_hidl_notify_bssid_changed(struct wpa_supplicant * wpa_s)306 void wpas_hidl_notify_bssid_changed(struct wpa_supplicant *wpa_s)
307 {
308 	if (!wpa_s)
309 		return;
310 
311 	wpa_printf(MSG_DEBUG, "Notifying bssid changed to hidl control");
312 
313 	HidlManager *hidl_manager = HidlManager::getInstance();
314 	if (!hidl_manager)
315 		return;
316 
317 	hidl_manager->notifyBssidChanged(wpa_s);
318 }
319 
wpas_hidl_notify_wps_event_fail(struct wpa_supplicant * wpa_s,uint8_t * peer_macaddr,uint16_t config_error,uint16_t error_indication)320 void wpas_hidl_notify_wps_event_fail(
321     struct wpa_supplicant *wpa_s, uint8_t *peer_macaddr, uint16_t config_error,
322     uint16_t error_indication)
323 {
324 	if (!wpa_s || !peer_macaddr)
325 		return;
326 
327 	wpa_printf(
328 	    MSG_DEBUG, "Notifying Wps event fail to hidl control: %d, %d",
329 	    config_error, error_indication);
330 
331 	HidlManager *hidl_manager = HidlManager::getInstance();
332 	if (!hidl_manager)
333 		return;
334 
335 	hidl_manager->notifyWpsEventFail(
336 	    wpa_s, peer_macaddr, config_error, error_indication);
337 }
338 
wpas_hidl_notify_wps_event_success(struct wpa_supplicant * wpa_s)339 void wpas_hidl_notify_wps_event_success(struct wpa_supplicant *wpa_s)
340 {
341 	if (!wpa_s)
342 		return;
343 
344 	wpa_printf(MSG_DEBUG, "Notifying Wps event success to hidl control");
345 
346 	HidlManager *hidl_manager = HidlManager::getInstance();
347 	if (!hidl_manager)
348 		return;
349 
350 	hidl_manager->notifyWpsEventSuccess(wpa_s);
351 }
352 
wpas_hidl_notify_wps_event_pbc_overlap(struct wpa_supplicant * wpa_s)353 void wpas_hidl_notify_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s)
354 {
355 	if (!wpa_s)
356 		return;
357 
358 	wpa_printf(
359 	    MSG_DEBUG, "Notifying Wps event PBC overlap to hidl control");
360 
361 	HidlManager *hidl_manager = HidlManager::getInstance();
362 	if (!hidl_manager)
363 		return;
364 
365 	hidl_manager->notifyWpsEventPbcOverlap(wpa_s);
366 }
367 
wpas_hidl_notify_p2p_device_found(struct wpa_supplicant * wpa_s,const u8 * addr,const struct p2p_peer_info * info,const u8 * peer_wfd_device_info,u8 peer_wfd_device_info_len)368 void wpas_hidl_notify_p2p_device_found(
369     struct wpa_supplicant *wpa_s, const u8 *addr,
370     const struct p2p_peer_info *info, const u8 *peer_wfd_device_info,
371     u8 peer_wfd_device_info_len)
372 {
373 	if (!wpa_s || !addr || !info)
374 		return;
375 
376 	wpa_printf(
377 	    MSG_DEBUG, "Notifying P2P device found to hidl control " MACSTR,
378 	    MAC2STR(info->p2p_device_addr));
379 
380 	HidlManager *hidl_manager = HidlManager::getInstance();
381 	if (!hidl_manager)
382 		return;
383 
384 	hidl_manager->notifyP2pDeviceFound(
385 	    wpa_s, addr, info, peer_wfd_device_info, peer_wfd_device_info_len);
386 }
387 
wpas_hidl_notify_p2p_device_lost(struct wpa_supplicant * wpa_s,const u8 * p2p_device_addr)388 void wpas_hidl_notify_p2p_device_lost(
389     struct wpa_supplicant *wpa_s, const u8 *p2p_device_addr)
390 {
391 	if (!wpa_s || !p2p_device_addr)
392 		return;
393 
394 	wpa_printf(
395 	    MSG_DEBUG, "Notifying P2P device lost to hidl control " MACSTR,
396 	    MAC2STR(p2p_device_addr));
397 
398 	HidlManager *hidl_manager = HidlManager::getInstance();
399 	if (!hidl_manager)
400 		return;
401 
402 	hidl_manager->notifyP2pDeviceLost(wpa_s, p2p_device_addr);
403 }
404 
wpas_hidl_notify_p2p_find_stopped(struct wpa_supplicant * wpa_s)405 void wpas_hidl_notify_p2p_find_stopped(struct wpa_supplicant *wpa_s)
406 {
407 	if (!wpa_s)
408 		return;
409 
410 	wpa_printf(MSG_DEBUG, "Notifying P2P find stop to hidl control");
411 
412 	HidlManager *hidl_manager = HidlManager::getInstance();
413 	if (!hidl_manager)
414 		return;
415 
416 	hidl_manager->notifyP2pFindStopped(wpa_s);
417 }
418 
wpas_hidl_notify_p2p_go_neg_req(struct wpa_supplicant * wpa_s,const u8 * src_addr,u16 dev_passwd_id,u8 go_intent)419 void wpas_hidl_notify_p2p_go_neg_req(
420     struct wpa_supplicant *wpa_s, const u8 *src_addr, u16 dev_passwd_id,
421     u8 go_intent)
422 {
423 	if (!wpa_s || !src_addr)
424 		return;
425 
426 	wpa_printf(
427 	    MSG_DEBUG,
428 	    "Notifying P2P GO negotiation request to hidl control " MACSTR,
429 	    MAC2STR(src_addr));
430 
431 	HidlManager *hidl_manager = HidlManager::getInstance();
432 	if (!hidl_manager)
433 		return;
434 
435 	hidl_manager->notifyP2pGoNegReq(
436 	    wpa_s, src_addr, dev_passwd_id, go_intent);
437 }
438 
wpas_hidl_notify_p2p_go_neg_completed(struct wpa_supplicant * wpa_s,const struct p2p_go_neg_results * res)439 void wpas_hidl_notify_p2p_go_neg_completed(
440     struct wpa_supplicant *wpa_s, const struct p2p_go_neg_results *res)
441 {
442 	if (!wpa_s || !res)
443 		return;
444 
445 	wpa_printf(
446 	    MSG_DEBUG,
447 	    "Notifying P2P GO negotiation completed to hidl control: %d",
448 	    res->status);
449 
450 	HidlManager *hidl_manager = HidlManager::getInstance();
451 	if (!hidl_manager)
452 		return;
453 
454 	hidl_manager->notifyP2pGoNegCompleted(wpa_s, res);
455 }
456 
wpas_hidl_notify_p2p_group_formation_failure(struct wpa_supplicant * wpa_s,const char * reason)457 void wpas_hidl_notify_p2p_group_formation_failure(
458     struct wpa_supplicant *wpa_s, const char *reason)
459 {
460 	if (!wpa_s || !reason)
461 		return;
462 
463 	wpa_printf(
464 	    MSG_DEBUG,
465 	    "Notifying P2P Group formation failure to hidl control: %s",
466 	    reason);
467 
468 	HidlManager *hidl_manager = HidlManager::getInstance();
469 	if (!hidl_manager)
470 		return;
471 
472 	hidl_manager->notifyP2pGroupFormationFailure(wpa_s, reason);
473 }
474 
wpas_hidl_notify_p2p_group_started(struct wpa_supplicant * wpa_s,const struct wpa_ssid * ssid,int persistent,int client)475 void wpas_hidl_notify_p2p_group_started(
476     struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, int persistent,
477     int client)
478 {
479 	if (!wpa_s || !ssid)
480 		return;
481 
482 	wpa_printf(
483 	    MSG_DEBUG, "Notifying P2P Group start to hidl control: %d",
484 	    ssid->id);
485 
486 	HidlManager *hidl_manager = HidlManager::getInstance();
487 	if (!hidl_manager)
488 		return;
489 
490 	hidl_manager->notifyP2pGroupStarted(wpa_s, ssid, persistent, client);
491 }
492 
wpas_hidl_notify_p2p_group_removed(struct wpa_supplicant * wpa_s,const struct wpa_ssid * ssid,const char * role)493 void wpas_hidl_notify_p2p_group_removed(
494     struct wpa_supplicant *wpa_s, const struct wpa_ssid *ssid, const char *role)
495 {
496 	if (!wpa_s || !ssid || !role)
497 		return;
498 
499 	wpa_printf(
500 	    MSG_DEBUG, "Notifying P2P Group removed to hidl control: %d",
501 	    ssid->id);
502 
503 	HidlManager *hidl_manager = HidlManager::getInstance();
504 	if (!hidl_manager)
505 		return;
506 
507 	hidl_manager->notifyP2pGroupRemoved(wpa_s, ssid, role);
508 }
509 
wpas_hidl_notify_p2p_invitation_received(struct wpa_supplicant * wpa_s,const u8 * sa,const u8 * go_dev_addr,const u8 * bssid,int id,int op_freq)510 void wpas_hidl_notify_p2p_invitation_received(
511     struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *go_dev_addr,
512     const u8 *bssid, int id, int op_freq)
513 {
514 	if (!wpa_s || !sa || !go_dev_addr || !bssid)
515 		return;
516 
517 	wpa_printf(
518 	    MSG_DEBUG,
519 	    "Notifying P2P invitation received to hidl control: %d " MACSTR, id,
520 	    MAC2STR(bssid));
521 
522 	HidlManager *hidl_manager = HidlManager::getInstance();
523 	if (!hidl_manager)
524 		return;
525 
526 	hidl_manager->notifyP2pInvitationReceived(
527 	    wpa_s, sa, go_dev_addr, bssid, id, op_freq);
528 }
529 
wpas_hidl_notify_p2p_invitation_result(struct wpa_supplicant * wpa_s,int status,const u8 * bssid)530 void wpas_hidl_notify_p2p_invitation_result(
531     struct wpa_supplicant *wpa_s, int status, const u8 *bssid)
532 {
533 	if (!wpa_s || !bssid)
534 		return;
535 
536 	wpa_printf(
537 	    MSG_DEBUG,
538 	    "Notifying P2P invitation result to hidl control: " MACSTR,
539 	    MAC2STR(bssid));
540 
541 	HidlManager *hidl_manager = HidlManager::getInstance();
542 	if (!hidl_manager)
543 		return;
544 
545 	hidl_manager->notifyP2pInvitationResult(wpa_s, status, bssid);
546 }
547 
wpas_hidl_notify_p2p_provision_discovery(struct wpa_supplicant * wpa_s,const u8 * dev_addr,int request,enum p2p_prov_disc_status status,u16 config_methods,unsigned int generated_pin)548 void wpas_hidl_notify_p2p_provision_discovery(
549     struct wpa_supplicant *wpa_s, const u8 *dev_addr, int request,
550     enum p2p_prov_disc_status status, u16 config_methods,
551     unsigned int generated_pin)
552 {
553 	if (!wpa_s || !dev_addr)
554 		return;
555 
556 	wpa_printf(
557 	    MSG_DEBUG,
558 	    "Notifying P2P provision discovery to hidl control " MACSTR,
559 	    MAC2STR(dev_addr));
560 
561 	HidlManager *hidl_manager = HidlManager::getInstance();
562 	if (!hidl_manager)
563 		return;
564 
565 	hidl_manager->notifyP2pProvisionDiscovery(
566 	    wpa_s, dev_addr, request, status, config_methods, generated_pin);
567 }
568 
wpas_hidl_notify_p2p_sd_response(struct wpa_supplicant * wpa_s,const u8 * sa,u16 update_indic,const u8 * tlvs,size_t tlvs_len)569 void wpas_hidl_notify_p2p_sd_response(
570     struct wpa_supplicant *wpa_s, const u8 *sa, u16 update_indic,
571     const u8 *tlvs, size_t tlvs_len)
572 {
573 	if (!wpa_s || !sa || !tlvs)
574 		return;
575 
576 	wpa_printf(
577 	    MSG_DEBUG,
578 	    "Notifying P2P service discovery response to hidl control " MACSTR,
579 	    MAC2STR(sa));
580 
581 	HidlManager *hidl_manager = HidlManager::getInstance();
582 	if (!hidl_manager)
583 		return;
584 
585 	hidl_manager->notifyP2pSdResponse(
586 	    wpa_s, sa, update_indic, tlvs, tlvs_len);
587 }
588 
wpas_hidl_notify_ap_sta_authorized(struct wpa_supplicant * wpa_s,const u8 * sta,const u8 * p2p_dev_addr)589 void wpas_hidl_notify_ap_sta_authorized(
590     struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr)
591 {
592 	if (!wpa_s || !sta)
593 		return;
594 
595 	wpa_printf(
596 	    MSG_DEBUG,
597 	    "Notifying P2P AP STA authorized to hidl control " MACSTR,
598 	    MAC2STR(sta));
599 
600 	HidlManager *hidl_manager = HidlManager::getInstance();
601 	if (!hidl_manager)
602 		return;
603 
604 	hidl_manager->notifyApStaAuthorized(wpa_s, sta, p2p_dev_addr);
605 }
606 
wpas_hidl_notify_ap_sta_deauthorized(struct wpa_supplicant * wpa_s,const u8 * sta,const u8 * p2p_dev_addr)607 void wpas_hidl_notify_ap_sta_deauthorized(
608     struct wpa_supplicant *wpa_s, const u8 *sta, const u8 *p2p_dev_addr)
609 {
610 	if (!wpa_s || !sta)
611 		return;
612 
613 	wpa_printf(
614 	    MSG_DEBUG,
615 	    "Notifying P2P AP STA deauthorized to hidl control " MACSTR,
616 	    MAC2STR(sta));
617 
618 	HidlManager *hidl_manager = HidlManager::getInstance();
619 	if (!hidl_manager)
620 		return;
621 
622 	hidl_manager->notifyApStaDeauthorized(wpa_s, sta, p2p_dev_addr);
623 }
624