学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式

学习笔记:从ncsi/nc-si协议和代码了解网络协议的设计范式

  1. 参考文档:
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
  1. 参考代码
https://github.com/torvalds/linux/blob/master/net/ncsi/ncsi-pkt.h
  1. ncsi/nc-si协议简介:
    一般用于服务器主板上的BMC芯片与智能网卡MAC芯片之间的直连控制线通讯。
    在这里插入图片描述
    Ethernet Header中Des Add全1,且 EtherType = 0x88F8时即为NCSI协议数据。
    在这里插入图片描述
  2. 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           */
};
  1. 以上三种的数据头的公用数据头只有一种ncsi_pkt_hdr
    通过type来区分后续的数据结构,这也是典型的派生类c语言实现方式
struct ncsi_pkt_hdr { //16byte
	unsigned 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                 */
};
  1. 最基本的没有额外描述信息的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];
};
  1. 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      },
  1. ncsi_cmd_sp_pkt 的pad填充区是为了满足最小网络数据包的大小限制
    ncsi_cmd_sp_pkt 长度为16+4+4+22,共46,
    加上前面的Ethernet Header 14byte,再加最后面的FCS,
    刚好凑足64byte

  2. 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      },
  1. 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                              */
  1. netlink.h.c部分
    我的理解是,提供给用户态程序的netlink接口,允许做一些有限操作或查询。

  2. internal.h manager.c部分
    我的理解是, h为多模块共用的结构定义、常量定义
    c部分是内核管理bmc端数据状态的代码,与mac端保持一致。

  3. ncsi的目的和来龙去脉
    ncsi的目的:远程集中管理大型机房中不同型号的服务器。
    一般是通过redfish(dell基于这个进行修改)web界面远程设置服务器的net MAC特性。
    以前这种管理需求是IBM自己的一套管理系统(大概是叫 IPMI),后来延伸到 任意品牌服务器的管理,所以交由dmtf开源组织进行定义(ncsi mctp redfish),实现则由一家codeconstruct.com.au提供。

  4. 一点总结:
    图灵机的7元组中δ是算法,其他都是数据。
    更进一步,一切都是围绕数据去构建的。

数据的本质是真实物理世界的模型映射,数字化后,在硅基电路上进行信息处理,再通过各种物理设备反馈于真实世界。

linux的c实现提供各种优秀的范式,核心只有一个,数据。cpp等语言与c图灵等价。cpp能实现的概念,本质上都可以用c等价实现,只是方法不同,或编译期实现。其实,我满能理解linus本人反对cpp的,虽然不是完全赞同。

操作可以理解为对数据的解释,并反作用于数据。
硬件是基于数字电路对数据进行读写、存储、传输、解释执行的支持。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2024.12.10——攻防世界Web_php_include

知识点:代码审计 文件包含 伪协议 伪协议知识点补充: 在PHP中,伪协议(Pseudo Protocols)也被称为流包装器,这些伪协议以 php://开头,后面跟着一些参数,用于指定要执行的操作或需要…

Wireshark如何查看数据包时间间隔

1.如果数据包量不大&#xff0c;抓包本身也不大&#xff0c;建议从绝对时间判断&#xff0c;打开wireshark软件&#xff0c;并点开相应要分析的抓包文件。 进入到最上方菜单<视图>,在弹出菜单选择时间显示格式&#xff0c;再在右侧菜单中选择自捕获经过的秒数。 这样就可…

【ChatGPT】解锁AI思维链:如何让机器像人类一样思考?

在人工智能领域&#xff0c;我们一直在追求让机器像人类一样思考。然而&#xff0c;即使是最先进的AI&#xff0c;也常常被诟病缺乏“常识”&#xff0c;难以理解复杂问题&#xff0c;更不用说像人类一样进行逻辑推理和解决问题了。最经常的表现就是遇到不会的地方&#xff0c;…

MVC基础——市场管理系统(四)

文章目录 项目地址六、EF CORE6.1 配置ef core环境6.2 code first6.2.1 创建Database context1. 添加navigation property2. 添加MarketContext上下文七、Authentication7.1 添加Identity7.2 Run DB migration for Identity7.3 使用Identity7.3.1 设置认证中间件7.3.2 设置权限…

FinClip | 2024年11月产品大事记

FinClip 的使命是使您&#xff08;业务专家和开发人员&#xff09;能够通过小程序解决关键业务流程挑战&#xff0c;并完成数字化转型的相关操作。不妨让我们看看在11月的产品与市场发布亮点&#xff0c;看看是否有助于您实现目标。 产品方面的相关动向&#x1f447;&#x1f…

华为eNSP:VRRP

一、VRRP背景概述 在现代网络环境中&#xff0c;主机通常通过默认网关进行网络通信。当默认网关出现故障时&#xff0c;网络通信会中断&#xff0c;影响业务连续性和稳定性。为了提高网络的可靠性和冗余性&#xff0c;采用虚拟路由冗余协议&#xff08;VRRP&#xff09;是一种…

安卓主板_MTK联发科android主板方案

在当前智能设备的发展中&#xff0c;安卓主板的配置灵活性和性能优化显得尤为重要。安卓主板的联发科方案&#xff0c;在芯片上&#xff0c;搭载联发科MTK6761、MT8766、MT6765、MT6762、MT8768、MT8390、MTK8370以及MT8788等型号&#xff0c;均基于64位的四核或八核架构设计。…

