dbus: add BSS Age property to indicate last-seen time
"Age" is the age in seconds since the BSS was last seen, and is emitted as a PropertyChanged signal whenever the BSS is updated from a scan result. It also returns the correct age when queried directly. This property can be used to resolve issues where, if no other properties of the BSS changed from scan results (for example, if the BSS always had 100% signal) no D-Bus signals would be emitted to indicate that the BSS had just been seen in the scan. Signed-hostap: Dan Williams <dcbw@redhat.com>
This commit is contained in:
parent
5c61d214ad
commit
3bd3257a0a
7 changed files with 49 additions and 0 deletions
|
@ -489,6 +489,8 @@ static void notify_bss_changes(struct wpa_supplicant *wpa_s, u32 changes,
|
|||
|
||||
if (changes & WPA_BSS_RATES_CHANGED_FLAG)
|
||||
wpas_notify_bss_rates_changed(wpa_s, bss->id);
|
||||
|
||||
wpas_notify_bss_seen(wpa_s, bss->id);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1960,6 +1960,9 @@ void wpas_dbus_bss_signal_prop_changed(struct wpa_supplicant *wpa_s,
|
|||
case WPAS_DBUS_BSS_PROP_IES:
|
||||
prop = "IEs";
|
||||
break;
|
||||
case WPAS_DBUS_BSS_PROP_AGE:
|
||||
prop = "Age";
|
||||
break;
|
||||
default:
|
||||
wpa_printf(MSG_ERROR, "dbus: %s: Unknown Property value %d",
|
||||
__func__, property);
|
||||
|
@ -2384,6 +2387,10 @@ static const struct wpa_dbus_property_desc wpas_dbus_bss_properties[] = {
|
|||
wpas_dbus_getter_bss_ies,
|
||||
NULL
|
||||
},
|
||||
{ "Age", WPAS_DBUS_NEW_IFACE_BSS, "u",
|
||||
wpas_dbus_getter_bss_age,
|
||||
NULL
|
||||
},
|
||||
{ NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
|
|
@ -41,6 +41,7 @@ enum wpas_dbus_bss_prop {
|
|||
WPAS_DBUS_BSS_PROP_RSN,
|
||||
WPAS_DBUS_BSS_PROP_WPS,
|
||||
WPAS_DBUS_BSS_PROP_IES,
|
||||
WPAS_DBUS_BSS_PROP_AGE,
|
||||
};
|
||||
|
||||
#define WPAS_DBUS_OBJECT_PATH_MAX 150
|
||||
|
|
|
@ -3954,6 +3954,35 @@ dbus_bool_t wpas_dbus_getter_bss_ies(DBusMessageIter *iter, DBusError *error,
|
|||
}
|
||||
|
||||
|
||||
/**
|
||||
* wpas_dbus_getter_bss_age - Return time in seconds since BSS was last seen
|
||||
* @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 for BSS age
|
||||
*/
|
||||
dbus_bool_t wpas_dbus_getter_bss_age(DBusMessageIter *iter, DBusError *error,
|
||||
void *user_data)
|
||||
{
|
||||
struct bss_handler_args *args = user_data;
|
||||
struct wpa_bss *res;
|
||||
struct os_reltime now, diff = { 0, 0 };
|
||||
u32 age;
|
||||
|
||||
res = get_bss_helper(args, error, __func__);
|
||||
if (!res)
|
||||
return FALSE;
|
||||
|
||||
os_get_reltime(&now);
|
||||
os_reltime_sub(&now, &res->last_update, &diff);
|
||||
age = diff.sec > 0 ? diff.sec : 0;
|
||||
return wpas_dbus_simple_property_getter(iter, DBUS_TYPE_UINT32, &age,
|
||||
error);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* wpas_dbus_getter_enabled - Check whether network is enabled or disabled
|
||||
* @iter: Pointer to incoming dbus message iter
|
||||
|
|
|
@ -268,6 +268,9 @@ dbus_bool_t wpas_dbus_getter_bss_wps(DBusMessageIter *iter, DBusError *error,
|
|||
dbus_bool_t wpas_dbus_getter_bss_ies(DBusMessageIter *iter, DBusError *error,
|
||||
void *user_data);
|
||||
|
||||
dbus_bool_t wpas_dbus_getter_bss_age(DBusMessageIter *iter, DBusError *error,
|
||||
void *user_data);
|
||||
|
||||
dbus_bool_t wpas_dbus_getter_enabled(DBusMessageIter *iter, DBusError *error,
|
||||
void *user_data);
|
||||
|
||||
|
|
|
@ -345,6 +345,12 @@ void wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s,
|
|||
}
|
||||
|
||||
|
||||
void wpas_notify_bss_seen(struct wpa_supplicant *wpa_s, unsigned int id)
|
||||
{
|
||||
wpas_dbus_bss_signal_prop_changed(wpa_s, WPAS_DBUS_BSS_PROP_AGE, id);
|
||||
}
|
||||
|
||||
|
||||
void wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name)
|
||||
{
|
||||
wpas_dbus_signal_blob_added(wpa_s, name);
|
||||
|
|
|
@ -71,6 +71,7 @@ void wpas_notify_bss_ies_changed(struct wpa_supplicant *wpa_s,
|
|||
unsigned int id);
|
||||
void wpas_notify_bss_rates_changed(struct wpa_supplicant *wpa_s,
|
||||
unsigned int id);
|
||||
void wpas_notify_bss_seen(struct wpa_supplicant *wpa_s, unsigned int id);
|
||||
void wpas_notify_blob_added(struct wpa_supplicant *wpa_s, const char *name);
|
||||
void wpas_notify_blob_removed(struct wpa_supplicant *wpa_s, const char *name);
|
||||
|
||||
|
|
Loading…
Reference in a new issue