[PATCH] Add the similar USD APIs to dbus control interface that other apps can use the functions

Chin-Ran Lo chin-ran.lo at nxp.com
Thu Jun 13 04:59:26 PDT 2024


>From 6d912819f83520cc3f7961bbd6435f4460687d58 Mon Sep 17 00:00:00 2001
From: "Lo,Chin-Ran" <chin-ran.lo at nxp.com>
Date: Thu, 13 Jun 2024 19:19:57 +0800
Subject: [PATCH] Add the similar USD APIs to dbus control interface that other
 apps can use the functions

Signed-off-by: Lo,Chin-Ran <chin-ran.lo at nxp.com>
---
 wpa_supplicant/dbus/dbus_new.c          | 132 +++++++++++
 wpa_supplicant/dbus/dbus_new.h          |  19 ++
 wpa_supplicant/dbus/dbus_new_handlers.c | 293 ++++++++++++++++++++++++
 wpa_supplicant/dbus/dbus_new_handlers.h |   9 +-
 wpa_supplicant/dbus/dbus_new_helpers.h  |  13 ++
 wpa_supplicant/nan_usd.c                |   6 +-
 wpa_supplicant/notify.c                 |  11 +
 wpa_supplicant/notify.h                 |   4 +
 8 files changed, 485 insertions(+), 2 deletions(-)

diff --git a/wpa_supplicant/dbus/dbus_new.c b/wpa_supplicant/dbus/dbus_new.c
index 00b38edf5..78c455562 100644
--- a/wpa_supplicant/dbus/dbus_new.c
+++ b/wpa_supplicant/dbus/dbus_new.c
@@ -220,6 +220,98 @@ void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, int success)
        dbus_message_unref(msg);
 }

+/**
+ * wpas_dbus_signal_discovery_result - send discovery result signal
+ * @wpa_s: %wpa_supplicant network interface data
+ * @success: indicates if scanning succeed or failed
+ *
+ * Notify listeners about finishing a scan
+ */
+void wpas_dbus_signal_discovery_result(struct wpa_supplicant *wpa_s, int success, int subscribe_id, int peer_publish_id, const u8 *peer_addr)
+{
+       struct wpas_dbus_priv *iface;
+       DBusMessage *msg;
+       DBusMessageIter iter, dict_iter;
+       dbus_bool_t succ;
+       struct wpa_dbus_discov_info disc_info;
+
+       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,
+                                     "DiscoveryResult");
+       if (msg == NULL)
+               return;
+
+       dbus_message_iter_init_append(msg, &iter);
+       succ = success ? TRUE : FALSE;
+       disc_info.subscribe_id = subscribe_id;
+       disc_info.peer_publish_id = peer_publish_id;
+       memcpy(disc_info.peer_addr, peer_addr, ETH_ALEN);
+
+       if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &succ) ||
+               !wpa_dbus_dict_open_write(&iter, &dict_iter) ||
+           !wpa_dbus_dict_append_byte_array(&dict_iter, "discov_info",
+                                            (const char *) &disc_info,
+                                            sizeof(disc_info)) ||
+           !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);
+}
+
+/**
+ * wpas_dbus_signal_nan_receive - send receive nan-usd packet signal
+ * @wpa_s: %wpa_supplicant network interface data
+ * @success: indicates if scanning succeed or failed
+ *
+ * Notify listeners about finishing a scan
+ */
+void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi)
+{
+       struct wpas_dbus_priv *iface;
+       DBusMessage *msg;
+       DBusMessageIter iter, dict_iter;
+       struct wpa_dbus_nanrx_info nanrx_info;
+
+       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,
+                                     "NanReceive");
+       if (msg == NULL)
+               return;
+
+       dbus_message_iter_init_append(msg, &iter);
+       nanrx_info.id = id;
+       nanrx_info.peer_id = peer_id;
+       memcpy(nanrx_info.peer_addr, peer_addr, ETH_ALEN);
+       nanrx_info.ssi_len = ssi_len;
+
+       if (!wpa_dbus_dict_open_write(&iter, &dict_iter) ||
+           !wpa_dbus_dict_append_byte_array(&dict_iter, "nanrx_info",
+                                            (const char *) &nanrx_info,
+                                            sizeof(nanrx_info)) ||
+               !wpa_dbus_dict_append_byte_array(&dict_iter, "ssi",
+                                            (const char *) ssi,
+                                            ssi_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);
+}
+
+

 /**
  * wpas_dbus_signal_bss - Send a BSS related event signal
@@ -3605,6 +3697,30 @@ static const struct wpa_dbus_method_desc wpas_dbus_interface_methods[] = {
          }
        },
 #endif /* CONFIG_AUTOSCAN */
