[NVMe-MI] 3. Message Transport
3. Message Transport
이 specification는 여러 메시지 전송 방식을 지원하는 인터페이스를 정의합니다. 3.1 절에서 설명한대로, 메시지 형식은 Out-of-band 메커니즘과 In-band 터널링 메커니즘 모두 동일합니다. Out-of-band 메시지 전송에 대한 내용은 3.2 절에서 설명하고 있으며, In-band 터널링 메시지 전송은 3.3 절에서 설명되어 있습니다.
3.1 NVMe-MI Messages
NVMe-MI 메시지는 Out-of-band 메커니즘과 In-band 터널링 메커니즘 모두에서 사용됩니다. NVMe-MI 메시지의 형식은 Figure 18 및 Figure 19에 나와 있습니다.
Out-of-band 메커니즘에서 NVMe-MI 메시지는 하나 이상의 MCTP 패킷의 페이로드로 구성됩니다. 최대 크기의 NVMe-MI 메시지는 4,224 바이트입니다 (즉, 4 KiB + 128 바이트). NVMe Management Messages over MCTP Binding Specification을 참조하십시오. 길이가 4,224 바이트를 초과하는 NVMe-MI 메시지는 잘못된 NVMe-MI 메시지로 간주됩니다. Out-of-band 메커니즘에서 NVMe-MI 메시지가 어떻게 사용되는지에 대한 자세한 내용은 섹션 4.2를 참조하십시오.
In-band 터널링 메커니즘에서 NVMe-MI 메시지는 MCTP 패킷으로 분할되지 않으며 최대 NVMe-MI 메시지 크기는 Maximum Data Transfer Size와 동일합니다 (NVM Express Base Specification을 참조하십시오). In-band 터널링 메커니즘에서 NVMe-MI 메시지가 어떻게 사용되는지에 대한 자세한 내용은 섹션 4.3을 참조하십시오.
3.1.1. Message Fields
NVMe-MI 메시지의 형식은 첫 번째 dword에 있는 메시지 헤더로 시작하여 메시지 데이터가 이어집니다. 무결성 검사 (IC) 비트가 '1'로 설정된 경우, NVMe-MI 메시지는 Figure 18에 나와 있는 것처럼 메시지 무결성 검사로 끝납니다.
메시지 헤더에는 MCTP Base Specification에서 정의된 메시지 타입 (MT) 필드 및 무결성 검사 (IC) 비트가 포함되어 있습니다. 메시지 타입 필드는 메시지 본문에 포함된 페이로드 유형을 지정하며 모든 NVMe-MI 메시지에서 4h로 설정되어야 합니다 (MCTP IDs and Codes specification을 참조하십시오). 무결성 검사 (IC) 비트는 NVMe-MI 메시지가 메시지 무결성 검사에 의해 보호되는지 여부를 나타냅니다. Out-of-band 메커니즘에서 모든 NVMe-MI 메시지는 메시지 본문 내용 위에 계산된 32비트 CRC에 의해 보호되어야 합니다. IC 비트는 Out-of-band 메커니즘에서 모든 NVMe-MI 메시지에서 '1'로 설정되어야 합니다. In-band 터널링 메커니즘에서 모든 NVMe MI 메시지에서 무결성 검사 (IC) 비트는 '0'으로 설정되어야 합니다.
메시지 헤더의 Request or Response (ROR) 비트는 NVMe-MI 메시지가 요청 메시지인지 응답 메시지인지를 지정합니다. NVMe-MI 메시지 타입 (NMIMT) 필드는 요청 메시지가 제어 프리미티브인지 특정 유형의 명령 메시지인지를 지정합니다 (Figure 24를 참조하십시오). Command Slot Identifier (CSI) 비트는 Out-of-band 메커니즘에서 NVMe-MI 메시지가 연관된 Command Slot을 지정합니다. Command Slots에 대한 자세한 내용은 섹션 4.2를 참조하십시오.
Message Header에 있는 Management Endpoint Buffer (MEB) 비트는 NVMe-MI 메시지의 Message Data가 해당하는 NVMe-MI 메시지의 Message Data 필드에 포함되는지 아니면 Management Endpoint Buffer에 있는지를 지정합니다. 이 비트는 Management Endpoint Buffer 작업을 지원하는 Command Messages에서만 '1'로 설정되어야 합니다 (즉, Management Endpoint Buffer Supported Command List 데이터 구조에 나열된 명령). MEB 비트가 다른 Command Message에서 '1'로 설정된 경우 Management Endpoint는 MEB 비트를 나타내는 PEL 필드와 함께 Invalid Parameter 오류 응답을 반환해야 합니다.
Command Initiated Auto Pause (CIAP) 비트는 Command Message의 Message Header에 있는 것으로, Management Endpoint가 Command Message가 Process 상태로 들어갈 때 자동으로 일시 중지되는지 여부를 지정합니다. CIAP 비트가 '1'로 설정된 Command Message는 Management Endpoint에서 Process 상태에서 암시적으로 Pause Control Primitive를 수신했을 때와 마찬가지로 처리되어야 합니다. 다만 Management Endpoint는 Control Primitive Response Message를 전송하지 않아야 합니다. Figure 95의 Command Initiated Auto Pause Supported (CIAPS) 비트는 Command Messages에서 CIAP 비트를 지원하는지 나타냅니다.

