Bootstrap

mctp入门(一):mctp入门简介

一、协议定义

  • 定位
    专为平台管理子系统设计的通信协议,用于管理控制器(如BMC)与其他管理控制器或管理设备之间的标准化通信。

核心设计目标

  1. 跨总线兼容性

    • 协议设计支持多种物理总线类型(如I2C、PCIe、SMBus等),实现异构传输层统一管理。
  2. 分层架构

    • 消息格式:标准化数据封装规则,确保端到端语义一致性。
    • 传输描述:定义不同总线的适配层,抽象物理差异。
    • 消息交换模式:支持请求-响应、异步通知等交互机制。
    • 配置与初始化:提供设备发现、参数协商等基础服务。

典型应用场景

平台类型管理用例
移动设备/嵌入式系统低功耗传感器监控、远程诊断
桌面/工作站硬件状态上报、固件热更新
服务器/数据中心多节点BMC协同管理、带外大规模设备监控

二、数据帧简介

MCTP报文结构概览

报文层次字段组成功能定位
物理介质相关部分Medium-specific Header + Trailer适配底层总线特性(如SMBus地址、PCIe TLP封装)
通用传输头MCTP Transport Header (32 bits)跨介质通用控制信息(版本、路由、分片控制)
消息体Message Body (含IC标志、消息类型、数据、完整性校验等)应用层负载与协议扩展能力

MCTP Transport Header字段详解

字段名位数描述关键作用
RSVD4 bits保留字段,未来扩展使用为协议演进预留空间
Hdr Version4 bits头部版本标识,由物理介质绑定规范定义(如SMBus与PCIe可能版本不同)支持多版本介质适配
Destination EID8 bits目标端点ID(EID),用于路由确定报文接收方,支持广播/组播(特殊EID值)
Source EID8 bits源端点ID(EID),标识发送方用于响应路由与消息跟踪
SOM1 bit置1表示当前包为消息的第一个分片多包消息起始标志,触发接收方重组缓冲区初始化
EOM1 bit置1表示当前包为消息的最后一个分片指示消息结束,触发接收方处理完整消息
Pkt Seq #2 bits包序列号(模4递增),用于检测丢包允许检测最多连续3个包丢失(如序列0→1→2→3→0...)
Msg Tag3 bits消息标签,结合Source EID和TO字段唯一标识消息支持同一源到目标的多消息并发传输(不同标签区分)
TO (Tag Owner)1 bit标签所有者标识:
• 0: 目标端点生成标签(如响应)
• 1: 源端点生成标签(如请求)
区分请求/响应消息,避免标签冲突

Message Body字段解析

字段名位置/大小描述交互逻辑
IC (Integrity Check)1 bit (消息体首字节最高位)指示是否包含消息完整性校验(如CRC)若置1,消息体末尾需携带校验字段,校验范围由消息类型定义
Message Type7 bits (消息体首字节最低7位)定义消息类型(如控制命令、传感器数据、错误报告)决定后续Message Header/Data的解析规则
Message Header0-M bytes消息类型专用头部(如事务ID、优先级标志)仅首包携带,部分消息类型可能无此字段
Message Data0-N bytes应用层数据(如传感器读数、固件块、配置参数)跨包传输时按分片顺序重组
Msg Integrity Check可变消息类型特定的完整性校验字段(如CRC32),位于消息体末尾校验失败触发重传(可靠模式)或丢弃(非可靠模式)

三、发现与寻址流程

MCTP网络通过五步标准化流程实现设备发现与通信准备,确保异构总线环境中设备可互操作:

步骤目标关键活动
1. 总线枚举识别物理总线上连接的设备- 总线控制器扫描物理连接(如PCIe枚举、I2C地址探测)
- 生成设备物理拓扑图
2. 总线地址分配为设备分配物理层通信地址- 静态分配(预定义地址)或动态分配(如SMBus ARP)
- 确保总线内地址唯一性
3. MCTP能力发现确认设备支持MCTP协议并获取其能力参数- 发送Get MCTP Version控制消息
- 解析设备响应的支持特性(如消息类型、最大传输单元)
4. 端点ID分配(EID)为每个MCTP设备分配逻辑端点ID,用于网络层路由- 中央控制器(如BMC)通过Set Endpoint ID消息分配EID
- 避免EID冲突(如使用位掩码保留范围)
5. 路由信息分发与使用构建网络路由表,确保跨总线、跨桥接设备的消息可达性- 桥接设备上报路由表(如通过Update Routing Table消息)
- 控制器聚合拓扑信息并同步至相关设备

