diff --git a/wifi/bundle.json b/wifi/bundle.json index fd215221b967599a0a4f7fbdde5d84c8f42f19e4..77c63364cae36f179161fac71d34fed278dca3e9 100644 --- a/wifi/bundle.json +++ b/wifi/bundle.json @@ -76,7 +76,8 @@ "wifi_feature_with_scan_control_action_listen", "wifi_feature_with_portal_login", "wifi_feature_with_security_detect", - "wifi_feature_auto_enable_support" + "wifi_feature_auto_enable_support", + "wifi_feature_with_ipv6_selfcure" ], "adapted_system_type": [ "small", diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn index a4ea5393dcf23bbdff11e32795e6e026836a7db0..63a335f50b9c7222cba971b7886fa70014b0b7d3 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/BUILD.gn @@ -629,6 +629,10 @@ if (defined(ohos_lite)) { defines += [ "FEATURE_AUTO_STARTUP_SUPPORT" ] } + if (wifi_feature_with_ipv6_selfcure) { + defines += [ "FEATURE_IPV6_SELF_CURE" ] + } + if (wifi_feature_dynamic_unload_sa) { defines += [ "DYNAMIC_UNLOAD_SA" ] } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_netlink.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_netlink.cpp index 3cb50f127a02eb055ac363ba7587f7e1c8882f07..a315611338e6bb7ca9de00d21980443a8e065756 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_netlink.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_common/wifi_netlink.cpp @@ -211,7 +211,7 @@ int32_t WifiNetLink::ProcessReportMsg(int32_t sockFd, int32_t cmd) return 0; } else { const char* type = (cmd == CMD_QUERY_IPV6_PKTS) ? "IPv6" : "IPv4"; - WIFI_LOGI("Received invalid %{public}s message info.hdr.nlmsg_type = %{public}d", type, info.hdr.nlmsg_type); + WIFI_LOGI("Received invalid %{public}s message", type); return -1; } } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/BUILD.gn b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/BUILD.gn index d634ed652e85ecd997bc1a47f72e642ecc2edaaa..4180dbcbf58a8ded9de2a4afd87ee7d7856eebd5 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/BUILD.gn +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/BUILD.gn @@ -85,6 +85,10 @@ ohos_static_library("wifi_self_cure") { defines = [ "FEATURE_SELF_CURE_SUPPORT" ] + if (wifi_feature_with_ipv6_selfcure) { + defines += [ "FEATURE_IPV6_SELF_CURE" ] + } + if (wifi_feature_with_local_random_mac) { defines += [ "SUPPORT_LOCAL_RANDOM_MAC" ] } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/ip_qos_monitor.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/ip_qos_monitor.cpp index 53316e12a27ce0b27991e6de0cbb1c7214d95acb..cf44d62405a194336c3a9cc079bf0917c9ff3a87 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/ip_qos_monitor.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/ip_qos_monitor.cpp @@ -166,6 +166,7 @@ void IpQosMonitor::HandleIpv6TcpPktsResp(const std::vector &elems) __FUNCTION__, mIpv6FailedCounter); } else { WIFI_LOGE("%{public}s: Failed to notify IPv6 failure to SelfCure", __FUNCTION__); + mIpv6FailedCounter = 0; // Reset counter to avoid repeated notifications } } } diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_service.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_service.cpp index ec2bd5fbbd4e437e28e566b75c73220e7b1cd572..4f1d8a87aa7e1c90c927ab36cc1377ff5ca7b8aa 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_service.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_service.cpp @@ -235,6 +235,15 @@ bool SelfCureService::NotifyIpv6FailureDetected() return false; } + // Check if static IPv6 is configured + WifiDeviceConfig wificonfig; + if (WifiSettings::GetInstance().GetDeviceConfig(linkedInfo.networkId, wificonfig, m_instId) == 0 && + wificonfig.wifiIpConfig.assignMethod == AssignIpMethod::STATIC && + wificonfig.wifiIpConfig.staticIpAddress.ipAddress.address.family == 1) { + WIFI_LOGI("Static IPv6 configured, ignore IPv6 failure"); + return false; + } + // Check if the system supports IPv6 self-cure functionality if (!SelfCureUtils::GetInstance().IsIpv6SelfCureSupported()) { WIFI_LOGI("IPv6 self-cure not supported, ignore IPv6 failure"); diff --git a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_utils.cpp b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_utils.cpp index dc4e7c64a452b1ee40066933ee2c60094b1b9d7e..03765777c22a8ce1d5005bfdbbae41d01a7bb63f 100644 --- a/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_utils.cpp +++ b/wifi/services/wifi_standard/wifi_framework/wifi_manage/wifi_self_cure/self_cure_utils.cpp @@ -563,9 +563,14 @@ void SelfCureUtils::ReportNoInternetChrEvent() bool SelfCureUtils::IsIpv6SelfCureSupported() { - // Check if the system supports IPv6 self-cure functionality - // This can be configured based on system capabilities or policies +#ifdef FEATURE_IPV6_SELF_CURE + if (WifiConfigCenter::GetInstance().GetDeviceType() != ProductDeviceType::PHONE) { + return false; + } return true; +#else + return false; +#endif } bool SelfCureUtils::DisableIpv6() diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/common/wifi_netlink_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/common/wifi_netlink_test.cpp index 24d363d3a1bd6ff9ad7d7cef0baa135394cd63b2..af44bfb233abd936a14345b3a6cddc6b1876cbef 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/common/wifi_netlink_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/unittest/common/wifi_netlink_test.cpp @@ -34,7 +34,12 @@ static std::string g_errLog = "wifitest"; class WifiNetLinkTest : public testing::Test { protected: void SetUp() override - {} + { + WifiNetLinkCallbacks callbacks; + callbacks.OnTcpReportMsgComplete = [](const std::vector &elems, const int32_t cmd, + const int32_t mInstId) {}; + WifiNetLink::GetInstance().InitWifiNetLink(callbacks); + } void TearDown() override {} diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ip_qos_monitor_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ip_qos_monitor_test.cpp index 443bd88a24a50bca92b5205fcf9dbcd000aecfc2..97267097945d663e283ce009c1b130770a7c9273 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ip_qos_monitor_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/ip_qos_monitor_test.cpp @@ -178,12 +178,10 @@ HWTEST_F(IpQosMonitorTest, TestHandleIpv6TcpPktsRespDisconnected, TestSize.Level wifiLinkedInfo.connState = ConnState::DISCONNECTED; EXPECT_CALL(WifiConfigCenter::GetInstance(), GetLinkedInfo(_, _)) .WillRepeatedly(DoAll(SetArgReferee<0>(wifiLinkedInfo), Return(0))); - - int32_t initialFailedCount = IpQosMonitor::GetInstance().GetIpv6FailedCounter(); IpQosMonitor::GetInstance().HandleIpv6TcpPktsResp(elems); // Should not increment failure counter when disconnected - EXPECT_EQ(IpQosMonitor::GetInstance().GetIpv6FailedCounter(), initialFailedCount); + EXPECT_EQ(IpQosMonitor::GetInstance().GetIpv6FailedCounter(), 0); } HWTEST_F(IpQosMonitorTest, TestParseIpv6NetworkInternetGood, TestSize.Level1) diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_interface_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_interface_test.cpp index 3f2a2f7aa092c2a1c3d68431895d7aba12eda518..947130c6fcfc2b3873183475b7a8d42fcb592810 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_interface_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_interface_test.cpp @@ -186,9 +186,6 @@ HWTEST_F(SelfCureInterfaceTest, DealDhcpOfferReportTest, TestSize.Level1) HWTEST_F(SelfCureInterfaceTest, NotifyIpv6FailureDetectedTest, TestSize.Level1) { - // Test IPv6 failure notification interface - EXPECT_EQ(WIFI_OPT_SUCCESS, pSelfCureInterface->NotifyIpv6FailureDetected()); - // Test with null service pSelfCureInterface->pSelfCureService = nullptr; EXPECT_EQ(WIFI_OPT_FAILED, pSelfCureInterface->NotifyIpv6FailureDetected()); diff --git a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_service_test.cpp b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_service_test.cpp index 19631e977777fb75becb91e8e2008c1349336481..d534cbcfceed10d2600c86ab34a48cdde1a01a1d 100644 --- a/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_service_test.cpp +++ b/wifi/test/wifi_standard/wifi_framework/wifi_manage/wifi_sta/self_cure_service_test.cpp @@ -192,7 +192,7 @@ HWTEST_F(SelfCureServiceTest, NotifyIpv6FailureDetectedTest, TestSize.Level1) { // Test IPv6 failure detection notification bool result = pSelfCureService->NotifyIpv6FailureDetected(); - EXPECT_EQ(result, true); + EXPECT_EQ(result, false); EXPECT_FALSE(g_errLog.find("service is null") != std::string::npos); } diff --git a/wifi/wifi.gni b/wifi/wifi.gni index b370f7cd24d7a8f59dae85b10fbf16c0385216cd..fddc3137c5e2f1354cad5457bc06ccc82178ac3d 100644 --- a/wifi/wifi.gni +++ b/wifi/wifi.gni @@ -70,6 +70,7 @@ declare_args() { wifi_hiappevent_enable = true } wifi_feature_auto_enable_support = false + wifi_feature_with_ipv6_selfcure = true } memory_optimization_cflags = [