diff --git a/services/networksharemanager/include/networkshare_tracker.h b/services/networksharemanager/include/networkshare_tracker.h index cdfb6ab3e1fd345c60f1d6dda38b0608d2877dcf..a9bef1f1cd676fc00dcffc7149a558a21f4d6198 100644 --- a/services/networksharemanager/include/networkshare_tracker.h +++ b/services/networksharemanager/include/networkshare_tracker.h @@ -303,6 +303,7 @@ private: #ifdef USB_MODOULE int32_t usbShareCount_ = 0; UsbShareState curUsbState_ = UsbShareState::USB_NONE; + int32_t previousFuncs_ = 512; #endif std::atomic_bool isInit = false; int32_t netId_; diff --git a/services/networksharemanager/network_share_config.cfg b/services/networksharemanager/network_share_config.cfg index c25735782446e61cffdc51bf1d91d0c5c91f5d68..2689b992115937a40fc4d36da8a975d60352d920 100644 --- a/services/networksharemanager/network_share_config.cfg +++ b/services/networksharemanager/network_share_config.cfg @@ -1,5 +1,5 @@ share_support:true -usb_regexs:usb\d,rndis\d +usb_regexs:usb\d,ncm\d wifi_regexs:wlan\d,softap\d bluetooth_regexs:bt-pan bt_pan_ipv4_addr:192.168.44.1 diff --git a/services/networksharemanager/src/networkshare_tracker.cpp b/services/networksharemanager/src/networkshare_tracker.cpp index 0fe048ac3e047e33da7ebd0313e97c43a140a7f2..e847ba87c3a90e15e1b7195fd70481b7b4531600 100644 --- a/services/networksharemanager/src/networkshare_tracker.cpp +++ b/services/networksharemanager/src/networkshare_tracker.cpp @@ -762,15 +762,13 @@ int32_t NetworkShareTracker::SetUsbNetworkSharing(bool enable) #ifdef USB_MODOULE auto &usbSrvClient = USB::UsbSrvClient::GetInstance(); if (enable) { - int32_t funcs = 0; curUsbState_ = UsbShareState::USB_SHARING; - int32_t ret = usbSrvClient.GetCurrentFunctions(funcs); + int32_t ret = usbSrvClient.GetCurrentFunctions(previousFuncs_); if (ret != USB::UEC_OK) { NETMGR_EXT_LOG_E("GetCurrentFunctions error[%{public}d].", ret); return NETWORKSHARE_ERROR_USB_SHARING; } - uint32_t tmpData = USB::UsbSrvSupport::FUNCTION_NCM | static_cast(funcs); - ret = usbSrvClient.SetCurrentFunctions(tmpData); + ret = usbSrvClient.SetCurrentFunctions(USB::UsbSrvSupport::FUNCTION_NCM); if (ret != USB::UEC_OK) { NETMGR_EXT_LOG_E("SetCurrentFunctions error[%{public}d].", ret); return NETWORKSHARE_ERROR_USB_SHARING; @@ -780,15 +778,11 @@ int32_t NetworkShareTracker::SetUsbNetworkSharing(bool enable) } NetworkShareHisysEvent::GetInstance().SendBehaviorEvent(usbShareCount_, SharingIfaceType::SHARING_USB); } else { - curUsbState_ = UsbShareState::USB_CLOSING; - int32_t funcs = 0; - int32_t ret = usbSrvClient.GetCurrentFunctions(funcs); - if (ret != USB::UEC_OK) { - NETMGR_EXT_LOG_E("usb GetCurrentFunctions error[%{public}d].", ret); - return NETWORKSHARE_ERROR_USB_SHARING; + if (curUsbState_ == UsbShareState::USB_NONE) { + return NETMANAGER_EXT_SUCCESS; } - uint32_t tmpData = static_cast(funcs) & (~USB::UsbSrvSupport::FUNCTION_NCM); - ret = usbSrvClient.SetCurrentFunctions(tmpData); + curUsbState_ = UsbShareState::USB_CLOSING; + int32_t ret = usbSrvClient.SetCurrentFunctions(previousFuncs_); if (ret != USB::UEC_OK) { NETMGR_EXT_LOG_E("usb SetCurrentFunctions error[%{public}d].", ret); return NETWORKSHARE_ERROR_USB_SHARING; @@ -1170,7 +1164,7 @@ bool NetworkShareTracker::CheckIfUpUsbIface(const std::string &iface) NETMGR_EXT_LOG_E("Failed setting usb ip address"); return false; } - if (NetsysController::GetInstance().InterfaceSetIffUp(iface) != 0) { + if (NetsysController::GetInstance().SetInterfaceUp(iface) != 0) { NETMGR_EXT_LOG_E("Failed setting usb iface up"); return false; } @@ -1187,9 +1181,6 @@ void NetworkShareTracker::InterfaceAdded(const std::string &iface) NETMGR_EXT_LOG_E("configuration_ is null"); return; } - if (!CheckIfUpUsbIface(iface)) { - return; - } if (!isInit) { NETMGR_EXT_LOG_E("eventHandler is null."); return; @@ -1200,6 +1191,9 @@ void NetworkShareTracker::InterfaceAdded(const std::string &iface) return; } NETMGR_EXT_LOG_I("iface[%{public}s], type[%{public}d].", iface.c_str(), static_cast(type)); + if (!CheckIfUpUsbIface(iface)) { + return; + } std::string taskName = "InterfaceAdded_task"; std::function createSubStateMachineFunc = [this, iface, type]() { CreateSubStateMachine(iface, type, false); }; diff --git a/test/networksharemanager/unittest/networkshare_manager_test/networkshare_tracker_test.cpp b/test/networksharemanager/unittest/networkshare_manager_test/networkshare_tracker_test.cpp index 88b9b3653454500312fc8ec1432e82bac950cd47..4433b554e332fc17bf597b1fe343796e79bece55 100644 --- a/test/networksharemanager/unittest/networkshare_manager_test/networkshare_tracker_test.cpp +++ b/test/networksharemanager/unittest/networkshare_manager_test/networkshare_tracker_test.cpp @@ -31,7 +31,7 @@ namespace { using namespace testing::ext; static constexpr const char *WIFI_AP_DEFAULT_IFACE_NAME = "wlan0"; static constexpr const char *USB_AP_DEFAULT_IFACE_NAME = "usb0"; -static constexpr const char *USB_AP_RNDIS_IFACE_NAME = "rndis0"; +static constexpr const char *USB_AP_RNDIS_IFACE_NAME = "ncm0"; static constexpr const char *BLUETOOTH_DEFAULT_IFACE_NAME = "bt-pan"; static constexpr const char *TEST_IFACE_NAME = "testIface"; static constexpr int32_t MAX_CALLBACK_COUNT = 100;