netd的代码结构整理
netd的代码在sourcecode/system/netd目录下,
而相关的lib在sourcecode/system/core/libsysutils/src下,
framework相关的在sourcecode/frameworks/base/services/java/com/andrid/server/NetworkManagementService.java以及sourcecode/frameworks/base/services/java/com/android/server/NativeDaemonConnector.java中。
netd的源码分析吧:
main.cpp
int main(){
if (!(nm = NetlinkManager::Instance())) {
ALOGE("Unable to create NetlinkManager");
exit(1);
};
cl = new CommandListener();
nm->setBroadcaster((SocketListener *) cl);
if (nm->start()) {
ALOGE("Unable to start NetlinkManager (%s)", strerror(errno));
exit(1);
}
....
if (cl->startListener()) {
ALOGE("Unable to start CommandListener (%s)", strerror(errno));
exit(1);
}
}
netd的main函数就是做了如下工作:
1.创建netlinkmanager
2.创建commandlistener
3.同时netlinkmanager将自身的boradcaster设置为commandlistener
4.netlinkmanager进行start操作
5.commandlistener进行startlistener
netlinkmanager是用来静听kernel上发的状态,通过commandlistener来向framework层报告。
commandlistener就是用来接受framework的命令,处理之后返回给framework的。