1# Net Manager 2 3## 简介 4 5网络管理主要分为网络管理、策略管理、流量管理、网络共享、VPN管理以及以太网连接等模块,其中网络管理、策略管理、流量管理为基础服务,归档在netmanager_base仓,以太网连接、网络共享、VPN管理三个模块为可裁剪扩展模块,归档在netmanager_ext仓,netmanager_ext编译构建依赖netmanager_base库内容。如图1:网络管理架构图; 6 7**图 1** 网络管理架构图 8 9 10 11## 目录 12 13``` 14foundation/communication/netmanager_base/ 15├─figures # 架构图 16├─frameworks # 接口实现 17│ ├─js # JS接口 18│ └─native # native接口 19├─interfaces # 接口定义 20│ ├─innerkits # native接口 21│ └─kits # JS接口 22├─sa_profile # sa定义 23├─services # IPC服务端实现 24│ ├─common # 公用代码存放目录 25│ ├─etc # 进程配置文件目录 26│ ├─netconnmanager # 网络管理核心代码目录 27│ ├─netmanagernative # 网络子系统服务端代码 28│ ├─netpolicymanager # 策略管理核心代码目录 29│ ├─netstatsmanager # 流量管理核心代码目录 30│ ├─netsys_bpf_stats # bpfReader为service提供功能接口目录 31│ └─netsyscontroller # netsys客户端代码目录 32├─test # 测试代码 33│ ├─fuzztest # FUZZ测试目录 34│ ├─netconnmanager # 网络管理单元测试目录 35│ ├─netmanagernative # 网络子系统服务端单元测试目录 36│ ├─netpolicymanager # 策略管理单元测试目录 37│ ├─netstatsmanager # 流量统计单元测试目录 38│ └─netsys_bpf_stats # bpfReader单元测试目录 39└─utils # 公共功能 40 ├─common_utils # 共同库目录 41 ├─log # 日志实现目录 42 └─napi_utils # 公用NAPI代码目录 43``` 44 45## 约束 46 47- 开发语言:C++ JS 48 49## 接口说明 50 51| 类型 | 接口 | 功能说明 | 52| ---- | ---- | ---- | 53| ohos.net.connection | function getDefaultNet(callback: AsyncCallback\<NetHandle>): void; |获取一个含有默认网络的netId的NetHandle对象,使用callback回调 | 54| ohos.net.connection | function getDefaultNet(): Promise\<NetHandle>; |获取一个含有默认网络的netId的NetHandle对象,使用Promise回调 | 55| ohos.net.connection | function getAllNets(callback: AsyncCallback\<Array\<NetHandle>>): void;| 获取所处于连接状态的网络的MetHandle对象列表,使用callback回调 | 56| ohos.net.connection | function getAllNets(): Promise\<Array\<NetHandle>>;| 获取所有处于连接状态的网络的NetHandle对象列表,使用Promise回调 | 57| ohos.net.connection | function getConnectionProperties(netHandle: NetHandle, callback: AsyncCallback\<ConnectionProperties>): void; |查询默认网络的链路信息,使用callback回调 | 58| ohos.net.connection | function getConnectionProperties(netHandle: NetHandle): Promise\<ConnectionProperties>; |查询默认网络的链路信息,使用Promise回调 | 59| ohos.net.connection | function getNetCapabilities(netHandle: NetHandle, callback: AsyncCallback\<NetCapabilities>): void; |查询默认网络的能力集信息,使用callback回调 | 60| ohos.net.connection | function getNetCapabilities(netHandle: NetHandle): Promise\<NetCapabilities>; |查询默认网络的能力集信息,使用Promise回调 | 61| ohos.net.connection | function hasDefaultNet(callback: AsyncCallback\<boolean>): void; |查询是否有默认网络,使用callback回调 | 62| ohos.net.connection | function hasDefaultNet(): Promise\<boolean>; |查询是否有默认网络,使用Promise回调 | 63| ohos.net.connection | function getAddressesByName(host: string, callback: AsyncCallback\<Array\<NetAddress>>): void; |使用对应网络解析域名,获取所有IP,使用callback回调 | 64| ohos.net.connection | function getAddressesByName(host: string): Promise\<Array\<NetAddress>>; |使用默认网络解析域名,获取所有IP,使用Promise回调 | 65| ohos.net.connection | function createNetConnection(netSpecifier?: NetSpecifier, timeout?: number): NetConnection; | 返回一个NetConnection对象,netSpecifier指定关注的网络的各项特征,timeout是超时时间(单位是毫秒),netSpecifier是timeout的必要条件,两者都没有则表示关注默认网络 | 66| ohos.net.connection | function enableAirplaneMode(callback: AsyncCallback\<void>): void; | 设置网络为飞行模式,使用callback回调 | 67| ohos.net.connection | function enableAirplaneMode(): Promise\<void>;|设置网络为飞行模式,使用Promise回调 | 68| ohos.net.connection | function disableAirplaneMode(callback: AsyncCallback\<void>): void;| 关闭网络飞行模式,使用callback回调 | 69| ohos.net.connection | function disableAirplaneMode(): Promise\<void>;| 关闭网络飞行模式,使用Promise回调 | 70| ohos.net.connection | function reportNetConnected(netHandle: NetHandle, callback: AsyncCallback\<void>): void;| 向网络管理报告网络处于可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调 | 71| ohos.net.connection | function reportNetConnected(netHandle: NetHandle): Promise\<void>;| 向网络管理报告网络处于可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用Promise回调 | 72| ohos.net.connection | function reportNetDisconnected(netHandle: NetHandle, callback: AsyncCallback\<void>): void;| 向网络管理报告网络处于不可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用callback回调 | 73| ohos.net.connection | function reportNetDisconnected(netHandle: NetHandle): Promise\<void>;| 向网络管理报告网络处于不可用状态,调用此接口说明应用程序认为网络的可用性(ohos.net.connection.NetCap.NET_CAPABILITY_VAILDATED)与网络管理不一致。使用Promise回调 | 74| ohos.net.connection.NetHandle | bindSocket(socketParam: TCPSocket \| UDPSocket, callback: AsyncCallback\<void>): void; | 将TCPSocket或UDPSockett绑定到当前网络,使用callback回调 | 75| ohos.net.connection.NetHandle | bindSocket(socketParam: TCPSocket \| UDPSocket): Promise\<void>;| 将TCPSocket或UDPSockett绑定到当前网络,使用Promise回调 | 76| ohos.net.connection.NetHandle | getAddressesByName(host: string, callback: AsyncCallback\<Array\<NetAddress>>): void; |使用默认网络解析域名,获取所有IP,使用callback回调 | 77| ohos.net.connection.NetHandle | getAddressesByName(host: string): Promise\<Array\<NetAddress>>; |使用对应网络解析域名,获取所有IP,使用Promise回调 | 78| ohos.net.connection.NetHandle | getAddressByName(host: string, callback: AsyncCallback\<NetAddress>): void; |使用对应网络解析域名,获取一个IP,调用callbac | 79| ohos.net.connection.NetHandle | getAddressByName(host: string): Promise\<NetAddress>; |使用对应网络解析域名,获取一个IP,使用Promise回调 | 80| ohos.net.connection.NetConnection | on(type: 'netAvailable', callback: Callback\<NetHandle>): void; |监听收到网络可用的事件 | 81| ohos.net.connection.NetConnection | on(type: 'netCapabilitiesChange', callback: Callback\<{ netHandle: NetHandle, netCap: NetCapabilities }>): void; |监听网络能力变化的事件 | 82| ohos.net.connection.NetConnection | on(type: 'netConnectionPropertiesChange', callback: Callback\<{ netHandle: NetHandle, connectionProperties: ConnectionProperties }>): void; |监听网络连接信息变化的事件 | 83| ohos.net.connection.NetConnection | on(type: 'netLost', callback: Callback\<NetHandle>): void; |监听网络丢失的事件 | 84| ohos.net.connection.NetConnection | on(type: 'netUnavailable', callback: Callback\<void>): void; |监听网络不可用的事件 | 85| ohos.net.connection.NetConnection | register(callback: AsyncCallback\<void>): void; |注册默认网络或者createNetConnection中指定的网络的监听 | 86| ohos.net.connection.NetConnection | unregister(callback: AsyncCallback\<void>): void; |注销默认网络或者createNetConnection中指定的网络的监听 | 87| @ohos.net.policy | function setBackgroundPolicy(allow: boolean, callback: AsyncCallback\<void>): void; | 设置后台网络策略,callback为回调函数 | 88| @ohos.net.policy | function setBackgroundPolicy(allow: boolean): Promise\<void>; | 设置后台网络策略 | 89| @ohos.net.policy | function getBackgroundPolicy(callback: AsyncCallback\<NetBackgroundPolicy>): void; | 获取后台网络限制策略,callback为回调函数 | 90| @ohos.net.policy | function getBackgroundPolicy(): Promise\<NetBackgroundPolicy>; | 获取后台网络限制策略 | 91| @ohos.net.policy | function setPolicyByUid(uid: number, policy: NetUidPolicy, callback: AsyncCallback\<void>): void; | 设置对应uid应用的访问计量网络的策略,callback为回调函数 | 92| @ohos.net.policy | function setPolicyByUid(uid: number, policy: NetUidPolicy): Promise\<void>; | 设置对应uid应用的访问计量网络的策略 | 93| @ohos.net.policy | function getPolicyByUid(uid: number, callback: AsyncCallback\<NetUidPolicy>): void; | 通过应用uid获取策略,callback为回调函数 | 94| @ohos.net.policy | function getPolicyByUid(uid: number): Promise\<NetUidPolicy>; | 通过应用uid获取策略 | 95| @ohos.net.policy | function getUidsByPolicy(policy: NetUidPolicy, callback: AsyncCallback\<Array\<number>>): void; | 通过策略获取设置这一策略的应用uid数组,callback为回调函数 | 96| @ohos.net.policy | function getUidsByPolicy(policy: NetUidPolicy): Promise\<Array\<number>>; | 通过策略获取设置这一策略的应用uid数组 | 97| @ohos.net.policy | function getNetQuotaPolicies(callback: AsyncCallback\<Array\<NetQuotaPolicy>>): void; | 获取计量网络策略,callback为回调函数 | 98| @ohos.net.policy | function getNetQuotaPolicies(): Promise\<Array\<NetQuotaPolicy>>; | 获取计量网络策略 | 99| @ohos.net.policy | function setNetQuotaPolicies(quotaPolicies: Array\<NetQuotaPolicy>, callback: AsyncCallback\<void>): void; | 设置计量网络策略,callback为回调函数 | 100| @ohos.net.policy | function setNetQuotaPolicies(quotaPolicies: Array\<NetQuotaPolicy>): Promise\<void>; | 设置计量网络策略 | 101| @ohos.net.policy | function restoreAllPolicies(simId: string, callback: AsyncCallback\<void>): void; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略,callback为回调函数 | 102| @ohos.net.policy | function restoreAllPolicies(simId: string): Promise\<void>; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略 | 103| @ohos.net.policy | function isUidNetAllowedIsMetered(uid: number, isMetered: boolean, callback: AsyncCallback\<boolean>): void; | 获取对应uid能否访问计量或非计量网络,callback为回调函数 | 104| @ohos.net.policy | function isUidNetAllowedIsMetered(uid: number, isMetered: boolean): Promise\<boolean>; | 获取对应uid能否访问计量或非计量网络 | 105| @ohos.net.policy | function isUidNetAllowedIface(uid: number, iface: string, callback: AsyncCallback\<boolean>): void; | 获取对应uid能否访问指定的iface的网络,callback为回调函数 | 106| @ohos.net.policy | function isUidNetAllowedIface(uid: number, iface: string): Promise\<boolean>; | 获取对应uid能否访问指定的iface的网络 | 107| @ohos.net.policy | function setDeviceIdleAllowlist(uid: number, isAllow: boolean, callback: AsyncCallback\<void>): void | 设置指定uid能应用是否在休眠防火墙的白名单,callback为回调函数 | 108| @ohos.net.policy | function setDeviceIdleAllowlist(uid: number, isAllow: boolean): Promise\<void>; | 设置指定uid能应用是否在休眠防火墙的白名单 | 109| @ohos.net.policy | function getDeviceIdleAllowlist(callback: AsyncCallback\<Array\<number>>): void | 获取休眠模式白名单所包含的uid数组,callback为回调函数 | 110| @ohos.net.policy | function getDeviceIdleAllowlist(): Promise\<Array\<number>>; | 获取休眠模式白名单所包含的uid数组 | 111| @ohos.net.policy | function getBackgroundPolicyByUid(uid: number, callback: AsyncCallback\<NetBackgroundPolicy>): void | 获取指定uid能否访问后台网络,callback为回调函数 | 112| @ohos.net.policy | function getBackgroundPolicyByUid(uid: number): Promise\<NetBackgroundPolicy>; | 获取指定uid能否访问后台网络 | 113| @ohos.net.policy | function resetPolicies(simId: string, callback: AsyncCallback\<void>): void; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略,callback为回调函数 | 114| @ohos.net.policy | function resetPolicies(simId: string): Promise\<void>; | 重置对应sim卡id的蜂窝网络、后台网络策略、防火墙策略、应用对应的策略 | 115| @ohos.net.policy | function updateRemindPolicy(netType: NetBearType, simId: string, remindType: RemindType, callback: AsyncCallback\<void>): void | 更新提醒策略,netType为网络类型,simId为SIM卡id, remindType为提醒类型。callback为回调函数| 116| @ohos.net.policy | function updateRemindPolicy(netType: NetBearType, simId: string, remindType: RemindType): Promise\<void>; | 更新提醒策略,netType为网络类型,simId为SIM卡id, remindType为提醒类型 | 117| @ohos.net.policy | function on(type: 'netUidPolicyChange', callback: Callback\<{ uid: number, policy: NetUidPolicy }>): void; | 注册policy发生改变时的回调 | 118| @ohos.net.policy | function off(type: 'netUidPolicyChange', callback: Callback\<void>): void; | 反注册policy发生改变时的回调 | 119| @ohos.net.policy | function on(type: "netUidRuleChange", callback: Callback\<{ uid: number, rule: NetUidRule }>): void; | 注册rule发生改变时的回调 | 120| @ohos.net.policy | function off(type: "netUidRuleChange", callback: Callback\<void>): void; | 反注册rule发生改变时的回调 | 121| @ohos.net.policy | function on(type: "netMeteredIfacesChange", callback: Callback\<Array\<string>>): void; | 注册计量iface发生改变时的回调 | 122| @ohos.net.policy | function off(type: "netMeteredIfacesChange", callback: Callback\<void>): void; | 反注册计量iface发生改变时的回调 | 123| @ohos.net.policy | function on(type: "netQuotaPolicyChange", callback: Callback\<Array\<NetQuotaPolicy>>): void; | 注册计量网络策略发生改变时的回调 | 124| @ohos.net.policy | function off(type: "netQuotaPolicyChange", callback: Callback\<void>): void; | 反注册计量网络策略发生改变时的回调 | 125| @ohos.net.policy | function on(type: "netBackgroundPolicyChange", callback: Callback\<boolean>): void; | 注册后台网络策略发生改变时的回调 | 126| @ohos.net.policy | function off(type: "netBackgroundPolicyChange", callback: Callback\<void>): void; | 反注册后台网络策略发生改变时的回调 | 127| ohos.net.statistics | function getIfaceRxBytes(nic: string, callback: AsyncCallback\<number>): void; |查询指定网卡的下行流量数据,使用callback回调| 128| ohos.net.statistics | function getIfaceRxBytes(nic: string): Promise\<number>; |获取指定网卡的下行流量数据,使用Promise回调 | 129| ohos.net.statistics | function getIfaceTxBytes(nic: string, callback: AsyncCallback\<number>): void; |查询指定网卡的上行流量数据,使用callback回调 | 130| ohos.net.statistics | function getIfaceRxBytes(nic: string): Promise\<number>; |获取指定网卡的上行流量数据,使用Promise回调 | 131| ohos.net.statistics | function getCellularRxBytes(callback: AsyncCallback\<number>): void; |查询指蜂窝网的下行流量数据,使用callback回调 | 132| ohos.net.statistics | function getCellularRxBytes(): Promise\<number>; |查询指蜂窝网的下行流量数据,使用Promise回调 | 133| ohos.net.statistics | function getCellularTxBytes(callback: AsyncCallback\<number>): void; |查询蜂窝网的上行流量数据,使用callback回调 | 134| ohos.net.statistics | function getCellularTxBytes(): Promise\<number>; |查询蜂窝网的上行流量数据,使用Promise回调 | 135| ohos.net.statistics | function getAllRxBytes(callback: AsyncCallback\<number>): void; |查询所有网卡的下行流量数据,使用callback回调 | 136| ohos.net.statistics | function getAllRxBytes(): Promise\<number>; |查询所有网卡的下行流量数据,使用Promise回调 | 137| ohos.net.statistics | function getAllTxBytes(callback: AsyncCallback\<number>): void; |查询所有网卡的上行流量数据,使用callback回调 | 138| ohos.net.statistics | function getAllTxBytes(): Promise\<number>; |查询所有网卡的上行流量数据,使用Promise回调 | 139| ohos.net.statistics | function getUidRxBytes(uid: number, callback: AsyncCallback\<number>): void; |查询指定应用的下行流量数据,使用callback回调 | 140| ohos.net.statistics | function getUidRxBytes(uid: number): Promise\<number>; |查询指定应用的下行流量数据,使用Promise回调 | 141| ohos.net.statistics | function getUidTxBytes(uid: number, callback: AsyncCallback\<number>): void; |查询指定应用的上行流量数据,使用callback回调 | 142| ohos.net.statistics | function getUidTxBytes(uid: number): Promise\<number>; |查询指定应用的上行流量数据,使用Promise回调 | 143 144完整的JS API说明以及实例代码请参考:[网络管理](https://gitee.com/openharmony/docs/blob/master/zh-cn/application-dev/reference/apis/js-apis-net-connection.md)。 145 146## 接口使用说明 147 148### 注册默认网络或者createNetConnection中指定的网络的监听 149 150* 示例 151 ```javascript 152 import connection from '@ohos.net.connection' 153 ``` 154 ```javascript 155 let connection = connection.createNetConnection() 156 connection.on('netAvailable', function(data) { 157 console.log(JSON.stringify(data)) 158 }) 159 connection.register(function (error) { 160 if (error) { 161 console.log(JSON.stringify(error)) 162 } 163 }) 164 ``` 165 166### 获取所有注册的网络 167 168* 示例 169 ```javascript 170 import connection from '@ohos.net.connection' 171 ``` 172 ```javascript 173 connection.getAllNets((err, data) => { 174 this.callBack(err, data); 175 if (data) { 176 this.netList = data; 177 } 178 }) 179 ``` 180 181### 查询默认网络的链路信息 182 183* 示例 184 ```javascript 185 import connection from '@ohos.net.connection' 186 ``` 187 ```javascript 188 connection.getConnectionProperties(this.netHandle, (err, data) => { 189 this.callBack(err, data); 190 }) 191 ``` 192 193### 使用对应网络解析域名,获取所有IP 194 195* 示例 196 ```javascript 197 import connection from '@ohos.net.connection' 198 ``` 199 ```javascript 200 connection.getAddressesByName(this.host, (err, data) => { 201 this.callBack(err, data); 202 }) 203 ``` 204 205### 设置后台网络策略 206 207* 示例 208 209 ```javascript 210 import policy from '@ohos.net.policy' 211 ``` 212 213 ```javascript 214 policy.setBackgroundPolicy(Boolean(Number.parseInt(this.isBoolean)), (err, data) => { 215 this.callBack(err, data); 216 }) 217 ``` 218 219### 获取后台网络限制策略 220 221* 示例 222 223 ```javascript 224 import policy from '@ohos.net.policy' 225 ``` 226 ```javascript 227 policy.getBackgroundPolicy((err, data) => { 228 this.callBack(err, data); 229 }) 230 ``` 231 232### 设置对应uid应用的访问计量网络的策略 233 234* 示例 235 236 ```javascript 237 import policy from '@ohos.net.policy' 238 ``` 239 ```javascript 240 policy.setPolicyByUid(Number.parseInt(this.firstParam), Number.parseInt(this.currentNetUidPolicy), (err, data) => { 241 this.callBack(err, data); 242 }) 243 ``` 244 245### 设置指定uid能应用是否在休眠防火墙的白名单 246 247* 示例 248 249 ```javascript 250 import policy from '@ohos.net.policy' 251 ``` 252 253 ```javascript 254 policy.setDeviceIdleAllowList(Number.parseInt(this.firstParam), Boolean(Number.parseInt(this.isBoolean)), (err, data) => { 255 this.callBack(err, data); 256 }) 257 258### 查询指定网卡的下行流量数据,以Promise的方式异步返回执行结果。 259 260* 示例 261 ```javascript 262 import statistics from '@ohos.net.statistics' 263 ``` 264 ```javascript 265 statistics.getIfaceRxBytes("wlan0").then(function (addresses) { 266 console.log(JSON.stringify(addresses)) 267 }) 268 ``` 269 270### 查询指定网卡的上行流量数据,以Promise的方式异步返回执行结果。。 271 272* 示例 273 ```javascript 274 import statistics from '@ohos.net.statistics' 275 ``` 276 ```javascript 277 statistics.getIfaceTxBytes("wlan0").then(function (addresses) { 278 console.log(JSON.stringify(addresses)) 279 }) 280 ``` 281 282## 相关仓 283 284[网络管理子系统](https://gitee.com/openharmony/docs/blob/master/zh-cn/readme/%E7%BD%91%E7%BB%9C%E7%AE%A1%E7%90%86%E5%AD%90%E7%B3%BB%E7%BB%9F.md) 285 286**communication_netmanager_base** 287 288[communication_netmanager_ext](https://gitee.com/openharmony/communication_netmanager_ext) 289 290[communication_netstack](https://gitee.com/openharmony/communication_netstack) 291