• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include <net/if.h>
17 
18 #include "interface_manager.h"
19 #include "net_manager_constants.h"
20 #include "netmanager_base_common_utils.h"
21 #include "netnative_log_wrapper.h"
22 #include "network_permission.h"
23 #include "route_manager.h"
24 #include "traffic_manager.h"
25 
26 #include "net_manager_native.h"
27 
28 using namespace OHOS::NetManagerStandard::CommonUtils;
29 std::vector<uint32_t> OHOS::nmd::NetManagerNative::interfaceIdex_;
30 
31 namespace OHOS {
32 namespace nmd {
NetManagerNative()33 NetManagerNative::NetManagerNative()
34     : bandwidthManager_(std::make_shared<BandwidthManager>()),
35       connManager_(std::make_shared<ConnManager>()),
36       firewallManager_(std::make_shared<FirewallManager>()),
37       routeManager_(std::make_shared<RouteManager>()),
38       interfaceManager_(std::make_shared<InterfaceManager>()),
39       sharingManager_(std::make_shared<SharingManager>()),
40       dnsManager_(std::make_shared<DnsManager>())
41 {
42 }
43 
GetOriginInterfaceIndex()44 void NetManagerNative::GetOriginInterfaceIndex()
45 {
46     std::vector<std::string> ifNameList = InterfaceManager::GetInterfaceNames();
47     interfaceIdex_.clear();
48     for (auto iter = ifNameList.begin(); iter != ifNameList.end(); ++iter) {
49         uint32_t infIndex = if_nametoindex((*iter).c_str());
50         interfaceIdex_.push_back(infIndex);
51     }
52 }
53 
UpdateInterfaceIndex(uint32_t infIndex)54 void NetManagerNative::UpdateInterfaceIndex(uint32_t infIndex)
55 {
56     interfaceIdex_.push_back(infIndex);
57 }
58 
GetCurrentInterfaceIndex()59 std::vector<uint32_t> NetManagerNative::GetCurrentInterfaceIndex()
60 {
61     return interfaceIdex_;
62 }
63 
Init()64 void NetManagerNative::Init()
65 {
66     GetOriginInterfaceIndex();
67 }
68 
NetworkReinitRoute()69 int32_t NetManagerNative::NetworkReinitRoute()
70 {
71     return connManager_->ReinitRoute();
72 }
73 
NetworkCreatePhysical(int32_t netId,int32_t permission)74 int32_t NetManagerNative::NetworkCreatePhysical(int32_t netId, int32_t permission)
75 {
76     return connManager_->CreatePhysicalNetwork(static_cast<uint16_t>(netId),
77                                                static_cast<NetworkPermission>(permission));
78 }
79 
NetworkDestroy(int32_t netId)80 int32_t NetManagerNative::NetworkDestroy(int32_t netId)
81 {
82     return connManager_->DestroyNetwork(netId);
83 }
84 
NetworkAddInterface(int32_t netId,std::string interfaceName)85 int32_t NetManagerNative::NetworkAddInterface(int32_t netId, std::string interfaceName)
86 {
87     return connManager_->AddInterfaceToNetwork(netId, interfaceName);
88 }
89 
NetworkRemoveInterface(int32_t netId,std::string interfaceName)90 int32_t NetManagerNative::NetworkRemoveInterface(int32_t netId, std::string interfaceName)
91 {
92     return connManager_->RemoveInterfaceFromNetwork(netId, interfaceName);
93 }
94 
InterfaceAddAddress(std::string ifName,std::string addrString,int32_t prefixLength)95 int32_t NetManagerNative::InterfaceAddAddress(std::string ifName, std::string addrString, int32_t prefixLength)
96 {
97     return interfaceManager_->AddAddress(ifName.c_str(), addrString.c_str(), prefixLength);
98 }
99 
InterfaceDelAddress(std::string ifName,std::string addrString,int32_t prefixLength)100 int32_t NetManagerNative::InterfaceDelAddress(std::string ifName, std::string addrString, int32_t prefixLength)
101 {
102     return interfaceManager_->DelAddress(ifName.c_str(), addrString.c_str(), prefixLength);
103 }
104 
NetworkAddRoute(int32_t netId,std::string interfaceName,std::string destination,std::string nextHop)105 int32_t NetManagerNative::NetworkAddRoute(int32_t netId, std::string interfaceName, std::string destination,
106                                           std::string nextHop)
107 {
108     return connManager_->AddRoute(netId, interfaceName, destination, nextHop);
109 }
110 
NetworkRemoveRoute(int32_t netId,std::string interfaceName,std::string destination,std::string nextHop)111 int32_t NetManagerNative::NetworkRemoveRoute(int32_t netId, std::string interfaceName, std::string destination,
112                                              std::string nextHop)
113 {
114     return connManager_->RemoveRoute(netId, interfaceName, destination, nextHop);
115 }
116 
NetworkGetDefault()117 int32_t NetManagerNative::NetworkGetDefault()
118 {
119     return connManager_->GetDefaultNetwork();
120 }
121 
NetworkSetDefault(int32_t netId)122 int32_t NetManagerNative::NetworkSetDefault(int32_t netId)
123 {
124     dnsManager_->SetDefaultNetwork(netId);
125     return connManager_->SetDefaultNetwork(netId);
126 }
127 
NetworkClearDefault()128 int32_t NetManagerNative::NetworkClearDefault()
129 {
130     return connManager_->ClearDefaultNetwork();
131 }
132 
NetworkSetPermissionForNetwork(int32_t netId,NetworkPermission permission)133 int32_t NetManagerNative::NetworkSetPermissionForNetwork(int32_t netId, NetworkPermission permission)
134 {
135     return connManager_->SetPermissionForNetwork(netId, permission);
136 }
137 
InterfaceGetList()138 std::vector<std::string> NetManagerNative::InterfaceGetList()
139 {
140     return InterfaceManager::GetInterfaceNames();
141 }
142 
InterfaceGetConfig(std::string interfaceName)143 nmd::InterfaceConfigurationParcel NetManagerNative::InterfaceGetConfig(std::string interfaceName)
144 {
145     return InterfaceManager::GetIfaceConfig(interfaceName.c_str());
146 }
147 
InterfaceSetConfig(nmd::InterfaceConfigurationParcel parcel)148 void NetManagerNative::InterfaceSetConfig(nmd::InterfaceConfigurationParcel parcel)
149 {
150     InterfaceManager::SetIfaceConfig(parcel);
151 }
152 
InterfaceClearAddrs(const std::string ifName)153 void NetManagerNative::InterfaceClearAddrs(const std::string ifName) {}
154 
InterfaceGetMtu(std::string ifName)155 int32_t NetManagerNative::InterfaceGetMtu(std::string ifName)
156 {
157     return InterfaceManager::GetMtu(ifName.c_str());
158 }
159 
InterfaceSetMtu(std::string ifName,int32_t mtuValue)160 int32_t NetManagerNative::InterfaceSetMtu(std::string ifName, int32_t mtuValue)
161 {
162     std::string mtu = std::to_string(mtuValue);
163     return InterfaceManager::SetMtu(ifName.c_str(), mtu.c_str());
164 }
165 
InterfaceSetIpAddress(const std::string & ifaceName,const std::string & ipAddress)166 int32_t NetManagerNative::InterfaceSetIpAddress(const std::string &ifaceName, const std::string &ipAddress)
167 {
168     return InterfaceManager::SetIpAddress(ifaceName.c_str(), ipAddress.c_str());
169 }
170 
InterfaceSetIffUp(std::string ifaceName)171 int32_t NetManagerNative::InterfaceSetIffUp(std::string ifaceName)
172 {
173     return InterfaceManager::SetIffUp(ifaceName.c_str());
174 }
175 
GetFwmarkForNetwork(int32_t netId)176 nmd::MarkMaskParcel NetManagerNative::GetFwmarkForNetwork(int32_t netId)
177 {
178     nmd::MarkMaskParcel mark;
179     mark.mark = connManager_->GetFwmarkForNetwork(netId);
180     mark.mask = 0XFFFF;
181     return mark;
182 }
183 
NetworkAddRouteParcel(int32_t netId,RouteInfoParcel parcel)184 int32_t NetManagerNative::NetworkAddRouteParcel(int32_t netId, RouteInfoParcel parcel)
185 {
186     return connManager_->AddRoute(netId, parcel.ifName, parcel.destination, parcel.nextHop);
187 }
188 
NetworkRemoveRouteParcel(int32_t netId,RouteInfoParcel parcel)189 int32_t NetManagerNative::NetworkRemoveRouteParcel(int32_t netId, RouteInfoParcel parcel)
190 {
191     return connManager_->RemoveRoute(netId, parcel.ifName, parcel.destination, parcel.nextHop);
192 }
193 
SetProcSysNet(int32_t ipversion,int32_t which,const std::string ifname,const std::string parameter,const std::string value)194 int32_t NetManagerNative::SetProcSysNet(int32_t ipversion, int32_t which, const std::string ifname,
195                                         const std::string parameter, const std::string value)
196 {
197     return 0;
198 }
199 
GetProcSysNet(int32_t ipversion,int32_t which,const std::string ifname,const std::string parameter,std::string * value)200 int32_t NetManagerNative::GetProcSysNet(int32_t ipversion, int32_t which, const std::string ifname,
201                                         const std::string parameter, std::string *value)
202 {
203     return 0;
204 }
205 
GetCellularRxBytes()206 int64_t NetManagerNative::GetCellularRxBytes()
207 {
208     return 0;
209 }
210 
GetCellularTxBytes()211 int64_t NetManagerNative::GetCellularTxBytes()
212 {
213     return 0;
214 }
215 
GetAllRxBytes()216 int64_t NetManagerNative::GetAllRxBytes()
217 {
218     return nmd::TrafficManager::GetAllRxTraffic();
219 }
220 
GetAllTxBytes()221 int64_t NetManagerNative::GetAllTxBytes()
222 {
223     return nmd::TrafficManager::GetAllTxTraffic();
224 }
225 
GetUidTxBytes(int32_t uid)226 int64_t NetManagerNative::GetUidTxBytes(int32_t uid)
227 {
228     return 0;
229 }
230 
GetUidRxBytes(int32_t uid)231 int64_t NetManagerNative::GetUidRxBytes(int32_t uid)
232 {
233     return 0;
234 }
235 
GetIfaceRxBytes(std::string interfaceName)236 int64_t NetManagerNative::GetIfaceRxBytes(std::string interfaceName)
237 {
238     nmd::TrafficStatsParcel interfaceTraffic = nmd::TrafficManager::GetInterfaceTraffic(interfaceName);
239     return interfaceTraffic.rxBytes;
240 }
241 
GetIfaceTxBytes(std::string interfaceName)242 int64_t NetManagerNative::GetIfaceTxBytes(std::string interfaceName)
243 {
244     nmd::TrafficStatsParcel interfaceTraffic = nmd::TrafficManager::GetInterfaceTraffic(interfaceName);
245     return interfaceTraffic.txBytes;
246 }
247 
IpEnableForwarding(const std::string & requester)248 int32_t NetManagerNative::IpEnableForwarding(const std::string &requester)
249 {
250     return sharingManager_->IpEnableForwarding(requester);
251 }
252 
IpDisableForwarding(const std::string & requester)253 int32_t NetManagerNative::IpDisableForwarding(const std::string &requester)
254 {
255     return sharingManager_->IpDisableForwarding(requester);
256 }
257 
EnableNat(const std::string & downstreamIface,const std::string & upstreamIface)258 int32_t NetManagerNative::EnableNat(const std::string &downstreamIface, const std::string &upstreamIface)
259 {
260     return sharingManager_->EnableNat(downstreamIface, upstreamIface);
261 }
262 
DisableNat(const std::string & downstreamIface,const std::string & upstreamIface)263 int32_t NetManagerNative::DisableNat(const std::string &downstreamIface, const std::string &upstreamIface)
264 {
265     return sharingManager_->DisableNat(downstreamIface, upstreamIface);
266 }
267 
IpfwdAddInterfaceForward(const std::string & fromIface,const std::string & toIface)268 int32_t NetManagerNative::IpfwdAddInterfaceForward(const std::string &fromIface, const std::string &toIface)
269 {
270     return sharingManager_->IpfwdAddInterfaceForward(fromIface, toIface);
271 }
272 
IpfwdRemoveInterfaceForward(const std::string & fromIface,const std::string & toIface)273 int32_t NetManagerNative::IpfwdRemoveInterfaceForward(const std::string &fromIface, const std::string &toIface)
274 {
275     return sharingManager_->IpfwdRemoveInterfaceForward(fromIface, toIface);
276 }
277 
DnsSetResolverConfig(uint16_t netId,uint16_t baseTimeoutMsec,uint8_t retryCount,const std::vector<std::string> & servers,const std::vector<std::string> & domains)278 int32_t NetManagerNative::DnsSetResolverConfig(uint16_t netId, uint16_t baseTimeoutMsec, uint8_t retryCount,
279                                                const std::vector<std::string> &servers,
280                                                const std::vector<std::string> &domains)
281 {
282     return dnsManager_->SetResolverConfig(netId, baseTimeoutMsec, retryCount, servers, domains);
283 }
284 
DnsGetResolverConfig(uint16_t netId,std::vector<std::string> & servers,std::vector<std::string> & domains,uint16_t & baseTimeoutMsec,uint8_t & retryCount)285 int32_t NetManagerNative::DnsGetResolverConfig(uint16_t netId, std::vector<std::string> &servers,
286                                                std::vector<std::string> &domains, uint16_t &baseTimeoutMsec,
287                                                uint8_t &retryCount)
288 {
289     return dnsManager_->GetResolverConfig(netId, servers, domains, baseTimeoutMsec, retryCount);
290 }
291 
DnsCreateNetworkCache(uint16_t netId)292 int32_t NetManagerNative::DnsCreateNetworkCache(uint16_t netId)
293 {
294     return dnsManager_->CreateNetworkCache(netId);
295 }
296 
DnsDestroyNetworkCache(uint16_t netId)297 int32_t NetManagerNative::DnsDestroyNetworkCache(uint16_t netId)
298 {
299     return dnsManager_->DestroyNetworkCache(netId);
300 }
301 
BandwidthEnableDataSaver(bool enable)302 int32_t NetManagerNative::BandwidthEnableDataSaver(bool enable)
303 {
304     return bandwidthManager_->EnableDataSaver(enable);
305 }
306 
BandwidthSetIfaceQuota(const std::string & ifName,int64_t bytes)307 int32_t NetManagerNative::BandwidthSetIfaceQuota(const std::string &ifName, int64_t bytes)
308 {
309     return bandwidthManager_->SetIfaceQuota(ifName, bytes);
310 }
311 
BandwidthRemoveIfaceQuota(const std::string & ifName)312 int32_t NetManagerNative::BandwidthRemoveIfaceQuota(const std::string &ifName)
313 {
314     return bandwidthManager_->RemoveIfaceQuota(ifName);
315 }
316 
BandwidthAddDeniedList(uint32_t uid)317 int32_t NetManagerNative::BandwidthAddDeniedList(uint32_t uid)
318 {
319     return bandwidthManager_->AddDeniedList(uid);
320 }
321 
BandwidthRemoveDeniedList(uint32_t uid)322 int32_t NetManagerNative::BandwidthRemoveDeniedList(uint32_t uid)
323 {
324     return bandwidthManager_->RemoveDeniedList(uid);
325 }
326 
BandwidthAddAllowedList(uint32_t uid)327 int32_t NetManagerNative::BandwidthAddAllowedList(uint32_t uid)
328 {
329     return bandwidthManager_->AddAllowedList(uid);
330 }
331 
BandwidthRemoveAllowedList(uint32_t uid)332 int32_t NetManagerNative::BandwidthRemoveAllowedList(uint32_t uid)
333 {
334     return bandwidthManager_->RemoveAllowedList(uid);
335 }
336 
FirewallSetUidsAllowedListChain(uint32_t chain,const std::vector<uint32_t> & uids)337 int32_t NetManagerNative::FirewallSetUidsAllowedListChain(uint32_t chain, const std::vector<uint32_t> &uids)
338 {
339     auto chainType = static_cast<NetManagerStandard::ChainType>(chain);
340     return firewallManager_->SetUidsAllowedListChain(chainType, uids);
341 }
342 
FirewallSetUidsDeniedListChain(uint32_t chain,const std::vector<uint32_t> & uids)343 int32_t NetManagerNative::FirewallSetUidsDeniedListChain(uint32_t chain, const std::vector<uint32_t> &uids)
344 {
345     auto chainType = static_cast<NetManagerStandard::ChainType>(chain);
346     return firewallManager_->SetUidsDeniedListChain(chainType, uids);
347 }
348 
FirewallEnableChain(uint32_t chain,bool enable)349 int32_t NetManagerNative::FirewallEnableChain(uint32_t chain, bool enable)
350 {
351     auto chainType = static_cast<NetManagerStandard::ChainType>(chain);
352     return firewallManager_->EnableChain(chainType, enable);
353 }
354 
FirewallSetUidRule(uint32_t chain,uint32_t uid,uint32_t firewallRule)355 int32_t NetManagerNative::FirewallSetUidRule(uint32_t chain, uint32_t uid, uint32_t firewallRule)
356 {
357     auto chainType = static_cast<NetManagerStandard::ChainType>(chain);
358     auto rule = static_cast<NetManagerStandard::FirewallRule>(firewallRule);
359     return firewallManager_->SetUidRule(chainType, uid, rule);
360 }
361 
ShareDnsSet(uint16_t netId)362 void NetManagerNative::ShareDnsSet(uint16_t netId)
363 {
364     dnsManager_->ShareDnsSet(netId);
365 }
366 
StartDnsProxyListen()367 void NetManagerNative::StartDnsProxyListen()
368 {
369     dnsManager_->StartDnsProxyListen();
370 }
371 
StopDnsProxyListen()372 void NetManagerNative::StopDnsProxyListen()
373 {
374     dnsManager_->StopDnsProxyListen();
375 }
376 
DnsGetAddrInfo(const std::string & hostName,const std::string & serverName,const AddrInfo & hints,uint16_t netId,std::vector<AddrInfo> & res)377 int32_t NetManagerNative::DnsGetAddrInfo(const std::string &hostName, const std::string &serverName,
378                                          const AddrInfo &hints, uint16_t netId, std::vector<AddrInfo> &res)
379 {
380     return dnsManager_->GetAddrInfo(hostName, serverName, hints, netId, res);
381 }
382 
GetDumpInfo(std::string & infos)383 void NetManagerNative::GetDumpInfo(std::string &infos)
384 {
385     connManager_->GetDumpInfos(infos);
386     dnsManager_->GetDumpInfo(infos);
387 }
388 } // namespace nmd
389 } // namespace OHOS
390