From ff69b162062669773bf26e33b30fb04cfb4623b3 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Thu, 3 Sep 2026 18:36:20 +0530 Subject: [PATCH 01/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/gnome/NetworkManagerGnomeProxy.cpp | 17 ++++----- plugin/rdk/NetworkManagerRDKProxy.cpp | 42 +++++++++++++++++++++-- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/plugin/gnome/NetworkManagerGnomeProxy.cpp b/plugin/gnome/NetworkManagerGnomeProxy.cpp index 7c877f5f..4fd0fccd 100644 --- a/plugin/gnome/NetworkManagerGnomeProxy.cpp +++ b/plugin/gnome/NetworkManagerGnomeProxy.cpp @@ -766,19 +766,14 @@ namespace WPEFramework std::list ssidList; if(wifi->getKnownSSIDs(ssidList)) { - if (!ssidList.empty()) - { - ssids = Core::Service::Create(ssidList); - if(ssids == nullptr) { - return Core::ERROR_GENERAL; - } - rc = Core::ERROR_NONE; - } - else - { + if (ssidList.empty()) NMLOG_INFO("known ssids not found !"); - rc = Core::ERROR_GENERAL; + + ssids = Core::Service::Create(ssidList); + if(ssids == nullptr) { + return Core::ERROR_GENERAL; } + rc = Core::ERROR_NONE; } return rc; diff --git a/plugin/rdk/NetworkManagerRDKProxy.cpp b/plugin/rdk/NetworkManagerRDKProxy.cpp index e8be4680..059d384a 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.cpp +++ b/plugin/rdk/NetworkManagerRDKProxy.cpp @@ -21,6 +21,7 @@ #include "NetworkManagerRDKProxy.h" #include "libIBus.h" #include +#include using namespace WPEFramework; using namespace WPEFramework::Plugin; @@ -35,6 +36,10 @@ namespace WPEFramework { NetworkManagerImplementation* _instance = nullptr; + /* SSIDs reported by the last scan; used when there is no connected SSID */ + static Core::CriticalSection gScannedSsidsLock; + static std::set gScannedSsids; + Exchange::INetworkManager::WiFiState to_wifi_state(WiFiStatusCode_t code) { switch (code) { @@ -261,6 +266,7 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); + std::set scannedSsids; for (int i = 0; i < ssids.Length(); i++) { @@ -272,7 +278,19 @@ namespace WPEFramework newObject["strength"] = object["signalStrength"]; newObject["frequency"] = object["frequency"]; ssidsUpdated.Add(newObject); + + string scannedSsid = object["ssid"].String(); + if (!scannedSsid.empty()) + scannedSsids.insert(scannedSsid); + } + + if (!scannedSsids.empty()) + { + gScannedSsidsLock.Lock(); + gScannedSsids = scannedSsids; + gScannedSsidsLock.Unlock(); } + ::_instance->ReportAvailableSSIDs(ssidsUpdated); break; } @@ -1040,14 +1058,34 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN+1] = { memset(¶m, 0, sizeof(param)); - /* Must add new method to get all the known SSIDs but for now RDK-NM supports only one active SSID. So we repurpose this method */ retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getConnectedSSID, (void *)¶m, sizeof(param)); if(retVal == IARM_RESULT_SUCCESS) { auto &connectedSsid = param.data.getConnectedSSID; std::list ssidList; - ssidList.push_back(string(connectedSsid.ssid)); + + if(connectedSsid.ssid[0] != '\0') + ssidList.push_back(string(connectedSsid.ssid)); + else + { + /* WiFi is disconnected; fall back to the SSIDs found by the last scan */ + gScannedSsidsLock.Lock(); + ssidList.assign(gScannedSsids.begin(), gScannedSsids.end()); + gScannedSsidsLock.Unlock(); + + if (ssidList.empty()) + { + IARM_Bus_WiFiSrvMgr_SsidList_Param_t scanParam{}; + memset(&scanParam, 0, sizeof(scanParam)); + + /* No scan result cached yet; trigger a scan so that the results are available subsequently */ + if (IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getAvailableSSIDsAsync, (void *)&scanParam, sizeof(IARM_Bus_WiFiSrvMgr_SsidList_Param_t))) + NMLOG_ERROR ("getAvailableSSIDsAsync failed"); + else + NMLOG_INFO ("known ssids not found; scan started"); + } + } NMLOG_INFO ("GetKnownSSIDs Success"); ssids = Core::Service::Create(ssidList); From 2fd3dd5c6d0eb2eae9419eb70f8b85c675aa4281 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Thu, 3 Sep 2026 21:30:04 +0530 Subject: [PATCH 02/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/rdk/NetworkManagerRDKProxy.cpp | 45 +++------------------------ plugin/rdk/NetworkManagerRDKProxy.h | 1 + 2 files changed, 5 insertions(+), 41 deletions(-) diff --git a/plugin/rdk/NetworkManagerRDKProxy.cpp b/plugin/rdk/NetworkManagerRDKProxy.cpp index 059d384a..f0732064 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.cpp +++ b/plugin/rdk/NetworkManagerRDKProxy.cpp @@ -21,7 +21,6 @@ #include "NetworkManagerRDKProxy.h" #include "libIBus.h" #include -#include using namespace WPEFramework; using namespace WPEFramework::Plugin; @@ -36,10 +35,6 @@ namespace WPEFramework { NetworkManagerImplementation* _instance = nullptr; - /* SSIDs reported by the last scan; used when there is no connected SSID */ - static Core::CriticalSection gScannedSsidsLock; - static std::set gScannedSsids; - Exchange::INetworkManager::WiFiState to_wifi_state(WiFiStatusCode_t code) { switch (code) { @@ -266,7 +261,6 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); - std::set scannedSsids; for (int i = 0; i < ssids.Length(); i++) { @@ -278,17 +272,6 @@ namespace WPEFramework newObject["strength"] = object["signalStrength"]; newObject["frequency"] = object["frequency"]; ssidsUpdated.Add(newObject); - - string scannedSsid = object["ssid"].String(); - if (!scannedSsid.empty()) - scannedSsids.insert(scannedSsid); - } - - if (!scannedSsids.empty()) - { - gScannedSsidsLock.Lock(); - gScannedSsids = scannedSsids; - gScannedSsidsLock.Unlock(); } ::_instance->ReportAvailableSSIDs(ssidsUpdated); @@ -1058,34 +1041,14 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN+1] = { memset(¶m, 0, sizeof(param)); - retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getConnectedSSID, (void *)¶m, sizeof(param)); + /* Must add new method to get all the known SSIDs but for now RDK-NM supports only one saved SSID. */ + retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getPairedSSID, (void *)¶m, sizeof(param)); if(retVal == IARM_RESULT_SUCCESS) { - auto &connectedSsid = param.data.getConnectedSSID; + auto &pairedSsid = param.data.getPairedSSID; std::list ssidList; - - if(connectedSsid.ssid[0] != '\0') - ssidList.push_back(string(connectedSsid.ssid)); - else - { - /* WiFi is disconnected; fall back to the SSIDs found by the last scan */ - gScannedSsidsLock.Lock(); - ssidList.assign(gScannedSsids.begin(), gScannedSsids.end()); - gScannedSsidsLock.Unlock(); - - if (ssidList.empty()) - { - IARM_Bus_WiFiSrvMgr_SsidList_Param_t scanParam{}; - memset(&scanParam, 0, sizeof(scanParam)); - - /* No scan result cached yet; trigger a scan so that the results are available subsequently */ - if (IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getAvailableSSIDsAsync, (void *)&scanParam, sizeof(IARM_Bus_WiFiSrvMgr_SsidList_Param_t))) - NMLOG_ERROR ("getAvailableSSIDsAsync failed"); - else - NMLOG_INFO ("known ssids not found; scan started"); - } - } + ssidList.push_back(string(pairedSsid.ssid)); NMLOG_INFO ("GetKnownSSIDs Success"); ssids = Core::Service::Create(ssidList); diff --git a/plugin/rdk/NetworkManagerRDKProxy.h b/plugin/rdk/NetworkManagerRDKProxy.h index 4a678d0b..967a38a3 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.h +++ b/plugin/rdk/NetworkManagerRDKProxy.h @@ -357,6 +357,7 @@ typedef struct _IARM_Bus_WiFiSrvMgr_SsidList_Param_t { #define IARM_BUS_WIFI_MGR_API_initiateWPSPairing2 "initiateWPSPairing2" /**< Initiate connection via WPS via either Push Button or PIN */ #define IARM_BUS_WIFI_MGR_API_cancelWPSPairing "cancelWPSPairing" /**< Cancel in-progress WPS */ #define IARM_BUS_WIFI_MGR_API_getConnectedSSID "getConnectedSSID" /**< Return properties of the currently connected SSID */ +#define IARM_BUS_WIFI_MGR_API_getPairedSSID "getPairedSSID" /**< Return the saved SSID */ #define IARM_BUS_WIFI_MGR_API_saveSSID "saveSSID" /**< Save SSID and passphrase */ #define IARM_BUS_WIFI_MGR_API_clearSSID "clearSSID" /**< Clear given SSID */ #define IARM_BUS_WIFI_MGR_API_connect "connect" /**< Connect with given or saved SSID and passphrase */ From cdc40efaeec93ac767b793025212959188cb40f4 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Tue, 8 Sep 2026 17:58:42 +0530 Subject: [PATCH 03/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/gnome/NetworkManagerGnomeProxy.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugin/gnome/NetworkManagerGnomeProxy.cpp b/plugin/gnome/NetworkManagerGnomeProxy.cpp index 4fd0fccd..04934879 100644 --- a/plugin/gnome/NetworkManagerGnomeProxy.cpp +++ b/plugin/gnome/NetworkManagerGnomeProxy.cpp @@ -767,7 +767,10 @@ namespace WPEFramework if(wifi->getKnownSSIDs(ssidList)) { if (ssidList.empty()) + { NMLOG_INFO("known ssids not found !"); + ssidList.push_back(string()); + } ssids = Core::Service::Create(ssidList); if(ssids == nullptr) { From 33937a8f97c17a2102ed09a9cda72c6d7543af76 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Wed, 9 Sep 2026 10:34:06 +0530 Subject: [PATCH 04/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- tests/l2Test/rdk/l2_test_rdkproxy.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/l2Test/rdk/l2_test_rdkproxy.cpp b/tests/l2Test/rdk/l2_test_rdkproxy.cpp index 0d13cace..3f1cca33 100644 --- a/tests/l2Test/rdk/l2_test_rdkproxy.cpp +++ b/tests/l2Test/rdk/l2_test_rdkproxy.cpp @@ -711,11 +711,10 @@ TEST_F(NetworkManagerTest, GetKnownSSIDs_Success) { IARM_Bus_WiFiSrvMgr_Param_t mockParam = {}; mockParam.status = true; - strncpy(mockParam.data.getConnectedSSID.ssid, "TestNetwork", SSID_SIZE - 1); - mockParam.data.getConnectedSSID.securityMode = NET_WIFI_SECURITY_WPA_WPA2_PSK; + strncpy(mockParam.data.getPairedSSID.ssid, "TestNetwork", SSID_SIZE - 1); EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_Call(::testing::StrEq(IARM_BUS_NM_SRV_MGR_NAME), - ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getConnectedSSID), + ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getPairedSSID), ::testing::NotNull(), ::testing::_)) .WillOnce(::testing::DoAll( ::testing::Invoke([&mockParam](const char*, const char*, void* arg, size_t) { @@ -731,7 +730,7 @@ TEST_F(NetworkManagerTest, GetKnownSSIDs_Success) TEST_F(NetworkManagerTest, GetKnownSSIDs_Failed) { EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_Call(::testing::StrEq(IARM_BUS_NM_SRV_MGR_NAME), - ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getConnectedSSID), + ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getPairedSSID), ::testing::NotNull(), ::testing::_)) .WillOnce(::testing::Return(IARM_RESULT_IPCCORE_FAIL)); From 974c0ae919a0375b19283c0a2f93f6726175e1ae Mon Sep 17 00:00:00 2001 From: DevikaJaladi <155776845+DevikaJaladi@users.noreply.github.com> Date: Thu, 10 Sep 2026 19:08:47 -0400 Subject: [PATCH 05/12] RDKEMW-24853: Remove rescan request upon wake-up(NSM-ON) (#350) Reason for change: Remove explicit rescan request upon wake-up(NSM-ON). Test Procedure: Change the channel in AP or change the timeout for SAE GTK_REKEY when the box is in DeepSleep & wake-up; ensure WiFi reconnected with 10s; wake-up journey. Priority: P1 Risks: Low Signed-off-by: Devika Jaladi Co-authored-by: Karunakaran A --- plugin/NetworkManagerImplementation.cpp | 9 --------- 1 file changed, 9 deletions(-) diff --git a/plugin/NetworkManagerImplementation.cpp b/plugin/NetworkManagerImplementation.cpp index ac828bda..d6819d40 100644 --- a/plugin/NetworkManagerImplementation.cpp +++ b/plugin/NetworkManagerImplementation.cpp @@ -1689,15 +1689,6 @@ namespace WPEFramework if (m_wlanEnabled.load() && m_wlanConnected.load()) { - // Waking from DeepSleep with Network Standby ON: the AP may have - // changed channel while the device slept (802.11 CSA). Trigger an - // active scan so the driver discovers the AP on its new channel. - NMLOG_INFO("OnPowerModeChanged: waking from DeepSleep, triggering active WiFi scan"); - if (StartWiFiScan(nullptr, nullptr) != Core::ERROR_NONE) - { - NMLOG_ERROR("OnPowerModeChanged: StartWiFiScan failed"); - } - NMLOG_INFO("OnPowerModeChanged: waking from DeepSleep, requesting DHCP lease on wlan0"); if (ReacquireDHCPLease("wlan0") != Core::ERROR_NONE) { From ecff51c73304e38ddb9f5d1131b5c670b898bb14 Mon Sep 17 00:00:00 2001 From: Karunakaran A Date: Thu, 10 Sep 2026 19:15:15 -0400 Subject: [PATCH 06/12] Release of 4.1.0 Release of 4.1.0 --- CHANGELOG.md | 4 ++++ CMakeLists.txt | 2 +- definition/NetworkManager.json | 2 +- docs/NetworkManagerPlugin.md | 4 ++-- 4 files changed, 8 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 459b82e0..007e6fb9 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. +## [4.1.0] - 2026-09-10 +### Changed +- Removed the explicit ReScan upon Wake-Up from DeepSleep because the Gnome NW sends SCAN requests with "AllowRoam" false which leads supplicant to Not to connect to WiFi; it ends-up scan-only + ## [4.0.0] - 2026-09-03 ### Added - Implemented a new `onRouteChange` event notify availability of IP Route either from WiFi or Ethernet diff --git a/CMakeLists.txt b/CMakeLists.txt index 636dd3ea..8d839aa2 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 4) -set(VERSION_MINOR 0) +set(VERSION_MINOR 1) set(VERSION_PATCH 0) add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR}) diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json index a4535b5d..5a22a2d1 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": "4.0.0" + "version": "4.1.0" }, "definitions": { "success": { diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md index aa7b7829..2fe6f9a1 100644 --- a/docs/NetworkManagerPlugin.md +++ b/docs/NetworkManagerPlugin.md @@ -2,7 +2,7 @@ # NetworkManager Plugin -**Version: 4.0.0** +**Version: 4.1.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 4.0.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 4.1.0). It includes detailed specification about its methods provided and notifications sent. ## Case Sensitivity From 10584afec294354a0e342c37ed8b7c007cfd9d1c Mon Sep 17 00:00:00 2001 From: tukken-comcast Date: Fri, 11 Sep 2026 21:56:44 +0530 Subject: [PATCH 07/12] RDKEMW-23908: Reduce default ping count from 3 to 1 and timeout from 3s to 1s (#345) * RDKEMW-23908: Reduce default ping count (3->1), timeout (3s->1s), interval (0.2s->0.002s) Reason for change: Current Ping method is synchronous and blocks other method calls while ping is executing. This fix is a mitigation. A proper fix requires methods like Ping that trigger long-running operations to be asynchronous. Test Procedure: Refer ticket Risks: Low Signed-off-by: Tony_Ukken2@comcast.com Co-authored-by: Karunakaran A <48997923+karuna2git@users.noreply.github.com> Co-authored-by: Karunakaran A --- definition/NetworkManager.json | 22 ++++++------ docs/NetworkManagerPlugin.md | 46 +++++++++++++------------ legacy/LegacyNetworkAPIs.cpp | 4 +-- plugin/NetworkManagerImplementation.cpp | 4 +-- plugin/NetworkManagerJsonRpc.cpp | 4 +-- 5 files changed, 42 insertions(+), 38 deletions(-) diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json index 5a22a2d1..f89f6da1 100644 --- a/definition/NetworkManager.json +++ b/definition/NetworkManager.json @@ -69,7 +69,7 @@ "port":{ "summary": "STUN server port", "type": "integer", - "example": "3478" + "example": 3478 }, "endpoint":{ "summary": "The host name or IP address", @@ -79,7 +79,7 @@ "cacheLifetime":{ "summary": "STUN server cache timeout", "type": "integer", - "example": "0" + "example": 0 }, "state": { "summary": "The given State", @@ -92,7 +92,7 @@ "example": "" }, "count": { - "summary": "The number of requests to send. Default is 3.", + "summary": "The number of requests to send. Default is 1.", "type": "integer", "example": 10 }, @@ -104,7 +104,7 @@ "timeout":{ "summary": "Timeout", "type": "integer", - "example": "30" + "example": 30 }, "ssid":{ "summary": "The WiFi SSID Name", @@ -710,8 +710,10 @@ "count": { "$ref": "#/definitions/count" }, - "timeout": { - "$ref": "#/definitions/timeout" + "timeout":{ + "summary": "Timeout in seconds. Default is 1", + "type": "integer", + "example": 5 }, "guid": { "$ref": "#/definitions/guid" @@ -1121,7 +1123,7 @@ "WiFiDisconnect":{ "summary": "Disconnects from the currently connected SSID. A event will be posted upon completion", "events":{ - "onWIFIStateChange" : "Triggered when Wifi state changes to DISCONNECTED (only if currently connected).", + "onWiFiStateChange" : "Triggered when Wifi state changes to DISCONNECTED (only if currently connected).", "onIPAddressChange" : "Triggered when an IP Address is assigned or lost", "onInternetStatusChange" : "Triggered when internet connection state changed" }, @@ -1186,7 +1188,7 @@ "StartWPS":{ "summary": "Initiates a connection using Wifi Protected Setup (WPS). An existing connection will be disconnected before attempting to initiate a new connection. Failure in WPS pairing will trigger an error event.\n\nIf the `method` parameter is set to `SERIALIZED_PIN`, then RDK retrieves the serialized pin using the Manufacturer (MFR) API. If the `method` parameter is set to `PIN`, then RDK use the pin supplied as part of the request. If the `method` parameter is set to `PBC`, then RDK uses Push Button Configuration (PBC) to obtain the pin.", "events":{ - "onWIFIStateChange" : "Triggered when Wifi state changes to DISCONNECTED (only if currently connected), CONNECTING, CONNECTED.", + "onWiFiStateChange" : "Triggered when Wifi state changes to DISCONNECTED (only if currently connected), CONNECTING, CONNECTED.", "onIPAddressChange" : "Triggered when an IP Address is assigned or lost", "onInternetStatusChange" : "Triggered when internet connection state changed" }, @@ -1229,7 +1231,7 @@ "StopWPS":{ "summary": "Cancels the in-progress WPS pairing operation. The operation forcefully stops the in-progress pairing attempt and aborts the current scan. WPS pairing must be in-progress for the operation to succeed.", "events":{ - "onWIFIStateChange" : "Triggered when Wifi state changes to DISCONNECTED." + "onWiFiStateChange" : "Triggered when Wifi state changes to DISCONNECTED." }, "result": { "type": "object", @@ -1586,7 +1588,7 @@ "state":{ "summary": "WiFi State", "type": "integer", - "example": "5" + "example": 5 }, "status": { "summary": "WiFi status", diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md index 2fe6f9a1..6a8e9d29 100644 --- a/docs/NetworkManagerPlugin.md +++ b/docs/NetworkManagerPlugin.md @@ -448,7 +448,7 @@ Gets the IP setting for the given interface. "result": { "interface": "wlan0", "ipversion": "IPv4", - "autoconfig": true, + "autoconfig": false, "dhcpserver": "192.168.1.1", "ipaddress": "192.168.1.101", "prefix": 24, @@ -466,7 +466,7 @@ Gets the IP setting for the given interface. Sets the IP settings for the given interface. The `interface`, `ipversion`, and `autoconfig` parameters are mandatory. When `autoconfig` is `false`, the `ipaddress`, `prefix`, `gateway`, `primarydns`, and `secondarydns` parameters must also be provided. -Also see: [onAddressChange](#event.onAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) +Also see: [onIPAddressChange](#event.onIPAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) ### Parameters @@ -768,7 +768,7 @@ Seeks whether the device has internet connectivity. This API might take up to 5s "result": { "ipversion": "IPv4", "interface": "wlan0", - "connected": true, + "connected": false, "state": 1, "status": "NO_INTERNET", "reason": "PROBE_FAILED", @@ -885,8 +885,8 @@ Pings the specified endpoint with the specified number of packets. | params | object | | | params.endpoint | string | The host name or IP address | | params.ipversion | string | Either IPv4 or IPv6 | -| params?.count | integer | *(optional)* The number of requests to send. Default is 3 | -| params?.timeout | integer | *(optional)* Timeout | +| params?.count | integer | *(optional)* The number of requests to send. Default is 1 | +| params?.timeout | integer | *(optional)* Timeout in seconds. Default is 1 | | params?.guid | string | *(optional)* The globally unique identifier | ### Result @@ -919,7 +919,7 @@ Pings the specified endpoint with the specified number of packets. "endpoint": "45.57.221.20", "ipversion": "IPv4", "count": 10, - "timeout": 30, + "timeout": 5, "guid": "..." } } @@ -1201,7 +1201,7 @@ Saves the SSID, passphrase, and security mode for upcoming and future sessions. Remove given SSID from saved SSIDs. This method just removes an entry from the list and of the list is having only one entry thats being removed, it will initiate a disconnect. -Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onAddressChange](#event.onAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) +Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onIPAddressChange](#event.onIPAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) ### Parameters @@ -1249,7 +1249,7 @@ Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onAddressChange](#even Connects to a saved SSID. The `ssid` parameter is mandatory. Returns failure if `ssid` is not specified or not found in the saved SSIDs list. -Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onAddressChange](#event.onAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) +Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onIPAddressChange](#event.onIPAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) ### Parameters @@ -1295,7 +1295,7 @@ Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onAddressChange](#even ## *WiFiConnect [method](#head.Methods)* -Initiates request to connect to the specified SSID with the given passphrase. Passphrase can be `null` when the network security is `NONE`. The security mode is decided based on the highest security mode provided by the SSID. Also when called with no arguments, this method attempts to connect to the saved SSID and password. See `AddToKnownSSIDs`. +Initiates request to connect to the specified SSID with the given passphrase. Passphrase can be `null` when the network security is `NONE`. The security mode is decided based on the highest security mode provided by the SSID. Also when called with no arguments, this method attempts to connect to the last connected SSID. See `AddToKnownSSIDs`. Also see: [onWiFiStateChange](#event.onWiFiStateChange) @@ -1373,7 +1373,7 @@ Also see: [onWiFiStateChange](#event.onWiFiStateChange) Disconnects from the currently connected SSID. A event will be posted upon completion. -Also see: [onWIFIStateChange](#event.onWIFIStateChange), [onAddressChange](#event.onAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) +Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onIPAddressChange](#event.onIPAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) ### Parameters @@ -1471,7 +1471,7 @@ Initiates a connection using Wifi Protected Setup (WPS). An existing connection If the `method` parameter is set to `SERIALIZED_PIN`, then RDK retrieves the serialized pin using the Manufacturer (MFR) API. If the `method` parameter is set to `PIN`, then RDK use the pin supplied as part of the request. If the `method` parameter is set to `PBC`, then RDK uses Push Button Configuration (PBC) to obtain the pin. -Also see: [onWIFIStateChange](#event.onWIFIStateChange), [onAddressChange](#event.onAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) +Also see: [onWiFiStateChange](#event.onWiFiStateChange), [onIPAddressChange](#event.onIPAddressChange), [onInternetStatusChange](#event.onInternetStatusChange) ### Parameters @@ -1523,7 +1523,7 @@ Also see: [onWIFIStateChange](#event.onWIFIStateChange), [onAddressChange](#even Cancels the in-progress WPS pairing operation. The operation forcefully stops the in-progress pairing attempt and aborts the current scan. WPS pairing must be in-progress for the operation to succeed. -Also see: [onWIFIStateChange](#event.onWIFIStateChange) +Also see: [onWiFiStateChange](#event.onWiFiStateChange) ### Parameters @@ -1788,7 +1788,7 @@ NetworkManager interface events: | Event | Description | | :-------- | :-------- | | [onInterfaceStateChange](#event.onInterfaceStateChange) | Triggered when an interface state is changed | -| [onAddressChange](#event.onAddressChange) | Triggered when an IP Address is assigned or lost | +| [onIPAddressChange](#event.onIPAddressChange) | Triggered when an IP Address is assigned or lost | | [onRouteChange](#event.onRouteChange) | Triggered when the default route changes and a new gateway/DNS becomes available for an interface | | [onActiveInterfaceChange](#event.onActiveInterfaceChange) | Triggered when the primary/active interface changes | | [onInternetStatusChange](#event.onInternetStatusChange) | Triggered when internet connection state changed | @@ -1831,8 +1831,8 @@ Triggered when an interface state is changed. The possible states are } ``` - -## *onAddressChange [event](#head.Notifications)* + +## *onIPAddressChange [event](#head.Notifications)* Triggered when an IP Address is assigned or lost. @@ -1851,7 +1851,7 @@ Triggered when an IP Address is assigned or lost. ```json { "jsonrpc": "2.0", - "method": "client.events.1.onAddressChange", + "method": "client.events.1.onIPAddressChange", "params": { "interface": "wlan0", "ipaddress": "192.168.1.101", @@ -1934,6 +1934,7 @@ Triggered when internet connection state changed.The possible internet connectio | params.state | integer | The internet connection state | | params.status | string | The internet connection status | | params.interface | string | The internet status change on default interface | +| params?.reason | string | *(optional)* The ConnectivityCheckMgr reason when status is NO_INTERNET | ### Example @@ -1942,11 +1943,12 @@ Triggered when internet connection state changed.The possible internet connectio "jsonrpc": "2.0", "method": "client.events.1.onInternetStatusChange", "params": { - "prevState": 1, - "prevStatus": "NO_INTERNET", - "state": 4, - "status": "FULLY_CONNECTED", - "interface": "wlan0" + "prevState": 3, + "prevStatus": "FULLY_CONNECTED", + "state": 1, + "status": "NO_INTERNET", + "interface": "wlan0", + "reason": "PROBE_FAILED" } } ``` @@ -2001,7 +2003,7 @@ Triggered when WIFI connection state get changed. The possible states are define | params | object | | | params.state | integer | WiFi State | | params.status | string | WiFi status | -| params.ssid | string | The SSID associated with the Wi-Fi profile causing the state transition. Disconnected state, contains the SSID associated with the connection that was disconnected | +| params.ssid | string | The SSID associated with the Wi-Fi profile causing the state transition. Disconnected state, contains the SSID associated with the connection that was disconnected. The SSID will be empty when WPS initiated and no AP found with WPS enabled | ### Example diff --git a/legacy/LegacyNetworkAPIs.cpp b/legacy/LegacyNetworkAPIs.cpp index 4e31974c..172e43f3 100644 --- a/legacy/LegacyNetworkAPIs.cpp +++ b/legacy/LegacyNetworkAPIs.cpp @@ -621,8 +621,8 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN+1] = { { string guid{}; string ipversion{"IPv4"}; - uint32_t noOfRequest = 3; - uint16_t timeOutInSeconds = 3; + uint32_t noOfRequest = 1; + uint16_t timeOutInSeconds = 1; endpoint = parameters["endpoint"].String(); diff --git a/plugin/NetworkManagerImplementation.cpp b/plugin/NetworkManagerImplementation.cpp index d6819d40..801e5df4 100644 --- a/plugin/NetworkManagerImplementation.cpp +++ b/plugin/NetworkManagerImplementation.cpp @@ -552,11 +552,11 @@ namespace WPEFramework } if(0 == strcasecmp("IPv6", ipversion.c_str())) { - snprintf(cmd, sizeof(cmd), "ping6 -c %d -W %d -i 0.2 '%s' 2>&1", noOfRequest, timeOutInSeconds, endpoint.c_str()); + snprintf(cmd, sizeof(cmd), "ping6 -c %d -W %d -i 0.002 '%s' 2>&1", noOfRequest, timeOutInSeconds, endpoint.c_str()); } else { - snprintf(cmd, sizeof(cmd), "ping -c %d -W %d -i 0.2 '%s' 2>&1", noOfRequest, timeOutInSeconds, endpoint.c_str()); + snprintf(cmd, sizeof(cmd), "ping -c %d -W %d -i 0.002 '%s' 2>&1", noOfRequest, timeOutInSeconds, endpoint.c_str()); } NMLOG_DEBUG ("The Command is %s", cmd); diff --git a/plugin/NetworkManagerJsonRpc.cpp b/plugin/NetworkManagerJsonRpc.cpp index 7429cba4..6e309e6f 100644 --- a/plugin/NetworkManagerJsonRpc.cpp +++ b/plugin/NetworkManagerJsonRpc.cpp @@ -581,8 +581,8 @@ namespace WPEFramework { string guid{}; string ipversion{"IPv4"}; - uint32_t noOfRequest = 3; - uint16_t timeOutInSeconds = 3; + uint32_t noOfRequest = 1; + uint16_t timeOutInSeconds = 1; endpoint = parameters["endpoint"].String(); From b51acd6f4bf0ecc16c90d2b948afb4646021f81e Mon Sep 17 00:00:00 2001 From: Karunakaran A Date: Fri, 11 Sep 2026 12:30:19 -0400 Subject: [PATCH 08/12] Release of 4.2.0 Release of 4.2.0 --- CHANGELOG.md | 5 +++++ CMakeLists.txt | 2 +- definition/NetworkManager.json | 2 +- docs/NetworkManagerPlugin.md | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 007e6fb9..f9efdbef 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,6 +14,11 @@ 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. +## [4.2.0] - 2026-09-11 +### Changed +- Changed the default values for the number of ping request sent, the timeout and also the interval between the ping packets. +- Moving Ping and Trace methods as ASYNC is being designed + ## [4.1.0] - 2026-09-10 ### Changed - Removed the explicit ReScan upon Wake-Up from DeepSleep because the Gnome NW sends SCAN requests with "AllowRoam" false which leads supplicant to Not to connect to WiFi; it ends-up scan-only diff --git a/CMakeLists.txt b/CMakeLists.txt index 8d839aa2..a860fcfa 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 4) -set(VERSION_MINOR 1) +set(VERSION_MINOR 2) set(VERSION_PATCH 0) add_compile_definitions(NETWORKMANAGER_MAJOR_VERSION=${VERSION_MAJOR}) diff --git a/definition/NetworkManager.json b/definition/NetworkManager.json index f89f6da1..6cc48365 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": "4.1.0" + "version": "4.2.0" }, "definitions": { "success": { diff --git a/docs/NetworkManagerPlugin.md b/docs/NetworkManagerPlugin.md index 6a8e9d29..62c3269c 100644 --- a/docs/NetworkManagerPlugin.md +++ b/docs/NetworkManagerPlugin.md @@ -2,7 +2,7 @@ # NetworkManager Plugin -**Version: 4.1.0** +**Version: 4.2.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 4.1.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 4.2.0). It includes detailed specification about its methods provided and notifications sent. ## Case Sensitivity From e6d70fd8c33c9858be7b732486f1afae3ca5ffb9 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Thu, 3 Sep 2026 18:36:20 +0530 Subject: [PATCH 09/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/gnome/NetworkManagerGnomeProxy.cpp | 17 ++++----- plugin/rdk/NetworkManagerRDKProxy.cpp | 42 +++++++++++++++++++++-- 2 files changed, 46 insertions(+), 13 deletions(-) diff --git a/plugin/gnome/NetworkManagerGnomeProxy.cpp b/plugin/gnome/NetworkManagerGnomeProxy.cpp index 7c877f5f..4fd0fccd 100644 --- a/plugin/gnome/NetworkManagerGnomeProxy.cpp +++ b/plugin/gnome/NetworkManagerGnomeProxy.cpp @@ -766,19 +766,14 @@ namespace WPEFramework std::list ssidList; if(wifi->getKnownSSIDs(ssidList)) { - if (!ssidList.empty()) - { - ssids = Core::Service::Create(ssidList); - if(ssids == nullptr) { - return Core::ERROR_GENERAL; - } - rc = Core::ERROR_NONE; - } - else - { + if (ssidList.empty()) NMLOG_INFO("known ssids not found !"); - rc = Core::ERROR_GENERAL; + + ssids = Core::Service::Create(ssidList); + if(ssids == nullptr) { + return Core::ERROR_GENERAL; } + rc = Core::ERROR_NONE; } return rc; diff --git a/plugin/rdk/NetworkManagerRDKProxy.cpp b/plugin/rdk/NetworkManagerRDKProxy.cpp index e8be4680..059d384a 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.cpp +++ b/plugin/rdk/NetworkManagerRDKProxy.cpp @@ -21,6 +21,7 @@ #include "NetworkManagerRDKProxy.h" #include "libIBus.h" #include +#include using namespace WPEFramework; using namespace WPEFramework::Plugin; @@ -35,6 +36,10 @@ namespace WPEFramework { NetworkManagerImplementation* _instance = nullptr; + /* SSIDs reported by the last scan; used when there is no connected SSID */ + static Core::CriticalSection gScannedSsidsLock; + static std::set gScannedSsids; + Exchange::INetworkManager::WiFiState to_wifi_state(WiFiStatusCode_t code) { switch (code) { @@ -261,6 +266,7 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); + std::set scannedSsids; for (int i = 0; i < ssids.Length(); i++) { @@ -272,7 +278,19 @@ namespace WPEFramework newObject["strength"] = object["signalStrength"]; newObject["frequency"] = object["frequency"]; ssidsUpdated.Add(newObject); + + string scannedSsid = object["ssid"].String(); + if (!scannedSsid.empty()) + scannedSsids.insert(scannedSsid); + } + + if (!scannedSsids.empty()) + { + gScannedSsidsLock.Lock(); + gScannedSsids = scannedSsids; + gScannedSsidsLock.Unlock(); } + ::_instance->ReportAvailableSSIDs(ssidsUpdated); break; } @@ -1040,14 +1058,34 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN+1] = { memset(¶m, 0, sizeof(param)); - /* Must add new method to get all the known SSIDs but for now RDK-NM supports only one active SSID. So we repurpose this method */ retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getConnectedSSID, (void *)¶m, sizeof(param)); if(retVal == IARM_RESULT_SUCCESS) { auto &connectedSsid = param.data.getConnectedSSID; std::list ssidList; - ssidList.push_back(string(connectedSsid.ssid)); + + if(connectedSsid.ssid[0] != '\0') + ssidList.push_back(string(connectedSsid.ssid)); + else + { + /* WiFi is disconnected; fall back to the SSIDs found by the last scan */ + gScannedSsidsLock.Lock(); + ssidList.assign(gScannedSsids.begin(), gScannedSsids.end()); + gScannedSsidsLock.Unlock(); + + if (ssidList.empty()) + { + IARM_Bus_WiFiSrvMgr_SsidList_Param_t scanParam{}; + memset(&scanParam, 0, sizeof(scanParam)); + + /* No scan result cached yet; trigger a scan so that the results are available subsequently */ + if (IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getAvailableSSIDsAsync, (void *)&scanParam, sizeof(IARM_Bus_WiFiSrvMgr_SsidList_Param_t))) + NMLOG_ERROR ("getAvailableSSIDsAsync failed"); + else + NMLOG_INFO ("known ssids not found; scan started"); + } + } NMLOG_INFO ("GetKnownSSIDs Success"); ssids = Core::Service::Create(ssidList); From 337517fc6b1d9199a2f8b937731ff9e1a61e0449 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Thu, 3 Sep 2026 21:30:04 +0530 Subject: [PATCH 10/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/rdk/NetworkManagerRDKProxy.cpp | 45 +++------------------------ plugin/rdk/NetworkManagerRDKProxy.h | 1 + 2 files changed, 5 insertions(+), 41 deletions(-) diff --git a/plugin/rdk/NetworkManagerRDKProxy.cpp b/plugin/rdk/NetworkManagerRDKProxy.cpp index 059d384a..f0732064 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.cpp +++ b/plugin/rdk/NetworkManagerRDKProxy.cpp @@ -21,7 +21,6 @@ #include "NetworkManagerRDKProxy.h" #include "libIBus.h" #include -#include using namespace WPEFramework; using namespace WPEFramework::Plugin; @@ -36,10 +35,6 @@ namespace WPEFramework { NetworkManagerImplementation* _instance = nullptr; - /* SSIDs reported by the last scan; used when there is no connected SSID */ - static Core::CriticalSection gScannedSsidsLock; - static std::set gScannedSsids; - Exchange::INetworkManager::WiFiState to_wifi_state(WiFiStatusCode_t code) { switch (code) { @@ -266,7 +261,6 @@ namespace WPEFramework } JsonArray ssids = eventDocument["getAvailableSSIDs"].Array(); - std::set scannedSsids; for (int i = 0; i < ssids.Length(); i++) { @@ -278,17 +272,6 @@ namespace WPEFramework newObject["strength"] = object["signalStrength"]; newObject["frequency"] = object["frequency"]; ssidsUpdated.Add(newObject); - - string scannedSsid = object["ssid"].String(); - if (!scannedSsid.empty()) - scannedSsids.insert(scannedSsid); - } - - if (!scannedSsids.empty()) - { - gScannedSsidsLock.Lock(); - gScannedSsids = scannedSsids; - gScannedSsidsLock.Unlock(); } ::_instance->ReportAvailableSSIDs(ssidsUpdated); @@ -1058,34 +1041,14 @@ const string CIDR_PREFIXES[CIDR_NETMASK_IP_LEN+1] = { memset(¶m, 0, sizeof(param)); - retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getConnectedSSID, (void *)¶m, sizeof(param)); + /* Must add new method to get all the known SSIDs but for now RDK-NM supports only one saved SSID. */ + retVal = IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getPairedSSID, (void *)¶m, sizeof(param)); if(retVal == IARM_RESULT_SUCCESS) { - auto &connectedSsid = param.data.getConnectedSSID; + auto &pairedSsid = param.data.getPairedSSID; std::list ssidList; - - if(connectedSsid.ssid[0] != '\0') - ssidList.push_back(string(connectedSsid.ssid)); - else - { - /* WiFi is disconnected; fall back to the SSIDs found by the last scan */ - gScannedSsidsLock.Lock(); - ssidList.assign(gScannedSsids.begin(), gScannedSsids.end()); - gScannedSsidsLock.Unlock(); - - if (ssidList.empty()) - { - IARM_Bus_WiFiSrvMgr_SsidList_Param_t scanParam{}; - memset(&scanParam, 0, sizeof(scanParam)); - - /* No scan result cached yet; trigger a scan so that the results are available subsequently */ - if (IARM_RESULT_SUCCESS != IARM_Bus_Call(IARM_BUS_NM_SRV_MGR_NAME, IARM_BUS_WIFI_MGR_API_getAvailableSSIDsAsync, (void *)&scanParam, sizeof(IARM_Bus_WiFiSrvMgr_SsidList_Param_t))) - NMLOG_ERROR ("getAvailableSSIDsAsync failed"); - else - NMLOG_INFO ("known ssids not found; scan started"); - } - } + ssidList.push_back(string(pairedSsid.ssid)); NMLOG_INFO ("GetKnownSSIDs Success"); ssids = Core::Service::Create(ssidList); diff --git a/plugin/rdk/NetworkManagerRDKProxy.h b/plugin/rdk/NetworkManagerRDKProxy.h index 4a678d0b..967a38a3 100644 --- a/plugin/rdk/NetworkManagerRDKProxy.h +++ b/plugin/rdk/NetworkManagerRDKProxy.h @@ -357,6 +357,7 @@ typedef struct _IARM_Bus_WiFiSrvMgr_SsidList_Param_t { #define IARM_BUS_WIFI_MGR_API_initiateWPSPairing2 "initiateWPSPairing2" /**< Initiate connection via WPS via either Push Button or PIN */ #define IARM_BUS_WIFI_MGR_API_cancelWPSPairing "cancelWPSPairing" /**< Cancel in-progress WPS */ #define IARM_BUS_WIFI_MGR_API_getConnectedSSID "getConnectedSSID" /**< Return properties of the currently connected SSID */ +#define IARM_BUS_WIFI_MGR_API_getPairedSSID "getPairedSSID" /**< Return the saved SSID */ #define IARM_BUS_WIFI_MGR_API_saveSSID "saveSSID" /**< Save SSID and passphrase */ #define IARM_BUS_WIFI_MGR_API_clearSSID "clearSSID" /**< Clear given SSID */ #define IARM_BUS_WIFI_MGR_API_connect "connect" /**< Connect with given or saved SSID and passphrase */ From 3581df3d362229bf47abca07c2f49fb71cfdd0c9 Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Tue, 8 Sep 2026 17:58:42 +0530 Subject: [PATCH 11/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- plugin/gnome/NetworkManagerGnomeProxy.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/plugin/gnome/NetworkManagerGnomeProxy.cpp b/plugin/gnome/NetworkManagerGnomeProxy.cpp index 4fd0fccd..04934879 100644 --- a/plugin/gnome/NetworkManagerGnomeProxy.cpp +++ b/plugin/gnome/NetworkManagerGnomeProxy.cpp @@ -767,7 +767,10 @@ namespace WPEFramework if(wifi->getKnownSSIDs(ssidList)) { if (ssidList.empty()) + { NMLOG_INFO("known ssids not found !"); + ssidList.push_back(string()); + } ssids = Core::Service::Create(ssidList); if(ssids == nullptr) { From 0a266b105e56652760dacf608b33237bf780b6fe Mon Sep 17 00:00:00 2001 From: mpalan315 Date: Wed, 9 Sep 2026 10:34:06 +0530 Subject: [PATCH 12/12] RDKEMW-24199: GetKnownSSIDs in RDKV returning Empty upon Disconnected Reason for change: GetKnownSSIDs must return stored WiFi Profile information. Priority: P2 Test Procedure: Refer ticket Risks: Low Signed-off-by: Mehavarshni_Palaniswamy@comcast.com --- tests/l2Test/rdk/l2_test_rdkproxy.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/l2Test/rdk/l2_test_rdkproxy.cpp b/tests/l2Test/rdk/l2_test_rdkproxy.cpp index 0d13cace..3f1cca33 100644 --- a/tests/l2Test/rdk/l2_test_rdkproxy.cpp +++ b/tests/l2Test/rdk/l2_test_rdkproxy.cpp @@ -711,11 +711,10 @@ TEST_F(NetworkManagerTest, GetKnownSSIDs_Success) { IARM_Bus_WiFiSrvMgr_Param_t mockParam = {}; mockParam.status = true; - strncpy(mockParam.data.getConnectedSSID.ssid, "TestNetwork", SSID_SIZE - 1); - mockParam.data.getConnectedSSID.securityMode = NET_WIFI_SECURITY_WPA_WPA2_PSK; + strncpy(mockParam.data.getPairedSSID.ssid, "TestNetwork", SSID_SIZE - 1); EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_Call(::testing::StrEq(IARM_BUS_NM_SRV_MGR_NAME), - ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getConnectedSSID), + ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getPairedSSID), ::testing::NotNull(), ::testing::_)) .WillOnce(::testing::DoAll( ::testing::Invoke([&mockParam](const char*, const char*, void* arg, size_t) { @@ -731,7 +730,7 @@ TEST_F(NetworkManagerTest, GetKnownSSIDs_Success) TEST_F(NetworkManagerTest, GetKnownSSIDs_Failed) { EXPECT_CALL(*p_iarmBusImplMock, IARM_Bus_Call(::testing::StrEq(IARM_BUS_NM_SRV_MGR_NAME), - ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getConnectedSSID), + ::testing::StrEq(IARM_BUS_WIFI_MGR_API_getPairedSSID), ::testing::NotNull(), ::testing::_)) .WillOnce(::testing::Return(IARM_RESULT_IPCCORE_FAIL));