Fwd: [PATCH] Adding some important wlan cotnrol events as dbus signals

Dan Williams dcbw at redhat.com
Mon Jun 1 09:27:14 EDT 2015


On Mon, 2015-06-01 at 12:05 +0000, Avichal Agarwal wrote:
> Subject: [PATCH] rectifyng the changes of previous patch ( Adding some
>  important wlan cotnrol events  as dbus signals)
> 
> 
> Signed-off-by: Avichal Agarwal <avichal.a at samsung.com>
> ---
>  wpa_supplicant/dbus/dbus_new.h  
> 
> diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
> index 2319db1..7a9d474 100644
> --- a/wpa_supplicant/dbus/dbus_new.h
> +++ b/wpa_supplicant/dbus/dbus_new.h
> @@ -230,6 +230,13 @@ void wpas_dbus_signal_sta_authorized(struct wpa_supplicant *wpa_s,
>  void wpas_dbus_signal_sta_deauthorized(struct wpa_supplicant *wpa_s,
>  				       const u8 *sta);
>  
> + void wpas_dbus_signal_wpa_connected(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_wpa_disconnected(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_assoc_reject(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_terminating(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_scan_started(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_scan_failed(struct wpa_supplicant *wpa_s);
> + void wpas_dbus_signal_wps_overlap(struct wpa_supplicant *wpa_s);
>  #else /* CONFIG_CTRL_IFACE_DBUS_NEW */
> 
> diff --git a/wpa_supplicant/main.c b/wpa_supplicant/main.c
> index d938b02..4dff512 100644
> --- a/wpa_supplicant/main.c
> +++ b/wpa_supplicant/main.c
> @@ -20,7 +20,7 @@
>  static void usage(void)
>  {
>  	int i;
> -	int p;
> +
>  	printf("%s\n\n%s\n"
>  	       "usage:\n"
>  	       "  wpa_supplicant [-BddhKLqq"
> -- 
> 1.7.9.5
> 
> 
> ------- Original Message -------
> Sender : Avichal Agarwal<avichal.a at samsung.com> Lead Engineer (2)/SRI-Delhi-Advanced SW Team/Samsung Electronics
> Date : Jun 01, 2015 11:51 (GMT+05:30)
> Title : [PATCH] Adding some important wlan cotnrol events as dbus signals
> 
> 
> From 51363ead405042ca466a418b4676086ec060de4c Mon Sep 17 00:00:00 2001
> 
> Following events are added as dbus signals , this patch will help application
> to make quick decisions based on events , as happens in wpa ctrl_socket
> based application. This make dbus interface fast.
> Now no more waithing for state change notifications.

If making things 'fast' is your goal, then instead of adding new events
lets talk about how to make 'state' changes faster.  Currently they are
queued and coalesced in wpas_dbus_signal_prop_changed(), so instead of
adding new/duplicate events I would test adding a "flush = TRUE" for the
"State" property and see if that fixes your speed issues.

But in general, the D-Bus interface is not supposed to be a direct
mirror of the control socket interface, especially with names.  The
D-Bus interface uses conventional D-Bus naming, which is StudlyCaps
format without "-" dividers.

> 1. WPA-CONNECTED
> 2. WPA-DISCONNECTED

These two are already communicated by the "state" property, and making
them "faster" (if slow is the problem) is worthwhile.

> 3. WPA-ASSOCREJECT

This one doesn't have a corresponding event yet, and would be useful.
However, I don't think having a "WPA-ASSOCREJECT" signal is the right
way to do it.  However, since the state property doesn't indicate a
reason, we've worked around this with the "DisconnectReason" property.
Perhaps we could add a "DisassociateReason" that includes the 802.11
status code instead.

> 4. WPA-TERMINATING

For D-Bus a TERMINATING event is not relevant, as supplicant termination
is indicated already by D-Bus and the NameOwnerChanged signal.

> 5. WPA-SCAN-STARTED
> 6. WPA-SCAN-RESULTS

SCAN-STARTED/RESULTS is already indicated by the 'scanning' property and
the ScanDone signal, and the various BSS signals (BSSAdded, BSSRemoved,
and the PropertiesChanged signal on existing BSSes) that are emitted
during the scan.  Scanning is also coalesced so perhaps we should just
"flush = TRUE" for it.

> 7. WPA-SCAN-FAILED

This is already indicated by the 'success' parameter to the ScanDone
signal.

> 8. WPS-EVENT-OVERLAP

This one needs an event still too, and we should figure out how to
expose it.

Dan

> Signed-off-by: Avichal Agarwal 
> ---
> 0001-added-variable-to-get-runtime-values.patch |   27 ++++
> wpa_supplicant/ap.c                             |    1 +
> wpa_supplicant/dbus/dbus_new.c                  |  194 +++++++++++++++++++++++
> wpa_supplicant/dbus/dbus_new.h                  |   32 ++++
> wpa_supplicant/events.c                         |    4 +
> wpa_supplicant/notify.c                         |   50 ++++++
> wpa_supplicant/notify.h                         |    7 +
> wpa_supplicant/scan.c                           |    3 +
> wpa_supplicant/wpa_supplicant.c                 |    5 +-
> 9 files changed, 322 insertions(+), 1 deletion(-)
> create mode 100644 0001-added-variable-to-get-runtime-values.patch
> 
> diff --git a/0001-added-variable-to-get-runtime-values.patch b/0001-added-variable-to-get-runtime-values.patch
> new file mode 100644
> index 0000000..90c4741
> --- /dev/null
> +++ b/0001-added-variable-to-get-runtime-values.patch
> @@ -0,0 +1,27 @@
> +From 5599cabefc5a66a5b467e4d577df6c1b02dd7999 Mon Sep 17 00:00:00 2001
> +From: samsung 
> +Date: Mon, 1 Jun 2015 09:10:04 +0530
> +Subject: [PATCH] added variable to get runtime values
> +
> +descriptoin goes here
> +
> +Signed-off-by: Avichal Agarwal 
> +---
> + wpa_supplicant/main.c |    1 +
> + 1 file changed, 1 insertion(+)
> +
> +diff --git a/wpa_supplicant/main.c b/wpa_supplicant/main.c
> +index 2282747..d938b02 100644
> +--- a/wpa_supplicant/main.c
> ++++ b/wpa_supplicant/main.c
> +@@ -20,6 +20,7 @@
> + static void usage(void)
> + {
> + int i;
> ++ int p;
> + printf("%s\n\n%s\n"
> +        "usage:\n"
> +        "  wpa_supplicant [-BddhKLqq"
> +-- 
> +1.7.9.5
> +
> diff --git a/wpa_supplicant/ap.c b/wpa_supplicant/ap.c
> index bfb69fc..faa7f92 100644
> --- a/wpa_supplicant/ap.c
> +++ b/wpa_supplicant/ap.c
> @@ -707,6 +707,7 @@ void wpa_supplicant_ap_deinit(struct wpa_supplicant *wpa_s)
> hostapd_interface_free(wpa_s->ap_iface);
> wpa_s->ap_iface = NULL;
> wpa_drv_deinit_ap(wpa_s);
> + wpas_notify_disconnected(wpa_s);
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_DISCONNECTED "bssid=" MACSTR
> " reason=%d locally_generated=1",
> MAC2STR(wpa_s->own_addr), WLAN_REASON_DEAUTH_LEAVING);
> diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
> index 6382d77..4e1b66f 100644
> --- a/wpa_supplicant/dbus/dbus_new.c
> +++ b/wpa_supplicant/dbus/dbus_new.c
> @@ -2965,6 +2965,48 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
>   END_ARGS
>   }
> },
> +
> + { "WPA-CONNECTED", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> +
> + { "WPA-DISCONNECTED", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> +
> +
> + { "WPA-ASSOCREJECT", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> +
> + { "WPA-TERMINATING", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> +
> + { "WPA-SCAN-STARTED", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> + { "WPA-SCAN-FAILED", WPAS_DBUS_NEW_IFACE_INTERFACE,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> { "BSSAdded", WPAS_DBUS_NEW_IFACE_INTERFACE,
>   {
>   { "path", "o", ARG_OUT },
> @@ -3037,6 +3079,12 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
>   END_ARGS
>   }
> },
> + { "WPS-EVENT-OVERLAP", WPAS_DBUS_NEW_IFACE_WPS,
> +   {
> +
> +   END_ARGS
> +   }
> + },
> #endif /* CONFIG_WPS */
> #ifdef CONFIG_P2P
> { "DeviceFound", WPAS_DBUS_NEW_IFACE_P2PDEVICE,
> @@ -3216,6 +3264,152 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
> };
> 
> 
> +
> +
> +void wpas_dbus_signal_wpa_connected(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-CONNECTED");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +void wpas_dbus_signal_wpa_disconnected(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-DISCONNECTED");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +void wpas_dbus_signal_assoc_reject(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-ASSOCREJECT");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +void wpas_dbus_signal_terminating(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-TERMINATING");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +
> +void wpas_dbus_signal_scan_started(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-SCAN-STARTED");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +void wpas_dbus_signal_scan_failed(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_INTERFACE,"WPA-SCAN-FAILED");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +
> +
> +void wpas_dbus_signal_wps_overlap(struct wpa_supplicant *wpa_s)
> +{
> + struct wpas_dbus_priv *iface;
> + DBusMessage *msg;
> +
> + iface = wpa_s->global->dbus;
> +
> + /* Do nothing if the control interface is not turned on */
> + if (iface == NULL || !wpa_s->dbus_new_path)
> + return;
> +
> + msg = dbus_message_new_signal(wpa_s->dbus_new_path, WPAS_DBUS_NEW_IFACE_WPS,"WPS-EVENT-OVERLAP");
> + if (msg == NULL)
> + return;
> +
> + dbus_connection_send(iface->con, msg, NULL);
> +
> + dbus_message_unref(msg);
> +}
> +
> +
> int wpas_dbus_register_interface(struct wpa_supplicant *wpa_s)
> {
> 
> diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
> index 31db8d4..2319db1 100644
> --- a/wpa_supplicant/dbus/dbus_new.h
> +++ b/wpa_supplicant/dbus/dbus_new.h
> @@ -271,11 +271,38 @@ static inline void wpas_dbus_signal_network_request(
> {
> }
> 
> +static inline void wpas_dbus_signal_wpa_connected(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +
> +static inline void wpas_dbus_signal_wpa_disconnected(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +static inline void wpas_dbus_signal_assoc_reject(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +static inline void wpas_dbus_signal_terminating(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +
> +
> static inline void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s,
>       int success)
> {
> }
> 
> +static inline void  wpas_dbus_signal_scan_started(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +static inline void wpas_dbus_signal_scan_failed(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> static inline void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s,
>      const struct wps_credential *cred)
> {
> @@ -286,6 +313,11 @@ static inline void wpas_dbus_signal_wps_event_m2d(struct wpa_supplicant *wpa_s,
> {
> }
> 
> +static inline void wpas_dbus_signal_wps_overlap(struct wpa_supplicant *wpa_s)
> +{
> +
> +}
> +
> static inline void wpas_dbus_signal_wps_event_fail(
> struct wpa_supplicant *wpa_s, struct wps_event_fail *fail)
> {
> diff --git a/wpa_supplicant/events.c b/wpa_supplicant/events.c
> index d086624..26153dc 100644
> --- a/wpa_supplicant/events.c
> +++ b/wpa_supplicant/events.c
> @@ -1177,6 +1177,7 @@ int wpa_supplicant_connect(struct wpa_supplicant *wpa_s,
>    struct wpa_ssid *ssid)
> {
> if (wpas_wps_scan_pbc_overlap(wpa_s, selected, ssid)) {
> + wpas_notify_wps_overlap(wpa_s);
> wpa_msg(wpa_s, MSG_INFO, WPS_EVENT_OVERLAP
> "PBC session overlap");
> #ifdef CONFIG_P2P
> @@ -2268,6 +2269,7 @@ static void wpa_supplicant_event_disassoc(struct wpa_supplicant *wpa_s,
> 
> if (!is_zero_ether_addr(bssid) ||
>     wpa_s->wpa_state >= WPA_AUTHENTICATING) {
> + wpas_notify_disconnected(wpa_s);
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_DISCONNECTED "bssid=" MACSTR
> " reason=%d%s",
> MAC2STR(bssid), reason_code,
> @@ -3218,6 +3220,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
> #ifndef CONFIG_NO_SCAN_PROCESSING
> case EVENT_SCAN_STARTED:
> os_get_reltime(&wpa_s->scan_start_time);
> + wpas_notify_scan_started(wpa_s);
> if (wpa_s->own_scan_requested) {
> struct os_reltime diff;
> 
> @@ -3294,6 +3297,7 @@ void wpa_supplicant_event(void *ctx, enum wpa_event_type event,
> break;
> #endif /* CONFIG_IBSS_RSN */
> case EVENT_ASSOC_REJECT:
> + wpas_notify_assoc_reject(wpa_s);
> if (data->assoc_reject.bssid)
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_ASSOC_REJECT
> "bssid=" MACSTR " status_code=%u",
> diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
> index 4df9d90..9d1d7f8 100644
> --- a/wpa_supplicant/notify.c
> +++ b/wpa_supplicant/notify.c
> @@ -206,6 +206,56 @@ void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
> wpas_dbus_signal_scan_done(wpa_s, success);
> }
> 
> +void wpas_notify_connected(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_wpa_connected(wpa_s);
> +}
> +
> +void wpas_notify_disconnected(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_wpa_disconnected(wpa_s);
> +}
> +
> +void wpas_notify_assoc_reject(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_assoc_reject(wpa_s);
> +}
> +
> +void wpas_notify_terminating(struct wpa_supplicant *wpa_s)
> +{
> + wpas_dbus_signal_terminating(wpa_s);
> +}
> +
> +void wpas_notify_scan_started(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_scan_started(wpa_s);
> +
> +}
> +
> +void wpas_notify_scan_failed(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_scan_failed(wpa_s);
> +
> +}
> +
> +
> +void wpas_notify_wps_overlap(struct wpa_supplicant *wpa_s)
> +{
> + if (wpa_s->p2p_mgmt)
> + return;
> + wpas_dbus_signal_wps_overlap(wpa_s);
> +
> +}
> 
> void wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
> {
> diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
> index 1025ca8..9a98660 100644
> --- a/wpa_supplicant/notify.h
> +++ b/wpa_supplicant/notify.h
> @@ -134,5 +134,12 @@ void wpas_notify_network_bssid_set_changed(struct wpa_supplicant *wpa_s,
>    struct wpa_ssid *ssid);
> void wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
>       struct wpa_ssid *ssid);
> +void wpas_notify_connected(struct wpa_supplicant *wpa_s);
> +void wpas_notify_disconnected(struct wpa_supplicant *wpa_s);
> +void wpas_notify_assoc_reject(struct wpa_supplicant *wpa_s);
> +void wpas_notify_terminating(struct wpa_supplicant *wpa_s);
> +void wpas_notify_scan_started(struct wpa_supplicant *wpa_s);
> +void wpas_notify_scan_failed(struct wpa_supplicant *wpa_s);
> +void wpas_notify_wps_overlap(struct wpa_supplicant *wpa_s);
> 
> #endif /* NOTIFY_H */
> diff --git a/wpa_supplicant/scan.c b/wpa_supplicant/scan.c
> index 3c6b2c7..9ad5302 100644
> --- a/wpa_supplicant/scan.c
> +++ b/wpa_supplicant/scan.c
> @@ -189,10 +189,13 @@ static void wpas_trigger_scan_cb(struct wpa_radio_work *work, int deinit)
> wpa_supplicant_notify_scanning(wpa_s, 0);
> wpas_notify_scan_done(wpa_s, 0);
> if (wpa_s->wpa_state == WPA_SCANNING)
> + {
> + wpas_notify_scan_failed(wpa_s);
> wpa_supplicant_set_state(wpa_s,
> wpa_s->scan_prev_wpa_state);
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_SCAN_FAILED "ret=%d%s",
> ret, retry ? " retry=1" : "");
> + }
> radio_work_done(work);
> 
> if (retry) {
> diff --git a/wpa_supplicant/wpa_supplicant.c b/wpa_supplicant/wpa_supplicant.c
> index 48bded6..abeced8 100644
> --- a/wpa_supplicant/wpa_supplicant.c
> +++ b/wpa_supplicant/wpa_supplicant.c
> @@ -723,6 +723,7 @@ void wpa_supplicant_set_state(struct wpa_supplicant *wpa_s,
> 
> if (state == WPA_COMPLETED && wpa_s->new_connection) {
> struct wpa_ssid *ssid = wpa_s->current_ssid;
> + wpas_notify_connected(wpa_s);
> #if defined(CONFIG_CTRL_IFACE) || !defined(CONFIG_NO_STDOUT_DEBUG)
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_CONNECTED "- Connection to "
> MACSTR " completed [id=%d id_str=%s]",
> @@ -4317,8 +4318,10 @@ static void wpa_supplicant_deinit_iface(struct wpa_supplicant *wpa_s,
> wpas_notify_iface_removed(wpa_s);
> 
> if (terminate)
> + {
> + wpas_notify_terminating(wpa_s);
> wpa_msg(wpa_s, MSG_INFO, WPA_EVENT_TERMINATING);
> -
> + }
> if (wpa_s->ctrl_iface) {
> wpa_supplicant_ctrl_iface_deinit(wpa_s->ctrl_iface);
> wpa_s->ctrl_iface = NULL;




More information about the HostAP mailing list