nvmf_spec.h File Reference

NVMe over Fabrics specification definitions. More...

Data Structures

struct  spdk_nvmf_capsule_cmd
 
struct  spdk_nvmf_fabric_auth_recv_cmd
 
struct  spdk_nvmf_fabric_auth_send_cmd
 
struct  spdk_nvmf_fabric_connect_data
 
struct  spdk_nvmf_fabric_connect_cmd
 
struct  spdk_nvmf_fabric_connect_rsp
 
struct  spdk_nvmf_fabric_prop_get_cmd
 
struct  spdk_nvmf_fabric_prop_get_rsp
 
struct  spdk_nvmf_fabric_prop_set_cmd
 
struct  spdk_nvmf_rdma_transport_specific_address_subtype
 RDMA transport-specific address subtype. More...
 
struct  spdk_nvme_tcp_transport_specific_address_subtype
 TCP transport-specific address subtype. More...
 
union  spdk_nvmf_transport_specific_address_subtype
 Transport-specific address subtype. More...
 
struct  spdk_nvmf_discovery_log_page_entry
 Discovery Log Page entry. More...
 
struct  spdk_nvmf_discovery_log_page
 
struct  spdk_nvmf_rdma_request_private_data
 
struct  spdk_nvmf_rdma_accept_private_data
 
struct  spdk_nvmf_rdma_reject_private_data
 
union  spdk_nvmf_rdma_private_data
 
struct  spdk_nvme_tcp_common_pdu_hdr
 Common NVMe/TCP PDU header. More...
 
struct  spdk_nvme_tcp_ic_req
 ICReq. More...
 
struct  spdk_nvme_tcp_ic_resp
 ICResp. More...
 
struct  spdk_nvme_tcp_term_req_hdr
 TermReq. More...
 
struct  spdk_nvme_tcp_cmd
 CapsuleCmd. More...
 
struct  spdk_nvme_tcp_rsp
 CapsuleResp. More...
 
struct  spdk_nvme_tcp_h2c_data_hdr
 H2CData. More...
 
struct  spdk_nvme_tcp_c2h_data_hdr
 C2HData. More...
 
struct  spdk_nvme_tcp_r2t_hdr
 R2T. More...
 

Macros

#define SPDK_NVMF_MIN_ADMIN_QUEUE_ENTRIES   32
 
#define SPDK_NVME_OPC_FABRIC   0x7f
 
#define SPDK_NVMF_PROP_SIZE_4   0
 
#define SPDK_NVMF_PROP_SIZE_8   1
 
#define SPDK_NVMF_NQN_MIN_LEN   11 /* The prefix in the spec is 11 characters */
 
#define SPDK_NVMF_NQN_MAX_LEN   223
 
#define SPDK_NVMF_NQN_UUID_PRE_LEN   32
 
#define SPDK_NVMF_UUID_STRING_LEN   36
 
#define SPDK_NVMF_NQN_UUID_PRE   "nqn.2014-08.org.nvmexpress:uuid:"
 
#define SPDK_NVMF_DISCOVERY_NQN   "nqn.2014-08.org.nvmexpress.discovery"
 
#define SPDK_DOMAIN_LABEL_MAX_LEN   63 /* RFC 1034 max domain label length */
 
#define SPDK_NVMF_TRADDR_MAX_LEN   256
 
#define SPDK_NVMF_TRSVCID_MAX_LEN   32
 
#define SPDK_NVME_SGL_SUBTYPE_INVALIDATE_KEY   0xF
 
#define SPDK_NVME_TCP_CH_FLAGS_HDGSTF   (1u << 0)
 
#define SPDK_NVME_TCP_CH_FLAGS_DDGSTF   (1u << 1)
 
#define SPDK_NVME_TCP_CPDA_MAX   31
 
#define SPDK_NVME_TCP_PDU_PDO_MAX_OFFSET   ((SPDK_NVME_TCP_CPDA_MAX + 1) << 2)
 
#define SPDK_NVME_TCP_TERM_REQ_ERROR_DATA_MAX_SIZE   128
 
#define SPDK_NVME_TCP_TERM_REQ_PDU_MAX_SIZE   (SPDK_NVME_TCP_TERM_REQ_ERROR_DATA_MAX_SIZE + sizeof(struct spdk_nvme_tcp_term_req_hdr))
 
#define SPDK_NVME_TCP_H2C_DATA_FLAGS_LAST_PDU   (1u << 2)
 
#define SPDK_NVME_TCP_H2C_DATA_FLAGS_SUCCESS   (1u << 3)
 
