notify.c revision 7f65602d49069f96a7bb44da8bd79ffe8d4c6a98
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"
208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "driver_i.h"
218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "scan.h"
228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "p2p_supplicant.h"
238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "sme.h"
248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#include "notify.h"
258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpas_notify_supplicant_initialized(struct wpa_global *global)
278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_DBUS
298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->params.dbus_ctrl_interface) {
308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		global->dbus = wpas_dbus_init(global);
318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (global->dbus == NULL)
328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			return -1;
338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_DBUS */
358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 0;
378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_supplicant_deinitialized(struct wpa_global *global)
418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_DBUS
438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->dbus)
448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_dbus_deinit(global->dbus);
458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_DBUS */
468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtint wpas_notify_iface_added(struct wpa_supplicant *wpa_s)
508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
516c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
526c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return 0;
536c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (wpas_dbus_register_iface(wpa_s))
558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return -1;
568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (wpas_dbus_register_interface(wpa_s))
588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		return -1;
598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	return 0;
618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_iface_removed(struct wpa_supplicant *wpa_s)
658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
666c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
676c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
686c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* unregister interface in old DBus ctrl iface */
708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_unregister_iface(wpa_s);
718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* unregister interface in new DBus ctrl iface */
738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_unregister_interface(wpa_s);
748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_state_changed(struct wpa_supplicant *wpa_s,
788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       enum wpa_states new_state,
798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       enum wpa_states old_state)
808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
836c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_state_change(wpa_s, new_state,
868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt						old_state);
878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_STATE);
908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (new_state == WPA_COMPLETED)
928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_p2p_notif_connected(wpa_s);
9304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	else if (old_state >= WPA_ASSOCIATED && new_state < WPA_ASSOCIATED)
948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpas_p2p_notif_disconnected(wpa_s);
958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	sme_state_changed(wpa_s);
978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef ANDROID
998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_STATE_CHANGE
100f20a4432808cee548326c4b35c83071ca576a239Irfan Sheriff		     "id=%d state=%d BSSID=" MACSTR " SSID=%s",
1018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     wpa_s->current_ssid ? wpa_s->current_ssid->id : -1,
102f20a4432808cee548326c4b35c83071ca576a239Irfan Sheriff		     new_state,
103e78e767aea5576ec0ba7edadfe25fd9dc7dce48fIrfan Sheriff		     MAC2STR(wpa_s->bssid),
1045b5fb02b225c5c05a4477bef58bdaceede5d68dcandy		     wpa_s->current_ssid && wpa_s->current_ssid->ssid ?
1055b5fb02b225c5c05a4477bef58bdaceede5d68dcandy		     wpa_ssid_txt(wpa_s->current_ssid->ssid,
106e0e48dc666fb14a7bb60264ca87463ba7bc1fe0bDmitry Shmidt				  wpa_s->current_ssid->ssid_len) : "");
1078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* ANDROID */
1088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
11104949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_disconnect_reason(struct wpa_supplicant *wpa_s)
11204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
1136c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1146c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1156c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
11604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_DISCONNECT_REASON);
11704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
11804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
11904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
1208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
1218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1226c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1236c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1246c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_NETWORK);
1268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_ap_scan_changed(struct wpa_supplicant *wpa_s)
1308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1316c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1326c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1336c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_AP_SCAN);
1358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bssid_changed(struct wpa_supplicant *wpa_s)
1398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1406c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1416c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1426c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_BSS);
1448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_auth_changed(struct wpa_supplicant *wpa_s)
1488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1496c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1506c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1516c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_CURRENT_AUTH_MODE);
1538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_enabled_changed(struct wpa_supplicant *wpa_s,
1578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					 struct wpa_ssid *ssid)
1588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1596c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1606c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1616c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_enabled_changed(wpa_s, ssid);
1638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1658d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_selected(struct wpa_supplicant *wpa_s,
1678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  struct wpa_ssid *ssid)
1688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1696c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1706c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1716c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_network_selected(wpa_s, ssid->id);
1738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1761f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_network_request(struct wpa_supplicant *wpa_s,
1771f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 struct wpa_ssid *ssid,
1781f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 enum wpa_ctrl_req_type rtype,
1791f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				 const char *default_txt)
1801f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt{
1816c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1826c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1836c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1841f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_network_request(wpa_s, ssid, rtype, default_txt);
1851f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt}
1861f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
1871f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
1888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scanning(struct wpa_supplicant *wpa_s)
1898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
1906c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
1916c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
1926c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
1938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
1948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scanning(wpa_s);
1958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
1968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
1978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_prop_changed(wpa_s, WPAS_DBUS_PROP_SCANNING);
1988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
1998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
2028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2036c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2046c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2056c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_scan_done(wpa_s, success);
2078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
2118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2126c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2136c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2146c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_scan_results(wpa_s);
2178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_wps_notify_scan_results(wpa_s);
2198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
2238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				const struct wps_credential *cred)
2248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2256c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2266c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2276c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2298d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the old DBus API */
2308d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_supplicant_dbus_notify_wps_cred(wpa_s, cred);
2318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	/* notify the new DBus API */
2328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_cred(wpa_s, cred);
2338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_m2d(struct wpa_supplicant *wpa_s,
2388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wps_event_m2d *m2d)
2398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2406c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2416c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2426c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_m2d(wpa_s, m2d);
2458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_fail(struct wpa_supplicant *wpa_s,
2508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				struct wps_event_fail *fail)
2518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2526c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2536c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2546c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_fail(wpa_s, fail);
2578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_wps_event_success(struct wpa_supplicant *wpa_s)
2628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2636c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2646c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2656c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
2668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_WPS
2678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_wps_event_success(wpa_s);
2688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_WPS */
2698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
2708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
2728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_added(struct wpa_supplicant *wpa_s,
2738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			       struct wpa_ssid *ssid)
2748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
2756c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
2766c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
2776c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
27875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
27975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Networks objects created during any P2P activities should not be
28075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * exposed out. They might/will confuse certain non-P2P aware
28175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * applications since these network objects won't behave like
28275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * regular ones.
28375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
284391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s)
28575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_register_network(wpa_s, ssid);
28675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
28775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
28875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
28975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_added(struct wpa_supplicant *wpa_s,
29075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					struct wpa_ssid *ssid)
29175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
292c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
29375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_persistent_group(wpa_s, ssid);
294c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
29575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
29675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
29775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
29875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_persistent_group_removed(struct wpa_supplicant *wpa_s,
29975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					  struct wpa_ssid *ssid)
30075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
301c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#ifdef CONFIG_P2P
30275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
303c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt#endif /* CONFIG_P2P */
3048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_network_removed(struct wpa_supplicant *wpa_s,
3088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 struct wpa_ssid *ssid)
3098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3106c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3116c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3126c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
313f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt	if (wpa_s->next_ssid == ssid)
314f21452aea786ac056eb01f1cbba4f553bd502747Dmitry Shmidt		wpa_s->next_ssid = NULL;
3151f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	if (wpa_s->wpa)
3161f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpa_sm_pmksa_cache_flush(wpa_s->wpa, ssid);
317391c59f0632df8db1c325da1d31d479b2eedce45Dmitry Shmidt	if (!ssid->p2p_group && wpa_s->global->p2p_group_formation != wpa_s)
31875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_unregister_network(wpa_s, ssid->id);
3196c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (network_is_persistent_group(ssid))
3206c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_notify_persistent_group_removed(wpa_s, ssid);
3216c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3221f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_network_removed(wpa_s, ssid);
3238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_added(struct wpa_supplicant *wpa_s,
3278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			   u8 bssid[], unsigned int id)
3288d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3296c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3306c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3316c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_register_bss(wpa_s, bssid, id);
3338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_ADDED "%u " MACSTR,
3348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
3358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_removed(struct wpa_supplicant *wpa_s,
3398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			     u8 bssid[], unsigned int id)
3408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3416c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3426c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3436c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3448d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_unregister_bss(wpa_s, bssid, id);
3458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_BSS_REMOVED "%u " MACSTR,
3468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		     id, MAC2STR(bssid));
3478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_freq_changed(struct wpa_supplicant *wpa_s,
3518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  unsigned int id)
3528d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3536c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3546c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3556c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_FREQ, id);
3578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_signal_changed(struct wpa_supplicant *wpa_s,
3618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				    unsigned int id)
3628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3636c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3646c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3656c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_SIGNAL,
3678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
3688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_privacy_changed(struct wpa_supplicant *wpa_s,
3728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				     unsigned int id)
3738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3746c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3756c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3766c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_PRIVACY,
3788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt					  id);
3798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_mode_changed(struct wpa_supplicant *wpa_s,
3838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  unsigned int id)
3848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3856c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3866c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3876c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_MODE, id);
3898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
3908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
3928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wpaie_changed(struct wpa_supplicant *wpa_s,
3938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
3948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
3956c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
3966c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
3976c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
3988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPA, id);
3998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rsnie_changed(struct wpa_supplicant *wpa_s,
4038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4056c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4066c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4076c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RSN, id);
4098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_wps_changed(struct wpa_supplicant *wpa_s,
4138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 unsigned int id)
4148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4156c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4166c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4176c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
418d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#ifdef CONFIG_WPS
419d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_WPS, id);
420d5e4923d04122f81300fa68fb07d64ede28fd44dDmitry Shmidt#endif /* CONFIG_WPS */
4218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_ies_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_IES, id);
4318d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4328d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4338d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4348d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s,
4358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   unsigned int id)
4368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4376c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4386c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4396c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_RATES, id);
4418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
444661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_bss_seen(struct wpa_supplicant *wpa_s, unsigned int id)
445661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
4466c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4476c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4486c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
449661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_AGE, id);
450661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
451661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
452661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
4538d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
4548d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4556c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4566c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4576c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_added(wpa_s, name);
4598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name)
4638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4646c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (wpa_s->p2p_mgmt)
4656c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		return;
4666c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt
4678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_blob_removed(wpa_s, name);
4688d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_level_changed(struct wpa_global *global)
4728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_level_changed(global);
4748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4758d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_timestamp_changed(struct wpa_global *global)
4788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_timestamp_changed(global);
4808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_debug_show_keys_changed(struct wpa_global *global)
4848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpas_dbus_signal_debug_show_keys_changed(global);
4868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_suspend(struct wpa_global *global)
4908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
4918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
4928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4938d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	os_get_time(&global->suspend_time);
4948d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System suspend notification");
4958d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next)
4968d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_suspend(wpa_s);
4978d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
4988d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
4998d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5008d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_resume(struct wpa_global *global)
5018d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5028d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct os_time now;
5038d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	int slept;
5048d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	struct wpa_supplicant *wpa_s;
5058d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5068d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (global->suspend_time.sec == 0)
5078d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = -1;
5088d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else {
5098d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		os_get_time(&now);
5108d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		slept = now.sec - global->suspend_time.sec;
5118d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5128d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	wpa_printf(MSG_DEBUG, "System resume notification (slept %d seconds)",
5138d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		   slept);
5148d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5158d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	for (wpa_s = global->ifaces; wpa_s; wpa_s = wpa_s->next) {
5168d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		wpa_drv_resume(wpa_s);
5178d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt		if (wpa_s->wpa_state == WPA_DISCONNECTED)
5188d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt			wpa_supplicant_req_scan(wpa_s, 0, 100000);
5198d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	}
5208d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5218d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5228d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5238d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#ifdef CONFIG_P2P
5248d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5258d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_found(struct wpa_supplicant *wpa_s,
5268d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				  const u8 *dev_addr, int new_device)
5278d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
52875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	if (new_device) {
52975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		/* Create the new peer object */
53075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen		wpas_dbus_register_peer(wpa_s, dev_addr);
53175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	}
53275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
53375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a new peer has been detected*/
53475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_peer_device_found(wpa_s, dev_addr);
5358d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5368d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5378d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_device_lost(struct wpa_supplicant *wpa_s,
5398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *dev_addr)
5408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
54175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_unregister_peer(wpa_s, dev_addr);
54275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
54375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Create signal on interface object*/
54475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_peer_device_lost(wpa_s, dev_addr);
5458d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5478d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5488d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_group_removed(struct wpa_supplicant *wpa_s,
5498d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const struct wpa_ssid *ssid,
5508d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				   const char *role)
5518d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
55275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_group_removed(wpa_s, role);
55303658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt
55403658834c33748b9ad86f3d4cdf0c7be9c6887d1Dmitry Shmidt	wpas_dbus_unregister_p2p_group(wpa_s, ssid);
5558d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5568d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5578d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5588d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_go_neg_req(struct wpa_supplicant *wpa_s,
5598d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				const u8 *src, u16 dev_passwd_id)
5608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
56175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_go_neg_req(wpa_s, src, dev_passwd_id);
5628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5648d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5651f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidtvoid wpas_notify_p2p_go_neg_completed(struct wpa_supplicant *wpa_s,
5661f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				      struct p2p_go_neg_results *res)
5678d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
5681f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_dbus_signal_p2p_go_neg_resp(wpa_s, res);
5698d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5708d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5718d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5728d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_invitation_result(struct wpa_supplicant *wpa_s,
5738d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				       int status, const u8 *bssid)
5748d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
57575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_invitation_result(wpa_s, status, bssid);
5768d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5778d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_request(struct wpa_supplicant *wpa_s,
5808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				int freq, const u8 *sa, u8 dialog_token,
5818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				u16 update_indic, const u8 *tlvs,
5828d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				size_t tlvs_len)
5838d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
58475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_request(wpa_s, freq, sa, dialog_token,
58575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					update_indic, tlvs, tlvs_len);
5868d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
5878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5888d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
5898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_p2p_sd_response(struct wpa_supplicant *wpa_s,
5908d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *sa, u16 update_indic,
5918d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt				 const u8 *tlvs, size_t tlvs_len)
5928d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
59375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_sd_response(wpa_s, sa, update_indic,
59475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 tlvs, tlvs_len);
59575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
59675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
59775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
59875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen/**
59975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * wpas_notify_p2p_provision_discovery - Notification of provision discovery
60075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @dev_addr: Who sent the request or responded to our request.
60175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @request: Will be 1 if request, 0 for response.
60275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @status: Valid only in case of response (0 in case of success)
60375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @config_methods: WPS config methods
60475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * @generated_pin: PIN to be displayed in case of WPS_CONFIG_DISPLAY method
60575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen *
60675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * This can be used to notify:
60775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Requests or responses
60875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Various config methods
60975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen * - Failure condition in case of response
61075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen */
61175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_provision_discovery(struct wpa_supplicant *wpa_s,
61275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 const u8 *dev_addr, int request,
61375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 enum p2p_prov_disc_status status,
61475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 u16 config_methods,
61575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen					 unsigned int generated_pin)
61675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
61775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_provision_discovery(wpa_s, dev_addr, request,
61875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 status, config_methods,
61975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen						 generated_pin);
62075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
62175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
62275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
62375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_group_started(struct wpa_supplicant *wpa_s,
62475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				   struct wpa_ssid *ssid, int network_id,
62575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				   int client)
62675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
62775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/* Notify a group has been started */
62875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_register_p2p_group(wpa_s, ssid);
62975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
63075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_group_started(wpa_s, ssid, client, network_id);
63175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen}
63275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
63375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen
63475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinenvoid wpas_notify_p2p_wps_failed(struct wpa_supplicant *wpa_s,
63575ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen				struct wps_event_fail *fail)
63675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen{
63775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	wpas_dbus_signal_p2p_wps_failed(wpa_s, fail);
6388d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6398d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6408d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt#endif /* CONFIG_P2P */
6418d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6428d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6438d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_authorized(struct wpa_supplicant *wpa_s,
6441f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *sta,
6451f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt					  const u8 *p2p_dev_addr)
6468d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
64775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
6481f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt	wpas_p2p_notify_ap_sta_authorized(wpa_s, p2p_dev_addr);
6491f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt
65075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
65175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-joined' signal on group object -- will also
65275ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * check P2P itself.
65375ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
6546c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
6556c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_joined(wpa_s, p2p_dev_addr);
65675ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
65734af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
65834af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a new station has been authorized */
65934af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_authorized(wpa_s, sta);
6608d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6618d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6628d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6638d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtstatic void wpas_notify_ap_sta_deauthorized(struct wpa_supplicant *wpa_s,
664d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *sta,
665d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt					    const u8 *p2p_dev_addr)
6668d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
66775ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#ifdef CONFIG_P2P
66875ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	/*
66975ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * Create 'peer-disconnected' signal on group object if this
67075ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 * is a P2P group.
67175ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen	 */
6726c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt	if (p2p_dev_addr)
6736c0da2bb83f6915d8260912362692d1a742e057bDmitry Shmidt		wpas_dbus_signal_p2p_peer_disconnected(wpa_s, p2p_dev_addr);
67475ecf5267604f166b85a7ee2cf0d9cb682966680Jouni Malinen#endif /* CONFIG_P2P */
67534af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt
67634af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	/* Notify listeners a station has been deauthorized */
67734af306c42b7ccf956508e7cd23f0ba90606e360Dmitry Shmidt	wpas_dbus_signal_sta_deauthorized(wpa_s, sta);
6788d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
6798d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6808d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt
6818d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidtvoid wpas_notify_sta_authorized(struct wpa_supplicant *wpa_s,
6821f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *mac_addr, int authorized,
6831f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt				const u8 *p2p_dev_addr)
6848d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt{
6858d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	if (authorized)
6861f69aa52ea2e0a73ac502565df8c666ee49cab6aDmitry Shmidt		wpas_notify_ap_sta_authorized(wpa_s, mac_addr, p2p_dev_addr);
6878d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt	else
688d30ac604c9f6da71a0dd7f46d25be05a2a62cfbbDmitry Shmidt		wpas_notify_ap_sta_deauthorized(wpa_s, mac_addr, p2p_dev_addr);
6898d520ff1dc2da35cdca849e982051b86468016d8Dmitry Shmidt}
690c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
691c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
692c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidtvoid wpas_notify_certification(struct wpa_supplicant *wpa_s, int depth,
6932f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       const char *subject, const char *altsubject[],
6942f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			       int num_altsubject, const char *cert_hash,
695c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			       const struct wpabuf *cert)
696c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt{
697c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_CERT
698c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		"depth=%d subject='%s'%s%s",
6992f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		depth, subject, cert_hash ? " hash=" : "",
700c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hash ? cert_hash : "");
701c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
702c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	if (cert) {
703c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		char *cert_hex;
704c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		size_t len = wpabuf_len(cert) * 2 + 1;
705c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		cert_hex = os_malloc(len);
706c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		if (cert_hex) {
707c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_snprintf_hex(cert_hex, len, wpabuf_head(cert),
708c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt					 wpabuf_len(cert));
709c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			wpa_msg_ctrl(wpa_s, MSG_INFO,
710c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     WPA_EVENT_EAP_PEER_CERT
711c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     "depth=%d subject='%s' cert=%s",
712c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt				     depth, subject, cert_hex);
713c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt			os_free(cert_hex);
714c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt		}
715c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	}
716c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt
7172f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	if (altsubject) {
7182f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		int i;
7192f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
7202f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt		for (i = 0; i < num_altsubject; i++)
7212f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt			wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_EAP_PEER_ALT
7222f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				"depth=%d %s", depth, altsubject[i]);
7232f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	}
7242f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt
725c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the old DBus API */
726c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	wpa_supplicant_dbus_notify_certification(wpa_s, depth, subject,
727c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt						 cert_hash, cert);
728c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt	/* notify the new DBus API */
7292f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt	wpas_dbus_signal_certification(wpa_s, depth, subject, altsubject,
7302f74e36e84064ffa32f82f3decf36b653c7e4fadDmitry Shmidt				       num_altsubject, cert_hash, cert);
731c55524ad84d13014e8019491c2b17e5dcf13545aDmitry Shmidt}
73204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
73304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
73404949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_preq(struct wpa_supplicant *wpa_s,
73504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *addr, const u8 *dst, const u8 *bssid,
73604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt		      const u8 *ie, size_t ie_len, u32 ssi_signal)
73704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
73804949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#ifdef CONFIG_AP
73904949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_preq(wpa_s, addr, dst, bssid, ie, ie_len, ssi_signal);
74004949598a23f501be6eec21697465fd46a28840aDmitry Shmidt#endif /* CONFIG_AP */
74104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
74204949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
74304949598a23f501be6eec21697465fd46a28840aDmitry Shmidt
74404949598a23f501be6eec21697465fd46a28840aDmitry Shmidtvoid wpas_notify_eap_status(struct wpa_supplicant *wpa_s, const char *status,
74504949598a23f501be6eec21697465fd46a28840aDmitry Shmidt			    const char *parameter)
74604949598a23f501be6eec21697465fd46a28840aDmitry Shmidt{
74704949598a23f501be6eec21697465fd46a28840aDmitry Shmidt	wpas_dbus_signal_eap_status(wpa_s, status, parameter);
7488da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt	wpa_msg_ctrl(wpa_s, MSG_INFO, WPA_EVENT_EAP_STATUS
7498da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     "status='%s' parameter='%s'",
7508da800a193fb6f8832218715f82a7b4e2d2ad338Dmitry Shmidt		     status, parameter);
75104949598a23f501be6eec21697465fd46a28840aDmitry Shmidt}
752661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
753661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
754661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidtvoid wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
755661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt					   struct wpa_ssid *ssid)
756661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt{
757661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	if (wpa_s->current_ssid != ssid)
758661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		return;
759661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
760661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_dbg(wpa_s, MSG_DEBUG,
761661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		"Network bssid config changed for the current network - within-ESS roaming %s",
762661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt		ssid->bssid_set ? "disabled" : "enabled");
763661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt
764661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt	wpa_drv_roaming(wpa_s, !ssid->bssid_set,
765661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt			ssid->bssid_set ? ssid->bssid : NULL);
766661b4f78e48c697429dc46154a4125892c001718Dmitry Shmidt}
7677f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
7687f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt
7697f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidtvoid wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
7707f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt				      struct wpa_ssid *ssid)
7717f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt{
7727f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#ifdef CONFIG_P2P
7737f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	if (ssid->disabled == 2) {
7747f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from normal network profile to persistent group */
7757f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 0;
7767f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_network(wpa_s, ssid->id);
7777f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		ssid->disabled = 2;
7787f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_persistent_group(wpa_s, ssid);
7797f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	} else {
7807f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		/* Changed from persistent group to normal network profile */
7817f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_unregister_persistent_group(wpa_s, ssid->id);
7827f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt		wpas_dbus_register_network(wpa_s, ssid);
7837f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt	}
7847f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt#endif /* CONFIG_P2P */
7857f65602d49069f96a7bb44da8bd79ffe8d4c6a98Dmitry Shmidt}
786