doc/nvmf: update readme to include nqn definition
Change-Id: Ic3f0f3d0a2dd51f911647912e2a9e899615a2299 Signed-off-by: Seth Howell <seth.howell@intel.com> Reviewed-on: https://review.gerrithub.io/407509 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
e608e8e54d
commit
cb0f48791c
45
doc/nvmf.md
45
doc/nvmf.md
@ -146,6 +146,51 @@ named Malloc0 and Malloc1 and made available as NSID 1 and 2:
|
||||
Namespace Malloc1 2
|
||||
~~~
|
||||
|
||||
#### NQN Formal Definition
|
||||
|
||||
NVMe qualified names or NQNs are defined in section 7.9 of the
|
||||
[NVMe specification](http://nvmexpress.org/wp-content/uploads/NVM_Express_Revision_1.3.pdf). SPDK has attempted to
|
||||
formalize that definition using [Extended Backus-Naur form](https://en.wikipedia.org/wiki/Extended_Backus%E2%80%93Naur_form).
|
||||
SPDK modules use this formal definition (provided below) when validating NQNs.
|
||||
|
||||
~~~{.sh}
|
||||
|
||||
Basic Types
|
||||
year = 4 * digit ;
|
||||
month = '01' | '02' | '03' | '04' | '05' | '06' | '07' | '08' | '09' | '10' | '11' | '12' ;
|
||||
digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ;
|
||||
hex digit = 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' ;
|
||||
|
||||
NQN Definition
|
||||
NVMe Qualified Name = ( NVMe-oF Discovery NQN | NVMe UUID NQN | NVMe Domain NQN ), '\0' ;
|
||||
NVMe-oF Discovery NQN = "nqn.2014-08.org.nvmexpress.discovery" ;
|
||||
NVMe UUID NQN = "nqn.2014-08.org.nvmexpress:uuid:", string UUID ;
|
||||
string UUID = 8 * hex digit, '-', 3 * (4 * hex digit, '-'), 12 * hex digit ;
|
||||
NVMe Domain NQN = "nqn.", year, '-', month, '.', reverse domain, ':', utf-8 string ;
|
||||
|
||||
~~~
|
||||
|
||||
Please note that the following types from the definition above are defined elsewhere:
|
||||
1. utf-8 string: Defined in [rfc 3629](https://tools.ietf.org/html/rfc3629).
|
||||
2. reverse domain: Equivalent to domain name as defined in [rfc 1034](https://tools.ietf.org/html/rfc1034).
|
||||
|
||||
While not stated in the formal definition, SPDK enforces the requirement from the spec that the
|
||||
"maximum name is 223 bytes in length". SPDK does not include the null terminating character when
|
||||
defining the length of an nqn, and will accept an nqn containing up to 223 valid bytes with an
|
||||
additional null terminator. To be precise, SPDK follows the same conventions as the c standard
|
||||
library function [strlen()](http://man7.org/linux/man-pages/man3/strlen.3.html).
|
||||
|
||||
#### NQN Comparisons
|
||||
|
||||
SPDK compares NQNs byte for byte without case matching or unicode normalization. This has specific implications for
|
||||
uuid based NQNs. The following pair of NQNs, for example, would not match when compared in the SPDK NVMe-oF Target:
|
||||
|
||||
nqn.2014-08.org.nvmexpress:uuid:11111111-aaaa-bbdd-ffee-123456789abc
|
||||
nqn.2014-08.org.nvmexpress:uuid:11111111-AAAA-BBDD-FFEE-123456789ABC
|
||||
|
||||
In order to ensure the consistency of uuid based NQNs while using SPDK, users should use lowercase when representing
|
||||
alphabetic hex digits in their NQNs.
|
||||
|
||||
### Assigning CPU Cores to the NVMe over Fabrics Target {#nvmf_config_lcore}
|
||||
|
||||
SPDK uses the [DPDK Environment Abstraction Layer](http://dpdk.org/doc/guides/prog_guide/env_abstraction_layer.html)
|
||||
|
Loading…
Reference in New Issue
Block a user