[RK3288][Android6.0] 网络服务Netd初始化流程小结
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
Netd: Network Daemon.
负责网络配置,操作,管理,查询等功能.
封装底层各种类型网络,如PPP,SOFTAP等,给framework提供统一接口.
说白了就是接收framework命令往下发,接收kernel命令往上发.
路径: system/netd
[kris@:~/rk3288/system/netd]$ ls
Android.mk client include server
[kris@:~/rk3288/system/netd]$ tree
.
├── Android.mk
├── client
│ ├── Android.mk
│ ├── FwmarkClient.cpp
│ ├── FwmarkClient.h
│ └── NetdClient.cpp
├── include
│ ├── FwmarkCommand.h
│ ├── Fwmark.h
│ ├── NetdClient.h
│ └── Permission.h
└── server
├── Android.mk
├── BandwidthController.cpp
├── BandwidthController.h
├── ClatdController.cpp
├── ClatdController.h
├── CleanSpec.mk
├── CommandListener.cpp
├── CommandListener.h
├── ConnmarkFlags.h
├── DnsProxyListener.cpp
├── DnsProxyListener.h
├── DummyNetwork.cpp
├── DummyNetwork.h
├── FirewallController.cpp
├── FirewallController.h
├── FwmarkServer.cpp
├── FwmarkServer.h
├── IdletimerController.cpp
├── IdletimerController.h
├── InterfaceController.cpp
├── InterfaceController.h
├── List.h
├── LocalNetwork.cpp
├── LocalNetwork.h
├── main.cpp
├── MDnsSdListener.cpp
├── MDnsSdListener.h
├── NatController.cpp
├── NatController.h
├── ndc.c
├── NetdCommand.cpp
├── NetdCommand.h
├── NetdConstants.cpp
├── NetdConstants.h
├── NetlinkHandler.cpp
├── NetlinkHandler.h
├── NetlinkManager.cpp
├── NetlinkManager.h
├── NetworkController.cpp
├── NetworkController.h
├── Network.cpp
├── Network.h
├── oem_iptables_hook.cpp
├── oem_iptables_hook.h
├── PhysicalNetwork.cpp
├── PhysicalNetwork.h
├── PppController.cpp
├── PppController.h
├── ResolverController.cpp
├── ResolverController.h
├── ResponseCode.h
├── RouteController.cpp
├── RouteController.h
├── SoftapController.cpp
├── SoftapController.h
├── StrictController.cpp
├── StrictController.h
├── TetherController.cpp
├── TetherController.h
├── UidRanges.cpp
├── UidRanges.h
├── VirtualNetwork.cpp
└── VirtualNetwork.h
3 directories, 72 files
服务启动:
system/core/rootdir/init.rc
service netd /system/bin/netdclass mainsocket netd stream 0660 root systemsocket dnsproxyd stream 0660 root inetsocket mdns stream 0660 root systemsocket fwmarkd stream 0660 root inet
创建了4个socket:
netd: 用于framework和kernel命令交互.
dnsproxyd: 用于dns
mdns: 用于网内无dns服务器时的情况
fwmarkd: 对特定的socket设定mark值.
下面代码流程里提到的
CommandListener, DnsproxyListener, MdnsSdListener以及FwmarkServer
这四个类就是对应的上面四个socket, 它们分别用于接收framework的各类信息.
初始化流程:
借用网友的一张框图,画得很好,再看代码就很清晰了.
main -> main.cpp
NetlinkManager::Instance -> NetlinkManager.cpp
new NetlinkManager //主要接收来自kernel的uevent事件,由NetlinkHandle来完成接收,然后通过CommandListener通知framework.
new CommandListener -> //用于和framework交互
FrameworkListener("netd", true) -> //父类构造桉树,socket是"netd", 说明和framework通过netd socket来交互了. BTW, vold也使用此方式和framework通信.
SocketListener ->
new SocketClientCollection //创建socket client
registerCmd(new NatCmd()); -> //注册各类cmd供framework调用kernel.
FrameworkListener::registerCmd -> FrameworkListener.cpp
mCommands->push_back //保存到cmd列表中
new NetworkController //以下创建各个cmd对应的类,对应各个cmd的实现定义.
new NatCmd
......
nm->start ->
NetlinkManager::start ->
setupSocket //创建三种类型socket, 分别是NETLINK_KOBJECT_UEVENT, NETLINK_ROUTE以及NETLINK_NFLOG.
NETLINK_KOBJECT_UEVENT: 一般用来通知内核某个模块安装或者卸载。
NETLINK_ROUTE:网络变化时会触发此消息。
NETLINK_NFLOG:带宽预警消息通知。
socket //标准创建socket接口方法.
bind
new NetlinkHandler -> NetlinkHandler.cpp
NetlinkListener ->
SocketListener
handler->start ->
NetlinkHandler::start ->
this->startListener ->
SocketListener::startListener ->
pthread_create ->
SocketListener::threadStart ->
me->runListener ->
accept
onDataAvailable -> 调用各个lister接口,这里是NetlinkListener
uevent_kernel_recv
new NetlinkEvent
evt->decode
onEvent ->
NetlinkHandler::onEvent ->
notifyInterfaceAdded ->
mNm->getBroadcaster()->sendBroadcast //通知framework
参考:
http://m.blog.csdn.net/article/details?id=46447641
http://blog.csdn.net/ltm157/article/details/24799351
[RK3288][Android6.0] 网络服务Netd初始化流程小结相关推荐
- android开启热点softap模式,[RK3288][Android6.0] Wifi开启热点(SoftAP)流程小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 在Settings中选择要打开wifi热点功能: 调用流程如下: onPreferenceChan ...
- [RK3288][Android6.0] Audio的音量设置流程小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 说明一: AudioManager提供了两个调节音量接口 adjustSuggestedStrea ...
- [RK3288][Android6.0] Skia中的编解码小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 编解码器注册: SKIA的编解码部分通过一个模板类来实现,这样做的为了实现不同类型的codec兼容 ...
- android apk旋转,[RK3288][Android6.0] Apk设置显示旋转过程小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 setRequestedOrientation -> Activity.java Activ ...
- [RK3288][Android6.0] 设置中通过Sensor旋转显示画面小结
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 Settings -> Display有个选项控制旋转屏幕时内容是否跟着旋转 这个功能是通过 ...
- Android6.0 Reset恢复出厂设置流程分析
点击Settings应用中的恢复出厂设置按钮后流程分析: 先使用grep命令搜索"恢复出厂设置"字符串,找到相应的布局文件: packages/apps/Settings/res/ ...
- [RK3288][Android6.0] 调试笔记 --- WiFi芯片AP6356S添加
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 背景: RK3288 Android6.0平台对AP6356S的支持不是很完善,直接修改wifi ch ...
- [RK3288][Android6.0] 调试笔记 --- touch无法获取坐标点
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有网友遇到调试touch的时候能触发中断,但无法获取坐标点 具体可参考文章 [RK3288][An ...
- [RK3288][Android6.0] 调试笔记 --- AndroidTool低格无效问题
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 现象: 之前文章 [RK3288][Android6.0] 调试笔记 - AndroidTool两 ...
- [RK3288][Android6.0] 调试笔记 --- 电池电量一直显示100%
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前文章[RK3288][Android6.0] 调试笔记 - 伪电池驱动添加 阐述了如何添加一个 ...
最新文章
- pci规划的三个原则_NR PCI规划
- Python---udp绑定信息以及网络通信过程
- gogs创建项目_容器云平台No.10~通过gogs+drone+kubernetes实现CI/CD
- C#语言基础— 输入与输出
- Python线程指南 ---转自 http://www.cnblogs.com/huxi/archive/2010/06/26/1765808.html
- [蓝桥杯][算法提高VIP]开灯游戏-dfs
- 单片机c语言必背代码_最适合单片机编程的高级语言,除了C语言,别无选择!...
- Python一题三解:查找总分等于特定值的同学成绩
- sendmail接收,转发权限控制文件access配置详解
- mysql五:索引原理与慢查询优化
- 正则去除汉字和只取数字
- 树莓派 —— 树莓派安装字体
- 使用win7超级终端连接华为交换机并配置端口镜像
- 点成分享 | 麦氏比浊仪在药敏试验中的应用
- 解决虚拟机中XYplorer中文件列表不能刷新的问题_我是亲民_新浪博客
- 什么是RS-485?
- 深度学习在情感分类中的应用
- Eclipse正版(官网下载)安装教程及如何在win7或者win10安装配置jdk1.8
- AVI视频格式分析-封装格式
- 【Kubernetes 企业项目实战】03、基于 Alertmanager 发送报警到多个接收方(下)
热门文章
- python 拼音性命按照姓出现的次数排序_Python按姓氏排序字典列表
- 环境工程学(整理知识点)
- xbee模块和单片机_什么是xbee模块?和zigbee模块有什么区别?
- 如何做好一场技术分享(技巧篇)
- select完还没释放可以执行其他sql语句吗
- go语言中文乱码gbk转UTF8
- 502 proxy error解决方法_Homebrew安装、卸载、可能的报错及解决方案_Mac
- 分析11年21部漫威电影,一览导演、主演、口碑票房最佳......
- 使用Android Studio 创建第一个Android 应用
- struts的增删查改