summaryrefslogtreecommitdiffstats
path: root/src/spdk/scripts/rpc/vhost.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/spdk/scripts/rpc/vhost.py')
-rw-r--r--src/spdk/scripts/rpc/vhost.py248
1 files changed, 248 insertions, 0 deletions
diff --git a/src/spdk/scripts/rpc/vhost.py b/src/spdk/scripts/rpc/vhost.py
new file mode 100644
index 00000000..bc97455a
--- /dev/null
+++ b/src/spdk/scripts/rpc/vhost.py
@@ -0,0 +1,248 @@
+def set_vhost_controller_coalescing(client, ctrlr, delay_base_us, iops_threshold):
+ """Set coalescing for vhost controller.
+ Args:
+ ctrlr: controller name
+ delay_base_us: base delay time
+ iops_threshold: IOPS threshold when coalescing is enabled
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'delay_base_us': delay_base_us,
+ 'iops_threshold': iops_threshold,
+ }
+ return client.call('set_vhost_controller_coalescing', params)
+
+
+def construct_vhost_scsi_controller(client, ctrlr, cpumask=None):
+ """Construct a vhost scsi controller.
+ Args:
+ ctrlr: controller name
+ cpumask: cpu mask for this controller
+ """
+ params = {'ctrlr': ctrlr}
+
+ if cpumask:
+ params['cpumask'] = cpumask
+
+ return client.call('construct_vhost_scsi_controller', params)
+
+
+def add_vhost_scsi_lun(client, ctrlr, scsi_target_num, bdev_name):
+ """Add LUN to vhost scsi controller target.
+ Args:
+ ctrlr: controller name
+ scsi_target_num: target number to use
+ bdev_name: name of bdev to add to target
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'scsi_target_num': scsi_target_num,
+ 'bdev_name': bdev_name,
+ }
+ return client.call('add_vhost_scsi_lun', params)
+
+
+def remove_vhost_scsi_target(client, ctrlr, scsi_target_num):
+ """Remove target from vhost scsi controller.
+ Args:
+ ctrlr: controller name to remove target from
+ scsi_target_num: number of target to remove from controller
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'scsi_target_num': scsi_target_num
+ }
+ return client.call('remove_vhost_scsi_target', params)
+
+
+def construct_vhost_nvme_controller(client, ctrlr, io_queues, cpumask=None):
+ """Construct vhost NVMe controller.
+ Args:
+ ctrlr: controller name
+ io_queues: number of IO queues for the controller
+ cpumask: cpu mask for this controller
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'io_queues': io_queues
+ }
+
+ if cpumask:
+ params['cpumask'] = cpumask
+
+ return client.call('construct_vhost_nvme_controller', params)
+
+
+def add_vhost_nvme_ns(client, ctrlr, bdev_name):
+ """Add namespace to vhost nvme controller.
+ Args:
+ ctrlr: controller name where to add a namespace
+ bdev_name: block device name for a new namespace
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'bdev_name': bdev_name,
+ }
+
+ return client.call('add_vhost_nvme_ns', params)
+
+
+def construct_vhost_blk_controller(client, ctrlr, dev_name, cpumask=None, readonly=None):
+ """Construct vhost BLK controller.
+ Args:
+ ctrlr: controller name
+ dev_name: device name to add to controller
+ cpumask: cpu mask for this controller
+ readonly: set controller as read-only
+ """
+ params = {
+ 'ctrlr': ctrlr,
+ 'dev_name': dev_name,
+ }
+ if cpumask:
+ params['cpumask'] = cpumask
+ if readonly:
+ params['readonly'] = readonly
+ return client.call('construct_vhost_blk_controller', params)
+
+
+def get_vhost_controllers(client, name=None):
+ """Get information about configured vhost controllers.
+
+ Args:
+ name: controller name to query (optional; if omitted, query all controllers)
+
+ Returns:
+ List of vhost controllers.
+ """
+ params = {}
+ if name:
+ params['name'] = name
+ return client.call('get_vhost_controllers', params)
+
+
+def remove_vhost_controller(client, ctrlr):
+ """Remove vhost controller from configuration.
+ Args:
+ ctrlr: controller name to remove
+ """
+ params = {'ctrlr': ctrlr}
+ return client.call('remove_vhost_controller', params)
+
+
+def construct_virtio_dev(client, name, trtype, traddr, dev_type, vq_count=None, vq_size=None):
+ """Construct new virtio device using provided
+ transport type and device type.
+ Args:
+ name: name base for new created bdevs
+ trtype: virtio target transport type: pci or user
+ traddr: transport type specific target address: e.g. UNIX
+ domain socket path or BDF
+ dev_type: device type: blk or scsi
+ vq_count: number of virtual queues to be used
+ vq_size: size of each queue
+ """
+ params = {
+ 'name': name,
+ 'trtype': trtype,
+ 'traddr': traddr,
+ 'dev_type': dev_type
+ }
+ if vq_count:
+ params['vq_count'] = vq_count
+ if vq_size:
+ params['vq_size'] = vq_size
+ return client.call('construct_virtio_dev', params)
+
+
+def construct_virtio_user_scsi_bdev(client, path, name, vq_count=None, vq_size=None):
+ """Connect to virtio user scsi device.
+ Args:
+ path: path to Virtio SCSI socket
+ name: use this name as base instead of 'VirtioScsiN'
+ vq_count: number of virtual queues to be used
+ vq_size: size of each queue
+ """
+ params = {
+ 'path': path,
+ 'name': name,
+ }
+ if vq_count:
+ params['vq_count'] = vq_count
+ if vq_size:
+ params['vq_size'] = vq_size
+ return client.call('construct_virtio_user_scsi_bdev', params)
+
+
+def construct_virtio_pci_scsi_bdev(client, pci_address, name):
+ """Create a Virtio SCSI device from a virtio-pci device.
+ Args:
+ pci_address: PCI address in domain:bus:device.function format or
+ domain.bus.device.function format
+ name: Name for the virtio device. It will be inhereted by all created
+ bdevs, which are named n the following format:
+ <name>t<target_id>
+ """
+ params = {
+ 'pci_address': pci_address,
+ 'name': name,
+ }
+ return client.call('construct_virtio_pci_scsi_bdev', params)
+
+
+def remove_virtio_scsi_bdev(client, name):
+ """Remove a Virtio-SCSI device
+ This will delete all bdevs exposed by this device.
+ Args:
+ name: virtio device name
+ """
+ params = {'name': name}
+ return client.call('remove_virtio_scsi_bdev', params)
+
+
+def remove_virtio_bdev(client, name):
+ """Remove a Virtio device
+ This will delete all bdevs exposed by this device.
+ Args:
+ name: virtio device name
+ """
+ params = {'name': name}
+ return client.call('remove_virtio_bdev', params)
+
+
+def get_virtio_scsi_devs(client):
+ """Get list of virtio scsi devices."""
+ return client.call('get_virtio_scsi_devs')
+
+
+def construct_virtio_user_blk_bdev(client, path, name, vq_count=None, vq_size=None):
+ """Connect to virtio user BLK device.
+ Args:
+ path: path to Virtio BLK socket
+ name: use this name as base instead of 'VirtioScsiN'
+ vq_count: number of virtual queues to be used
+ vq_size: size of each queue
+ """
+ params = {
+ 'path': path,
+ 'name': name,
+ }
+ if vq_count:
+ params['vq_count'] = vq_count
+ if vq_size:
+ params['vq_size'] = vq_size
+ return client.call('construct_virtio_user_blk_bdev', params)
+
+
+def construct_virtio_pci_blk_bdev(client, pci_address, name):
+ """Create a Virtio Blk device from a virtio-pci device.
+ Args:
+ pci_address: PCI address in domain:bus:device.function format or
+ domain.bus.device.function format
+ name: name for the blk device
+ """
+ params = {
+ 'pci_address': pci_address,
+ 'name': name,
+ }
+ return client.call('construct_virtio_pci_blk_bdev', params)