From b22819ae07382e3022dbb7b6d92588138601bb34 Mon Sep 17 00:00:00 2001 From: l00635678 Date: Tue, 30 Jul 2024 19:32:30 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E8=9C=82=E7=AA=9D=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9C=8D=E5=8A=A1=E3=80=91=E8=9C=82=E7=AA=9D=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E6=94=AF=E6=8C=81ipv6=EF=BC=8C=E6=89=93=E5=BC=80=E8=9C=82?= =?UTF-8?q?=E7=AA=9D=E7=BD=91=E7=BB=9C=E6=97=B6=EF=BC=8C=E6=9C=89=E6=A6=82?= =?UTF-8?q?=E7=8E=87=E4=BC=9A=E5=8D=A1=E4=BD=8F=E4=B8=8D=E5=BB=BA=E9=93=BE?= =?UTF-8?q?=EF=BC=8C=E7=AD=89=E5=BE=8510s=E5=90=8Eipv6=E5=BB=BA=E9=93=BE?= =?UTF-8?q?=E5=A4=B1=E8=B4=A5=EF=BC=8C=E4=BD=BF=E7=94=A8ipv4=E5=BB=BA?= =?UTF-8?q?=E9=93=BE=EF=BC=8C=E5=AF=B9=E4=B8=9A=E5=8A=A1=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=E6=9C=89=E4=B8=80=E5=AE=9A=E7=9A=84=E5=BD=B1=E5=93=8D=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- services/netconnmanager/src/network.cpp | 49 +++++++++++++------------ 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/services/netconnmanager/src/network.cpp b/services/netconnmanager/src/network.cpp index 2079761e3..bfd1c47e5 100644 --- a/services/netconnmanager/src/network.cpp +++ b/services/netconnmanager/src/network.cpp @@ -148,27 +148,22 @@ std::string Network::GetNetCapabilitiesAsString(const uint32_t supplierId) const bool Network::ReleaseBasicNetwork() { NETMGR_LOG_D("Enter ReleaseBasicNetwork"); - if (isPhyNetCreated_) { - NETMGR_LOG_D("Destroy physical network"); - StopNetDetection(); - 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()) { - for (const auto &inetAddr : netLinkInfo_.netAddrList_) { - int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; - NetsysController::GetInstance().DelInterfaceAddress(netLinkInfo_.ifaceName_, inetAddr.address_, - prefixLen); - } - } else { - for (const auto &inetAddr : netLinkInfo_.netAddrList_) { - int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; - NetsysController::GetInstance().DelInterfaceAddress(netLinkInfo_.ifaceName_, inetAddr.address_, - prefixLen, netCapabilities); - } + if (!isPhyNetCreated_) { + return true; + } + NETMGR_LOG_D("Destroy physical network"); + StopNetDetection(); + 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()) { + for (const auto &inetAddr : netLinkInfo_.netAddrList_) { + int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; + NetsysController::GetInstance().DelInterfaceAddress(netLinkInfo_.ifaceName_, inetAddr.address_, + prefixLen); } for (const auto &route : netLinkInfo_.routeList_) { - std::string destAddress = route.destination_.address_ + "/" + std::to_string(route.destination_.prefixlen_); + auto destAddress = route.destination_.address_ + "/" + std::to_string(route.destination_.prefixlen_); NetsysController::GetInstance().NetworkRemoveRoute(netId_, route.iface_, destAddress, route.gateway_.address_); if (route.destination_.address_ != LOCAL_ROUTE_NEXT_HOP && @@ -178,12 +173,18 @@ bool Network::ReleaseBasicNetwork() NetsysController::GetInstance().NetworkRemoveRoute(LOCAL_NET_ID, route.iface_, destAddress, nextHop); } } - NetsysController::GetInstance().NetworkRemoveInterface(netId_, netLinkInfo_.ifaceName_); - NetsysController::GetInstance().NetworkDestroy(netId_); - NetsysController::GetInstance().DestroyNetworkCache(netId_); - netLinkInfo_.Initialize(); - isPhyNetCreated_ = false; + } else { + for (const auto &inetAddr : netLinkInfo_.netAddrList_) { + int32_t prefixLen = inetAddr.prefixlen_ == 0 ? Ipv4PrefixLen(inetAddr.netMask_) : inetAddr.prefixlen_; + NetsysController::GetInstance().DelInterfaceAddress(netLinkInfo_.ifaceName_, inetAddr.address_, + prefixLen, netCapabilities); + } } + NetsysController::GetInstance().NetworkRemoveInterface(netId_, netLinkInfo_.ifaceName_); + NetsysController::GetInstance().NetworkDestroy(netId_); + NetsysController::GetInstance().DestroyNetworkCache(netId_); + netLinkInfo_.Initialize(); + isPhyNetCreated_ = false; return true; } -- Gitee