#define SPDK_NVME_TCP_H2C_DATA_PDO_MULT   8u
 
#define SPDK_NVME_TCP_C2H_DATA_FLAGS_SUCCESS   (1u << 3)
 
#define SPDK_NVME_TCP_C2H_DATA_FLAGS_LAST_PDU   (1u << 2)
 
#define SPDK_NVME_TCP_C2H_DATA_PDO_MULT   8u
 

Enumerations

enum  spdk_nvmf_fabric_cmd_types {
  SPDK_NVMF_FABRIC_COMMAND_PROPERTY_SET = 0x00, SPDK_NVMF_FABRIC_COMMAND_CONNECT = 0x01, SPDK_NVMF_FABRIC_COMMAND_PROPERTY_GET = 0x04, SPDK_NVMF_FABRIC_COMMAND_AUTHENTICATION_SEND = 0x05,
  SPDK_NVMF_FABRIC_COMMAND_AUTHENTICATION_RECV = 0x06, SPDK_NVMF_FABRIC_COMMAND_START_VENDOR_SPECIFIC = 0xC0
}
 
enum  spdk_nvmf_fabric_cmd_status_code {
  SPDK_NVMF_FABRIC_SC_INCOMPATIBLE_FORMAT = 0x80, SPDK_NVMF_FABRIC_SC_CONTROLLER_BUSY = 0x81, SPDK_NVMF_FABRIC_SC_INVALID_PARAM = 0x82, SPDK_NVMF_FABRIC_SC_RESTART_DISCOVERY = 0x83,
  SPDK_NVMF_FABRIC_SC_INVALID_HOST = 0x84, SPDK_NVMF_FABRIC_SC_LOG_RESTART_DISCOVERY = 0x90, SPDK_NVMF_FABRIC_SC_AUTH_REQUIRED = 0x91
}
 
enum  spdk_nvmf_rdma_qptype { SPDK_NVMF_RDMA_QPTYPE_RELIABLE_CONNECTED = 0x1, SPDK_NVMF_RDMA_QPTYPE_RELIABLE_DATAGRAM = 0x2 }
 RDMA Queue Pair service types. More...
 
enum  spdk_nvmf_rdma_prtype {
  SPDK_NVMF_RDMA_PRTYPE_NONE = 0x1, SPDK_NVMF_RDMA_PRTYPE_IB = 0x2, SPDK_NVMF_RDMA_PRTYPE_ROCE = 0x3, SPDK_NVMF_RDMA_PRTYPE_ROCE2 = 0x4,
  SPDK_NVMF_RDMA_PRTYPE_IWARP = 0x5
}
 RDMA provider types. More...
 
enum  spdk_nvmf_rdma_cms { SPDK_NVMF_RDMA_CMS_RDMA_CM = 0x1 }
 RDMA connection management service types. More...
 
enum  spdk_nvmf_trtype { SPDK_NVMF_TRTYPE_RDMA = 0x1, SPDK_NVMF_TRTYPE_FC = 0x2, SPDK_NVMF_TRTYPE_TCP = 0x3, SPDK_NVMF_TRTYPE_INTRA_HOST = 0xfe }
 NVMe over Fabrics transport types. More...
 
enum  spdk_nvmf_adrfam {
  SPDK_NVMF_ADRFAM_IPV4 = 0x1, SPDK_NVMF_ADRFAM_IPV6 = 0x2, SPDK_NVMF_ADRFAM_IB = 0x3, SPDK_NVMF_ADRFAM_FC = 0x4,
  SPDK_NVMF_ADRFAM_INTRA_HOST = 0xfe
}
 Address family types. More...
 
enum  spdk_nvmf_subtype { SPDK_NVMF_SUBTYPE_DISCOVERY = 0x1, SPDK_NVMF_SUBTYPE_NVME = 0x2 }
 NVM subsystem types. More...
 
enum  spdk_nvmf_treq_secure_channel { SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_SPECIFIED = 0x0, SPDK_NVMF_TREQ_SECURE_CHANNEL_REQUIRED = 0x1, SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_REQUIRED = 0x2 }
 Connections shall be made over a fabric secure channel. More...
 
enum  spdk_nvme_tcp_secure_socket_type { SPDK_NVME_TCP_SECURITY_NONE = 0, SPDK_NVME_TCP_SECURITY_TLS = 1 }
 TCP Secure Socket Type. More...
 
