Adding upstream version 1.12.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
3b95ae912c
commit
ac60c09ef6
457 changed files with 159628 additions and 0 deletions
120
completions/README
Normal file
120
completions/README
Normal file
|
@ -0,0 +1,120 @@
|
|||
Kelly Kaoudis, kelly.n.kaoudis at intel.com, June 2015
|
||||
|
||||
Setting Up NVMe Tab Autocompletion for bash or zsh
|
||||
==================================================
|
||||
|
||||
If your working shell is bash...
|
||||
--------------------------------
|
||||
the following gets bash autocompletion to behave properly
|
||||
#echo "bind 'set show-all-if-ambiguous on'" >> ~/.bashrc
|
||||
#echo "bind 'set show-all-if-unmodified on'" >> ~/.bashrc
|
||||
#echo "bind 'set completion-ignore-case on'" >> ~/.bashrc
|
||||
#echo "bind 'set completion-map-case on'" >> ~/.bashrc
|
||||
|
||||
add NVMe autocompletion script to your autocompletes directory
|
||||
#cp `pwd`/bash-nvme-completion.sh /etc/bash_completion.d/nvme
|
||||
|
||||
make sure this bash knows where everything is
|
||||
#source /etc/bash_completion.d/nvme && source ~/.bashrc
|
||||
|
||||
you should be able to autocomplete with the nvme utility now
|
||||
(double TABs still apply)! If autocompleting has disappeared,
|
||||
just re-source nvme and .bashrc. To see a full list of auto-completable
|
||||
NVMe commands, type "nvme help " and hit TAB.
|
||||
|
||||
You may also need to uncomment the "enable bash completion in interactive
|
||||
shells" part of /etc/bash.bashrc, which hopefully looks something like:
|
||||
|
||||
if [ -f /usr/share/bash-completion/bash_completion ]; then
|
||||
. /usr/share/bash-completion/bash_completion
|
||||
elif [ -f /etc/bash_completion ]; then
|
||||
. /etc/bash_completion
|
||||
fi
|
||||
|
||||
(don't bother with the shopt part, your Bash version might not support shopt).
|
||||
|
||||
Bash footnote: for bash vers >= 4.2, it appears to be the case that
|
||||
menu-complete **no longer works.** If the bash dev folks ever re-patch this,
|
||||
try binding TAB to menu-complete to cycle through the NVMe subcommand matches
|
||||
on whatever you typed.
|
||||
|
||||
if your working shell is zsh...
|
||||
-------------------------------
|
||||
create the zsh completions directory if you don't have it
|
||||
#if [ ! -e "~/.zsh" ]; then
|
||||
# mkdir ~/.zsh
|
||||
# mkdir ~/.zsh/completion
|
||||
#fi
|
||||
|
||||
#cp `pwd`/_nvme ~/.zsh/completion/_nvme
|
||||
|
||||
add compinit if you don't have it in your .zshrc
|
||||
#echo "autoload -Uz compinit && compinit" >> ~/.zshrc
|
||||
|
||||
add nvme autocompletions to your .zshrc
|
||||
#echo "# source for tab autocompletions" >> ~/.zshrc
|
||||
#echo "fpath=(~/.zsh/completion $fpath)" >> ~/.zshrc
|
||||
#echo "source ~/.zsh/completion/_nvme" >> ~/.zshrc
|
||||
|
||||
make sure this zsh knows where everything is
|
||||
#source ~/.zsh/completion/_nvme && source ~/.zshrc
|
||||
|
||||
You should be able to autocomplete with the nvme utility now (single TAB press
|
||||
should get you a completion with descriptions -- sadly, bash doesn't support
|
||||
descriptions within completions). If autocompletes disappear, just re-source
|
||||
_nvme and .zshrc. Also, make sure your .zshrc is ordered correctly: we want to
|
||||
source _nvme before updating our fpath. Both of these should occur before
|
||||
compinit is loaded.
|
||||
|
||||
Updating NVMe Tab Autocompletions
|
||||
=================================
|
||||
|
||||
zsh
|
||||
---
|
||||
|
||||
Add your new command to the _cmds array in the following format:
|
||||
|
||||
'command:short-form description'
|
||||
|
||||
Add a case to the zsh case statement for autocompletion of subopts
|
||||
in the following format (as seen in _nvme):
|
||||
|
||||
(bar)
|
||||
local _list_of_subopts
|
||||
_list_of_subopts=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--foo':do something cool'
|
||||
-f':alias of --foo'
|
||||
)
|
||||
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme bar options" _list_of_subopts
|
||||
;;
|
||||
|
||||
All zsh autocompletion built-ins start with _, and so should anything
|
||||
internal to your autocompletes. _arguments and _describe are built-ins.
|
||||
The '*:: :->subcmds' bit describes the format in which we want our
|
||||
options to be displayed (don't change this, unless you like pain.)
|
||||
_describe -t adds our list of options to the data structure associated with
|
||||
our command `bar'.
|
||||
|
||||
Add the name of your command to the (help) case as well.
|
||||
|
||||
Update your ~/.zsh/completion/_nvme with your new changes and re-source as needed.
|
||||
|
||||
bash
|
||||
----
|
||||
|
||||
Add the name of your command to _cmds in bash_nvme_completion.sh. Add a case to
|
||||
_nvme_list_opts in the following format:
|
||||
|
||||
"bar")
|
||||
opts+="--foo= -f --baz= -b"
|
||||
;;
|
||||
|
||||
Update your /etc/bash_completion.d/nvme version, and re-source things as needed.
|
||||
|
||||
TO DO
|
||||
-----
|
||||
Automatically generate man pages and autocompletions for new NVMe commands, possibly
|
||||
with kerneldoc.
|
659
completions/_nvme
Normal file
659
completions/_nvme
Normal file
|
@ -0,0 +1,659 @@
|
|||
#compdef _nvme nvme
|
||||
|
||||
# zsh completions for the nvme command-line interface,
|
||||
# very loosely based on git and adb command completion
|
||||
# Kelly Kaoudis kelly.n.kaoudis at intel.com, June 2015
|
||||
|
||||
_nvme () {
|
||||
local -a _cmds
|
||||
_cmds=(
|
||||
'id-ctrl:display information about the controller'
|
||||
'id-ns:display information about the namespace'
|
||||
'list-ns:identify all namespace(s) attached'
|
||||
'create-ns:create a new namespace before attachment'
|
||||
'delete-ns:delete a detached namespace'
|
||||
'attach-ns:attach namespace to controller'
|
||||
'detach-ns:detach namespace from controller'
|
||||
'list-ctrl:identify all controller(s) attached'
|
||||
'get-ns-id:get namespace id of opened block device'
|
||||
'get-log:retrieve any log in raw format'
|
||||
'fw-log:retrieve fw log'
|
||||
'smart-log:retrieve SMART log'
|
||||
'smart-log-add:retrieve additional SMART log'
|
||||
'error-log:retrieve error log'
|
||||
'get-feature:display a controller feature'
|
||||
'set-feature:set a controller feature and show results'
|
||||
'format:apply new block format to namespace'
|
||||
'fw-activate:activate a firmware on the device'
|
||||
'fw-download:download a firmware to the device'
|
||||
'admin-passthru:submit a passthrough IOCTL'
|
||||
'io-passthru:submit a passthrough IOCTL'
|
||||
'security-send:send security/secure data to controller'
|
||||
'security-recv:ask for security/secure data from controller'
|
||||
'resv-acquire:acquire reservation on a namespace'
|
||||
'resv-register:register reservation on a namespace'
|
||||
'resv-release:release reservation on a namespace'
|
||||
'resv-report:report reservation on a namespace'
|
||||
'flush:submit a flush'
|
||||
'compare:compare data on device to data elsewhere'
|
||||
'read:submit a read command'
|
||||
'write:submit a write command'
|
||||
'show-regs:shows the controller registers; requires admin character device'
|
||||
'help:print brief descriptions of all nvme commands'
|
||||
)
|
||||
|
||||
local expl
|
||||
|
||||
_arguments '*:: :->subcmds' && return 0
|
||||
|
||||
if (( CURRENT == 1 )); then
|
||||
_describe -t commands "nvme subcommands" _cmds
|
||||
return
|
||||
else
|
||||
case ${words[CURRENT-1]} in
|
||||
(id-ctrl)
|
||||
local _idctrl
|
||||
_idctrl=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias of --raw-binary'
|
||||
--human-readable':show infos in readable format'
|
||||
-H':alias of --human-readable'
|
||||
--vendor-specific':also dump binary vendor infos'
|
||||
-v':alias of --vendor-specific'
|
||||
)
|
||||
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme id-ctrl options" _idctrl
|
||||
;;
|
||||
(id-ns)
|
||||
local _idns
|
||||
_idns=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':show infos for namespace <nsid>'
|
||||
-n':alias of --namespace-id'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias of --raw-binary'
|
||||
--human-readable':show infos in readable format'
|
||||
-H':alias of --human-readable'
|
||||
--vendor-specific':also dump binary vendor infos'
|
||||
-v':alias of --vendor-specific'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme id-ns options" _idns
|
||||
;;
|
||||
(list-ns)
|
||||
local _listns
|
||||
_listns=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':start namespace infos listing with this nsid'
|
||||
-n':alias of --namespace-id'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme list-ns options" _listns
|
||||
;;
|
||||
(create-ns)
|
||||
local _createns
|
||||
_createns=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--nsze=':namespace size to create'
|
||||
-s':alias of --nsze'
|
||||
--ncap=':namespace capacity'
|
||||
-c':alias of --ncap'
|
||||
--flbas=':FLBA size'
|
||||
-f':alias of --flbas'
|
||||
--dps=':data protection?'
|
||||
-d':alias of --dps'
|
||||
--nmic=':multipath and sharing'
|
||||
-n':alias of --nmic'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme create-ns options" _createns
|
||||
;;
|
||||
(delete-ns)
|
||||
local _deletens
|
||||
_deletens=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':namespace to delete'
|
||||
-n':alias of --namespace-id'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme delete-ns options" _deletens
|
||||
;;
|
||||
(attach-ns)
|
||||
local _attachns
|
||||
_attachns=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':namespace to attach to the controller'
|
||||
-n':alias of --namespace-id'
|
||||
--controllers=':if a device is not provided, supply a comma-sep list of controllers'
|
||||
-c':alias of --controllers'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme attach-ns options" _attachns
|
||||
;;
|
||||
(detach-ns)
|
||||
local _detachns
|
||||
_detachns=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':namespace to detach from controller'
|
||||
-n':alias of --namespace-id'
|
||||
--controllers=':if a device is not provided, supply a comma-sep list of controllers'
|
||||
-c':alias of --controllers'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme detach-ns options" _detachns
|
||||
;;
|
||||
(list-ctrl)
|
||||
local _listctrl
|
||||
_listctrl=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':show controllers attached to this namespace'
|
||||
-n':alias of --namespace-id'
|
||||
--cntid=':start the list with this controller'
|
||||
-c':alias of --cntid'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme list-ctrl options" _listctrl
|
||||
;;
|
||||
(get-ns-id)
|
||||
local _getnsid
|
||||
_getnsid=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme get-ns-id options" _getnsid
|
||||
;;
|
||||
(get-log)
|
||||
local _getlog
|
||||
_getlog=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--log-id=':requested log number'
|
||||
-i':alias of --log-id'
|
||||
--log-len=':number of bytes to show for requested log'
|
||||
-l':alias of --log-len'
|
||||
--namespace-id=':get log specific to <nsid> if namespace logs are supported'
|
||||
-n':alias of --namespace-id'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias of --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme get-log options" _getlog
|
||||
;;
|
||||
(fw-log)
|
||||
local _fwlog
|
||||
_fwlog=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias of --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme fw-log options" _fwlog
|
||||
;;
|
||||
(smart-log)
|
||||
local _smartlog
|
||||
_smartlog=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':get SMART log specific to <nsid> if namespace logs are supported'
|
||||
-n':alias to --namespace-id'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias to --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme smart-log options" _smartlog
|
||||
;;
|
||||
(smart-log-add)
|
||||
local _add
|
||||
_add=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':get additional SMART log specific to <nsid> if namespace logs supported'
|
||||
-n':alias to --namespace-id'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias to --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme smart-log-add options" _add
|
||||
;;
|
||||
(error-log)
|
||||
local _errlog
|
||||
_errlog=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':get log specific to <nsid> if namespace logs are supported'
|
||||
-n':alias to --namespace-id'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias to --raw-binary'
|
||||
--log-entries=':request n >= 1 log entries'
|
||||
-e':alias to --log-entries'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme error-log options" _errlog
|
||||
;;
|
||||
(get-feature)
|
||||
local _getf
|
||||
_getf=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':get feature specific to <nsid>'
|
||||
-n':alias to --namespace-id'
|
||||
--feature-id=':hexadecimal name of feature to examine (required)'
|
||||
-f':alias to --feature-id'
|
||||
--sel=':select from 0 - current, 1 - default, 2 - saved, 3 - supported'
|
||||
-s':alias to --sel'
|
||||
--data-len=':buffer len for returned LBA Type Range or host identifier data'
|
||||
-l':alias for --data-len'
|
||||
--cdw11=':dword 11 value, used for interrupt vector configuration only'
|
||||
--raw-binary':dump infos in binary format'
|
||||
-b':alias to --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme get-feature options" _getf
|
||||
;;
|
||||
(set-feature)
|
||||
local _setf
|
||||
_setf=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':feature is specific to <nsid>'
|
||||
-n':alias to --namespace-id'
|
||||
--feature-id=':hexadecimal name of feature to set (required)'
|
||||
-f':alias to --feature-id'
|
||||
--data-len=':buffer length, only used for LBA Type Range or host identifier data'
|
||||
-l':alias for --data-len'
|
||||
--data=':data file for LBA Type Range or host identifier buffer (defaults to stdin)'
|
||||
-d':alias to --data'
|
||||
--value=':new value of feature (required)'
|
||||
-v'alias to --value'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme set-feature options" _setf
|
||||
;;
|
||||
(format)
|
||||
local _format
|
||||
_format=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':<nsid> of namespace to format (required)'
|
||||
-n':alias of --namespace-id'
|
||||
--lbaf=':LBA format to apply to namespace (required)'
|
||||
-l':alias of --lbaf'
|
||||
--ses=':secure erase? 0 - no-op (default), 1 - user-data erase, 2 - cryptographic erase'
|
||||
-s':alias of --ses'
|
||||
--pil=':location of protection information? 0 - end, 1 - start'
|
||||
-p':alias of --pil'
|
||||
--pi=':protection information? 0 - off, 1 - Type 1 on, 2 - Type 2 on, 3 - Type 3 on'
|
||||
-i':alias of --pi'
|
||||
--ms=':extended format? 0 - off (metadata in separate buffer), 1 - on (extended LBA used)'
|
||||
-m':alias of --ms'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme format options" _format
|
||||
;;
|
||||
(fw-activate)
|
||||
local _fwact
|
||||
_fwact=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--action=':activation action (required)? 0 - replace fw without activating, 1 - replace with activation, 2 - replace with activation at next reset'
|
||||
-a':alias of --action'
|
||||
--slot=':firmware slot to activate'
|
||||
-s':alias of --slot'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme fw-activate options" _fwact
|
||||
;;
|
||||
(fw-download)
|
||||
local _fwd
|
||||
_fwd=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--fw=':firmware file to download (required)'
|
||||
-f':alias of --fw'
|
||||
--xfer=':limit on chunk-size of transfer (if device has download size limit)'
|
||||
-x':alias of --xfer'
|
||||
--offset=':starting offset, in dwords (defaults to 0, only useful if download is split across multiple files)'
|
||||
-o':alias of --offset'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme fw-download options" _fwd
|
||||
;;
|
||||
(admin-passthru)
|
||||
local _admin
|
||||
_admin=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--opcode=':hexadecimal opcode to send (required)'
|
||||
-o':alias of --opcode'
|
||||
--flags=':command flags'
|
||||
-f':alias of --flags'
|
||||
--rsvd=':value for reserved field'
|
||||
-R':alias of --rsvd'
|
||||
--namespace-id=':value for nsid'
|
||||
-n':alias of --namespace-id'
|
||||
--data-len=':length for data buffer'
|
||||
-l':alias of --data-len'
|
||||
--metadata-len=':length for metadata buffer'
|
||||
-m':alias of --metadata-len'
|
||||
--timeout=':value for timeout'
|
||||
-t':alias of --timeout'
|
||||
--cdw2=':value for command dword 2'
|
||||
-2':alias for --cdw2'
|
||||
--cdw3=':value for command dword 3'
|
||||
-3':alias for --cdw3'
|
||||
--cdw10=':value for command dword 10'
|
||||
-4':alias for --cdw10'
|
||||
--cdw11=':value for command dword 11'
|
||||
-5':alias for --cdw11'
|
||||
--cdw12=':value for command dword 12'
|
||||
-6':alias for --cdw12'
|
||||
--cdw13=':value for command dword 13'
|
||||
-7':alias for --cdw13'
|
||||
--cdw14=':value for command dword 14'
|
||||
-8':alias for command dword 14'
|
||||
--cdw15=':value for command dword 15'
|
||||
-9':alias for command dword 15'
|
||||
--input-file=':defaults to stdin; input for write (send direction)'
|
||||
-i':alias for --input-file'
|
||||
--raw-binary':dump output in binary format'
|
||||
-b':alias for --raw-binary'
|
||||
--show-command':simply print command instead of sending it to <device>'
|
||||
-s':alias for --show-command'
|
||||
--dry-run':alias for --show-command'
|
||||
-d':alias for --show-command'
|
||||
--read':set dataflow direction to receive'
|
||||
-r':alias for --read'
|
||||
--write':set dataflow direction to send'
|
||||
-w':alias for --write'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme admin-passthru options" _admin
|
||||
;;
|
||||
(io-passthru)
|
||||
local _io
|
||||
_io=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--opcode=':hexadecimal opcode to send (required)'
|
||||
-o':alias of --opcode'
|
||||
--flags=':command flags'
|
||||
-f':alias of --flags'
|
||||
--rsvd=':value for reserved field'
|
||||
-R':alias of --rsvd'
|
||||
--namespace-id=':value for nsid'
|
||||
-n':alias of --namespace-id'
|
||||
--data-len=':length for data buffer'
|
||||
-l':alias of --data-len'
|
||||
--metadata-len=':length for metadata buffer'
|
||||
-m':alias of --metadata-len'
|
||||
--timeout=':value for timeout'
|
||||
-t':alias of --timeout'
|
||||
--cdw2=':value for command dword 2'
|
||||
-2':alias for --cdw2'
|
||||
--cdw3=':value for command dword 3'
|
||||
-3':alias for --cdw3'
|
||||
--cdw10=':value for command dword 10'
|
||||
-4':alias for --cdw10'
|
||||
--cdw11=':value for command dword 11'
|
||||
-5':alias for --cdw11'
|
||||
--cdw12=':value for command dword 12'
|
||||
-6':alias for --cdw12'
|
||||
--cdw13=':value for command dword 13'
|
||||
-7':alias for --cdw13'
|
||||
--cdw14=':value for command dword 14'
|
||||
-8':alias for command dword 14'
|
||||
--cdw15=':value for command dword 15'
|
||||
-9':alias for command dword 15'
|
||||
--input-file=':defaults to stdin; input for write (send direction)'
|
||||
-i':alias for --input-file'
|
||||
--raw-binary':dump output in binary format'
|
||||
-b':alias for --raw-binary'
|
||||
--show-command':simply print command instead of sending it to <device>'
|
||||
-s':alias for --show-command'
|
||||
--dry-run':alias for --show-command'
|
||||
-d':alias for --show-command'
|
||||
--read':set dataflow direction to receive'
|
||||
-r':alias for --read'
|
||||
--write':set dataflow direction to send'
|
||||
-w':alias for --write'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme io-passthru options" _io
|
||||
;;
|
||||
(security-send)
|
||||
local _ssend
|
||||
_ssend=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--file=':payload'
|
||||
-f':alias for --file'
|
||||
--secp=':security protocol as defined in SPC-4'
|
||||
-p':alias for --secp'
|
||||
--spsp=':send security-protocol-specific data as defined in SPC-4'
|
||||
-s':alias for --spsp'
|
||||
--tl=':transfer length as defined in SPC-4'
|
||||
-t':alias for --tl'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme security-send options" _ssend
|
||||
;;
|
||||
(security-recv)
|
||||
local _srecv
|
||||
_srecv=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--secp=':security protocol as defined in SPC-4'
|
||||
-p':alias for --secp'
|
||||
--spsp=':send security-protocol-specific data as defined in SPC-4'
|
||||
-s':alias for --spsp'
|
||||
--size=':size of buffer (prints to stdout on successful recv)'
|
||||
-x':alias for --size'
|
||||
--al=':allocation length as defined in SPC-4'
|
||||
-a':alias for --al'
|
||||
--raw-binary':dump output in binary format'
|
||||
-b':alias for --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme security-recv options" _srecv
|
||||
;;
|
||||
(resv-acquire)
|
||||
local _acq
|
||||
_acq=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':<nsid> of namespace to try to reserve (required)'
|
||||
-n':alias for --namespace-id'
|
||||
--prkey=':pre-empt reservation key'
|
||||
-p':alias for --prkey'
|
||||
--rtype=':hexadecimal reservation type'
|
||||
-t':alias for --rtype'
|
||||
--racqa=':reservation acquiry action'
|
||||
-a':alias for --racqa'
|
||||
--iekey=':ignore existing reservation key'
|
||||
-i':alias for --iekey'
|
||||
--crkey':current reservation key'
|
||||
-c':alias for --crkey'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme resv-acquire options" _acq
|
||||
;;
|
||||
(resv-release)
|
||||
local _rel
|
||||
_rel=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':nsid'
|
||||
-n':alias of --namespace-id'
|
||||
--rtype=':hexadecimal reservation type'
|
||||
-t':alias of --rtype'
|
||||
--rrela=':reservation release action'
|
||||
-a':alias of --rrela'
|
||||
--iekey':ignore existing reservation key'
|
||||
-i':alias of --iekey'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme resv-release options" _rel
|
||||
;;
|
||||
(resv-report)
|
||||
local _rep
|
||||
_rep=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':nsid'
|
||||
-n':alias of --namespace-id'
|
||||
--numd=':number of dwords of reservation status to xfer'
|
||||
-d':alias of --numd'
|
||||
--raw-binary':dump output in binary format'
|
||||
-b':alias of --raw-binary'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme resv-report options" _rep
|
||||
;;
|
||||
(resv-register)
|
||||
local _reg
|
||||
_reg=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':nsid'
|
||||
-n':alias of --namespace-id'
|
||||
--crkey=':current reservation key'
|
||||
-c'alias of --crkey'
|
||||
--nrkey=':new reservation key'
|
||||
-k':alias of --nrkey'
|
||||
--cptpl=':change persistence through power loss setting'
|
||||
-p':alias for --cptpl'
|
||||
--rrega=':reservation registration action to perform'
|
||||
-a':alias for --rrega'
|
||||
--iekey':ignore existing reservation key'
|
||||
-i':alias for --iekey'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme resv-register options" _reg
|
||||
;;
|
||||
(flush)
|
||||
local _flush
|
||||
_flush=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--namespace-id=':nsid'
|
||||
-n':alias of --namespace-id'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme flush options" _flush
|
||||
;;
|
||||
(compare)
|
||||
local _comp
|
||||
_comp=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--start-block=':begin compare at this 64-bit LBA on device'
|
||||
-s':alias of --start-block'
|
||||
--block-count=':number of logical blocks on device to compare to local data'
|
||||
-c':alias of --block-count'
|
||||
--metadata-size=':number of bytes of metadata to compare'
|
||||
-y':alias of --metadata-size'
|
||||
--data-size=':size of local data buffer in bytes'
|
||||
-z':alias of --data-size'
|
||||
--data=':local data file to compare to blocks on device'
|
||||
-d':alias of --data'
|
||||
--prinfo=':protection information action and check field'
|
||||
-p':alias of --prinfo'
|
||||
--app-tag-mask=':application tag mask (for end to end PI)'
|
||||
-m':alias of --app-tag-mask'
|
||||
--app-tag=':application tag (for end to end PI)'
|
||||
-a':alias of --app-tag'
|
||||
--limited-retry':if included, controller should try less hard to retrieve data from media (if not included, all available data recovery means used)'
|
||||
-l':alias of --limited-retry'
|
||||
--force-unit-access':if included, the data shall be read from non-volatile media'
|
||||
-f':alias of --force-unit access'
|
||||
--show-command':show command instead of sending to device'
|
||||
-v':alias of --show-command'
|
||||
--dry-run':show command instead of sending to device'
|
||||
-w':alias of --show-command'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme compare options" _comp
|
||||
;;
|
||||
(read)
|
||||
local _read
|
||||
_read=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--start-block=':64-bit address of the first logical block to be read'
|
||||
-s':alias of --start-block'
|
||||
--block-count=':number of logical blocks on device to read'
|
||||
-c':alias of --block-count'
|
||||
--data-size=':size of data to be read'
|
||||
-z':alias of --data-size'
|
||||
--metadata-size=':size of metadata to be read'
|
||||
-y':alias of --metadata-size'
|
||||
--ref-tag=':reference tag (for end to end PI)'
|
||||
-r':alias of --ref-tag'
|
||||
--data=':file into which data should be read (defaults to stdout)'
|
||||
-d':alias of --data'
|
||||
--prinfo=':protection information and check field'
|
||||
-p':alias of --prinfo'
|
||||
--app-tag-mask=':application tag mask (for end to end PI)'
|
||||
-m':alias of --app-tag-mask'
|
||||
--app-tag=':application tag (for end to end PI)'
|
||||
-a':alias of --app-tag'
|
||||
--limited-retry=':if included, controller should try less hard to retrieve data from media (if not included, all available data-recovery means used)'
|
||||
-l':alias of --limited-retry'
|
||||
--latency':latency statistics will be output following read'
|
||||
-t':alias of --latency'
|
||||
--force-unit-access':data read shall be returned from nonvolatile media before command completion is indicated'
|
||||
-f':alias of --force-unit-access'
|
||||
--show-command':show command instead of sending to device'
|
||||
-v':alias of --show-command'
|
||||
--dry-run':show command instead of sending to device'
|
||||
-w':alias of --show-command'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme read options" _read
|
||||
;;
|
||||
(write)
|
||||
local _wr
|
||||
_wr=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
--start-block=':64-bit address of the first logical block to be written'
|
||||
-s':alias of --start-block'
|
||||
--block-count=':number of logical blocks on device to write'
|
||||
-c':alias of --block-count'
|
||||
--data-size=':size of data to be written'
|
||||
-z':alias of --data-size'
|
||||
--metadata-size=':size of metadata to be written'
|
||||
-y':alias of --metadata-size'
|
||||
--ref-tag=':reference tag (for end to end PI)'
|
||||
-r':alias of --ref-tag'
|
||||
--data=':file from which data should be written to device (defaults to stdin)'
|
||||
-d':alias of --data'
|
||||
--prinfo=':protection information and check field'
|
||||
-p':alias of --prinfo'
|
||||
--app-tag-mask=':application tag mask (for end to end PI)'
|
||||
-m':alias of --app-tag-mask'
|
||||
--app-tag=':application tag (for end to end PI)'
|
||||
-a':alias of --app-tag'
|
||||
--limited-retry=':if included, controller should try less hard to send data to media (if not included, all available data-recovery means used)'
|
||||
-l':alias of --limited-retry'
|
||||
--latency':latency statistics will be output following write'
|
||||
-t':alias of --latency'
|
||||
--force-unit-access':data shall be written to nonvolatile media before command completion is indicated'
|
||||
-f':alias of --force-unit-access'
|
||||
--show-command':show command instead of sending to device'
|
||||
-v':alias of --show-command'
|
||||
--dry-run':show command instead of sending to device'
|
||||
-w':alias of --show-command'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme write options" _wr
|
||||
;;
|
||||
(show-regs)
|
||||
local _shor
|
||||
_shor=(
|
||||
/dev/nvme':supply a device to use (required)'
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "nvme show-regs options" _shor
|
||||
;;
|
||||
(help)
|
||||
local _h
|
||||
_h=( id-ctrl id-ns list-ns create-ns delete-ns attach-ns detach-ns
|
||||
list-ctrl get-ns-id get-log fw-log smart-log error-log get-feature
|
||||
set-feature format fw-activate fw-download admin-passthru io-passthru
|
||||
security-send security-recv resv-acquire resv-register resv-release
|
||||
resv-report flush compare read write show-regs
|
||||
)
|
||||
_arguments '*:: :->subcmds'
|
||||
_describe -t commands "help: infos on a specific nvme command, or provide no option to see a synopsis of all nvme commands" _h
|
||||
;;
|
||||
(*)
|
||||
_files
|
||||
;;
|
||||
esac
|
||||
return
|
||||
fi
|
||||
|
||||
_files
|
||||
}
|
238
completions/bash-nvme-completion.sh
Normal file
238
completions/bash-nvme-completion.sh
Normal file
|
@ -0,0 +1,238 @@
|
|||
# bash tab completion for the nvme command line utility
|
||||
# (unfortunately, bash won't let me add descriptions to cmds)
|
||||
# Kelly Kaoudis kelly.n.kaoudis at intel.com, Aug. 2015
|
||||
|
||||
_cmds="list id-ctrl id-ns list-ns create-ns delete-ns \
|
||||
attach-ns detach-ns list-ctrl get-ns-id get-log \
|
||||
fw-log smart-log smart-log-add error-log \
|
||||
get-feature set-feature format fw-activate \
|
||||
fw-download admin-passthru io-passthru security-send \
|
||||
security-recv resv-acquire resv-register resv-release \
|
||||
resv-report dsm flush compare read write write-zeroes \
|
||||
write-uncor reset subsystem-reset show-regs discover \
|
||||
connect-all connect disconnect version help \
|
||||
intel lnvm memblaze list-subsys"
|
||||
|
||||
nvme_list_opts () {
|
||||
local opts=""
|
||||
local compargs=""
|
||||
|
||||
local nonopt_args=0
|
||||
for (( i=0; i < ${#words[@]}-1; i++ )); do
|
||||
if [[ ${words[i]} != -* ]]; then
|
||||
let nonopt_args+=1
|
||||
fi
|
||||
done
|
||||
|
||||
if [ $nonopt_args -eq 2 ]; then
|
||||
opts="/dev/nvme* "
|
||||
fi
|
||||
|
||||
opts+=" "
|
||||
|
||||
case "$1" in
|
||||
"list")
|
||||
opts=""
|
||||
;;
|
||||
"id-ctrl")
|
||||
opts+=" --raw-binary -b --human-readable -H \
|
||||
--vendor-specific -v --output-format= -o"
|
||||
;;
|
||||
"id-ns")
|
||||
opts+=" --namespace-id= -n --raw-binary -b \
|
||||
--human-readable -H --vendor-specific -v \
|
||||
--force -f --output-format= -o"
|
||||
;;
|
||||
"list-ns")
|
||||
opts+=" --namespace-id= -n --al -a"
|
||||
;;
|
||||
"create-ns")
|
||||
opts+=" --nsze= -s --ncap= -c --flbas= -f \
|
||||
--dps= -d --nmic= -n"
|
||||
;;
|
||||
"delete-ns")
|
||||
opts+=" -namespace-id= -n"
|
||||
;;
|
||||
"attach-ns")
|
||||
opts+=" --namespace-id= -n --controllers= -c"
|
||||
;;
|
||||
"detach-ns")
|
||||
opts+=" --namespace-id= -n --controllers= -c"
|
||||
;;
|
||||
"list-ctrl")
|
||||
opts+=" --namespace-id= -n --cntid= -c"
|
||||
;;
|
||||
"get-ns-id")
|
||||
;;
|
||||
"get-log")
|
||||
opts+=" --log-id= -i --log-len= -l --namespace-id= -n \
|
||||
--raw-binary= -b"
|
||||
;;
|
||||
"fw-log")
|
||||
opts+=" --raw-binary -b --output-format= -o"
|
||||
;;
|
||||
"smart-log")
|
||||
opts+=" --namespace-id= -n --raw-binary -b \
|
||||
--output-format= -o"
|
||||
;;
|
||||
"smart-log-add")
|
||||
opts+=" --namespace-id= -n --raw-binary -b"
|
||||
;;
|
||||
"error-log")
|
||||
opts+=" --namespace-id= -n --raw-binary -b --log-entries= -e \
|
||||
--output-format= -o"
|
||||
;;
|
||||
"get-feature")
|
||||
opts+=" --namespace-id= -n --feature-id= -f --sel= -s \
|
||||
--data-len= -l --cdw11= --raw-binary -b \
|
||||
--human-readable -H"
|
||||
;;
|
||||
"set-feature")
|
||||
opts+=" --namespace-id= -n --feature-id= -f --value= -v \
|
||||
--data-len= -l -data= -d --value= --save -s"
|
||||
;;
|
||||
"format")
|
||||
opts+=" --namespace-id= -n --timeout= -t --lbaf= -l \
|
||||
--ses= -s --pil= -p -pi= -i --ms= -m --reset -r"
|
||||
;;
|
||||
"fw-activate")
|
||||
opts+=" --action= -a --slot= -s"
|
||||
;;
|
||||
"fw-download")
|
||||
opts+=" --fw= -f --xfer= -x --offset= -o"
|
||||
;;
|
||||
"admin-passthru")
|
||||
opts+=" --opcode= -o --flags= -f --prefil= -p --rsvd= -R \
|
||||
--namespace-id= -n --data-len= -l --metadata-len= -m \
|
||||
--timeout= -t --cdw2= -2 --cdw3= -3 --cdw10= -4 \
|
||||
--cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 \
|
||||
--cdw15= -9 --input-file= -i --raw-binary= -b \
|
||||
--show-command -s --dry-run -d --read -r --write -w"
|
||||
;;
|
||||
"io-passthru")
|
||||
opts+=" --opcode= -o --flags= -f --prefill= -p --rsvd= -R \
|
||||
--namespace-id= -n --data-len= -l --metadata-len= -m \
|
||||
--timeout= -t --cdw2= -2 --cdw3= -3 --cdw10= -4 \
|
||||
--cdw11= -5 --cdw12= -6 --cdw13= -7 --cdw14= -8 \
|
||||
--cdw15= -9 --input-file= -i --raw-binary= -b \
|
||||
--show-command -s --dry-run -d --read -r --write -w"
|
||||
;;
|
||||
"security-send")
|
||||
opts+=" --namespace-id= -n --file= -f --nssf= -N --secp= -p \
|
||||
--spsp= -s --tl= -t"
|
||||
;;
|
||||
"security-recv")
|
||||
opts+=" --namespace-id= -n --size= -x --secp= -p --spsp= -s \
|
||||
--al= -t --raw-binary -b"
|
||||
;;
|
||||
"resv-acquire")
|
||||
opts+=" --namespace-id= -n --crkey= -c --prkey= -p \
|
||||
--rtype= -t --racqa= -a --iekey= -i"
|
||||
;;
|
||||
"resv-register")
|
||||
opts+=" --namespace-id= -n --crkey= -c --nrkey= -k \
|
||||
--rrega= -r --cptpl= -p --iekey -i"
|
||||
;;
|
||||
"resv-release")
|
||||
opts+=" --namespace-id= -n --crkey -c --rtype= -t \
|
||||
--rrela= -a --iekey -i"
|
||||
;;
|
||||
"resv-report")
|
||||
opts+=" --namespace-id= -n --numd= -d --raw-binary= -b \
|
||||
--output-format= -o"
|
||||
;;
|
||||
"dsm")
|
||||
opts+=" --namespace-id= -n --ctx-attrs= -a --blocks= -b\
|
||||
-slbs= -s --ad -d --idw -w --idr -r --cdw11= -c"
|
||||
;;
|
||||
"flush")
|
||||
opts+=" --namespace-id= -n"
|
||||
;;
|
||||
"compare")
|
||||
opts+=" --start-block= -s --block-count= -c --data-size= -z \
|
||||
--metadata-size= -y --ref-tag= -r --data= -d \
|
||||
--metadata= -M --prinfo= -p --app-tag-mask= -m \
|
||||
--app-tag= -a --limited-retry -l \
|
||||
--force-unit-access -f --show-command -v \
|
||||
--dry-run -w --latency -t"
|
||||
;;
|
||||
"read")
|
||||
opts+=" --start-block= -s --block-count= -c --data-size= -z \
|
||||
--metadata-size= -y --ref-tag= -r --data= -d \
|
||||
--metadata= -M --prinfo= -p --app-tag-mask= -m \
|
||||
--app-tag= -a --limited-retry -l \
|
||||
--force-unit-access -f --show-command -v \
|
||||
--dry-run -w --latency -t"
|
||||
;;
|
||||
"write")
|
||||
opts+=" --start-block= -s --block-count= -c --data-size= -z \
|
||||
--metadata-size= -y --ref-tag= -r --data= -d \
|
||||
--metadata= -M --prinfo= -p --app-tag-mask= -m \
|
||||
--app-tag= -a --limited-retry -l \
|
||||
--force-unit-access -f --show-command -v \
|
||||
--dry-run -w --latency -t"
|
||||
;;
|
||||
"write-zeros")
|
||||
opts+=" --namespace-id= -n --start-block= -s \
|
||||
--block-count= -c --limited-retry -l \
|
||||
--force-unit-access -f --prinfo= -p --ref-tag= -r \
|
||||
--app-tag-mask= -m --app-tag= -a"
|
||||
;;
|
||||
"write-uncor")
|
||||
opts+=" --namespace-id= -n --start-block= -s \
|
||||
--block-count= -c"
|
||||
;;
|
||||
"reset")
|
||||
opts+=""
|
||||
;;
|
||||
"subsystem-reset")
|
||||
opts+=""
|
||||
;;
|
||||
"show-regs")
|
||||
opts+=" --human-readable -H"
|
||||
;;
|
||||
"discover")
|
||||
opts+=" --transport= -t -traddr= -a -trsvcid= -s \
|
||||
--hostnqn= -q --raw= -r"
|
||||
;;
|
||||
"connect-all")
|
||||
opts+=" --transport= -t --traddr= -a --trsvcid= -s
|
||||
--hostnqn= -q --raw= -r"
|
||||
;;
|
||||
"connect")
|
||||
opts+=" --transport= -t --nqn= -n --traddr= -a --trsvcid -s \
|
||||
--hostnqn= -q --nr-io-queues= -i --keep-alive-tmo -k \
|
||||
--reconnect-delay -r"
|
||||
;;
|
||||
"disconnect")
|
||||
opts+=" --nqn -n --device -d"
|
||||
;;
|
||||
"version")
|
||||
opts+=""
|
||||
;;
|
||||
"help")
|
||||
opts=$_cmds
|
||||
;;
|
||||
esac
|
||||
|
||||
opts+=" -h --help"
|
||||
|
||||
COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
_nvme_subcmds () {
|
||||
local cur prev words cword
|
||||
_init_completion || return
|
||||
|
||||
if [[ ${#words[*]} -lt 3 ]]; then
|
||||
COMPREPLY+=( $(compgen -W "$_cmds" -- $cur ) )
|
||||
else
|
||||
nvme_list_opts ${words[1]} $prev
|
||||
fi
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
complete -o default -F _nvme_subcmds nvme
|
Loading…
Add table
Add a link
Reference in a new issue