技术笔记:Netd学习笔记

简介: 技术笔记:Netd学习笔记

service netd /system/bin/netd


class main


socket netd stream 0660 root system


socket dnsproxyd stream 0660 root inet


启动/system/bin/netd应用程序为服务,入口函数为main,创建2个名字分别为netd和dnsproxyd的本地socket连接。分别对应:


root@android:/ # ll /dev/socket/


srwxrwxrwx root inet 1970-01-01 00:00 dnsproxyd


srwxrwxrwx root system 1970-01-01 00:00 netd


备注:socket关键字用法,


代码阅读(注:由于说第一次分析netd的代码,我完全跟踪此代码的流程来看,先说init.rc,然后是main,之后依次展开):


//main.cpp:main


int main() {


//........


if (!(nm = NetlinkManager::Instance())) { //NetlinkManager需要分析,一眼看出它为单根模式。看看他到底做来什么?


LOGE("Unable to create NetlinkManager");


exit(1);


};


cl = new CommandListener();//CommandListener需要分析


nm->setBroadcaster((SocketListener ) cl);


if (nm->start()) { //直接看start函数。


LOGE("Unable to start NetlinkManager (%s)", strerror(errno));


//代码效果参考:http://www.lyjsj.net.cn/wx/art_23326.html

exit(1);

}


/


Now that we're up, we can respond to commands


/


if (cl->startListener()) {


LOGE("Unable to start CommandListener (%s)", strerror(errno));


exit(1);


}


// Eventually we'll become the monitoring thread


while(1) {


sleep(1000);


}


LOGI("Netd exiting");


exit(0);


}


直接跟进看NetlinkManager::start()


int NetlinkManager::start() {


struct sockaddr_nl nladdr;


int sz = 64 1024;


memset(&nladdr, 0, sizeof(nladdr));


nladdr.nl_family = AF_NETLINK;


nladdr.nl_pid = getpid();


nladdr.nl_groups = 0xffffffff;


if ((mSock = socket(PF_NETLINK,


SOCK_DGRAM,NETLINK_KOBJECT_UEVENT)) < 0) {


LOGE("Unable to create uevent socket: %s", strerror(errno));


return -1;


}


if (setsockopt(mSock, SOL_SOCKET, SO_RCVBUFFORCE, &sz, sizeof(sz)) < 0) {


LOGE("Unable to set uevent socket options: %s", strerror(errno));


return -1;


}


if (bind(mSock, (struct sockaddr ) &nladdr, sizeof(nladdr)) < 0) {


LOGE("Unable to bind uevent socket: %s", strerror(errno));


return -1;


}


mHandler = new NetlinkHandler(this, mSock);


if (mHandler->start()) {


LOGE("Unable to start NetlinkHandler: %s", strerror(errno));


return -1;


}


return 0;


}


看NetlinkHandler类:


#ifndef _NETLINKHANDLER_H


#define _NETLINKHANDLER_H


#include


#include "NetlinkManager.h"


class NetlinkHandler: public


NetlinkListener { // NetlinkListener类之前有分析,这个是网络监听的框架实现类。


NetlinkManager mNm;


public:


NetlinkHandler(NetlinkManager nm, int listenerSocket);


virtual ~NetlinkHandler();


int start(void);


int stop(void);


protected:


virtual


void onEvent(NetlinkEvent evt);


void notifyInterfaceAdded(const


char name);


void notifyInterfaceRemoved(const


char name);


void notifyInterfaceChanged(const


char name, bool isUp);


};


#endif


晕死,怎么排版乱完了,而且还丢失了部分数据。

相关文章
|
存储 监控 固态存储
【vSAN分布式存储服务器数据恢复】VMware vSphere vSAN 分布式存储虚拟化平台VMDK文件1KB问题数据恢复案例
在一例vSAN分布式存储故障中,因替换故障闪存盘后磁盘组失效,一台采用RAID0策略且未使用置备的虚拟机VMDK文件受损,仅余1KB大小。经分析发现,该VMDK文件与内部虚拟对象关联失效导致。恢复方案包括定位虚拟对象及组件的具体物理位置,解析分配空间,并手动重组RAID0结构以恢复数据。此案例强调了深入理解vSAN分布式存储机制的重要性,以及定制化数据恢复方案的有效性。
365 5
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
JavaScript 前端开发 测试技术
vue组件化架构
Vue 的组件化架构为开发复杂的前端应用提供了一种高效、灵活和可维护的方式。它使得开发人员能够更好地组织代码、提高开发效率,并为应用的扩展和维护提供了坚实的基础。
311 49
|
人工智能 自然语言处理 监控
video-analyzer:开源视频分析工具,支持提取视频关键帧、音频转录,自动生成视频详细描述
video-analyzer 是一款开源视频分析工具,结合 Llama 的 11B 视觉模型和 OpenAI 的 Whisper 模型,能够提取视频关键帧、转录音频并生成详细描述,支持本地运行和多种应用场景
2946 6
video-analyzer:开源视频分析工具,支持提取视频关键帧、音频转录,自动生成视频详细描述
|
前端开发 Java 编译器
Android HAL深入探索(7)hidl-gen和hidl2aidl的使用详解
Android HAL深入探索(7)hidl-gen和hidl2aidl的使用详解
2680 0
|
机器学习/深度学习 测试技术 数据处理
KAN专家混合模型在高性能时间序列预测中的应用:RMoK模型架构探析与Python代码实验
Kolmogorov-Arnold网络(KAN)作为一种多层感知器(MLP)的替代方案,为深度学习领域带来新可能。尽管初期测试显示KAN在时间序列预测中的表现不佳,近期提出的可逆KAN混合模型(RMoK)显著提升了其性能。RMoK结合了Wav-KAN、JacobiKAN和TaylorKAN等多种专家层,通过门控网络动态选择最适合的专家层,从而灵活应对各种时间序列模式。实验结果显示,RMoK在多个数据集上表现出色,尤其是在长期预测任务中。未来研究将进一步探索RMoK在不同领域的应用潜力及其与其他先进技术的结合。
595 4
|
Nacos 微服务
【Seata】初识Seata
Seata是 2019 年 1 月份蚂蚁金服和阿里巴巴共同开源的分布式事务解决方案。致力于提供高性能和简单易用的分布式事务服务,为用户打造一站式的分布式解决方案。
531 0
|
大数据 API Android开发
Android MemoryFile 共享内存
Android MemoryFile 共享内存
379 0
|
数据采集 Web App开发 iOS开发
爬取B站评论:Python技术实现详解
爬取B站评论:Python技术实现详解

热门文章

最新文章