libnvme(2)

🌸 libnvme(2) β€” API Manual 🌸

okay so bestie, welcome to the libnvme show πŸ’– this is the API manual, and today we're unpacking struct nbft_ssns β€” the iconic, lowkey-loaded star of the whole page. grab a strawberry drink πŸ“ and let's get into it, because this struct ate and left no crumbs.

✨ NAME ✨

struct nbft_ssns β€” Subsystem Namespace (SSNS) Descriptor (Figure 15) πŸ‘‘

πŸ¦‹ SYNOPSIS πŸ¦‹

struct nbft_ssns {
    __u8 structure_id;
    __le16 index;
    __le16 flags;
    __u8 trtype;
    __le16 trflags;
    __u8 primary_discovery_ctrl_index;
    __u8 reserved1;
    struct nbft_heap_obj subsys_traddr_obj;
    struct nbft_heap_obj subsys_trsvcid_obj;
    __le16 subsys_port_id;
    __le32 nsid;
    __u8 nidt;
    __u8 nid[16];
    __u8 security_desc_index;
    __u8 primary_hfi_desc_index;
    __u8 reserved2;
    struct nbft_heap_obj secondary_hfi_assoc_obj;
    struct nbft_heap_obj subsys_ns_nqn_obj;
    struct nbft_heap_obj ssns_extended_info_desc_obj;
    __u8 reserved3[62];
 };

that's the whole cast list, no cap πŸ’… now let's meet every single one of them because they ALL matter.


πŸ‘‘ Members πŸ‘‘

  • structure_id β€” Structure ID: this field shall be set to 4h (i.e., SSNS; #NBFT_DESC_SSNS). it's giving "this is who I am" ✨
  • index β€” SSNS Descriptor Index: this field tells you the number of this Subsystem Namespace Descriptor inside the Subsystem Namespace Descriptor List. like its seat number at the function πŸŽ€
  • flags β€” SSNS Flags, see enum nbft_ssns_flags.
  • trtype β€” Transport Type, see enum nbft_trtype.
  • trflags β€” Transport Specific Flags, see enum nbft_ssns_trflags.
  • primary_discovery_ctrl_index β€” Primary Discovery Controller Index: this is the Discovery Descriptor Index field of the Discovery Descriptor (see struct nbft_discovery) that's associated with this SSNS Descriptor. so like: if a Discovery controller was used to establish this record, this value shall be set to a non-zero value. if this namespace was associated with multiple Discovery controllers, those Discovery controllers shall have records in the Discovery Descriptor so that multi-path rediscovery can happen as required. and if no Discovery controller was utilized to inform this namespace record, this field shall be cleared to 0h. simple as that bestie 🫢
  • reserved1 β€” Reserved. don't touch, she's resting 😴
  • subsys_traddr_obj β€” Subsystem Transport Address Heap Object Reference: this field shows the location and size of a heap object containing the Subsystem Transport Address. for IP based transports types, it shall be an IP Address. 🌐
  • subsys_trsvcid_obj β€” Subsystem Transport Service Identifier Heap Object Reference: this field shows the location and size of a heap object containing an array of bytes indicating the Subsystem Transport Service Identifier. see enum nbft_trtype.
  • subsys_port_id β€” Subsystem Port ID: the port in the NVM subsystem associated with this transport address, used by the pre-OS driver. main character energy honestly πŸ”₯
  • nsid β€” Namespace ID: this field is the namespace identifier (NSID) of the namespace indicated by this descriptor. this field shall be cleared to 0h if not specified by the user. and if this value is cleared to 0h, then consumers of the NBFT shall rely on the NID. important!! πŸ“Œ
  • nidt β€” Namespace Identifier Type (NIDT): this field carries the value of the Namespace Identifier Type (NIDT) field in the Namespace Identification Descriptor for the namespace indicated by this descriptor. if a namespace supports multiple NIDT entries for uniqueness, the order of preference is NIDT field value of 3h (i.e., UUID) before 2h (i.e., NSGUID), and 2h before 1h (i.e., EUI-64). ranking slay πŸ’…
  • nid β€” Namespace Identifier (NID): this field carries the value of the Namespace Identifier (NID) field in the Namespace Identification Descriptor for the namespace indicated by this descriptor.
  • security_desc_index β€” Security Profile Descriptor Index: if the Use Security Flag bit in the SSNS Flags field is set to 1h, then this field indicates the value of the Security Profile Descriptor Index field of the Security Profile Descriptor (see struct nbft_security) associated with this namespace. if the Use Security Flag bit is cleared to 0h, then no Security Profile Descriptor is associated with this namespace and this field is reserved. πŸ”
  • primary_hfi_desc_index β€” Primary HFI Descriptor Index: this field indicates the value of the HFI Descriptor Index field of the HFI Descriptor (see struct nbft_hfi) for the interface associated with this namespace. if multiple HFIs are associated with this record, subsequent interfaces should be populated in the Secondary HFI Associations field. the more the merrier fr fr 🧚
  • reserved2 β€” Reserved. also napping 😴
  • secondary_hfi_assoc_obj β€” Secondary HFI Associations Heap Object Reference: if this field is set to a non-zero value, then this field indicates an array of bytes, in which each byte contains the value of the HFI Descriptor Index field of an HFI Descriptor in the HFI Descriptor List. if this field is cleared to 0h, then no secondary HFI associations are specified.
  • subsys_ns_nqn_obj β€” Subsystem and Namespace NQN Heap Object Reference: this field indicates the location and size of a heap object containing the Subsystem and Namespace NQN. 🌈
  • ssns_extended_info_desc_obj β€” SSNS Extended Information Descriptor Heap Object Reference: if the SSNS Extended Info In-use Flag bit is set to 1h, then this field indicates the offset in bytes of a heap object containing an SSNS Extended Information Descriptor (see struct nbft_ssns_ext_info) heap object from byte offset 0h of the NBFT Table Header. if the SSNS Extended Info In-use Flag bit is cleared to 0h, then this field is reserved. ✨
  • reserved3 β€” Reserved. beauty sleep, don't disturb πŸ’œ

lowkey reminder bestie: every reserved field up there? not yours to fill. leave them exactly as they are β€” periodt πŸ’€

and that's the whole page, you understood it, you ate, no crumbs left πŸŽ€πŸ¦‹


that's a wrap on the struct nbft_ssns page from the libnvme(2) API Manual, dated July 2026 πŸ’– go forth and read your descriptors, bestie β€” you've got this πŸ‘‘βœ¨

πŸ“¦ where this page comes from