summaryrefslogtreecommitdiffstats
path: root/completions/bash-nvme-completion.sh
diff options
context:
space:
mode:
Diffstat (limited to 'completions/bash-nvme-completion.sh')
-rw-r--r--completions/bash-nvme-completion.sh1240
1 files changed, 1173 insertions, 67 deletions
diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh
index c022b89..d3cca44 100644
--- a/completions/bash-nvme-completion.sh
+++ b/completions/bash-nvme-completion.sh
@@ -2,20 +2,115 @@
# (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 id-iocs nvm-id-ctrl create-ns delete-ns \
- attach-ns detach-ns list-ctrl get-ns-id get-log persistent-event-log \
- pred-lat-event-agg-log fw-log smart-log smart-log-add error-log \
- predictable-lat-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 copy reset subsystem-reset show-regs discover \
- connect-all connect disconnect version help \
- intel lnvm memblaze list-subsys endurance-event-agg-log \
- lba-status-log resv-notif-log"
+# Constant to indicate command has no options
+readonly NO_OPTS=""
+
+# Associative array of plugins and associated subcommands
+# Order here is same as PLUGIN_OBJS in Makefile
+typeset -A _plugin_subcmds
+readonly _plugin_subcmds=(
+ [intel]="id-ctrl internal-log lat-stats \
+ set-bucket-thresholds lat-stats-tracking \
+ market-name smart-log-add temp-stats"
+ [amzn]="id-ctrl"
+ [lnvm]="list info id-ns chunk-log init create \
+ remove factory diag-bbtbl diag-set-bbtbl"
+ [memblaze]="smart-log-add get-pm-status set-pm-status \
+ select-download lat-stats lat-stats-print lat-log \
+ lat-log-print clear-error-log"
+ [wdc]="cap-diag drive-log get-crash-dump get-pfail-dump \
+ id-ctrl purge purge-monitor vs-internal-log \
+ vs-nand-stats vs-smart-add-log clear-pcie-correctable-errors \
+ drive-essentials get-drive-status clear-assert-dump \
+ drive-resize vs-fw-activate-history clear-fw-activate-history \
+ enc-get-log vs-telemetry-controller-option \
+ vs-error-reason-identifier log-page-directory \
+ namespace-resize vs-drive-info vs-temperature-stats \
+ capabilities cloud-SSD-plugin-version vs-pcie-stats"
+ [huawei]="list id-ctrl"
+ [netapp]="smdevices ontapdevices"
+ [toshiba]="vs-smart-add-log vs-internal-log \
+ clear-pcie-correctable-errors"
+ [micron]="select-download vs-temperature-stats vs-pcie-stats \
+ clear-pcie-correctable-errors vs-internal-log \
+ vs-telemetry-controller-option vs-nand-stats \
+ vs-drive-info plugin-version cloud-SSD-plugin-version \
+ log-page-directory vs-fw-activate-history \
+ vs-error-reason-identifier vs-smart-add-log \
+ clear-fw-activate-history vs-smbus-option"
+ [seagate]="vs-temperature-stats vs-log-page-sup \
+ vs-smart-add-log vs-pcie-stats clear-pcie-correctable-errors \
+ get-host-tele get-ctrl-tele vs-internal-log \
+ plugin-version"
+ [virtium]="save-smart-to-vtview-log show-identify"
+ [shannon]="smart-log-add get-feature-add set-feature-add id-ctrl"
+ [dera]="smart-log-add"
+ [sfx]="smart-log-add lat-stats get-bad-block query-cap \
+ change-cap set-feature get-feature"
+ [transcend]="healthvalue badblock"
+ [zns]="id-ctrl id-ns zone-mgmt-recv \
+ zone-mgmt-send report-zones close-zone \
+ finish-zone open-zone reset-zone offline-zone \
+ set-zone-desc zone-append changed-zone-list"
+ [nvidia]="id-ctrl"
+ [ymtc]="smart-log-add"
+)
+
+# Associative array mapping plugins to coresponding option completions
+typeset -A _plugin_funcs
+readonly _plugin_funcs=(
+ [intel]="plugin_intel_opts"
+ [amzn]="plugin_amzn_opts"
+ [lnvm]="plugin_lnvm_opts"
+ [memblaze]="plugin_memblaze_opts"
+ [wdc]="plugin_wdc_opts"
+ [huawei]="plugin_huawei_opts"
+ [toshiba]="plugin_toshiba_opts"
+ [micron]="plugin_micron_opts"
+ [seagate]="plugin_seagate_opts"
+ [virtium]="plugin_virtium_opts"
+ [shannon]="plugin_shannon_opts"
+ [dera]="plugin_dera_opts"
+ [sfx]="pluginx_sfx_opts"
+ [transcend]="plugin_transcend_opts"
+ [zns]="plugin_zns_opts"
+ [nvidia]="plugin_nvidia_opts"
+ [ymtc]="plugin_ymtc_opts"
+)
+
+# Top level commands
+_cmds="list list-subsys id-ctrl id-ns \
+ id-ns-granularity list-ns list-ctrl \
+ nvm-id-ctrl primary-ctrl-caps list-secondary \
+ ns-descs id-nvmset id-uuid id-iocs create-ns \
+ delete-ns get-ns-id get-log telemetry-log \
+ fw-log changed-ns-list-log smart-log ana-log \
+ error-log effects-log endurance-log \
+ predictable-lat-log pred-lat-event-agg-log \
+ persistent-event-log endurance-agg-log \
+ lba-status-log resv-notif-log get-feature \
+ device-self-test self-test-log set-feature \
+ set-property get-property format fw-commit \
+ fw-download admin-passthru io-passthru \
+ security-send security-recv get-lba-status \
+ resv-acquire resv-register resv-release \
+ resv-report dsm copy flush compare read \
+ write write-zeros write-uncor verify \
+ sanitize sanitize-log reset subsystem-reset \
+ ns-rescan show-regs discover connect-all \
+ connect disconnect disconnect-all gen-hostnqn \
+ show-hostnqn dir-receive dir-send virt-mgmt \
+ rpmb"
+
+# Add plugins:
+for plugin in "${!_plugin_subcmds[@]}"; do
+ _cmds+=" $plugin"
+done
+
+cmds+=" version help"
nvme_list_opts () {
- local opts=""
+ local opts=""
local compargs=""
local nonopt_args=0
@@ -31,34 +126,66 @@ nvme_list_opts () {
opts+=" "
+ # Listed here in the same order as in nvme-builtin.h
case "$1" in
"list")
- opts=""
- ;;
+ opts+=$NO_OPTS
+ ;;
+ "list-subsys")
+ opts=+=" --output-format= -o --verbose -v"
+ ;;
"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"
;;
+ "id-ns-granularity")
+ opts+=" --output-format= -o"
+ ;;
"list-ns")
- opts+=" --namespace-id= -n --al -a --csi= -y"
+ opts+=" --namespace-id= -n --al -a --csi= -y \
+ --outputformat= -o"
;;
- "id-iocs")
- opts+=" --controller-id= -c"
+ "list-ctrl")
+ opts+=" --namespace-id= -n --cntid= -c \
+ --output-format= -o"
+ ;;
+ "id-domain")
+ opts+=" --dom-id= -d --output-format= -o"
;;
"nvm-id-ctrl")
opts+=" --output-format= -o"
;;
+ "primary-ctrl-caps")
+ opts+=" --output-format= -o --human-readable -H"
+ ;;
+ "list-secondary")
+ opts+=" --cntid= -c --namespace-id= n --num-entries -e \
+ --output-format= -o"
+ ;;
+ "ns-descs")
+ opts+=" --namespace-id= -n --output-format -o --raw-binary -b"
+ ;;
+ "id-nvmset")
+ opts+=" --nvmeset-id= -i --output-format= -o"
+ ;;
+ "id-uuid")
+ opts+=" --output-format= -o --raw-binary -b --human-readable -H"
+ ;;
+ "id-iocs")
+ opts+=" --controller-id= -c --output-format= -o --human-readable -H"
+ ;;
"create-ns")
opts+=" --nsze= -s --ncap= -c --flbas= -f \
- --dps= -d --nmic= -n --csi= -y"
+ --dps= -d --nmic= -n --anagrp-id= -a --nvmset-id= -i \
+ --block-size= -b --timeout= -t--csi= -y"
;;
"delete-ns")
- opts+=" -namespace-id= -n"
+ opts+=" -namespace-id= -n --timeout= -t"
;;
"attach-ns")
opts+=" --namespace-id= -n --controllers= -c"
@@ -66,41 +193,55 @@ nvme_list_opts () {
"detach-ns")
opts+=" --namespace-id= -n --controllers= -c"
;;
- "list-ctrl")
- opts+=" --namespace-id= -n --cntid= -c"
- ;;
"get-ns-id")
+ opts+=$NO_OPTS
;;
"get-log")
opts+=" --log-id= -i --log-len= -l --namespace-id= -n \
- --raw-binary= -b"
- ;;
- "persistent-event-log")
- opts+=" --action= -a --log-len= -l \
- --raw-binary -b --output-format= -o"
- ;;
- "pred-lat-event-agg-log")
- opts+=" --log-entries= -e --rae -r \
- --raw-binary -b --output-format= -o"
+ --aen= -a --lpo= -o --lsp= -s --lsi= -S \
+ --rae -r --uuid-index= -U --csi= -y --ot -O \
+ --raw-binary -b"
;;
- "predictable-lat-log")
- opts+=" --nvmset-id= -i --raw-binary -b \
- --output-format= -o"
+ "telemetry-log")
+ opts+=" --output-file= -o --host-generate= -g \
+ --controller-init -c --data-area= -d"
;;
"fw-log")
opts+=" --raw-binary -b --output-format= -o"
;;
+ "changed-ns-list-log")
+ opts+=" --output-format= -o --raw-binary -b"
+ ;;
"smart-log")
opts+=" --namespace-id= -n --raw-binary -b \
--output-format= -o"
;;
- "smart-log-add")
- opts+=" --namespace-id= -n --raw-binary -b"
+ "ana-log")
+ opts+=" --output-format -o"
;;
"error-log")
- opts+=" --namespace-id= -n --raw-binary -b --log-entries= -e \
+ opts+=" --raw-binary -b --log-entries= -e \
--output-format= -o"
;;
+ "effects-log")
+ opts+=" --output-format= -o --human-readable -H \
+ --raw-binary -b"
+ ;;
+ "endurance-log")
+ opts+=" --output-format= -o --group-id -g"
+ ;;
+ "predictable-lat-log")
+ opts+=" --nvmset-id= -i --raw-binary -b \
+ --output-format= -o"
+ ;;
+ "pred-lat-event-agg-log")
+ opts+=" --log-entries= -e --rae -r \
+ --raw-binary -b --output-format= -o"
+ ;;
+ "persistent-event-log")
+ opts+=" --action= -a --log-len= -l \
+ --raw-binary -b --output-format= -o"
+ ;;
"endurance-event-agg-log")
opts+=" --log-entries= -e --rae -r \
--raw-binary -b --output-format= -o"
@@ -113,38 +254,58 @@ nvme_list_opts () {
;;
"get-feature")
opts+=" --namespace-id= -n --feature-id= -f --sel= -s \
- --data-len= -l --cdw11= --raw-binary -b \
+ --data-len= -l --cdw11= --c -uuid-index= -U --raw-binary -b \
--human-readable -H"
;;
+ "device-self-test")
+ opts+=" --namespace-id= -n --self-test-code= -s"
+ ;;
+ "self-test-log")
+ opts+=" --dst-entries= -e --output-format= -o \
+ --verbose -v"
+ ;;
"set-feature")
opts+=" --namespace-id= -n --feature-id= -f --value= -v \
- --data-len= -l -data= -d --value= --save -s"
+ --data-len= -l -data= -d --value= -v --save -s --uuid-index= -U \
+ --cdw12= -c"
+ ;;
+ "set-property")
+ opts+=" --offset= -o --value= -v"
+ ;;
+ "get-property")
+ opts=+" --offset= -o --human-readable -H"
;;
"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-commit")
+ opts+=" --slot= -s --action= -a --bpid= -b"
;;
"fw-download")
opts+=" --fw= -f --xfer= -x --offset= -o"
;;
+ "capacity-mgmt")
+ opts+=" --operation= -f --element-id= -i --cap-lower= -l \
+ --cap-upper= -u"
+ ;;
"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"
+ --cdw15= -9 --input-file= -i --raw-binary -b \
+ --show-command -s --dry-run -d --read -r --write -w \
+ --latency -T"
;;
"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"
+ --cdw15= -9 --input-file= -i --raw-binary -b \
+ --show-command -s --dry-run -d --read -r --write -w \
+ --latency -T"
;;
"security-send")
opts+=" --namespace-id= -n --file= -f --nssf= -N --secp= -p \
@@ -154,6 +315,11 @@ nvme_list_opts () {
opts+=" --namespace-id= -n --size= -x --secp= -p --spsp= -s \
--al= -t --raw-binary -b"
;;
+ "get-lba-status")
+ opts+=" --namespace-id= -n --start-lba= -s --max-dw= -m \
+ --action= -a --range-len= -l --timeout= -t \
+ --output-format= -o"
+ ;;
"resv-acquire")
opts+=" --namespace-id= -n --crkey= -c --prkey= -p \
--rtype= -t --racqa= -a --iekey= -i"
@@ -167,15 +333,15 @@ nvme_list_opts () {
--rrela= -a --iekey -i"
;;
"resv-report")
- opts+=" --namespace-id= -n --numd= -d --raw-binary= -b \
- --output-format= -o"
+ opts+=" --namespace-id= -n --numd= -d --cdw11 -c \
+ --output-format= -o --raw-binary -b"
;;
"dsm")
- opts+=" --namespace-id= -n --ctx-attrs= -a --blocks= -b\
- -slbs= -s --ad -d --idw -w --idr -r --cdw11= -c"
+ opts+=" --namespace-id= -n --ctx-attrs= -a --blocks= -b \
+ --slbs= -s --ad -d --idw -w --idr -r --cdw11= -c"
;;
"copy")
- opts+=" --sdlba= -d --blocks= -b --slbs= -s \
+ opts+=" --namespace-id= -n --sdlba= -d --blocks= -b --slbs= -s \
--limited-retry -l --force-unit-access -f \
--prinfow= -p --prinfor= -P \
--ref-tag= -r --expected-ref-tag= -R \
@@ -191,7 +357,8 @@ nvme_list_opts () {
--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 \
+ --force-unit-access -f --storage-tag-check -C \
+ --dir-type= -T --dir-spec= -S --dsm= -D --show-command -v \
--dry-run -w --latency -t"
;;
"read")
@@ -199,7 +366,8 @@ nvme_list_opts () {
--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 \
+ --force-unit-access -f --storage-tag-check -C \
+ --dir-type= -T --dir-spec= -S --dsm= -D --show-command -v \
--dry-run -w --latency -t"
;;
"write")
@@ -207,66 +375,1004 @@ nvme_list_opts () {
--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 \
+ --force-unit-access -f --storage-tag-check -C \
+ --dir-type= -T --dir-spec= -S --dsm= -D --show-command -v \
--dry-run -w --latency -t"
;;
"write-zeros")
opts+=" --namespace-id= -n --start-block= -s \
- --block-count= -c --limited-retry -l \
+ --block-count= -c --deac -d --limited-retry -l \
--force-unit-access -f --prinfo= -p --ref-tag= -r \
- --app-tag-mask= -m --app-tag= -a"
+ --app-tag-mask= -m --app-tag= -a \
+ --storage-tag= -S --storage-tag-check -C"
;;
"write-uncor")
opts+=" --namespace-id= -n --start-block= -s \
--block-count= -c"
;;
+ "verify")
+ opts+=" --namespace-id= -n --start-block= -s \
+ --block-count= -c --limited-retry -l \
+ --force-unit-access -f --prinfo= -p --ref-tag= -r \
+ --app-tag= -a --app-tag-mask= -m \
+ --storage-tag= -S --storage-tag-check -C"
+ ;;
+ "sanitize")
+ opts+=" --no-dealloc -d --oipbp -i --owpass= -n \
+ --ause -u --sanact= -a --ovrpat= -p"
+ ;;
+ "sanitize-log")
+ opts+=" --rae -r --output-format= -o --human-readable -H \
+ --raw-binary -b"
+ ;;
"reset")
- opts+=""
+ opts+=$NO_OPTS
;;
"subsystem-reset")
- opts+=""
+ opts+=$NO_OPTS
+ ;;
+ "ns-rescan")
+ opts+=$NO_OPTS
;;
"show-regs")
- opts+=" --human-readable -H"
+ opts+=" --output-format= -o --human-readable -H"
;;
"discover")
opts+=" --transport= -t -traddr= -a -trsvcid= -s \
- --hostnqn= -q --raw= -r"
+ --host-traddr= -w --hsot-iface= -f \
+ --hostnqn= -q --hostid -I --raw= -r \
+ --raw= -r --device= -d --keep-alive-tmo= -k \
+ --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \
+ --tos= -T --hdr-digest= -g --data-digest -G \
+ --nr-io-queues= -i --nr-write-queues= -W \
+ --nr-poll-queues= -P --queue-size= -Q \
+ --persistent -p --quiet -S --matching -m \
+ --output-format= -o"
;;
"connect-all")
- opts+=" --transport= -t --traddr= -a --trsvcid= -s
- --hostnqn= -q --raw= -r"
+ opts+=" --transport= -t -traddr= -a -trsvcid= -s \
+ --host-traddr= -w --hsot-iface= -f \
+ --hostnqn= -q --hostid -I --raw= -r \
+ --raw= -r --device= -d --keep-alive-tmo= -k \
+ --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \
+ --tos= -T --hdr-digest= -g --data-digest -G \
+ --nr-io-queues= -i --nr-write-queues= -W \
+ --nr-poll-queues= -P --queue-size= -Q \
+ --persistent -p --quiet -S --matching -m \
+ --output-format= -o"
;;
"connect")
opts+=" --transport= -t --nqn= -n --traddr= -a --trsvcid -s \
- --hostnqn= -q --nr-io-queues= -i --keep-alive-tmo -k \
- --reconnect-delay -r"
+ --hostnqn= -q --host-id= -I --nr-io-queues= -i \
+ --nr-poll-queues= -P --queue-size= -Q \
+ --keep-alive-tmo= -k --reconnect-delay= -r \
+ --ctrl-loss-tmo= -l --fast-io-fail-tmo= -f \
+ --tos= -T --duplicate-connect -D --disable-sqflow -d\
+ --hdr-digest -g --data-digest -G --output-format= -o"
;;
"disconnect")
opts+=" --nqn -n --device -d"
;;
+ "disconnect-all")
+ opts+=$NO_OPTS
+ ;;
+ "gen-hostnqn")
+ opts+=$NO_OPTS
+ ;;
+ "show-hostnqn")
+ opts+=$NO_OPTS
+ ;;
+ "dir-receive")
+ opts+=" --namespace-id= -n --data-len= -l --raw-binary -b \
+ --dir-type= -D --dir-spec= -S --dir-oper= -O \
+ --req-resource= -r --human-readable -H"
+ ;;
+ "dir-send")
+ opts+=" --namespace-id= -n --data-len= -l --dir-type= -D \
+ --target-dir= -T --dir-spec= -S --dir-oper= -O \
+ --endir= -e --human-readable -H --raw-binary -b"
+ ;;
+ "virt-mgmt")
+ opts+=" --cntlid= -c --rt= -r --act= -a --nr= -n"
+ ;;
+ "rpmb")
+ opts+=" --cmd= -c --msgfile= -f --keyfile= -g \
+ --key= -k --msg= -d --address= -o --blocks= -b \
+ --target= -t"
+ ;;
"version")
- opts+=""
+ opts+=$NO_OPTS
;;
"help")
opts=$_cmds
;;
esac
- opts+=" -h --help"
+ opts+=" -h --help"
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_intel_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "internal-log")
+ opts+=" --log= -l --region= -r --nlognum= -m \
+ --namespace-id= -n --output-file= -o \
+ --verbose-nlog -v"
+ ;;
+ "lat-stats")
+ opts+=" --write -w --raw-binary -b --json -j"
+ ;;
+ "set-bucket-thresholds")
+ opts+=" --write -w --bucket-thresholds= -t"
+ ;;
+ "lat-stats-tracking")
+ opts+=" --enable -e --disable -d"
+ ;;
+ "market-name")
+ opts+=" --raw-binary -b"
+ ;;
+ "smart-log-add")
+ opts+=" --namespace-id= -n --raw-binary -b \
+ --json -j"
+ ;;
+ "temp-stats")
+ opts+=" --raw-binary -b"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_amzn_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_lnvm_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "list")
+ opts+=$NO_OPTS
+ ;;
+ "info")
+ opts+=$NO_OPTS
+ ;;
+ "id-ns")
+ opts+=" --namespace-id= -n --raw-binary -b --human-readable -H"
+ ;;
+ "chunk-log")
+ opts+=" --output-format= -o --human-readable -H"
+ ;;
+ "init")
+ opts+=" --device-name= -d --mediamgr-name -m"
+ ;;
+ "create")
+ opts+=" --device-name= -d --target-name= -n --target-type= -t \
+ --lun-begin= -b --lun-end= -e --over-prov= -o --factory -f"
+ ;;
+ "remove")
+ opts+=" --target-name= -n"
+ ;;
+ "factory")
+ opts+=" --device-name= -d --erase-only-marked -e
+ --clear-host-side-blks -s --clear-bb-blks -b"
+ ;;
+ "diag-bbtbl")
+ opts+=" --namespace-id= -n --channel-id= -c --lun-id= -l \
+ --raw-binary -b"
+ ;;
+ "diag-set-bbtbl")
+ opts+=" --namespace-id= -n --channel-id= -c --lun-id= -l \
+ --plane-id= -p --block-id= -b --value= -v"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_memblaze_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "smart-log-add")
+ opts+=" --namespace-id= -n --raw-binary -b"
+ ;;
+ "get-pm-status")
+ opts+=$NO_OPTS
+ ;;
+ "set-pm-status")
+ opts+=" --value= -v --save -s"
+ ;;
+ "select-download")
+ opts+=" --fw= -f --select= -s"
+ ;;
+ "lat-stats")
+ opts+=" --enable -e --disable -d"
+ ;;
+ "lat-stats-print")
+ opts+=" --write -w"
+ ;;
+ "lat-log")
+ opts+=" --param= -p"
+ ;;
+ "lat-log-print")
+ opts+=$NO_OPTS
+ ;;
+ "clear-error-log")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_wdc_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "cap-diag")
+ opts+=" --output-file= -o --transfer-size= -s"
+ ;;
+ "drive-log")
+ opts+=" --output-file= -o"
+ ;;
+ "get-crash-dump")
+ opts+=" --output-file= -o"
+ ;;
+ "get-pfail-dump")
+ opts+=" --output-file= -o"
+ ;;
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "purge")
+ opts+=$NO_OPTS
+ ;;
+ "purge-monitor")
+ opts+=$NO_OPTS
+ ;;
+ "vs-internal-log")
+ opts+=" --output-file= -o --transfer-size= -s --data-area= -d \
+ --file-size= -f --offset= -e --type= -t --verbose -v"
+ ;;
+ "vs-nand-stats")
+ opts+=" --output-format= -o"
+ ;;
+ "vs-smart-add-log")
+ opts+=" --interval= -i --output-format= -o --log-page-version= -l \
+ --log-page-mask= -p"
+ ;;
+ "clear-pcie-correctable-errors")
+ opts+=$NO_OPTS
+ ;;
+ "drive-essentials")
+ opts+=" --dir-name= -d"
+ ;;
+ "get-drive-status")
+ opts+=$NO_OPTS
+ ;;
+ "clear-assert-dump")
+ opts+=$NO_OPTS
+ ;;
+ "drive-resize")
+ opts+=" --size= -s"
+ ;;
+ "vs-fw-activate-history")
+ opts+=" --output-format= -o"
+ ;;
+ "clear-fw-activate-history")
+ opts+=$NO_OPTS
+ ;;
+ "enc-get-log")
+ opts+=" --output-file= -o --transfer-size= -s --log-id= -l"
+ ;;
+ "vs-telemetry-controller-option")
+ opts+=" --disable -d --enable -e --status -s"
+ ;;
+ "vs-error-reason-identifier")
+ opts+=" --log-id= -i --file= -o"
+ ;;
+ "log-page-directory")
+ opts+=" --output-format= -o"
+ ;;
+ "namespace-resize")
+ opts+=" --namespace-id= -n --op-option= -o"
+ ;;
+ "vs-drive-info")
+ opts+=" --output-format= -o"
+ ;;
+ "vs-temperature-stats")
+ opts+=" --output-format= -o"
+ ;;
+ "capabilities")
+ opts+=$NO_OPTS
+ ;;
+ "cloud-SSD-plugin-version")
+ opts+=$NO_OPTS
+ ;;
+ "vs-pcie-stats")
+ opts+=" --output-format= -o"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_huawei_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "list")
+ opts+=" --output-format= -o"
+ ;;
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_toshiba_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "vs-smart-add-log")
+ opts+=" --namespace-id= -n --output-file= -o --log= -l"
+ ;;
+ "vs-internal-log")
+ opts+=" --output-file= -o --prev-log -p"
+ ;;
+ "clear-pcie-correctable-errors")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_micron_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "select-download")
+ opts+=" --fw= -f --select= -s"
+ ;;
+ "vs-temperature-stats")
+ opts+=" --format= -f"
+ ;;
+ "vs-pcie-stats")
+ opts+=" --format= -f"
+ ;;
+ "clear-pcie-correctable-errors")
+ opts+=$NO_OPTS
+ ;;
+ "vs-internal-log")
+ opts+=" --type= -t --package= -p --data_area= -d"
+ ;;
+ "vs-telemetry-controller-option")
+ opts+=" --option= -o --select= -s"
+ ;;
+ "vs-nand-stats")
+ opts+=" --format= -f"
+ ;;
+ "vs-drive-info")
+ opts+=" --format= -f"
+ ;;
+ "plugin-version")
+ opts+=$NO_OPTS
+ ;;
+ "cloud-SSD-plugin-version")
+ opts+=$NO_OPTS
+ ;;
+ "log-page-directory")
+ opts+=$NO_OPTS
+ ;;
+ "vs-fw-activate-history")
+ opts+=" --format= -f"
+ ;;
+ "vs-error-reason-identifier")
+ opts+=" --format= -f"
+ ;;
+ "vs-smart-add-log")
+ opts+=" --format= -f"
+ ;;
+ "clear-fw-activate-history")
+ opts+=$NO_OPTS
+ ;;
+ "vs-smbus-option")
+ opts+=" --option= -o --value= -v --save= -s"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+lugin_seagate_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "vs-temperature-stats")
+ opts+=" --output-format= -o"
+ ;;
+ "vs-log-page-sup")
+ opts+=" --output-format= -o"
+ ;;
+ "vs-smart-add-log")
+ opts+=" --output-format= -o"
+ ;;
+ "vs-pcie-stats")
+ opts+=" --output-format= -o"
+ ;;
+ "clear-pcie-correctable-errors")
+ opts+=" --save -s"
+ ;;
+ "get-host-tele")
+ opts+=" --namespace-id= -n --log-specific= -i --raw-binary -b"
+ ;;
+ "get-ctrl-tele")
+ opts+=" --namespace-id= -n --raw-binary -b"
+ ;;
+ "vs-internal-log")
+ opts+=" --namespace-id= -n --dump-file= -f"
+ ;;
+ "plugin-version")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=""
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_virtium_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "save-smart-to-vtview-log")
+ opts+=" --run-time= -r --freq= -f --output-file= -o --test-name= -n"
+ ;;
+ "show-identify")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
return 0
}
+plugin_shannon_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "smart-log-add")
+ opts+=" --namespace-id= -n --raw-binary -b"
+ ;;
+ "get-feature-add")
+ opts+=" --namespace-id= -n --feature-id -f --sel= -s \
+ --data-len= -l --raw-binary -b --cdw11= -c --human-readable -H"
+ ;;
+ "set-feature-add")
+ opts+=" --namespace-id= -n --feature-id= -f --value= -v \
+ --data-len= -l --data= -d --save -s"
+ ;;
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_dera_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "smart-log-add")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_sfx_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "smart-log-add")
+ opts+=" --namespace-id= -n --raw-binary -b --json -j"
+ ;;
+ "lat-stats")
+ opts+=" --write -w --raw-binary -b"
+ ;;
+ "get-bad-block")
+ opts+=$NO_OPTS
+ ;;
+ "query-cap")
+ opts+=" --raw-binary --json"
+ ;;
+ "change-cap")
+ opts+=" --cap= -c --cap-byte= -z --force -f --raw-binary -b --json -j"
+ ;;
+ "set-feature")
+ opts+=" --namespace-id= -n --feature-id= -f --value= -v --force -s"
+ ;;
+ "get-feature")
+ opts+=" --namespace-id= -n --feature-id -f"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_transcend_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "healthvalue")
+ opts+=$NO_OPTS
+ ;;
+ "badblock")
+ opts+=$NO_OPTS
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_zns_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "id-ns")
+ opts+=" --namespace-id= -n --vendor-specific -v \
+ --output-format= -o --human-readable -H"
+ ;;
+ "zone-mgmt-recv")
+ opts+=" --output-format= -o --namespace-id= -n \
+ --start-lba= -s --zra= -z --zrasf= -S --partial -p \
+ --data-len= -l"
+ ;;
+ "zone-mgmt-send")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --zsa= -z --data-len= -l \
+ --data= -d --timeout= -t"
+ ;;
+ "report-zones")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --descs= -d --state= -S --output-format= -o \
+ --human-readable -H --extended -e --partial -p"
+ ;;
+ "close-zone")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --timeout= -t"
+ ;;
+ "finish-zone")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --timeout= -t"
+ ;;
+ "open-zone")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --timeout= -t"
+ ;;
+ "reset-zone")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --timeout= -t"
+ ;;
+ "offline-zone")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --select-all -a --timeout= -t"
+ ;;
+ "set-zone-desc")
+ opts+=" --namespace-id= -n --start-lba= -s \
+ --data= -d --timeout= -t"
+ ;;
+ "zone-append")
+ opts+=" --namespace-id= -n --zslba= -s --data-size= -z \
+ --metadata-size= -y --data= -d --metadata= -M \
+ --limited-retry -l --force-unit-access -f --ref-tag= -r
+ --app-tag-mask= -m --app-tag= -a --prinfo= -p \
+ --piremap -P --latency -t"
+ ;;
+ "changed-zone-list")
+ opts+=" --namespace-id= -n --output-format= -o --rae -r"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_nvidia_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "id-ctrl")
+ opts+=" --raw-binary -b --human-readable -H \
+ --vendor-specific -v --output-format= -o"
+ ;;
+ "help")
+ opts+=$NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
+plugin_ymtc_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 3 ]; then
+ opts="/dev/nvme* "
+ fi
+
+ opts+=" "
+
+ case "$1" in
+ "smart-log-add")
+ opts+=" --namespace-id= -n --raw-binary -b"
+ ;;
+ "help")
+ opts+=NO_OPTS
+ ;;
+ esac
+
+ COMPREPLY+=( $( compgen $compargs -W "$opts" -- $cur ) )
+
+ return 0
+}
+
_nvme_subcmds () {
- local cur prev words cword
+ local cur prev words cword
_init_completion || return
if [[ ${#words[*]} -lt 3 ]]; then
COMPREPLY+=( $(compgen -W "$_cmds" -- $cur ) )
else
+ for subcmd in "${!_plugin_subcmds[@]}"; do
+ if [[ ${words[1]} == $subcmd ]]; then
+ if [[ ${#words[*]} -lt 4 ]]; then
+ COMPREPLY+=( $(compgen -W "${_plugin_subcmds[$subcmd]}" -- $cur ) )
+ else
+ func=${_plugin_funcs[$subcmd]}
+ $func ${words[2]} $prev
+ fi
+ return 0
+ fi
+ done
+
nvme_list_opts ${words[1]} $prev
fi