MCTP Data (MCTPD): 이 필드에는 MCTP Base Specification에서 정의한 Message Type 및 Integrity Check 필드가 포함되어 있습니다.
7 - Integrity Check (IC):
이 비트는 MCTP Base Specification에서 정의되며, MCTP 메시지가 전체적인 MCTP 메시지 무결성 검사에 의해 보호되는지 여부를 나타냅니다.
외부 밴드 메커니즘에서 모든 NVMe-MI Messages는 CRC에 의해 보호되어야 하며, 따라서 이 비트는 외부 밴드 NVMe MI Messages의 모든 경우에 '1'로 설정되어야 합니다.
내부 밴드 터널링 메커니즘에서는 모든 NVMe-MI Messages가 CRC에 의해 보호되지 않아야 하며, 따라서 이 비트는 내부 밴드 NVMe-MI Messages의 모든 경우에 '0'으로 설정되어야 합니다.
6:0 - Message Type (MT):
이 필드는 MCTP Base Specification에서 메시지 유형을 정의합니다. 이 필드는 모든 NVMe-MI Messages에서 4h로 설정되어야 합니다. MCTP IDs and Codes specification을 참조하세요.

NVMe-MI Message Parameters (NMP): 이 필드는 NVMe-MI Message에 적용되는 매개변수를 포함합니다.
7 - Request or Response (ROR): 이 비트는 메시지가 Request Message인지 Response Message인지를 나타냅니다. 이 비트는 Request Messages의 경우 '0'으로 설정되며, Response Messages의 경우 '1'로 설정됩니다.
6:3 - NVMe-MI Message Type (NMIMT): 이 필드는 NVMe-MI 메시지 유형을 지정합니다. 각 NVMe-MI 메시지 유형에 대한 자세한 내용 및 이 유형이 out-of-band 메커니즘, in-band 터널링 메커니즘 또는 둘 다에 해당하는지에 대한 세부 정보는 아래 표에 나와 있는 섹션을 참조하십시오.
0 - Command Slot Identifier (CSI): 이 비트는 NVMe MI 메시지가 연관된 Command Slot을 나타냅니다. Request Messages의 경우 이 비트는 Request Message가 연관된 Command Slot을 나타냅니다. Response Messages의 경우 이 비트는 Response Message가 연관된 Request Message의 Command Slot을 나타냅니다. 이 비트는 out-of-band 메커니즘에서만 해당됩니다. 이 비트는 in-band 터널링 메커니즘에서는 예약되어 있습니다.
Command Initiated Auto Pause (CIAP): 이 비트가 Command Message에서 '1'로 설정되면, 해당 Command Message가 Process 상태로 전환될 때 Management Endpoint는 자동으로 일시 중단됩니다. 이 비트가 Command Message에서 '0'으로 설정되면, 해당 Command Message가 Process 상태로 전환될 때 Management Endpoint는 자동으로 일시 중단되지 않습니다.
이 비트는 out-of-band 메커니즘을 사용하여 전송된 Command Messages에 대해서만 유효하며, 다른 모든 유형의 NVMe-MI Messages에 대해서는 예약되어 있습니다. 만약 이 비트가 Command Message 이외의 Management Endpoint에서 수신한 모든 NVMe MI Message 유형에 대해 '1'로 설정된 경우, PEL 필드가 이 비트를 나타내는 Invalid Parameter Error Response가 반환됩니다.
이 비트가 in-band 터널링 메커니즘에서 '1'로 설정된 경우, PEL 필드가 이 비트를 나타내는 Invalid Parameter Error Response가 반환됩니다.
Management Endpoint Buffer (MEB): 이 비트는 Command Message의 Message Data가 이 NVMe-MI Message의 Message Data 필드에 포함되어 있는지 아니면 Management Endpoint Buffer에 포함되어 있는지를 나타냅니다. 섹션 3.1을 참조하십시오.
- 0b: Message Data는 이 NVMe-MI Message의 Message Data에 포함됩니다.
- 1b: Message Data는 Management Endpoint Buffer에 포함됩니다.
이 비트는 out-of-band 메커니즘을 사용하여 전송된 Command Messages에 대해서만 유효하며, 다른 모든 유형의 NVMe-MI Messages에 대해서는 예약되어 있습니다. 만약 이 비트가 Command Message 이외의 Management Endpoint에서 수신한 모든 NVMe MI Message 유형에 대해 '1'로 설정된 경우, PEL 필드가 이 비트를 나타내는 Invalid Parameter Error Response가 반환됩니다. 이 비트가 in-band 터널링 메커니즘에서 '1'로 설정된 경우, PEL 필드가 이 비트를 나타내는 Invalid Parameter Error Response가 반환됩니다.
Message Data (DATA): 이 필드에는 NVMe-MI Message의 페이로드가 포함됩니다. 이 필드의 형식은 NVMe-MI Message Type에 따라 달라집니다.
Message Integrity Check (MIC): Integrity Check (IC) 비트가 '1'로 설정된 경우, 이 필드에는 NVMe-MI Message의 내용을 기반으로 계산된 CRC가 포함됩니다. 섹션 3.1.1.1을 참조하십시오. IC 비트가 '0'으로 설정된 경우, 이 필드는 NVMe-MI Message에 포함되지 않습니다. 이 필드는 바이트에 맞춰집니다.
3.1.1.1 Message Integrity Check
만약 Integrity Check (IC) 비트가 '1'로 설정되어 있다면, Message Integrity Check 필드에는 NVMe-MI Message의 내용을 기반으로 계산된 32비트 CRC가 포함됩니다. 이 명세서에서 필요한 32비트 CRC는 CRC-32C (Castagnoli)이며, 이는 생성 다항식 1EDC6F41h를 사용합니다. Message Integrity Check는 다음의 RocksoftTM Model CRC Algorithm 매개변수를 사용하여 계산됩니다:
메시지를 보낼 때, Message Integrity Check는 다음 절차를 사용하거나 동등한 결과를 생성하는 절차를 사용해야 합니다:
- CRC 레지스터를 FFFFFFFFh로 초기화합니다. 이는 NVMe-MI Message의 가장 낮은 32비트를 반전시키는 것과 동등합니다(그림 18의 Dword 0).
- Message Data의 끝에 Message Integrity Check에 공간을 확보하기 위해 32비트의 0을 추가합니다(그림 18의 Dword N). 이로써 Message Integrity Check 필드가 0으로 지워진 Message Body가 생성됩니다.
- Message Body의 비트를 메시지 다항식 M(x)의 계수에 매핑합니다. M(x)의 길이를 Y 바이트로 가정합니다. Message Body의 바이트 0의 비트 0은 M(x)의 가장 중요한 비트이며, 바이트 0의 비트 1은 바이트 Y - 1의 비트 7까지 이어집니다. 각 바이트 내의 비트는 반전됩니다(즉, 각 바이트의 비트 n은 bit (7 - n)에 매핑되어 bit 7에서 bit 0, bit 6에서 bit 1 등이 됩니다).
- 다항식 M(x)를 생성 다항식 1EDC6F41h로 나누어 32비트 나머지 다항식 R(x)를 생성합니다.
- R(x)의 각 바이트를 반전시킵니다 (즉, 각 바이트의 n번째 비트를 (7 - n)으로 매핑하여 비트 7에서 비트 0, 비트 6에서 비트 1 등으로 만듭니다) 결과적으로 다항식 R'(x)가 생성됩니다.
- R'(x)를 반전하여 다항식 R''(x)를 생성합니다.
- R''(x)를 Message Body의 Message Integrity Check 필드에 저장합니다.
NVMe-MI 메시지 수신 시, Message Integrity Check를 다음과 같이 유효성 검사할 수 있습니다:
- 받은 Message Integrity Check를 저장합니다.
- CRC 레지스터를 FFFFFFFFh로 초기화합니다. 이는 NVMe-MI 메시지의 최하위 32비트를 반전하는 것과 동등합니다 (Figure 18의 Dword 0).
- Message Integrity Check 필드를 0으로 지웁니다.
- Message Body의 비트를 Message Integrity Check 계산 절차에서 설명한대로 메시지 다항식 M(x)의 계수로 매핑합니다.
- 다항식 M(x)를 생성 다항식 1EDC6F41h로 나누어 32비트 나머지 다항식 R(x)를 생성합니다.
- R(x)의 각 바이트를 반전시킵니다 (즉, 각 바이트의 n번째 비트를 (7 - n)으로 매핑하여 비트 7에서 비트 0, 비트 6에서 비트 1 등으로 만듭니다) 결과적으로 다항식 R'(x)가 생성됩니다.
- R'(x)를 반전하여 다항식 R''(x)를 생성합니다.
- 단계 1에서 저장한 Message Integrity Check 값과 단계 7에서 얻은 R''(x)를 비교합니다. 두 값이 동일하면 Message Integrity Check가 통과합니다.
Appendix B에 가공된 메시지와 해당하는 Message Integrity Check 값에 대한 참조를 확인하십시오.
Replay Control Primitive에 대해 Management Controller가 Response Replay Offset이 0이 아닌 값을 사용하는 경우 Response Message를 구성하는 특별한 요구 사항에 대한 내용은 섹션 4.2.1.5를 참조하십시오.
3.2 Out-of-Band Message Transport
이 specification에서 정의된 out-of-band 메커니즘은 Management Controller와 Management Endpoint 간의 순서대로 메시지를 전송하기 위해 MCTP를 사용합니다.
이 specification에 따라 규정된 Management Endpoint는 이 specification에 기술된 요구 사항에 추가하여 Management Component Transport Protocol (MCTP) Base Specification 및 해당 MCTP 전송 바인딩 명세의 모든 필수 동작을 구현해야 합니다(예: Message Integrity Check 알고리즘).
3.2.1 MCTP Packet
MCTP 기본 사양에서는 데이터 전송의 가장 작은 단위를 MCTP 패킷으로 정의하며, 하나 이상의 패킷이 결합되어 MCTP 메시지를 생성합니다. 이 사양에서는 특별히 이러한 MCTP 메시지를 NVMe-MI 메시지로 지칭합니다(1.8.21절 참조). MCTP 패킷이 NVMe-MI 메시지로 어떻게 조합되는지에 대한 자세한 내용은 3.2.1.1절을 참조하십시오.
MCTP 패킷 페이로드는 적어도 1바이트는 포함하고 있어야 하지만 협상된 MCTP 전송 단위 크기를 초과해서는 안 됩니다. MCTP 패킷 페이로드의 형식은 그림 21에 나와 있습니다.
MCTP 사양은 빅 엔디언 바이트 순서를 사용하고 있지만 NVM Express 사양은 리틀 엔디언 바이트 순서를 사용합니다. 본 사양의 모든 그림은 리틀 엔디언 바이트 순서로 설명되어 있습니다. 이 그림 표현이 물리적 레이어에서 바이트가 전송되는 순서를 변경하지는 않음에 유의하십시오.
물리적 매체별 헤더(Physical Medium-Specific Header) 및 물리적 매체별 트레일러(Physical Medium-Specific Trailer)는 해당 포트에서 사용하는 MCTP 전송 바인딩 사양에 따라 정의됩니다. MCTP 전송 바인딩 사양을 참조하십시오.
MCTP Base Specification에서는 MCTP 패킷 헤더를 정의하고 있으며(MCTP 패킷 헤더 필드에 대한 설명은 DSP0236 참조), MCTP 패킷의 필드는 그림 22에 나와 있습니다.
3.2.1.1 Packet Assembly into Messages
NVMe-MI 메시지는 여러 MCTP 패킷 페이로드로 분할되어 패킷의 시리즈로 전송될 수 있습니다. 내용이 네 개의 MCTP 패킷에 걸쳐 분할된 예시 NVMe-MI 메시지는 그림 23에 나와 있습니다. 패킷화 및 메시지 조립 규칙에 대한 자세한 내용은 MCTP Base Specification을 참조하십시오.
MCTP Base Specification 및 MCTP 전송 바인딩 사양에서 제시된 요구 사항 외에도 본 사양에는 다음과 같은 추가 요구 사항이 있습니다.
- 메시지의 마지막 패킷을 제외한 모든 패킷의 MCTP 전송 단위 크기는 협상된 MCTP 전송 단위 크기와 동일해야 합니다.
- Request Message 또는 Response Message의 마지막 패킷(MCTP 헤더에서 EOM 비트가 설정된 패킷)의 MCTP 전송 단위 크기는 해당 패킷의 MCTP 패킷 페이로드를 전송하는 데 필요한 최소 크기여야 하며 물리적 매체별 트레일러에 필요한 패딩 이상은 없어야 합니다.
- 완전한 NVMe-MI 메시지가 조립되면 메시지 무결성 체크가 확인됩니다. 메시지 무결성 체크가 통과되면 NVMe-MI 메시지가 처리되고, 실패하면 NVMe 메시지가 폐기됩니다. 세부 내용은 섹션 4.2를 참조하십시오.
3.2.2 Out-of-Band Error Handling
The Management Endpoint은 MCTP Base Specification에서 명시된 오류 조건에 따라 패킷을 삭제(무시)해야 합니다. 예를 들어 예기치 않은 중간 또는 끝 패킷과 같은 상황은 패킷을 무시하도록 하는 조건의 예시입니다. 무시된 패킷은 또한 해당 비트가 Get State Control Primitive Success Response Fields에서 '1'로 설정되도록 합니다(도 Figure 42를 참조하십시오).
3.3 In-Band Tunneling Message Transport
이 사양에서 정의한 인밴드 터널링 메커니즘은 NVMe Admin Commands인 NVMe-MI Send 및 NVMe-MI Receive를 메시지 전송으로 사용합니다. NVMe-MI Send 및 NVMe-MI Receive 명령에 대한 자세한 내용은 NVM Express Base Specification 및 이 사양의 섹션 4.3을 참조하십시오.