| File: | .build-ci/../fabrics.c |
| Warning: | line 1101, column 8 Null pointer passed to 1st parameter expecting 'nonnull' |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | // SPDX-License-Identifier: GPL-2.0-only | |||
| 2 | /* | |||
| 3 | * Copyright (C) 2016 Intel Corporation. All rights reserved. | |||
| 4 | * Copyright (c) 2016 HGST, a Western Digital Company. | |||
| 5 | * Copyright (c) 2016 Samsung Electronics Co., Ltd. | |||
| 6 | * | |||
| 7 | * This program is free software; you can redistribute it and/or | |||
| 8 | * modify it under the terms of the GNU General Public License version | |||
| 9 | * 2 as published by the Free Software Foundation. | |||
| 10 | * | |||
| 11 | * This program is distributed in the hope that it will be useful, | |||
| 12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| 13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| 14 | * GNU General Public License for more details. | |||
| 15 | * | |||
| 16 | * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | |||
| 17 | * | |||
| 18 | * This file implements the discovery controller feature of NVMe over | |||
| 19 | * Fabrics specification standard. | |||
| 20 | */ | |||
| 21 | ||||
| 22 | #include <dirent.h> | |||
| 23 | #include <errno(*__errno_location ()).h> | |||
| 24 | #include <fcntl.h> | |||
| 25 | #include <getopt.h> | |||
| 26 | #include <inttypes.h> | |||
| 27 | #include <libgen.h> | |||
| 28 | #include <stdbool.h> | |||
| 29 | #include <stddef.h> | |||
| 30 | #include <stdint.h> | |||
| 31 | #include <stdio.h> | |||
| 32 | #include <stdlib.h> | |||
| 33 | #include <time.h> | |||
| 34 | #include <unistd.h> | |||
| 35 | ||||
| 36 | #include <sys/stat.h> | |||
| 37 | #include <sys/types.h> | |||
| 38 | ||||
| 39 | #include <libnvme.h> | |||
| 40 | ||||
| 41 | #ifdef NVME_HAVE_LIBKMOD | |||
| 42 | #include <libkmod.h> | |||
| 43 | #endif | |||
| 44 | ||||
| 45 | #include "common.h" | |||
| 46 | #include "nvme.h" | |||
| 47 | #include "nvme-print.h" | |||
| 48 | #include "fabrics.h" | |||
| 49 | #include "util/cleanup.h" | |||
| 50 | #include "logging.h" | |||
| 51 | #include "util/sighdl.h" | |||
| 52 | ||||
| 53 | #define PATH_NVMF_DISC"/usr/local/etc" "/nvme/discovery.conf" SYSCONFDIR"/usr/local/etc" "/nvme/discovery.conf" | |||
| 54 | #define PATH_NVMF_CONFIG"/usr/local/etc" "/nvme/config.json" SYSCONFDIR"/usr/local/etc" "/nvme/config.json" | |||
| 55 | #define PATH_NVMF_RUNDIR"/usr/local/run" "/nvme" RUNDIR"/usr/local/run" "/nvme" | |||
| 56 | #define MAX_DISC_ARGS32 32 | |||
| 57 | #define MAX_DISC_RETRIES10 10 | |||
| 58 | ||||
| 59 | #define NVMF_DEF_DISC_TMO30 30 | |||
| 60 | ||||
| 61 | /* Name of file to output log pages in their raw format */ | |||
| 62 | static char *raw; | |||
| 63 | static bool_Bool persistent; | |||
| 64 | static bool_Bool quiet; | |||
| 65 | static bool_Bool dump_config; | |||
| 66 | ||||
| 67 | static const char *nvmf_tport = "transport type"; | |||
| 68 | static const char *nvmf_traddr = "transport address"; | |||
| 69 | static const char *nvmf_nqn = "subsystem nqn"; | |||
| 70 | static const char *nvmf_trsvcid = "transport service id (e.g. IP port)"; | |||
| 71 | static const char *nvmf_htraddr = "host traddr (e.g. FC WWN's)"; | |||
| 72 | static const char *nvmf_hiface = "host interface (for tcp transport)"; | |||
| 73 | static const char *nvmf_hostnqn = "user-defined hostnqn"; | |||
| 74 | static const char *nvmf_hostid = "user-defined hostid (if default not used)"; | |||
| 75 | static const char *nvmf_hostkey = "user-defined dhchap key (if default not used)"; | |||
| 76 | static const char *nvmf_ctrlkey = "user-defined dhchap controller key (for bi-directional authentication)"; | |||
| 77 | static const char *nvmf_nr_io_queues = "number of io queues to use (default is core count)"; | |||
| 78 | static const char *nvmf_nr_write_queues = "number of write queues to use (default 0)"; | |||
| 79 | static const char *nvmf_nr_poll_queues = "number of poll queues to use (default 0)"; | |||
| 80 | static const char *nvmf_queue_size = "number of io queue elements to use (default 128)"; | |||
| 81 | static const char *nvmf_keep_alive_tmo = "keep alive timeout period in seconds"; | |||
| 82 | static const char *nvmf_reconnect_delay = "reconnect timeout period in seconds"; | |||
| 83 | static const char *nvmf_ctrl_loss_tmo = "controller loss timeout period in seconds"; | |||
| 84 | static const char *nvmf_fast_io_fail_tmo = "fast I/O fail timeout (default off)"; | |||
| 85 | static const char *nvmf_tos = "type of service"; | |||
| 86 | static const char *nvmf_keyring = "Keyring for TLS key lookup (key id or keyring name)"; | |||
| 87 | static const char *nvmf_tls_key = "TLS key to use (key id or key in interchange format)"; | |||
| 88 | static const char *nvmf_tls_key_legacy = "TLS key to use (key id)"; | |||
| 89 | static const char *nvmf_tls_key_identity = "TLS key identity"; | |||
| 90 | static const char *nvmf_dup_connect = "allow duplicate connections between same transport host and subsystem port"; | |||
| 91 | static const char *nvmf_disable_sqflow = "disable controller sq flow control (default false)"; | |||
| 92 | static const char *nvmf_hdr_digest = "enable transport protocol header digest (TCP transport)"; | |||
| 93 | static const char *nvmf_data_digest = "enable transport protocol data digest (TCP transport)"; | |||
| 94 | static const char *nvmf_tls = "enable TLS"; | |||
| 95 | static const char *nvmf_concat = "enable secure concatenation"; | |||
| 96 | static const char *nvmf_config_file = "Use specified JSON configuration file or 'none' to disable"; | |||
| 97 | ||||
| 98 | struct nvmf_args { | |||
| 99 | const char *subsysnqn; | |||
| 100 | const char *transport; | |||
| 101 | const char *traddr; | |||
| 102 | const char *host_traddr; | |||
| 103 | const char *host_iface; | |||
| 104 | const char *trsvcid; | |||
| 105 | const char *hostnqn; | |||
| 106 | const char *hostid; | |||
| 107 | const char *hostkey; | |||
| 108 | const char *ctrlkey; | |||
| 109 | const char *keyring; | |||
| 110 | const char *tls_key; | |||
| 111 | const char *tls_key_identity; | |||
| 112 | int queue_size; | |||
| 113 | int nr_io_queues; | |||
| 114 | int reconnect_delay; | |||
| 115 | int ctrl_loss_tmo; | |||
| 116 | int fast_io_fail_tmo; | |||
| 117 | int keep_alive_tmo; | |||
| 118 | int nr_write_queues; | |||
| 119 | int nr_poll_queues; | |||
| 120 | int tos; | |||
| 121 | long keyring_id; | |||
| 122 | long tls_key_id; | |||
| 123 | long tls_configured_key_id; | |||
| 124 | bool_Bool duplicate_connect; | |||
| 125 | bool_Bool disable_sqflow; | |||
| 126 | bool_Bool hdr_digest; | |||
| 127 | bool_Bool data_digest; | |||
| 128 | bool_Bool tls; | |||
| 129 | bool_Bool concat; | |||
| 130 | }; | |||
| 131 | ||||
| 132 | #define NVMF_ARGS(n, f, ...)struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ..., {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } \ | |||
| 133 | NVME_ARGS(n, \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 134 | OPT_STRING("transport", 't', "STR", &f.transport, nvmf_tport), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 135 | OPT_STRING("nqn", 'n', "STR", &f.subsysnqn, nvmf_nqn), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 136 | OPT_STRING("traddr", 'a', "STR", &f.traddr, nvmf_traddr), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 137 | OPT_STRING("trsvcid", 's', "STR", &f.trsvcid, nvmf_trsvcid), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 138 | OPT_STRING("host-traddr", 'w', "STR", &f.host_traddr, nvmf_htraddr), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 139 | OPT_STRING("host-iface", 'f', "STR", &f.host_iface, nvmf_hiface), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 140 | OPT_STRING("hostnqn", 'q', "STR", &f.hostnqn, nvmf_hostnqn), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 141 | OPT_STRING("hostid", 'I', "STR", &f.hostid, nvmf_hostid), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 142 | OPT_STRING("dhchap-secret", 'S', "STR", &f.hostkey, nvmf_hostkey), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 143 | OPT_STRING("dhchap-ctrl-secret", 'C', "STR", &f.ctrlkey, nvmf_ctrlkey), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 144 | OPT_STRING("keyring", 0, "STR", &f.keyring, nvmf_keyring), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 145 | OPT_STRING("tls-key", 0, "STR", &f.tls_key, nvmf_tls_key), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 146 | OPT_STRING("tls-key-identity", 0, "STR", &f.tls_key_identity, nvmf_tls_key_identity), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 147 | OPT_INT("nr-io-queues", 'i', &f.nr_io_queues, nvmf_nr_io_queues), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 148 | OPT_INT("nr-write-queues", 'W', &f.nr_write_queues, nvmf_nr_write_queues), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 149 | OPT_INT("nr-poll-queues", 'P', &f.nr_poll_queues, nvmf_nr_poll_queues), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 150 | OPT_INT("queue-size", 'Q', &f.queue_size, nvmf_queue_size), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 151 | OPT_INT("keep-alive-tmo", 'k', &f.keep_alive_tmo, nvmf_keep_alive_tmo), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 152 | OPT_INT("reconnect-delay", 'c', &f.reconnect_delay, nvmf_reconnect_delay), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 153 | OPT_INT("ctrl-loss-tmo", 'l', &f.ctrl_loss_tmo, nvmf_ctrl_loss_tmo), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 154 | OPT_INT("fast_io_fail_tmo", 'F', &f.fast_io_fail_tmo, nvmf_fast_io_fail_tmo),\struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 155 | OPT_INT("tos", 'T', &f.tos, nvmf_tos), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 156 | OPT_INT("tls_key", 0, &f.tls_key_id, nvmf_tls_key_legacy), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 157 | OPT_FLAG("duplicate-connect", 'D', &f.duplicate_connect, nvmf_dup_connect), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 158 | OPT_FLAG("disable-sqflow", 0, &f.disable_sqflow, nvmf_disable_sqflow), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 159 | OPT_FLAG("hdr-digest", 'g', &f.hdr_digest, nvmf_hdr_digest), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 160 | OPT_FLAG("data-digest", 'G', &f.data_digest, nvmf_data_digest), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 161 | OPT_FLAG("tls", 0, &f.tls, nvmf_tls), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 162 | OPT_FLAG("concat", 0, &f.concat, nvmf_concat), \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 163 | ##__VA_ARGS__ \struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 164 | )struct argconfig_commandline_options n[] = { {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void* )0)}, {"transport", 't', "STR", CFG_STRING, &f.transport, 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &f. subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &f.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &f.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &f.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &f.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & f.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &f.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S', "STR", CFG_STRING, &f.hostkey, 1, nvmf_hostkey, 0, }, {"dhchap-ctrl-secret" , 'C', "STR", CFG_STRING, &f.ctrlkey, 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, &f.keyring, 1, nvmf_keyring , 0, }, {"tls-key", 0, "STR", CFG_STRING, &f.tls_key, 1, nvmf_tls_key , 0, }, {"tls-key-identity", 0, "STR", CFG_STRING, &f.tls_key_identity , 1, nvmf_tls_key_identity, 0, }, {"nr-io-queues", 'i', "NUM" , CFG_INT, &f.nr_io_queues, 1, nvmf_nr_io_queues, 0, }, { "nr-write-queues", 'W', "NUM", CFG_INT, &f.nr_write_queues , 1, nvmf_nr_write_queues, 0, }, {"nr-poll-queues", 'P', "NUM" , CFG_INT, &f.nr_poll_queues, 1, nvmf_nr_poll_queues, 0, } , {"queue-size", 'Q', "NUM", CFG_INT, &f.queue_size, 1, nvmf_queue_size , 0, }, {"keep-alive-tmo", 'k', "NUM", CFG_INT, &f.keep_alive_tmo , 1, nvmf_keep_alive_tmo, 0, }, {"reconnect-delay", 'c', "NUM" , CFG_INT, &f.reconnect_delay, 1, nvmf_reconnect_delay, 0 , }, {"ctrl-loss-tmo", 'l', "NUM", CFG_INT, &f.ctrl_loss_tmo , 1, nvmf_ctrl_loss_tmo, 0, }, {"fast_io_fail_tmo", 'F', "NUM" , CFG_INT, &f.fast_io_fail_tmo, 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT, &f.tos, 1, nvmf_tos, 0 , }, {"tls_key", 0, "NUM", CFG_INT, &f.tls_key_id, 1, nvmf_tls_key_legacy , 0, }, {"duplicate-connect", 'D', ((void*)0), CFG_FLAG, & f.duplicate_connect, 0, nvmf_dup_connect, 0, }, {"disable-sqflow" , 0, ((void*)0), CFG_FLAG, &f.disable_sqflow, 0, nvmf_disable_sqflow , 0, }, {"hdr-digest", 'g', ((void*)0), CFG_FLAG, &f.hdr_digest , 0, nvmf_hdr_digest, 0, }, {"data-digest", 'G', ((void*)0), CFG_FLAG , &f.data_digest, 0, nvmf_data_digest, 0, }, {"tls", 0, ( (void*)0), CFG_FLAG, &f.tls, 0, nvmf_tls, 0, }, {"concat" , 0, ((void*)0), CFG_FLAG, &f.concat, 0, nvmf_concat, 0, } , ##__VA_ARGS__, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 165 | ||||
| 166 | static void nvmf_default_args(struct nvmf_args *fa) | |||
| 167 | { | |||
| 168 | fa->tos = -1; | |||
| 169 | fa->ctrl_loss_tmo = NVMF_DEF_CTRL_LOSS_TMO600; | |||
| 170 | } | |||
| 171 | ||||
| 172 | static void save_discovery_log(char *raw, struct nvmf_discovery_log *log) | |||
| 173 | { | |||
| 174 | uint64_t numrec = le64_to_cpu(log->numrec); | |||
| 175 | int fd, len, ret; | |||
| 176 | ||||
| 177 | fd = open(raw, O_CREAT0100 | O_RDWR02 | O_TRUNC01000, 0600); | |||
| 178 | if (fd < 0) { | |||
| 179 | fprintf(stderrstderr, "failed to open %s: %s\n", raw, libnvme_strerror(errno(*__errno_location ()))); | |||
| 180 | return; | |||
| 181 | } | |||
| 182 | ||||
| 183 | len = sizeof(struct nvmf_discovery_log) + numrec * sizeof(struct nvmf_disc_log_entry); | |||
| 184 | ||||
| 185 | ret = write(fd, log, len); | |||
| 186 | if (ret < 0) | |||
| 187 | fprintf(stderrstderr, "failed to write to %s: %s\n", | |||
| 188 | raw, libnvme_strerror(errno(*__errno_location ()))); | |||
| 189 | else | |||
| 190 | printf("Discovery log is saved to %s\n", raw); | |||
| 191 | ||||
| 192 | close(fd); | |||
| 193 | } | |||
| 194 | ||||
| 195 | static int setup_common_context(struct libnvmf_context *fctx, | |||
| 196 | struct nvmf_args *fa); | |||
| 197 | ||||
| 198 | struct hook_fabrics_data { | |||
| 199 | struct nvmf_args *fa; | |||
| 200 | nvme_print_flags_t flags; | |||
| 201 | bool_Bool quiet; | |||
| 202 | char *raw; | |||
| 203 | char **argv; | |||
| 204 | FILE *f; | |||
| 205 | }; | |||
| 206 | ||||
| 207 | static bool_Bool hook_decide_retry(struct libnvmf_context *fctx, int err, | |||
| 208 | void *user_data) | |||
| 209 | { | |||
| 210 | if (err == -EAGAIN11 || (err == -EINTR4 && !nvme_sigint_received)) { | |||
| 211 | print_debug("libnvmf_add_ctrl returned '%s'\n", libnvme_strerror(-err))do { if (is_printable_at_level(LIBNVME_LOG_DEBUG)) printf("libnvmf_add_ctrl returned '%s'\n" , libnvme_strerror(-err)); } while (0); | |||
| 212 | return true1; | |||
| 213 | } | |||
| 214 | ||||
| 215 | return false0; | |||
| 216 | } | |||
| 217 | ||||
| 218 | static void hook_connected(struct libnvmf_context *fctx, | |||
| 219 | struct libnvme_ctrl *c, void *user_data) | |||
| 220 | { | |||
| 221 | struct hook_fabrics_data *hfd = user_data; | |||
| 222 | ||||
| 223 | if (hfd->quiet) | |||
| 224 | return; | |||
| 225 | ||||
| 226 | if (hfd->flags == NORMAL) { | |||
| 227 | printf("connecting to device: %s\n", libnvme_ctrl_get_name(c)); | |||
| 228 | return; | |||
| 229 | } | |||
| 230 | ||||
| 231 | #ifdef CONFIG_JSONC | |||
| 232 | if (hfd->flags == JSON) { | |||
| 233 | struct json_object *root; | |||
| 234 | ||||
| 235 | root = json_create_object()json_object_new_object(); | |||
| 236 | ||||
| 237 | json_object_add_value_string(root, "device", | |||
| 238 | libnvme_ctrl_get_name(c)); | |||
| 239 | ||||
| 240 | json_print_object(root, NULL)printf("%s", json_object_to_json_string_ext(root, (1 << 1) | (1 << 4))); | |||
| 241 | printf("\n"); | |||
| 242 | json_free_object(root)json_object_put(root); | |||
| 243 | } | |||
| 244 | #endif | |||
| 245 | } | |||
| 246 | ||||
| 247 | static void hook_already_connected(struct libnvmf_context *fctx, | |||
| 248 | struct libnvme_host *host, const char *subsysnqn, | |||
| 249 | const char *transport, const char *traddr, | |||
| 250 | const char *trsvcid, void *user_data) | |||
| 251 | { | |||
| 252 | if (quiet) | |||
| 253 | return; | |||
| 254 | ||||
| 255 | fprintf(stderrstderr, "already connected to hostnqn=%s,nqn=%s,transport=%s,traddr=%s,trsvcid=%s\n", | |||
| 256 | libnvme_host_get_hostnqn(host), subsysnqn, | |||
| 257 | transport, traddr, trsvcid); | |||
| 258 | } | |||
| 259 | ||||
| 260 | static void hook_discovery_log(struct libnvmf_context *fctx, | |||
| 261 | bool_Bool connect, struct nvmf_discovery_log *log, | |||
| 262 | uint64_t numrec, void *user_data) | |||
| 263 | { | |||
| 264 | struct hook_fabrics_data *hfd = user_data; | |||
| 265 | ||||
| 266 | if (hfd->raw) | |||
| 267 | save_discovery_log(hfd->raw, log); | |||
| 268 | else if (!connect) | |||
| 269 | nvme_show_discovery_log(log, numrec, hfd->flags); | |||
| 270 | } | |||
| 271 | ||||
| 272 | static int hook_parser_init(struct libnvmf_context *dctx, void *user_data) | |||
| 273 | { | |||
| 274 | struct hook_fabrics_data *hfd = user_data; | |||
| 275 | ||||
| 276 | hfd->f = fopen(PATH_NVMF_DISC"/usr/local/etc" "/nvme/discovery.conf", "r"); | |||
| 277 | if (hfd->f == NULL((void*)0)) { | |||
| 278 | fprintf(stderrstderr, "No params given and no %s\n", PATH_NVMF_DISC"/usr/local/etc" "/nvme/discovery.conf"); | |||
| 279 | return -ENOENT2; | |||
| 280 | } | |||
| 281 | ||||
| 282 | hfd->argv = calloc(MAX_DISC_ARGS32, sizeof(char *)); | |||
| 283 | if (!hfd->argv) | |||
| 284 | return -1; | |||
| 285 | ||||
| 286 | hfd->argv[0] = "discover"; | |||
| 287 | ||||
| 288 | return 0; | |||
| 289 | } | |||
| 290 | ||||
| 291 | static void hook_parser_cleanup(struct libnvmf_context *fctx, void *user_data) | |||
| 292 | { | |||
| 293 | struct hook_fabrics_data *hfd = user_data; | |||
| 294 | ||||
| 295 | free(hfd->argv); | |||
| 296 | fclose(hfd->f); | |||
| 297 | } | |||
| 298 | ||||
| 299 | static int set_fabrics_options(struct libnvmf_context *fctx, | |||
| 300 | struct nvmf_args *fa) | |||
| 301 | { | |||
| 302 | libnvmf_context_set_io_queues(fctx, fa->nr_io_queues, | |||
| 303 | fa->nr_write_queues, fa->nr_poll_queues, | |||
| 304 | fa->queue_size, fa->disable_sqflow); | |||
| 305 | libnvmf_context_set_reconnect_policy(fctx, fa->ctrl_loss_tmo, | |||
| 306 | fa->reconnect_delay, fa->fast_io_fail_tmo); | |||
| 307 | libnvmf_context_set_keep_alive_tmo(fctx, fa->keep_alive_tmo); | |||
| 308 | libnvmf_context_set_tos(fctx, fa->tos); | |||
| 309 | libnvmf_context_set_keyring_id(fctx, fa->keyring_id); | |||
| 310 | libnvmf_context_set_tls_key_id(fctx, fa->tls_key_id); | |||
| 311 | libnvmf_context_set_tls_configured_key_id(fctx, | |||
| 312 | fa->tls_configured_key_id); | |||
| 313 | libnvmf_context_set_duplicate_connect(fctx, fa->duplicate_connect); | |||
| 314 | libnvmf_context_set_hdr_digest(fctx, fa->hdr_digest); | |||
| 315 | libnvmf_context_set_data_digest(fctx, fa->data_digest); | |||
| 316 | libnvmf_context_set_tls(fctx, fa->tls); | |||
| 317 | libnvmf_context_set_concat(fctx, fa->concat); | |||
| 318 | ||||
| 319 | return 0; | |||
| 320 | } | |||
| 321 | ||||
| 322 | static int hook_parser_next_line(struct libnvmf_context *fctx, void *user_data) | |||
| 323 | { | |||
| 324 | struct hook_fabrics_data *hfd = user_data; | |||
| 325 | struct nvmf_args fa; | |||
| 326 | char *ptr, *p; | |||
| 327 | static char line[4096]; | |||
| 328 | int argc, ret = 0; | |||
| 329 | bool_Bool force = false0; | |||
| 330 | ||||
| 331 | NVMF_ARGS(opts, fa,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG , &persistent, 0, "persistent discovery connection", 0, } , {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 332 | OPT_FLAG("persistent", 'p', &persistent, "persistent discovery connection"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG , &persistent, 0, "persistent discovery connection", 0, } , {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 333 | OPT_FLAG("force", 0, &force, "Force persistent discovery controller creation"))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG , &persistent, 0, "persistent discovery connection", 0, } , {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 334 | ||||
| 335 | memcpy(&fa, hfd->fa, sizeof(fa)); | |||
| 336 | do { | |||
| 337 | if (fgets(line, sizeof(line), hfd->f) == NULL((void*)0)) | |||
| 338 | return -EOF(-1); | |||
| 339 | ||||
| 340 | if (line[0] == '#' || line[0] == '\n') | |||
| 341 | continue; | |||
| 342 | ||||
| 343 | argc = 1; | |||
| 344 | p = line; | |||
| 345 | while ((ptr = strsep(&p, " =\n")) != NULL((void*)0)) | |||
| 346 | hfd->argv[argc++] = ptr; | |||
| 347 | hfd->argv[argc] = NULL((void*)0); | |||
| 348 | ||||
| 349 | fa.subsysnqn = NVME_DISC_SUBSYS_NAME"nqn.2014-08.org.nvmexpress.discovery"; | |||
| 350 | if (argconfig_parse(argc, hfd->argv, "config", opts)) | |||
| 351 | continue; | |||
| 352 | } while (!fa.transport && !fa.traddr); | |||
| 353 | ||||
| 354 | if (!fa.trsvcid) | |||
| 355 | fa.trsvcid = libnvmf_get_default_trsvcid(fa.transport, true1); | |||
| 356 | ||||
| 357 | ret = setup_common_context(fctx, &fa); | |||
| 358 | if (ret) | |||
| 359 | return ret; | |||
| 360 | ||||
| 361 | libnvmf_context_set_discovery_hooks(fctx, hook_discovery_log, | |||
| 362 | hook_parser_init, hook_parser_cleanup, hook_parser_next_line); | |||
| 363 | ||||
| 364 | return 0; | |||
| 365 | } | |||
| 366 | ||||
| 367 | static int setup_common_context(struct libnvmf_context *fctx, | |||
| 368 | struct nvmf_args *fa) | |||
| 369 | { | |||
| 370 | int err; | |||
| 371 | ||||
| 372 | err = libnvmf_context_set_connection(fctx, | |||
| 373 | fa->subsysnqn, fa->transport, | |||
| 374 | fa->traddr, fa->trsvcid, | |||
| 375 | fa->host_traddr, fa->host_iface); | |||
| 376 | if (err) | |||
| 377 | return err; | |||
| 378 | ||||
| 379 | err = libnvmf_context_set_hostnqn(fctx, | |||
| 380 | fa->hostnqn, fa->hostid); | |||
| 381 | if (err) | |||
| 382 | return err; | |||
| 383 | ||||
| 384 | err = libnvmf_context_set_crypto(fctx, | |||
| 385 | fa->hostkey, fa->ctrlkey, | |||
| 386 | fa->keyring, fa->tls_key, | |||
| 387 | fa->tls_key_identity); | |||
| 388 | if (err) | |||
| 389 | return err; | |||
| 390 | ||||
| 391 | return set_fabrics_options(fctx, fa); | |||
| 392 | } | |||
| 393 | ||||
| 394 | static int create_common_context(struct libnvme_global_ctx *ctx, | |||
| 395 | bool_Bool persistent, struct nvmf_args *fa, | |||
| 396 | void *user_data, struct libnvmf_context **fctxp) | |||
| 397 | { | |||
| 398 | struct libnvmf_context *fctx; | |||
| 399 | int err; | |||
| 400 | ||||
| 401 | err = libnvmf_context_create(ctx, hook_decide_retry, hook_connected, | |||
| 402 | hook_already_connected, user_data, &fctx); | |||
| 403 | if (err) | |||
| 404 | return err; | |||
| 405 | ||||
| 406 | err = setup_common_context(fctx, fa); | |||
| 407 | if (err) | |||
| 408 | goto err; | |||
| 409 | ||||
| 410 | err = libnvmf_context_set_crypto(fctx, fa->hostkey, fa->ctrlkey, | |||
| 411 | fa->keyring, fa->tls_key, fa->tls_key_identity); | |||
| 412 | if (err) | |||
| 413 | goto err; | |||
| 414 | ||||
| 415 | libnvmf_context_set_persistent(fctx, persistent); | |||
| 416 | ||||
| 417 | *fctxp = fctx; | |||
| 418 | ||||
| 419 | return 0; | |||
| 420 | ||||
| 421 | err: | |||
| 422 | libnvmf_context_free(fctx); | |||
| 423 | return err; | |||
| 424 | } | |||
| 425 | ||||
| 426 | static int create_discovery_context(struct libnvme_global_ctx *ctx, | |||
| 427 | bool_Bool persistent, const char *device, | |||
| 428 | struct nvmf_args *fa, | |||
| 429 | void *user_data, struct libnvmf_context **fctxp) | |||
| 430 | { | |||
| 431 | struct libnvmf_context *fctx; | |||
| 432 | int err; | |||
| 433 | ||||
| 434 | err = create_common_context(ctx, persistent, fa, user_data, | |||
| 435 | &fctx); | |||
| 436 | if (err) | |||
| 437 | return err; | |||
| 438 | ||||
| 439 | err = libnvmf_context_set_discovery_hooks(fctx, hook_discovery_log, | |||
| 440 | hook_parser_init, hook_parser_cleanup, hook_parser_next_line); | |||
| 441 | if (err) | |||
| 442 | goto err; | |||
| 443 | ||||
| 444 | libnvmf_context_set_default_max_discovery_retries(fctx, | |||
| 445 | MAX_DISC_RETRIES10); | |||
| 446 | libnvmf_context_set_default_keep_alive_timeout(fctx, NVMF_DEF_DISC_TMO30); | |||
| 447 | ||||
| 448 | err = libnvmf_context_set_device(fctx, device); | |||
| 449 | if (err) | |||
| 450 | goto err; | |||
| 451 | ||||
| 452 | *fctxp = fctx; | |||
| 453 | return 0; | |||
| 454 | ||||
| 455 | err: | |||
| 456 | libnvmf_context_free(fctx); | |||
| 457 | return err; | |||
| 458 | } | |||
| 459 | ||||
| 460 | static int nvme_read_volatile_config(struct libnvme_global_ctx *ctx) | |||
| 461 | { | |||
| 462 | char *filename, *ext; | |||
| 463 | struct dirent *dir; | |||
| 464 | DIR *d; | |||
| 465 | int ret = -ENOENT2; | |||
| 466 | ||||
| 467 | d = opendir(PATH_NVMF_RUNDIR"/usr/local/run" "/nvme"); | |||
| 468 | if (!d) | |||
| 469 | return -ENOTDIR20; | |||
| 470 | ||||
| 471 | while ((dir = readdir(d))) { | |||
| 472 | if (dir->d_type != DT_REGDT_REG) | |||
| 473 | continue; | |||
| 474 | ||||
| 475 | ext = strchr(dir->d_name, '.'); | |||
| 476 | if (!ext || strcmp("json", ext + 1)) | |||
| 477 | continue; | |||
| 478 | ||||
| 479 | if (asprintf(&filename, "%s/%s", PATH_NVMF_RUNDIR"/usr/local/run" "/nvme", dir->d_name) < 0) { | |||
| 480 | ret = -ENOMEM12; | |||
| 481 | break; | |||
| 482 | } | |||
| 483 | ||||
| 484 | if (libnvme_read_config(ctx, filename)) | |||
| 485 | ret = 0; | |||
| 486 | ||||
| 487 | free(filename); | |||
| 488 | } | |||
| 489 | closedir(d); | |||
| 490 | ||||
| 491 | return ret; | |||
| 492 | } | |||
| 493 | ||||
| 494 | static int nvme_read_config_checked(struct libnvme_global_ctx *ctx, | |||
| 495 | const char *filename) | |||
| 496 | { | |||
| 497 | if (access(filename, F_OK0)) | |||
| 498 | return -errno(*__errno_location ()); | |||
| 499 | ||||
| 500 | return libnvme_read_config(ctx, filename); | |||
| 501 | } | |||
| 502 | ||||
| 503 | static void load_nvme_fabrics_module(void) | |||
| 504 | { | |||
| 505 | #ifdef NVME_HAVE_LIBKMOD | |||
| 506 | struct kmod_ctx *ctx; | |||
| 507 | struct kmod_module *mod; | |||
| 508 | int err, state; | |||
| 509 | int timeout = 20; /* 2 seconds */ | |||
| 510 | ||||
| 511 | ctx = kmod_new(NULL((void*)0), NULL((void*)0)); | |||
| 512 | if (!ctx) | |||
| 513 | return; | |||
| 514 | ||||
| 515 | err = kmod_module_new_from_name(ctx, "nvme-fabrics", &mod); | |||
| 516 | if (err) | |||
| 517 | goto unref; | |||
| 518 | ||||
| 519 | state = kmod_module_get_initstate(mod); | |||
| 520 | if (state != KMOD_MODULE_LIVE && state != KMOD_MODULE_BUILTIN) { | |||
| 521 | err = kmod_module_probe_insert_module(mod, | |||
| 522 | KMOD_PROBE_APPLY_BLACKLIST, NULL((void*)0), NULL((void*)0), NULL((void*)0), NULL((void*)0)); | |||
| 523 | if (err) | |||
| 524 | goto mod_unref; | |||
| 525 | ||||
| 526 | while (timeout--) { | |||
| 527 | state = kmod_module_get_initstate(mod); | |||
| 528 | if (state == KMOD_MODULE_LIVE) | |||
| 529 | goto mod_unref; | |||
| 530 | ||||
| 531 | /* 100 ms */ | |||
| 532 | usleep(100 * 1000); | |||
| 533 | } | |||
| 534 | err = -ENOENT2; | |||
| 535 | } | |||
| 536 | ||||
| 537 | mod_unref: | |||
| 538 | kmod_module_unref(mod); | |||
| 539 | unref: | |||
| 540 | kmod_unref(ctx); | |||
| 541 | ||||
| 542 | if (err) | |||
| 543 | fprintf(stderrstderr, "Couldn't load the nvme-fabrics module\n"); | |||
| 544 | #endif | |||
| 545 | } | |||
| 546 | ||||
| 547 | #define NBFT_SYSFS_PATH"/sys/firmware/acpi/tables" "/sys/firmware/acpi/tables" | |||
| 548 | ||||
| 549 | int fabrics_discovery(const char *desc, int argc, char **argv, bool_Bool connect) | |||
| 550 | { | |||
| 551 | char *config_file = PATH_NVMF_CONFIG"/usr/local/etc" "/nvme/config.json"; | |||
| 552 | nvme_print_flags_t flags; | |||
| 553 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 554 | __cleanup_nvmf_context__attribute__((cleanup(cleanup_nvmf_context))) struct libnvmf_context *fctx = NULL((void*)0); | |||
| 555 | int ret; | |||
| 556 | struct nvmf_args fa = { .subsysnqn = NVME_DISC_SUBSYS_NAME"nqn.2014-08.org.nvmexpress.discovery" }; | |||
| 557 | char *device = NULL((void*)0); | |||
| 558 | bool_Bool force = false0; | |||
| 559 | bool_Bool json_config = false0; | |||
| 560 | bool_Bool nbft = false0, nonbft = false0; | |||
| 561 | char *nbft_path = NBFT_SYSFS_PATH"/sys/firmware/acpi/tables"; | |||
| 562 | char *owner = NULL((void*)0); | |||
| 563 | ||||
| 564 | NVMF_ARGS(opts, fa,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 565 | OPT_STRING("device", 'd', "DEV", &device, "use existing discovery controller device"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 566 | OPT_FILE("raw", 'r', &raw, "save raw output to file"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 567 | OPT_FLAG("persistent", 'p', &persistent, "persistent discovery connection"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 568 | OPT_FLAG("quiet", 0, &quiet, "suppress already connected errors"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 569 | OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 570 | OPT_FLAG("dump-config", 'O', &dump_config, "Dump configuration file to stdout"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 571 | OPT_FLAG("force", 0, &force, "Force persistent discovery controller creation"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 572 | OPT_FLAG("nbft", 0, &nbft, "Only look at NBFT tables"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 573 | OPT_FLAG("no-nbft", 0, &nonbft, "Do not look at NBFT tables"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 574 | OPT_STRING("owner", 0, "NAME", &owner, "record this owner in the registry"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 575 | OPT_STRING("nbft-path", 0, "STR", &nbft_path, "user-defined path for NBFT tables"))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"device", 'd', "DEV", CFG_STRING, & device, 1, "use existing discovery controller device", 0, }, { "raw", 'r', "FILE", CFG_STRING, &raw, 1, "save raw output to file" , 0, }, {"persistent", 'p', ((void*)0), CFG_FLAG, &persistent , 0, "persistent discovery connection", 0, }, {"quiet", 0, (( void*)0), CFG_FLAG, &quiet, 0, "suppress already connected errors" , 0, }, {"config", 'J', "FILE", CFG_STRING, &config_file, 1, nvmf_config_file, 0, }, {"dump-config", 'O', ((void*)0), CFG_FLAG , &dump_config, 0, "Dump configuration file to stdout", 0 , }, {"force", 0, ((void*)0), CFG_FLAG, &force, 0, "Force persistent discovery controller creation" , 0, }, {"nbft", 0, ((void*)0), CFG_FLAG, &nbft, 0, "Only look at NBFT tables" , 0, }, {"no-nbft", 0, ((void*)0), CFG_FLAG, &nonbft, 0, "Do not look at NBFT tables" , 0, }, {"owner", 0, "NAME", CFG_STRING, &owner, 1, "record this owner in the registry" , 0, }, {"nbft-path", 0, "STR", CFG_STRING, &nbft_path, 1 , "user-defined path for NBFT tables", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 576 | ||||
| 577 | nvmf_default_args(&fa); | |||
| 578 | ||||
| 579 | load_nvme_fabrics_module(); | |||
| 580 | ||||
| 581 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 582 | if (ret) | |||
| 583 | return ret; | |||
| 584 | ||||
| 585 | ret = validate_output_format(nvme_args.output_format, &flags); | |||
| 586 | if (ret < 0) { | |||
| 587 | nvme_show_error("Invalid output format")nvme_show_message(1, "Invalid output format"); | |||
| 588 | return ret; | |||
| 589 | } | |||
| 590 | ||||
| 591 | if (!strcmp(config_file, "none")) | |||
| 592 | config_file = NULL((void*)0); | |||
| 593 | ||||
| 594 | log_level = map_log_level(nvme_args.verbose, quiet); | |||
| 595 | ||||
| 596 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 597 | if (!ctx) { | |||
| 598 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 599 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 600 | return -ENOMEM12; | |||
| 601 | } | |||
| 602 | /* | |||
| 603 | * --nbft defaults the owner to "nbft" so legacy boot scripts that | |||
| 604 | * call "connect-all --nbft" record ownership unchanged. An explicit | |||
| 605 | * --owner overrides that default. | |||
| 606 | */ | |||
| 607 | if (owner || nbft) { | |||
| 608 | ret = libnvme_set_owner(ctx, owner ? owner : "nbft"); | |||
| 609 | if (ret) { | |||
| 610 | fprintf(stderrstderr, "failed to set owner: %s\n", | |||
| 611 | libnvme_strerror(-ret)); | |||
| 612 | return ret; | |||
| 613 | } | |||
| 614 | } | |||
| 615 | ||||
| 616 | if (!nvme_read_config_checked(ctx, config_file)) | |||
| 617 | json_config = true1; | |||
| 618 | if (!nvme_read_volatile_config(ctx)) | |||
| 619 | json_config = true1; | |||
| 620 | ||||
| 621 | libnvme_skip_namespaces(ctx); | |||
| 622 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 623 | if (ret < 0) { | |||
| 624 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 625 | libnvme_strerror(-ret)); | |||
| 626 | return ret; | |||
| 627 | } | |||
| 628 | ||||
| 629 | if (device) { | |||
| 630 | if (!strcmp(device, "none")) | |||
| 631 | device = NULL((void*)0); | |||
| 632 | else if (!strncmp(device, "/dev/", 5)) | |||
| 633 | device += 5; | |||
| 634 | } | |||
| 635 | ||||
| 636 | struct hook_fabrics_data dld = { | |||
| 637 | .fa = &fa, | |||
| 638 | .flags = flags, | |||
| 639 | .raw = raw, | |||
| 640 | }; | |||
| 641 | ret = create_discovery_context(ctx, persistent, device, &fa, | |||
| 642 | &dld, &fctx); | |||
| 643 | if (ret) | |||
| 644 | return ret; | |||
| 645 | ||||
| 646 | if (!device && !fa.transport && !fa.traddr) { | |||
| 647 | if (!nonbft) | |||
| 648 | ret = libnvmf_discovery_nbft(ctx, fctx, | |||
| 649 | connect, nbft_path); | |||
| 650 | if (nbft) | |||
| 651 | goto out_free; | |||
| 652 | ||||
| 653 | if (json_config) | |||
| 654 | ret = libnvmf_discovery_config_json(ctx, fctx, | |||
| 655 | connect, force); | |||
| 656 | if (ret || access(PATH_NVMF_DISC"/usr/local/etc" "/nvme/discovery.conf", F_OK0)) | |||
| 657 | goto out_free; | |||
| 658 | ||||
| 659 | ret = libnvmf_discovery_config_file(ctx, fctx, connect, force); | |||
| 660 | goto out_free; | |||
| 661 | } | |||
| 662 | ||||
| 663 | ret = libnvmf_discovery(ctx, fctx, connect, force); | |||
| 664 | ||||
| 665 | out_free: | |||
| 666 | if (dump_config) | |||
| 667 | libnvme_dump_config(ctx, STDOUT_FILENO1); | |||
| 668 | ||||
| 669 | return ret; | |||
| 670 | } | |||
| 671 | ||||
| 672 | int fabrics_connect(const char *desc, int argc, char **argv) | |||
| 673 | { | |||
| 674 | __cleanup_free__attribute__((cleanup(freep))) char *hnqn = NULL((void*)0); | |||
| 675 | __cleanup_free__attribute__((cleanup(freep))) char *hid = NULL((void*)0); | |||
| 676 | char *config_file = NULL((void*)0); | |||
| 677 | char *owner = NULL((void*)0); | |||
| 678 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 679 | __cleanup_nvmf_context__attribute__((cleanup(cleanup_nvmf_context))) struct libnvmf_context *fctx = NULL((void*)0); | |||
| 680 | __cleanup_nvme_ctrl__attribute__((cleanup(cleanup_nvme_ctrl))) libnvme_ctrl_t c = NULL((void*)0); | |||
| 681 | int ret; | |||
| 682 | nvme_print_flags_t flags; | |||
| 683 | struct nvmf_args fa = { 0 }; | |||
| 684 | ||||
| 685 | NVMF_ARGS(opts, fa,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"owner", 0, "NAME", CFG_STRING , &owner, 1, "record this owner in the registry", 0, }, { "dump-config", 'O', ((void*)0), CFG_FLAG, &dump_config, 0 , "Dump JSON configuration to stdout", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 686 | OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"owner", 0, "NAME", CFG_STRING , &owner, 1, "record this owner in the registry", 0, }, { "dump-config", 'O', ((void*)0), CFG_FLAG, &dump_config, 0 , "Dump JSON configuration to stdout", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 687 | OPT_STRING("owner", 0, "NAME", &owner, "record this owner in the registry"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"owner", 0, "NAME", CFG_STRING , &owner, 1, "record this owner in the registry", 0, }, { "dump-config", 'O', ((void*)0), CFG_FLAG, &dump_config, 0 , "Dump JSON configuration to stdout", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 688 | OPT_FLAG("dump-config", 'O', &dump_config, "Dump JSON configuration to stdout"))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"owner", 0, "NAME", CFG_STRING , &owner, 1, "record this owner in the registry", 0, }, { "dump-config", 'O', ((void*)0), CFG_FLAG, &dump_config, 0 , "Dump JSON configuration to stdout", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 689 | ||||
| 690 | nvmf_default_args(&fa); | |||
| 691 | ||||
| 692 | load_nvme_fabrics_module(); | |||
| 693 | ||||
| 694 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 695 | if (ret) | |||
| 696 | return ret; | |||
| 697 | ||||
| 698 | ret = validate_output_format(nvme_args.output_format, &flags); | |||
| 699 | if (ret < 0) { | |||
| 700 | nvme_show_error("Invalid output format")nvme_show_message(1, "Invalid output format"); | |||
| 701 | return ret; | |||
| 702 | } | |||
| 703 | ||||
| 704 | if (config_file && strcmp(config_file, "none")) | |||
| 705 | goto do_connect; | |||
| 706 | ||||
| 707 | if (!fa.subsysnqn) { | |||
| 708 | fprintf(stderrstderr, | |||
| 709 | "required argument [--nqn | -n] not specified\n"); | |||
| 710 | return -EINVAL22; | |||
| 711 | } | |||
| 712 | ||||
| 713 | if (!fa.transport) { | |||
| 714 | fprintf(stderrstderr, | |||
| 715 | "required argument [--transport | -t] not specified\n"); | |||
| 716 | return -EINVAL22; | |||
| 717 | } | |||
| 718 | ||||
| 719 | if (strcmp(fa.transport, "loop")) { | |||
| 720 | if (!fa.traddr) { | |||
| 721 | fprintf(stderrstderr, | |||
| 722 | "required argument [--traddr | -a] not specified for transport %s\n", | |||
| 723 | fa.transport); | |||
| 724 | return -EINVAL22; | |||
| 725 | } | |||
| 726 | } | |||
| 727 | ||||
| 728 | do_connect: | |||
| 729 | log_level = map_log_level(nvme_args.verbose, quiet); | |||
| 730 | ||||
| 731 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 732 | if (!ctx) { | |||
| 733 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 734 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 735 | return -ENOMEM12; | |||
| 736 | } | |||
| 737 | if (owner) { | |||
| 738 | ret = libnvme_set_owner(ctx, owner); | |||
| 739 | if (ret) { | |||
| 740 | fprintf(stderrstderr, "failed to set owner: %s\n", | |||
| 741 | libnvme_strerror(-ret)); | |||
| 742 | return ret; | |||
| 743 | } | |||
| 744 | } | |||
| 745 | ||||
| 746 | libnvme_read_config(ctx, config_file); | |||
| 747 | nvme_read_volatile_config(ctx); | |||
| 748 | ||||
| 749 | libnvme_skip_namespaces(ctx); | |||
| 750 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 751 | if (ret < 0) { | |||
| 752 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 753 | libnvme_strerror(-ret)); | |||
| 754 | return ret; | |||
| 755 | } | |||
| 756 | ||||
| 757 | struct hook_fabrics_data hfd = { | |||
| 758 | .flags = flags, | |||
| 759 | .quiet = dump_config, | |||
| 760 | .raw = raw, | |||
| 761 | }; | |||
| 762 | ret = create_common_context(ctx, persistent, &fa, &hfd, &fctx); | |||
| 763 | if (ret) | |||
| 764 | return ret; | |||
| 765 | ||||
| 766 | if (config_file) | |||
| 767 | return libnvmf_connect_config_json(ctx, fctx); | |||
| 768 | ||||
| 769 | ret = libnvmf_connect(ctx, fctx); | |||
| 770 | if (ret) { | |||
| 771 | fprintf(stderrstderr, "failed to connect: %s\n", | |||
| 772 | libnvme_strerror(-ret)); | |||
| 773 | return ret; | |||
| 774 | } | |||
| 775 | ||||
| 776 | if (dump_config) | |||
| 777 | libnvme_dump_config(ctx, STDOUT_FILENO1); | |||
| 778 | ||||
| 779 | return 0; | |||
| 780 | } | |||
| 781 | ||||
| 782 | static libnvme_ctrl_t lookup_nvme_ctrl(struct libnvme_global_ctx *ctx, | |||
| 783 | const char *name) | |||
| 784 | { | |||
| 785 | libnvme_host_t h; | |||
| 786 | libnvme_subsystem_t s; | |||
| 787 | libnvme_ctrl_t c; | |||
| 788 | ||||
| 789 | libnvme_for_each_host(ctx, h)for (h = libnvme_first_host(ctx); h != ((void*)0); h = libnvme_next_host (ctx, h)) { | |||
| 790 | libnvme_for_each_subsystem(h, s)for (s = libnvme_first_subsystem(h); s != ((void*)0); s = libnvme_next_subsystem (h, s)) { | |||
| 791 | libnvme_subsystem_for_each_ctrl(s, c)for (c = libnvme_subsystem_first_ctrl(s); c != ((void*)0); c = libnvme_subsystem_next_ctrl(s, c)) { | |||
| 792 | if (!strcmp(libnvme_ctrl_get_name(c), name)) | |||
| 793 | return c; | |||
| 794 | } | |||
| 795 | } | |||
| 796 | } | |||
| 797 | return NULL((void*)0); | |||
| 798 | } | |||
| 799 | ||||
| 800 | static void nvmf_disconnect_nqn(struct libnvme_global_ctx *ctx, char *nqn) | |||
| 801 | { | |||
| 802 | int i = 0; | |||
| 803 | char *n = nqn; | |||
| 804 | char *p; | |||
| 805 | libnvme_host_t h; | |||
| 806 | libnvme_subsystem_t s; | |||
| 807 | libnvme_ctrl_t c; | |||
| 808 | ||||
| 809 | while ((p = strsep(&n, ",")) != NULL((void*)0)) { | |||
| 810 | if (!strlen(p)) | |||
| 811 | continue; | |||
| 812 | libnvme_for_each_host(ctx, h)for (h = libnvme_first_host(ctx); h != ((void*)0); h = libnvme_next_host (ctx, h)) { | |||
| 813 | libnvme_for_each_subsystem(h, s)for (s = libnvme_first_subsystem(h); s != ((void*)0); s = libnvme_next_subsystem (h, s)) { | |||
| 814 | if (strcmp(libnvme_subsystem_get_subsysnqn(s), p)) | |||
| 815 | continue; | |||
| 816 | libnvme_subsystem_for_each_ctrl(s, c)for (c = libnvme_subsystem_first_ctrl(s); c != ((void*)0); c = libnvme_subsystem_next_ctrl(s, c)) { | |||
| 817 | if (!libnvmf_disconnect_ctrl(c)) | |||
| 818 | i++; | |||
| 819 | } | |||
| 820 | } | |||
| 821 | } | |||
| 822 | } | |||
| 823 | printf("NQN:%s disconnected %d controller(s)\n", nqn, i); | |||
| 824 | } | |||
| 825 | ||||
| 826 | int fabrics_disconnect(const char *desc, int argc, char **argv) | |||
| 827 | { | |||
| 828 | const char *device = "nvme device handle"; | |||
| 829 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 830 | libnvme_ctrl_t c; | |||
| 831 | char *p; | |||
| 832 | int ret; | |||
| 833 | ||||
| 834 | struct config { | |||
| 835 | char *nqn; | |||
| 836 | char *device; | |||
| 837 | }; | |||
| 838 | ||||
| 839 | struct config cfg = { 0 }; | |||
| 840 | ||||
| 841 | NVME_ARGS(opts,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, nvmf_nqn , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , device, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 842 | OPT_STRING("nqn", 'n', "NAME", &cfg.nqn, nvmf_nqn),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, nvmf_nqn , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , device, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 843 | OPT_STRING("device", 'd', "DEV", &cfg.device, device))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, nvmf_nqn , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , device, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void *)0), 0, "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM" , CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 844 | ||||
| 845 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 846 | if (ret) | |||
| 847 | return ret; | |||
| 848 | ||||
| 849 | if (cfg.nqn && cfg.device) { | |||
| 850 | fprintf(stderrstderr, | |||
| 851 | "Both device name [--device | -d] and NQN [--nqn | -n] are specified\n"); | |||
| 852 | return -EINVAL22; | |||
| 853 | } | |||
| 854 | if (!cfg.nqn && !cfg.device) { | |||
| 855 | fprintf(stderrstderr, | |||
| 856 | "Neither device name [--device | -d] nor NQN [--nqn | -n] provided\n"); | |||
| 857 | return -EINVAL22; | |||
| 858 | } | |||
| 859 | ||||
| 860 | log_level = map_log_level(nvme_args.verbose, false0); | |||
| 861 | ||||
| 862 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 863 | if (!ctx) { | |||
| 864 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 865 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 866 | return -ENOMEM12; | |||
| 867 | } | |||
| 868 | libnvme_skip_namespaces(ctx); | |||
| 869 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 870 | if (ret < 0) { | |||
| 871 | /* | |||
| 872 | * Do not report an error when the modules are not | |||
| 873 | * loaded, this allows the user to unconditionally call | |||
| 874 | * disconnect. | |||
| 875 | */ | |||
| 876 | if (ret == -ENOENT2) | |||
| 877 | return 0; | |||
| 878 | ||||
| 879 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 880 | libnvme_strerror(-ret)); | |||
| 881 | return ret; | |||
| 882 | } | |||
| 883 | ||||
| 884 | if (cfg.nqn) | |||
| 885 | nvmf_disconnect_nqn(ctx, cfg.nqn); | |||
| 886 | ||||
| 887 | if (cfg.device) { | |||
| 888 | char *d; | |||
| 889 | ||||
| 890 | d = cfg.device; | |||
| 891 | while ((p = strsep(&d, ",")) != NULL((void*)0)) { | |||
| 892 | if (!strncmp(p, "/dev/", 5)) | |||
| 893 | p += 5; | |||
| 894 | c = lookup_nvme_ctrl(ctx, p); | |||
| 895 | if (!c) { | |||
| 896 | fprintf(stderrstderr, | |||
| 897 | "Did not find device %s\n", p); | |||
| 898 | return -ENODEV19; | |||
| 899 | } | |||
| 900 | ret = libnvmf_disconnect_ctrl(c); | |||
| 901 | if (ret) | |||
| 902 | fprintf(stderrstderr, | |||
| 903 | "Failed to disconnect %s: %s\n", | |||
| 904 | p, libnvme_strerror(-ret)); | |||
| 905 | } | |||
| 906 | } | |||
| 907 | ||||
| 908 | return 0; | |||
| 909 | } | |||
| 910 | ||||
| 911 | /* disconnect-all policy: should controller @c be torn down? */ | |||
| 912 | static bool_Bool disconnect_all_match(struct libnvme_global_ctx *ctx, | |||
| 913 | libnvme_ctrl_t c, const char *transport, | |||
| 914 | const char *owner, bool_Bool force) | |||
| 915 | { | |||
| 916 | if (transport && strcmp(transport, libnvme_ctrl_get_transport(c))) | |||
| 917 | return false0; | |||
| 918 | if (!libnvme_ctrl_is_transport_fabric(c)) | |||
| 919 | return false0; | |||
| 920 | if (force) | |||
| 921 | return true1; | |||
| 922 | ||||
| 923 | /* | |||
| 924 | * attr_equal() returns 0 only on an exact match; a read error (<0) | |||
| 925 | * compares as "not a match", so we never disconnect on error. | |||
| 926 | */ | |||
| 927 | return libnvmf_registry_attr_equal(ctx, libnvme_ctrl_get_name(c), | |||
| 928 | "owner", owner) == 0; | |||
| 929 | } | |||
| 930 | ||||
| 931 | int fabrics_disconnect_all(const char *desc, int argc, char **argv) | |||
| 932 | { | |||
| 933 | const char *owner_help = "disconnect only controllers owned by NAME"; | |||
| 934 | const char *force_help = "disconnect all controllers regardless of ownership"; | |||
| 935 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 936 | libnvme_host_t h; | |||
| 937 | libnvme_subsystem_t s; | |||
| 938 | libnvme_ctrl_t c; | |||
| 939 | int ret; | |||
| 940 | ||||
| 941 | struct config { | |||
| 942 | char *transport; | |||
| 943 | char *owner; | |||
| 944 | bool_Bool force; | |||
| 945 | }; | |||
| 946 | ||||
| 947 | struct config cfg = { 0 }; | |||
| 948 | ||||
| 949 | NVME_ARGS(opts,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &cfg.transport , 1, nvmf_tport, 0, }, {"owner", 0, "NAME", CFG_STRING, & cfg.owner, 1, owner_help, 0, }, {"force", 0, ((void*)0), CFG_FLAG , &cfg.force, 0, force_help, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR , ((void*)0), 0, "Global options", 0, ((void*)0)}, {"verbose" , 'v', "NUM", CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 950 | OPT_STRING("transport", 't', "STR", &cfg.transport, nvmf_tport),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &cfg.transport , 1, nvmf_tport, 0, }, {"owner", 0, "NAME", CFG_STRING, & cfg.owner, 1, owner_help, 0, }, {"force", 0, ((void*)0), CFG_FLAG , &cfg.force, 0, force_help, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR , ((void*)0), 0, "Global options", 0, ((void*)0)}, {"verbose" , 'v', "NUM", CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 951 | OPT_STRING("owner", 0, "NAME", &cfg.owner, owner_help),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &cfg.transport , 1, nvmf_tport, 0, }, {"owner", 0, "NAME", CFG_STRING, & cfg.owner, 1, owner_help, 0, }, {"force", 0, ((void*)0), CFG_FLAG , &cfg.force, 0, force_help, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR , ((void*)0), 0, "Global options", 0, ((void*)0)}, {"verbose" , 'v', "NUM", CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 952 | OPT_FLAG("force", 0, &cfg.force, force_help))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &cfg.transport , 1, nvmf_tport, 0, }, {"owner", 0, "NAME", CFG_STRING, & cfg.owner, 1, owner_help, 0, }, {"force", 0, ((void*)0), CFG_FLAG , &cfg.force, 0, force_help, 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR , ((void*)0), 0, "Global options", 0, ((void*)0)}, {"verbose" , 'v', "NUM", CFG_INCREMENT, &nvme_args.verbose, 0, "Increase output verbosity" , 0, }, {"output-format", 'o', "FMT", CFG_STRING, &nvme_args .output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 953 | ||||
| 954 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 955 | if (ret) | |||
| 956 | return ret; | |||
| 957 | ||||
| 958 | if (cfg.force && cfg.owner) { | |||
| 959 | fprintf(stderrstderr, "--force and --owner are mutually exclusive\n"); | |||
| 960 | return -EINVAL22; | |||
| 961 | } | |||
| 962 | ||||
| 963 | if ((cfg.force || cfg.owner) && isatty(STDIN_FILENO0)) { | |||
| 964 | char ans[8] = { 0 }; | |||
| 965 | ||||
| 966 | if (cfg.force) | |||
| 967 | fprintf(stderrstderr, | |||
| 968 | "WARNING: --force disconnects all NVMeoF controllers\n" | |||
| 969 | "regardless of ownership. Type 'yes' to confirm: "); | |||
| 970 | else | |||
| 971 | fprintf(stderrstderr, | |||
| 972 | "WARNING: --owner disconnects all NVMeoF controllers\n" | |||
| 973 | "owned by '%s'. Type 'yes' to confirm: ", | |||
| 974 | cfg.owner); | |||
| 975 | if (!fgets(ans, sizeof(ans), stdinstdin)) { | |||
| 976 | fprintf(stderrstderr, "Aborted.\n"); | |||
| 977 | return -EINVAL22; | |||
| 978 | } | |||
| 979 | ans[strcspn(ans, "\n")] = '\0'; | |||
| 980 | if (strcmp(ans, "yes") != 0) { | |||
| 981 | fprintf(stderrstderr, "Aborted.\n"); | |||
| 982 | return -EINVAL22; | |||
| 983 | } | |||
| 984 | } | |||
| 985 | ||||
| 986 | log_level = map_log_level(nvme_args.verbose, false0); | |||
| 987 | ||||
| 988 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 989 | if (!ctx) { | |||
| 990 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 991 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 992 | return -ENOMEM12; | |||
| 993 | } | |||
| 994 | libnvme_skip_namespaces(ctx); | |||
| 995 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 996 | if (ret < 0) { | |||
| 997 | /* | |||
| 998 | * Do not report an error when the modules are not | |||
| 999 | * loaded, this allows the user to unconditionally call | |||
| 1000 | * disconnect. | |||
| 1001 | */ | |||
| 1002 | if (ret == -ENOENT2) | |||
| 1003 | return 0; | |||
| 1004 | ||||
| 1005 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 1006 | libnvme_strerror(-ret)); | |||
| 1007 | return ret; | |||
| 1008 | } | |||
| 1009 | ||||
| 1010 | libnvme_for_each_host(ctx, h)for (h = libnvme_first_host(ctx); h != ((void*)0); h = libnvme_next_host (ctx, h)) { | |||
| 1011 | libnvme_for_each_subsystem(h, s)for (s = libnvme_first_subsystem(h); s != ((void*)0); s = libnvme_next_subsystem (h, s)) { | |||
| 1012 | libnvme_subsystem_for_each_ctrl(s, c)for (c = libnvme_subsystem_first_ctrl(s); c != ((void*)0); c = libnvme_subsystem_next_ctrl(s, c)) { | |||
| 1013 | if (!disconnect_all_match(ctx, c, cfg.transport, | |||
| 1014 | cfg.owner, cfg.force)) | |||
| 1015 | continue; | |||
| 1016 | if (libnvmf_disconnect_ctrl(c)) | |||
| 1017 | fprintf(stderrstderr, | |||
| 1018 | "failed to disconnect %s\n", | |||
| 1019 | libnvme_ctrl_get_name(c)); | |||
| 1020 | } | |||
| 1021 | } | |||
| 1022 | } | |||
| 1023 | ||||
| 1024 | return 0; | |||
| 1025 | } | |||
| 1026 | ||||
| 1027 | int fabrics_config(const char *desc, int argc, char **argv) | |||
| 1028 | { | |||
| 1029 | bool_Bool scan_tree = false0, modify_config = false0, update_config = false0; | |||
| 1030 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 1031 | char *config_file = PATH_NVMF_CONFIG"/usr/local/etc" "/nvme/config.json"; | |||
| 1032 | struct nvmf_args fa = { }; | |||
| 1033 | int ret; | |||
| 1034 | ||||
| 1035 | NVMF_ARGS(opts, fa,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1036 | OPT_STRING("config", 'J', "FILE", &config_file, nvmf_config_file),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1037 | OPT_FLAG("scan", 'R', &scan_tree, "Scan current NVMeoF topology"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1038 | OPT_FLAG("modify", 'M', &modify_config, "Modify JSON configuration file"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1039 | OPT_FLAG("dump", 'O', &dump_config, "Dump JSON configuration to stdout"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1040 | OPT_FLAG("update", 'U', &update_config, "Update JSON configuration file"))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"transport", 't', "STR", CFG_STRING, &fa.transport , 1, nvmf_tport, 0, }, {"nqn", 'n', "STR", CFG_STRING, &fa .subsysnqn, 1, nvmf_nqn, 0, }, {"traddr", 'a', "STR", CFG_STRING , &fa.traddr, 1, nvmf_traddr, 0, }, {"trsvcid", 's', "STR" , CFG_STRING, &fa.trsvcid, 1, nvmf_trsvcid, 0, }, {"host-traddr" , 'w', "STR", CFG_STRING, &fa.host_traddr, 1, nvmf_htraddr , 0, }, {"host-iface", 'f', "STR", CFG_STRING, &fa.host_iface , 1, nvmf_hiface, 0, }, {"hostnqn", 'q', "STR", CFG_STRING, & fa.hostnqn, 1, nvmf_hostnqn, 0, }, {"hostid", 'I', "STR", CFG_STRING , &fa.hostid, 1, nvmf_hostid, 0, }, {"dhchap-secret", 'S' , "STR", CFG_STRING, &fa.hostkey, 1, nvmf_hostkey, 0, }, { "dhchap-ctrl-secret", 'C', "STR", CFG_STRING, &fa.ctrlkey , 1, nvmf_ctrlkey, 0, }, {"keyring", 0, "STR", CFG_STRING, & fa.keyring, 1, nvmf_keyring, 0, }, {"tls-key", 0, "STR", CFG_STRING , &fa.tls_key, 1, nvmf_tls_key, 0, }, {"tls-key-identity" , 0, "STR", CFG_STRING, &fa.tls_key_identity, 1, nvmf_tls_key_identity , 0, }, {"nr-io-queues", 'i', "NUM", CFG_INT, &fa.nr_io_queues , 1, nvmf_nr_io_queues, 0, }, {"nr-write-queues", 'W', "NUM", CFG_INT, &fa.nr_write_queues, 1, nvmf_nr_write_queues, 0 , }, {"nr-poll-queues", 'P', "NUM", CFG_INT, &fa.nr_poll_queues , 1, nvmf_nr_poll_queues, 0, }, {"queue-size", 'Q', "NUM", CFG_INT , &fa.queue_size, 1, nvmf_queue_size, 0, }, {"keep-alive-tmo" , 'k', "NUM", CFG_INT, &fa.keep_alive_tmo, 1, nvmf_keep_alive_tmo , 0, }, {"reconnect-delay", 'c', "NUM", CFG_INT, &fa.reconnect_delay , 1, nvmf_reconnect_delay, 0, }, {"ctrl-loss-tmo", 'l', "NUM" , CFG_INT, &fa.ctrl_loss_tmo, 1, nvmf_ctrl_loss_tmo, 0, } , {"fast_io_fail_tmo", 'F', "NUM", CFG_INT, &fa.fast_io_fail_tmo , 1, nvmf_fast_io_fail_tmo, 0, }, {"tos", 'T', "NUM", CFG_INT , &fa.tos, 1, nvmf_tos, 0, }, {"tls_key", 0, "NUM", CFG_INT , &fa.tls_key_id, 1, nvmf_tls_key_legacy, 0, }, {"duplicate-connect" , 'D', ((void*)0), CFG_FLAG, &fa.duplicate_connect, 0, nvmf_dup_connect , 0, }, {"disable-sqflow", 0, ((void*)0), CFG_FLAG, &fa.disable_sqflow , 0, nvmf_disable_sqflow, 0, }, {"hdr-digest", 'g', ((void*)0 ), CFG_FLAG, &fa.hdr_digest, 0, nvmf_hdr_digest, 0, }, {"data-digest" , 'G', ((void*)0), CFG_FLAG, &fa.data_digest, 0, nvmf_data_digest , 0, }, {"tls", 0, ((void*)0), CFG_FLAG, &fa.tls, 0, nvmf_tls , 0, }, {"concat", 0, ((void*)0), CFG_FLAG, &fa.concat, 0 , nvmf_concat, 0, }, {"config", 'J', "FILE", CFG_STRING, & config_file, 1, nvmf_config_file, 0, }, {"scan", 'R', ((void* )0), CFG_FLAG, &scan_tree, 0, "Scan current NVMeoF topology" , 0, }, {"modify", 'M', ((void*)0), CFG_FLAG, &modify_config , 0, "Modify JSON configuration file", 0, }, {"dump", 'O', (( void*)0), CFG_FLAG, &dump_config, 0, "Dump JSON configuration to stdout" , 0, }, {"update", 'U', ((void*)0), CFG_FLAG, &update_config , 0, "Update JSON configuration file", 0, }, {"", 0, ((void*) 0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Global options", 0, ( (void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT, &nvme_args .verbose, 0, "Increase output verbosity", 0, }, {"output-format" , 'o', "FMT", CFG_STRING, &nvme_args.output_format, 1, "Output format: normal|json|binary|tabular" , 0, }, {"timeout", 0, "NUM", CFG_POSITIVE, &nvme_args.timeout , 1, "timeout value, in milliseconds", 0, }, {"dry-run", 0, ( (void*)0), CFG_FLAG, &nvme_args.dry_run, 0, "show command instead of executing" , 0, }, {"no-retries", 0, ((void*)0), CFG_FLAG, &nvme_args .no_retries, 0, "disable retry logic on errors", 0, }, {"no-ioctl-probing" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_ioctl_probing, 0 , "disable 64-bit IOCTL support probing", 0, }, {"output-format-version" , 0, "NUM", CFG_POSITIVE, &nvme_args.output_format_ver, 1 , "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args.verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 1041 | ||||
| 1042 | nvmf_default_args(&fa); | |||
| 1043 | ||||
| 1044 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 1045 | if (ret) | |||
| ||||
| 1046 | return ret; | |||
| 1047 | ||||
| 1048 | if (!strcmp(config_file, "none")) | |||
| 1049 | config_file = NULL((void*)0); | |||
| 1050 | ||||
| 1051 | log_level = map_log_level(nvme_args.verbose, quiet); | |||
| 1052 | ||||
| 1053 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 1054 | if (!ctx) { | |||
| 1055 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 1056 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 1057 | return -ENOMEM12; | |||
| 1058 | } | |||
| 1059 | ||||
| 1060 | libnvme_read_config(ctx, config_file); | |||
| 1061 | ||||
| 1062 | if (scan_tree) { | |||
| 1063 | libnvme_skip_namespaces(ctx); | |||
| 1064 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 1065 | if (ret < 0) { | |||
| 1066 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 1067 | libnvme_strerror(-ret)); | |||
| 1068 | return -ret; | |||
| 1069 | } | |||
| 1070 | } | |||
| 1071 | ||||
| 1072 | if (modify_config) { | |||
| 1073 | __cleanup_nvmf_context__attribute__((cleanup(cleanup_nvmf_context))) struct libnvmf_context *fctx = NULL((void*)0); | |||
| 1074 | ||||
| 1075 | if (!fa.subsysnqn) { | |||
| 1076 | fprintf(stderrstderr, | |||
| 1077 | "required argument [--nqn | -n] needed with --modify\n"); | |||
| 1078 | return -EINVAL22; | |||
| 1079 | } | |||
| 1080 | ||||
| 1081 | if (!fa.transport) { | |||
| 1082 | fprintf(stderrstderr, | |||
| 1083 | "required argument [--transport | -t] needed with --modify\n"); | |||
| 1084 | return -EINVAL22; | |||
| 1085 | } | |||
| 1086 | ||||
| 1087 | ret = create_common_context(ctx, persistent, &fa, NULL((void*)0), &fctx); | |||
| 1088 | if (ret) | |||
| 1089 | return ret; | |||
| 1090 | ||||
| 1091 | ret = libnvmf_config_modify(ctx, fctx); | |||
| 1092 | if (ret) { | |||
| 1093 | fprintf(stderrstderr, "failed to update config\n"); | |||
| 1094 | return ret; | |||
| 1095 | } | |||
| 1096 | } | |||
| 1097 | ||||
| 1098 | if (update_config) { | |||
| 1099 | __cleanup_fd__attribute__((cleanup(cleanup_fd))) int fd = -1; | |||
| 1100 | ||||
| 1101 | fd = open(config_file, O_RDONLY00, 0); | |||
| ||||
| 1102 | if (fd != -1) | |||
| 1103 | libnvme_dump_config(ctx, fd); | |||
| 1104 | } | |||
| 1105 | ||||
| 1106 | if (dump_config) | |||
| 1107 | libnvme_dump_config(ctx, STDOUT_FILENO1); | |||
| 1108 | ||||
| 1109 | return 0; | |||
| 1110 | } | |||
| 1111 | ||||
| 1112 | static int dim_operation(libnvme_ctrl_t c, enum nvmf_dim_tas tas, const char *name) | |||
| 1113 | { | |||
| 1114 | static const char * const task[] = { | |||
| 1115 | [NVMF_DIM_TAS_REGISTER] = "register", | |||
| 1116 | [NVMF_DIM_TAS_DEREGISTER] = "deregister", | |||
| 1117 | }; | |||
| 1118 | const char *t; | |||
| 1119 | int status; | |||
| 1120 | __u32 result; | |||
| 1121 | ||||
| 1122 | t = (tas > NVMF_DIM_TAS_DEREGISTER || !task[tas]) ? "reserved" : task[tas]; | |||
| 1123 | status = libnvmf_register_ctrl(c, tas, &result); | |||
| 1124 | if (status == NVME_SC_SUCCESS) { | |||
| 1125 | printf("%s DIM %s command success\n", name, t); | |||
| 1126 | } else if (status < NVME_SC_SUCCESS) { | |||
| 1127 | fprintf(stderrstderr, "%s DIM %s command error. Status:0x%04x - %s\n", | |||
| 1128 | name, t, status, libnvme_status_to_string(status, false0)); | |||
| 1129 | } else { | |||
| 1130 | fprintf(stderrstderr, "%s DIM %s command error. Result:0x%04x, Status:0x%04x - %s\n", | |||
| 1131 | name, t, result, status, libnvme_status_to_string(status, false0)); | |||
| 1132 | } | |||
| 1133 | ||||
| 1134 | return libnvme_status_to_errno(status, true1); | |||
| 1135 | } | |||
| 1136 | ||||
| 1137 | int fabrics_dim(const char *desc, int argc, char **argv) | |||
| 1138 | { | |||
| 1139 | __cleanup_nvme_global_ctx__attribute__((cleanup(cleanup_nvme_global_ctx))) struct libnvme_global_ctx *ctx = NULL((void*)0); | |||
| 1140 | enum nvmf_dim_tas tas; | |||
| 1141 | libnvme_ctrl_t c; | |||
| 1142 | char *p; | |||
| 1143 | int ret; | |||
| 1144 | ||||
| 1145 | struct { | |||
| 1146 | char *nqn; | |||
| 1147 | char *device; | |||
| 1148 | char *tas; | |||
| 1149 | } cfg = { 0 }; | |||
| 1150 | ||||
| 1151 | NVME_ARGS(opts,struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, "Comma-separated list of DC nqn" , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , "Comma-separated list of DC nvme device handle.", 0, }, {"task" , 't', "TASK", CFG_STRING, &cfg.tas, 1, "[register|deregister]" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1152 | OPT_STRING("nqn", 'n', "NAME", &cfg.nqn, "Comma-separated list of DC nqn"),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, "Comma-separated list of DC nqn" , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , "Comma-separated list of DC nvme device handle.", 0, }, {"task" , 't', "TASK", CFG_STRING, &cfg.tas, 1, "[register|deregister]" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1153 | OPT_STRING("device", 'd', "DEV", &cfg.device, "Comma-separated list of DC nvme device handle."),struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, "Comma-separated list of DC nqn" , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , "Comma-separated list of DC nvme device handle.", 0, }, {"task" , 't', "TASK", CFG_STRING, &cfg.tas, 1, "[register|deregister]" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } } | |||
| 1154 | OPT_STRING("task", 't', "TASK", &cfg.tas, "[register|deregister]"))struct argconfig_commandline_options opts[] = { {"", 0, ((void *)0), CFG_GROUP_SEPARATOR, ((void*)0), 0, "Options", 0, ((void *)0)}, {"nqn", 'n', "NAME", CFG_STRING, &cfg.nqn, 1, "Comma-separated list of DC nqn" , 0, }, {"device", 'd', "DEV", CFG_STRING, &cfg.device, 1 , "Comma-separated list of DC nvme device handle.", 0, }, {"task" , 't', "TASK", CFG_STRING, &cfg.tas, 1, "[register|deregister]" , 0, }, {"", 0, ((void*)0), CFG_GROUP_SEPARATOR, ((void*)0), 0 , "Global options", 0, ((void*)0)}, {"verbose", 'v', "NUM", CFG_INCREMENT , &nvme_args.verbose, 0, "Increase output verbosity", 0, } , {"output-format", 'o', "FMT", CFG_STRING, &nvme_args.output_format , 1, "Output format: normal|json|binary|tabular", 0, }, {"timeout" , 0, "NUM", CFG_POSITIVE, &nvme_args.timeout, 1, "timeout value, in milliseconds" , 0, }, {"dry-run", 0, ((void*)0), CFG_FLAG, &nvme_args.dry_run , 0, "show command instead of executing", 0, }, {"no-retries" , 0, ((void*)0), CFG_FLAG, &nvme_args.no_retries, 0, "disable retry logic on errors" , 0, }, {"no-ioctl-probing", 0, ((void*)0), CFG_FLAG, &nvme_args .no_ioctl_probing, 0, "disable 64-bit IOCTL support probing", 0, }, {"output-format-version", 0, "NUM", CFG_POSITIVE, & nvme_args.output_format_ver, 1, "output format version: 1|2", 0, }, {"human-readable", 'H', ((void*)0), CFG_FLAG, &nvme_args .verbose, 0, ((void*)0), 0, ((void*)0), 1}, { ((void*)0) } }; | |||
| 1155 | ||||
| 1156 | ret = argconfig_parse(argc, argv, desc, opts); | |||
| 1157 | if (ret) | |||
| 1158 | return ret; | |||
| 1159 | ||||
| 1160 | if (!cfg.nqn && !cfg.device) { | |||
| 1161 | fprintf(stderrstderr, | |||
| 1162 | "Neither device name [--device | -d] nor NQN [--nqn | -n] provided\n"); | |||
| 1163 | return -EINVAL22; | |||
| 1164 | } | |||
| 1165 | ||||
| 1166 | if (!cfg.tas) { | |||
| 1167 | fprintf(stderrstderr, | |||
| 1168 | "Task [--task | -t] must be specified\n"); | |||
| 1169 | return -EINVAL22; | |||
| 1170 | } | |||
| 1171 | ||||
| 1172 | /* Allow partial name (e.g. "reg" for "register" */ | |||
| 1173 | if (strstarts("register", cfg.tas)(strncmp(("register"),(cfg.tas),strlen(cfg.tas)) == 0)) { | |||
| 1174 | tas = NVMF_DIM_TAS_REGISTER; | |||
| 1175 | } else if (strstarts("deregister", cfg.tas)(strncmp(("deregister"),(cfg.tas),strlen(cfg.tas)) == 0)) { | |||
| 1176 | tas = NVMF_DIM_TAS_DEREGISTER; | |||
| 1177 | } else { | |||
| 1178 | fprintf(stderrstderr, "Invalid --task: %s\n", cfg.tas); | |||
| 1179 | return -EINVAL22; | |||
| 1180 | } | |||
| 1181 | ||||
| 1182 | log_level = map_log_level(nvme_args.verbose, false0); | |||
| 1183 | ||||
| 1184 | ctx = libnvme_create_global_ctx(stderrstderr, log_level); | |||
| 1185 | if (!ctx) { | |||
| 1186 | fprintf(stderrstderr, "Failed to create topology root: %s\n", | |||
| 1187 | libnvme_strerror(errno(*__errno_location ()))); | |||
| 1188 | return -ENODEV19; | |||
| 1189 | } | |||
| 1190 | libnvme_skip_namespaces(ctx); | |||
| 1191 | ret = libnvme_scan_topology(ctx, NULL((void*)0), NULL((void*)0)); | |||
| 1192 | if (ret < 0) { | |||
| 1193 | fprintf(stderrstderr, "Failed to scan topology: %s\n", | |||
| 1194 | libnvme_strerror(-ret)); | |||
| 1195 | return ret; | |||
| 1196 | } | |||
| 1197 | ||||
| 1198 | if (cfg.nqn) { | |||
| 1199 | libnvme_host_t h; | |||
| 1200 | libnvme_subsystem_t s; | |||
| 1201 | char *n = cfg.nqn; | |||
| 1202 | ||||
| 1203 | while ((p = strsep(&n, ",")) != NULL((void*)0)) { | |||
| 1204 | if (!strlen(p)) | |||
| 1205 | continue; | |||
| 1206 | libnvme_for_each_host(ctx, h)for (h = libnvme_first_host(ctx); h != ((void*)0); h = libnvme_next_host (ctx, h)) { | |||
| 1207 | libnvme_for_each_subsystem(h, s)for (s = libnvme_first_subsystem(h); s != ((void*)0); s = libnvme_next_subsystem (h, s)) { | |||
| 1208 | if (strcmp(libnvme_subsystem_get_subsysnqn(s), p)) | |||
| 1209 | continue; | |||
| 1210 | libnvme_subsystem_for_each_ctrl(s, c)for (c = libnvme_subsystem_first_ctrl(s); c != ((void*)0); c = libnvme_subsystem_next_ctrl(s, c)) | |||
| 1211 | ret = dim_operation(c, tas, p); | |||
| 1212 | } | |||
| 1213 | } | |||
| 1214 | } | |||
| 1215 | } | |||
| 1216 | ||||
| 1217 | if (cfg.device) { | |||
| 1218 | char *d = cfg.device; | |||
| 1219 | ||||
| 1220 | while ((p = strsep(&d, ",")) != NULL((void*)0)) { | |||
| 1221 | if (!strncmp(p, "/dev/", 5)) | |||
| 1222 | p += 5; | |||
| 1223 | ret = libnvme_scan_ctrl(ctx, p, &c); | |||
| 1224 | if (ret) { | |||
| 1225 | fprintf(stderrstderr, | |||
| 1226 | "Did not find device %s: %s\n", | |||
| 1227 | p, libnvme_strerror(ret)); | |||
| 1228 | return ret; | |||
| 1229 | } | |||
| 1230 | ret = dim_operation(c, tas, p); | |||
| 1231 | } | |||
| 1232 | } | |||
| 1233 | ||||
| 1234 | return ret; | |||
| 1235 | } |