diff --git a/CHANGELOG.md b/CHANGELOG.md
index 851e39f7..fe546edd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -14,6 +14,10 @@ All notable changes to this RDK Service will be documented in this file.
* Changes in CHANGELOG should be updated when commits are added to the main or release branches. There should be one CHANGELOG entry per JIRA Ticket. This is not enforced on sprint branches since there could be multiple changes for the same JIRA ticket during development.
+## [3.7.0] - 2026-08-21
+### Changed
+- Implemented a caching logic about the status of the interface & update based on events
+
## [3.6.0] - 2026-08-11
### Fixed
- Fixed the issue with connecting to a SSID that is not present in scan list
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 724fb37e..f02326d7 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -37,7 +37,7 @@ endif()
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
set(VERSION_MAJOR 3)
-set(VERSION_MINOR 6)
+set(VERSION_MINOR 7)
set(VERSION_PATCH 0)
add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR})
diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json
index 2922b983..014a649f 100644
--- a/definition/NetworkManager.json
+++ b/definition/NetworkManager.json
@@ -8,7 +8,7 @@
"status": "production",
"description": "A Unified `NetworkManager` plugin that allows you to manage Ethernet and Wifi interfaces on the device.",
"sourcelocation": "https://github.com/rdkcentral/networkmanager/blob/main/definition/NetworkManager.json",
- "version": "3.6.0"
+ "version": "3.7.0"
},
"definitions": {
"success": {
diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md
index fd6d97dc..74341a26 100644
--- a/docs/NetworkManagerPlugin.md
+++ b/docs/NetworkManagerPlugin.md
@@ -2,7 +2,7 @@
# NetworkManager Plugin
-**Version: 3.6.0**
+**Version: 3.7.0**
**Status: :black_circle::black_circle::black_circle:**
@@ -23,7 +23,7 @@ org.rdk.NetworkManager interface for Thunder framework.
## Scope
-This document describes purpose and functionality of the org.rdk.NetworkManager interface (version 3.6.0). It includes detailed specification about its methods provided and notifications sent.
+This document describes purpose and functionality of the org.rdk.NetworkManager interface (version 3.7.0). It includes detailed specification about its methods provided and notifications sent.
## Case Sensitivity
diff --git a/plugin/NetworkManagerJsonRpc.cpp b/plugin/NetworkManagerJsonRpc.cpp
index d49e6c5d..053ba8f7 100644
--- a/plugin/NetworkManagerJsonRpc.cpp
+++ b/plugin/NetworkManagerJsonRpc.cpp
@@ -21,6 +21,8 @@
#include "INetworkManager.h"
#include "NetworkManagerJsonEnum.h"
+#include
+
#define LOG_INPARAM() { string json; parameters.ToString(json); NMLOG_INFO("params=%s", json.c_str() ); }
#define LOG_OUTPARAM() { string json; response.ToString(json); NMLOG_INFO("response=%s", json.c_str() ); }
@@ -164,11 +166,19 @@ namespace WPEFramework
Exchange::INetworkManager::IInterfaceDetailsIterator* _interfaces{};
+ const auto tStart = std::chrono::steady_clock::now();
+
if (_networkManager)
rc = _networkManager->GetAvailableInterfaces(_interfaces);
else
rc = Core::ERROR_UNAVAILABLE;
+ const auto tAfterComRpc = std::chrono::steady_clock::now();
+ const long long comRpcUs = static_cast(std::chrono::duration_cast(tAfterComRpc - tStart).count());
+ NMLOG_DEBUG("[PERF] GetAvailableInterfaces COM-RPC call took %lld us", comRpcUs);
+ if (comRpcUs >= 1000000)
+ NMLOG_WARNING("[PERF] GetAvailableInterfaces COM-RPC call took %lld us (>= 1s)", comRpcUs);
+
if (Core::ERROR_NONE == rc)
{
if (_interfaces != nullptr)
@@ -193,6 +203,11 @@ namespace WPEFramework
}
}
+ const auto tEnd = std::chrono::steady_clock::now();
+ NMLOG_DEBUG("[PERF] GetAvailableInterfaces iterator drain+serialize took %lld us, total %lld us",
+ static_cast(std::chrono::duration_cast(tEnd - tAfterComRpc).count()),
+ static_cast(std::chrono::duration_cast(tEnd - tStart).count()));
+
returnJson(rc);
}
@@ -241,6 +256,8 @@ namespace WPEFramework
LOG_INPARAM();
uint32_t rc = Core::ERROR_GENERAL;
+ const auto tStart = std::chrono::steady_clock::now();
+
if (parameters.HasLabel("interface"))
{
const string interface = parameters["interface"].String();
@@ -259,6 +276,11 @@ namespace WPEFramework
else
rc = Core::ERROR_BAD_REQUEST;
+ const long long comRpcUs = static_cast(std::chrono::duration_cast(std::chrono::steady_clock::now() - tStart).count());
+ NMLOG_DEBUG("[PERF] GetInterfaceState COM-RPC call took %lld us", comRpcUs);
+ if (comRpcUs >= 1000000)
+ NMLOG_WARNING("[PERF] GetInterfaceState COM-RPC call took %lld us (>= 1s)", comRpcUs);
+
returnJson(rc);
}
diff --git a/plugin/NetworkManagerLogger.cpp b/plugin/NetworkManagerLogger.cpp
index 6a58a1fe..99aa51bd 100644
--- a/plugin/NetworkManagerLogger.cpp
+++ b/plugin/NetworkManagerLogger.cpp
@@ -84,6 +84,15 @@ namespace NetworkManagerLogger {
void logPrint(LogLevel level, const char* file, const char* func, int line, const char* format, ...)
{
+ // Gate on level before formatting so disabled logs incur no vsnprintf cost.
+#ifdef USE_RDK_LOGGER
+ if (!rdk_logger_is_logLevel_enabled(RDKLOGGER_MODULE_NAME, mapTordkLogLevel(level)))
+ return;
+#else
+ if (gDefaultLogLevel < level)
+ return;
+#endif
+
size_t n = 0;
const short kFormatMessageSize = 1024;
char formattedLog[kFormatMessageSize] = {0};
@@ -102,16 +111,13 @@ namespace NetworkManagerLogger {
}
formattedLog[kFormatMessageSize - 1] = '\0';
#ifdef USE_RDK_LOGGER
- RDK_LOG(mapTordkLogLevel(level), RDKLOGGER_MODULE_NAME, "[%s +%d] %s\n", trimPath(file), line, formattedLog);
+ RDK_LOG(mapTordkLogLevel(level), RDKLOGGER_MODULE_NAME, "[%s +%d] %s : %s\n", trimPath(file), line, func, formattedLog);
#else
const char* levelMap[] = {"Fatal", "Error", "Warn", "Info", "Debug"};
struct timeval tv;
struct tm* lt;
const char* fileName = trimPath(file);
- if (gDefaultLogLevel < level)
- return;
-
gettimeofday(&tv, NULL);
lt = localtime(&tv.tv_sec);
diff --git a/plugin/gnome/NetworkManagerGnomeEvents.cpp b/plugin/gnome/NetworkManagerGnomeEvents.cpp
index 7a87cc20..35793d79 100644
--- a/plugin/gnome/NetworkManagerGnomeEvents.cpp
+++ b/plugin/gnome/NetworkManagerGnomeEvents.cpp
@@ -23,6 +23,7 @@
#include
#include
#include