四、MCTP控制协议核心概念

角色定义
术语描述
Requester发起控制请求(Request)的端点(例如BMC请求设备状态)
Responder响应请求的端点(如设备返回状态数据)
Originator/Source任何控制消息的发起者(包括Request/Response/Datagram)
Target/Destination控制消息的接收方
Asynchronous Notification端点主动发送的非请求型数据报(如事件告警)
Broadcast使用广播EID(0xFF)发送到总线所有端点的消息

控制消息类型

消息类型特征应用场景
Request- 需响应(Response)
- 包含Command Code(操作类型)
- 示例:Get Device ID
主动查询设备能力或状态
Response- 包含Completion Code(执行结果)
- 携带请求返回数据
响应请求(成功/失败及附加信息)
Datagram- 无响应
- 单向传输(如事件通知)
异步事件上报(如温度超阈值告警)
Broadcast Request- 广播发送到所有端点
- 需响应(各端点独立回复)
总线范围设备发现(如Get Endpoint List
Broadcast Datagram- 广播发送且无响应全局配置下发(如时间同步广播)
关键字段详解
字段位宽/值作用
IC1bit (0b)固定为0(控制消息不启用消息完整性校验)
Message Type7bit (0x00)标识为MCTP控制消息
Rq bit1bit- 1: Request消息
- 0: Response/Datagram消息
D-bit1bit- 0: 用Instance ID匹配请求与响应
- 1: 仅标识重传消息(Datagram专用)
Instance ID1字节标识消息实例:
- 防止重复处理(如重传时ID不变)
- 匹配请求与响应
Command Code1字节定义请求操作类型(如0x01=Get Endpoint ID,详见规范表12)
Completion Code1字节响应状态码(如0x00=成功0x80=无效参数,详见规范表13)
Message Data可变长度携带请求参数或响应结果(格式由Command Code定义)

五、 MCTP控制命令概览

关键命令分类
命令码命令名称核心功能适用设备强制/可选性
0x01Set Endpoint ID为指定物理地址的端点分配EID总线所有者(非顶级)端点:Mandatory to accept (Ma)
0x02Get Endpoint ID查询端点的当前EID、类型及静态EID使用状态所有端点端点:Mandatory to accept (Ma)
0x03Get Endpoint UUID获取端点的唯一UUID(热插拔设备必须支持)支持热插拔的端点条件性支持 (Ca2)
0x07Resolve Endpoint ID解析目标EID的物理地址和下一跳桥接信息桥接/总线所有者桥接:Mandatory to accept (Ma)
0x0FQuery Hop发现目标端点的路径桥接及传输单元限制桥接桥接:Mandatory to accept (Ma)
0x0BPrepare for Endpoint Discovery清空端点的“已发现”标志,准备响应发现命令支持动态发现的设备条件性生成 (Cg3)
0x0CEndpoint Discovery主动发现总线上的MCTP设备(若物理层无其他发现机制)总线所有者条件性生成 (Cg3)

命令适用性规则

OMC列解读
标识符含义
Ma必须接受(端点必须处理该命令并生成响应)
Mg必须生成(端点需主动发起该命令)
Oa/Og可选接受/生成(根据实现需求决定是否支持)
Ca/Cg条件性接受/生成(需满足特定条件,如物理层绑定规范要求)
Na/Ng不适用(设备类型不支持该命令)
关键条件注释
  1. Set Endpoint ID
    • 顶级总线所有者无需支持此命令(EID分配由上层协议完成)。
  2. Routing Information Update
    • 若桥接静态配置路由表,可不支持此命令。
  3. Transport Specific Commands (0xF0-0xFF)
    • 传输层绑定专用命令(如PCIe/SMBus特有配置),禁止跨桥接转发。

完成代码(Completion Codes)

代码名称场景示例
0x00SUCCESS命令执行成功(如Get Endpoint ID返回有效EID)。
0x02ERROR_INVALID_DATA请求参数非法(如Set Endpoint ID中EID超出范围)。
0x03ERROR_INVALID_LENGTH消息长度不符(如Query Hop请求缺少必要字段)。
0x05ERROR_UNSUPPORTED_CMD接收方不支持该命令(如向简单端点发送Allocate Endpoint IDs)。
0x80-0xFFCOMMAND_SPECIFIC_ERROR命令特定错误(如Prepare for Discovery在非发现阶段调用返回0x81)。
;