Netlink在SONiC中的应用

[复制链接]
发表于 2025-9-17 23:34:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
Netlink在SONiC中的应用

Netlink先容

Netlink 是 Linux 内核态步伐与用户空间步伐之间举行通信的机制之一,本来是用于传递网络协议栈中的各种控制消息。它接纳和套接字(socket)编程接口雷同的情势,常用于设置内核网络子体系,如网络接口、路由、流表、策略路由等。由于Socket编程接口的广泛应用以及Socket编程接口比传统的 ioctl 更机动、更高效,因此Netlink也被大量应用于与网络应用无关的其它场所。如NETLINK_GENERIC,NETLINK_KOBJECT_UEVENT范例的Socket等等。
Netlink 消息格式包罗struct nlmsghdr Netlink 消息头(长度、范例、标记等);struct XXX  协议数据(如 ifinfomsg, rtmsg 等); 属性(TLV格式)可选字段,范例-长度-值格式。
Netlink在SONiC中的应用

SONiC的各类名字以syncd末端的服务大量利用Netlink来监控监控体系中网络装备的变革,将最新状态同步到Redis,并关照其他服务举行相应的更新。*syncd服务把硬件状态同步到数据库,内核态的步伐监控监控端口状态,发送Netlink Event给用户态portsyncd,portsyncd监听Netlink变乱,将互换机中所有端口状态同步到STATE_DB; natsyncd监听Netlink变乱,将互换机中所有NAT状态同步到APPL_DB.
Netlink在SONiC中的实现

sonic-swss-common中用NetLink类封装了netlink套接字API交互的接口用于通过NetLink套接字与Linux内核通信。代码包罗在netlink.cpp中,接纳Select框架用于变乱驱动编程。
NetLink类的套接字管理:这个类管理到Linux内核的netlink套接字毗连。netlink.cpp: 16 - 22
NetLink类接纳非壅闭操纵:将套接字设置为非壅闭模式,答应异步操纵。netlink.cpp: 37
NetLink类大缓冲区巨细:套接字缓冲区设置为16MB以处置处罚大量数据。netlink.cpp: 38-39
组注册:答应订阅特定的netlink组播组。netlink.cpp: 51 - 61
转储(DUMP)哀求:支持哀求内核信息的转储。netlink.cpp: 63 - 73
NetLink类实现了Selectable接口,它为变乱驱动编程提供了下列方法:
getFd():返回netlink套接字的文件形貌符。netlink.cpp: 75 - 78
readData():当netlink套接字可用时从套接字读取数据。netlink.cpp: 80 - 99
消息处置处罚
当接收到netlink消息时,它由onNetlinkMsg回调函数处置处罚,该函数将消息转发给NetDispatcher:netlink.cpp:102-106
NetLink类通常用于:
创建到内核的netlink套接字毗连
注册特定的netlink组以接收关照
从内核哀求信息转储
通过NetDispatcher处置处罚传入的netlink消息
这答应应用步伐直接从Linux内核接收有关网络相干变乱的关照(如接口更改、路由更新等)。
NetLink类是SONiC -swss-common库的一部门,通过netlink套接字接口在用户空间应用步伐和Linux内核之间举行通信,如许的设计使得SONiC SWSS的框架结构成为一种基于变乱驱动编程的异步网络监视结构范例。
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表