]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
dbus: Add MeshGroupStarted signal
authorSaurav Babu <saurav.babu@samsung.com>
Tue, 18 Jul 2017 07:07:51 +0000 (12:37 +0530)
committerJouni Malinen <j@w1.fi>
Sat, 9 Sep 2017 11:01:14 +0000 (14:01 +0300)
This introduces a new interface for mesh and adds a signal that
is similar to the control interface event MESH-GROUP-STARTED.

Signed-off-by: Saurav Babu <saurav.babu@samsung.com>
doc/dbus.doxygen
wpa_supplicant/dbus/dbus_new.c
wpa_supplicant/dbus/dbus_new.h
wpa_supplicant/notify.c
wpa_supplicant/notify.h
wpa_supplicant/wpa_supplicant.c

index a0e8fe43e1cb7b135196720e4130a8c9e2b489ab..ce588efd950605505b75bd163cbd8948d9317841 100644 (file)
@@ -16,6 +16,7 @@ Interfaces:
 - \ref dbus_peer
 - \ref dbus_group
 - \ref dbus_persistent_group
+- \ref dbus_mesh
 
 
 \section dbus_main fi.w1.wpa_supplicant1
@@ -2253,4 +2254,22 @@ Interface implemented by objects representing persistent P2P groups.
   </li>
 </ul>
 
+\section dbus_mesh fi.w1.wpa_supplicant1.Interface.Mesh
+
+Interface for performing mesh operations.
+
+\subsection dbus_mesh_signals Signals
+
+<ul>
+  <li>
+    <h3>MeshGroupStarted ( a{sv} : args )</h3>
+    <p></p>
+    <h4>Arguments</h4>
+    <dl>
+      <dt>a{sv} : args</dt>
+      <dd>A dictionary containing information of the started mesh group.</dd>
+    </dl>
+  </li>
+</ul>
+
 */
index 393cdd401a1a381140f0eb2333f03a144db0b89b..519908c7fd8fbd1dec968e559da1fdf5d38ac814 100644 (file)
@@ -793,6 +793,41 @@ nomem:
 
 #endif /* CONFIG_WPS */
 
+
+#ifdef CONFIG_MESH
+void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s,
+                                        struct wpa_ssid *ssid)
+{
+       struct wpas_dbus_priv *iface;
+       DBusMessage *msg;
+       DBusMessageIter iter, dict_iter;
+
+       iface = wpa_s->global->dbus;
+
+       /* Do nothing if the control interface is not turned on */
+       if (!iface || !wpa_s->dbus_new_path)
+               return;
+
+       msg = dbus_message_new_signal(wpa_s->dbus_new_path,
+                                     WPAS_DBUS_NEW_IFACE_MESH,
+                                     "MeshGroupStarted");
+       if (!msg)
+               return;
+
+       dbus_message_iter_init_append(msg, &iter);
+       if (!wpa_dbus_dict_open_write(&iter, &dict_iter) ||
+           !wpa_dbus_dict_append_byte_array(&dict_iter, "SSID",
+                                            (const char *) ssid->ssid,
+                                            ssid->ssid_len) ||
+           !wpa_dbus_dict_close_write(&iter, &dict_iter))
+               wpa_printf(MSG_ERROR, "dbus: Failed to construct signal");
+       else
+               dbus_connection_send(iface->con, msg, NULL);
+       dbus_message_unref(msg);
+}
+#endif /* CONFIG_MESH */
+
+
 void wpas_dbus_signal_certification(struct wpa_supplicant *wpa_s,
                                    int depth, const char *subject,
                                    const char *altsubject[],
@@ -3622,6 +3657,14 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
                  END_ARGS
          }
        },
+#ifdef CONFIG_MESH
+       { "MeshGroupStarted", WPAS_DBUS_NEW_IFACE_MESH,
+         {
+                 { "args", "a{sv}", ARG_OUT },
+                 END_ARGS
+         }
+       },
+#endif /* CONFIG_MESH */
        { NULL, NULL, { END_ARGS } }
 };
 
index bd0e07433a3df3c5e88a0aa90329696bc7a47bd4..84c0a08f292a71bc84b7d16e49adaab2a76386f4 100644 (file)
@@ -65,6 +65,8 @@ enum wpas_dbus_bss_prop {
 #define WPAS_DBUS_NEW_IFACE_P2PDEVICE  \
                WPAS_DBUS_NEW_IFACE_INTERFACE ".P2PDevice"
 
+#define WPAS_DBUS_NEW_IFACE_MESH WPAS_DBUS_NEW_IFACE_INTERFACE ".Mesh"
+
 /*
  * Groups correspond to P2P groups where this device is a GO (owner)
  */
@@ -239,6 +241,8 @@ 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);
+void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s,
+                                        struct wpa_ssid *ssid);
 
 #else /* CONFIG_CTRL_IFACE_DBUS_NEW */
 
@@ -554,6 +558,12 @@ void wpas_dbus_signal_p2p_invitation_received(struct wpa_supplicant *wpa_s,
 {
 }
 
+static inline
+void wpas_dbus_signal_mesh_group_started(struct wpa_supplicant *wpa_s,
+                                        struct wpa_ssid *ssid)
+{
+}
+
 #endif /* CONFIG_CTRL_IFACE_DBUS_NEW */
 
 #endif /* CTRL_IFACE_DBUS_H_NEW */
index f9c119aa0c71f8ff4863e9abe8fd7825476c7b0d..e617022dba86d4b95e763c025d45226e26b4f228 100644 (file)
@@ -850,3 +850,15 @@ void wpas_notify_network_type_changed(struct wpa_supplicant *wpa_s,
        }
 #endif /* CONFIG_P2P */
 }
+
+
+#ifdef CONFIG_MESH
+void wpas_notify_mesh_group_started(struct wpa_supplicant *wpa_s,
+                                   struct wpa_ssid *ssid)
+{
+       if (wpa_s->p2p_mgmt)
+               return;
+
+       wpas_dbus_signal_mesh_group_started(wpa_s, ssid);
+}
+#endif /* CONFIG_MESH */
index e4d7fbf254b7ed49c8e5a529f734724c457f2e1b..53b880f3c4fe814ebb7bed232e80067980c90d34 100644 (file)
@@ -141,5 +141,7 @@ 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);
+void wpas_notify_mesh_group_started(struct wpa_supplicant *wpa_s,
+                                   struct wpa_ssid *ssid);
 
 #endif /* NOTIFY_H */
index be447874710b56455e108e5a3be006cd8356e1be..c41093a45fbcc5e3425e0ca8e0a9314faa65335c 100644 (file)
@@ -1845,6 +1845,7 @@ void wpa_supplicant_associate(struct wpa_supplicant *wpa_s,
                wpa_msg(wpa_s, MSG_INFO, MESH_GROUP_STARTED "ssid=\"%s\" id=%d",
                        wpa_ssid_txt(ssid->ssid, ssid->ssid_len),
                        ssid->id);
+               wpas_notify_mesh_group_started(wpa_s, ssid);
 #else /* CONFIG_MESH */
                wpa_msg(wpa_s, MSG_ERROR,
                        "mesh mode support not included in the build");