diff --git a/services/netconnmanager/include/net_conn_service.h b/services/netconnmanager/include/net_conn_service.h index 24d8b98f5498a4c94879c111d07053b2f7d3c597..1d67d1ab58738d606e09ad1f3c119de8e1217e6f 100644 --- a/services/netconnmanager/include/net_conn_service.h +++ b/services/netconnmanager/include/net_conn_service.h @@ -356,7 +356,6 @@ public: int32_t IsPreferCellularUrl(const std::string& url, bool& preferCellular) override; int32_t RegisterPreAirplaneCallback(const sptr callback) override; int32_t UnregisterPreAirplaneCallback(const sptr callback) override; - bool IsAddrInOtherNetwork(const std::string &ifaceName, int32_t netId, const INetAddr &netAddr); bool IsIfaceNameInUse(const std::string &ifaceName, int32_t netId); int32_t UpdateSupplierScore(NetBearType bearerType, uint32_t detectionStatus, uint32_t& supplierId) override; std::string GetNetCapabilitiesAsString(const uint32_t supplierId); diff --git a/services/netconnmanager/include/net_conn_service_iface.h b/services/netconnmanager/include/net_conn_service_iface.h index 03f5ebb38032156899fee469b012327eb458531b..bc6133aade5a379da4c6f9baaa2a69c9735251b5 100644 --- a/services/netconnmanager/include/net_conn_service_iface.h +++ b/services/netconnmanager/include/net_conn_service_iface.h @@ -42,7 +42,6 @@ public: int32_t RestrictBackgroundChanged(bool isRestrictBackground) override; int32_t RegisterNetConnCallback(const sptr &callback) override; int32_t RegisterNetFactoryResetCallback(const sptr &callback) override; - bool IsAddrInOtherNetwork(const std::string &ifaceName, int32_t netId, const INetAddr &netAddr); bool IsIfaceNameInUse(const std::string &ifaceName, int32_t netId); std::string GetNetCapabilitiesAsString(const uint32_t supplierId) const; }; diff --git a/services/netconnmanager/include/network.h b/services/netconnmanager/include/network.h index 6df3bbd781db10e67acbadea833bf442282b844b..d4d3e7324bb11c1395e27e6993e6e33500852ead 100644 --- a/services/netconnmanager/include/network.h +++ b/services/netconnmanager/include/network.h @@ -88,7 +88,6 @@ private: void ResetNetlinkInfo(); bool IsDetectionForDnsSuccess(NetDetectionStatus netDetectionState, bool dnsHealthSuccess); bool IsDetectionForDnsFail(NetDetectionStatus netDetectionState, bool dnsHealthSuccess); - bool IsAddrInOtherNetwork(const INetAddr &netAddr); bool IsIfaceNameInUse(); bool IsNat464Prefered(); std::string GetNetCapabilitiesAsString(const uint32_t supplierId) const; @@ -112,6 +111,7 @@ private: #ifdef FEATURE_SUPPORT_POWERMANAGER bool forbidDetectionFlag_ = false; #endif + bool isNeedResume_ = false; }; } // namespace NetManagerStandard } // namespace OHOS diff --git a/services/netconnmanager/src/net_conn_service.cpp b/services/netconnmanager/src/net_conn_service.cpp index 6ee1bd2b97b06d3acdb6d6c160f218382698a825..7d6c418d27ba4034153b7a3226de33af46350980 100644 --- a/services/netconnmanager/src/net_conn_service.cpp +++ b/services/netconnmanager/src/net_conn_service.cpp @@ -2531,23 +2531,6 @@ int32_t NetConnService::IsPreferCellularUrl(const std::string& url, bool& prefer return 0; } -bool NetConnService::IsAddrInOtherNetwork(const std::string &ifaceName, int32_t netId, const INetAddr &netAddr) -{ - std::lock_guard locker(netManagerMutex_); - for (const auto &network : networks_) { - if (network.second->GetNetId() == netId) { - continue; - } - if (network.second->GetIfaceName() != ifaceName) { - continue; - } - if (network.second->GetNetLinkInfo().HasNetAddr(netAddr)) { - return true; - } - } - return false; -} - bool NetConnService::IsIfaceNameInUse(const std::string &ifaceName, int32_t netId) { std::lock_guard locker(netManagerMutex_); diff --git a/services/netconnmanager/src/net_conn_service_iface.cpp b/services/netconnmanager/src/net_conn_service_iface.cpp index df5fe7c7fa6c2d53cc125ceabf7568b7783a86bf..4623768e7e68754784d0ed39fb4064359984ecb7 100644 --- a/services/netconnmanager/src/net_conn_service_iface.cpp +++ b/services/netconnmanager/src/net_conn_service_iface.cpp @@ -92,10 +92,6 @@ int32_t NetConnServiceIface::RegisterNetFactoryResetCallback(const sptrRegisterNetFactoryResetCallback(callback); } -bool NetConnServiceIface::IsAddrInOtherNetwork(const std::string &ifaceName, int32_t netId, const INetAddr &netAddr) -{ - return NetConnService::GetInstance()->IsAddrInOtherNetwork(ifaceName, netId, netAddr); -} bool NetConnServiceIface::IsIfaceNameInUse(const std::string &ifaceName, int32_t netId) { return NetConnService::GetInstance()->IsIfaceNameInUse(ifaceName, netId); diff --git a/services/netconnmanager/src/network.cpp b/services/netconnmanager/src/network.cpp index 06fba50893f368c5b94a021cb1a54a5c52654d4a..ffaa6933fcf14121e1ebf782b04370f67be2ea49 100644 --- a/services/netconnmanager/src/network.cpp +++ b/services/netconnmanager/src/network.cpp @@ -130,11 +130,6 @@ bool Network::CreateVirtualNetwork() return true; } -bool Network::IsAddrInOtherNetwork(const INetAddr &netAddr) -{ - return NetConnServiceIface().IsAddrInOtherNetwork(netLinkInfo_.ifaceName_, netId_, netAddr); -} - bool Network::IsIfaceNameInUse() { return NetConnServiceIface().IsIfaceNameInUse(netLinkInfo_.ifaceName_, netId_); @@ -156,7 +151,7 @@ bool Network::ReleaseBasicNetwork() std::string netCapabilities = GetNetCapabilitiesAsString(supplierId_); NETMGR_LOG_D("ReleaseBasicNetwork supplierId %{public}u, netId %{public}d, netCapabilities %{public}s", supplierId_, netId_, netCapabilities.c_str()); - if (!IsIfaceNameInUse()) { + if (!IsIfaceNameInUse() || isNeedResume_) { for (const auto &inetAddr : netLinkInfo_.netAddrList_) { int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; NetsysController::GetInstance().DelInterfaceAddress(netLinkInfo_.ifaceName_, inetAddr.address_, @@ -173,6 +168,7 @@ bool Network::ReleaseBasicNetwork() NetsysController::GetInstance().NetworkRemoveRoute(LOCAL_NET_ID, route.iface_, destAddress, nextHop); } } + isNeedResume_ = false; } else { for (const auto &inetAddr : netLinkInfo_.netAddrList_) { int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; @@ -213,8 +209,11 @@ bool Network::UpdateNetLinkInfo(const NetLinkInfo &netLinkInfo) NETMGR_LOG_D("update net link information process"); UpdateStatsCached(netLinkInfo); UpdateInterfaces(netLinkInfo); - UpdateIpAddrs(netLinkInfo); - UpdateRoutes(netLinkInfo); + bool isIfaceNameInUse = NetConnServiceIface().IsIfaceNameInUse(netLinkInfo.ifaceName_, netId_); + if (!isIfaceNameInUse || netCaps_.find(NetCap::NET_CAPABILITY_INTERNET) != netCaps_.end()) { + UpdateIpAddrs(netLinkInfo); + UpdateRoutes(netLinkInfo); + } UpdateDns(netLinkInfo); UpdateMtu(netLinkInfo); UpdateTcpBufferSize(netLinkInfo); @@ -292,9 +291,6 @@ void Network::UpdateIpAddrs(const NetLinkInfo &newNetLinkInfo) // Update: remove old Ips first, then add the new Ips NETMGR_LOG_I("UpdateIpAddrs, old ip addrs size: [%{public}zu]", netLinkInfo_.netAddrList_.size()); for (const auto &inetAddr : netLinkInfo_.netAddrList_) { - if (IsAddrInOtherNetwork(inetAddr)) { - continue; - } if (newNetLinkInfo.HasNetAddr(inetAddr)) { NETMGR_LOG_W("Same ip address:[%{public}s], there is not need to be deleted", CommonUtils::ToAnonymousIp(inetAddr.address_).c_str()); @@ -332,9 +328,6 @@ void Network::HandleUpdateIpAddrs(const NetLinkInfo &newNetLinkInfo) { NETMGR_LOG_I("HandleUpdateIpAddrs, new ip addrs size: [%{public}zu]", newNetLinkInfo.netAddrList_.size()); for (const auto &inetAddr : newNetLinkInfo.netAddrList_) { - if (IsAddrInOtherNetwork(inetAddr)) { - continue; - } if (netLinkInfo_.HasNetAddr(inetAddr)) { NETMGR_LOG_W("Same ip address:[%{public}s], there is no need to add it again", CommonUtils::ToAnonymousIp(inetAddr.address_).c_str()); @@ -736,7 +729,9 @@ void Network::OnHandleNetMonitorResult(NetDetectionStatus netDetectionState, con bool Network::ResumeNetworkInfo() { NetLinkInfo nli = netLinkInfo_; - + if (netCaps_.find(NetCap::NET_CAPABILITY_INTERNET) != netCaps_.end()) { + isNeedResume_ = true; + } NETMGR_LOG_D("ResumeNetworkInfo UpdateBasicNetwork false"); if (!UpdateBasicNetwork(false)) { NETMGR_LOG_E("%s release existed basic network failed", __FUNCTION__); diff --git a/test/netconnmanager/unittest/net_conn_manager_test/net_conn_service_test.cpp b/test/netconnmanager/unittest/net_conn_manager_test/net_conn_service_test.cpp index 5fe82f5949b34ef60f1e674fd361cfd77ea75163..f4355b3d90308f4a90834584e4fa7e4422596a7b 100644 --- a/test/netconnmanager/unittest/net_conn_manager_test/net_conn_service_test.cpp +++ b/test/netconnmanager/unittest/net_conn_manager_test/net_conn_service_test.cpp @@ -273,11 +273,6 @@ HWTEST_F(NetConnServiceTest, UpdateNetLinkInfoTest002, TestSize.Level1) EXPECT_FALSE(ret); ret = NetConnService::GetInstance()->IsIfaceNameInUse("rmnet0", 100); EXPECT_FALSE(ret); - - ret = NetConnService::GetInstance()->IsAddrInOtherNetwork("rmnet0", 1, netAddr); - EXPECT_FALSE(ret); - ret = NetConnService::GetInstance()->IsAddrInOtherNetwork("rmnet0", 100, netAddr); - EXPECT_TRUE(ret); } HWTEST_F(NetConnServiceTest, RequestNetConnectionTest001, TestSize.Level1)