[RK3288][Android6.0] 网络服务Netd初始化流程小结
来源:互联网 发布:怎么在手机上装修淘宝 编辑:程序博客网 时间:2024/06/09 23:11
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
封装底层各种类型网络,如PPP,SOFTAP等,给framework提供统一接口.
说白了就是接收framework命令往下发,接收kernel命令往上发.
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
创建了4个socket:
netd: 用于framework和kernel命令交互.
dnsproxyd: 用于dns
mdns: 用于网内无dns服务器时的情况
fwmarkd: 对特定的socket设定mark值.
下面代码流程里提到的
CommandListener, DnsproxyListener, MdnsSdListener以及FwmarkServer
这四个类就是对应的上面四个socket, 它们分别用于接收framework的各类信息.
初始化流程:
借用网友的一张框图,画得很好,再看代码就很清晰了.
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
参考:
OS: Android 6.0
Kernel: 3.10.92
Netd: Network Daemon.
负责网络配置,操作,管理,查询等功能.封装底层各种类型网络,如PPP,SOFTAP等,给framework提供统一接口.
说白了就是接收framework命令往下发,接收kernel命令往上发.
路径: system/netd
[kris@:~/rk3288/system/netd]$ lsAndroid.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/netd class main socket netd stream 0660 root system socket dnsproxyd stream 0660 root inet socket mdns stream 0660 root system socket 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.cppnew 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
1 0
- [RK3288][Android6.0] 网络服务Netd初始化流程小结
- [RK3288][Android6.0] Display驱动初始化流程小结
- [RK3288][Android6.0] USB hub初始化流程小结
- [RK3288][Android6.0] Wifi Service初始化流程小结
- [RK3288][Android6.0] MediaCodec初始化过程小结
- [RK3288][Android6.0] Camera驱动初始化流程
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] StageFright解码流程小结
- [RK3288][Android6.0] 串口驱动流程小结
- [RK3288][Android6.0] ION 驱动流程小结
- [RK3288][Android6.0] Camera HAL流程小结
- [RK3288][Android6.0] 输入法框架开机初始化部分小结
- [RK3288][Android6.0] WiFi的驱动初始化过程小结
- [RK3288][Android6.0] PWM backlight 驱动流程小结
- [RK3288][Android6.0] DDR Frequency控制流程小结
- [RK3288][Android6.0] U-boot 启动流程小结
- [RK3288][Android6.0] U-boot显示模块部分流程小结
- [RK3288][Android6.0] USB Mass Storage流程小结
- Fragment和Activity的交互
- Fragment:判断是否显示当前Fragment viewpager ;Fragment监听按键点击事件;显示隐藏事件
- 关于单点登录、门户、统一权限控制的一些理解
- SQLITE3 使用总结(七)
- SICP 1.6
- [RK3288][Android6.0] 网络服务Netd初始化流程小结
- yyyy-MM-dd'T'HH:mm:ss.S的作用
- 3 Springboot中使用redis,redis自动缓存异常处理
- nginx log打印输出精度问题
- 在安卓中读取并显示网络图片
- STL Vector用法介绍
- HTTP知识详解
- spring springmvc shiro 实现单点登录demo
- node笔记--jade模版