【论文阅读】PRIS: Practical robust invertible network for image steganography

内容简介 论文标题&#xff1a;PRIS: Practical robust invertible network for image steganography 作者&#xff1a;Hang Yang, Yitian Xu∗, Xuhua Liu∗, Xiaodong Ma∗ 发表时间&#xff1a;2024年4月11日 Engineering Applications of Artificial Intelligence 关键…

Redis应用—1.在用户数据里的应用

大纲 1.社区电商的业务闭环 2.Redis缓存架构的典型生产问题 3.用户数据在读多写少场景下的缓存设计 4.热门用户数据的缓存自动延期机制 5.缓存惊群与穿透问题的解决方案 6.缓存和数据库双写不一致问题分析 7.基于分布式锁保证缓存和数据库双写一致性 8.缓存和数据库双写…

【Tomcat】理解tomcat与Socket

目录 1. Tomcat 1.1 Tomcat帮助启动http服务器。 1.2 tomcat理解&#xff1a; 2. 计算机网络最基本的流程 2.1 信息是怎么来的&#xff1f; 2.2 端口是干什么的&#xff1f; 3. 简单的Socket案例 服务端 客户端 启动&#xff1a; 3.2 在Tomcat发送信息&#xff0c;看…

Linux / Windows | ping IP + Port 测试

注&#xff1a;本文为 “Linux / Windows | ping IP Port 测试端口通畅” 相关文章合辑。 未整理去重。 windows 如何确认服务器上程序端口是否正常&#xff08;ping、tcping&#xff09; 三希已于 2023-05-22 18:08:06 修改 方式 1&#xff1a;ping 命令 ping 命令说明 p…

计算机网络之网络层超详细讲解

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 计算机网络之网络层超详细讲解 收录于专栏【计算机网络】 本专栏旨在分享学习计算机网络的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; …

LLMC:大语言模型压缩工具的开发实践

关注&#xff1a;青稞AI&#xff0c;学习最新AI技术 青稞Talk主页&#xff1a;qingkelab.github.io/talks 大模型的进步&#xff0c;正推动我们向通用人工智能迈进&#xff0c;然而庞大的计算和显存需求限制了其广泛应用。模型量化作为一种压缩技术&#xff0c;虽然可以用来加速…

jvm内存优化方式

1. JVM&#xff08;Java Virtual Machine&#xff09;&#xff1a; • 定义&#xff1a;Java虚拟机&#xff0c;是运行Java字节码的抽象计算机。 • 内存管理&#xff1a;负责内存的分配和回收&#xff0c;是JVM内存优化的核心。 2. 堆&#xff08;Heap&#xff09;&#xff1a…

360智脑张向征:共建可信可控AI生态 应对大模型安全挑战

发布 | 大力财经 人工智能的加速发展&#xff0c;有力推动了社会的数智化转型&#xff1b;与此同时&#xff0c;带来的相关安全风险也日益凸显。近日&#xff0c;在北京市举办的通明湖人工智能开发与应用大会上&#xff0c;360智脑总裁张向征以“大模型安全研究与实践”为主题&…

CNCF云原生生态版图-分类指南(三)- 运行时

CNCF云原生生态版图-分类指南&#xff08;三&#xff09;- 运行时 CNCF云原生生态版图-分类指南三、运行时&#xff08;Runtime&#xff09;&#xff08;一&#xff09;云原生存储&#xff08;Cloud Native Storage&#xff09;1. 是什么&#xff1f;2. 解决什么问题&#xff1…

【实验】基于双向LSTM和注意力机制的文本分类

目录 1 数据 2 模型构建 2.1 注意力打分函数 2.1.1 加性模型 2.1.2 点积模型 2.2 注意力分布计算 2.3 加权平均 2.4 完整注意力机制的实现 2.4 模型汇总 3 模型训练 3.1 使用加性注意力模型 3.2 使用点积注意力模型 4 模型评价 4.1 使用加性注意力模型 4.2 使用点…

Tongweb7049M4有关SSL/TLS 服务器瞬时 Diffie-Hellman 公共密钥过弱的处理方案(by lqw)

前提条件&#xff1a;Tongweb7049M4已在http通道里配置了https&#xff08;如何配置https可以参考这个帖子&#xff1a;东方通TongWEB添加Https证书&#xff0c;开启SSL&#xff09; 遇到客户在配置了https后&#xff0c;扫描漏洞提示&#xff1a; 有关SSL/TLS 服务器瞬时 Dif…

浩辰CAD教程004:柱梁板

文章目录 柱梁板标准柱角柱构造柱柱齐墙边绘制梁绘制楼板 柱梁板 标准柱 绘制标准柱&#xff1a; ①&#xff1a;点选插入柱子②&#xff1a;沿着一根轴线布置柱子③&#xff1a;指定的矩形区域内的轴线交点插入柱子 替换现有柱子&#xff1a;选择替换之后的柱子形状&#x…

VScode 配置 debug环境

首先请阅读官方文档 Debug python 在vscode 中安装好对应的python 插件 运行程序不存在输入参数的时候 当运行python脚本不存在输入参数的时候&#xff0c;可以使用右上角的直接开始debug 然后开始调试即可。 当需要配置输入参数的时候 在当前项目下 .vscode目录 中 添加…