18d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt/*
28d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * wpa_supplicant - Event notifications
38d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt * Copyright (c) 2009-2010, Jouni Malinen <j@w1.fi>
48d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt *
5c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * This software may be distributed under the terms of the BSD license.
6c5ec7f57ead87efa365800228aa0b09a12d9e6c4Dmitry Shmidt * See README for more details.
78d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt */
88d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
98d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "utils/includes.h"
108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "utils/common.h"
128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "common/wpa_ctrl.h"
138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "config.h"
148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wpa_supplicant_i.h"
158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "wps_supplicant.h"
168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_common.h"
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_old.h"
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_new.h"
191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#include "rsn_supp/wpa.h"
20d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#include "fst/fst.h"
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "driver_i.h"
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "scan.h"
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "p2p_supplicant.h"
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "sme.h"
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "notify.h"
26edd820c37e62b20e44271f485bd78a6e2091d36bRoshan Pius#include "hidl.h"
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpas_notify_supplicant_initialized(struct wpa_global *global)
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_DBUS
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->params.dbus_ctrl_interface) {
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		global->dbus = wpas_dbus_init(global);
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (global->dbus == NULL)
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return -1;
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_DBUS */
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3857ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius#ifdef CONFIG_HIDL
3957ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	global->hidl = wpas_hidl_init(global);
4057ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	if (!global->hidl)
41e4663044d3a689fb5458247e9bc0f8b58cf72fcaDmitry Shmidt		return -1;
4257ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius#endif /* CONFIG_HIDL */
43e4663044d3a689fb5458247e9bc0f8b58cf72fcaDmitry Shmidt
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 0;
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_supplicant_deinitialized(struct wpa_global *global)
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_DBUS
518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->dbus)
528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_dbus_deinit(global->dbus);
538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_DBUS */
54e4663044d3a689fb5458247e9bc0f8b58cf72fcaDmitry Shmidt
5557ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius#ifdef CONFIG_HIDL
5657ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	if (global->hidl)
5757ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius		wpas_hidl_deinit(global->hidl);
5857ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius#endif /* CONFIG_HIDL */
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpas_notify_iface_added(struct wpa_supplicant *wpa_s)
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
64d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	if (!wpa_s->p2p_mgmt) {
65d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		if (wpas_dbus_register_iface(wpa_s))
66d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius			return -1;
678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
68d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		if (wpas_dbus_register_interface(wpa_s))
69d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius			return -1;
70d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	}
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
72d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	/* HIDL interface wants to keep track of the P2P mgmt iface. */
7357ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	if (wpas_hidl_register_interface(wpa_s))
7454e763ada0bed9bf2c48415e82c5f04db23a3330Roshan Pius		return -1;
7554e763ada0bed9bf2c48415e82c5f04db23a3330Roshan Pius
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 0;
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_iface_removed(struct wpa_supplicant *wpa_s)
818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
82d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	if (!wpa_s->p2p_mgmt) {
83d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		/* unregister interface in old DBus ctrl iface */
84d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		wpas_dbus_unregister_iface(wpa_s);
856c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
86d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		/* unregister interface in new DBus ctrl iface */
87d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius		wpas_dbus_unregister_interface(wpa_s);
88d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	}
8954e763ada0bed9bf2c48415e82c5f04db23a3330Roshan Pius
90d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0Roshan Pius	/* HIDL interface wants to keep track of the P2P mgmt iface. */
9157ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	wpas_hidl_unregister_interface(wpa_s);
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_state_changed(struct wpa_supplicant *wpa_s,
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       enum wpa_states new_state,
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       enum wpa_states old_state)
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
996c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1006c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1016c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
1038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_state_change(wpa_s, new_state,
1048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt						old_state);
1058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATE);
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
109d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#ifdef CONFIG_FST
110d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	if (wpa_s->fst && !is_zero_ether_addr(wpa_s->bssid)) {
111d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt		if (new_state == WPA_COMPLETED)
112d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt			fst_notify_peer_connected(wpa_s->fst, wpa_s->bssid);
113d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt		else if (old_state >= WPA_ASSOCIATED &&
114d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt			 new_state < WPA_ASSOCIATED)
115d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt			fst_notify_peer_disconnected(wpa_s->fst, wpa_s->bssid);
116d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	}
117d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#endif /* CONFIG_FST */
118d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
1198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (new_state == WPA_COMPLETED)
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_p2p_notif_connected(wpa_s);
12104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	else if (old_state >= WPA_ASSOCIATED && new_state < WPA_ASSOCIATED)
1228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_p2p_notif_disconnected(wpa_s);
1238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	sme_state_changed(wpa_s);
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ANDROID
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_STATE_CHANGE
128f20a4432808cee548326c4b35c83071ca576a239Irfan Sheriff		     "id=%d state=%d BSSID=" MACSTR " SSID=%s",
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     wpa_s->current_ssid ? wpa_s->current_ssid->id : -1,
130f20a4432808cee548326c4b35c83071ca576a239Irfan Sheriff		     new_state,
131e78e767aea5576ec0ba7edadfe25fd9dc7dce48fIrfan Sheriff		     MAC2STR(wpa_s->bssid),
1325b5fb02b225c5c05a4477bef58bdaceede5d68dcandy		     wpa_s->current_ssid && wpa_s->current_ssid->ssid ?
1335b5fb02b225c5c05a4477bef58bdaceede5d68dcandy		     wpa_ssid_txt(wpa_s->current_ssid->ssid,
134e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt				  wpa_s->current_ssid->ssid_len) : "");
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ANDROID */
136e8d0d1655fa3b70b846e8669273f9248d1100137Roshan Pius
13757ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	wpas_hidl_notify_state_changed(wpa_s);
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
14104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_disconnect_reason(struct wpa_supplicant *wpa_s)
14204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
1436c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1446c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1456c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
14604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_DISCONNECT_REASON);
1470974e961cd7bac71cf4d5919551e84541abf2b38Roshan Pius
148be158779063407ddfaaaef367c165e51f30dc2adRoshan Pius	wpas_hidl_notify_disconnect_reason(wpa_s);
14904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
15004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
15104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
15231a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidtvoid wpas_notify_assoc_status_code(struct wpa_supplicant *wpa_s)
15331a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt{
15431a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt	if (wpa_s->p2p_mgmt)
15531a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt		return;
15631a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
15731a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_ASSOC_STATUS_CODE);
1580974e961cd7bac71cf4d5919551e84541abf2b38Roshan Pius
1590974e961cd7bac71cf4d5919551e84541abf2b38Roshan Pius	wpas_hidl_notify_assoc_reject(wpa_s);
16031a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt}
16131a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
16238e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Piusvoid wpas_notify_auth_timeout(struct wpa_supplicant *wpa_s) {
16338e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Pius	if (wpa_s->p2p_mgmt)
16438e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Pius		return;
16538e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Pius
16638e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Pius	wpas_hidl_notify_auth_timeout(wpa_s);
16738e96765e08839e3f5812ea4d6ef30121ab9e63eRoshan Pius}
16831a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
1708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1716c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1736c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_NETWORK);
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s)
1798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1806c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN);
1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s)
1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1896c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1906c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1916c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS);
193e746d6b596b0a6fb06129350a0a674a901ae3964Roshan Pius
194e746d6b596b0a6fb06129350a0a674a901ae3964Roshan Pius	wpas_hidl_notify_bssid_changed(wpa_s);
1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_auth_changed(struct wpa_supplicant *wpa_s)
1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2006c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2016c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2026c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_AUTH_MODE);
2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s,
2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					 struct wpa_ssid *ssid)
2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2106c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2116c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2126c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_enabled_changed(wpa_s, ssid);
2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_selected(struct wpa_supplicant *wpa_s,
2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  struct wpa_ssid *ssid)
2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2206c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_selected(wpa_s, ssid->id);
2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_network_request(struct wpa_supplicant *wpa_s,
2281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 struct wpa_ssid *ssid,
2291f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 enum wpa_ctrl_req_type rtype,
2301f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 const char *default_txt)
2311f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
2326c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2336c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2346c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2351f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_network_request(wpa_s, ssid, rtype, default_txt);
23665628ce79afddd4ba8fd796246b546b36815a0ddRoshan Pius
23757ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	wpas_hidl_notify_network_request(wpa_s, ssid, rtype, default_txt);
2381f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
2391f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
2401f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scanning(struct wpa_supplicant *wpa_s)
2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2436c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2446c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2456c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scanning(wpa_s);
2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING);
2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2566c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2576c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2586c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_scan_done(wpa_s, success);
2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2656c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2666c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2676c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scan_results(wpa_s);
2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_wps_notify_scan_results(wpa_s);
2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				const struct wps_credential *cred)
2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2786c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2796c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2806c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred);
2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_cred(wpa_s, cred);
2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s,
2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wps_event_m2d *m2d)
2928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2936c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2946c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2956c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_m2d(wpa_s, m2d);
2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s,
3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				struct wps_event_fail *fail)
3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3056c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3066c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3076c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_fail(wpa_s, fail);
310149327590e009d96301e69772e717e227215d5acRoshan Pius
311149327590e009d96301e69772e717e227215d5acRoshan Pius	wpas_hidl_notify_wps_event_fail(wpa_s, fail->peer_macaddr,
312149327590e009d96301e69772e717e227215d5acRoshan Pius					fail->config_error,
313149327590e009d96301e69772e717e227215d5acRoshan Pius					fail->error_indication);
3148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
3158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s)
3198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3206c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_success(wpa_s);
325149327590e009d96301e69772e717e227215d5acRoshan Pius
326149327590e009d96301e69772e717e227215d5acRoshan Pius	wpas_hidl_notify_wps_event_success(wpa_s);
3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3307a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidtvoid wpas_notify_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s)
3317a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt{
3327a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	if (wpa_s->p2p_mgmt)
3337a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		return;
3347a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
3357a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#ifdef CONFIG_WPS
3367a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	wpas_dbus_signal_wps_event_pbc_overlap(wpa_s);
337149327590e009d96301e69772e717e227215d5acRoshan Pius
338149327590e009d96301e69772e717e227215d5acRoshan Pius	wpas_hidl_notify_wps_event_pbc_overlap(wpa_s);
3397a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#endif /* CONFIG_WPS */
3407a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt}
3417a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
3428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_added(struct wpa_supplicant *wpa_s,
3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wpa_ssid *ssid)
3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3466c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3476c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3486c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
34975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
35075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Networks objects created during any P2P activities should not be
35175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * exposed out. They might/will confuse certain non-P2P aware
35275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * applications since these network objects won't behave like
35375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * regular ones.
35475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
355d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s) {
35675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_register_network(wpa_s, ssid);
35757ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius		wpas_hidl_register_network(wpa_s, ssid);
358d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	}
35975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
36075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
36175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
36275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_added(struct wpa_supplicant *wpa_s,
36375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					struct wpa_ssid *ssid)
36475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
365c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
36675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_persistent_group(wpa_s, ssid);
36730990d649c75c4f6fc9ae1c30ab17cf8c729d2acGlen Kuhne	wpas_hidl_register_network(wpa_s, ssid);
368c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
36975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
37075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
37175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
37275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_removed(struct wpa_supplicant *wpa_s,
37375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					  struct wpa_ssid *ssid)
37475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
375c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
37675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
37730990d649c75c4f6fc9ae1c30ab17cf8c729d2acGlen Kuhne	wpas_hidl_unregister_network(wpa_s, ssid);
378c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_removed(struct wpa_supplicant *wpa_s,
3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 struct wpa_ssid *ssid)
3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
385f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt	if (wpa_s->next_ssid == ssid)
386f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt		wpa_s->next_ssid = NULL;
3871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (wpa_s->wpa)
3881f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid);
389cc00d5dc8483e32158b2ba61ea44b0c38d790ed7Dmitry Shmidt	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s &&
390d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	    !wpa_s->p2p_mgmt) {
39175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_unregister_network(wpa_s, ssid->id);
39257ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius		wpas_hidl_unregister_network(wpa_s, ssid);
393d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	}
3946c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (network_is_persistent_group(ssid))
3956c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_notify_persistent_group_removed(wpa_s, ssid);
3966c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3971f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_network_removed(wpa_s, ssid);
3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_added(struct wpa_supplicant *wpa_s,
4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   u8 bssid[], unsigned int id)
4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4046c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4056c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4066c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_register_bss(wpa_s, bssid, id);
4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR,
4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_removed(struct wpa_supplicant *wpa_s,
4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			     u8 bssid[], unsigned int id)
4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4166c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4176c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4186c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_unregister_bss(wpa_s, bssid, id);
4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR,
4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_freq_changed(struct wpa_supplicant *wpa_s,
4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  unsigned int id)
4278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4286c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4296c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4306c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_FREQ, id);
4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_signal_changed(struct wpa_supplicant *wpa_s,
4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				    unsigned int id)
4378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4386c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4396c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4406c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_SIGNAL,
4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_privacy_changed(struct wpa_supplicant *wpa_s,
4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				     unsigned int id)
4488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4496c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4506c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4516c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_PRIVACY,
4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_mode_changed(struct wpa_supplicant *wpa_s,
4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  unsigned int id)
4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4606c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4616c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4626c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_MODE, id);
4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wpaie_changed(struct wpa_supplicant *wpa_s,
4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4706c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4716c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPA, id);
4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s,
4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4806c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RSN, id);
4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s,
4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 unsigned int id)
4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4906c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4916c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4926c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
493d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#ifdef CONFIG_WPS
494d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id);
495d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#endif /* CONFIG_WPS */
4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_ies_changed(struct wpa_supplicant *wpa_s,
5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5026c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5036c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5046c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_IES, id);
5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s,
5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5126c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5136c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5146c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RATES, id);
5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
519661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_bss_seen(struct wpa_supplicant *wpa_s, unsigned int id)
520661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
5216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5236c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
524661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_AGE, id);
525661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
526661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
527661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5306c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5316c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5326c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_added(wpa_s, name);
5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name)
5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5396c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5406c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5416c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_removed(wpa_s, name);
5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_level_changed(struct wpa_global *global)
5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_level_changed(global);
5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_timestamp_changed(struct wpa_global *global)
5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_timestamp_changed(global);
5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_show_keys_changed(struct wpa_global *global)
5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_show_keys_changed(global);
5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_suspend(struct wpa_global *global)
5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	os_get_time(&global->suspend_time);
5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System suspend notification");
5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next)
5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_suspend(wpa_s);
5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_resume(struct wpa_global *global)
5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct os_time now;
5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int slept;
5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->suspend_time.sec == 0)
5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = -1;
5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else {
5848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		os_get_time(&now);
5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = now.sec - global->suspend_time.sec;
5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System resume notification (slept %d seconds)",
5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   slept);
5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_resume(wpa_s);
5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (wpa_s->wpa_state == WPA_DISCONNECTED)
5938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			wpa_supplicant_req_scan(wpa_s, 0, 100000);
5948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_P2P
5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6008bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidtvoid wpas_notify_p2p_find_stopped(struct wpa_supplicant *wpa_s)
6018bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt{
6028bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt	/* Notify P2P find has stopped */
6038bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt	wpas_dbus_signal_p2p_find_stopped(wpa_s);
604fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
605fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_find_stopped(wpa_s);
6068bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt}
6078bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt
6088bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt
6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s,
610fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius				  const u8 *addr, const struct p2p_peer_info *info,
611fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius				  const u8* peer_wfd_device_info, u8 peer_wfd_device_info_len,
612fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius				  int new_device)
6138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
61475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	if (new_device) {
61575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		/* Create the new peer object */
616fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius		wpas_dbus_register_peer(wpa_s, info->p2p_device_addr);
61775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	}
61875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
61975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a new peer has been detected*/
620fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_dbus_signal_peer_device_found(wpa_s, info->p2p_device_addr);
621fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
622fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_device_found(wpa_s, addr, info,
623fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius					  peer_wfd_device_info,
624fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius					  peer_wfd_device_info_len);
6258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s,
6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *dev_addr)
6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
63175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_peer(wpa_s, dev_addr);
63275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
63375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Create signal on interface object*/
63475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_peer_device_lost(wpa_s, dev_addr);
635fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
636fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_device_lost(wpa_s, dev_addr);
6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const struct wpa_ssid *ssid,
6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const char *role)
6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
64475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_group_removed(wpa_s, role);
64503658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt
64603658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt	wpas_dbus_unregister_p2p_group(wpa_s, ssid);
647fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
648fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_group_removed(wpa_s, ssid, role);
6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
6537a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt				const u8 *src, u16 dev_passwd_id, u8 go_intent)
6548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
6557a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id, go_intent);
656fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
657fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_go_neg_req(wpa_s, src, dev_passwd_id, go_intent);
6588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6611f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s,
6621f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				      struct p2p_go_neg_results *res)
6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
6641f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_p2p_go_neg_resp(wpa_s, res);
665fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
666fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_go_neg_completed(wpa_s, res);
6678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s,
6718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				       int status, const u8 *bssid)
6728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
67375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_invitation_result(wpa_s, status, bssid);
674fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
675fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_invitation_result(wpa_s, status, bssid);
6768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_request(struct wpa_supplicant *wpa_s,
6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				int freq, const u8 *sa, u8 dialog_token,
6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				u16 update_indic, const u8 *tlvs,
6828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				size_t tlvs_len)
6838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
68475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_request(wpa_s, freq, sa, dialog_token,
68575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					update_indic, tlvs, tlvs_len);
6868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_response(struct wpa_supplicant *wpa_s,
6908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *sa, u16 update_indic,
6918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *tlvs, size_t tlvs_len)
6928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
69375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_response(wpa_s, sa, update_indic,
69475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 tlvs, tlvs_len);
695fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
696fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_sd_response(wpa_s, sa, update_indic,
697fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius					 tlvs, tlvs_len);
69875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
69975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
70075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
70175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen/**
70275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * wpas_notify_p2p_provision_discovery - Notification of provision discovery
70375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @dev_addr: Who sent the request or responded to our request.
70475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @request: Will be 1 if request, 0 for response.
70575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @status: Valid only in case of response (0 in case of success)
70675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @config_methods: WPS config methods
70775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @generated_pin: PIN to be displayed in case of WPS_CONFIG_DISPLAY method
70875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen *
70975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * This can be used to notify:
71075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Requests or responses
71175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Various config methods
71275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Failure condition in case of response
71375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen */
71475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
71575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 const u8 *dev_addr, int request,
71675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 enum p2p_prov_disc_status status,
71775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 u16 config_methods,
71875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 unsigned int generated_pin)
71975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
72075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_provision_discovery(wpa_s, dev_addr, request,
72175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 status, config_methods,
72275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 generated_pin);
723fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
724fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_provision_discovery(wpa_s, dev_addr, request,
725fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius						 status, config_methods,
726fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius						 generated_pin);
727fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
72875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
72975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
73075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
73175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
732d5ab1b53af720d05586ccc0addabe93459f1f388Dmitry Shmidt				   struct wpa_ssid *ssid, int persistent,
733abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt				   int client, const u8 *ip)
73475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
73575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a group has been started */
73675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_p2p_group(wpa_s, ssid);
73775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
738abb90a3fc1917e628167827cb14e742000605332Dmitry Shmidt	wpas_dbus_signal_p2p_group_started(wpa_s, client, persistent, ip);
739fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
7407a1c8485ae3a467debc89ca8477cf6f4b4217f21Roshan Pius	wpas_hidl_notify_p2p_group_started(wpa_s, ssid, persistent, client);
74175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
74275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
74375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
744d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid wpas_notify_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
745d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					     const char *reason)
746d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{
747d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	/* Notify a group formation failed */
748d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	wpas_dbus_signal_p2p_group_formation_failure(wpa_s, reason);
749fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
750fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_group_formation_failure(wpa_s, reason);
751d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}
752d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
753d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
75475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_wps_failed(struct wpa_supplicant *wpa_s,
75575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				struct wps_event_fail *fail)
75675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
75775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_wps_failed(wpa_s, fail);
7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
760d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
761d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid wpas_notify_p2p_invitation_received(struct wpa_supplicant *wpa_s,
762d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					 const u8 *sa, const u8 *go_dev_addr,
763d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					 const u8 *bssid, int id, int op_freq)
764d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{
765d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	/* Notify a P2P Invitation Request */
766d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	wpas_dbus_signal_p2p_invitation_received(wpa_s, sa, go_dev_addr, bssid,
767d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt						 id, op_freq);
768fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
769fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_p2p_invitation_received(wpa_s, sa, go_dev_addr, bssid,
770fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius						 id, op_freq);
771d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}
772d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
7738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_P2P */
7748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
7771f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *sta,
7781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *p2p_dev_addr)
7798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
78075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
7811f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_notify_ap_sta_authorized(wpa_s, p2p_dev_addr);
7821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
78375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
78475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-joined' signal on group object -- will also
78575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * check P2P itself.
78675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
7876c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
7886c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_joined(wpa_s, p2p_dev_addr);
78975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
79034af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
79134af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a new station has been authorized */
79234af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_authorized(wpa_s, sta);
793fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
794fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_ap_sta_authorized(wpa_s, sta, p2p_dev_addr);
7958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
7968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s,
799d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *sta,
800d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *p2p_dev_addr)
8018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
80275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
80375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
80475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-disconnected' signal on group object if this
80575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * is a P2P group.
80675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
8076c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
8086c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_disconnected(wpa_s, p2p_dev_addr);
80975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
81034af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
81134af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a station has been deauthorized */
81234af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
813fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius
814fd2fd66037872fa3b6adcd2a72adc66dda5912caRoshan Pius	wpas_hidl_notify_ap_sta_deauthorized(wpa_s, sta, p2p_dev_addr);
8158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
8168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
8178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
8188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_sta_authorized(struct wpa_supplicant *wpa_s,
8191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *mac_addr, int authorized,
8201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *p2p_dev_addr)
8218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
8228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (authorized)
8231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpas_notify_ap_sta_authorized(wpa_s, mac_addr, p2p_dev_addr);
8248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else
825d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt		wpas_notify_ap_sta_deauthorized(wpa_s, mac_addr, p2p_dev_addr);
8268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
827c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
828c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
829c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidtvoid wpas_notify_certification(struct wpa_supplicant *wpa_s, int depth,
8302f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       const char *subject, const char *altsubject[],
8312f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       int num_altsubject, const char *cert_hash,
832c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			       const struct wpabuf *cert)
833c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt{
834c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_CERT
835c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		"depth=%d subject='%s'%s%s",
8362f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		depth, subject, cert_hash ? " hash=" : "",
837c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hash ? cert_hash : "");
838c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
839c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	if (cert) {
840c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		char *cert_hex;
841c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		size_t len = wpabuf_len(cert) * 2 + 1;
842c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hex = os_malloc(len);
843c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		if (cert_hex) {
844c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_snprintf_hex(cert_hex, len, wpabuf_head(cert),
845c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt					 wpabuf_len(cert));
846c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_msg_ctrl(wpa_s, MSG_INFO,
847c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     WPA_EVENT_EAP_PEER_CERT
848c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     "depth=%d subject='%s' cert=%s",
849c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     depth, subject, cert_hex);
850c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			os_free(cert_hex);
851c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		}
852c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	}
853c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
8542f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	if (altsubject) {
8552f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		int i;
8562f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
8572f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		for (i = 0; i < num_altsubject; i++)
8582f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_ALT
8592f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				"depth=%d %s", depth, altsubject[i]);
8602f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	}
8612f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
862c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the old DBus API */
863c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_supplicant_dbus_notify_certification(wpa_s, depth, subject,
864c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt						 cert_hash, cert);
865c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the new DBus API */
8662f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	wpas_dbus_signal_certification(wpa_s, depth, subject, altsubject,
8672f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				       num_altsubject, cert_hash, cert);
868c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt}
86904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
87004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
87104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_preq(struct wpa_supplicant *wpa_s,
87204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *addr, const u8 *dst, const u8 *bssid,
87304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *ie, size_t ie_len, u32 ssi_signal)
87404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
87504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#ifdef CONFIG_AP
87604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_preq(wpa_s, addr, dst, bssid, ie, ie_len, ssi_signal);
87704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif /* CONFIG_AP */
87804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
87904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
88004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
88104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
88204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt			    const char *parameter)
88304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
88404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_eap_status(wpa_s, status, parameter);
8858da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_EAP_STATUS
8868da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     "status='%s' parameter='%s'",
8878da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     status, parameter);
88804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
889661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
890661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
891661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
892661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt					   struct wpa_ssid *ssid)
893661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
894661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	if (wpa_s->current_ssid != ssid)
895661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		return;
896661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
897661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_dbg(wpa_s, MSG_DEBUG,
898661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		"Network bssid config changed for the current network - within-ESS roaming %s",
899661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		ssid->bssid_set ? "disabled" : "enabled");
900661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
901661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_drv_roaming(wpa_s, !ssid->bssid_set,
902661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt			ssid->bssid_set ? ssid->bssid : NULL);
903661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
9047f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
9057f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
9067f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidtvoid wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
9077f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt				      struct wpa_ssid *ssid)
9087f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt{
9097f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#ifdef CONFIG_P2P
9107f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	if (ssid->disabled == 2) {
9117f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from normal network profile to persistent group */
9127f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 0;
9137f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_network(wpa_s, ssid->id);
9147f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 2;
9157a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		ssid->p2p_persistent_group = 1;
9167f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_persistent_group(wpa_s, ssid);
9177f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	} else {
9187f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from persistent group to normal network profile */
9197f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
9207a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		ssid->p2p_persistent_group = 0;
9217f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_network(wpa_s, ssid);
9227f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	}
9237f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#endif /* CONFIG_P2P */
9247f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt}
92504a9d74743634109939ddb9bc40814681a03dc84Roshan Pius
92604a9d74743634109939ddb9bc40814681a03dc84Roshan Piusvoid wpas_notify_anqp_query_done(struct wpa_supplicant *wpa_s, const u8* bssid,
92704a9d74743634109939ddb9bc40814681a03dc84Roshan Pius				 const char *result,
92804a9d74743634109939ddb9bc40814681a03dc84Roshan Pius				 const struct wpa_bss_anqp *anqp)
92904a9d74743634109939ddb9bc40814681a03dc84Roshan Pius{
93004a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#ifdef CONFIG_INTERWORKING
93104a9d74743634109939ddb9bc40814681a03dc84Roshan Pius	if (!wpa_s || !bssid || !anqp)
93204a9d74743634109939ddb9bc40814681a03dc84Roshan Pius		return;
9339322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius
9349322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius	wpas_hidl_notify_anqp_query_done(wpa_s, bssid, result, anqp);
93504a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#endif /* CONFIG_INTERWORKING */
93604a9d74743634109939ddb9bc40814681a03dc84Roshan Pius}
93704a9d74743634109939ddb9bc40814681a03dc84Roshan Pius
93804a9d74743634109939ddb9bc40814681a03dc84Roshan Piusvoid wpas_notify_hs20_icon_query_done(struct wpa_supplicant *wpa_s, const u8* bssid,
93904a9d74743634109939ddb9bc40814681a03dc84Roshan Pius				      const char* file_name, const u8* image,
94004a9d74743634109939ddb9bc40814681a03dc84Roshan Pius				      u32 image_length)
94104a9d74743634109939ddb9bc40814681a03dc84Roshan Pius{
94204a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#ifdef CONFIG_HS20
94304a9d74743634109939ddb9bc40814681a03dc84Roshan Pius	if (!wpa_s || !bssid || !file_name || !image)
94404a9d74743634109939ddb9bc40814681a03dc84Roshan Pius		return;
9459322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius
9469322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius	wpas_hidl_notify_hs20_icon_query_done(wpa_s, bssid, file_name, image,
9479322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius					      image_length);
94804a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#endif /* CONFIG_HS20 */
94904a9d74743634109939ddb9bc40814681a03dc84Roshan Pius}
95004a9d74743634109939ddb9bc40814681a03dc84Roshan Pius
95104a9d74743634109939ddb9bc40814681a03dc84Roshan Piusvoid wpas_notify_hs20_rx_subscription_remediation(struct wpa_supplicant *wpa_s,
95204a9d74743634109939ddb9bc40814681a03dc84Roshan Pius						  const char* url,
95304a9d74743634109939ddb9bc40814681a03dc84Roshan Pius						  u8 osu_method)
95404a9d74743634109939ddb9bc40814681a03dc84Roshan Pius{
95504a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#ifdef CONFIG_HS20
95604a9d74743634109939ddb9bc40814681a03dc84Roshan Pius	if (!wpa_s || !url)
95704a9d74743634109939ddb9bc40814681a03dc84Roshan Pius		return;
9589322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius
9599322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius	wpas_hidl_notify_hs20_rx_subscription_remediation(wpa_s, url, osu_method);
96004a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#endif /* CONFIG_HS20 */
96104a9d74743634109939ddb9bc40814681a03dc84Roshan Pius}
96204a9d74743634109939ddb9bc40814681a03dc84Roshan Pius
96304a9d74743634109939ddb9bc40814681a03dc84Roshan Piusvoid wpas_notify_hs20_rx_deauth_imminent_notice(struct wpa_supplicant *wpa_s,
96404a9d74743634109939ddb9bc40814681a03dc84Roshan Pius						u8 code, u16 reauth_delay,
96504a9d74743634109939ddb9bc40814681a03dc84Roshan Pius						const char *url)
96604a9d74743634109939ddb9bc40814681a03dc84Roshan Pius{
96704a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#ifdef CONFIG_HS20
96804a9d74743634109939ddb9bc40814681a03dc84Roshan Pius	if (!wpa_s || !url)
96904a9d74743634109939ddb9bc40814681a03dc84Roshan Pius		return;
9709322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius
9719322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius	wpas_hidl_notify_hs20_rx_deauth_imminent_notice(wpa_s, code, reauth_delay,
9729322a34c4f97d96c1c42c5fbb53fb3d4fba933d6Roshan Pius							url);
97304a9d74743634109939ddb9bc40814681a03dc84Roshan Pius#endif /* CONFIG_HS20 */
97404a9d74743634109939ddb9bc40814681a03dc84Roshan Pius}
975