+#ifdef CONFIG_NAN_USD
+       { "NANPublish", WPAS_DBUS_NEW_IFACE_INTERFACE,
+         (WPADBusMethodHandler) wpas_dbus_handler_nan_publish,
+         {
+                 { "nan_args", "s", ARG_IN },
+                 { "publish_id", "i", ARG_OUT },
+                 END_ARGS
+         }
+       },
+       { "NANSubscribe", WPAS_DBUS_NEW_IFACE_INTERFACE,
+         (WPADBusMethodHandler) wpas_dbus_handler_nan_subscribe,
+         {
+                 { "nan_args", "s", ARG_IN },
+                 END_ARGS
+         }
+       },
+       { "NANTransmit", WPAS_DBUS_NEW_IFACE_INTERFACE,
+         (WPADBusMethodHandler) wpas_dbus_handler_nan_transmit,
+         {
+                 { "nan_args", "s", ARG_IN },
+                 END_ARGS
+         }
+       },
+#endif /* CONFIG_NAN_USD */
 #ifdef CONFIG_TDLS
        { "TDLSDiscover", WPAS_DBUS_NEW_IFACE_INTERFACE,
          (WPADBusMethodHandler) wpas_dbus_handler_tdls_discover,
@@ -3983,6 +4099,22 @@ static const struct wpa_dbus_signal_desc wpas_dbus_interface_signals[] = {
                  END_ARGS
          }
        },
