Implement getUsdCapabilities, cancelUsdPublish, and
cancelUsdSubscribe in the mainline supplicant.
These are the simplest to implement, so they
serve as a good test case for whether the
USD dependencies are imported correctly.
Note that the implementation is copied
directly from the existing version in
the vendor supplicant.
Bug: 365585450
Test: m
Change-Id: Ib9d5173a1dd63d5ccd837b43c82acfa04f50a75d
diff --git a/wpa_supplicant/Android.bp b/wpa_supplicant/Android.bp
index 380fe47..a29093f 100644
--- a/wpa_supplicant/Android.bp
+++ b/wpa_supplicant/Android.bp
@@ -1427,6 +1427,7 @@
"wpa_supplicant_mainline_srcs_default",
"wpa_supplicant_includes_default",
"wpa_supplicant_mainline_cflags_default",
+ "wpa_supplicant_usd_defaults",
],
apex_available: [
"//apex_available:platform",
@@ -1465,6 +1466,7 @@
"wpa_supplicant_includes_default",
"wpa_supplicant_mainline_cflags_default",
"wpa_supplicant_mainline_srcs_default",
+ "wpa_supplicant_usd_defaults",
],
shared_libs: [
"android.system.wifi.mainline_supplicant-ndk",
diff --git a/wpa_supplicant/aidl/mainline/sta_iface.cpp b/wpa_supplicant/aidl/mainline/sta_iface.cpp
index 6104033..4a858cb 100644
--- a/wpa_supplicant/aidl/mainline/sta_iface.cpp
+++ b/wpa_supplicant/aidl/mainline/sta_iface.cpp
@@ -7,16 +7,37 @@
*/
#include "sta_iface.h"
+#include "usd_utils.h"
+
+extern "C"
+{
+#include "utils/common.h"
+#include "nan_usd.h"
+#include "wpa_supplicant_i.h"
+}
StaIface::StaIface(struct wpa_global* wpa_global, std::string iface_name)
: wpa_global_(wpa_global), iface_name_(iface_name) {}
+struct wpa_supplicant* StaIface::retrieveIfacePtr() {
+ return wpa_supplicant_get_iface(wpa_global_, iface_name_.c_str());
+}
+
::ndk::ScopedAStatus StaIface::registerCallback(
const std::shared_ptr<IStaInterfaceCallback>& in_callback) {
return ndk::ScopedAStatus::ok();
}
::ndk::ScopedAStatus StaIface::getUsdCapabilities(UsdCapabilities* _aidl_return) {
+ UsdCapabilities capabilities;
+ capabilities.isUsdPublisherSupported = kIsUsdPublisherSupported;
+ capabilities.isUsdSubscriberSupported = kIsUsdSubscriberSupported;
+ capabilities.maxLocalSsiLengthBytes = kMaxUsdLocalSsiLengthBytes;
+ capabilities.maxServiceNameLengthBytes = kMaxUsdServiceNameLengthBytes;
+ capabilities.maxMatchFilterLengthBytes = kMaxUsdMatchFilterLengthBytes;
+ capabilities.maxNumPublishSessions = kMaxNumUsdPublishSessions;
+ capabilities.maxNumSubscribeSessions = kMaxNumUsdSubscribeSessions;
+ *_aidl_return = capabilities;
return ndk::ScopedAStatus::ok();
}
@@ -35,11 +56,15 @@
return ndk::ScopedAStatus::ok();
}
-::ndk::ScopedAStatus StaIface::cancelUsdPublish(int32_t in_publishId) {
+::ndk::ScopedAStatus StaIface::cancelUsdPublish(int32_t publishId) {
+ // Status code is returned by the callback
+ wpas_nan_usd_cancel_publish(retrieveIfacePtr(), publishId);
return ndk::ScopedAStatus::ok();
}
-::ndk::ScopedAStatus StaIface::cancelUsdSubscribe(int32_t in_subscribeId) {
+::ndk::ScopedAStatus StaIface::cancelUsdSubscribe(int32_t subscribeId) {
+ // Status code is returned by the callback
+ wpas_nan_usd_cancel_subscribe(retrieveIfacePtr(), subscribeId);
return ndk::ScopedAStatus::ok();
}
diff --git a/wpa_supplicant/aidl/mainline/sta_iface.h b/wpa_supplicant/aidl/mainline/sta_iface.h
index 213eacf..8f9b665 100644
--- a/wpa_supplicant/aidl/mainline/sta_iface.h
+++ b/wpa_supplicant/aidl/mainline/sta_iface.h
@@ -35,6 +35,8 @@
private:
wpa_global* wpa_global_;
std::string iface_name_;
+
+ struct wpa_supplicant* retrieveIfacePtr();
};
#endif // MAINLINE_SUPPLICANT_STA_IFACE_H
diff --git a/wpa_supplicant/aidl/mainline/usd_utils.h b/wpa_supplicant/aidl/mainline/usd_utils.h
new file mode 100644
index 0000000..ee92da8
--- /dev/null
+++ b/wpa_supplicant/aidl/mainline/usd_utils.h
@@ -0,0 +1,28 @@
+/*
+ * WPA Supplicant - Helper functions for USD
+ * Copyright (c) 2025, Google Inc. All rights reserved.
+ *
+ * This software may be distributed under the terms of the BSD license.
+ * See README for more details.
+ */
+
+#ifndef MAINLINE_SUPPLICANT_USD_UTILS_H
+#define MAINLINE_SUPPLICANT_USD_UTILS_H
+
+extern "C"
+{
+#include "utils/common.h"
+#include "src/common/nan_de.h"
+}
+
+constexpr bool kIsUsdPublisherSupported = true;
+constexpr bool kIsUsdSubscriberSupported = true;
+constexpr int32_t kMaxUsdLocalSsiLengthBytes = 1400;
+constexpr int32_t kMaxUsdServiceNameLengthBytes = 255;
+constexpr int32_t kMaxUsdMatchFilterLengthBytes = 0;
+constexpr int32_t kMaxNumUsdPublishSessions = NAN_DE_MAX_SERVICE;
+constexpr int32_t kMaxNumUsdSubscribeSessions = NAN_DE_MAX_SERVICE;
+
+// TODO: Add helper functions here
+
+#endif // MAINLINE_SUPPLICANT_USD_UTILS_H