2.4.2 systemReady函数详解
systemReady函数详解如下所示。
[—>NetworkManagementService.java::systemReady]
- public void systemReady() {
- prepareNativeDaemon();
- }
prepareNativeDaemon用于将系统中一些与带宽控制、防火墙相关的规则发送给Netd去执行,其代码如下所示。
[—>NetworkManagementService.java::prepareNativeDaemon]
- private void prepareNativeDaemon() {
- mBandwidthControlEnabled = false;
- // 判断kernel是否支持bandwidthcontrol
- final boolean hasKernelSupport = new File("/proc/net/xt_qtaguid/ctrl").exists();
- if (hasKernelSupport) {
- try {
- mConnector.execute("bandwidth", "enable");// 使能bandwidth功能
- mBandwidthControlEnabled = true;
- } catch .......
- }
- // 设置Android系统属性"net.qtaguid_enabled"
- SystemProperties.set(PROP_QTAGUID_ENABLED, mBandwidthControlEnabled ? "1" : "0");
- // 设置Bandwidth规则
- synchronized (mQuotaLock) {
- int size = mActiveQuotas.size();
- if (size > 0) {
- // mActiveQuotas保存了每个interface的配额设置
- final HashMap<String, Long> activeQuotas = mActiveQuotas;
- mActiveQuotas = Maps.newHashMap();
- for (Map.Entry<String, Long> entry : activeQuotas.entrySet())
- setInterfaceQuota(entry.getKey(), entry.getValue());
- }
- ......// 其他规则
- }
- // 设置防火墙规则
- setFirewallEnabled(mFirewallEnabled || LockdownVpnTracker.isEnabled());
- }
以setFireWallEnabled函数为例,它和Netd交互的方法如下。
[—>NetworkManagementService.java::setFirewallEnabled]
- public void setFirewallEnabled(boolean enabled) {
- enforceSystemUid();
- try {// 发送firewall相关的Command给Netd
- mConnector.execute("firewall", enabled ? "enable" : "disable");
- mFirewallEnabled = enabled;
- }catch ......
- }
systemReady函数非常简单,本章就不详述了。