netd学习记录(一)main函数解析

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的。