《NVMe-over-Fabrics-1_0a-.07.23-Ratified》阅读笔记(3)-- 命令

时间:2024-03-23 10:16:21

3 命令

Fabrics命令用于创建队列和初始化controller。Fabrics命令的Opcode字段填写0x7F。无论controller是否处于使能状态(CC.EN)Fabrics命令都会被处理。Fabrics命令capsule在第2.1章节中定义,Fabrics应答capsule和状态在第2.2章节中定义。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.1 认证接收命令和应答

Authentication Receive命令传输状态和一个或多个前边提交到controller的Authentication Send命令的数据结果。

Authentication Receive命令与前边Authentication Send命令之间的关联关系依赖于安全协议。传输数据的格式依赖于安全协议。安全协议详情请参考SPC-4。

Authentication Receive命令返回符合安全协议规则定义的Authentication Send命令的恰当数据。如果controller和主机之间出现通信丢失,或发生了Controller Level Reset,Authentication Receive命令数据不能保留。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.2 认证发送命令和应答

Authentication Send命令用于传输安全协议数据到controller。传输的数据结构作为命令的一部分包括controller要执行的特定于安全协议的命令。数据结构可能包含与安全协议特定命令相关的数据或参数。对于Authentication Send命令提交的安全协议特定命令返回给主机的状态和数据,由Authentication Receive命令取回。

Authentication Send命令与随后Authentication Receive命令直接的关联依赖于在SPC-4中定义的Security Protocol字段。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.3 连接命令和应答

Connect命令用于创建SQ和CQ队列对。如果Admin队列被指定,那么Connect命令建立一个主机和controller之间的关联关系。SQE(Submission Queue Entry)各字段的定义请参见Figure 19,数据部分的字段定义请参见Figure 20。

使用单个Host NQN的主机可以利用多个Host Identifier指派为彼此独立的(例如,主机的物理或逻辑划分)主机个体来访问一个NVM subsystem。或者选择另一种方式,一个主机可以使用多个Host NQN值被NVM subsystem作为独立的主机来对待。

NVM subsystem不能在0xFFF0~0xFFFF范围内申请Controller ID来作为Connect命令completion的有效Controller ID。如果NVM subsystem中的任何controller都不允许与这个主机建立关联,那么返回Connect Invalid Host。

如果NVM subsystem支持动态controller模式,那么:

  • 对Admin队列在Connect命令中必须指定0xFFFF作为Controller ID,否则返回Invalid Field in Command状态值;
  • NVM subsystem必须向主机返回一个可用的controller,在Connect应答中标明申请到的Controller ID。

如果NVM subsystem支持静态controller模式,那么:

  • 对于Admin队列,主机可以在Connect命令中请求一个指定的controller。如果主机不允许与指定的这个controller建立关联,那么返回Connect Invalid Host状态;
  • 在Admin队列上值为0xFFFE的Controller ID表示可以给申请任意的Controller ID,申请到的Controller ID在Connect应答中返回;
  • 对于Admin队列,如果主机指定Controller ID值为0xFFFF,那么返回Connect Invalid Parameters状态值。

NVM subsystem可以为特定的主机申请特定的controller。如果主机请求的controller不是为这个主机申请的,那么返回Connect Invalid Host状态值。

在与controller的I/O队列建立连接之前,主机必须与一个controller建立起关联并且使能controller。如果在controller被使能之前,主机发送Connect命令为I/O队列指定一个Queue ID,那么返回Connect Invalid Parameters状态值。如果主机发送Connect命令中为Admin队列或I/O队列指定的Queue ID已经被创建,那么返回Command Sequence Error状态值。

如果Host Identifier,Host NQN,NVM Subsystem NQN,Controller ID为I/O队列指定,但与主机和controller之间已经建立关联中那个Admin队列指定的值不相同,那么返回Connect Invalid Parameters状态值。如果Host NQN或NVM Subsystem NQN值与NVM subsystem所配置的值不匹配,那么返回Connect Invalid Parameters状态值。如果Host NQN或NVM Subsystem NQN值(NQN值的格式参考NVMe基础规格说明书第7.9章节)有语法错误,那么返回Connect Invalid Parameters状态值。如果Host Identifier为0,那么返回Connect Invalid Parameters状态值。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

Connect应答为Connect命令提供状态。如果连接已经被建立,那么为主机申请到的Controller ID被返回。Connect应答格式定义请参见Figure 21。

对于一个失败的Connect命令,controller不得:

  • 返回Invalid Field in Command状态值;
  • 向Error Infomation Log中添加条目。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.4 Property Get命令和应答

Property Get命令用于主机获得指定的property值。Property Get命令各字段的定义在Figure 23中。如果指定了一个无效的property或无效的偏移量,那么应该返回Invalid Field in Command状态值。 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

 

Property Get应答用于返回给主机那个请求的property值。Property Get应答格式在Figure 24中定义。 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.5 Property Set命令和应答

Property Set命令用于设置一个property值。Property Set命令各字段的定义在Figure 25中。如果指定了一个无效的property或无效的偏移量,那么应该返回Invalid Field in Command状态值。 

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

 

Property Set应答为Property Set命令提供状态。Property Set应答在Figure 26中定义。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令

3.5.1 Property定义

一个property占controller属性的四个字节或八个字节。属性可以读、写、或读/写访问。主机访问property时必须从起始位置加偏移量用原生宽度来访问。【就是说访问时从开始位置加偏移量找到这个property,然后根据具体property的长度一次访问四个字节或八个字节】。所有保留的property或property中保留的某些bit位都是只读的,读取时返回0。Property们也许可以用Property Get命令读,也许可以用Property Set命令写。

property地址范围从0到0xFFF,是对等于NVMe over PCIe中定义的寄存器功能而保留的。从0x1000到0x12FF的property地址范围是被NVMe over Fabrics保留的定义内容。为NVMe over PCIe定义的门铃寄存器在NVMe over Fabrics中是不支持的。

Figure 27指定的这些property是被NVMe over Fabrics支持的。

《NVMe-over-Fabrics-1_0a-2018.07.23-Ratified》阅读笔记(3)-- 命令