From c6e86b63d28a6ea87f7ebaf3b35f7343524dc0b5 Mon Sep 17 00:00:00 2001 From: Mukesh Agrawal Date: Sun, 1 Apr 2012 18:05:22 +0300 Subject: [PATCH] Create DBus getter/setter for ScanInterval Enable control of wpa_s->scan_interval via D-Bus. This parameter controls the delay between successive scans for a suitable AP. Also, update dbus.doxygen with ScanInterval, and some other parameters that were undocumented. Signed-hostap: Mukesh Agrawal --- doc/dbus.doxygen | 25 +++++++++++++ wpa_supplicant/ctrl_iface.c | 5 +-- wpa_supplicant/dbus/dbus_new.c | 4 ++ wpa_supplicant/dbus/dbus_new_handlers.c | 50 +++++++++++++++++++++++++ wpa_supplicant/dbus/dbus_new_handlers.h | 8 ++++ wpa_supplicant/wpa_supplicant.c | 23 ++++++++++++ wpa_supplicant/wpa_supplicant_i.h | 2 + 7 files changed, 113 insertions(+), 4 deletions(-) diff --git a/doc/dbus.doxygen b/doc/dbus.doxygen index eeea2003a..b298dd879 100644 --- a/doc/dbus.doxygen +++ b/doc/dbus.doxygen @@ -351,6 +351,21 @@ fi.w1.wpa_supplicant1.CreateInterface.

Identical to ap_scan entry in %wpa_supplicant configuration file. Possible values are 0, 1 or 2.

