Android4.4 以太网和DHCP启动过程介绍

本文详细介绍了Android4.4中以太网的启动流程,包括ConnectivityService的创建、网络接口的初始化、网络策略配置、接口优先级排序以及DHCP服务的启动。此外,还讲解了DHCP的启动过程,包括JNI层接口、DHCP客户端操作和DHCP服务器的四步租约过程。最后,提供了调试网络的相关命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android4.4已经加入了以太网的支持。现在对以太网的初始化流程、网络策略配置、dhcp交互过程等做一些简单的介绍。

一、以太网启动流程

1. 创建ConnectivityService

    SystemServer.java

    // networkmanagement、networkStats、networkPolicy已经提前创建好,并作为参数传入

    connectivity = new ConnectivityService(context,networkManagement,networkStats,networkPolicy);

 

2. 创建NetworkStateTracker和RadioAttributes

    ConnectivityService.java

    //会创建多个Tracker,包括wifi、bluetooth、mobile、ethernet

    mNetTrackers = new NetworkStateTracker[ConnectivityManager.MAX_NETWORK_TYPE+1];

    mRadioAttributes = new RadioAttributes[ConnectivityManager.MAX_RADIO_TYPE+1];

 

3. 加载网络策略配置属性

    String[] raStrings = context.getResources().getStringArray(
                com.android.internal.R.array.radioAttributes);
        for (String raString : raStrings) {
            RadioAttributes r = new RadioAttributes(raString);
            if (VDBG) log("raString=" + raString + " r=" + r);
            if (r.mType > ConnectivityManager.MAX_RADIO_TYPE) {
                loge("Error in radioAttributes - ignoring attempt to define type " + r.mType);
                continue;
            }
            if (mRadioAttributes[r.mType] != null) {
                loge("Error in radioAttributes - ignoring attempt to redefine type " +
                        r.mType);
                continue;
            }
            mRadioAttributes[r.mType] = r;
        }

 

4. 对已支持的网络接口进行优先级排序

    mPriorityList = new int[mNetworksDefined];
        {
            int insertionPoint = mNetworksDefined-1;
            int currentLowest = 0;
            int nextLowest = 0;
            while (insertionPoint > -1) {
                for (NetworkConfig na : mNetConfigs) {
                    if (na == null) continue;
                    if (na.priority < currentLowest) continue;
                    if (na.priority > currentLowest) {
                        if (na.priority < nextLowest || nextLowest == 0) {
                            nextLowest = na.priority;
                        }
                        continue;
                    }
                    mPriorityList[insertionPoint--] = na.type;
                }
                currentLowest = nextLowest;
                nextLowest = 0;
            }
        }

 

5. 启动已支持网络接口的各个tracker

    for (int targetNetworkType : mPriorityList) {
            final NetworkConfig config = mNetConfigs[targetNetworkType];
            final NetworkStateTracker tracker;
            try {
                tracker = netFactory.createTracker(targetNetworkType, config);
                mNetTrackers[targetNetworkType] = tracker;
            } catch (IllegalArgumentException e) {
                Slog.e(TAG, "Problem creating " + getNetworkTypeName(targetNetworkType)
                        + " tracker: " + e);
                continue;
            }

            // 启动该网络接口的监测

            tracker.startMonitoring(context, mTrackerHandler);
      

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值