首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

浅谈 NCSI 及其在 Linux 上的实现(3)NCSI 包结构

浅谈 NCSI 及其在 Linux 上的实现(3)NCSI 包结构

NCSI 包结构NCSI 的以太网帧头正如前文所述,NCSI 是基于以太介质的。所有的 NCSI 包都是封装在 IEEE 802.3 定义的以太网帧格式中的,即:任意一个 NCSI 包都被封装在 14 字节的以太网头及 4 字节的以太网尾中,如图 3 所示:
图 3. NCSI 包的以太帧格式
  • 目的地址字段:                                                NCSI 以太帧的第 0 到 5 字节分别代表以太网目的地址的第 5 到 0 字节。由于传输 NCSI 命令的信道并没有被分配一个特定的 MAC 地址,所以 NCSI 以太帧的目的地址为广播地址(FF:FF:FF:FF:FF:FF)。
    如果网络控制器收到了一个目的地址不是 FF:FF:FF:FF:FF:FF 的 NCSI 包,则它会直接丢弃该数据包并且返回一个错误响应。
  • 源地址字段:                        NCSI 以太帧的第 6 到 11 字节分别代表以太网源地址的第 5 到 0 字节。如果 NCSI 包来自于管理控制器,那么源地址字段可以为任意值。如果 NCSI 包来自于网络控制器,则源地址字段必须为 FF:FF:FF:FF:FF:FF。
  • 类型字段:                        NCSI以太帧的第 12、13 字节分别代表以太网类型的第 1、0 字节。对于NCSI 控制包而言,其类型字段为 0x88F8。
NCSI 控制包头每个 NCSI 包(包括 NCSI 请求包、响应包以及 AEN 包)都有一个 16 字节长的控制包头,以大端在先顺序排列,如图 4 所示:
图 4. NCSI 控制包头格式
  • Management Controller ID(MC ID)字段                        MC ID 字段 1 字节长,标识了 NCSI 包对应的管理控制器。在 NCSI 1.0.0a 版本中,该字节规定为 0x00。
    网络控制器每收到一个管理控制器发出的 NCSI 请求时都必须将请求包中的 MC ID 字段拷贝到响应包的 MC ID 字段中。
  • Header Revision 字段                        Header Revision 字段 1 字节长,标识了 NCSI 命令包头的版本号。在 NCSI 1.0.0a 版本中,该字节规定为 0x01.
  • IID 字段                        IID 字段 1 字节长。正如上文所述,网络控制器可以用 IID 来辨别当前 NCSI 命令是一个新的请求还是一个超时重传的请求;管理控制器可以用 IID 来确认某个特定的 NCSI 请求是否得到了相应。
  • Command 字段                        Command 字段 1 字节长,用于标识特定的 NCSI 命令请求与响应。每个 NCSI 请求命令都对应着 0x00 到 0x7F 之间唯一的一个命令号,而对该 NCSI 请求包的响应的命令号就是把 NCSI 请求的命令号的最高位置为 1,这样就建立了 128 个 NCSI 请求命令与相应的 128 个 NCSI 响应命令之间的一一对应关系。
  • Channel ID 字段                        Channel ID 字段 1 字节长。每个 NCSI 管理控制器可以对应一个或者多个 package,这些 package 可以属于同一个网络控制器,也可以属于不同的网络控制器。每个 package 的内部又可以定义一个或者多个信道(channel)。所有的 NCSI 数据包都是在某个特定的 channel 中传输的,Channel ID 字段就标识了当前 NCSI 数据包所在的 channel。
  • Payload Length 字段                        Payload Length 字段 12 比特长,标识了紧随 NCSI 包头之后的 NCSI 载荷的长度。
  • Reserved 字段                        图中标有 Reserved 的区域均为保留字段,通常被置为 0。
NCSI 控制包载荷NCSI 控制包载荷的数据都是按照大端在先的顺序排列的,包括数据、载荷填充、校验和以及以太包填充 4 部分,如图 5 所示:
图 5. NCSI 控制载荷格式
  • 数据(Data)部分:                        NCSI 请求不含 Data 部分。
    每个 NCSI 响应都有 2 字节的响应值和 2 字节的原因值。对于某些 NCSI 命令的响应,还有一定长度的附加信息。
  • 载荷填充部分:                        如果 NCSI 的 Data 部分长度不是 4 字节的整数倍,那么就需要将其填充为 4 字节的整数倍。所有的填充值均为 0x00.
  • 校验和部分:                        校验和部分 4 字节长。管理控制器和网络控制器可以利用校验和部分来对 NCSI 包进行校验,也可以将校验和部分设为全 0,从而表明该 NCSI 包不需要校验。
  • 以太包填充部分:                        根据 IEEE 802.3 标准,所有的以太帧长度必须大于 64 字节,也就是说,NCSI 包头和 NCSI 载荷的长度之和必须大于 46 字节。事实上,大部分的 NCSI 包都无法满足这一条件。因此,几乎所有的 NCSI 包的末尾都需要作一定长度的填充。
AEN 包格式NCSI 的 AEN 包格式如图 6 所示:
图 6. AEN 包格式发送 AEN 包的网络控制器需要在 NCSI 包头的 Channel ID 字段里标识发生相应事件的 channel 号。
AEN 包的 NCSI 头的 IID 字段始终为 0x00,command 字段始终为 0xFF,Payload Length 字段始终为 0x04,也就是说 AEN 包的 NCSI 载荷长度为 4。
AEN 包的 NCSI 载荷中 3 字节为保留字段,另外一个字节为 AEN 类型字段,对应的含义如表 1 所示:
表 1. AEN 类型值与含义的对应关系AEN类型值含义 0x00 链路状态发生了改变 0x01 需要对网络控制器进行配置 0x02 网络控制器驱动的状态发生了改变 0x03 ~ 0x7F 保留 0x80 ~ 0xFF 各厂商自定义的 AEN 事件
返回列表