From: Rayhan Faizel Date: Tue, 19 Mar 2024 15:16:30 +0000 (+0100) Subject: qemu_command: Generate command line for MTP filesystem X-Git-Tag: v10.2.0-rc1~32 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c836887a0293977a93845f79294fb69778d5435f;p=thirdparty%2Flibvirt.git qemu_command: Generate command line for MTP filesystem The source tag sets the rootdir property of the device, which is the directory exposed to the guest via the MTP device. The target tag sets the desc property. This device supports read-only mode as well. Like virtiofs, it does not support additional access modes. Signed-off-by: Rayhan Faizel Signed-off-by: Michal Privoznik Reviewed-by: Michal Privoznik --- diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7fab86d47f..2bb1b6a0e7 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -2311,6 +2311,33 @@ qemuBuildDisksCommandLine(virCommand *cmd, } +static int +qemuBuildMTPCommandLine(virCommand *cmd, + virDomainFSDef *fs, + const virDomainDef *def, + virQEMUCaps *qemuCaps) +{ + g_autoptr(virJSONValue) props = NULL; + + if (virJSONValueObjectAdd(&props, + "s:driver", "usb-mtp", + "s:id", fs->info.alias, + "s:rootdir", fs->src->path, + "s:desc", fs->dst, + "b:readonly", fs->readonly, + NULL) < 0) + return -1; + + if (qemuBuildDeviceAddressProps(props, def, &fs->info) < 0) + return -1; + + if (qemuBuildDeviceCommandlineFromJSON(cmd, props, def, qemuCaps) < 0) + return -1; + + return 0; +} + + virJSONValue * qemuBuildVHostUserFsDevProps(virDomainFSDef *fs, const virDomainDef *def, @@ -2494,10 +2521,15 @@ qemuBuildFilesystemCommandLine(virCommand *cmd, return -1; break; + case VIR_DOMAIN_FS_DRIVER_TYPE_MTP: + /* Media Transfer Protocol over USB */ + if (qemuBuildMTPCommandLine(cmd, def->fss[i], def, qemuCaps) < 0) + return -1; + break; + case VIR_DOMAIN_FS_DRIVER_TYPE_LOOP: case VIR_DOMAIN_FS_DRIVER_TYPE_NBD: case VIR_DOMAIN_FS_DRIVER_TYPE_PLOOP: - case VIR_DOMAIN_FS_DRIVER_TYPE_MTP: case VIR_DOMAIN_FS_DRIVER_TYPE_LAST: break; } diff --git a/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.args b/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.args new file mode 100644 index 0000000000..71020e6e5e --- /dev/null +++ b/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.args @@ -0,0 +1,35 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=4194304k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":4294967296}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 2d4d4b20-b19b-4713-af0a-bf1cab8b455b \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-device '{"driver":"usb-mtp","id":"fs0","rootdir":"/tmp/testdir1","desc":"readwrite-fs","readonly":false,"bus":"usb.0","port":"1"}' \ +-device '{"driver":"usb-mtp","id":"fs1","rootdir":"/tmp/testdir2","desc":"readonly-fs","readonly":true,"bus":"usb.0","port":"2"}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.xml b/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.xml new file mode 100644 index 0000000000..9b0dd7ef86 --- /dev/null +++ b/tests/qemuxmlconfdata/mtp-usb-device.x86_64-latest.xml @@ -0,0 +1,42 @@ + + QEMUGuest1 + 2d4d4b20-b19b-4713-af0a-bf1cab8b455b + 4194304 + 4194304 + 1 + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + +
+ + + + + + + + + + + + + + + +