enum  spdk_nvmf_rdma_transport_error {
  SPDK_NVMF_RDMA_ERROR_INVALID_PRIVATE_DATA_LENGTH = 0x1, SPDK_NVMF_RDMA_ERROR_INVALID_RECFMT = 0x2, SPDK_NVMF_RDMA_ERROR_INVALID_QID = 0x3, SPDK_NVMF_RDMA_ERROR_INVALID_HSQSIZE = 0x4,
  SPDK_NVMF_RDMA_ERROR_INVALID_HRQSIZE = 0x5, SPDK_NVMF_RDMA_ERROR_NO_RESOURCES = 0x6, SPDK_NVMF_RDMA_ERROR_INVALID_IRD = 0x7, SPDK_NVMF_RDMA_ERROR_INVALID_ORD = 0x8
}
 
enum  spdk_nvme_tcp_pdu_type {
  SPDK_NVME_TCP_PDU_TYPE_IC_REQ = 0x00, SPDK_NVME_TCP_PDU_TYPE_IC_RESP = 0x01, SPDK_NVME_TCP_PDU_TYPE_H2C_TERM_REQ = 0x02, SPDK_NVME_TCP_PDU_TYPE_C2H_TERM_REQ = 0x03,
  SPDK_NVME_TCP_PDU_TYPE_CAPSULE_CMD = 0x04, SPDK_NVME_TCP_PDU_TYPE_CAPSULE_RESP = 0x05, SPDK_NVME_TCP_PDU_TYPE_H2C_DATA = 0x06, SPDK_NVME_TCP_PDU_TYPE_C2H_DATA = 0x07,
  SPDK_NVME_TCP_PDU_TYPE_R2T = 0x09
}
 NVMe/TCP PDU type. More...
 
enum  spdk_nvme_tcp_term_req_fes {
  SPDK_NVME_TCP_TERM_REQ_FES_INVALID_HEADER_FIELD = 0x01, SPDK_NVME_TCP_TERM_REQ_FES_PDU_SEQUENCE_ERROR = 0x02, SPDK_NVME_TCP_TERM_REQ_FES_HDGST_ERROR = 0x03, SPDK_NVME_TCP_TERM_REQ_FES_DATA_TRANSFER_OUT_OF_RANGE = 0x04,
  SPDK_NVME_TCP_TERM_REQ_FES_DATA_TRANSFER_LIMIT_EXCEEDED = 0x05, SPDK_NVME_TCP_TERM_REQ_FES_R2T_LIMIT_EXCEEDED = 0x05, SPDK_NVME_TCP_TERM_REQ_FES_INVALID_DATA_UNSUPPORTED_PARAMETER = 0x06
}
 

Functions

 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_capsule_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_auth_recv_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_auth_send_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_connect_data)==1024, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_connect_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_connect_rsp)==16, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_prop_get_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_prop_get_rsp)==16, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_fabric_prop_set_cmd)==64, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_rdma_transport_specific_address_subtype)==256, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_transport_specific_address_subtype)==256, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(union spdk_nvmf_transport_specific_address_subtype)==256, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_discovery_log_page_entry)==1024, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_discovery_log_page)==1024, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_rdma_request_private_data)==32, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_rdma_accept_private_data)==32, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvmf_rdma_reject_private_data)==4, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(union spdk_nvmf_rdma_private_data)==32, "Incorrect size")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_common_pdu_hdr)==8, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_common_pdu_hdr, pdu_type)==0, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_common_pdu_hdr, flags)==1, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_common_pdu_hdr, hlen)==2, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_common_pdu_hdr, pdo)==3, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_common_pdu_hdr, plen)==4, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_ic_req)==128, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_req, pfv)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_req, hpda)==10, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_req, maxr2t)==12, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_ic_resp)==128, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_resp, pfv)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_resp, cpda)==10, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_ic_resp, maxh2cdata)==12, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_term_req_hdr)==24, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_term_req_hdr, fes)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_term_req_hdr, fei)==10, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_cmd)==72, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_cmd, ccsqe)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_rsp)==24, "incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_rsp, rccqe)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_h2c_data_hdr)==24, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_h2c_data_hdr, cccid)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_h2c_data_hdr, ttag)==10, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_h2c_data_hdr, datao)==12, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_h2c_data_hdr, datal)==16, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_c2h_data_hdr)==24, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_c2h_data_hdr, cccid)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_c2h_data_hdr, datao)==12, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_c2h_data_hdr, datal)==16, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (sizeof(struct spdk_nvme_tcp_r2t_hdr)==24, "Incorrect size")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_r2t_hdr, cccid)==8, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_r2t_hdr, ttag)==10, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_r2t_hdr, r2to)==12, "Incorrect offset")
 
 SPDK_STATIC_ASSERT (offsetof(struct spdk_nvme_tcp_r2t_hdr, r2tl)==16, "Incorrect offset")
 

