当前位置: 首页 > news >正文

Netlink在SONiC中的应用

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的框架结构成为一种基于事件驱动编程的异步网络监视结构类型。

相关文章:

  • 线程间通信--线程间顺序控制
  • Flask + SQLite 简单案例
  • 函数栈帧的创建和销毁
  • docker部署Open WebUI下载速度慢解决方法
  • Linux ACPI - ACPI系统描述表架构(2)
  • Debezium Binlog解析与事件转换流程详解
  • Oracle OCP认证考试考点详解083系列06
  • MCP智能体多Agent协作系统设计(Multi-Agent Cooperation)
  • 冯诺依曼结构与哈佛架构深度解析
  • 今天python练习题
  • TensorFlow深度学习实战——基于循环神经网络的词性标注模型
  • TS 元组
  • 深入探索 Java 区块链技术:从核心原理到企业级实践
  • 8.1 Python+Docker+企业微信集成实战:自动化报告生成与CI/CD部署全攻略
  • jetson orin nano super AI模型部署之路(八)tensorrt C++ api介绍
  • HTML01:HTML基本结构
  • 使用Scrapy构建高效网络爬虫:从入门到数据导出全流程
  • jakarta.mail(javax.mail)包中关于SMTP协议支持的属性参数配置
  • 5.7/Q1,GBD数据库最新文章解读
  • 深度学习的简单介绍
  • 黎巴嫩9年来首次举行地方选举
  • 刘翔的赛会纪录被改写,田径钻石赛在赛场内外交出精彩答卷
  • 成为中国骑手“孵化器”,环球马术冠军赛是最好的历练舞台
  • 云南省政协原党组成员、秘书长车志敏接受审查调查
  • 全球最大汽车板供应商宝钢股份:汽车工业加速转型中材料商如何共舞?
  • 乌方公布矿产协议详情:未提债务义务,包含美再援助条款