diff options
Diffstat (limited to 'completions/bash-nvme-completion.sh')
-rw-r--r-- | completions/bash-nvme-completion.sh | 238 |
1 files changed, 238 insertions, 0 deletions
diff --git a/completions/bash-nvme-completion.sh b/completions/bash-nvme-completion.sh new file mode 100644 index 0000000..b7c2aa1 --- /dev/null +++ b/completions/bash-nvme-completion.sh @@ -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 |