Detailed Description

NVMe over Fabrics specification definitions.

Enumeration Type Documentation

◆ spdk_nvme_tcp_pdu_type

NVMe/TCP PDU type.

Enumerator
SPDK_NVME_TCP_PDU_TYPE_IC_REQ 

Initialize Connection Request (ICReq)

SPDK_NVME_TCP_PDU_TYPE_IC_RESP 

Initialize Connection Response (ICResp)

SPDK_NVME_TCP_PDU_TYPE_H2C_TERM_REQ 

Terminate Connection Request (TermReq)

SPDK_NVME_TCP_PDU_TYPE_C2H_TERM_REQ 

Terminate Connection Response (TermResp)

SPDK_NVME_TCP_PDU_TYPE_CAPSULE_CMD 

Command Capsule (CapsuleCmd)

SPDK_NVME_TCP_PDU_TYPE_CAPSULE_RESP 

Response Capsule (CapsuleRsp)

SPDK_NVME_TCP_PDU_TYPE_H2C_DATA 

Host To Controller Data (H2CData)

SPDK_NVME_TCP_PDU_TYPE_C2H_DATA 

Controller To Host Data (C2HData)

SPDK_NVME_TCP_PDU_TYPE_R2T 

Ready to Transfer (R2T)

◆ spdk_nvme_tcp_secure_socket_type

TCP Secure Socket Type.

Enumerator
SPDK_NVME_TCP_SECURITY_NONE 

No security.

SPDK_NVME_TCP_SECURITY_TLS 

TLS (Secure Sockets)

◆ spdk_nvmf_adrfam

Address family types.

Enumerator
SPDK_NVMF_ADRFAM_IPV4 

IPv4 (AF_INET)

SPDK_NVMF_ADRFAM_IPV6 

IPv6 (AF_INET6)

SPDK_NVMF_ADRFAM_IB 

InfiniBand (AF_IB)

SPDK_NVMF_ADRFAM_FC 

Fibre Channel address family.

SPDK_NVMF_ADRFAM_INTRA_HOST 

Intra-host transport (loopback)

◆ spdk_nvmf_rdma_cms

RDMA connection management service types.

Enumerator
SPDK_NVMF_RDMA_CMS_RDMA_CM 

Sockets based endpoint addressing.

◆ spdk_nvmf_rdma_prtype

RDMA provider types.

Enumerator
SPDK_NVMF_RDMA_PRTYPE_NONE 

No provider specified.

SPDK_NVMF_RDMA_PRTYPE_IB 

InfiniBand.

SPDK_NVMF_RDMA_PRTYPE_ROCE 

RoCE v1.

SPDK_NVMF_RDMA_PRTYPE_ROCE2 

RoCE v2.

SPDK_NVMF_RDMA_PRTYPE_IWARP 

iWARP

◆ spdk_nvmf_rdma_qptype

RDMA Queue Pair service types.

Enumerator
SPDK_NVMF_RDMA_QPTYPE_RELIABLE_CONNECTED 

Reliable connected.

SPDK_NVMF_RDMA_QPTYPE_RELIABLE_DATAGRAM 

Reliable datagram.

◆ spdk_nvmf_subtype

NVM subsystem types.

Enumerator
SPDK_NVMF_SUBTYPE_DISCOVERY 

Discovery type for NVM subsystem.

SPDK_NVMF_SUBTYPE_NVME 

NVMe type for NVM subsystem.

◆ spdk_nvmf_treq_secure_channel

Connections shall be made over a fabric secure channel.

Enumerator
SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_SPECIFIED 

Not specified.

SPDK_NVMF_TREQ_SECURE_CHANNEL_REQUIRED 

Required.

SPDK_NVMF_TREQ_SECURE_CHANNEL_NOT_REQUIRED 

Not required.

◆ spdk_nvmf_trtype

NVMe over Fabrics transport types.

Enumerator
SPDK_NVMF_TRTYPE_RDMA 

RDMA.

SPDK_NVMF_TRTYPE_FC 

Fibre Channel.

SPDK_NVMF_TRTYPE_TCP 

TCP.

SPDK_NVMF_TRTYPE_INTRA_HOST 

Intra-host transport (loopback)