+#ifdef CONFIG_NAN_USD
+    { "DiscoveryResult", WPAS_DBUS_NEW_IFACE_INTERFACE,
+      {
+          { "success", "b", ARG_OUT },
+          { "discov_info", "a{sv}", ARG_OUT },
+          END_ARGS
+      }
+    },
+    { "NANReceive", WPAS_DBUS_NEW_IFACE_INTERFACE,
+      {
+          { "nanrx_info", "a{sv}", ARG_OUT },
+          { "ssi", "a{sv}", ARG_OUT },
+          END_ARGS
+      }
+    },
+#endif /* CONFIG_NAN_USD */
        { "BSSAdded", WPAS_DBUS_NEW_IFACE_INTERFACE,
          {
                  { "path", "o", ARG_OUT },
diff --git a/wpa_supplicant/dbus/dbus_new.h b/wpa_supplicant/dbus/dbus_new.h
index b653f10f9..d58ede9c1 100644
--- a/wpa_supplicant/dbus/dbus_new.h
+++ b/wpa_supplicant/dbus/dbus_new.h
@@ -21,6 +21,9 @@ struct wpa_bss;
 struct wps_event_m2d;
 struct wps_event_fail;
 struct wps_credential;
+#ifdef CONFIG_NAN_USD
+struct wpa_dbus_discov_info;
+#endif /* CONFIG_NAN_USD */

 enum wpas_dbus_prop {
        WPAS_DBUS_PROP_AP_SCAN,
@@ -168,6 +171,10 @@ void wpas_dbus_signal_network_request(struct wpa_supplicant *wpa_s,
                                      enum wpa_ctrl_req_type rtype,
                                      const char *default_text);
 void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s, int success);
+#ifdef CONFIG_NAN_USD
+void wpas_dbus_signal_discovery_result(struct wpa_supplicant *wpa_s, int success, int subscribe_id, int peer_publish_id, const u8 *peer_addr);
+void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s, int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi);
+#endif /* CONFIG_NAN_USD */
 void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s,
                               const struct wps_credential *cred);
 void wpas_dbus_signal_wps_event_m2d(struct wpa_supplicant *wpa_s,
@@ -328,6 +335,18 @@ static inline void wpas_dbus_signal_scan_done(struct wpa_supplicant *wpa_s,
 {
 }

+#ifdef CONFIG_NAN_USD
+static inline void wpas_dbus_signal_discovery_result(struct wpa_supplicant *wpa_s,
+                                             int success, int subscribe_id, int peer_publish_id, const u8 *peer_addr)
+{
+}
+
+static inline void wpas_dbus_signal_nan_receive(struct wpa_supplicant *wpa_s,
+                                             int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi)
+{
+}
+#endif /* CONFIG_NAN_USD */
+
 static inline void wpas_dbus_signal_wps_cred(struct wpa_supplicant *wpa_s,
                                             const struct wps_credential *cred)
 {
diff --git a/wpa_supplicant/dbus/dbus_new_handlers.c b/wpa_supplicant/dbus/dbus_new_handlers.c
index 6ad49a136..a0100602c 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.c
+++ b/wpa_supplicant/dbus/dbus_new_handlers.c
@@ -12,6 +12,9 @@

 #include "common.h"
 #include "common/ieee802_11_defs.h"
+#ifdef CONFIG_NAN_USD
+#include "common/nan_de.h"
+#endif /* CONFIG_NAN_USD */
 #include "eap_peer/eap_methods.h"
 #include "eapol_supp/eapol_supp_sm.h"
 #include "rsn_supp/wpa.h"
@@ -27,6 +30,9 @@
 #include "../autoscan.h"
 #include "../ap.h"
 #include "../interworking.h"
+#ifdef CONFIG_NAN_USD
+#include "../nan_usd.h"
+#endif /* CONFIG_NAN_USD */
 #include "dbus_new_helpers.h"
 #include "dbus_new.h"
 #include "dbus_new_handlers.h"
@@ -2705,6 +2711,293 @@ DBusMessage * wpas_dbus_handler_eap_logon(DBusMessage *message,
        return NULL;
 }

+#ifdef CONFIG_NAN_USD
+/*
+ * wpas_dbus_handler_nan_publish - Send out nan-publish packets
+ * @message: Pointer to incoming dbus message
+ * @wpa_s: wpa_supplicant structure for a network interface
+ * Returns: NULL indicating success or DBus error message on failure
+ *
+ * Handler function for "NANPublish" method call of network interface.
+ */
+DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s)
+{
+       const char *cmd;
+       char cmdbuf[128];
+
+       char *token, *context = NULL;
+       int publish_id;
+       struct nan_publish_params params;
+       const char *service_name = NULL;
+       struct wpabuf *ssi = NULL;
+       enum nan_service_protocol_type srv_proto_type = 3;
+       int *freq_list = NULL;
+
+       wpa_printf(MSG_INFO, "DBUS NAN_PUBLISH:");
+       if (!dbus_message_get_args(message, NULL,
+                                  DBUS_TYPE_STRING, &cmd,
+                                  DBUS_TYPE_INVALID)) {
+               wpa_printf(MSG_DEBUG, " DBUS NAN_PUBLISH, failed to get args ");
+               return NULL;
+       }
+       wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH: args: [%s]", cmd);
+
+       os_memset(&params, 0, sizeof(params));
+       /* USD shall use both solicited and unsolicited transmissions */
+       params.unsolicited = true;
+       params.solicited = true;
+       /* USD shall require FSD without GAS */
+       params.fsd = true;
+       params.freq = NAN_USD_DEFAULT_FREQ;
+       strcpy(cmdbuf, cmd);
+
+       while ((token = str_token(cmdbuf, " ", &context))) {
+               if (os_strncmp(token, "service_name=", 13) == 0) {
+                               service_name = token + 13;
+                       wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, service_name=[%s]", service_name);
+                       continue;
+               }
+
+               if (os_strncmp(token, "ttl=", 4) == 0) {
+                       params.ttl = atoi(token + 4);
+                       wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, ttl=[%d]", params.ttl);
+                       continue;
+               }
+
+               if (os_strncmp(token, "freq=", 5) == 0) {
+                       params.freq = atoi(token + 5);
+                       wpa_printf(MSG_DEBUG, "DBUS NAN_PUBLISH, freq=[%d]", params.ttl);
+                       continue;
+               }
+
+               if (os_strncmp(token, "freq_list=", 10) == 0) {
+                       char *pos = token + 10;
+                       if (os_strcmp(pos, "all") == 0) {
+                               os_free(freq_list);
+                               freq_list = wpas_nan_usd_all_freqs(wpa_s);
+                               params.freq_list = freq_list;
+                               continue;
+                       }
+
+                       while (pos && pos[0]) {
+                               int_array_add_unique(&freq_list, atoi(pos));
+                               pos = os_strchr(pos, ',');
+                               if (pos)
+                                       pos++;
+                       }
+
+                       params.freq_list = freq_list;
+                       continue;
+               }
+
+               if (os_strncmp(token, "srv_proto_type=", 15) == 0) {
+                       srv_proto_type = atoi(token + 15);
+                       wpa_printf(MSG_DEBUG, " DBUS NAN_PUBLISH, srv_proto_type=[%d]", srv_proto_type);
+                       continue;
+               }
+
+               if (os_strncmp(token, "ssi=", 4) == 0) {
+                       if (ssi)
+                               goto fail;
+                       ssi = wpabuf_parse_bin(token + 4);
+                       if (!ssi)
+                               goto fail;
+                       continue;
+               }
+
+               if (os_strcmp(token, "solicited=0") == 0) {
+                       params.solicited = false;
+                       continue;
+               }
+
+               if (os_strcmp(token, "unsolicited=0") == 0) {
+                       params.unsolicited = false;
+                       continue;
+               }
+
+               if (os_strcmp(token, "fsd=0") == 0) {
+                       params.fsd = false;
+                       continue;
+               }
+
+               wpa_printf(MSG_DEBUG, "CTRL: Invalid NAN_PUBLISH parameter: %s",
+                           token);
+               goto fail;
+       }
+       publish_id = wpas_nan_usd_publish(wpa_s, service_name, srv_proto_type,
+                                          ssi, &params);
+       if (publish_id > 0) {
+               DBusMessage *reply;
+               reply = dbus_message_new_method_return(message);
+               dbus_message_append_args(reply, DBUS_TYPE_INT32,
+                                &publish_id, DBUS_TYPE_INVALID);
+               return reply;
+       }
+fail:
+       wpabuf_free(ssi);
+       os_free(freq_list);
+       return NULL;
+}
+/*
+ * wpas_dbus_handler_nan_subscribe - Send out nan-subscribe packets
+ * @message: Pointer to incoming dbus message
+ * @wpa_s: wpa_supplicant structure for a network interface
+ * Returns: NULL indicating success or DBus error message on failure
+ *
+ * Handler function for "NANSubscribe" method call of network interface.
+ */
+DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s)
+{
+       const char *cmd;
+       char cmdbuf[128];
+       char *token, *context = NULL;
+       struct nan_subscribe_params params;
+       const char *service_name = NULL;
+       struct wpabuf *ssi = NULL;
+       enum nan_service_protocol_type srv_proto_type = 3;
+
+       wpa_printf(MSG_INFO, "DBUS NAN_SUBSCRIBE: ");
+       if (!dbus_message_get_args(message, NULL,
+                                   DBUS_TYPE_STRING, &cmd,
+                                   DBUS_TYPE_INVALID)) {
+               wpa_printf(MSG_DEBUG, "DBUS NAN_SUBSCRIBE, failed to get args ");
+               return NULL;
+       }
+       wpa_printf(MSG_DEBUG, "DBUS NAN_SUBSCRIBE, args: [%s]", cmd);
+       os_memset(&params, 0, sizeof(params));
+       params.freq = NAN_USD_DEFAULT_FREQ;
+
+       strcpy(cmdbuf, cmd);
+       while ((token = str_token(cmdbuf, " ", &context))) {
+               if (os_strncmp(token, "service_name=", 13) == 0) {
+                        service_name = token + 13;
+                       continue;
+               }
+
+               if (os_strcmp(token, "active=1") == 0) {
+                        params.active = true;
+                       continue;
+               }
+
+               if (os_strncmp(token, "ttl=", 4) == 0) {
+                        params.ttl = atoi(token + 4);
+                       continue;
+               }
+
+               if (os_strncmp(token, "freq=", 5) == 0) {
+                        params.freq = atoi(token + 5);
+                       continue;
+               }
+
+               if (os_strncmp(token, "srv_proto_type=", 15) == 0) {
+                        srv_proto_type = atoi(token + 15);
+                       continue;
+               }
+
+               if (os_strncmp(token, "ssi=", 4) == 0) {
+                       if (ssi)
+                               goto fail;
+                       ssi = wpabuf_parse_bin(token + 4);
+                       if (!ssi)
+                               goto fail;
+                       continue;
+               }
+               wpa_printf(MSG_INFO,
+                           "CTRL: Invalid NAN_SUBSCRIBE parameter: %s",
+                           token);
+               goto fail;
+       }
+
+       wpas_nan_usd_subscribe(wpa_s, service_name,
+                                              srv_proto_type, ssi,
+                                              &params);
+fail:
+       wpabuf_free(ssi);
+       return NULL;
+}
+
+/*
+ * wpas_dbus_handler_nan_transmit - Send out nan-followup packets
+ * @message: Pointer to incoming dbus message
+ * @wpa_s: wpa_supplicant structure for a network interface
+ * Returns: NULL indicating success or DBus error message on failure
+ *
+ * Handler function for "NANTransmit" method call of network interface.
+ */
+#define TX_CMD_DAT_BUFLEN              2048
+DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s)
+{
+       const char *cmd;
+       char cmdbuf[TX_CMD_DAT_BUFLEN];
+       char *token, *context = NULL;
+       int handle = 0;
+       int req_instance_id = 0;
+       struct wpabuf *ssi = NULL;
+       u8 peer_addr[ETH_ALEN];
+       int ret = -1;
+
+       wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT:");
+       os_memset(cmdbuf, 0, TX_CMD_DAT_BUFLEN);
+       if (!dbus_message_get_args(message, NULL,
+                                   DBUS_TYPE_STRING, &cmd,
+                                   DBUS_TYPE_INVALID)) {
+               wpa_printf(MSG_DEBUG, "DBUS NAN_TRANSMIT, failed to get args ");
+               return NULL;
+       }
+       wpa_printf(MSG_DEBUG, "DBUS NAN_TRANSMIT, args: [%s]", cmd);
+       os_memset(peer_addr, 0, ETH_ALEN);
+       strcpy(cmdbuf, cmd);
+       while ((token = str_token(cmdbuf, " ", &context))) {
+               if (sscanf(token, "handle=%i", &handle) == 1)
+                       continue;
+
+               if (sscanf(token, "req_instance_id=%i", &req_instance_id) == 1)
+                       continue;
+
+               if (os_strncmp(token, "address=", 8) == 0) {
+                       if (hwaddr_aton(token + 8, peer_addr) < 0)
+                               return NULL;
+                       continue;
+               }
+
+               if (os_strncmp(token, "ssi=", 4) == 0) {
+                       if (ssi)
+                               goto fail;
+                       ssi = wpabuf_parse_bin(token + 4);
+                       if (!ssi)
+                               goto fail;
+                       continue;
+               }
+
+               wpa_printf(MSG_INFO,
+                       "CTRL: Invalid NAN_TRANSMIT parameter: %s",
+                       token);
+               goto fail;
+       }
+
+       if (handle <= 0) {
+               wpa_printf(MSG_INFO,
+                       "CTRL: Invalid or missing NAN_TRANSMIT handle");
+               goto fail;
+       }
+
+       if (is_zero_ether_addr(peer_addr)) {
+               wpa_printf(MSG_INFO,
+                       "CTRL: Invalid or missing NAN_TRANSMIT address");
+               goto fail;
+       }
+
+       ret = wpas_nan_usd_transmit(wpa_s, handle, ssi, NULL, peer_addr,
+                                    req_instance_id);
+fail:
+       wpa_printf(MSG_INFO, "DBUS NAN_TRANSMIT Done, %d", ret);
+       wpabuf_free(ssi);
+       return NULL;
+}
+#endif /* CONFIG_NAN_USD */

 #ifdef CONFIG_TDLS

