[PATCH 2/2] dbus-signal for IBSS-RSN-CONNECTED

Dan Williams dcbw at redhat.com
Tue Jul 26 08:29:28 PDT 2016


On Tue, 2016-07-12 at 12:05 +0000, Avichal Agarwal wrote:
> From 8eb6908732c5e08c803bbffffab156af6acdcfa8 Mon Sep 17 00:00:00
> 2001
> From: Avichal Agarwal <avichal.a at samsung.com>
> Date: Tue, 12 Jul 2016 17:21:24 +0530
> Subject: [PATCH 2/2] dbus-signal for IBSS-RSN-CONNECTED
> 
> this patch will send a dbus signal IbssRsnConnected
> when two ibss-rsn peers will join each other successfully.
> this signal will send the address of peer type array of bytes.

Is this signal actually needed?  It seems redundant with the COMPLETED
state event signal which should also be emitted when joining an IBSS
network (regardless of whether it's RSN or not).  You also have the
CurrentBSS property, which should point to the correct peer in the scan
list from which you can get the peer address.

Yes, this is a short-cut.  But most likely you're already watching the
CurrentBSS property of the supplicant interface object, which will
point to the IBSS peer (and thus its address) long before COMPLETED
happens.  So when you get COMPLETED, grab the address from your local
cache of the scan list, indexed by CurrentBSS.

Dan

> Signed-off-by: Avichal Agarwal <avichal.a at samsung.com>
> ---
>  wpa_supplicant/dbus/dbus_new.c                     |   37 ++++++++
>  wpa_supplicant/dbus/dbus_new.h                     |    5 +-
>  wpa_supplicant/ibss_rsn.c                          |    3 +-
>  wpa_supplicant/notify.c                            |    6 ++
>  wpa_supplicant/notify.h                            |    3 +
>  5 files changed, 54 insertions(+), 2 deletions(-)
> 
> diff --git a/wpa_supplicant/dbus/dbus_new.c
> b/wpa_supplicant/dbus/dbus_new.c
> index 8fa03bb..1300ad5 100644
> --- a/wpa_supplicant/dbus/dbus_new.c
> +++ b/wpa_supplicant/dbus/dbus_new.c
> @@ -1954,6 +1954,35 @@ void
> wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant
> *wpa_s,
>  
>  #endif /* CONFIG_P2P */
>  
> +#ifdef CONFIG_IBSS_RSN
> 
> +void wpas_dbus_signal_ibss_rsn_connected(struct wpa_supplicant
> *wpa_s,
> 
> +                                const u8 *peer)
> 
> +{
> 
> +        struct wpas_dbus_priv *iface;
> 
> +        DBusMessage *msg;
> 
> +        DBusMessageIter iter,array_iter;
> 
> +        iface = wpa_s->global->dbus;
> 
> +        /* Do nothing if the control interface is not turned on */
> 
> +        if (iface == NULL)
> 
> +                return;
> 
> +        msg = dbus_message_new_signal(wpa_s->dbus_new_path,
> 
> +                                      WPAS_DBUS_NEW_IFACE_INTERFACE,
> 
> +                                      "IbssRsnConnected");
> 
> +        if (msg == NULL)
> 
> +                return;
> 
> +        dbus_message_iter_init_append(msg, &iter);
> 
> +	if(!dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
> 
> +                                              DBUS_TYPE_BYTE_AS_STRI
> NG,
> 
> +                                              &array_iter) ||
> 
> +            !dbus_message_iter_append_fixed_array(&array_iter,
> DBUS_TYPE_BYTE,
> 
> +                                                  &peer, 6) ||
> 
> +            !dbus_message_iter_close_container(&iter, &array_iter))
> 
> +		goto nomem;
> 
> +        dbus_connection_send(iface->con, msg, NULL);
> 
> +nomem:
> 
> +        dbus_message_unref(msg);
> 
> +}
> 
> +#endif /*CONFIG_IBSS_RSN*/
>  
>  /**
>   * wpas_dbus_signal_prop_changed - Signals change of property
> @@ -3548,6 +3577,14 @@ static const struct wpa_dbus_signal_desc
> wpas_dbus_interface_signals[] = {
>  		  END_ARGS
>  	  }
>  	},
> +#ifdef CONFIG_IBSS_RSN
> 
> +	{ "IbssRsnConnected",WPAS_DBUS_NEW_IFACE_INTERFACE,
> 
> +	  {
> 
> +		 { "peer","ay",ARG_OUT },
> 
> +		 END_ARGS
> 
> +	  }
> 
> +	},
> 
> +#endif
>  	{ NULL, NULL, { END_ARGS } }
>  };
>  
> diff --git a/wpa_supplicant/dbus/dbus_new.h
> b/wpa_supplicant/dbus/dbus_new.h
> index d64fcee..38f521d 100644
> --- a/wpa_supplicant/dbus/dbus_new.h
> +++ b/wpa_supplicant/dbus/dbus_new.h
> @@ -237,7 +237,10 @@ void
> wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant
> *wpa_s,
>  					      const u8 *sa, const u8
> *dev_addr,
>  					      const u8 *bssid, int
> id,
>  					      int op_freq);
> -
> +#ifdef CONFIG_IBSS_RSN
> 
> +void wpas_dbus_signal_ibss_rsn_connected(struct wpa_supplicant
> *wpa_s,
> 
> +                               const u8 *peer);
> 
> +#endif /*CONFIG_IBSS_RSN*/
>  #else /* CONFIG_CTRL_IFACE_DBUS_NEW */
>  
>  static inline int wpas_dbus_register_interface(struct wpa_supplicant
> *wpa_s)
> diff --git a/wpa_supplicant/ibss_rsn.c b/wpa_supplicant/ibss_rsn.c
> index c00db31..549995d 100644
> --- a/wpa_supplicant/ibss_rsn.c
> +++ b/wpa_supplicant/ibss_rsn.c
> @@ -19,7 +19,7 @@
>  #include "driver_i.h"
>  #include "common/ieee802_11_defs.h"
>  #include "ibss_rsn.h"
> -
> +#include "notify.h"
>  
>  static void ibss_rsn_auth_timeout(void *eloop_ctx, void
> *timeout_ctx);
>  
> @@ -133,6 +133,7 @@ static void ibss_check_rsn_completed(struct
> ibss_rsn_peer *peer)
>  	peer->authentication_status |= IBSS_RSN_REPORTED_PTK;
>  	wpa_msg(wpa_s, MSG_INFO, IBSS_RSN_COMPLETED MACSTR,
>  		MAC2STR(peer->addr));
> +	wpas_notify_ibssrsn_connected(wpa_s,peer->addr);
>  }
>  
> diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
> index 67e36ae..5cce236 100644
> --- a/wpa_supplicant/notify.c
> +++ b/wpa_supplicant/notify.c
> @@ -148,6 +148,12 @@ void wpas_notify_assoc_status_code(struct
> wpa_supplicant *wpa_s)
>  	wpas_dbus_signal_prop_changed(wpa_s,
> WPAS_DBUS_PROP_ASSOC_STATUS_CODE);
>  }
>  
> +#ifdef CONFIG_IBSS_RSN
> 
> +void wpas_notify_ibssrsn_connected(struct wpa_supplicant
> *wpa_s,const u8 *peer)
> 
> +{
> 
> +	wpas_dbus_signal_ibss_rsn_connected(wpa_s,peer);
> 
> +}
> 
> +#endif /*CONFIG_IBSS_RSN*/
>  
>  void wpas_notify_network_changed(struct wpa_supplicant *wpa_s)
>  {
> diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
> index 8cce0f3..d90c4f3 100644
> --- a/wpa_supplicant/notify.h
> +++ b/wpa_supplicant/notify.h
> @@ -141,5 +141,8 @@ void wpas_notify_network_type_changed(struct
> wpa_supplicant *wpa_s,
>  void wpas_notify_p2p_invitation_received(struct wpa_supplicant
> *wpa_s,
>  					 const u8 *sa, const u8
> *go_dev_addr,
>  					 const u8 *bssid, int id,
> int op_freq);
> +#ifdef CONFIG_IBSS_RSN
> 
> +void wpas_notify_ibssrsn_connected(struct wpa_supplicant *wpa_s,
> const u8 *peer);
> 
> +#endif /*CONFIG_IBSS_RSN*/
>  
>  #endif /* NOTIFY_H */



More information about the Hostap mailing list