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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/79741.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/79741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语音合成之十一 提升TTS语音合成效果:低质量数据清洗、增强与数据扩增

低质量数据清洗、增强与数据扩增 1. 引言:TTS的基石——数据质量2. 基础:TTS数据准备工作流2.1 规划:定义蓝图2.2 执行:从原始数据到训练就绪格式2.3 最佳实践与可复现性 3. 攻克缺陷:低质量语音数据的清洗与增强3.2 手…

Java IO流分类与记忆方法

Java IO流分类与记忆方法 在Java IO流体系中,理解节点流和包装流的区别是掌握IO编程的关键。 一、核心分类标准 1. 节点流(Node Stream) 直接对接数据源:直接连接物理IO设备(文件、网络、内存等)基础功能:提供最基础的读写能力命名特征:通常包含数据源类型名称(如Fi…

架构师如何构建个人IP:职业规划与业务战略的双重提升

在数字化时代,软件架构师的角色已从单纯的技术专家转变为兼具技术领导力和业务影响力的复合型人才。如何构建个人IP,提升行业影响力,成为架构师职业发展的关键课题。本文从个人认知、业务战略、架构决策、产品思维四个维度,探讨架…

vscode运行python的快捷键

以下是一些在 VS Code 中运行 Python 代码的常用快捷键: 运行 Python 文件 Windows/Linux :Ctrl F5。此快捷键会直接运行当前打开的 Python 文件,不会自动进入调试模式。若之前有配置过终端,一般会使用配置好的终端来运行&…

使用OpenCV 和 Dlib 实现疲劳检测

文章目录 引言1.相关技术介绍2. 系统原理2.1 眼睛纵横比(EAR)算法2.2 系统工作流程 3.代码解析3.1 关键函数说明3.2 主循环逻辑 4.实际应用效果5.参数调优建议6.总结 引言 疲劳驾驶是交通事故的主要原因之一。本文将介绍如何使用Python和计算机视觉技术构建一个实时疲劳驾驶检…

VBA实现后入先出(LIFO)库存统计

先入先出(FIFO)比较容易理解,买入早的优先卖出。与之对应的是后人先出(LIFO),就是优先卖出最近买入的,例如:第8行卖出2K,当天还没有买入记录,只能找前一天的买…

Python中的客户端和服务端交互的基本内容

目录 网络协议 网络的通信方式 需要安装的组件和需要导入的包模块 安装的组件 导入包模块 如何创建客户端 如何创建服务端 网络协议 IPV4:是互联网协议的第四版,也是目前广泛使用的网络协议。它使用32位地址格式,理论上可以提供约43亿…

【硬核攻坚】告别CUDA OOM!DeepSeek部署显存瓶颈终极解决方案:三大策略高效落地

目录 引言:大模型落地的“甜蜜”与“烦恼”DeepSeek剖析:为何它如此“吃”显存?CUDA OOM的“幽灵”:现象、根因与诊断破局之道:三大策略驯服显存“猛兽” 策略一:模型量化 - 给模型“瘦身”的艺术策略二:动态优化 - 榨干硬件潜能策略三:分布式扩展 - 集群的力量实战演练…

JavaSE核心知识点01基础语法01-01(关键字、标识符、变量)

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 JavaSE核心知识点01基础语法01-01&#xff0…

【最新Python包管理工具UV的介绍和安装】

介绍 uv是一个非常快的 Python 包安装程序和 pip 解析器,用 Rust 编写,设计为pip-tools的直接替代品。 以下是官网给出的UV与其他包管理工具解决依赖(左)和安装包(右)的对比图。 可以看出UV是一个极快的 P…

麒麟、UOS系统在线打开word文件并提取修订痕迹

麒麟、UOS系统在线打开word文件并提取修订痕迹 查看本示例演示效果(Windows版) 查看本示例演示效果(国产版)本示例关键代码的编写位置,请参考“开始 - 快速上手”里您所使用的开发语言框架的最简集成代码 注意 本文中…

【SpringAI+阿里云百炼】AI对话4个Demo

基于SpringAI和阿里云百炼平台,实现了四个AI对话的小Demo 小团团对话机器人哄哄模拟器培训班智能客服仿ChatPDF 笔记如下:语雀知识笔记《SpringAI》

【数据结构】单链表的增删查改

本文是小编巩固自身而作,如有错误,欢迎指出! 1.链表的概念 概念:链表是⼀种物理存储结构上⾮连续、⾮顺序的存储结构,数据元素的逻辑顺序是通过链表中的 指针链接次序实现的。 和之前的顺序表不同,顺序一般…

LeetCode 1128.等价多米诺骨牌对的数量:计数

【LetMeFly】1128.等价多米诺骨牌对的数量:计数 力扣题目链接:https://leetcode.cn/problems/number-of-equivalent-domino-pairs/ 给你一组多米诺骨牌 dominoes 。 形式上,dominoes[i] [a, b] 与 dominoes[j] [c, d] 等价 当且仅当 (a …

以太坊智能合约开发框架:Hardhat v2 核心功能从入门到基础教程

一、设置项目 Hardhat 项目是安装了 hardhat 包并包含 hardhat.config.js 文件的 Node.js 项目。 操作步骤: ①初始化 npm npm init -y②安装 Hardhat npm install --save-dev hardhat③创建 Hardhat 项目 npx hardhat init如果选择 Create an empty hardhat.…

安卓基础(无障碍点击)

无障碍点击核心代码 // 自定义无障碍服务类,继承自Android系统的AccessibilityService public class MyAccessibilityService extends AccessibilityService {// 当系统产生无障碍事件时的回调方法(如界面变化、焦点切换等)Overridepublic v…

阿里云服务迁移实战: 05-OSS迁移

概述 Bucket 复制分为两种,同区域复制和跨区域复制 同账号复制比较简单,根据提示填写信息即可,本文主要介绍跨账号复制。 同区域复制 授权角色选择 “AliyunOSSRole”, 创建方法见 “跨区域复制”。然后点击确定即可。 跨区域复制 假设我…

Qt 的信号与槽机制依赖元对象系统(Meta-Object System)实现

内部数据结构 在 Qt 中,信号和槽之间的连接主要通过 QObject 类及其相关的私有类进行管理。每个 QObject 实例都维护着一个指向其 QMetaObject 的指针,该对象包含了有关类的所有元信息,包括信号、槽等。此外,还有一个关键的数据结构用于存储信号与槽之间的连接信息,即 Co…

前端面试宝典---性能优化

一、加载优化 1. 第三方模块放在CDN 例如 leaflet通过cdn引入,这样就不会占用打包体积了 2. prefetch 预加载 例如,之后马上有个场景需要一个图片,我们就可以通过link 的 prefetch 对资源进行预先加载 再例如,我们公司是无网络开…

从零开始:Android Studio开发购物车(第二个实战项目)

一年经验的全栈程序员,目前头发健在,但不知道能撑多久。 文章目录 前言 一、页面编写 1. 顶部标签栏title_shopping.xml 2. 商品展现列表activity_shopping_channel.xml 3. 商品详情页面activity_shopping_detail.xml 4. 购物车页面activity_shopping…