Lines Matching refs:help

37                         help='RPC domain socket path or IP address', default='/var/tmp/spdk.sock')
39 help='RPC port number (if server_addr is IP address)',
42 help='Timeout as a floating point number expressed in seconds waiting for response. Default: 60.0',
45 help='Retry connecting to the RPC server N times with 0.2s interval. Default: 0',
48 help='Set verbose mode to INFO', default="ERROR")
50 help="""Set verbose level. """)
51 parser.add_argument('--dry-run', dest='dry_run', action='store_true', help="Display request and exit")
53 parser.add_argument('--go-client', dest='go_client', action='store_true', help="Use Go client")
56 help="Start listening on stdin, parse each line as a regular rpc.py execution and create \
63 parser.add_argument('--plugin', dest='rpc_plugin', help='Module name of plugin with additional RPC commands')
64 subparsers = parser.add_subparsers(help='RPC methods', dest='called_rpc_name', metavar='')
69 p = subparsers.add_parser('framework_start_init', help='Start initialization of subsystems')
75 p = subparsers.add_parser('framework_wait_init', help='Block until subsystems have been initialized')
83 p = subparsers.add_parser('rpc_get_methods', help='Get list of supported RPC methods')
84 p.add_argument('-c', '--current', help='Get list of RPC methods only callable in the current state.', action='store_true')
85 p.add_argument('-i', '--include-aliases', help='include RPC aliases', action='store_true')
91 p = subparsers.add_parser('spdk_get_version', help='Get SPDK version')
100 p = subparsers.add_parser('save_config', help="""Write current (live) configuration of SPDK subsystems and targets to stdout.
102 p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. Default indent level is 2.
104 p.add_argument('-s', '--subsystems', help="""Comma-separated list of subsystems (and their dependencies) to save""")
111 p = subparsers.add_parser('load_config', help="""Configure SPDK subsystems and targets using JSON RPC.""")
112 p.add_argument('-i', '--include-aliases', help='include RPC aliases', action='store_true')
113 p.add_argument('-j', '--json-conf', help='Valid JSON configuration', default=sys.stdin)
122 p = subparsers.add_parser('save_subsystem_config', help="""Write current (live) configuration of SPDK subsystem to stdout.
124 p.add_argument('-i', '--indent', help="""Indent level. Value less than 0 mean compact mode. Default indent level is 2.
126 p.add_argument('-n', '--name', help='Name of subsystem', required=True)
133 p = subparsers.add_parser('load_subsystem_config', help="""Configure SPDK subsystem using JSON RPC.""")
134 p.add_argument('-j', '--json-conf', help='Valid JSON configuration', default=sys.stdin)
142 p = subparsers.add_parser('spdk_kill_instance', help='Send signal to instance')
143 p.add_argument('sig_name', help='signal will be sent to server.')
156 help='Control whether the context switch monitor is enabled')
157 p.add_argument('-e', '--enable', action='store_true', help='Enable context switch monitoring')
158 p.add_argument('-d', '--disable', action='store_true', help='Disable context switch monitoring')
165 'framework_get_reactors', help='Display list of all reactors')
178 'framework_set_scheduler', help='Select thread scheduler that will be activated and its period (experimental)')
179 p.add_argument('name', help="Name of a scheduler")
180 p.add_argument('-p', '--period', help="Scheduler period in microseconds", type=int)
181 p.add_argument('--load-limit', help="Scheduler load limit. Reserved for dynamic scheduler", type=int)
182 p.add_argument('--core-limit', help="Scheduler core limit. Reserved for dynamic scheduler", type=int)
183 p.add_argument('--core-busy', help="Scheduler core busy limit. Reserved for dynamic scheduler", type=int)
184 p.add_argument('--mappings', help="Comma-separated list of thread:core mappings. Reserved for static scheduler")
191 'framework_get_scheduler', help='Display currently set scheduler and its properties.')
198 'framework_get_governor', help='Display currently set governor and the available, set CPU frequencies.')
205 p = subparsers.add_parser('scheduler_set_options', help='Set scheduler options')
206 p.add_argument('-i', '--isolated-core-mask', help="Mask of CPU cores to isolate from scheduling change", type=str)
207 p.add_argument('-s', '--scheduling-core', help="Scheduler scheduling core. Idle threads will move to scheduling core."
215 help='Disable CPU core lock files.')
222 help='Enable CPU core lock files.')
235 help="""Set options of bdev subsystem""")
236 p.add_argument('-p', '--bdev-io-pool-size', help='Number of bdev_io structures in shared buffer pool', type=int)
237 p.add_argument('-c', '--bdev-io-cache-size', help='Maximum number of bdev_io structures cached per thread', type=int)
239 group.add_argument('-e', '--enable-auto-examine', dest='bdev_auto_examine', help='Allow to auto examine', action='store_true')
240 group.add_argument('-d', '--disable-auto-examine', dest='bdev_auto_examine', help='Not allow to auto examine', action='store_false')
241 p.add_argument('--iobuf-small-cache-size', help='Size of the small iobuf per thread cache', type=int)
242 p.add_argument('--iobuf-large-cache-size', help='Size of the large iobuf per thread cache', type=int)
251 help="""examine a bdev if it exists, or will examine it after it is created""")
252 p.add_argument('-b', '--name', help='Name or alias of the bdev')
259 help="""Report when all bdevs have been examined""")
270 p = subparsers.add_parser('bdev_compress_create', help='Add a compress vbdev')
271 p.add_argument('-b', '--base-bdev-name', help="Name of the base bdev", required=True)
272 p.add_argument('-p', '--pm-path', help="Path to persistent memory", required=True)
273 p.add_argument('-l', '--lb-size', help="Compressed vol logical block size (optional, if used must be 512 or 4096)", type=int)
274 p.add_argument('-c', '--comp-algo', help='Compression algorithm, (deflate, lz4). Default is deflate')
276 help="""Compression algorithm level.
286 p = subparsers.add_parser('bdev_compress_delete', help='Delete a compress disk')
287 p.add_argument('name', help='compress bdev name')
294 'bdev_compress_get_orphans', help='Display list of orphaned compress bdevs.')
295 p.add_argument('-b', '--name', help="Name of a comp bdev. Example: COMP_Nvme0n1")
307 p = subparsers.add_parser('bdev_crypto_create', help='Add a crypto vbdev')
308 p.add_argument('base_bdev_name', help="Name of the base bdev")
309 p.add_argument('name', help="Name of the crypto vbdev")
310 p.add_argument('-p', '--crypto-pmd', help="Name of the crypto device driver. Obsolete, see dpdk_cryptodev_set_driver")
311 p.add_argument('-k', '--key', help="Key. Obsolete, see accel_crypto_key_create")
312 p.add_argument('-c', '--cipher', help="cipher to use. Obsolete, see accel_crypto_key_create")
313 p.add_argument('-k2', '--key2', help="2nd key for cipher AES_XTS. Obsolete, see accel_crypto_key_create", default=None)
314 p.add_argument('-n', '--key-name', help="Key name to use, see accel_crypto_key_create")
321 p = subparsers.add_parser('bdev_crypto_delete', help='Delete a crypto disk')
322 p.add_argument('name', help='crypto bdev name')
332 p = subparsers.add_parser('bdev_ocf_create', help='Add an OCF block device')
333 p.add_argument('name', help='Name of resulting OCF bdev')
334 p.add_argument('mode', help='OCF cache mode', choices=['wb', 'wt', 'pt', 'wa', 'wi', 'wo'])
337 help='OCF cache line size. The unit is KiB',
341 p.add_argument('cache_bdev_name', help='Name of underlying cache bdev')
342 p.add_argument('core_bdev_name', help='Name of underlying core bdev')
349 p = subparsers.add_parser('bdev_ocf_delete', help='Delete an OCF block device')
350 p.add_argument('name', help='Name of OCF bdev')
356 p = subparsers.add_parser('bdev_ocf_get_stats', help='Get statistics of chosen OCF block device')
357 p.add_argument('name', help='Name of OCF bdev')
363 p = subparsers.add_parser('bdev_ocf_reset_stats', help='Reset statistics of chosen OCF block device')
364 p.add_argument('name', help='Name of OCF bdev')
370 p = subparsers.add_parser('bdev_ocf_get_bdevs', help='Get list of OCF devices including unregistered ones')
371 p.add_argument('name', nargs='?', help='name of OCF vbdev or name of cache device or name of core device (optional)')
379 help='Set cache mode of OCF block device')
380 p.add_argument('name', help='Name of OCF bdev')
381 p.add_argument('mode', help='OCF cache mode', choices=['wb', 'wt', 'pt', 'wa', 'wi', 'wo'])
391 help='Set sequential cutoff parameters on all cores for the given OCF cache device')
392 p.add_argument('name', help='Name of OCF cache bdev')
394 help='Activation threshold [KiB]')
396 help='Promotion request count')
398 help='Sequential cutoff policy')
404 help='Start flushing OCF cache device')
405 p.add_argument('name', help='Name of OCF bdev')
411 help='Get flush status of OCF cache device')
412 p.add_argument('name', help='Name of OCF bdev')
429 p = subparsers.add_parser('bdev_malloc_create', help='Create a bdev with malloc backend')
430 p.add_argument('-b', '--name', help="Name of the bdev")
431 p.add_argument('-u', '--uuid', help="UUID of the bdev (optional)")
433 'total_size', help='Size of malloc bdev in MB (float > 0)', type=float)
434 p.add_argument('block_size', help='Data block size for this bdev', type=int)
435 p.add_argument('-p', '--physical-block-size', help='Physical block size for this bdev.', type=int)
436 p.add_argument('-o', '--optimal-io-boundary', help="""Split on optimal IO boundary, in number of
439 help='Metadata size for this bdev (0, 8, 16, 32, 64, or 128). Default is 0.')
441 help='Metadata location, interleaved if set, and separated if omitted.')
443 help='Protection information type. Parameter --md-size needs'
446 help='Protection information is in the first 8 bytes of metadata. Default=false.')
448 help='Protection infromation format. Parameter --dif-type needs to be set together.'
456 p = subparsers.add_parser('bdev_malloc_delete', help='Delete a malloc disk')
457 p.add_argument('name', help='malloc bdev name')
476 p = subparsers.add_parser('bdev_null_create', help='Add a bdev with null backend')
477 p.add_argument('name', help='Block device name')
478 p.add_argument('-u', '--uuid', help='UUID of the bdev (optional)')
479 p.add_argument('total_size', help='Size of null bdev in MB (int > 0). Includes only data blocks.', type=int)
480 p.add_argument('block_size', help='Data block size for this bdev.', type=int)
481 p.add_argument('-p', '--physical-block-size', help='Physical block size for this bdev.', type=int)
483 help='Metadata size for this bdev. Default=0.')
485 help='Protection information type. Parameter --md-size needs'
488 help='Protection information is in the first 8 bytes of metadata. Default=false.')
490 help='Protection infromation format. Parameter --dif-type needs to be set together.'
498 p = subparsers.add_parser('bdev_null_delete', help='Delete a null bdev')
499 p.add_argument('name', help='null bdev name')
508 help='Resize a null bdev')
509 p.add_argument('name', help='null bdev name')
510 p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
522 p = subparsers.add_parser('bdev_aio_create', help='Add a bdev with aio backend')
523 p.add_argument('filename', help='Path to device or file (ex: /dev/sda)')
524 p.add_argument('name', help='Block device name')
525 p.add_argument('block_size', help='Block size for this bdev', type=int, nargs='?')
526 p.add_argument("-r", "--readonly", action='store_true', help='Set this bdev as read-only')
527 p.add_argument("--fallocate", action='store_true', help='Support unmap/writezeros by fallocate')
528 p.add_argument('-u', '--uuid', help="UUID of the bdev (optional)")
535 p = subparsers.add_parser('bdev_aio_rescan', help='Rescan a bdev size with aio backend')
536 p.add_argument('name', help='Block device name')
543 p = subparsers.add_parser('bdev_aio_delete', help='Delete an aio disk')
544 p.add_argument('name', help='aio bdev name')
554 p = subparsers.add_parser('bdev_uring_create', help='Create a bdev with io_uring backend')
555 p.add_argument('filename', help='Path to device or file (ex: /dev/nvme0n1)')
556 p.add_argument('name', help='bdev name')
557 p.add_argument('block_size', help='Block size for this bdev', type=int, nargs='?')
558 p.add_argument('-u', '--uuid', help="UUID of the bdev")
565 p = subparsers.add_parser('bdev_uring_rescan', help='Rescan a bdev size with uring backend')
566 p.add_argument('name', help='Block device name')
573 p = subparsers.add_parser('bdev_uring_delete', help='Delete a uring bdev')
574 p.add_argument('name', help='uring bdev name')
584 p = subparsers.add_parser('bdev_xnvme_create', help='Create a bdev with xNVMe backend')
585 p.add_argument('filename', help='Path to device or file (ex: /dev/nvme0n1)')
586 p.add_argument('name', help='name of xNVMe bdev to create')
587 p.add_argument('io_mechanism', help='IO mechanism to use (ex: libaio, io_uring, io_uring_cmd, etc.)')
588 p.add_argument('-c', '--conserve-cpu', action='store_true', help='Whether or not to conserve CPU when polling')
595 p = subparsers.add_parser('bdev_xnvme_delete', help='Delete a xNVMe bdev')
596 p.add_argument('name', help='xNVMe bdev name')
633 help='Set options for the bdev nvme type. This is startup command.')
635 help="Action to take on command time out. Valid values are: none, reset, abort")
637 help="Timeout for each command, in microseconds. If 0, don't track timeouts.", type=int)
639 help="Timeout for each admin command, in microseconds. If 0, treat same as io timeouts.", type=int)
641 help="Keep alive timeout period in millisecond. If 0, disable keep-alive.", type=int)
643 help='the value is expressed as a power of two', type=int)
645 help='the maximum number of commands that the controller may launch at one time from a low priority queue', type=int)
647 help='the maximum number of commands that the controller may launch at one time from a medium priority queue', type=int)
649 help='the maximum number of commands that the controller may launch at one time from a high priority queue', type=int)
651 help='How often the admin queue is polled for asynchronous events', type=int)
653 help='How often to poll I/O queues for completions', type=int)
655 help='The number of requests allocated for each NVMe I/O queue. Default: 512', type=int)
657 help='Disable delaying NVMe command submission, i.e. no batching of multiple commands',
660 help='the number of attempts per I/O in the transport layer when an I/O fails.', type=int)
662 help='the number of attempts per I/O in the bdev layer when an I/O fails. -1 means infinite retries.', type=int)
664 help="""Time to wait ack until packet retransmission for RDMA or until closes connection for TCP.
667 help="""Time to wait until ctrlr is reconnected before deleting ctrlr.
675 help="""Time to delay a reconnect retry.
683 help="""Time to wait until ctrlr is reconnected before failing I/O to ctrlr.
690 help="""Disable automatic failback. bdev_nvme_set_preferred_path can be used to do manual failback.
694 help="""Enable generation of unique identifiers for NVMe bdevs only if they do
698 help="""IPv4 Type of Service value. Only applicable for RDMA transports.
700 p.add_argument('-m', '--nvme-error-stat', help="Enable collecting NVMe error counts.", action='store_true')
702 help='Set the size of a shared rdma receive queue. Default: 0 (disabled)', type=int)
704 help="""Enable collecting I/O path stat of each io path.""",
707 help='''Allow NVMe bdevs to advertise support for accel sequences if the
710 help='The maximum size of a rdma completion queue. Default: 0 (unlimited)', type=int)
712 help='Time to wait for RDMA CM event. Only applicable for RDMA transports.', type=int)
713 p.add_argument('--dhchap-digests', help='Comma-separated list of allowed DH-HMAC-CHAP digests',
715 p.add_argument('--dhchap-dhgroups', help='Comma-separated list of allowed DH-HMAC-CHAP DH groups',
718 help='''Enable scatter-gather RDMA Memory Region per IO if supported by the system.''',
721 help='''Disable scatter-gather RDMA Memory Region per IO.''',
729 p = subparsers.add_parser('bdev_nvme_set_hotplug', help='Set hotplug options for bdev nvme type.')
730 p.add_argument('-d', '--disable', dest='enable', default=False, action='store_false', help="Disable hotplug (default)")
731 p.add_argument('-e', '--enable', dest='enable', action='store_true', help="Enable hotplug")
733 help='How often the hotplug is processed for insert and remove events', type=int)
764 p = subparsers.add_parser('bdev_nvme_attach_controller', help='Add bdevs with nvme backend')
765 p.add_argument('-b', '--name', help="Name of the NVMe controller, prefix for each bdev name", required=True)
767 help='NVMe-oF target trtype: e.g., rdma, pcie', required=True)
769 help='NVMe-oF target address: e.g., an ip address or BDF', required=True)
771 help='NVMe-oF target adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
773 help='NVMe-oF target trsvcid: e.g., a port number')
775 help='NVMe-oF connection priority: e.g., a priority number')
776 p.add_argument('-n', '--subnqn', help='NVMe-oF target subnqn')
777 p.add_argument('-q', '--hostnqn', help='NVMe-oF host subnqn')
779 help='NVMe-oF host address: e.g., an ip address')
781 help='NVMe-oF host svcid: e.g., a port number')
783 help='Enable checking of PI reference tag for I/O processing.', action='store_true')
785 help='Enable checking of PI guard for I/O processing.', action='store_true')
787 help='Enable TCP header digest.', action='store_true')
789 help='Enable TCP data digest.', action='store_true')
790 p.add_argument('--fabrics-timeout', type=int, help='Fabrics connect timeout in microseconds',
792 p.add_argument('-x', '--multipath', help='Set multipath behavior (disable, failover, multipath)')
793 p.add_argument('--num-io-queues', type=int, help='Set the number of IO queues to request during initialization.')
795 help="""Time to wait until ctrlr is reconnected before deleting ctrlr.
802 help="""Time to delay a reconnect retry.
809 help="""Time to wait until ctrlr is reconnected before failing I/O to ctrlr.
815 help="""Set PSK and enable TCP SSL socket implementation. The PSK can either be a
819 help='The size of the name array for newly created bdevs. Default is 128',)
820 p.add_argument('--dhchap-key', help='DH-HMAC-CHAP key name')
821 p.add_argument('--dhchap-ctrlr-key', help='DH-HMAC-CHAP controller key name')
822 p.add_argument('-U', '--allow-unrecognized-csi', help="""Allow attaching namespaces with unrecognized command set identifiers.
832 'bdev_nvme_get_controllers', help='Display current NVMe controllers list or required NVMe controller')
833 p.add_argument('-n', '--name', help="Name of the NVMe controller. Example: Nvme0")
848 help='Detach an NVMe controller and delete any associated bdevs')
849 p.add_argument('name', help="Name of the controller")
851 help='NVMe-oF target trtype: e.g., rdma, pcie')
853 help='NVMe-oF target address: e.g., an ip address or BDF')
855 help='NVMe-oF target adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
857 help='NVMe-oF target trsvcid: e.g., a port number')
858 p.add_argument('-n', '--subnqn', help='NVMe-oF target subnqn')
860 help='NVMe-oF host address: e.g., an ip address')
862 help='NVMe-oF host svcid: e.g., a port number')
871 help='Reset an NVMe controller or all NVMe controllers in an NVMe bdev controller')
872 p.add_argument('name', help="Name of the NVMe controller")
873 p.add_argument('-c', '--cntlid', help="NVMe controller ID", type=int)
882 help='Enable an NVMe controller or all NVMe controllers in an NVMe bdev controller')
883 p.add_argument('name', help="Name of the NVMe controller")
884 p.add_argument('-c', '--cntlid', help="NVMe controller ID", type=int)
893 help='Disable an NVMe controller or all NVMe controllers in an NVMe bdev controller')
894 p.add_argument('name', help="Name of the NVMe controller")
895 p.add_argument('-c', '--cntlid', help="NVMe controller ID", type=int)
912 p = subparsers.add_parser('bdev_nvme_start_discovery', help='Start automatic discovery')
913 p.add_argument('-b', '--name', help="Name of the NVMe controller prefix for each bdev name", required=True)
915 help='NVMe-oF target trtype: e.g., rdma, pcie', required=True)
917 help='NVMe-oF target address: e.g., an ip address or BDF', required=True)
919 help='NVMe-oF target adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
921 help='NVMe-oF target trsvcid: e.g., a port number')
922 p.add_argument('-q', '--hostnqn', help='NVMe-oF host subnqn')
924 help='Do not complete RPC until all discovered NVM subsystems are attached')
926 help="""Time to wait until the discovery and all discovered NVM subsystems
930 help="""Time to wait until ctrlr is reconnected before deleting ctrlr.
937 help="""Time to delay a reconnect retry.
944 help="""Time to wait until ctrlr is reconnected before failing I/O to ctrlr.
954 p = subparsers.add_parser('bdev_nvme_stop_discovery', help='Stop automatic discovery')
955 p.add_argument('-b', '--name', help="Name of the service to stop", required=True)
961 p = subparsers.add_parser('bdev_nvme_get_discovery_info', help='Get information about the automatic discovery')
967 p = subparsers.add_parser('bdev_nvme_get_io_paths', help='Display active I/O paths')
968 p.add_argument('-n', '--name', help="Name of the NVMe bdev")
977 help="""Set the preferred I/O path for an NVMe bdev when in multipath mode""")
978 p.add_argument('-b', '--name', help='Name of the NVMe bdev', required=True)
979 p.add_argument('-c', '--cntlid', help='NVMe-oF controller ID', type=int, required=True)
990 help="""Set multipath policy of the NVMe bdev""")
991 p.add_argument('-b', '--name', help='Name of the NVMe bdev', required=True)
992 p.add_argument('-p', '--policy', help='Multipath policy (active_passive or active_active)', required=True)
993 p.add_argument('-s', '--selector', help='Multipath selector (round_robin, queue_depth)')
995 help='Number of IO to route to a path before switching to another for round-robin',
1004 help="""Display current I/O statistics of all the IO paths of the blockdev. It can be
1006 p.add_argument('-b', '--name', help="Name of the Blockdev. Example: NVMe0n1", required=True)
1014 help='Register CUSE devices on NVMe controller')
1016 help='Name of the NVMe controller. Example: Nvme0', required=True)
1024 help='Unregister CUSE devices on NVMe controller')
1026 help='Name of the NVMe controller. Example: Nvme0', required=True)
1033 help='Set DH-HMAC-CHAP keys and force (re)authentication on all '
1035 p.add_argument('name', help='Name of the NVMe controller')
1036 p.add_argument('--dhchap-key', help='DH-HMAC-CHAP key name')
1037 p.add_argument('--dhchap-ctrlr-key', help='DH-HMAC-CHAP controller key name')
1048 help='Create virtual zone namespace device with block device backend')
1049 p.add_argument('-b', '--name', help="Name of the zone device", required=True)
1050 p.add_argument('-n', '--base-bdev', help='Name of underlying, non-zoned bdev', required=True)
1051 p.add_argument('-z', '--zone-capacity', help='Surfaced zone capacity in blocks', type=int, required=True)
1052 p.add_argument('-o', '--optimal-open-zones', help='Number of zones required to reach optimal write speed', type=int, required=True)
1059 p = subparsers.add_parser('bdev_zone_block_delete', help='Delete a virtual zone namespace device')
1060 p.add_argument('name', help='Virtual zone bdev name')
1081 help='Add a Rados cluster with ceph rbd backend')
1082 p.add_argument('name', help="Name of the Rados cluster only known to rbd bdev")
1083 p.add_argument('--user', help="Ceph user name (i.e. admin, not client.admin)")
1085 help="adds a key=value configuration option for rados_conf_set (default: rely on config file)")
1086 p.add_argument('--config-file', help="The file path of the Rados configuration file")
1087 p.add_argument('--key-file', help="The file path of the Rados keyring file")
1088 p.add_argument('--core-mask', help="Set core mask for librbd IO context threads")
1095 help='Unregister a Rados cluster object')
1096 p.add_argument('name', help='Name of the Rados Cluster only known to rbd bdev')
1103 help='Display registered Rados Cluster names and related info')
1104 p.add_argument('-b', '--name', help="Name of the registered Rados Cluster Name. Example: Cluster1")
1126 p = subparsers.add_parser('bdev_rbd_create', help='Add a bdev with ceph rbd backend')
1127 p.add_argument('-b', '--name', help="Name of the bdev")
1128 p.add_argument('--user', help="Ceph user name (i.e. admin, not client.admin)")
1130 help="adds a key=value configuration option for rados_conf_set (default: rely on config file)")
1131 p.add_argument('pool_name', help='rbd pool name')
1132 p.add_argument('rbd_name', help='rbd image name')
1133 p.add_argument('block_size', help='rbd block size', type=int)
1134 p.add_argument('-c', '--cluster-name', help="cluster name to identify the Rados cluster")
1135 p.add_argument('-u', '--uuid', help="UUID of the bdev")
1142 p = subparsers.add_parser('bdev_rbd_delete', help='Delete a rbd bdev')
1143 p.add_argument('name', help='rbd bdev name')
1152 help='Resize a rbd bdev')
1153 p.add_argument('name', help='rbd bdev name')
1154 p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
1168 help='Add a delay bdev on existing bdev')
1169 p.add_argument('-b', '--base-bdev-name', help="Name of the existing bdev", required=True)
1170 p.add_argument('-d', '--name', help="Name of the delay bdev", required=True)
1171 p.add_argument('-u', '--uuid', help='UUID of the bdev (optional)')
1173 help="Average latency to apply before completing read ops (in microseconds)", required=True, type=int)
1175 help="latency to apply to 1 in 100 read ops (in microseconds)", required=True, type=int)
1177 help="Average latency to apply before completing write ops (in microseconds)", required=True, type=int)
1179 help="latency to apply to 1 in 100 write ops (in microseconds)", required=True, type=int)
1186 p = subparsers.add_parser('bdev_delay_delete', help='Delete a delay bdev')
1187 p.add_argument('name', help='delay bdev name')
1196 help='Update one of the latency values for a given delay bdev')
1197 p.add_argument('delay_bdev_name', help='The name of the given delay bdev')
1198 p.add_argument('latency_type', help='one of: avg_read, avg_write, p99_read, p99_write. No other values accepted.')
1199 p.add_argument('latency_us', help='new latency value in microseconds.', type=int)
1207 p = subparsers.add_parser('bdev_error_create', help='Add bdev with error injection backend')
1208 p.add_argument('base_name', help='base bdev name')
1209 p.add_argument('--uuid', help='UUID for this bdev')
1216 p = subparsers.add_parser('bdev_error_delete', help='Delete an error bdev')
1217 p.add_argument('name', help='error bdev name')
1224 p = subparsers.add_parser('bdev_iscsi_set_options', help='Set options for the bdev iscsi type.')
1225 p.add_argument('-t', '--timeout-sec', help="Timeout for command, in seconds, if 0, don't track timeout.", type=int)
1235 help='Add bdev with iSCSI initiator backend')
1236 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
1237 p.add_argument('-i', '--initiator-iqn', help="Initiator IQN", required=True)
1238 p.add_argument('--url', help="iSCSI Lun URL", required=True)
1245 p = subparsers.add_parser('bdev_iscsi_delete', help='Delete an iSCSI bdev')
1246 p.add_argument('name', help='iSCSI bdev name')
1255 p = subparsers.add_parser('bdev_passthru_create', help='Add a pass through bdev on existing bdev')
1256 p.add_argument('-b', '--base-bdev-name', help="Name of the existing bdev", required=True)
1257 p.add_argument('-p', '--name', help="Name of the pass through bdev", required=True)
1258 p.add_argument('-u', '--uuid', help="UUID of the bdev")
1265 p = subparsers.add_parser('bdev_passthru_delete', help='Delete a pass through bdev')
1266 p.add_argument('name', help='pass through bdev name')
1274 help='Display current blockdev list or required blockdev')
1275 p.add_argument('-b', '--name', help="Name of the Blockdev. Example: Nvme0n1")
1276 p.add_argument('-t', '--timeout-ms', help="""Time in ms to wait for the bdev to appear (only used
1289 help='Display current I/O statistics of all the blockdevs or specified blockdev.')
1290 p.add_argument('-b', '--name', help="Name of the Blockdev. Example: Nvme0n1")
1291 p.add_argument('-c', '--per-channel', default=False, dest='per_channel', help='Display per channel IO stats for specified device',
1293 p.add_argument('--reset-mode', help="Mode to reset I/O statistics after getting", choices=['all', 'maxmin', 'none'])
1300 help='Reset I/O statistics of all the blockdevs or specified blockdev.')
1301 p.add_argument('-b', '--name', help="Name of the Blockdev. Example: Nvme0n1")
1302 p.add_argument('-m', '--mode', help="Mode to reset I/O statistics", choices=['all', 'maxmin', 'none'])
1309 help='Enable or disable histogram for specified bdev')
1310 p.add_argument('-e', '--enable', default=True, dest='enable', action='store_true', help='Enable histograms on specified device')
1311 p.add_argument('-d', '--disable', dest='enable', action='store_false', help='Disable histograms on specified device')
1312 p.add_argument('-o', '--opc', help='Enable histogram for specified io type. Defaults to all io types if not specified.'
1314 p.add_argument('name', help='bdev name')
1321 help='Get histogram for specified bdev')
1322 p.add_argument('name', help='bdev name')
1331 help="Enable or disable tracking of a bdev's queue depth.")
1332 p.add_argument('name', help='Blockdev name. Example: Malloc0')
1333 p.add_argument('period', help='Period with which to poll the block device queue depth in microseconds.'
1347 help='Set QoS rate limit on a blockdev')
1348 p.add_argument('name', help='Blockdev name to set QoS. Example: Malloc0')
1350 help='R/W IOs per second limit (>=1000, example: 20000). 0 means unlimited.',
1353 help="R/W megabytes per second limit (>=1, example: 100). 0 means unlimited.",
1356 help="Read megabytes per second limit (>=1, example: 100). 0 means unlimited.",
1359 help="Write megabytes per second limit (>=1, example: 100). 0 means unlimited.",
1373 p = subparsers.add_parser('bdev_error_inject_error', help='bdev inject error')
1374 p.add_argument('name', help="""the name of the error injection bdev""")
1375 p.add_argument('io_type', help="""io_type: 'clear' 'read' 'write' 'unmap' 'flush' 'all'""")
1376 p.add_argument('error_type', help="""error_type: 'failure' 'pending' 'corrupt_data' 'nomem'""")
1378 '-n', '--num', help='the number of commands you want to fail', type=int)
1380 '-q', '--queue-depth', help='the queue depth at which to trigger the error', type=int)
1382 '-o', '--corrupt-offset', help='the offset in bytes to xor with corrupt_value', type=int)
1384 '-v', '--corrupt-value', help='the value for xor (1-255, 0 is invalid)', type=int)
1392 p = subparsers.add_parser('bdev_nvme_apply_firmware', help='Download and commit firmware to NVMe device')
1393 p.add_argument('filename', help='filename of the firmware to download')
1394 p.add_argument('bdev_name', help='name of the NVMe device')
1401 help='Get bdev_nvme poll group transport statistics')
1409 help='Display health log of the required NVMe bdev controller.')
1410 p.add_argument('-c', '--name', help="Name of the NVMe bdev controller. Example: Nvme0", required=True)
1441 help="""Set options of iSCSI subsystem""")
1442 p.add_argument('-f', '--auth-file', help='Path to CHAP shared secret file')
1443 p.add_argument('-b', '--node-base', help='Prefix of the name of iSCSI target node')
1444 p.add_argument('-o', '--nop-timeout', help='Timeout in seconds to nop-in request to the initiator', type=int)
1445 p.add_argument('-n', '--nop-in-interval', help='Time interval in secs between nop-in requests by the target', type=int)
1446 p.add_argument('-d', '--disable-chap', help="""CHAP for discovery session should be disabled.
1448 p.add_argument('-r', '--require-chap', help="""CHAP for discovery session should be required.
1450 p.add_argument('-m', '--mutual-chap', help='CHAP for discovery session should be mutual', action='store_true')
1451 p.add_argument('-g', '--chap-group', help="""Authentication group ID for discovery session.
1453 p.add_argument('-a', '--max-sessions', help='Maximum number of sessions in the host.', type=int)
1454 p.add_argument('-q', '--max-queue-depth', help='Max number of outstanding I/Os per queue.', type=int)
1455 p.add_argument('-c', '--max-connections-per-session', help='Negotiated parameter, MaxConnections.', type=int)
1456 p.add_argument('-w', '--default-time2wait', help='Negotiated parameter, DefaultTime2Wait.', type=int)
1457 p.add_argument('-v', '--default-time2retain', help='Negotiated parameter, DefaultTime2Retain.', type=int)
1458 p.add_argument('-s', '--first-burst-length', help='Negotiated parameter, FirstBurstLength.', type=int)
1459 p.add_argument('-i', '--immediate-data', help='Negotiated parameter, ImmediateData.', action='store_true')
1460 p.add_argument('-l', '--error-recovery-level', help='Negotiated parameter, ErrorRecoveryLevel', type=int)
1461 p.add_argument('-p', '--allow-duplicated-isid', help='Allow duplicated initiator session ID.', action='store_true')
1462 p.add_argument('-x', '--max-large-datain-per-connection', help='Max number of outstanding split read I/Os per connection', type=int)
1463 p.add_argument('-k', '--max-r2t-per-connection', help='Max number of outstanding R2Ts per connection', type=int)
1464 p.add_argument('-u', '--pdu-pool-size', help='Number of PDUs in the pool', type=int)
1465 p.add_argument('-j', '--immediate-data-pool-size', help='Number of immediate data buffers in the pool', type=int)
1466 p.add_argument('-z', '--data-out-pool-size', help='Number of data out buffers in the pool', type=int)
1478 help="""Set CHAP authentication for discovery session.""")
1479 p.add_argument('-d', '--disable-chap', help="""CHAP for discovery session should be disabled.
1481 p.add_argument('-r', '--require-chap', help="""CHAP for discovery session should be required.
1483 p.add_argument('-m', '--mutual-chap', help='CHAP for discovery session should be mutual', action='store_true')
1484 p.add_argument('-g', '--chap-group', help="""Authentication group ID for discovery session.
1496 help='Create authentication group for CHAP authentication.')
1497 p.add_argument('tag', help='Authentication group tag (unique, integer > 0).', type=int)
1498 p.add_argument('-c', '--secrets', help="""Comma-separated list of CHAP secrets
1507 help='Delete an authentication group.')
1508 p.add_argument('tag', help='Authentication group tag', type=int)
1521 help='Add a secret to an authentication group.')
1522 p.add_argument('tag', help='Authentication group tag', type=int)
1523 p.add_argument('-u', '--user', help='User name for one-way CHAP authentication', required=True)
1524 p.add_argument('-s', '--secret', help='Secret for one-way CHAP authentication', required=True)
1525 p.add_argument('-m', '--muser', help='User name for mutual CHAP authentication')
1526 p.add_argument('-r', '--msecret', help='Secret for mutual CHAP authentication')
1533 help='Remove a secret from an authentication group.')
1534 p.add_argument('tag', help='Authentication group tag', type=int)
1535 p.add_argument('-u', '--user', help='User name for one-way CHAP authentication', required=True)
1542 help='Display current authentication group configuration')
1548 p = subparsers.add_parser('iscsi_get_portal_groups', help='Display current portal group configuration')
1555 help='Display current initiator group configuration')
1561 p = subparsers.add_parser('iscsi_get_target_nodes', help='Display target nodes')
1568 help='Enable or disable histogram for specified iscsi target')
1569 p.add_argument('-e', '--enable', default=True, dest='enable', action='store_true', help='Enable histograms on specified iscsi target')
1570 p.add_argument('-d', '--disable', dest='enable', action='store_false', help='Disable histograms on specified iscsi target')
1571 p.add_argument('name', help='iscsi target name')
1578 help='Get histogram for specified iscsi target')
1579 p.add_argument('name', help='target name')
1607 p = subparsers.add_parser('iscsi_create_target_node', help='Add a target node')
1608 p.add_argument('name', help='Target node name (ASCII)')
1609 p.add_argument('alias_name', help='Target node alias name (ASCII)')
1610 p.add_argument('bdev_name_id_pairs', help="""Whitespace-separated list of <bdev name:LUN ID> pairs enclosed
1616 p.add_argument('pg_ig_mappings', help="""List of (Portal_Group_Tag:Initiator_Group_Tag) mappings
1621 p.add_argument('queue_depth', help='Desired target queue depth', type=int)
1622 p.add_argument('-g', '--chap-group', help="""Authentication group ID for this target node.
1624 p.add_argument('-d', '--disable-chap', help="""CHAP authentication should be disabled for this target node.
1626 p.add_argument('-r', '--require-chap', help="""CHAP authentication should be required for this target node.
1629 '-m', '--mutual-chap', help='CHAP authentication should be mutual/bidirectional.', action='store_true')
1631 help='Header Digest should be required for this target node.', action='store_true')
1633 help='Data Digest should be required for this target node.', action='store_true')
1644 help='Add LUN to the target node')
1645 p.add_argument('name', help='Target node name (ASCII)')
1646 p.add_argument('bdev_name', help="""bdev name enclosed in quotes.
1648 p.add_argument('-i', dest='lun_id', help="""LUN ID (integer >= 0)
1662 help='Set CHAP authentication for the target node')
1663 p.add_argument('name', help='Target node name (ASCII)')
1664 p.add_argument('-g', '--chap-group', help="""Authentication group ID for this target node.
1666 p.add_argument('-d', '--disable-chap', help="""CHAP authentication should be disabled for this target node.
1668 p.add_argument('-r', '--require-chap', help="""CHAP authentication should be required for this target node.
1670 p.add_argument('-m', '--mutual-chap', help='CHAP authentication should be mutual/bidirectional.',
1685 help='Add PG-IG maps to the target node')
1686 p.add_argument('name', help='Target node name (ASCII)')
1687 p.add_argument('pg_ig_mappings', help="""List of (Portal_Group_Tag:Initiator_Group_Tag) mappings
1703 help='Delete PG-IG maps from the target node')
1704 p.add_argument('name', help='Target node name (ASCII)')
1705 p.add_argument('pg_ig_mappings', help="""List of (Portal_Group_Tag:Initiator_Group_Tag) mappings
1721 help="""Update redirect portal of the public portal group for the target node.
1723 p.add_argument('name', help='Target node name (ASCII)')
1724 p.add_argument('pg_tag', help='Portal group tag (unique, integer > 0)', type=int)
1725 p.add_argument('-a', '--redirect-host', help='Numeric IP address for redirect portal')
1726 p.add_argument('-p', '--redirect-port', help='Numeric TCP port for redirect portal')
1736 help="""For the target node, request connections whose portal group tag
1738 p.add_argument('name', help='Target node name (ASCII)')
1739 p.add_argument('-t', '--pg-tag', help='Portal group tag (unique, integer > 0)', type=int)
1763 help='Add a portal group')
1765 'tag', help='Portal group tag (unique, integer > 0)', type=int)
1766 p.add_argument('portal_list', help="""List of portals in host:port format, separated by whitespace
1768 p.add_argument('-p', '--private', help="""Public (false) or private (true) portal group.
1772 p.add_argument('-w', '--wait', help="""Do not listening on portals until it is started explicitly.
1781 help='Start listening on portals if it is not started yet.')
1783 'tag', help='Portal group tag (unique, integer > 0)', type=int)
1800 help='Add an initiator group')
1802 'tag', help='Initiator group tag (unique, integer > 0)', type=int)
1803 p.add_argument('initiator_list', help="""Whitespace-separated list of initiator hostnames or IP addresses,
1805 p.add_argument('netmask_list', help="""Whitespace-separated list of initiator netmasks enclosed in quotes.
1827 help='Add initiators to an existing initiator group')
1829 'tag', help='Initiator group tag (unique, integer > 0)', type=int)
1830 p.add_argument('-n', dest='initiator_list', help="""Whitespace-separated list of initiator hostnames or IP addresses,
1833 p.add_argument('-m', dest='netmask_list', help="""Whitespace-separated list of initiator netmasks enclosed in quotes.
1855 help='Delete initiators from an existing initiator group')
1857 'tag', help='Initiator group tag (unique, integer > 0)', type=int)
1858 p.add_argument('-n', dest='initiator_list', help="""Whitespace-separated list of initiator hostnames or IP addresses,
1861 p.add_argument('-m', dest='netmask_list', help="""Whitespace-separated list of initiator netmasks enclosed in quotes.
1870 help='Delete a target node')
1872 help='Target node name to be deleted. Example: iqn.2016-06.io.spdk:disk1.')
1879 help='Delete a portal group')
1881 'tag', help='Portal group tag (unique, integer > 0)', type=int)
1888 help='Delete an initiator group')
1890 'tag', help='Initiator group tag (unique, integer > 0)', type=int)
1903 help='Set CHAP authentication for discovery sessions specific for the portal group')
1904 p.add_argument('tag', help='Portal group tag (unique, integer > 0)', type=int)
1905 p.add_argument('-g', '--chap-group', help="""Authentication group ID for this portal group.
1907 p.add_argument('-d', '--disable-chap', help="""CHAP authentication should be disabled for this portal group.
1909 p.add_argument('-r', '--require-chap', help="""CHAP authentication should be required for this portal group.
1911 p.add_argument('-m', '--mutual-chap', help='CHAP authentication should be mutual/bidirectional.',
1919 help='Display iSCSI connections')
1926 help='Display stat information of iSCSI connections.')
1933 help='Display iSCSI global parameters')
1939 p = subparsers.add_parser('scsi_get_devices', help='Display SCSI devices')
1947 help='enable trace on a specific tpoint group')
1949 'name', help="""trace group name we want to enable in tpoint_group_mask.
1957 help='disable trace on a specific tpoint group')
1959 'name', help="""trace group name we want to disable in tpoint_group_mask.
1967 help='enable tracepoint mask on a specific tpoint group')
1969 'name', help="""trace group name we want to enable in tpoint_group_mask.
1972 'tpoint_mask', help="""tracepoints to be enabled inside a given trace group.
1981 help='disable tracepoint mask on a specific tpoint group')
1983 'name', help="""trace group name we want to disable in tpoint_group_mask.
1986 'tpoint_mask', help="""tracepoints to be disabled inside a given trace group.
1994 p = subparsers.add_parser('trace_get_tpoint_group_mask', help='get trace point group mask')
2001 help='get name of shared memory file and list of the available trace point groups')
2008 p = subparsers.add_parser('log_set_flag', help='set log flag')
2010 'flag', help='log flag we want to set. (for example "nvme").')
2016 p = subparsers.add_parser('log_clear_flag', help='clear log flag')
2018 'flag', help='log flag we want to clear. (for example "nvme").')
2024 p = subparsers.add_parser('log_get_flags', help='get log flags')
2030 p = subparsers.add_parser('log_set_level', help='set log level')
2031 p.add_argument('level', help='log level we want to set. (for example "DEBUG").')
2037 p = subparsers.add_parser('log_get_level', help='get log level')
2043 p = subparsers.add_parser('log_set_print_level', help='set log print level')
2044 p.add_argument('level', help='log print level we want to set. (for example "DEBUG").')
2050 p = subparsers.add_parser('log_get_print_level', help='get log print level')
2066 p = subparsers.add_parser('bdev_lvol_create_lvstore', help='Add logical volume store on base bdev')
2067 p.add_argument('bdev_name', help='base bdev name')
2068 p.add_argument('lvs_name', help='name for lvol store')
2069 p.add_argument('-c', '--cluster-sz', help='size of cluster (in bytes)', type=int)
2070 p.add_argument('--clear-method', help="""Change clear method for data region.
2072 p.add_argument('-m', '--md-pages-per-cluster-ratio', help='reserved metadata pages for each cluster', type=int)
2073 p.add_argument('-s', '--md-page-size', help='size of metadata page (in bytes)', type=int)
2081 p = subparsers.add_parser('bdev_lvol_rename_lvstore', help='Change logical volume store name')
2082 p.add_argument('old_name', help='old name')
2083 p.add_argument('new_name', help='new name')
2092 help='Grow the lvstore size to the underlying bdev size')
2093 p.add_argument('-u', '--uuid', help='lvol store UUID')
2094 p.add_argument('-l', '--lvs-name', help='lvol store name')
2106 p = subparsers.add_parser('bdev_lvol_create', help='Add a bdev with an logical volume backend')
2107 p.add_argument('-u', '--uuid', help='lvol store UUID')
2108 p.add_argument('-l', '--lvs-name', help='lvol store name')
2109 p.add_argument('-t', '--thin-provision', action='store_true', help='create lvol bdev as thin provisioned')
2110 p.add_argument('-c', '--clear-method', help="""Change default data clusters clear method.
2112 p.add_argument('lvol_name', help='name for this lvol')
2113 p.add_argument('size_in_mib', help='size in MiB for this bdev', type=int)
2121 p = subparsers.add_parser('bdev_lvol_snapshot', help='Create a snapshot of an lvol bdev')
2122 p.add_argument('lvol_name', help='lvol bdev name')
2123 p.add_argument('snapshot_name', help='lvol snapshot name')
2131 p = subparsers.add_parser('bdev_lvol_clone', help='Create a clone of an lvol snapshot')
2132 p.add_argument('snapshot_name', help='lvol snapshot name')
2133 p.add_argument('clone_name', help='lvol clone name')
2143 help='Create a clone of a non-lvol bdev')
2144 p.add_argument('bdev', help='bdev to clone')
2145 p.add_argument('lvs_name', help='logical volume store name')
2146 p.add_argument('clone_name', help='lvol clone name')
2154 p = subparsers.add_parser('bdev_lvol_rename', help='Change lvol bdev name')
2155 p.add_argument('old_name', help='lvol bdev name')
2156 p.add_argument('new_name', help='new lvol name')
2163 p = subparsers.add_parser('bdev_lvol_inflate', help='Make thin provisioned lvol a thick provisioned lvol')
2164 p.add_argument('name', help='lvol bdev name')
2171 p = subparsers.add_parser('bdev_lvol_decouple_parent', help='Decouple parent of lvol')
2172 p.add_argument('name', help='lvol bdev name')
2180 p = subparsers.add_parser('bdev_lvol_resize', help='Resize existing lvol bdev')
2181 p.add_argument('name', help='lvol bdev name')
2182 p.add_argument('size_in_mib', help='new size in MiB for this bdev', type=int)
2189 p = subparsers.add_parser('bdev_lvol_set_read_only', help='Mark lvol bdev as read only')
2190 p.add_argument('name', help='lvol bdev name')
2197 p = subparsers.add_parser('bdev_lvol_delete', help='Destroy a logical volume')
2198 p.add_argument('name', help='lvol bdev name')
2207 help="""Start a shallow copy of an lvol over a given bdev. The status of the operation
2209 p.add_argument('src_lvol_name', help='source lvol name')
2210 p.add_argument('dst_bdev_name', help='destination bdev name')
2217 p = subparsers.add_parser('bdev_lvol_check_shallow_copy', help='Get shallow copy status')
2218 p.add_argument('operation_id', help='operation identifier', type=int)
2226 p = subparsers.add_parser('bdev_lvol_set_parent', help='Set the parent snapshot of a lvol')
2227 p.add_argument('lvol_name', help='lvol name')
2228 p.add_argument('parent_name', help='parent snapshot name')
2236 p = subparsers.add_parser('bdev_lvol_set_parent_bdev', help='Set the parent external snapshot of a lvol')
2237 p.add_argument('lvol_name', help='lvol name')
2238 p.add_argument('parent_name', help='parent external snapshot name')
2246 p = subparsers.add_parser('bdev_lvol_delete_lvstore', help='Destroy an logical volume store')
2247 p.add_argument('-u', '--uuid', help='lvol store UUID')
2248 p.add_argument('-l', '--lvs-name', help='lvol store name')
2256 p = subparsers.add_parser('bdev_lvol_get_lvstores', help='Display current logical volume store list')
2257 p.add_argument('-u', '--uuid', help='lvol store UUID')
2258 p.add_argument('-l', '--lvs-name', help='lvol store name')
2266 p = subparsers.add_parser('bdev_lvol_get_lvols', help='Display current logical volume list')
2267 p.add_argument('-u', '--lvs-uuid', help='only lvols in lvol store UUID')
2268 p.add_argument('-l', '--lvs-name', help='only lvols in lvol store name')
2277 help='Set options for bdev raid.')
2279 help="Background process (e.g. rebuild) window size in KiB")
2281 help="Background process (e.g. rebuild) maximum bandwidth in MiB/Sec")
2290 help="""This is used to list all the raid bdev details based on the input category
2295 p.add_argument('category', help='all or online or configuring or offline')
2310 p = subparsers.add_parser('bdev_raid_create', help='Create new raid bdev')
2311 p.add_argument('-n', '--name', help='raid bdev name', required=True)
2312 p.add_argument('-z', '--strip-size-kb', help='strip size in KB', type=int)
2313 p.add_argument('-r', '--raid-level', help='raid level, raid0, raid1 and a special level concat are supported', required=True)
2314 p.add_argument('-b', '--base-bdevs', help='base bdevs name, whitespace separated list in quotes', required=True)
2315 p.add_argument('--uuid', help='UUID for this raid bdev')
2316 p.add_argument('-s', '--superblock', help='information about raid bdev will be stored in superblock on each base bdev, '
2323 p = subparsers.add_parser('bdev_raid_delete', help='Delete existing raid bdev')
2324 p.add_argument('name', help='raid bdev name')
2331 p = subparsers.add_parser('bdev_raid_add_base_bdev', help='Add base bdev to existing raid bdev')
2332 p.add_argument('raid_bdev', help='raid bdev name')
2333 p.add_argument('base_bdev', help='base bdev name')
2339 p = subparsers.add_parser('bdev_raid_remove_base_bdev', help='Remove base bdev from existing raid bdev')
2340 p.add_argument('name', help='base bdev name')
2351 help="""Add given disk name to split config. If bdev with base_name
2354 p.add_argument('base_bdev', help='base bdev name')
2355 p.add_argument('-s', '--split-size-mb', help='size in MiB for each bdev', type=int)
2356 p.add_argument('split_count', help="""Optional - number of split bdevs to create. Total size * split_count must not
2364 p = subparsers.add_parser('bdev_split_delete', help="""Delete split config with all created splits.""")
2365 p.add_argument('base_bdev', help='base bdev name')
2380 p = subparsers.add_parser('bdev_ftl_create', help='Add FTL bdev')
2381 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2382 p.add_argument('-d', '--base-bdev', help='Name of bdev used as underlying device',
2384 p.add_argument('-u', '--uuid', help='UUID of restored bdev (not applicable when creating new '
2386 p.add_argument('-c', '--cache', help='Name of the bdev to be used as a write buffer cache',
2388 p.add_argument('--overprovisioning', help='Percentage of device used for relocation, not exposed'
2390 p.add_argument('--l2p-dram-limit', help='l2p size that could reside in DRAM (optional); default 2048',
2392 p.add_argument('--core-mask', help='CPU core mask - which cores will be used for ftl core thread, '
2394 p.add_argument('-f', '--fast-shutdown', help="Enable fast shutdown", action='store_true')
2408 p = subparsers.add_parser('bdev_ftl_load', help='Load FTL bdev')
2409 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2410 p.add_argument('-d', '--base-bdev', help='Name of bdev used as underlying device',
2412 p.add_argument('-u', '--uuid', help='UUID of restored bdev', required=True)
2413 p.add_argument('-c', '--cache', help='Name of the bdev to be used as a write buffer cache',
2415 p.add_argument('--overprovisioning', help='Percentage of device used for relocation, not exposed'
2417 p.add_argument('--l2p-dram-limit', help='l2p size that could reside in DRAM (optional); default 2048',
2419 p.add_argument('--core-mask', help='CPU core mask - which cores will be used for ftl core thread, '
2421 p.add_argument('-f', '--fast-shutdown', help="Enable fast shutdown", action='store_true')
2427 p = subparsers.add_parser('bdev_ftl_unload', help='Unload FTL bdev')
2428 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2429 p.add_argument('-f', '--fast-shutdown', help="Fast shutdown", action='store_true')
2435 p = subparsers.add_parser('bdev_ftl_delete', help='Delete FTL bdev')
2436 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2437 p.add_argument('-f', '--fast-shutdown', help="Fast shutdown", action='store_true')
2445 p = subparsers.add_parser('bdev_ftl_unmap', help='FTL unmap')
2446 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2447 p.add_argument('--lba', help='start LBA', required=True, type=int)
2448 p.add_argument('--num-blocks', help='num blocks', required=True, type=int)
2454 p = subparsers.add_parser('bdev_ftl_get_stats', help='print ftl stats')
2455 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2461 p = subparsers.add_parser('bdev_ftl_get_properties', help='Print FTL properties')
2462 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2470 p = subparsers.add_parser('bdev_ftl_set_property', help='Set FTL property')
2471 p.add_argument('-b', '--name', help="Name of the bdev", required=True)
2472 p.add_argument('-p', '--property', help="Name of the property to be set", required=True)
2473 p.add_argument('-v', '--value', help="Value of the property", required=True)
2480 p = subparsers.add_parser('vmd_enable', aliases=['enable_vmd'], help='Enable VMD enumeration')
2486 p = subparsers.add_parser('vmd_remove_device', help='Remove a device behind VMD')
2487 p.add_argument('addr', help='Address of the device to remove', type=str)
2493 p = subparsers.add_parser('vmd_rescan', help='Force a rescan of the devices behind VMD')
2502 help='Create spdk ublk target for ublk dev')
2503 p.add_argument('-m', '--cpumask', help='cpu mask for ublk dev')
2504 p.add_argument('--disable-user-copy', help='Disable user copy feature', action='store_true')
2510 help='Destroy spdk ublk target for ublk dev')
2521 help='Export a bdev as a ublk device')
2522 p.add_argument('bdev_name', help='Blockdev name to be exported. Example: Malloc0.')
2523 p.add_argument('ublk_id', help='ublk device id to be assigned. Example: 1.', type=int)
2524 p.add_argument('-q', '--num-queues', help="the total number of queues. Example: 1", type=int)
2525 p.add_argument('-d', '--queue-depth', help="queue depth. Example: 128", type=int)
2533 help='Stop a ublk device')
2534 p.add_argument('ublk_id', help='ublk device id to be deleted. Example: 1.', type=int)
2543 help='Recover ublk device')
2544 p.add_argument('bdev_name', help='Blockdev name to be recovered. Example: Malloc0.')
2545 p.add_argument('ublk_id', help='ublk device id to be recovered. Example: 1.', type=int)
2553 help='Display full or specified ublk device list')
2554 p.add_argument('-n', '--ublk-id', help="ublk device id. Example: 1", type=int)
2564 help='Export a bdev as an nbd disk')
2565 p.add_argument('bdev_name', help='Blockdev name to be exported. Example: Malloc0.')
2566 p.add_argument('nbd_device', help='Nbd device name to be assigned. Example: /dev/nbd0.', nargs='?')
2574 help='Stop an nbd disk')
2575 p.add_argument('nbd_device', help='Nbd device name to be stopped. Example: /dev/nbd0.')
2583 help='Display full or specified nbd device list')
2584 p.add_argument('-n', '--nbd-device', help="Path of the nbd device. Example: /dev/nbd0")
2593 help='Set the maximum number of NVMf target subsystems')
2594 p.add_argument('-x', '--max-subsystems', help='Max number of NVMf subsystems', type=int, required=True)
2605 p = subparsers.add_parser('nvmf_set_config', help='Set NVMf target config')
2606 p.add_argument('-i', '--passthru-identify-ctrlr', help="""Passthrough fields like serial number and model number
2608 p.add_argument('-m', '--poll-groups-mask', help='Set cpumask for NVMf poll groups (optional)', type=str)
2609 p.add_argument('-d', '--discovery-filter', help="""Set discovery filter (optional), possible values are: `match_any` (default) or
2611 p.add_argument('--dhchap-digests', help='Comma-separated list of allowed DH-HMAC-CHAP digests',
2613 p.add_argument('--dhchap-dhgroups', help='Comma-separated list of allowed DH-HMAC-CHAP DH groups',
2620 p = subparsers.add_parser('nvmf_create_transport', help='Create NVMf transport')
2621 p.add_argument('-t', '--trtype', help='Transport type (ex. RDMA)', type=str, required=True)
2622 p.add_argument('-g', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2623 p.add_argument('-q', '--max-queue-depth', help='Max number of outstanding I/O per queue', type=int)
2624 p.add_argument('-m', '--max-io-qpairs-per-ctrlr', help='Max number of IO qpairs per controller', type=int)
2625 p.add_argument('-c', '--in-capsule-data-size', help='Max number of in-capsule data size', type=int)
2626 p.add_argument('-i', '--max-io-size', help='Max I/O size (bytes)', type=int)
2627 p.add_argument('-u', '--io-unit-size', help='I/O unit size (bytes)', type=int)
2628 p.add_argument('-a', '--max-aq-depth', help='Max number of admin cmds per AQ', type=int)
2629 p.add_argument('-n', '--num-shared-buffers', help='The number of pooled data buffers available to the transport', type=int)
2630 p.add_argument('-b', '--buf-cache-size', help='The number of shared buffers to reserve for each poll group', type=int)
2631 p.add_argument('-z', '--zcopy', action='store_true', help='''Use zero-copy operations if the
2633 p.add_argument('-d', '--num-cqe', help="""The number of CQ entries. Only used when no_srq=true.
2635 p.add_argument('-s', '--max-srq-depth', help='Max number of outstanding I/O per SRQ. Relevant only for RDMA transport', type=int)
2636 p.add_argument('-r', '--no-srq', action='store_true', help='Disable per-thread shared receive queue. Relevant only for RDMA transport')
2637 p.add_argument('-o', '--c2h-success', action='store_false', help='Disable C2H success optimization. Relevant only for TCP transport')
2638 p.add_argument('-f', '--dif-insert-or-strip', action='store_true', help='Enable DIF insert/strip. Relevant only for TCP transport')
2639 p.add_argument('-y', '--sock-priority', help='The sock priority of the tcp connection. Relevant only for TCP transport', type=int)
2640 p.add_argument('-l', '--acceptor-backlog', help='Pending connections allowed at one time. Relevant only for RDMA transport', type=int)
2641 p.add_argument('-x', '--abort-timeout-sec', help='Abort execution timeout value, in seconds', type=int)
2642 p.add_argument('-w', '--no-wr-batching', action='store_true', help='Disable work requests batching. Relevant only for RDMA transport')
2643 p.add_argument('-e', '--control-msg-num', help="""The number of control messages per poll group.
2645 p.add_argument('-M', '--disable-mappable-bar0', action='store_true', help="""Disable mmap() of BAR0.
2647 p.add_argument('-I', '--disable-adaptive-irq', action='store_true', help="""Disable adaptive interrupt feature.
2649 p.add_argument('-S', '--disable-shadow-doorbells', action='store_true', help="""Disable shadow doorbell support.
2651 p.add_argument('--acceptor-poll-rate', help='Polling interval of the acceptor for incoming connections (usec)', type=int)
2652 p.add_argument('--ack-timeout', help='ACK timeout in milliseconds', type=int)
2653 p.add_argument('--data-wr-pool-size', help='RDMA data WR pool size. Relevant only for RDMA transport', type=int)
2654 p.add_argument('--disable-command-passthru', help='Disallow command passthru', action='store_true')
2660 p = subparsers.add_parser('nvmf_get_transports', help='Display nvmf transports or required transport')
2661 p.add_argument('--trtype', help='Transport type (optional)')
2662 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2668 p = subparsers.add_parser('nvmf_get_subsystems', help='Display nvmf subsystems or required subsystem')
2669 p.add_argument('nqn', help='Subsystem NQN (optional)', nargs="?")
2670 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2688 p = subparsers.add_parser('nvmf_create_subsystem', help='Create an NVMe-oF subsystem')
2689 p.add_argument('nqn', help='Subsystem NQN (ASCII)')
2690 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2691 p.add_argument("-s", "--serial-number", help="""
2694 p.add_argument("-d", "--model-number", help="""
2697 p.add_argument("-a", "--allow-any-host", action='store_true', help="Allow any host to connect (don't enforce allowed host NQN list)")
2698 p.add_argument("-m", "--max-namespaces", help="Maximum number of namespaces allowed",
2700 p.add_argument("-r", "--ana-reporting", action='store_true', help="Enable ANA reporting feature")
2701 p.add_argument("-i", "--min_cntlid", help="Minimum controller ID", type=int)
2702 p.add_argument("-I", "--max_cntlid", help="Maximum controller ID", type=int)
2703 p.add_argument("--max-discard-size", help="Maximum discard size (Kib)", type=int)
2704 p.add_argument("--max-write-zeroes-size", help="Maximum write_zeroes size (Kib)", type=int)
2705 p.add_argument("-p", "--passthrough", action='store_true', help="""Use NVMe passthrough for all I/O commands and namespace-directed
2714 p = subparsers.add_parser('nvmf_delete_subsystem', help='Delete a nvmf subsystem')
2716 help='subsystem nqn to be deleted. Example: nqn.2016-06.io.spdk:cnode1.')
2717 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2723 p = subparsers.add_parser('nvmf_subsystem_add_listener', help='Add a listener to an NVMe-oF subsystem')
2724 p.add_argument('nqn', help='NVMe-oF subsystem NQN (\'discovery\' can be used as shortcut for discovery NQN)')
2725 p.add_argument('-t', '--trtype', help='NVMe-oF transport type: e.g., rdma', required=True)
2726 p.add_argument('-a', '--traddr', help='NVMe-oF transport address: e.g., an ip address', required=True)
2727 p.add_argument('-p', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2728 p.add_argument('-f', '--adrfam', help='NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
2729 p.add_argument('-s', '--trsvcid', help='NVMe-oF transport service id: e.g., a port number (required for RDMA or TCP)')
2730 p.add_argument('-k', '--secure-channel', help='Immediately establish a secure channel', action="store_true")
2731 p.add_argument('-n', '--ana-state', help='ANA state to set: optimized, non_optimized, or inaccessible', type=str)
2732 p.add_argument('-S', '--sock-impl', help='The socket implementation to use for the listener (ex. posix)', type=str)
2744 p = subparsers.add_parser('nvmf_subsystem_remove_listener', help='Remove a listener from an NVMe-oF subsystem')
2745 p.add_argument('nqn', help='NVMe-oF subsystem NQN (\'discovery\' can be used as shortcut for discovery NQN)')
2746 p.add_argument('-t', '--trtype', help='NVMe-oF transport type: e.g., rdma', required=True)
2747 p.add_argument('-a', '--traddr', help='NVMe-oF transport address: e.g., an ip address', required=True)
2748 p.add_argument('-p', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2749 p.add_argument('-f', '--adrfam', help='NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
2750 p.add_argument('-s', '--trsvcid', help='NVMe-oF transport service id: e.g., a port number (required for TCP and RDMA transport types)')
2764 p = subparsers.add_parser('nvmf_subsystem_listener_set_ana_state', help='Set ANA state of a listener for an NVMe-oF subsystem')
2765 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2766 p.add_argument('-n', '--ana-state', help='ANA state to set: optimized, non_optimized, or inaccessible', required=True)
2767 p.add_argument('-t', '--trtype', help='NVMe-oF transport type: e.g., rdma', required=True)
2768 p.add_argument('-a', '--traddr', help='NVMe-oF transport address: e.g., an ip address', required=True)
2769 p.add_argument('-p', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2770 p.add_argument('-f', '--adrfam', help='NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
2771 p.add_argument('-s', '--trsvcid', help='NVMe-oF transport service id: e.g., a port number')
2772 p.add_argument('-g', '--anagrpid', help='ANA group ID (optional)', type=int)
2778 p = subparsers.add_parser('nvmf_discovery_add_referral', help='Add a discovery service referral to an NVMe-oF target')
2779 p.add_argument('-t', '--trtype', help='NVMe-oF transport type: e.g., rdma', required=True)
2780 p.add_argument('-a', '--traddr', help='NVMe-oF transport address: e.g., an ip address', required=True)
2781 p.add_argument('-p', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2782 p.add_argument('-f', '--adrfam', help='NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
2783 p.add_argument('-s', '--trsvcid', help='NVMe-oF transport service id: e.g., a port number (required for RDMA or TCP)')
2784 p.add_argument('-k', '--secure-channel', help='The connection to that discovery subsystem requires a secure channel',
2786 p.add_argument('-n', '--subnqn', help='Subsystem NQN')
2798 p = subparsers.add_parser('nvmf_discovery_remove_referral', help='Remove a discovery service referral from an NVMe-oF target')
2799 p.add_argument('-t', '--trtype', help='NVMe-oF transport type: e.g., rdma', required=True)
2800 p.add_argument('-a', '--traddr', help='NVMe-oF transport address: e.g., an ip address', required=True)
2801 p.add_argument('-p', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2802 p.add_argument('-f', '--adrfam', help='NVMe-oF transport adrfam: e.g., ipv4, ipv6, ib, fc, intra_host')
2803 p.add_argument('-s', '--trsvcid', help='NVMe-oF transport service id: e.g., a port number (required for TCP and RDMA transport types)')
2804 p.add_argument('-n', '--subnqn', help='Subsystem NQN')
2812 help='Display discovery subsystem referrals of an NVMe-oF target')
2813 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2819 p = subparsers.add_parser('nvmf_subsystem_add_ns', help='Add a namespace to an NVMe-oF subsystem')
2820 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2821 p.add_argument('bdev_name', help='The name of the bdev that will back this namespace')
2822 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2823 p.add_argument('-p', '--ptpl-file', help='The persistent reservation storage location (optional)', type=str)
2824 p.add_argument('-n', '--nsid', help='The requested NSID (optional)', type=int)
2825 p.add_argument('-g', '--nguid', help='Namespace globally unique identifier (optional)')
2826 p.add_argument('-e', '--eui64', help='Namespace EUI-64 identifier (optional)')
2827 p.add_argument('-u', '--uuid', help='Namespace UUID (optional)')
2828 p.add_argument('-a', '--anagrpid', help='ANA group ID (optional)', type=int)
2830 help='Do not auto make namespace visible to controllers (optional)')
2832 help='Enable hide_metadata option to the bdev (optional)')
2842 p = subparsers.add_parser('nvmf_subsystem_set_ns_ana_group', help='Change ANA group ID of a namespace')
2843 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2844 p.add_argument('nsid', help='The requested NSID', type=int)
2845 p.add_argument('anagrpid', help='ANA group ID', type=int)
2846 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2855 p = subparsers.add_parser('nvmf_subsystem_remove_ns', help='Remove a namespace to an NVMe-oF subsystem')
2856 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2857 p.add_argument('nsid', help='The requested NSID', type=int)
2858 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2870 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2871 p.add_argument('nsid', help='The requested NSID', type=int)
2872 p.add_argument('host', help='Host NQN to make namespace visible to')
2873 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2875 p = subparsers.add_parser('nvmf_ns_add_host', help='Make namespace visible to controllers of host')
2887 p = subparsers.add_parser('nvmf_ns_remove_host', help='Make namespace not visible to controllers of host')
2900 p = subparsers.add_parser('nvmf_subsystem_add_host', help='Add a host to an NVMe-oF subsystem')
2901 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2902 p.add_argument('host', help='Host NQN to allow')
2903 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2904 p.add_argument('--psk', help='Path to PSK file for TLS authentication (optional). Only applicable for TCP transport.', type=str)
2905 p.add_argument('--dhchap-key', help='DH-HMAC-CHAP key name (optional)')
2906 p.add_argument('--dhchap-ctrlr-key', help='DH-HMAC-CHAP controller key name (optional)')
2915 p = subparsers.add_parser('nvmf_subsystem_remove_host', help='Remove a host from an NVMe-oF subsystem')
2916 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2917 p.add_argument('host', help='Host NQN to remove')
2918 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2929 p = subparsers.add_parser('nvmf_subsystem_set_keys', help='Set keys required for a host to connect to a given subsystem')
2930 p.add_argument('nqn', help='Subsystem NQN')
2931 p.add_argument('host', help='Host NQN')
2932 p.add_argument('-t', '--tgt-name', help='Name of the NVMe-oF target')
2933 p.add_argument('--dhchap-key', help='DH-HMAC-CHAP key name')
2934 p.add_argument('--dhchap-ctrlr-key', help='DH-HMAC-CHAP controller key name')
2943 p = subparsers.add_parser('nvmf_subsystem_allow_any_host', help='Allow any host to connect to the subsystem')
2944 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2945 p.add_argument('-e', '--enable', action='store_true', help='Enable allowing any host')
2946 p.add_argument('-d', '--disable', action='store_true', help='Disable allowing any host')
2947 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2956 help='Display controllers of an NVMe-oF subsystem.')
2957 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2958 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2967 help='Display queue pairs of an NVMe-oF subsystem.')
2968 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2969 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2978 help='Display listeners of an NVMe-oF subsystem.')
2979 p.add_argument('nqn', help='NVMe-oF subsystem NQN')
2980 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2987 'nvmf_get_stats', help='Display current statistics for NVMf subsystem')
2988 p.add_argument('-t', '--tgt-name', help='The name of the parent NVMe-oF target (optional)', type=str)
2996 help="""Set the 3 crdt (Command Retry Delay Time) values for NVMf subsystem. All
2998 p.add_argument('-t1', '--crdt1', help='Command Retry Delay Time 1, in units of 100 milliseconds', type=int)
2999 p.add_argument('-t2', '--crdt2', help='Command Retry Delay Time 2, in units of 100 milliseconds', type=int)
3000 p.add_argument('-t3', '--crdt3', help='Command Retry Delay Time 3, in units of 100 milliseconds', type=int)
3007 help='Publish pull registration request through mdns')
3008 p.add_argument('-t', '--tgt-name', help='The name of the NVMe-oF target (optional)', type=str)
3015 help='Stop publishing pull registration request through mdns')
3016 p.add_argument('-t', '--tgt-name', help='The name of the NVMe-oF target (optional)', type=str)
3024 help="""Print subsystems array in initialization order. Each subsystem
3031 p = subparsers.add_parser('framework_get_config', help="""Print subsystem configuration""")
3032 p.add_argument('name', help='Name of subsystem to query')
3042 p = subparsers.add_parser('vhost_controller_set_coalescing', help='Set vhost controller coalescing')
3043 p.add_argument('ctrlr', help='controller name')
3044 p.add_argument('delay_base_us', help='Base delay time', type=int)
3045 p.add_argument('iops_threshold', help='IOPS threshold when coalescing is enabled', type=int)
3052 help='Create virtio blk transport')
3053 p.add_argument('name', help='transport name')
3059 p = subparsers.add_parser('virtio_blk_get_transports', help='Display virtio-blk transports or requested transport')
3060 p.add_argument('--name', help='Transport name (optional)', type=str)
3069 p = subparsers.add_parser('vhost_create_scsi_controller', help='Add new vhost controller')
3070 p.add_argument('ctrlr', help='controller name')
3071 p.add_argument('--cpumask', help='cpu mask for this controller')
3072 p.add_argument("--delay", action='store_true', help='whether delay starting controller or not')
3079 p = subparsers.add_parser('vhost_start_scsi_controller', help='Start vhost scsi controller')
3080 p.add_argument('ctrlr', help='controller name')
3089 p = subparsers.add_parser('vhost_scsi_controller_add_target', help='Add lun to vhost controller')
3090 p.add_argument('ctrlr', help='controller name where add lun')
3091 p.add_argument('scsi_target_num', help='scsi_target_num', type=int)
3092 p.add_argument('bdev_name', help='bdev name')
3101 help='Remove target from vhost controller')
3102 p.add_argument('ctrlr', help='controller name to remove target from')
3103 p.add_argument('scsi_target_num', help='scsi_target_num', type=int)
3109 p = subparsers.add_parser('vhost_create_blk_controller', help='Add a new vhost block controller')
3110 p.add_argument('ctrlr', help='controller name')
3111 p.add_argument('dev_name', help='device name')
3112 p.add_argument('--cpumask', help='cpu mask for this controller')
3113 p.add_argument('--transport', help='virtio blk transport name (default: vhost_user_blk)')
3114 p.add_argument("-r", "--readonly", action='store_true', help='Set controller as read-only')
3115 p.add_argument("-p", "--packed_ring", action='store_true', help='Set controller as packed ring supported')
3121 p = subparsers.add_parser('vhost_get_controllers', help='List all or specific vhost controller(s)')
3122 p.add_argument('-n', '--name', help="Name of vhost controller")
3129 p = subparsers.add_parser('vhost_delete_controller', help='Delete a vhost controller')
3130 p.add_argument('ctrlr', help='controller name')
3143 help="""Attach virtio controller using provided
3147 p.add_argument('name', help="Use this name as base for new created bdevs")
3149 help='Virtio target transport type: pci or user', required=True)
3151 help='Transport type specific target address: e.g. UNIX domain socket path or BDF', required=True)
3153 help='Device type: blk or scsi', required=True)
3154 p.add_argument('--vq-count', help='Number of virtual queues to be used.', type=int)
3155 p.add_argument('--vq-size', help='Size of each queue', type=int)
3161 p = subparsers.add_parser('bdev_virtio_scsi_get_devices', help='List all Virtio-SCSI devices.')
3168 p = subparsers.add_parser('bdev_virtio_detach_controller', help="""Remove a Virtio device
3170 p.add_argument('name', help='Virtio device name. E.g. VirtioUser0')
3176 p = subparsers.add_parser('bdev_virtio_blk_set_hotplug', help='Set hotplug options for bdev virtio_blk type.')
3177 p.add_argument('-d', '--disable', dest='enable', default=False, action='store_false', help="Disable hotplug (default)")
3178 p.add_argument('-e', '--enable', dest='enable', action='store_true', help="Enable hotplug")
3180 help='How often the hotplug is processed for insert and remove events', type=int)
3187 p = subparsers.add_parser('vfu_tgt_set_base_path', help='Set socket base path.')
3188 p.add_argument('path', help='socket base path')
3194 p = subparsers.add_parser('vfu_virtio_delete_endpoint', help='Delete the PCI device via endpoint name.')
3195 p.add_argument('name', help='Endpoint name')
3207 p = subparsers.add_parser('vfu_virtio_create_blk_endpoint', help='Create virtio-blk endpoint.')
3208 p.add_argument('name', help='Name of the endpoint')
3209 p.add_argument('--bdev-name', help='block device name', type=str, required=True)
3210 p.add_argument('--cpumask', help='CPU masks')
3211 p.add_argument('--num-queues', help='number of vrings', type=int, default=0)
3212 p.add_argument('--qsize', help='number of element for each vring', type=int, default=0)
3213 p.add_argument("--packed-ring", action='store_true', help='Enable packed ring')
3222 p = subparsers.add_parser('vfu_virtio_scsi_add_target', help='Attach a block device to SCSI target of PCI endpoint.')
3223 p.add_argument('name', help='Name of the endpoint')
3224 p.add_argument('--scsi-target-num', help='number of SCSI Target', type=int, required=True)
3225 p.add_argument('--bdev-name', help='block device name', type=str, required=True)
3233 p = subparsers.add_parser('vfu_virtio_scsi_remove_target', help='Remove the specified SCSI target of PCI endpoint.')
3234 p.add_argument('name', help='Name of the endpoint')
3235 p.add_argument('--scsi-target-num', help='number of SCSI Target', type=int, required=True)
3246 p = subparsers.add_parser('vfu_virtio_create_scsi_endpoint', help='Create virtio-scsi endpoint.')
3247 p.add_argument('name', help='Name of the endpoint')
3248 p.add_argument('--cpumask', help='CPU masks')
3249 p.add_argument('--num-io-queues', help='number of IO vrings', type=int, default=0)
3250 p.add_argument('--qsize', help='number of element for each vring', type=int, default=0)
3251 p.add_argument("--packed-ring", action='store_true', help='Enable packed ring')
3264 p = subparsers.add_parser('vfu_virtio_create_fs_endpoint', help='Create virtio-fs endpoint.')
3265 p.add_argument('name', help='Name of the endpoint')
3266 p.add_argument('--fsdev-name', help='fsdev name', type=str, required=True)
3267 p.add_argument('--tag', help='virtiofs tag', type=str, required=True)
3268 p.add_argument('--cpumask', help='CPU masks')
3269 p.add_argument('--num-queues', help='number of vrings', type=int, default=0)
3270 p.add_argument('--qsize', help='number of element for each vring', type=int, default=0)
3271 p.add_argument("--packed-ring", action='store_true', help='Enable packed ring')
3278 p = subparsers.add_parser('accel_get_opc_assignments', help='Get list of opcode name to module assignments.')
3285 help='Get list of valid module names and their operations.')
3291 p = subparsers.add_parser('accel_assign_opc', help='Manually assign an operation to a module.')
3292 p.add_argument('-o', '--opname', help='opname')
3293 p.add_argument('-m', '--module', help='name of module')
3304 p = subparsers.add_parser('accel_crypto_key_create', help='Create encryption key')
3305 p.add_argument('-c', '--cipher', help='cipher', required=True)
3306 p.add_argument('-k', '--key', help='key', required=True)
3307 p.add_argument('-e', '--key2', help='key2', default=None)
3308 p.add_argument('-t', '--tweak-mode', help='tweak mode', default=None)
3309 p.add_argument('-n', '--name', help='key name', required=True)
3316 p = subparsers.add_parser('accel_crypto_key_destroy', help='Destroy encryption key')
3317 p.add_argument('-n', '--name', help='key name', required=True, type=str)
3324 p = subparsers.add_parser('accel_crypto_keys_get', help='Get a list of the crypto keys')
3325 p.add_argument('-k', '--key-name', help='Get information about a specific key', type=str)
3331 p = subparsers.add_parser('accel_set_driver', help='Select accel platform driver to execute ' +
3333 p.add_argument('name', help='name of the platform driver')
3340 p = subparsers.add_parser('accel_set_options', help='Set accel framework\'s options')
3341 p.add_argument('--small-cache-size', type=int, help='Size of the small iobuf cache')
3342 p.add_argument('--large-cache-size', type=int, help='Size of the large iobuf cache')
3343 p.add_argument('--task-count', type=int, help='Maximum number of tasks per IO channel')
3344 p.add_argument('--sequence-count', type=int, help='Maximum number of sequences per IO channel')
3345 p.add_argument('--buf-count', type=int, help='Maximum number of buffers per IO channel')
3351 p = subparsers.add_parser('accel_get_stats', help='Display accel framework\'s statistics')
3359 help='Enable IOAT accel module offload.')
3366 p = subparsers.add_parser('compressdev_scan_accel_module', help='Scan and enable compressdev module and set pmd option.')
3367 p.add_argument('-p', '--pmd', type=int, help='0 = auto-select, 1= QAT only, 2 = mlx5_pci only, 3 = uadk only')
3375 help='Set config and enable dsa accel module offload.')
3376 p.add_argument('-k', '--config-kernel-mode', help='Use Kernel mode dsa',
3385 help='Set config and enable iaa accel module offload.')
3392 help='Enable dpdk_cryptodev accel module offload.')
3400 help='Set the DPDK cryptodev driver.')
3401 p.add_argument('-d', '--driver-name', help='The driver, can be one of crypto_aesni_mb, crypto_qat or mlx5_pci', type=str)
3407 p = subparsers.add_parser('dpdk_cryptodev_get_driver', help='Get the DPDK cryptodev driver')
3419 p = subparsers.add_parser('mlx5_scan_accel_module', help='Enable mlx5 accel module.')
3420 p.add_argument('-q', '--qp-size', type=int, help='QP size')
3421 p.add_argument('-r', '--num-requests', type=int, help='Size of the shared requests pool')
3422 p.add_argument('-d', '--allowed-devs', help="Comma separated list of allowed device names, e.g. mlx5_0,mlx5_1")
3424 help="Number of data blocks to be processed in 1 crypto UMR. [0-65535], 0 means no limit")
3426 help="Enable mlx5 platform driver. Note: the driver supports reduced scope of operations, enable with care")
3432 p = subparsers.add_parser('accel_mlx5_dump_stats', help='Dump accel mlx5 module statistics.')
3433 p.add_argument('-l', '--level', type=str, help='Verbose level, one of \"total\", \"channel\" or \"device\"')
3443 help='Inject an error to processing accel operation')
3444 p.add_argument('-o', '--opcode', help='Opcode')
3446 help='Error type ("corrupt": corrupt the data, "failure": fail the operation, "disable": disable error injection)')
3448 help='Number of errors to inject on each IO channel (0 to disable error injection)')
3449 p.add_argument('-i', '--interval', type=int, help='Interval between injections')
3450 p.add_argument('--errcode', type=int, help='Error code to inject (only relevant for type=failure)')
3459 p = subparsers.add_parser('bdev_nvme_opal_init', help='take ownership and activate')
3460 p.add_argument('-b', '--nvme-ctrlr-name', help='nvme ctrlr name')
3461 p.add_argument('-p', '--password', help='password for admin')
3468 p = subparsers.add_parser('bdev_nvme_opal_revert', help='Revert to default factory settings')
3469 p.add_argument('-b', '--nvme-ctrlr-name', help='nvme ctrlr name')
3470 p.add_argument('-p', '--password', help='password')
3482 p = subparsers.add_parser('bdev_opal_create', help="""Create opal bdev on specified NVMe controller""")
3483 p.add_argument('-b', '--nvme-ctrlr-name', help='nvme ctrlr name', required=True)
3484 p.add_argument('-n', '--nsid', help='namespace ID (only support nsid=1 for now)', type=int, required=True)
3485 p.add_argument('-i', '--locking-range-id', help='locking range id', type=int, required=True)
3486 p.add_argument('-s', '--range-start', help='locking range start LBA', type=int, required=True)
3487 p.add_argument('-l', '--range-length', help='locking range length (in blocks)', type=int, required=True)
3488 p.add_argument('-p', '--password', help='admin password', required=True)
3496 p = subparsers.add_parser('bdev_opal_get_info', help='get opal locking range info for this bdev')
3497 p.add_argument('-b', '--bdev-name', help='opal bdev')
3498 p.add_argument('-p', '--password', help='password')
3506 p = subparsers.add_parser('bdev_opal_delete', help="""delete a virtual opal bdev""")
3507 p.add_argument('-b', '--bdev-name', help='opal virtual bdev', required=True)
3508 p.add_argument('-p', '--password', help='admin password', required=True)
3518 p = subparsers.add_parser('bdev_opal_new_user', help="""Add a user to opal bdev who can set lock state for this bdev""")
3519 p.add_argument('-b', '--bdev-name', help='opal bdev', required=True)
3520 p.add_argument('-p', '--admin-password', help='admin password', required=True)
3521 p.add_argument('-i', '--user-id', help='ID for new user', type=int, required=True)
3522 p.add_argument('-u', '--user-password', help='password set for this user', required=True)
3532 p = subparsers.add_parser('bdev_opal_set_lock_state', help="""set lock state for an opal bdev""")
3533 p.add_argument('-b', '--bdev-name', help='opal bdev', required=True)
3534 p.add_argument('-i', '--user-id', help='ID of the user who want to set lock state, either admin or a user assigned to this bdev',
3536 p.add_argument('-p', '--password', help='password of this user', required=True)
3537 p.add_argument('-l', '--lock-state', help='lock state to set, choose from {readwrite, readonly, rwlock}', required=True)
3553 p = subparsers.add_parser('bdev_nvme_send_cmd', help='NVMe passthrough cmd.')
3554 p.add_argument('-n', '--nvme-name', help="""Name of the operating NVMe controller""")
3555 p.add_argument('-t', '--cmd-type', help="""Type of nvme cmd. Valid values are: admin, io""")
3556 p.add_argument('-r', '--data-direction', help="""Direction of data transfer. Valid values are: c2h, h2c""")
3557 p.add_argument('-c', '--cmdbuf', help="""NVMe command encoded by base64 urlsafe""")
3558 p.add_argument('-d', '--data', help="""Data transferring to controller from host, encoded by base64 urlsafe""")
3559 p.add_argument('-m', '--metadata', help="""Metadata transferring to controller from host, encoded by base64 urlsafe""")
3560 p.add_argument('-D', '--data-length', help="""Data length required to transfer from controller to host""", type=int)
3561 p.add_argument('-M', '--metadata-length', help="""Metadata length required to transfer from controller to host""", type=int)
3563 help="""Command execution timeout value, in milliseconds, if 0, don't track timeout""", type=int)
3570 p = subparsers.add_parser('notify_get_types', help='List available notifications that user can subscribe to.')
3579 p = subparsers.add_parser('notify_get_notifications', help='Get notifications')
3580 p.add_argument('-i', '--id', help="""First ID to start fetching from""", type=int)
3581 p.add_argument('-n', '--max', help="""Maximum number of notifications to return in response""", type=int)
3588 'thread_get_stats', help='Display current statistics of all the threads')
3596 help="""set the cpumask of the thread whose ID matches to the
3598 p.add_argument('-i', '--id', type=int, help='thread ID')
3599 p.add_argument('-m', '--cpumask', help='cpumask for this thread')
3606 help='Enable or disable timestamps.')
3607 p.add_argument('-d', '--disable', dest='enabled', default=False, action='store_false', help="Disable timestamps")
3608 p.add_argument('-e', '--enable', dest='enabled', action='store_true', help="Enable timestamps")
3615 'thread_get_pollers', help='Display current pollers of all the threads')
3622 'thread_get_io_channels', help='Display current IO channels of all the threads')
3629 'env_dpdk_get_mem_stats', help='write the dpdk memory stats to a file.')
3637 p = subparsers.add_parser('blobfs_detect', help='Detect whether a blobfs exists on bdev')
3638 p.add_argument('bdev_name', help='Blockdev name to detect blobfs. Example: Malloc0.')
3646 p = subparsers.add_parser('blobfs_create', help='Build a blobfs on bdev')
3647 p.add_argument('bdev_name', help='Blockdev name to build blobfs. Example: Malloc0.')
3649 help="""Size of cluster in bytes (Optional). Must be multiple of 4KB page size. Default and minimal value is 1M.""")
3657 p = subparsers.add_parser('blobfs_mount', help='Mount a blobfs on bdev to host path by FUSE')
3658 p.add_argument('bdev_name', help='Blockdev name where the blobfs is. Example: Malloc0.')
3659 p.add_argument('mountpoint', help='Mountpoint path in host to mount blobfs. Example: /mnt/.')
3666 p = subparsers.add_parser('blobfs_set_cache_size', help='Set cache size for blobfs')
3667 p.add_argument('size_in_mb', help='Cache size for blobfs in megabytes.', type=int)
3674 p = subparsers.add_parser('fsdev_get_opts', help='Get the fsdev subsystem options')
3681 p = subparsers.add_parser('fsdev_set_opts', help='Set the fsdev subsystem options')
3682 p.add_argument('fsdev-io-pool-size', help='Size of fsdev IO objects pool', type=int)
3683 p.add_argument('fsdev-io-cache-size', help='Size of fsdev IO objects cache per thread', type=int)
3691 p = subparsers.add_parser('fsdev_aio_create', help='Create a aio filesystem')
3692 p.add_argument('name', help='Filesystem name. Example: aio0.')
3693 p.add_argument('root_path', help='Path on the system fs to expose as SPDK filesystem')
3696 group.add_argument('--enable-xattr', help='Enable extended attributes', action='store_true', default=None)
3697 group.add_argument('--disable-xattr', help='Disable extended attributes', dest='enable_xattr', action='store_false', default=None)
3700 group.add_argument('--enable-writeback-cache', help='Enable writeback cache', action='store_true', default=None)
3701 group.add_argument('--disable-writeback-cache', help='Disable writeback cache', dest='enable_writeback_cache', action='store_false',
3704 p.add_argument('-w', '--max-write', help='Max write size in bytes', type=int)
3706 p.add_argument('--skip-rw', dest='skip_rw', help="Do not process read or write commands. This is used for testing.",
3714 p = subparsers.add_parser('fsdev_aio_delete', help='Delete a aio filesystem')
3715 p.add_argument('name', help='Filesystem name. Example: aio0.')
3723 p = subparsers.add_parser('sock_impl_get_options', help="""Get options of socket layer implementation""")
3724 p.add_argument('-i', '--impl', help='Socket implementation name, e.g. posix', required=True)
3741 p = subparsers.add_parser('sock_impl_set_options', help="""Set options of socket layer implementation""")
3742 p.add_argument('-i', '--impl', help='Socket implementation name, e.g. posix', required=True)
3743 p.add_argument('-r', '--recv-buf-size', help='Size of receive buffer on socket in bytes', type=int)
3744 p.add_argument('-s', '--send-buf-size', help='Size of send buffer on socket in bytes', type=int)
3745 p.add_argument('-p', '--enable-placement-id', help='Option for placement-id. 0:disable,1:incoming_napi,2:incoming_cpu', type=int)
3746 p.add_argument('--enable-recv-pipe', help='Enable receive pipe',
3748 p.add_argument('--disable-recv-pipe', help='Disable receive pipe',
3750 p.add_argument('--enable-quickack', help='Enable quick ACK',
3752 p.add_argument('--disable-quickack', help='Disable quick ACK',
3754 p.add_argument('--enable-zerocopy-send-server', help='Enable zerocopy on send for server sockets',
3756 p.add_argument('--disable-zerocopy-send-server', help='Disable zerocopy on send for server sockets',
3758 p.add_argument('--enable-zerocopy-send-client', help='Enable zerocopy on send for client sockets',
3760 p.add_argument('--disable-zerocopy-send-client', help='Disable zerocopy on send for client sockets',
3762 p.add_argument('--zerocopy-threshold', help='Set zerocopy_threshold in bytes', type=int)
3763 p.add_argument('--tls-version', help='TLS protocol version', type=int)
3764 p.add_argument('--enable-ktls', help='Enable Kernel TLS',
3766 p.add_argument('--disable-ktls', help='Disable Kernel TLS',
3776 p = subparsers.add_parser('sock_set_default_impl', help="""Set the default sock implementation""")
3777 p.add_argument('-i', '--impl', help='Socket implementation name, e.g. posix', required=True)
3783 p = subparsers.add_parser('sock_get_default_impl', help="Get the default sock implementation name")
3800 p = subparsers.add_parser('framework_get_pci_devices', help='''Get a list of attached PCI devices''')
3801 p.add_argument('--format-lspci', help='Format the output in a way to be consumed by lspci -F',
3817 help='Add a NVMe command error injection.')
3818 p.add_argument('-n', '--nvme-name', help="""Name of the operating NVMe controller""", required=True)
3819 p.add_argument('-t', '--cmd-type', help="""Type of NVMe command. Valid values are: admin, io""", required=True)
3820 p.add_argument('-o', '--opc', help="""Opcode of the NVMe command.""", required=True, type=int)
3822 help="""Set to true if request should not be submitted to the controller""",
3824 p.add_argument('-w', '--timeout-in-us', help="""Wait specified microseconds when do_not_submit is true""", type=int)
3825 p.add_argument('-e', '--err-count', help="""Number of matching NVMe commands to inject errors""", type=int)
3826 p.add_argument('-u', '--sct', help="""Status code type""", type=int)
3827 p.add_argument('-c', '--sc', help="""Status code""", type=int)
3837 help='Removes a NVMe command error injection.')
3838 p.add_argument('-n', '--nvme-name', help="""Name of the operating NVMe controller""", required=True)
3839 p.add_argument('-t', '--cmd-type', help="""Type of nvme cmd. Valid values are: admin, io""", required=True)
3840 p.add_argument('-o', '--opc', help="""Opcode of the nvme cmd.""", required=True, type=int)
3854 help='Create a bdev with DAOS backend')
3855 p.add_argument('name', help="Name of the bdev")
3856 p.add_argument('pool', help="UUID of the DAOS pool")
3857 p.add_argument('cont', help="UUID of the DAOS container")
3859 'total_size', help='Size of DAOS bdev in MB (float > 0)', type=float)
3860 p.add_argument('block_size', help='Block size for this bdev', type=int)
3861 p.add_argument('-u', '--uuid', help="UUID of the bdev")
3862 p.add_argument('-o', '--oclass', help="DAOS object class")
3870 help='Delete a DAOS disk')
3871 p.add_argument('name', help='DAOS bdev name')
3880 help='Resize a DAOS bdev')
3881 p.add_argument('name', help='DAOS bdev name')
3882 p.add_argument('new_size', help='new bdev size for resize operation. The unit is MiB')
3892 p = subparsers.add_parser('iobuf_set_options', help='Set iobuf pool options')
3893 p.add_argument('--small-pool-count', help='number of small buffers in the global pool', type=int)
3894 p.add_argument('--large-pool-count', help='number of large buffers in the global pool', type=int)
3895 p.add_argument('--small-bufsize', help='size of a small buffer', type=int)
3896 p.add_argument('--large-bufsize', help='size of a large buffer', type=int)
3897 p.add_argument('--enable-numa', help='enable per-NUMA node buffer pools', action='store_true')
3903 p = subparsers.add_parser('iobuf_get_stats', help='Display iobuf statistics')
3912 p = subparsers.add_parser('bdev_nvme_start_mdns_discovery', help='Start mdns based automatic discovery')
3913 p.add_argument('-b', '--name', help="Name of the NVMe controller prefix for each bdev name", required=True)
3914 p.add_argument('-s', '--svcname', help='Service type to discover: e.g., _nvme-disc._tcp', required=True)
3915 p.add_argument('-q', '--hostnqn', help='NVMe-oF host subnqn')
3921 p = subparsers.add_parser('bdev_nvme_stop_mdns_discovery', help='Stop automatic mdns discovery')
3922 p.add_argument('-b', '--name', help="Name of the service to stop", required=True)
3928 p = subparsers.add_parser('bdev_nvme_get_mdns_discovery_info', help='Get information about the automatic mdns discovery')
3934 p = subparsers.add_parser('keyring_file_add_key', help='Add a file-based key to the keyring')
3935 p.add_argument('name', help='Name of the key to add')
3936 p.add_argument('path', help='Path of the file containing the key')
3942 p = subparsers.add_parser('keyring_file_remove_key', help='Remove a file-based key from the keyring')
3943 p.add_argument('name', help='Name of the key to remove')
3949 p = subparsers.add_parser('keyring_get_keys', help='Get a list of registered keys')
3955 p = subparsers.add_parser('keyring_linux_set_options', help='Set options of the keyring_linux module')
3956 p.add_argument('-e', '--enable', help='Enable keyring_linux module', action='store_true')
3998 plugin_parser.add_argument('--plugin', dest='rpc_plugin', help='Module name of plugin with additional RPC commands')