notify.c revision d6d8b8ddebec155f165137ac6e9b5ef0c003f0c0
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"
1657ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius#include "hidl/hidl.h"
178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_common.h"
188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_old.h"
198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "dbus/dbus_new.h"
201f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt#include "rsn_supp/wpa.h"
21d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt#include "fst/fst.h"
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "driver_i.h"
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "scan.h"
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "p2p_supplicant.h"
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "sme.h"
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "notify.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);
14704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
14804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
14904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
15031a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidtvoid wpas_notify_assoc_status_code(struct wpa_supplicant *wpa_s)
15131a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt{
15231a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt	if (wpa_s->p2p_mgmt)
15331a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt		return;
15431a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
15531a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_ASSOC_STATUS_CODE);
15631a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt}
15731a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
15831a29cc7ed87b62465c7e01f03484f4643d12309Dmitry Shmidt
1598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
1608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1616c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1626c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1636c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_NETWORK);
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s)
1698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1706c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1716c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN);
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s)
1788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1796c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1806c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS);
1838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_auth_changed(struct wpa_supplicant *wpa_s)
1878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1886c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1896c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1906c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_AUTH_MODE);
1928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s,
1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					 struct wpa_ssid *ssid)
1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1986c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1996c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2006c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_enabled_changed(wpa_s, ssid);
2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_selected(struct wpa_supplicant *wpa_s,
2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  struct wpa_ssid *ssid)
2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2086c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2096c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2106c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_selected(wpa_s, ssid->id);
2128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2151f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_network_request(struct wpa_supplicant *wpa_s,
2161f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 struct wpa_ssid *ssid,
2171f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 enum wpa_ctrl_req_type rtype,
2181f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 const char *default_txt)
2191f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
2206c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_network_request(wpa_s, ssid, rtype, default_txt);
22465628ce79afddd4ba8fd796246b546b36815a0ddRoshan Pius
22557ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius	wpas_hidl_notify_network_request(wpa_s, ssid, rtype, default_txt);
2261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
2271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
2281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scanning(struct wpa_supplicant *wpa_s)
2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2316c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2326c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2336c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scanning(wpa_s);
2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING);
2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2446c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2456c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2466c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_scan_done(wpa_s, success);
2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
2528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2536c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2546c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2556c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scan_results(wpa_s);
2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_wps_notify_scan_results(wpa_s);
2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
2648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				const struct wps_credential *cred)
2658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2666c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2676c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2686c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred);
2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_cred(wpa_s, cred);
2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s,
2798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wps_event_m2d *m2d)
2808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2836c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_m2d(wpa_s, m2d);
2868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s,
2918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				struct wps_event_fail *fail)
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_fail(wpa_s, fail);
2988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s)
3038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3046c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3056c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3066c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_success(wpa_s);
3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
3108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3127a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidtvoid wpas_notify_wps_event_pbc_overlap(struct wpa_supplicant *wpa_s)
3137a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt{
3147a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	if (wpa_s->p2p_mgmt)
3157a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		return;
3167a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
3177a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#ifdef CONFIG_WPS
3187a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	wpas_dbus_signal_wps_event_pbc_overlap(wpa_s);
3197a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt#endif /* CONFIG_WPS */
3207a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt}
3217a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt
3228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_added(struct wpa_supplicant *wpa_s,
3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wpa_ssid *ssid)
3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3266c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3276c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3286c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
32975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
33075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Networks objects created during any P2P activities should not be
33175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * exposed out. They might/will confuse certain non-P2P aware
33275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * applications since these network objects won't behave like
33375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * regular ones.
33475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
335d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s) {
33675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_register_network(wpa_s, ssid);
33757ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius		wpas_hidl_register_network(wpa_s, ssid);
338d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	}
33975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
34075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
34175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
34275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_added(struct wpa_supplicant *wpa_s,
34375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					struct wpa_ssid *ssid)
34475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
345c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
34675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_persistent_group(wpa_s, ssid);
347c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
34875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
34975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
35075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
35175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_removed(struct wpa_supplicant *wpa_s,
35275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					  struct wpa_ssid *ssid)
35375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
354c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
35575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
356c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_removed(struct wpa_supplicant *wpa_s,
3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 struct wpa_ssid *ssid)
3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
363f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt	if (wpa_s->next_ssid == ssid)
364f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt		wpa_s->next_ssid = NULL;
3651f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (wpa_s->wpa)
3661f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid);
367cc00d5dc8483e32158b2ba61ea44b0c38d790ed7Dmitry Shmidt	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s &&
368d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	    !wpa_s->p2p_mgmt) {
36975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_unregister_network(wpa_s, ssid->id);
37057ffbcfc79cd9f7a8389bfcbabea0bced5ed4dbaRoshan Pius		wpas_hidl_unregister_network(wpa_s, ssid);
371d385445171074ae070c5ddce94344ec0f06d15b4Roshan Pius	}
3726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (network_is_persistent_group(ssid))
3736c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_notify_persistent_group_removed(wpa_s, ssid);
3746c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3751f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_network_removed(wpa_s, ssid);
3768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_added(struct wpa_supplicant *wpa_s,
3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   u8 bssid[], unsigned int id)
3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3836c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3846c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_register_bss(wpa_s, bssid, id);
3868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR,
3878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_removed(struct wpa_supplicant *wpa_s,
3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			     u8 bssid[], unsigned int id)
3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3946c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3956c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3966c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_unregister_bss(wpa_s, bssid, id);
3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR,
3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_freq_changed(struct wpa_supplicant *wpa_s,
4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  unsigned int id)
4058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4066c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4076c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4086c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_FREQ, id);
4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_signal_changed(struct wpa_supplicant *wpa_s,
4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				    unsigned int id)
4158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4166c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4176c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4186c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_SIGNAL,
4208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_privacy_changed(struct wpa_supplicant *wpa_s,
4258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				     unsigned int id)
4268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4276c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4286c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4296c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_PRIVACY,
4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_mode_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_MODE, id);
4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wpaie_changed(struct wpa_supplicant *wpa_s,
4468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4486c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4496c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4506c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPA, id);
4528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s,
4568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4586c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4596c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4606c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RSN, id);
4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s,
4668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 unsigned int id)
4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4686c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4696c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4706c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
471d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#ifdef CONFIG_WPS
472d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id);
473d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#endif /* CONFIG_WPS */
4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_ies_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_IES, id);
4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rates_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
4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RATES, id);
4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
497661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_bss_seen(struct wpa_supplicant *wpa_s, unsigned int id)
498661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
4996c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5006c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5016c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
502661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_AGE, id);
503661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
504661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
505661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5086c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5096c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5106c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_added(wpa_s, name);
5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name)
5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5176c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
5186c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
5196c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_removed(wpa_s, name);
5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_level_changed(struct wpa_global *global)
5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_level_changed(global);
5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_timestamp_changed(struct wpa_global *global)
5318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_timestamp_changed(global);
5338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_show_keys_changed(struct wpa_global *global)
5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_show_keys_changed(global);
5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_suspend(struct wpa_global *global)
5438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	os_get_time(&global->suspend_time);
5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System suspend notification");
5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next)
5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_suspend(wpa_s);
5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_resume(struct wpa_global *global)
5548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct os_time now;
5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int slept;
5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->suspend_time.sec == 0)
5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = -1;
5618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else {
5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		os_get_time(&now);
5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = now.sec - global->suspend_time.sec;
5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System resume notification (slept %d seconds)",
5668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   slept);
5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_resume(wpa_s);
5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (wpa_s->wpa_state == WPA_DISCONNECTED)
5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			wpa_supplicant_req_scan(wpa_s, 0, 100000);
5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_P2P
5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5788bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidtvoid wpas_notify_p2p_find_stopped(struct wpa_supplicant *wpa_s)
5798bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt{
5808bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt	/* Notify P2P find has stopped */
5818bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt	wpas_dbus_signal_p2p_find_stopped(wpa_s);
5828bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt}
5838bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt
5848bd70b7d6ba220544ee2f0e201e5df23e277fa1dDmitry Shmidt
5858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s,
5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  const u8 *dev_addr, int new_device)
5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
58875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	if (new_device) {
58975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		/* Create the new peer object */
59075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_register_peer(wpa_s, dev_addr);
59175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	}
59275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
59375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a new peer has been detected*/
59475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_peer_device_found(wpa_s, dev_addr);
5958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s,
5998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *dev_addr)
6008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
60175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_peer(wpa_s, dev_addr);
60275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
60375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Create signal on interface object*/
60475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_peer_device_lost(wpa_s, dev_addr);
6058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
6098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const struct wpa_ssid *ssid,
6108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const char *role)
6118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
61275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_group_removed(wpa_s, role);
61303658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt
61403658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt	wpas_dbus_unregister_p2p_group(wpa_s, ssid);
6158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
6197a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt				const u8 *src, u16 dev_passwd_id, u8 go_intent)
6208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
6217a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt	wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id, go_intent);
6228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6251f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s,
6261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				      struct p2p_go_neg_results *res)
6278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
6281f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_p2p_go_neg_resp(wpa_s, res);
6298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s,
6338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				       int status, const u8 *bssid)
6348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
63575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_invitation_result(wpa_s, status, bssid);
6368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_request(struct wpa_supplicant *wpa_s,
6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				int freq, const u8 *sa, u8 dialog_token,
6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				u16 update_indic, const u8 *tlvs,
6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				size_t tlvs_len)
6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
64475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_request(wpa_s, freq, sa, dialog_token,
64575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					update_indic, tlvs, tlvs_len);
6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_response(struct wpa_supplicant *wpa_s,
6508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *sa, u16 update_indic,
6518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *tlvs, size_t tlvs_len)
6528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
65375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_response(wpa_s, sa, update_indic,
65475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 tlvs, tlvs_len);
65575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
65675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
65775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
65875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen/**
65975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * wpas_notify_p2p_provision_discovery - Notification of provision discovery
66075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @dev_addr: Who sent the request or responded to our request.
66175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @request: Will be 1 if request, 0 for response.
66275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @status: Valid only in case of response (0 in case of success)
66375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @config_methods: WPS config methods
66475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @generated_pin: PIN to be displayed in case of WPS_CONFIG_DISPLAY method
66575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen *
66675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * This can be used to notify:
66775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Requests or responses
66875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Various config methods
66975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Failure condition in case of response
67075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen */
67175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
67275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 const u8 *dev_addr, int request,
67375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 enum p2p_prov_disc_status status,
67475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 u16 config_methods,
67575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 unsigned int generated_pin)
67675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
67775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_provision_discovery(wpa_s, dev_addr, request,
67875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 status, config_methods,
67975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 generated_pin);
68075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
68175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
68275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
68375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
684d5ab1b53af720d05586ccc0addabe93459f1f388Dmitry Shmidt				   struct wpa_ssid *ssid, int persistent,
68575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				   int client)
68675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
68775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a group has been started */
68875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_p2p_group(wpa_s, ssid);
68975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
690d5ab1b53af720d05586ccc0addabe93459f1f388Dmitry Shmidt	wpas_dbus_signal_p2p_group_started(wpa_s, client, persistent);
69175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
69275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
69375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
694d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid wpas_notify_p2p_group_formation_failure(struct wpa_supplicant *wpa_s,
695d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					     const char *reason)
696d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{
697d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	/* Notify a group formation failed */
698d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	wpas_dbus_signal_p2p_group_formation_failure(wpa_s, reason);
699d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}
700d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
701d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
70275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_wps_failed(struct wpa_supplicant *wpa_s,
70375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				struct wps_event_fail *fail)
70475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
70575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_wps_failed(wpa_s, fail);
7068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
7078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
708d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
709d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidtvoid wpas_notify_p2p_invitation_received(struct wpa_supplicant *wpa_s,
710d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					 const u8 *sa, const u8 *go_dev_addr,
711d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt					 const u8 *bssid, int id, int op_freq)
712d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt{
713d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	/* Notify a P2P Invitation Request */
714d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt	wpas_dbus_signal_p2p_invitation_received(wpa_s, sa, go_dev_addr, bssid,
715d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt						 id, op_freq);
716d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt}
717d80a401aed31d06f261efd19223cf55d1a2a8228Dmitry Shmidt
7188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_P2P */
7198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
7221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *sta,
7231f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *p2p_dev_addr)
7248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
72575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
7261f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_notify_ap_sta_authorized(wpa_s, p2p_dev_addr);
7271f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
72875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
72975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-joined' signal on group object -- will also
73075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * check P2P itself.
73175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
7326c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
7336c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_joined(wpa_s, p2p_dev_addr);
73475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
73534af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
73634af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a new station has been authorized */
73734af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_authorized(wpa_s, sta);
7388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
7398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s,
742d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *sta,
743d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *p2p_dev_addr)
7448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
74575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
74675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
74775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-disconnected' signal on group object if this
74875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * is a P2P group.
74975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
7506c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
7516c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_disconnected(wpa_s, p2p_dev_addr);
75275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
75334af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
75434af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a station has been deauthorized */
75534af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
7568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
7578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
7598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_sta_authorized(struct wpa_supplicant *wpa_s,
7601f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *mac_addr, int authorized,
7611f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *p2p_dev_addr)
7628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
7638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (authorized)
7641f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpas_notify_ap_sta_authorized(wpa_s, mac_addr, p2p_dev_addr);
7658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else
766d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt		wpas_notify_ap_sta_deauthorized(wpa_s, mac_addr, p2p_dev_addr);
7678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
768c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
769c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
770c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidtvoid wpas_notify_certification(struct wpa_supplicant *wpa_s, int depth,
7712f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       const char *subject, const char *altsubject[],
7722f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       int num_altsubject, const char *cert_hash,
773c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			       const struct wpabuf *cert)
774c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt{
775c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_CERT
776c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		"depth=%d subject='%s'%s%s",
7772f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		depth, subject, cert_hash ? " hash=" : "",
778c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hash ? cert_hash : "");
779c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
780c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	if (cert) {
781c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		char *cert_hex;
782c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		size_t len = wpabuf_len(cert) * 2 + 1;
783c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hex = os_malloc(len);
784c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		if (cert_hex) {
785c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_snprintf_hex(cert_hex, len, wpabuf_head(cert),
786c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt					 wpabuf_len(cert));
787c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_msg_ctrl(wpa_s, MSG_INFO,
788c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     WPA_EVENT_EAP_PEER_CERT
789c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     "depth=%d subject='%s' cert=%s",
790c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     depth, subject, cert_hex);
791c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			os_free(cert_hex);
792c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		}
793c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	}
794c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
7952f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	if (altsubject) {
7962f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		int i;
7972f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
7982f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		for (i = 0; i < num_altsubject; i++)
7992f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_ALT
8002f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				"depth=%d %s", depth, altsubject[i]);
8012f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	}
8022f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
803c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the old DBus API */
804c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_supplicant_dbus_notify_certification(wpa_s, depth, subject,
805c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt						 cert_hash, cert);
806c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the new DBus API */
8072f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	wpas_dbus_signal_certification(wpa_s, depth, subject, altsubject,
8082f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				       num_altsubject, cert_hash, cert);
809c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt}
81004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
81104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
81204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_preq(struct wpa_supplicant *wpa_s,
81304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *addr, const u8 *dst, const u8 *bssid,
81404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *ie, size_t ie_len, u32 ssi_signal)
81504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
81604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#ifdef CONFIG_AP
81704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_preq(wpa_s, addr, dst, bssid, ie, ie_len, ssi_signal);
81804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif /* CONFIG_AP */
81904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
82004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
82104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
82204949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
82304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt			    const char *parameter)
82404949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
82504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_eap_status(wpa_s, status, parameter);
8268da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_EAP_STATUS
8278da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     "status='%s' parameter='%s'",
8288da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     status, parameter);
82904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
830661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
831661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
832661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
833661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt					   struct wpa_ssid *ssid)
834661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
835661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	if (wpa_s->current_ssid != ssid)
836661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		return;
837661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
838661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_dbg(wpa_s, MSG_DEBUG,
839661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		"Network bssid config changed for the current network - within-ESS roaming %s",
840661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		ssid->bssid_set ? "disabled" : "enabled");
841661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
842661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_drv_roaming(wpa_s, !ssid->bssid_set,
843661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt			ssid->bssid_set ? ssid->bssid : NULL);
844661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
8457f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
8467f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
8477f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidtvoid wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
8487f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt				      struct wpa_ssid *ssid)
8497f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt{
8507f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#ifdef CONFIG_P2P
8517f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	if (ssid->disabled == 2) {
8527f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from normal network profile to persistent group */
8537f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 0;
8547f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_network(wpa_s, ssid->id);
8557f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 2;
8567a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		ssid->p2p_persistent_group = 1;
8577f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_persistent_group(wpa_s, ssid);
8587f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	} else {
8597f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from persistent group to normal network profile */
8607f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
8617a53dbb56693ee9f55c0cab1a8297436511e8613Dmitry Shmidt		ssid->p2p_persistent_group = 0;
8627f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_network(wpa_s, ssid);
8637f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	}
8647f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#endif /* CONFIG_P2P */
8657f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt}
866