学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式
学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式
- 参考文档:
https://www.dmtf.org/standards/published_documents
https://www.dmtf.org/dsp/DSP0222
https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0.pdf
- 参考代码
https://github.com/torvalds/linux/blob/master/net/ncsi/ncsi-pkt.h
- ncsi/nc-si协议简介:
一般用于服务器主板上的BMC芯片与智能网卡MAC芯片之间的直连控制线通讯。
Ethernet Header中Des Add全1,且 EtherType = 0x88F8时即为NCSI协议数据。
- ncsi协议一般是在BMC与MAC之间互发数据,有三种
struct ncsi_cmd_pkt_hdr { // BMC发给MAC的操作命令struct ncsi_pkt_hdr common; /* Common NCSI packet header */
};struct ncsi_rsp_pkt_hdr { // MAC执行命令后,返回给BMC的操作结果struct ncsi_pkt_hdr common; /* Common NCSI packet header */__be16 code; /* Response code */__be16 reason; /* Response reason */
};struct ncsi_aen_pkt_hdr { // MAC主动发给BMC的异步事件,例如拔网线了struct ncsi_pkt_hdr common; /* Common NCSI packet header */unsigned char reserved2[3]; /* Reserved */unsigned char type; /* AEN packet type */
};
- 以上三种的数据头的公用数据头只有一种ncsi_pkt_hdr
通过type来区分后续的数据结构,这也是典型的派生类c语言实现方式
struct ncsi_pkt_hdr { //16byteunsigned char mc_id; /* Management controller ID, BMC id==1 */unsigned char revision; /* NCSI version - 0x01 */unsigned char reserved; /* Reserved ==0 */unsigned char id; /* Packet sequence number,方便BMC区分最多255个命令的MAC反馈结果 */unsigned char type; /* Packet type */unsigned char channel; /* Network controller ID,BMC一对多MAC定位用 */__be16 length; /* Payload length,有效负载数据,不含checksum部分,也不含ncsi_pkt_hdr 部分 */__be32 reserved1[2]; /* Reserved */
};
- 最基本的没有额外描述信息的cmd、rsp结构
需要注意的是,这种基本cmd有效Payload length 0,rsp Payload length 4。Payload length是相对于基类ncsi_pkt_hdr 而言的附加部分长度,且不含数据检验checksum部分。
rsp的4byte是Response code+Response reason
/* NCSI common command packet */
struct ncsi_cmd_pkt {struct ncsi_cmd_pkt_hdr cmd; /* Command header */__be32 checksum; /* Checksum */unsigned char pad[26];
};struct ncsi_rsp_pkt {struct ncsi_rsp_pkt_hdr rsp; /* Response header */__be32 checksum; /* Checksum */unsigned char pad[22];
};
- payload length非0的cmd示例
ncsi_cmd_sp_pkt 的payload length为4,reserved[3]+hw_arbitration
不含checksum,也不含pad填充区
/* Select Package */
struct ncsi_cmd_sp_pkt {struct ncsi_cmd_pkt_hdr cmd; /* Command header 16byte*/unsigned char reserved[3]; /* Reserved */unsigned char hw_arbitration; /* HW arbitration */__be32 checksum; /* Checksum */unsigned char pad[22];
};static struct ncsi_cmd_handler {unsigned char type;int payload;int (*handler)(struct sk_buff *skb,struct ncsi_cmd_arg *nca);
} ncsi_cmd_handlers[] = {{ NCSI_PKT_CMD_SP, 4, ncsi_cmd_handler_sp },
-
ncsi_cmd_sp_pkt 的pad填充区是为了满足最小网络数据包的大小限制
ncsi_cmd_sp_pkt 长度为16+4+4+22,共46,
加上前面的Ethernet Header 14byte,再加最后面的FCS,
刚好凑足64byte -
ncsi_cmd_handler 的写法是典型的虚函数的c语言实现模式
实际执行时,根据 ncsi_pkt_hdr 的type调用对应的处理函数。
MAC芯片的rsp侧也类似
static struct ncsi_rsp_handler {unsigned char type;int payload;int (*handler)(struct ncsi_request *nr);
} ncsi_rsp_handlers[] = {{ NCSI_PKT_RSP_SP, 4, ncsi_rsp_handler_sp },
- cmd、rsp、aen的type code定义范式
各厂商自定义cmd type也给了一个OEM 0x50,允许不同厂商在padload部分任意定义
#define NCSI_PKT_CMD_SP 0x01 /* Select Package */
#define NCSI_PKT_RSP_SP (NCSI_PKT_CMD_SP + 0x80)
#define NCSI_PKT_AEN 0xFF /* AEN Packet*/
以下三种aen子分类code存储在padload部分的type中
#define NCSI_PKT_AEN_LSC 0x00 /* Link status change */
#define NCSI_PKT_AEN_CR 0x01 /* Configuration required */
#define NCSI_PKT_AEN_HNCDSC 0x02 /* HNC driver status change */#define NCSI_PKT_CMD_OEM 0x50 /* OEM */
-
netlink.h.c部分
我的理解是,提供给用户态程序的netlink接口,允许做一些有限操作或查询。 -
internal.h manager.c部分
我的理解是, h为多模块共用的结构定义、常量定义
c部分是内核管理bmc端数据状态的代码,与mac端保持一致。 -
ncsi的目的和来龙去脉
ncsi的目的:远程集中管理大型机房中不同型号的服务器。
一般是通过redfish(dell基于这个进行修改)web界面远程设置服务器的net MAC特性。
以前这种管理需求是IBM自己的一套管理系统(大概是叫 IPMI),后来延伸到 任意品牌服务器的管理,所以交由dmtf开源组织进行定义(ncsi mctp redfish),实现则由一家codeconstruct.com.au提供。 -
一点总结:
图灵机的7元组中δ是算法,其他都是数据。
更进一步,一切都是围绕数据去构建的。
数据的本质是真实物理世界的模型映射,数字化后,在硅基电路上进行信息处理,再通过各种物理设备反馈于真实世界。
linux的c实现提供各种优秀的范式,核心只有一个,数据。cpp等语言与c图灵等价。cpp能实现的概念,本质上都可以用c等价实现,只是方法不同,或编译期实现。其实,我满能理解linus本人反对cpp的,虽然不是完全赞同。
操作可以理解为对数据的解释,并反作用于数据。
硬件是基于数字电路对数据进行读写、存储、传输、解释执行的支持。
相关文章:
学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式
学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式 参考文档: https://www.dmtf.org/standards/published_documents https://www.dmtf.org/dsp/DSP0222 https://www.dmtf.org/sites/default/files/standards/documents/DSP0222_1.2.0.pdf参考代…...
基础库urllib的使用
学习爬虫,其基本的操作便是模拟浏览器向服务器发出请求,那么我们需要从哪个地方做起呢?请求需要我们自己构造吗?我们需要关心请求这个数据结构怎么实现吗?需要了解 HTTP、TCP、IP层的网络传输通信吗?需要知道服务器如何响应以及响应的原理吗? 可能…...
SSM 电脑配件销售系统设计要点与 JSP 实现难点攻克
摘 要 随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于电脑配件销售系统当然也不能排除在外,随着网络技术的不断成熟,带动了电脑配件销售系统,它彻底改变了过…...
AI前沿分析:ChatGPT搜索上线,Google搜索地位能否守住?
名人说:莫听穿林打叶声,何妨吟啸且徐行。—— 苏轼 Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 引言:AI与搜索领域的激烈博弈一、ChatGPT搜索的优势是什么?1. 实时信息获取:超越传统搜索2. 对话式搜索:重构用户体验3. 个性化推荐:深度挖掘用户需求二、G…...
单片机:实现utf-8转gb2312(附带源码)
单片机实现UTF-8转GB2312 在嵌入式系统中,字符编码是常见的问题之一,尤其是在显示中文字符时。UTF-8和GB2312都是常见的字符编码标准,UTF-8广泛用于Web和现代操作系统中,而GB2312是中国大陆常用的中文字符集。在一些嵌入式系统中…...
VMProtect:软件保护与安全的全面解决方案
在当今数字化时代,软件的安全性和保密性愈发重要。VMProtect 作为一款备受瞩目的软件保护工具,因其强大的功能和广泛的应用而成为开发者保护软件的首选方案。 VMProtect 是一款新一代的软件保护实用程序,支持多个编译器平台,包括…...
linux下观察进程捕获信号的情况
linux观察进程收到信号的情况,信号可以来自外部进程、进程自身、内核定时器等。 观察捕获信号方法一:strace strace所有信号: strace -e signal -f -p $pid 过滤出某个信号: #grep 信号名,取自kill -l strace -e …...
VSCode编辑+GCC for ARM交叉编译工具链+CMake构建+OpenOCD调试(基于STM32的标准库/HAL库)
一、CMake安装 进入CMake官网的下载地址Get the Software,根据系统安装对应的Binary distributions。 或者在CMake——国内镜像获取二进制镜像安装包。 或者访问GitHub的xPack项目xPack CMake v3.28.6-1,下载即可。 记得添加用户/系统的环境变量&#…...
概率论得学习和整理26:EXCEL 关于plot 折线图--频度折线图的一些细节
目录 0 折线图有很多 1 频度折线图 1.1 直接用原始数据做的频度折线图 2 将原始数据生成数据透视表 3 这样可以做出了,频度plot 4 做按某字段汇总,成为累计plot分布 5 修改上面显示效果,做成百分比累计plot频度分布 0 折线图有很多 这…...
数据结构之栈和队列算法题
一:有效括号数 学了栈之后这一题就比较简单了。 思路:1、左括号进栈 2、右括号出栈匹配。 完整代码: 因为使用C语言写的,所以里面包含了栈的实现 #include<stdio.h> #include<stdlib.h> #include<assert.h>…...
离散数学---随机漫步
本文根据 MIT 计算机科学离散数学课程整理(Lecture 25)。 赌徒破产问题(Gamblers Ruin) 问题描述 初始为 n 元,对于每一次独立的赌注,都有 p 的概率赢得 1 元,(1-p) 的概率输掉 1 元。当输完…...
HCIA-Access V2.5_2_2网络通信基础_TCP/IP协议栈报文封装
TCP/IP协议栈的封装过程 用户从应用层发出数据先会交给传输层,传输层会添加TCP或者UDP头部,然后交给网络层,网络层会添加IP头部,然后交给数据链路层,数据链路层会添加以太网头部和以太网尾部,最后变成01这样…...
java开发入门学习一 -基本概念入门
目录 Java的开发环境搭建 开发环境简单认识 开发环境下载与安装 初始JAVA之helloWorld java基本运行原理 helloWord实例 JAVA文档注释和API 文档 注释 API文档地址 Java的优缺点 优点 缺点 JVM的简单介绍 功能 1. 实现JAVA程序的跨平台性 2. 自动内存管理(管理…...
Coturn 实战指南:WebRTC 中的 NAT 穿透利器
1. 什么是 Coturn? Coturn 是一种开源的 TURN(Traversal Using Relays around NAT)服务器,用于解决 NAT 穿透问题。它帮助客户端在受限网络环境(例如防火墙或 NAT 后面)中实现双向通信,常用于 WebRTC 应用、VoIP、在线游戏等场景。 2. Cotur…...
【每日一练 基础题】[蓝桥杯 2022 省 A] 求和
[蓝桥杯 2022 省 A] 求和 暴力破解会超时,用因式分解的平方差公式 a2 2abb2(a)2 a-2abb2(a-b)2 输出整数((a1a2a3…an)-a1-a2-a3-…-an)/2 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner scanner new Scanner(System.in);l…...
华为ensp--BGP路径选择-Preferred Value
学习新思想,争做新青年。今天学习的是BGP路径选择-Preferred Value 实验目的 理解BGP路由信息首选值(Preferred Value)的作用 掌握修改Preferred Value属性的方法 掌握通过修改Preferred Value属性来实现流量分担的方法 实验拓扑 实验要求…...
Flink是什么?Flink技术介绍
官方参考资料:Apache Flink — Stateful Computations over Data Streams | Apache Flink Flink是一个分布式流处理和批处理计算框架,具有高性能、容错性和灵活性。以下是关于Flink技术的详细介绍: 一、Flink概述 定义:Fli…...
Java中的重要集合
目录 List 1.vector 2.ArrayList 3.CopyonWriteArraylist 4.ArrayList变成线程安全的方式 5.LinkList Map 1.HashTable 2.HashMap 3.ConcurrentHashMap Set 1.LinkedHashSe List 1.vector Vector 是线程安全的动态数组,其内部方法基本都经过synchroni…...
实景视频与模型叠加融合?
[视频GIS系列]无人机视频与与实景模型进行实时融合_无人机视频融合-CSDN博客文章浏览阅读1.5k次,点赞28次,收藏14次。将无人机视频与实景模型进行实时融合是一个涉及多个技术领域的复杂过程,主要包括无人机视频采集、实景模型构建、视频与模型…...
【一本通】分数约分
【一本通】分数约分 C语言CJavaPython 💐The Begin💐点点关注,收藏不迷路💐 编写一个给一个分数约分的程序。 输入 输出整数a,b,分别表示分子与分母 输出 约分后的分子与分母,用“/“分隔 …...
ArkTs的容器布局
组件按照布局的要求依次排列,构成应用的页面。在声明式UI中,所有的页面都是由自定义组件构成,开发中可以根据自己的需求,选择合适的布局进行页面开发。 一. 如何选择布局 声明式UI提供了以下10种常见布局,开发者可根…...
jenkins 出现 Jenkins: 403 No valid crumb was included in the request
文章目录 前言解决方式:1.跨站请求为找保护勾选"代理兼容"2.全局变量或者节点上添加环境变量3.(可选)下载插件 the strict Crumb Issuer plugin4.重启 前言 jenkins运行时间长了,经常出现点了好几次才能构建,然后报了Je…...
SpringDataJpa-字段加解密存储
SpringDataJpa-字段加解密存储 背景场景实现类型转换器实体类修改 Crypto 注解AOP 目前可使用场景注意 背景 遇到一个需求,对数据库中的某些字段进行加密存储,但是在各个服务流转中,需要是解密状态的。框架使用的是JPA。 Spring 提供了 Attri…...
python03-保留字、标识符;变量、常量;数据类型、数据类型之间的转化
一、保留字 VS 标识符 1-1、35个保留字 保留字,严格区分大小写! 查询保留字: 1-2、标识符 常量:python中没有明确的定义常量的关键字,常量的值在程序运行过程中不允许修改! 二、变量 VS 常量 2-1、变量 变…...
投影互动装置入驻,科普基地学习体验再上新台阶!
数字科技的迅猛进步极大地充盈了人们的日常生活,这一变革在主题乐园与科普教育基地等场所尤为显著。在这些地方,投影互动装置引领我们穿梭于光影构建的奇妙世界。特别是互动投影墙,它赋予观众前所未有的交互体验。那么,这种技术究…...
socket编程UDP-实现滑动窗口机制与累积确认GBN
在下面博客中,我介绍了利用UDP模拟TCP连接、按数据包发送文件的过程,并附上完整源码。 socket编程UDP-文件传输&模拟TCP建立连接脱离连接(进阶篇)_udp socket发送-CSDN博客 下面博客实现了停等机制。 socket编程UDP-实现停…...
乐观锁与悲观锁的概念
在多线程或多进程并发访问同一资源的情况下,为了防止数据的不一致性和竞态条件,常常需要使用锁机制来控制并发访问。锁机制大致可以分为 乐观锁(Optimistic Locking)和 悲观锁(Pessimistic Locking)。这两种…...
考研数学【线性代数基础box(数二)】
本文是对数学二线性代数基础进行总结,一些及极其简单的被省略了,代数的概念稀碎,不如高数关联性高,所以本文仅供参考,做题请从中筛选! 本文为初稿,后面会根据刷题和自己的理解继续更新 高数&a…...
游戏引擎学习第45天
仓库: https://gitee.com/mrxiao_com/2d_game 回顾 我们刚刚开始研究运动方程,展示了如何处理当人物遇到障碍物时的情况。有一种版本是角色会从障碍物上反弹,而另一版本是角色会完全停下来。这种方式感觉不太自然,因为在游戏中,…...
基于 mzt-biz-log 实现接口调用日志记录
🎯导读:mzt-biz-log 是一个用于记录操作日志的通用组件,旨在追踪系统中“谁”在“何时”对“何事”执行了“何种操作”。该组件通过简单的注解配置,如 LogRecord,即可实现接口调用的日志记录,支持成功与失败…...
无人设备之RTK地面基站篇
一、定义与功能 RTK地面基站是一种通过差分定位技术来实现GPS等全球导航卫星系统信号精确定位的设备。它通过与无人设备上的流动站进行实时数据通信,利用载波相位差分原理,消除卫星定位过程中的大部分公共误差,如卫星轨道误差、电离层延迟、对…...
TMS320C55x DSP芯片结构和CPU外围电路
第2章 DSP芯片结构和CPU外围电路 文章目录 第2章 DSP芯片结构和CPU外围电路TMS320C55x处理器的特点TMS320c55x CPU单元指令缓冲(Instruction Buffer Unit) I单元程序流程(Program Flow Unit) P单元地址数据(Address-data Flow Unit) A单元数据计算(Data Computation Unit) D单元…...
【CC2530开发基础篇】继电器模块使用
一、前言 1.1 开发背景 本实验通过使用CC2530单片机控制继电器的吸合与断开,深入了解单片机GPIO的配置与应用。继电器作为一种常见的电气控制元件,广泛用于自动化系统中,用于控制大功率负载的开关操作。在本实验中,将通过GPIO口…...
3D 生成重建035-DiffRF直接生成nerf
3D 生成重建035-DiffRF直接生成nerf 文章目录 0 论文工作1 论文方法2 实验结果 0 论文工作 本文提出了一种基于渲染引导的三维辐射场扩散新方法DiffRF,用于高质量的三维辐射场合成。现有的方法通常难以生成具有细致纹理和几何细节的三维模型,并且容易出…...
安宝特分享 | AR技术助力医院总院与分院间的远程面诊
随着科技的迅猛发展,增强现实(AR)技术在各行各业的应用愈发广泛,特别是在医疗领域,其潜力和价值正在被不断挖掘。在现代医疗环境中,患者常常面临“看病难、看病远、看病急”等诸多挑战,而安宝特…...
【功能安全】硬件常用安全机制
目录 安全机制分类: ECC内存保护: 看门狗定时器WDT 看门狗的诊断覆盖率 程序流监控 软件自检<...
linux上qt打包(二)
sudo apt install git 新建一个文件夹 名为xiazai, chmod -R 777 xiazai cd xiazai 并进入这个文件夹,然后clone git clone https://github.com/probonopd/linuxdeployqt.git 此处可能要fanQiang才能下 cd linuxdeployqt文件夹 下载平台需要的…...
Vue3 左右2栏的宽度 比例resize
Vue3, 页面左右2栏布局,用vue-resizer.页面效果如下图。 安装 npm i vue-resizer引入 import { DragCol, DragRow, ResizeCol, ResizeRow, Resize } from vue-resizer<DragCol height"100%" width"100%" :leftPercent"15">…...
企业车辆管理系统(源码+数据库+报告)
一、项目介绍 352.基于SpringBoot的企业车辆管理系统,系统包含两种角色:管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言:Java 数据库:MySQL 项目管理工具:Maven 前端技术:Vue 后端技术&a…...
LeetCode 1847.最近的房间:有序集合
【LetMeFly】1847.最近的房间:有序集合 力扣题目链接:https://leetcode.cn/problems/closest-room/ 一个酒店里有 n 个房间,这些房间用二维整数数组 rooms 表示,其中 rooms[i] [roomIdi, sizei] 表示有一个房间号为 roomIdi 的…...
C05S07-Tomcat服务架设
一、Tomcat 1. Tomcat概述 Tomcat也是一个Web应用程序,具有三大核心功能。 Java Servlet:Tomcat是一个Servlet容器,负责管理和执行Java Servlet、服务端的Java程序,处理客户端的HTTP请求和响应。Java Server:服务端…...
Vscode搭建C语言多文件开发环境
一、文章内容简介 本文介绍了 “Vscode搭建C语言多文件开发环境”需要用到的软件,以及vscode必备插件,最后多文件编译时tasks.json文件和launch.json文件的配置。即目录顺序。由于内容较多,建议大家在阅读时使用电脑阅读,按照目录…...
mac电脑可以使用的模拟器
BlueStacks Air 推荐-》亲测可用 BlueStacks Air https://www.bluestacks.com 支持macOS/Windows,刚新增了对Apple Silicon系列M芯片的支持 GameLoop https://www.gameloop.com/ 支持 macOS/Windows Genymotion https://www.genymotion.com/ 支持Android/macO…...
vertx idea快速使用
目录 1.官网下载项目 2.修改代码 2.1拷贝代码方式 为了能够快速使用,我另外创建一个新的maven项目,将下载项目的src文件和pom文件拷贝到新建的maven项目。 2.2删除.mvn方式 3.更新配置 4.配置application 5.idea启动项目 1.官网下载项目 从vert…...
selenium 在已打开浏览器上继续调试
关闭浏览器,终端执行如下指令,--user-data-dir换成自己的User Data路径 chrome.exe --remote-debugging-port9222 --user-data-dir"C:\Users\xxx\AppData\Local\Google\Chrome\User Data" 会打开浏览器,打开百度,如下状…...
RequestContextHolder 与 HttpServletRequest 的联系
1. 什么是 RequestContextHolder? RequestContextHolder 是 Spring 框架 提供的一个工具类,用于在当前线程中存储和获取与请求相关的上下文信息。它是基于 ThreadLocal 实现的,能够保证每个线程独立存储和访问请求信息。 与 HttpServletReq…...
力扣hot100——普通数组
53. 最大子数组和 class Solution { public:int maxSubArray(vector<int>& nums) {int n nums.size();int ans nums[0];int sum 0;for (int i 0; i < n; i) {sum nums[i];ans max(ans, sum);if (sum < 0) sum 0;}return ans;} }; 最大子数组和…...
本地部署大模型QPS推理测试
目录 1、测试环境1.1、显卡1.2、模型1.3、部署环境1.3.1、docker1.3.2、执行命令 2、测试问题2.1、20字左右问题2.2、50字左右问题2.3、100字左右问题 3、测试代码3.1、通用测试代码3.2、通用测试代码(仅供参考) 4、测试结果4.1、通用测试结果4.2、RAG测…...
内存、硬盘、DRAM、FLASH
内存 内存是计算机系统中用于临时存储和快速存取当前正在处理的数据和指令的组件,属于临时存储设备,它在计算机运行时用于存储活跃的程序和数据。内存的性能直接影响计算机的处理速度和响应能力。 内存的类型主要分为: DRAM(动态随…...
全景图转6面体图 全景图与6面体图互转
目录 图片转360度全景中心图 依赖项: 库的使用方法: 源代码: 全景图拆成6面体图: 全景图,转6面体,再转全景图: 图片转360度全景中心图 原图: 效果图: 依赖项: pip install py360convert pip install numpy==2.2 库的使用方法: https://g...