diff --git a/wpa_supplicant/dbus/dbus_new_handlers.h b/wpa_supplicant/dbus/dbus_new_handlers.h
index 97fa337bd..aef27ea38 100644
--- a/wpa_supplicant/dbus/dbus_new_handlers.h
+++ b/wpa_supplicant/dbus/dbus_new_handlers.h
@@ -248,7 +248,14 @@ DECLARE_ACCESSOR(wpas_dbus_getter_mesh_peers);
 DECLARE_ACCESSOR(wpas_dbus_getter_mesh_group);

 DECLARE_ACCESSOR(wpas_dbus_getter_signal_change);
-
+#ifdef CONFIG_NAN_USD
+DBusMessage * wpas_dbus_handler_nan_publish(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s);
+DBusMessage * wpas_dbus_handler_nan_subscribe(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s);
+DBusMessage * wpas_dbus_handler_nan_transmit(DBusMessage *message,
+                                              struct wpa_supplicant *wpa_s);
+#endif /* CONFIG_NAN_USD */
 DBusMessage * wpas_dbus_handler_tdls_discover(DBusMessage *message,
                                              struct wpa_supplicant *wpa_s);
 DBusMessage * wpas_dbus_handler_tdls_setup(DBusMessage *message,
diff --git a/wpa_supplicant/dbus/dbus_new_helpers.h b/wpa_supplicant/dbus/dbus_new_helpers.h
index c8d44a00b..87ef31000 100644
--- a/wpa_supplicant/dbus/dbus_new_helpers.h
+++ b/wpa_supplicant/dbus/dbus_new_helpers.h
@@ -98,7 +98,20 @@ struct wpa_dbus_property_desc {
        /* other data */
        const char *data;
 };
+#ifdef CONFIG_NAN_USD
+struct wpa_dbus_discov_info {
+       u32 subscribe_id;
+       u32 peer_publish_id;
+       u8 peer_addr[ETH_ALEN];
+};

+struct wpa_dbus_nanrx_info {
+       u32 id;
+       u32 peer_id;
+       u8 peer_addr[ETH_ALEN];
+       u32 ssi_len;
+};
+#endif /* CONFIG_NAN_USD */

 #define WPAS_DBUS_OBJECT_PATH_MAX 150
 #define WPAS_DBUS_INTERFACE_MAX 150
diff --git a/wpa_supplicant/nan_usd.c b/wpa_supplicant/nan_usd.c
index 657b302c1..04a564580 100644
--- a/wpa_supplicant/nan_usd.c
+++ b/wpa_supplicant/nan_usd.c
@@ -14,7 +14,7 @@
 #include "offchannel.h"
 #include "driver_i.h"
 #include "nan_usd.h"
-
+#include "notify.h"

 static const char *
 tx_status_result_txt(enum offchannel_send_action_result result)
@@ -254,6 +254,8 @@ wpas_nan_de_discovery_result(void *ctx, int subscribe_id,
                subscribe_id, peer_publish_id, MAC2STR(peer_addr),
                fsd, fsd_gas, srv_proto_type, ssi_hex);
        os_free(ssi_hex);
+
+       wpas_notify_discovery_result(wpa_s, 1, subscribe_id, peer_publish_id, peer_addr);
 }


