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