Android12 Ethernet - IpClient - Netd 配置流程解析 (一)

本文详细解析了Android12中EthernetService、IpClient和netd在网络配置中的启动流程,重点介绍了EthernetTracker的实例化、EthernetConfigStore的使用以及与Netd的交互过程,展示了IP配置和网络接口跟踪的关键步骤。
摘要由CSDN通过智能技术生成
背景:需求介入

最近有一个配置iptable的需求,正好梳理了Android12 ip信息配置(Ethernet -> IpClient -> netd)的流程。

术语解读

EthernetService:网络配置服务,处理有线网络连接、配置和管理的组件。

IpClient:是一个用于配置和管理网络接口(包括以太网接口)的组件。它负责与底层网络协议栈交互,完成IP地址分配、路由设置等工作。

Netd:是Android系统中的网络守护进程(Network Daemon),它是Android内核网络子系统与用户空间之间的桥梁。netd主要负责网络接口的管理、网络路由表的维护、防火墙规则的配置、以及IP隧道、端口转发等功能

启动流程解析

万能的SystemServer(startOtherServices)会拉起EthernetService

如图:

EthernetService内部实现 如图:

EthernetServiceImpl.start()实现如下: 

可以看到在“EthernetService->EthernetServiceImpl.start()”这一过程中,EthernetServiceImpl没有复杂操作,关键在于EthernetTracker的实例化和start方法的执行

我们一起来看下EthernetTracker实例化都做了什么  如图:

EthernetTracker实例化主要可以归纳为这几部分:

①获取系统服务(INetworkManagementService)
②获取Netd服务(NetdService)
③从本地的xml中获取IP table配置(config.xml ->config_ethernet_interfaces)
④new EthernetConfigStore
⑤new EthernetNetworkFactory&register

即:实例化是为了初始化一些必要的对象和初始配置

 在EthernetTracker实例化时还对 EthernetNetworkFactory进行了注册。

但实际上,EthernetNetworkFactory中并没有实现register的方法....

怎么办呢?我们可以发现EthernetNetworkFactory是继承自NetworkFactory的

那就去NetworkFactory中看下是否有对应的实现,如图:

好了逮住!

直接看下还有哪个崽种实现了了NetworkFactoryShim 如图:

NetworkFactoryLegacyImpl的注册逻辑如下:

下面我们继续关注EthernetTracker的start()方法 如图:

 EthernetTracker.start主要可以归纳为这几部分:
①EthernetConfigStore.read 读取ipconfig.txt的配置信息
②将配置信息载入IpConfiguration中
③INetworkManagementService 注册观察者InterfaceObserver
④Handler执行
trackAvailableInterfaces -> 获取INetworkManagementService的ifaces列表,遍历执行maybeTrackInterface()

⑤maybeTrackInterface ->updateIpConfiguration(如果没有ipconfig.txt就不会执行) &  addInterface
⑥addInterface -> 通知netd加载对应网卡并获取配置,设置网卡模式
⑦最后会调用updateInterfaceState更新状态

④⑤⑥⑦这部分需要根据代码看下具体实现,不然容易懵逼,对应的代码块我罗列出来,可以仔细研读下。 

Handler会执行trackAvailableInterfaces方法 如图:

进而执行maybeTrackInterface 如图:



 

maybeTrackInterface中则需要关注addInterface  如图:



最终会执行updateInterfaceState方法,最终追朔到 EthernetNetworkFactory的updateInterfaceLinkState方法中

 

 继续往下追朔,会执行到内部类中,即 NetworkInterfaceState中

stop可以理解为清空所有配置(恢复初始化),start是初始化网卡逻辑。

至此,Ethernet这部分的代码就全梳理完了,接下来就是IpClient的代码梳理了~ 敬请期待。

 

  • 21
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值