1526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/*
2526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * WPA Supplicant / dbus-based control interface
3526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Copyright (c) 2006, Dan Williams <dcbw@redhat.com> and Red Hat, Inc.
4526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
5526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * This program is free software; you can redistribute it and/or modify
6526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * it under the terms of the GNU General Public License version 2 as
7526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * published by the Free Software Foundation.
8526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
9526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * Alternatively, this software may be distributed under the terms of BSD
10526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * license.
11526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt *
12526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * See README and COPYING for more details.
13526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
14526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
15526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifndef CTRL_IFACE_DBUS_H
16526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define CTRL_IFACE_DBUS_H
17526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
18526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wps_credential;
19526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
20526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef CONFIG_CTRL_IFACE_DBUS
21526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
22526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifndef SIGPOLL
23526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#ifdef SIGIO
24526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/*
25526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * If we do not have SIGPOLL, try to use SIGIO instead. This is needed for
26526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt * FreeBSD.
27526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt */
28526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define SIGPOLL SIGIO
29526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif
30526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif
31526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
32526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#include <dbus/dbus.h>
33526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
34526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_OBJECT_PATH_MAX 150
35526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
36526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_SERVICE	"fi.epitest.hostap.WPASupplicant"
37526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_PATH		"/fi/epitest/hostap/WPASupplicant"
38526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_INTERFACE	"fi.epitest.hostap.WPASupplicant"
39526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
40526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_PATH_INTERFACES	WPAS_DBUS_PATH "/Interfaces"
41526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_IFACE_INTERFACE	WPAS_DBUS_INTERFACE ".Interface"
42526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
43526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_NETWORKS_PART "Networks"
44526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_IFACE_NETWORK	WPAS_DBUS_INTERFACE ".Network"
45526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
46526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_BSSIDS_PART	"BSSIDs"
47526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_IFACE_BSSID	WPAS_DBUS_INTERFACE ".BSSID"
48526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
49526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
50526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* Errors */
51526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_INVALID_NETWORK \
52526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".InvalidNetwork"
53526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_INVALID_BSSID \
54526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".InvalidBSSID"
55526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
56526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_INVALID_OPTS \
57526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_INTERFACE ".InvalidOptions"
58526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_INVALID_IFACE \
59526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_INTERFACE ".InvalidInterface"
60526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
61526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_ADD_ERROR \
62526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_INTERFACE ".AddError"
63526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_EXISTS_ERROR \
64526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_INTERFACE ".ExistsError"
65526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_REMOVE_ERROR \
66526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_INTERFACE ".RemoveError"
67526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
68526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_SCAN_ERROR \
69526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".ScanError"
70526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_ADD_NETWORK_ERROR \
71526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".AddNetworkError"
72526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_INTERNAL_ERROR \
73526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".InternalError"
74526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_ERROR_REMOVE_NETWORK_ERROR \
75526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	WPAS_DBUS_IFACE_INTERFACE ".RemoveNetworkError"
76526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
77526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#define WPAS_DBUS_BSSID_FORMAT "%02x%02x%02x%02x%02x%02x"
78526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
79526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpa_global;
80526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpa_supplicant;
81526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
82526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct ctrl_iface_dbus_priv *
83526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_ctrl_iface_init(struct wpa_global *global);
84526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid wpa_supplicant_dbus_ctrl_iface_deinit(struct ctrl_iface_dbus_priv *iface);
85526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid wpa_supplicant_dbus_notify_scan_results(struct wpa_supplicant *wpa_s);
86dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidtvoid wpa_supplicant_dbus_notify_scanning(struct wpa_supplicant *wpa_s);
87526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid wpa_supplicant_dbus_notify_state_change(struct wpa_supplicant *wpa_s,
88526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt					     wpa_states new_state,
89526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt					     wpa_states old_state);
90526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtvoid wpa_supplicant_dbus_notify_wps_cred(struct wpa_supplicant *wpa_s,
91526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt					 const struct wps_credential *cred);
92526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
93526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtchar * wpas_dbus_decompose_object_path(const char *path, char **network,
94526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt                                       char **bssid);
95526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
96526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint wpas_dbus_register_iface(struct wpa_supplicant *wpa_s);
97526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint wpas_dbus_unregister_iface(struct wpa_supplicant *wpa_s);
98526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
99526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
100526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt/* Methods internal to the dbus control interface */
101526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtu32 wpa_supplicant_dbus_next_objid(struct ctrl_iface_dbus_priv *iface);
102526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
103526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtint wpa_supplicant_set_dbus_path(struct wpa_supplicant *wpa_s,
104526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt				 const char *path);
105526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtconst char *wpa_supplicant_get_dbus_path(struct wpa_supplicant *wpa_s);
106526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstruct wpa_supplicant * wpa_supplicant_get_iface_by_dbus_path(
107526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	struct wpa_global *global, const char *path);
108526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
109526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry ShmidtDBusMessage * wpas_dbus_new_invalid_iface_error(DBusMessage *message);
110526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry ShmidtDBusMessage * wpas_dbus_new_invalid_network_error(DBusMessage *message);
111526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
112526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#else /* CONFIG_CTRL_IFACE_DBUS */
113526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
114526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline struct ctrl_iface_dbus_priv *
115526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_ctrl_iface_init(struct wpa_global *global)
116526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
117526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return (struct ctrl_iface_dbus_priv *) 1;
118526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
119526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
120526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void
121526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_ctrl_iface_deinit(struct ctrl_iface_dbus_priv *iface)
122526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
123526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
124526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
125526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void
126526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_notify_scan_results(struct wpa_supplicant *wpa_s)
127526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
128526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
129526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
130526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void
131dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidtwpa_supplicant_dbus_notify_scanning(struct wpa_supplicant *wpa_s)
132dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt{
133dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt}
134dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidt
135dde787cc314cd04caa4ea5f031cc8a02495ca513Dmitry Shmidtstatic inline void
136526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_notify_state_change(struct wpa_supplicant *wpa_s,
137526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt					wpa_states new_state,
138526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt					wpa_states old_state)
139526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
140526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
141526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
142526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline void
143526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpa_supplicant_dbus_notify_wps_cred(struct wpa_supplicant *wpa_s,
144526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt				    const struct wps_credential *cred)
145526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
146526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
147526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
148526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int
149526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpas_dbus_register_iface(struct wpa_supplicant *wpa_s)
150526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
151526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return 0;
152526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
153526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
154526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtstatic inline int
155526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidtwpas_dbus_unregister_iface(struct wpa_supplicant *wpa_s)
156526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt{
157526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt	return 0;
158526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt}
159526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
160526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CONFIG_CTRL_IFACE_DBUS */
161526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt
162526fc2a7dc09b4450086cdec313a5c44d36b10fdDmitry Shmidt#endif /* CTRL_IFACE_DBUS_H */
163