+
  • +

    BSSExpireAge - u - (read/write)

    +

    Identical to bss_expiration_age entry in %wpa_supplicant configuration file.

    +
  • + +
  • +

    BSSExpireCount - u - (read/write)

    +

    Identical to bss_expiration_scan_count entry in %wpa_supplicant configuration file.

    +
  • + +
  • +

    Country - s - (read/write)

    +

    Identical to country entry in %wpa_supplicant configuration file.

    +
  • +
  • Ifname - s - (read)

    Name of network interface controlled by the interface, e.g., wlan0.

    @@ -390,6 +405,16 @@ fi.w1.wpa_supplicant1.CreateInterface.

    Networks - ao - (read)

    List of D-Bus objects paths representing configured networks.

  • + +
  • +

    FastReauth - b - (read/write)

    +

    Identical to fast_reauth entry in %wpa_supplicant configuration file.

    +
  • + +
  • +

    ScanInterval - i - (read/write)

    +

    Time (in seconds) between scans for a suitable AP. Must be >= 0.

    +
  • \subsection dbus_interface_signals Signals diff --git a/wpa_supplicant/ctrl_iface.c b/wpa_supplicant/ctrl_iface.c index 270bf8c9e..b2939a713 100644 --- a/wpa_supplicant/ctrl_iface.c +++ b/wpa_supplicant/ctrl_iface.c @@ -2581,10 +2581,7 @@ static int wpa_supplicant_ctrl_iface_scan_interval( struct wpa_supplicant *wpa_s, char *cmd) { int scan_int = atoi(cmd); - if (scan_int < 0) - return -1; - wpa_s->scan_interval = scan_int; - return 0; + return wpa_supplicant_set_scan_interval(wpa_s, scan_int); } diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c index 138b76f31..5f9489754 100644 --- a/wpa_supplicant/dbus/dbus_new.c +++ b/wpa_supplicant/dbus/dbus_new.c @@ -2559,6 +2559,10 @@ static const struct wpa_dbus_property_desc wpas_dbus_interface_properties[] = { wpas_dbus_getter_fast_reauth, wpas_dbus_setter_fast_reauth }, + { "ScanInterval", WPAS_DBUS_NEW_IFACE_INTERFACE, "i", + wpas_dbus_getter_scan_interval, + wpas_dbus_setter_scan_interval + }, #ifdef CONFIG_WPS { "ProcessCredentials", WPAS_DBUS_NEW_IFACE_WPS, "b", wpas_dbus_getter_process_credentials, diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c index c950e20fb..b5d02d1f4 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.c +++ b/wpa_supplicant/dbus/dbus_new_handlers.c @@ -2461,6 +2461,56 @@ dbus_bool_t wpas_dbus_setter_country(DBusMessageIter *iter, DBusError *error, } +/** + * wpas_dbus_getter_scan_interval - Get scan interval + * @iter: Pointer to incoming dbus message iter + * @error: Location to store error on failure + * @user_data: Function specific data + * Returns: TRUE on success, FALSE on failure + * + * Getter function for "ScanInterval" property. + */ +dbus_bool_t wpas_dbus_getter_scan_interval(DBusMessageIter *iter, + DBusError *error, + void *user_data) +{ + struct wpa_supplicant *wpa_s = user_data; + dbus_int32_t scan_interval = wpa_s->scan_interval; + + return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_INT32, + &scan_interval, error); +} + + +/** + * wpas_dbus_setter_scan_interval - Control scan interval + * @iter: Pointer to incoming dbus message iter + * @error: Location to store error on failure + * @user_data: Function specific data + * Returns: TRUE on success, FALSE on failure + * + * Setter function for "ScanInterval" property. + */ +dbus_bool_t wpas_dbus_setter_scan_interval(DBusMessageIter *iter, + DBusError *error, + void *user_data) +{ + struct wpa_supplicant *wpa_s = user_data; + dbus_int32_t scan_interval; + + if (!wpas_dbus_simple_property_setter(iter, error, DBUS_TYPE_INT32, + &scan_interval)) + return FALSE; + + if (wpa_supplicant_set_scan_interval(wpa_s, scan_interval)) { + dbus_set_error_const(error, DBUS_ERROR_FAILED, + "scan_interval must be >= 0"); + return FALSE; + } + return TRUE; +} + + /** * wpas_dbus_getter_ifname - Get interface name * @iter: Pointer to incoming dbus message iter diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h index b46658fc6..6383d9868 100644 --- a/wpa_supplicant/dbus/dbus_new_handlers.h +++ b/wpa_supplicant/dbus/dbus_new_handlers.h @@ -168,6 +168,14 @@ dbus_bool_t wpas_dbus_getter_country(DBusMessageIter *iter, DBusError *error, dbus_bool_t wpas_dbus_setter_country(DBusMessageIter *iter, DBusError *error, void *user_data); +dbus_bool_t wpas_dbus_getter_scan_interval(DBusMessageIter *iter, + DBusError *error, + void *user_data); + +dbus_bool_t wpas_dbus_setter_scan_interval(DBusMessageIter *iter, + DBusError *error, + void *user_data); + dbus_bool_t wpas_dbus_getter_ifname(DBusMessageIter *iter, DBusError *error, void *user_data); diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c index e9c42d315..c5a71151b 100644 --- a/wpa_supplicant/wpa_supplicant.c +++ b/wpa_supplicant/wpa_supplicant.c @@ -1782,6 +1782,29 @@ int wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s, } +/** + * wpa_supplicant_set_scan_interval - Set scan interval + * @wpa_s: wpa_supplicant structure for a network interface + * @scan_interval: scan interval in seconds + * Returns: 0 if succeed or -1 if scan_interval has an invalid value + * + */ +int wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s, + int scan_interval) +{ + if (scan_interval < 0) { + wpa_msg(wpa_s, MSG_ERROR, "Invalid scan interval %d", + scan_interval); + return -1; + } + wpa_msg(wpa_s, MSG_DEBUG, "Setting scan interval: %d sec", + scan_interval); + wpa_s->scan_interval = scan_interval; + + return 0; +} + + /** * wpa_supplicant_set_debug_params - Set global debug params * @global: wpa_global structure diff --git a/wpa_supplicant/wpa_supplicant_i.h b/wpa_supplicant/wpa_supplicant_i.h index e2e0aed8a..d31538f40 100644 --- a/wpa_supplicant/wpa_supplicant_i.h +++ b/wpa_supplicant/wpa_supplicant_i.h @@ -588,6 +588,8 @@ int wpa_supplicant_set_bss_expiration_age(struct wpa_supplicant *wpa_s, unsigned int expire_age); int wpa_supplicant_set_bss_expiration_count(struct wpa_supplicant *wpa_s, unsigned int expire_count); +int wpa_supplicant_set_scan_interval(struct wpa_supplicant *wpa_s, + int scan_interval); int wpa_supplicant_set_debug_params(struct wpa_global *global, int debug_level, int debug_timestamp, int debug_show_keys); -- 2.39.2