@@ -331,6 +333,8 @@ static void wpas_nan_de_receive(void *ctx, int id, int peer_instance_id,
        wpa_msg(wpa_s, MSG_INFO, NAN_RECEIVE
                "id=%d peer_instance_id=%d address=" MACSTR " ssi=%s",
                id, peer_instance_id, MAC2STR(peer_addr), ssi_hex);
+
+       wpas_notify_nan_receive(wpa_s, id, peer_instance_id, peer_addr, ssi_len, ssi);
        os_free(ssi_hex);
 }

diff --git a/wpa_supplicant/notify.c b/wpa_supplicant/notify.c
index 745234dda..3d868f61c 100644
--- a/wpa_supplicant/notify.c
+++ b/wpa_supplicant/notify.c
@@ -281,6 +281,17 @@ void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success)
        wpas_dbus_signal_scan_done(wpa_s, success);
 }

+#ifdef CONFIG_NAN_USD
+void wpas_notify_discovery_result(struct wpa_supplicant *wpa_s, int success, int subscribe_id, int peer_publish_id, const u8 *peer_addr)
+{
+    wpas_dbus_signal_discovery_result(wpa_s, success, subscribe_id, peer_publish_id, peer_addr);
+}
+
+void wpas_notify_nan_receive(struct wpa_supplicant *wpa_s, int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi)
+{
+    wpas_dbus_signal_nan_receive(wpa_s, id, peer_id, peer_addr, ssi_len, ssi);
+}
+#endif /* CONFIG_NAN_USD */

 void wpas_notify_scan_results(struct wpa_supplicant *wpa_s)
 {
diff --git a/wpa_supplicant/notify.h b/wpa_supplicant/notify.h
index 2a0cf097a..105bf9dcd 100644
--- a/wpa_supplicant/notify.h
+++ b/wpa_supplicant/notify.h
@@ -47,6 +47,10 @@ void wpas_notify_network_request(struct wpa_supplicant *wpa_s,
                                 const char *default_txt);
 void wpas_notify_scanning(struct wpa_supplicant *wpa_s);
 void wpas_notify_scan_done(struct wpa_supplicant *wpa_s, int success);
+#ifdef CONFIG_NAN_USD
+void wpas_notify_discovery_result(struct wpa_supplicant *wpa_s, int success, int subscribe_id, int peer_publish_id, const u8 *peer_addr);
+void wpas_notify_nan_receive(struct wpa_supplicant *wpa_s, int id, int peer_id, const u8 *peer_addr, size_t ssi_len, const u8 *ssi);
+#endif /* CONFIG_NAN_USD */
 void wpas_notify_scan_results(struct wpa_supplicant *wpa_s);
 void wpas_notify_wps_credential(struct wpa_supplicant *wpa_s,
                                const struct wps_credential *cred);
--
2.34.1



More information about the Hostap mailing list