NVME-SECURITY-SEND(1)

πŸ’… NVME-SECURITY-SEND(1) β€” the security send glow-up

okay so bestie, welcome to NVME-SECURITY-SEND(1), straight out of the NVMe Manual ✨ this is the page for the Security Send command and it's lowkey iconic.


🌸 NAME 🌸

nvme-security-send β€” the Security Send command, literally


✨ SYNOPSIS ✨

nvme [<global-options>] security send <device> [--file=<file> | -f <file>]
                        [--secp=<security-protocol> | -p <security-protocol>]
                        [--spsp=<protocol-specific> | -s <protocol-specific>]
                        [--tl=<transfer-length> | -t <transfer-length>]
                        [--nssf=<nvme-specific> | -N <nvme-specific>]
                        [--namespace-id=<nsid> | -n <nsid>]

πŸ¦‹ DESCRIPTION πŸ¦‹

So what does this even do? The Security Send command ships security protocol data over to the controller. The data structure that gets transferred to the controller as part of this command contains security protocol specific commands that the controller is supposed to perform. That same data structure may also carry data or parameters associated with those security protocol commands. And any status and data that should be sent back to the host for the security protocol commands you submitted via a Security Send command? That's what you grab with the Security Receive command. πŸ”

The association between a Security Send command and the subsequent Security Receive command is Security Protocol field dependent, as defined in SPC-4. iykyk πŸ“–

⚠️ heads up bestie β€” the bare nvme security-send form (no space, hyphenated) still works as a deprecated alias and is gonna get removed in a future major version. So if you're writing new scripts, use nvme security send instead, periodt. πŸ’…

πŸŽ€ OPTIONS πŸŽ€

  • -n <nsid>, --namespace-id=<nsid> β€” target a specific namespace for this security command. The broadcast value 0xffffffff can also be written as all or -1. choose your fighter πŸ’–
  • -N <nssf>, --nssf=<nssf> β€” the NVMe Security Specific field. If you're using security protocol EAh (the one assigned for NVMe use), this NVMe security specific field tells you which reply memory buffer target. 🎯
  • -f <file>, --file=<file> β€” path to the file used as the security protocol's payload. this one is a required argument, no skipping it, fr fr. πŸ“
  • -p <security-protocol>, --secp=<security-protocol> β€” Security Protocol: this field specifies the security protocol as defined in SPC-4. If you specify a reserved value of the Security Protocol, the controller shall fail the command with Invalid Parameter indicated. so don't do that πŸ™ˆ
  • -s <security-protocol-specific>, --spsp=<security-protocol-specific> β€” SP Specific: the value of this field is specific to the Security Protocol, as defined in SPC-4. 🌈
  • -t <trans-length>, --tl=<trans-length> β€” Transfer Length: the value of this field is specific to the Security Protocol, as defined in SPC-4. πŸ“

πŸ‘‘ GLOBAL OPTIONS πŸ‘‘

These ones live at the top-level nvme command and are available to this subcommand too β€” main character energy, honestly:

  • --dry-run β€” print the command that would be executed, but don't actually execute it. window shopping for commands πŸ›οΈ
  • --no-ioctl-probing β€” disable probing for 64-bit IOCTL support.
  • --no-retries β€” disable retry logic on transient errors. one shot, no take-backs πŸ’€
  • -o <fmt>, --output-format=<fmt> β€” set the reporting format to normal, tabular, 'json, or binary. only one output format may be used at a time, pick a lane bestie.
  • --output-format-version=<version> β€” select the output format version. Version 1 uses the original field naming, while version 2 (the default) provides more consistent and script-friendly field names. Other versions are rejected. 🚫
  • --quiet β€” suppress informational messages. Errors are still reported, and --quiet cancels any --verbose for the library log level. shhh 🀫
  • --set-options=<key=value>[,<key=value>...] β€” set libnvme library options for this invocation. The supported keys are force-4k, mi-probe-enabled, test-base-dir and test-sysfs-dir. 🧚
  • --timeout=<ms> β€” set the timeout for the command in milliseconds. infinite or -1 waits without a time limit (0xffffffff). patience is a virtue ⏳
  • -v, --verbose β€” increase the level of detail in the output. May be specified multiple times to further increase verbosity. the way that it stacks 😭
πŸ’‘ these options can also be set as machine-wide defaults in nvme-cli.conf(5). a command-line flag always overrides the file β€” flags stay winning πŸ†

πŸ”₯ EXAMPLES πŸ”₯

No Examples

(yeah. that's it. no examples. we're all just vibing off the synopsis, ngl 🫢)


πŸ’œ NVME πŸ’œ

Part of the nvme-user suite. slay.


and that's the whole page, bestie β€” NVMe source, version date 10/30/2026, and honestly? iconic of it. go send some security, but like, responsibly. πŸ’…βœ¨πŸŽ€

πŸ“¦ where this page comes from