From 48d6901714273bb7d716da7d4a079b3722cd211c Mon Sep 17 00:00:00 2001 From: l00635678 Date: Sun, 15 Oct 2023 16:02:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=94=AF=E6=8C=81=E4=BF=AE=E6=94=B9TcpBufferSi?= =?UTF-8?q?ze?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: l00635678 --- .../netsys_native_service_proxy.cpp | 18 +++++++++++ .../include/i_netsys_service.h | 2 ++ .../include/netsys_ipc_interface_code.h | 1 + .../include/netsys_native_service_proxy.h | 2 ++ services/netconnmanager/include/network.h | 1 + services/netconnmanager/src/network.cpp | 17 +++++++++++ .../include/netsys/net_manager_native.h | 1 + .../include/netsys_native_service.h | 2 ++ .../include/netsys_native_service_stub.h | 2 ++ .../src/netsys/net_manager_native.cpp | 26 ++++++++++++++++ .../src/netsys_native_service.cpp | 6 ++++ .../src/netsys_native_service_stub.cpp | 30 ++++++++++++++----- .../include/i_netsys_controller_service.h | 8 +++++ .../include/netsys_controller.h | 8 +++++ .../include/netsys_controller_service_impl.h | 8 +++++ .../include/netsys_native_client.h | 8 +++++ .../src/netsys_controller.cpp | 10 +++++++ .../src/netsys_controller_service_impl.cpp | 6 ++++ .../src/netsys_native_client.cpp | 11 +++++++ .../net_conn_hievent_test.cpp | 14 +++++++++ .../net_conn_manager_test/network_test.cpp | 1 + .../unit_test/resolver_config.cpp | 8 +++++ test/netmanagernative/unit_test/test.cpp | 3 ++ test/netmanagernative/unit_test/test.h | 1 + .../netsys_controller_service_impl_test.cpp | 4 +++ .../netsys_controller_test.cpp | 7 +++++ .../netsys_native_client_test.cpp | 4 +++ .../netsys_native_service_stub_test.cpp | 5 ++++ .../netsys_native_service_test.cpp | 7 +++++ .../include/netmanager_base_common_utils.h | 2 ++ .../src/netmanager_base_common_utils.cpp | 14 +++++++++ 31 files changed, 230 insertions(+), 7 deletions(-) diff --git a/frameworks/native/netmanagernative/netsys_native_service_proxy.cpp b/frameworks/native/netmanagernative/netsys_native_service_proxy.cpp index 150f9fe39..48badf961 100644 --- a/frameworks/native/netmanagernative/netsys_native_service_proxy.cpp +++ b/frameworks/native/netmanagernative/netsys_native_service_proxy.cpp @@ -244,6 +244,24 @@ int32_t NetsysNativeServiceProxy::SetInterfaceMtu(const std::string &interfaceNa return reply.ReadInt32(); } +int32_t NetsysNativeServiceProxy::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETNATIVE_LOGI("Begin to SetTcpBufferSizes"); + MessageParcel data; + if (!WriteInterfaceToken(data)) { + return ERR_FLATTEN_OBJECT; + } + if (!data.WriteString(tcpBufferSizes)) { + return ERR_FLATTEN_OBJECT; + } + + MessageParcel reply; + MessageOption option; + Remote()->SendRequest(static_cast(NetsysInterfaceCode::NETSYS_SET_TCP_BUFFER_SIZES), data, reply, option); + + return reply.ReadInt32(); +} + int32_t NetsysNativeServiceProxy::GetInterfaceMtu(const std::string &interfaceName) { NETNATIVE_LOGI("Begin to GetInterfaceMtu"); diff --git a/interfaces/innerkits/netmanagernative/include/i_netsys_service.h b/interfaces/innerkits/netmanagernative/include/i_netsys_service.h index 5c68c5e56..84e47340d 100644 --- a/interfaces/innerkits/netmanagernative/include/i_netsys_service.h +++ b/interfaces/innerkits/netmanagernative/include/i_netsys_service.h @@ -48,6 +48,8 @@ public: virtual int32_t SetInterfaceMtu(const std::string &interfaceName, int mtu) = 0; virtual int32_t GetInterfaceMtu(const std::string &interfaceName) = 0; + virtual int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) = 0; + virtual int32_t RegisterNotifyCallback(sptr &callback) = 0; virtual int32_t UnRegisterNotifyCallback(sptr &callback) = 0; diff --git a/interfaces/innerkits/netmanagernative/include/netsys_ipc_interface_code.h b/interfaces/innerkits/netmanagernative/include/netsys_ipc_interface_code.h index 2f7939a16..ffee81e03 100644 --- a/interfaces/innerkits/netmanagernative/include/netsys_ipc_interface_code.h +++ b/interfaces/innerkits/netmanagernative/include/netsys_ipc_interface_code.h @@ -29,6 +29,7 @@ enum class NetsysInterfaceCode { NETSYS_GET_ADDR_INFO, NETSYS_INTERFACE_SET_MTU, NETSYS_INTERFACE_GET_MTU, + NETSYS_SET_TCP_BUFFER_SIZES, NETSYS_REGISTER_NOTIFY_CALLBACK, NETSYS_UNREGISTER_NOTIFY_CALLBACK, NETSYS_NETWORK_ADD_ROUTE, diff --git a/interfaces/innerkits/netmanagernative/include/netsys_native_service_proxy.h b/interfaces/innerkits/netmanagernative/include/netsys_native_service_proxy.h index ee3e70aca..44b66b9d2 100644 --- a/interfaces/innerkits/netmanagernative/include/netsys_native_service_proxy.h +++ b/interfaces/innerkits/netmanagernative/include/netsys_native_service_proxy.h @@ -39,6 +39,8 @@ public: int32_t SetInterfaceMtu(const std::string &interfaceName, int32_t mtu) override; int32_t GetInterfaceMtu(const std::string &interfaceName) override; + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) override; + int32_t RegisterNotifyCallback(sptr &callback) override; int32_t UnRegisterNotifyCallback(sptr &callback) override; diff --git a/services/netconnmanager/include/network.h b/services/netconnmanager/include/network.h index c0fd78a8d..0e813c2a5 100644 --- a/services/netconnmanager/include/network.h +++ b/services/netconnmanager/include/network.h @@ -48,6 +48,7 @@ public: void UpdateRoutes(const NetLinkInfo &newNetLinkInfo); void UpdateDns(const NetLinkInfo &netLinkInfo); void UpdateMtu(const NetLinkInfo &netLinkInfo); + void UpdateTcpBufferSize(const NetLinkInfo &netLinkInfo); void RegisterNetDetectionCallback(const sptr &callback); int32_t UnRegisterNetDetectionCallback(const sptr &callback); void StartNetDetection(bool needReport); diff --git a/services/netconnmanager/src/network.cpp b/services/netconnmanager/src/network.cpp index 7031e39e7..f49301baf 100644 --- a/services/netconnmanager/src/network.cpp +++ b/services/netconnmanager/src/network.cpp @@ -43,6 +43,7 @@ constexpr const char *ERROR_MSG_UPDATE_NET_ROUTES_FAILED = "Update netlink route constexpr const char *ERROR_MSG_SET_NET_RESOLVER_FAILED = "Set network resolver config failed"; constexpr const char *ERROR_MSG_UPDATE_NET_DNSES_FAILED = "Update netlink dns failed,dns list is empty"; constexpr const char *ERROR_MSG_SET_NET_MTU_FAILED = "Set netlink interface mtu failed"; +constexpr const char *ERROR_MSG_SET_NET_TCP_BUFFER_SIZE_FAILED = "Set netlink tcp buffer size failed"; constexpr const char *ERROR_MSG_SET_DEFAULT_NETWORK_FAILED = "Set default network failed"; constexpr const char *ERROR_MSG_CLEAR_DEFAULT_NETWORK_FAILED = "Clear default network failed"; constexpr const char *LOCAL_ROUTE_NEXT_HOP = "0.0.0.0"; @@ -178,6 +179,8 @@ bool Network::UpdateNetLinkInfo(const NetLinkInfo &netLinkInfo) UpdateRoutes(netLinkInfo); UpdateDns(netLinkInfo); UpdateMtu(netLinkInfo); + UpdateTcpBufferSize(netLinkInfo); + netLinkInfo_ = netLinkInfo; if (netSupplierType_ != BEARER_VPN) { StartNetDetection(false); @@ -358,6 +361,20 @@ void Network::UpdateMtu(const NetLinkInfo &netLinkInfo) NETMGR_LOG_D("Network UpdateMtu out."); } +void Network::UpdateTcpBufferSize(const NetLinkInfo &netLinkInfo) +{ + NETMGR_LOG_D("Network UpdateTcpBufferSize in."); + if (netLinkInfo.tcpBufferSizes_ == netLinkInfo_.tcpBufferSizes_) { + NETMGR_LOG_D("Network UpdateTcpBufferSize out. same with before."); + return; + } + int32_t ret = NetsysController::GetInstance().SetTcpBufferSizes(netLinkInfo.tcpBufferSizes_); + if (ret != NETMANAGER_SUCCESS) { + SendSupplierFaultHiSysEvent(FAULT_UPDATE_NETLINK_INFO_FAILED, ERROR_MSG_SET_NET_TCP_BUFFER_SIZE_FAILED); + } + NETMGR_LOG_D("Network UpdateTcpBufferSize out."); +} + void Network::RegisterNetDetectionCallback(const sptr &callback) { NETMGR_LOG_D("Enter RegisterNetDetectionCallback"); diff --git a/services/netmanagernative/include/netsys/net_manager_native.h b/services/netmanagernative/include/netsys/net_manager_native.h index 4a2f391cd..a5947b795 100644 --- a/services/netmanagernative/include/netsys/net_manager_native.h +++ b/services/netmanagernative/include/netsys/net_manager_native.h @@ -74,6 +74,7 @@ public: void ClearInterfaceAddrs(const std::string ifName); int32_t GetInterfaceMtu(std::string ifName); int32_t SetInterfaceMtu(std::string ifName, int32_t mtuValue); + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes); int32_t AddInterfaceAddress(std::string ifName, std::string addrString, int32_t prefixLength); int32_t DelInterfaceAddress(std::string ifName, std::string addrString, int32_t prefixLength); int32_t InterfaceSetIpAddress(const std::string &ifaceName, const std::string &ipAddress); diff --git a/services/netmanagernative/include/netsys_native_service.h b/services/netmanagernative/include/netsys_native_service.h index 1bda28810..84171676a 100644 --- a/services/netmanagernative/include/netsys_native_service.h +++ b/services/netmanagernative/include/netsys_native_service.h @@ -57,6 +57,8 @@ public: int32_t SetInterfaceMtu(const std::string &interfaceName, int32_t mtu) override; int32_t GetInterfaceMtu(const std::string &interfaceName) override; + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) override; + int32_t RegisterNotifyCallback(sptr &callback) override; int32_t UnRegisterNotifyCallback(sptr &callback) override; diff --git a/services/netmanagernative/include/netsys_native_service_stub.h b/services/netmanagernative/include/netsys_native_service_stub.h index 04c6df005..ffcfee1ab 100644 --- a/services/netmanagernative/include/netsys_native_service_stub.h +++ b/services/netmanagernative/include/netsys_native_service_stub.h @@ -44,6 +44,7 @@ public: private: using ServiceInterface = int32_t (NetsysNativeServiceStub::*)(MessageParcel &data, MessageParcel &reply); std::map opToInterfaceMap_; + void InitNetInfoOpToInterfaceMap(); void InitBandwidthOpToInterfaceMap(); void InitFirewallOpToInterfaceMap(); void InitOpToInterfaceMapExt(); @@ -55,6 +56,7 @@ private: int32_t CmdGetAddrInfo(MessageParcel &data, MessageParcel &reply); int32_t CmdSetInterfaceMtu(MessageParcel &data, MessageParcel &reply); int32_t CmdGetInterfaceMtu(MessageParcel &data, MessageParcel &reply); + int32_t CmdSetTcpBufferSizes(MessageParcel &data, MessageParcel &reply); int32_t CmdRegisterNotifyCallback(MessageParcel &data, MessageParcel &reply); int32_t CmdUnRegisterNotifyCallback(MessageParcel &data, MessageParcel &reply); diff --git a/services/netmanagernative/src/netsys/net_manager_native.cpp b/services/netmanagernative/src/netsys/net_manager_native.cpp index 5bc0986d1..cc9e01a6a 100644 --- a/services/netmanagernative/src/netsys/net_manager_native.cpp +++ b/services/netmanagernative/src/netsys/net_manager_native.cpp @@ -32,6 +32,10 @@ namespace OHOS { namespace nmd { namespace { constexpr const char *TUN_CARD_NAME = "vpn-tun"; +constexpr const char *TCP_RMEM_PROC_FILE = "/proc/sys/net/ipv4/tcp_rmem"; +constexpr const char *TCP_WMEM_PROC_FILE = "/proc/sys/net/ipv4/tcp_wmem"; +constexpr uint32_t TCP_BUFFER_SIZES_TYPE = 2; +constexpr uint32_t MAX_TCP_BUFFER_SIZES_COUNT = 6; } // namespace NetManagerNative::NetManagerNative() @@ -201,6 +205,28 @@ int32_t NetManagerNative::SetInterfaceMtu(std::string ifName, int32_t mtuValue) return VpnManager::GetInstance().SetVpnMtu(ifName, mtuValue); } +int32_t NetManagerNative::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETNATIVE_LOGI("tcpBufferSizes:%{public}s", tcpBufferSizes.c_str()); + const std::vector vTcpBufferSizes = Split(tcpBufferSizes, ","); + if (vTcpBufferSizes.size() != MAX_TCP_BUFFER_SIZES_COUNT) { + NETNATIVE_LOGE("NetManagerNative::SetTcpBufferSizes size is not equals MAX_TCP_BUFFER_SIZES_COUNT"); + return -1; + } + std::string tcp_rwmem[TCP_BUFFER_SIZES_TYPE]; + for (size_t i = 0; i < TCP_BUFFER_SIZES_TYPE; i++) { + for (size_t j = 0; j < MAX_TCP_BUFFER_SIZES_COUNT / TCP_BUFFER_SIZES_TYPE; j++) { + tcp_rwmem[i] += Strip(vTcpBufferSizes[i * (MAX_TCP_BUFFER_SIZES_COUNT / TCP_BUFFER_SIZES_TYPE) + j]); + tcp_rwmem[i] += ' '; + } + } + if (!WriteFile(TCP_RMEM_PROC_FILE, tcp_rwmem[0]) || !WriteFile(TCP_WMEM_PROC_FILE, tcp_rwmem[1])) { + NETNATIVE_LOGE("NetManagerNative::SetTcpBufferSizes sysctlbyname fail %{public}d", errno); + return -1; + } + return 0; +} + int32_t NetManagerNative::InterfaceSetIpAddress(const std::string &ifaceName, const std::string &ipAddress) { return InterfaceManager::SetIpAddress(ifaceName.c_str(), ipAddress.c_str()); diff --git a/services/netmanagernative/src/netsys_native_service.cpp b/services/netmanagernative/src/netsys_native_service.cpp index 69003d771..a073d9168 100644 --- a/services/netmanagernative/src/netsys_native_service.cpp +++ b/services/netmanagernative/src/netsys_native_service.cpp @@ -208,6 +208,12 @@ int32_t NetsysNativeService::GetInterfaceMtu(const std::string &interfaceName) return netsysService_->GetInterfaceMtu(interfaceName); } +int32_t NetsysNativeService::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETNATIVE_LOG_D("SetTcpBufferSizes Begin"); + return netsysService_->SetTcpBufferSizes(tcpBufferSizes); +} + int32_t NetsysNativeService::RegisterNotifyCallback(sptr &callback) { NETNATIVE_LOG_D("RegisterNotifyCallback"); diff --git a/services/netmanagernative/src/netsys_native_service_stub.cpp b/services/netmanagernative/src/netsys_native_service_stub.cpp index 0995666e4..271572ebc 100644 --- a/services/netmanagernative/src/netsys_native_service_stub.cpp +++ b/services/netmanagernative/src/netsys_native_service_stub.cpp @@ -40,6 +40,17 @@ constexpr uint32_t MAX_ROUTE_TABLE_SIZE = 128; } // namespace NetsysNativeServiceStub::NetsysNativeServiceStub() +{ + InitNetInfoOpToInterfaceMap(); + InitBandwidthOpToInterfaceMap(); + InitFirewallOpToInterfaceMap(); + InitOpToInterfaceMapExt(); + InitNetDiagOpToInterfaceMap(); + uids_ = {UID_ROOT, UID_SHELL, UID_NET_MANAGER, UID_WIFI, UID_RADIO, UID_HIDUMPER_SERVICE, + UID_SAMGR, UID_PARAM_WATCHER, UID_EDM}; +} + +void NetsysNativeServiceStub::InitNetInfoOpToInterfaceMap() { opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_SET_RESOLVER_CONFIG)] = &NetsysNativeServiceStub::CmdSetResolverConfig; @@ -55,6 +66,8 @@ NetsysNativeServiceStub::NetsysNativeServiceStub() &NetsysNativeServiceStub::CmdSetInterfaceMtu; opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_INTERFACE_GET_MTU)] = &NetsysNativeServiceStub::CmdGetInterfaceMtu; + opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_SET_TCP_BUFFER_SIZES)] = + &NetsysNativeServiceStub::CmdSetTcpBufferSizes; opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_REGISTER_NOTIFY_CALLBACK)] = &NetsysNativeServiceStub::CmdRegisterNotifyCallback; opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_UNREGISTER_NOTIFY_CALLBACK)] = @@ -83,13 +96,6 @@ NetsysNativeServiceStub::NetsysNativeServiceStub() &NetsysNativeServiceStub::CmdAddInterfaceAddress; opToInterfaceMap_[static_cast(NetsysInterfaceCode::NETSYS_INTERFACE_DEL_ADDRESS)] = &NetsysNativeServiceStub::CmdDelInterfaceAddress; - - InitBandwidthOpToInterfaceMap(); - InitFirewallOpToInterfaceMap(); - InitOpToInterfaceMapExt(); - InitNetDiagOpToInterfaceMap(); - uids_ = {UID_ROOT, UID_SHELL, UID_NET_MANAGER, UID_WIFI, UID_RADIO, UID_HIDUMPER_SERVICE, - UID_SAMGR, UID_PARAM_WATCHER, UID_EDM}; } void NetsysNativeServiceStub::InitBandwidthOpToInterfaceMap() @@ -436,6 +442,16 @@ int32_t NetsysNativeServiceStub::CmdGetInterfaceMtu(MessageParcel &data, Message return ERR_NONE; } +int32_t NetsysNativeServiceStub::CmdSetTcpBufferSizes(MessageParcel &data, MessageParcel &reply) +{ + std::string tcpBufferSizes = data.ReadString(); + int32_t result = SetTcpBufferSizes(tcpBufferSizes); + reply.WriteInt32(result); + NETNATIVE_LOG_D("SetTcpBufferSizes has recved result %{public}d", result); + + return ERR_NONE; +} + int32_t NetsysNativeServiceStub::CmdRegisterNotifyCallback(MessageParcel &data, MessageParcel &reply) { NETNATIVE_LOG_D("Begin to dispatch cmd RegisterNotifyCallback"); diff --git a/services/netsyscontroller/include/i_netsys_controller_service.h b/services/netsyscontroller/include/i_netsys_controller_service.h index d8a629d86..1bfa8a241 100644 --- a/services/netsyscontroller/include/i_netsys_controller_service.h +++ b/services/netsyscontroller/include/i_netsys_controller_service.h @@ -172,6 +172,14 @@ public: */ virtual int32_t SetInterfaceMtu(const std::string &ifName, int32_t mtu) = 0; + /** + * Set tcp buffer sizes + * + * @param tcpBufferSizes tcpBufferSizes + * @return Return the return value of the netsys interface call + */ + virtual int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) = 0; + /** * Add ip address * diff --git a/services/netsyscontroller/include/netsys_controller.h b/services/netsyscontroller/include/netsys_controller.h index 713322c5e..4257b8f18 100644 --- a/services/netsyscontroller/include/netsys_controller.h +++ b/services/netsyscontroller/include/netsys_controller.h @@ -164,6 +164,14 @@ public: */ int32_t SetInterfaceMtu(const std::string &ifName, int32_t mtu); + /** + * @brief Set tcp buffer sizes + * + * @param tcpBufferSizes tcpBufferSizes + * @return Return the return value of the netsys interface call + */ + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes); + /** * Add ip address * diff --git a/services/netsyscontroller/include/netsys_controller_service_impl.h b/services/netsyscontroller/include/netsys_controller_service_impl.h index 4172a02c9..e7bf9295e 100644 --- a/services/netsyscontroller/include/netsys_controller_service_impl.h +++ b/services/netsyscontroller/include/netsys_controller_service_impl.h @@ -157,6 +157,14 @@ public: */ int32_t SetInterfaceMtu(const std::string &ifName, int32_t mtu) override; + /** + * Set tcp buffer sizes + * + * @param tcpBufferSizes tcpBufferSizes + * @return Return the return value of the netsys interface call + */ + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) override; + /** * Add ip address * diff --git a/services/netsyscontroller/include/netsys_native_client.h b/services/netsyscontroller/include/netsys_native_client.h index 2b415eea3..89337f95a 100644 --- a/services/netsyscontroller/include/netsys_native_client.h +++ b/services/netsyscontroller/include/netsys_native_client.h @@ -186,6 +186,14 @@ public: */ int32_t SetInterfaceMtu(const std::string &ifName, int32_t mtu); + /** + * Set tcp buffer sizes + * + * @param tcpBufferSizes tcpBufferSizes + * @return Return the return value of the netsys interface call + */ + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes); + /** * Add ip address * diff --git a/services/netsyscontroller/src/netsys_controller.cpp b/services/netsyscontroller/src/netsys_controller.cpp index 8d94049b2..530dceb68 100644 --- a/services/netsyscontroller/src/netsys_controller.cpp +++ b/services/netsyscontroller/src/netsys_controller.cpp @@ -239,6 +239,16 @@ int32_t NetsysController::SetInterfaceMtu(const std::string &ifName, int32_t mtu return netsysService_->SetInterfaceMtu(ifName, mtu); } +int32_t NetsysController::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETMGR_LOG_D("Set tcp buffer sizes: tcpBufferSizes[%{public}s]", tcpBufferSizes.c_str()); + if (netsysService_ == nullptr) { + NETMGR_LOG_E("netsysService_ is null"); + return NETSYS_NETSYSSERVICE_NULL; + } + return netsysService_->SetTcpBufferSizes(tcpBufferSizes); +} + int32_t NetsysController::AddInterfaceAddress(const std::string &ifName, const std::string &ipAddr, int32_t prefixLength) { diff --git a/services/netsyscontroller/src/netsys_controller_service_impl.cpp b/services/netsyscontroller/src/netsys_controller_service_impl.cpp index fedde6093..f9a02bd09 100644 --- a/services/netsyscontroller/src/netsys_controller_service_impl.cpp +++ b/services/netsyscontroller/src/netsys_controller_service_impl.cpp @@ -164,6 +164,12 @@ int32_t NetsysControllerServiceImpl::SetInterfaceMtu(const std::string &ifName, return netsysClient_.SetInterfaceMtu(ifName, mtu); } +int32_t NetsysControllerServiceImpl::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETMGR_LOG_I("Set tcp buffer sizes: tcpBufferSizes[%{public}s]", tcpBufferSizes.c_str()); + return netsysClient_.SetTcpBufferSizes(tcpBufferSizes); +} + int32_t NetsysControllerServiceImpl::AddInterfaceAddress(const std::string &ifName, const std::string &ipAddr, int32_t prefixLength) { diff --git a/services/netsyscontroller/src/netsys_native_client.cpp b/services/netsyscontroller/src/netsys_native_client.cpp index 198fffdd2..4ae5d1f56 100644 --- a/services/netsyscontroller/src/netsys_native_client.cpp +++ b/services/netsyscontroller/src/netsys_native_client.cpp @@ -359,6 +359,17 @@ int32_t NetsysNativeClient::SetInterfaceMtu(const std::string &ifName, int32_t m return proxy->SetInterfaceMtu(ifName, mtu); } +int32_t NetsysNativeClient::SetTcpBufferSizes(const std::string &tcpBufferSizes) +{ + NETMGR_LOG_D("Set tcp buffer sizes: tcpBufferSizes[%{public}s]", tcpBufferSizes.c_str()); + auto proxy = GetProxy(); + if (proxy == nullptr) { + NETMGR_LOG_E("proxy is nullptr"); + return NETMANAGER_ERR_GET_PROXY_FAIL; + } + return proxy->SetTcpBufferSizes(tcpBufferSizes); +} + int32_t NetsysNativeClient::AddInterfaceAddress(const std::string &ifName, const std::string &ipAddr, int32_t prefixLength) { diff --git a/test/netconnmanager/unittest/net_conn_manager_test/net_conn_hievent_test.cpp b/test/netconnmanager/unittest/net_conn_manager_test/net_conn_hievent_test.cpp index 5d2a0e126..5c58b6ab7 100644 --- a/test/netconnmanager/unittest/net_conn_manager_test/net_conn_hievent_test.cpp +++ b/test/netconnmanager/unittest/net_conn_manager_test/net_conn_hievent_test.cpp @@ -269,5 +269,19 @@ HWTEST_F(NetConnHiEventTest, NetConnHiEventTest_011, TestSize.Level1) int32_t ret = NetConnService::GetInstance()->RegisterNetConnCallback(nullptr, nullptr, 0); EXPECT_NE(ret, NETMANAGER_SUCCESS); } + +/** + * @tc.name: NetConnHiEventTest_012 + * @tc.desc: Test NetConnManager HiSysEvent:UpdateTcpBufferSize + * @tc.type: FUNC + */ +HWTEST_F(NetConnHiEventTest, NetConnHiEventTest_012, TestSize.Level1) +{ + sptr network = GetNetwork(); + ASSERT_NE(network, nullptr); + sptr netLinkInfo = GetNetLinkInfo(); + ASSERT_NE(netLinkInfo, nullptr); + network->UpdateTcpBufferSize(*netLinkInfo); +} } // namespace NetManagerStandard } // namespace OHOS diff --git a/test/netconnmanager/unittest/net_conn_manager_test/network_test.cpp b/test/netconnmanager/unittest/net_conn_manager_test/network_test.cpp index 3cdc9afed..476dad3f5 100644 --- a/test/netconnmanager/unittest/net_conn_manager_test/network_test.cpp +++ b/test/netconnmanager/unittest/net_conn_manager_test/network_test.cpp @@ -113,6 +113,7 @@ HWTEST_F(NetworkTest, UpdateTest001, TestSize.Level1) instance_->UpdateRoutes(info); instance_->UpdateDns(info); instance_->UpdateMtu(info); + instance_->UpdateTcpBufferSize(info); instance_->RegisterNetDetectionCallback(callabck_); int32_t ret = instance_->UnRegisterNetDetectionCallback(callabck_); EXPECT_EQ(ret, NETMANAGER_SUCCESS); diff --git a/test/netmanagernative/unit_test/resolver_config.cpp b/test/netmanagernative/unit_test/resolver_config.cpp index 07edd66a6..f2ad59a40 100644 --- a/test/netmanagernative/unit_test/resolver_config.cpp +++ b/test/netmanagernative/unit_test/resolver_config.cpp @@ -171,3 +171,11 @@ void TestRegisterNotifyCallback() return; } + +void TestSetTcpBufferSizes() +{ + std::string tcpBufferSizes = "524288,1048576,2097152,262144,524288,1048576"; + std::cout << "begin to SetTcpBufferSizes" << std::endl; + ret = netsysServiceK_->SetTcpBufferSizes(tcpBufferSizes); + NETNATIVE_LOGE("NETSYS: SetTcpBufferSizes ret=%{public}d", ret); +} \ No newline at end of file diff --git a/test/netmanagernative/unit_test/test.cpp b/test/netmanagernative/unit_test/test.cpp index d1e40f4cc..3bfdfb90b 100644 --- a/test/netmanagernative/unit_test/test.cpp +++ b/test/netmanagernative/unit_test/test.cpp @@ -55,6 +55,7 @@ enum class InterfaceMenu { NETWORK_ADD_INTERFACE_WIFI = 27, NETWORK_REMOVE_INTERFACE_WIFI = 28, NETWORK_SET_DEFAULT_WIFI = 29, + SET_TCP_BUFFER_SIZES = 30, INPUT_QUIT = 100, }; @@ -92,6 +93,7 @@ void Init() g_memberFuncMap[InterfaceMenu::NETWORK_ADD_INTERFACE_WIFI] = TestNetworkAddInterfaceWIFI; g_memberFuncMap[InterfaceMenu::NETWORK_REMOVE_INTERFACE_WIFI] = TestNetworkRemoveInterfaceWIFI; g_memberFuncMap[InterfaceMenu::NETWORK_SET_DEFAULT_WIFI] = TestNetworkSetDefaultWIFI; + g_memberFuncMap[InterfaceMenu::SET_TCP_BUFFER_SIZES] = TestSetTcpBufferSizes; } void Prompt() @@ -127,6 +129,7 @@ void Prompt() "27 TestNetworkAddInterfaceWIFI\n" "28 TestNetworkRemoveInterfaceWIFI\n" "29 TestNetworkSetDefaultWIFI\n" + "30 SetTcpBufferSizes\n" "100:exit \n"); } diff --git a/test/netmanagernative/unit_test/test.h b/test/netmanagernative/unit_test/test.h index e51072bc0..74bce3329 100644 --- a/test/netmanagernative/unit_test/test.h +++ b/test/netmanagernative/unit_test/test.h @@ -52,6 +52,7 @@ void TestNetworkGetDefaultUnion(void); void TestNetworkSetDefaultWIFI(void); void TestNetworkAddInterfaceWIFI(void); void TestNetworkRemoveInterfaceWIFI(void); +void TestSetTcpBufferSizes(void); #endif // !NETSYS_MAIN_TEST_H__ diff --git a/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_service_impl_test.cpp b/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_service_impl_test.cpp index cf49a12e7..b08801506 100644 --- a/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_service_impl_test.cpp +++ b/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_service_impl_test.cpp @@ -249,6 +249,10 @@ HWTEST_F(NetsysControllerServiceImplTest, SetInternetPermission, TestSize.Level1 auto ret = instance_->SetInternetPermission(uid, allow); EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_ERROR); + + std::string tcpBufferSizes = "524288,1048576,2097152,262144,524288,1048576"; + ret = instance_->SetTcpBufferSizes(tcpBufferSizes); + EXPECT_EQ(ret, NetManagerStandard::NETMANAGER_SUCCESS); } } // namespace NetManagerStandard diff --git a/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_test.cpp b/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_test.cpp index 9468424bf..2146025ad 100644 --- a/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_test.cpp +++ b/test/netmanagernative/unittest/netsys_manager_test/netsys_controller_test.cpp @@ -50,6 +50,7 @@ static constexpr const char *PARCEL_IPV4_ADDR = "192.168.55.121"; static constexpr const char *IP_ADDR = "172.17.5.245"; static constexpr const char *INTERFACE_NAME = ""; static constexpr const char *IF_NAME = "iface0"; +static constexpr const char *TCP_BUFFER_SIZES = "524288,1048576,2097152,262144,524288,1048576"; const int NET_ID = 2; const int PERMISSION = 5; const int PREFIX_LENGTH = 23; @@ -296,6 +297,9 @@ HWTEST_F(NetsysControllerTest, NetsysControllerTest006, TestSize.Level1) ret = NetsysController::GetInstance().GetInterfaceMtu(ETH0); EXPECT_EQ(ret, -1); + + ret = NetsysController::GetInstance().SetTcpBufferSizes(TCP_BUFFER_SIZES); + EXPECT_EQ(ret, -1); } HWTEST_F(NetsysControllerTest, NetsysControllerTest007, TestSize.Level1) @@ -864,6 +868,9 @@ HWTEST_F(NetsysControllerTest, NetsysControllerErr006, TestSize.Level1) ret = instance_->SetIptablesCommandForRes(iface, iface); EXPECT_EQ(ret, NetManagerStandard::NETSYS_NETSYSSERVICE_NULL); + + ret = instance_->SetTcpBufferSizes(""); + EXPECT_EQ(ret, NetManagerStandard::NETSYS_NETSYSSERVICE_NULL); } HWTEST_F(NetsysControllerTest, NetDiagGetRouteTable001, TestSize.Level1) diff --git a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_client_test.cpp b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_client_test.cpp index e8ad35053..013588f81 100644 --- a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_client_test.cpp +++ b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_client_test.cpp @@ -35,6 +35,7 @@ static constexpr const char *IFACE = "test0"; static constexpr const char *IP_ADDR = "172.17.5.245"; static constexpr const char *INTERFACE_NAME = "interface_name"; static constexpr const char *REQUESTOR = "requestor"; +static constexpr const char *TCP_BUFFER_SIZES = "524288,1048576,2097152,262144,524288,1048576"; const int32_t MTU = 111; const int32_t NET_ID = 2; const int32_t IFACEFD = 5; @@ -111,6 +112,9 @@ HWTEST_F(NetsysNativeClientTest, NetsysNativeClientTest001, TestSize.Level1) ret = nativeClient_.SetInterfaceMtu(IF_NAME, MTU); EXPECT_EQ(ret, -1); + + ret = nativeClient_.SetTcpBufferSizes(TCP_BUFFER_SIZES); + EXPECT_EQ(ret, -1); } HWTEST_F(NetsysNativeClientTest, NetsysNativeClientTest002, TestSize.Level1) diff --git a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_stub_test.cpp b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_stub_test.cpp index c9d27e55c..43c385389 100644 --- a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_stub_test.cpp +++ b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_stub_test.cpp @@ -188,6 +188,11 @@ public: return 0; } + int32_t SetTcpBufferSizes(const std::string &tcpBufferSizes) override + { + return 0; + } + int32_t GetInterfaceMtu(const std::string &interfaceName) override { return 0; diff --git a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_test.cpp b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_test.cpp index 70d08555f..ce3e463d5 100644 --- a/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_test.cpp +++ b/test/netmanagernative/unittest/netsys_manager_test/netsys_native_service_test.cpp @@ -236,6 +236,13 @@ HWTEST_F(NetsysNativeServiceTest, SetInterfaceMtu001, TestSize.Level1) EXPECT_EQ(ret, 0); } +HWTEST_F(NetsysNativeServiceTest, SetTcpBufferSizes001, TestSize.Level1) +{ + std::string tcpBufferSizes = "524288,1048576,2097152,262144,524288,1048576"; + int32_t ret = instance_->SetTcpBufferSizes(tcpBufferSizes); + EXPECT_EQ(ret, 0); +} + HWTEST_F(NetsysNativeServiceTest, GetInterfaceMtu001, TestSize.Level1) { std::string testName = "test0"; diff --git a/utils/common_utils/include/netmanager_base_common_utils.h b/utils/common_utils/include/netmanager_base_common_utils.h index 45199f641..19d1aad85 100644 --- a/utils/common_utils/include/netmanager_base_common_utils.h +++ b/utils/common_utils/include/netmanager_base_common_utils.h @@ -65,6 +65,8 @@ inline uint64_t GetCurrentSecond() return std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()) .count(); } + +bool WriteFile(const std::string &filePath, const std::string &fileContent); } // namespace OHOS::NetManagerStandard::CommonUtils #endif /* COMMUNICATIONNETMANAGER_BASE_COMMON_UTILS_H */ diff --git a/utils/common_utils/src/netmanager_base_common_utils.cpp b/utils/common_utils/src/netmanager_base_common_utils.cpp index 9905c45b8..c0b8fcf7b 100644 --- a/utils/common_utils/src/netmanager_base_common_utils.cpp +++ b/utils/common_utils/src/netmanager_base_common_utils.cpp @@ -29,6 +29,7 @@ #include #include #include +#include #include "net_manager_constants.h" #include "net_mgr_log_wrapper.h" @@ -608,4 +609,17 @@ bool IsValidDomain(const std::string &domain) } return true; } + +bool WriteFile(const std::string &filePath, const std::string &fileContent) +{ + std::fstream file(filePath.c_str(), std::fstream::out | std::fstream::trunc); + if (!file.is_open()) { + NETMGR_LOG_E("write file=%{public}s fstream failed. err %{public}d %{public}s", + filePath.c_str(), errno, strerror(errno)); + return false; + } + file << fileContent.c_str(); + file.close(); + return true; +} } // namespace OHOS::NetManagerStandard::CommonUtils -- Gitee