Android 框架实现分析 - 网络 - Native层

libnetutils

        源代码位置:system/core/libnetutils。

        对ifc、dhcp(client)、packet(raw socket)的封装。

toolbox/route

        Route是android工具集中的一员。

        源代码码位于:system/core/toolbox。

netd

        源代码位置:system/netd。

        NetlinkManager接收并处理来自Kernel的UEvent消息。解析后通过mBroadcaster(CommandListener)发送到Framework层的NetworkManagementService。注册三个UEvent事件接收套接字NetlinkHandler,处理NETLINK_KOBJECT_UEVENT、NETLINK_ROUTE、NETLINK_NFLOG类型事件。

        CommandListener、DnsProxyListner、MDnsSdListener分别创建名为“netd”、“dnsproxyd”、“mdns”的监听UNIX套接字,处理客户端命令。都继承FrameworkListener,将受到的请求转发给注册的FrameworkCommand处理。

        CommandListener注册了若干NetdCommand(继承FrameworkCommand)派生类对象,Command收到的命令交给对应的Controller处理。如NatCmd与NatController。

        DnsProxyListner缓存域名解析结果,命令通过GetAddrInfoCmd和GetHostByAddrCmd处理。在Bionic C库中,修改了getaddrinfo方法,当进程没有配置自己特殊的DNS服务器(系统属性net.dns1.<pid>)时,会通过Netd获取域名解析结果。

        Bionic C库重写了getaddrinfo方法,将域名解析请求转发到Netd。实现源文件为bionic/libc/dns/net/getaddrinfo.c

        MDnsSdListener是msdn功能代理的总管,具体功能有嵌套类Handler和Monitor完成。Handler继承NetdCommand,间接继承FrameworkCommand(libsysutils),处理UNIX套接字客户端的连接和请求,转发给mdnsd处理,并在回调方法中把结果广播给所有客户端连接(为什么不是单播?)。Monitor通过线程循环调用poll处理mdnsd服务的应答,期间会间接调用Handler注册的回调。

        CommandListener的命令:

命令

模块

说明

interface

网络接口

InterfaceController、SecondaryTableController

ipfwd

IP转发

TetherController

tether

手机Modem

TetherController

nat

内网转发

BandwidthController

list_ttys

终端设备

PppController

pppd

点对点协议

PppController

softap

软件基站

SoftapController

bandwidth

带宽控制

BandwidthController

idletimer

IdletimerController

resolver

域名解析

NetworkController、ResolverController

firewall

防火墙

FirewallController

  • interface命令详细:

子命令

说明

原理

list

列举网络设备

/sys/class/net/*

driver

控制Kernel中的Driver

libnetcmdiface.so

fwmark

子项目:rule route uid exempt get

iptables,SecondaryTable

route

增删、修改路由表

ifc_utils,SIOCADDRT

ip route

getcfg/setcfg

控制设备、获取设备信息

ifc_utils

clearaddrs

删除设备绑定地址

ifc_utils

ipv6privacyextensions

使用、禁用privacy地址

/proc/sys/net/ipv6/conf/<if>/use_tempaddr

ipv6

启动、禁用无卡IPv6支持

/proc/sys/net/ipv6/conf/<if>/disable_ipv6

getmtu/setmtu

获取、设置MTU

/sys/class/net/*/mt

  • ipfwd命令详细:

子命令

说明

原理

status

ipforward功能状态

/proc/sys/net/ipv4/ip_forward

enable/disable

启动、禁用ipforward功能

  • tether命令详细:

子命令

说明

原理

start

启动网络配置服务

启动、杀死dnsmasq进程

stop

停止网络配置服务

status

网络配置服务状态

判断dnsmasq进程ID

interface

增删侦听网络

与dnsmasq管道通信update_ifaces、update_dns

dns

设置dns服务器

  • nat命令详细:

子命令

说明

原理

enable/disable

启动、停止NAT功能

iptables

  • list_ttys命令详细:

子命令

说明

原理

启动pppd进程

/sys/class/tty/*

  • pppd命令详细:

子命令

说明

原理

attach

tty终端绑定pppd

启动、杀死pppd进程

detach

tty终端解除pppd

  • softap命令详细:

子命令

说明

原理

startap

启动软件AP

启动、杀死softap进程

stopap

停止软件AP

fwreload

重新加载wifi固件

调用WIFI HAL接口

status

软件AP状态

判断softap进程ID

set

配置softap

写入配置文件hostapd.conf

  • bandwidth命令详细:

子命令

说明

原理

enable/disable

iptables

removequota

删除、查询、添加带宽配额

s:可多个IF

i:针对一个或多个IF

getquota

getiquota

setquota

setquotas

removequotas

removeiquota

addnaughtyapps

以uid为目标,开启、关闭单个进程的带宽控制

removenaughtyapps

happybox

addniceapps

removeniceapps

setglobalalert

debugsettetherglobalalert

removeglobalalert

debugremovetetherglobalalert

setsharedalert

removesharedalert

setinterfacealert

removeinterfacealert

getetherstats

  • idletimer命令详细:

子命令

说明

原理

enable/disable

iptables

add

remove

  • resolver命令详细:

子命令

说明

原理

setdefaultif

设置默认网络接口

setifdns

设置网络的DNS服务器

Bionic C库resolv_netid.h提供的私有接口

flushdefaultif

清空DNS缓存

flushif

setifaceforpid

设置、清除pid范围到netid的映射

管理Uid、Pid->NetId的映射

DnsProxyListener:

通过NetworkController根据Uid、Pid获取NetId

clearifaceforpid

setifaceforuidrange

设置、清除uid范围到netid的映射

clearifaceforuidrange

clearifacemapping

清空全部映射

  • firewall命令详细:

子命令

说明

原理

enable/disable

启动、停止防火墙

iptables

is_enable

set_interface_rule

针对单个或多个NIC设置防火墙规则

set_egress_source_rule

针对源IP和目标IP设置防火墙规则

set_egress_dest_rule

set_uid_rule

针对uid设置防火墙规则

ndc

        源代码位置:system/netd/ndc.c。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fighting Horse

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值