The recent qemu requires "0x" prefix for the disk wwn, this patch changes virValidateWWN to allow the prefix, and prepend "0x" if it's not specified. E.g. qemu-kvm: -device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,\ drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,wwn=6000c60016ea71ad: Property 'scsi-hd.wwn' doesn't take value '6000c60016ea71ad' --- docs/schemas/basictypes.rng | 2 +- src/qemu/qemu_command.c | 8 ++++++-- src/util/virutil.c | 12 +++++++++--- tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args | 2 +- tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args | 4 ++-- tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml | 2 +- 6 files changed, 20 insertions(+), 10 deletions(-) diff --git a/docs/schemas/basictypes.rng b/docs/schemas/basictypes.rng index adaedd8..34c2254 100644 --- a/docs/schemas/basictypes.rng +++ b/docs/schemas/basictypes.rng @@ -280,7 +280,7 @@ <define name='wwn'> <data type='string'> - <param name='pattern'>[0-9a-fA-F]{16}</param> + <param name='pattern'>(0x)?[0-9a-fA-F]{16}</param> </data> </define> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 63b9350..009d42d 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -3358,8 +3358,12 @@ qemuBuildDriveDevStr(virDomainDefPtr def, disk->blockio.physical_block_size); } - if (disk->wwn) - virBufferAsprintf(&opt, ",wwn=%s", disk->wwn); + if (disk->wwn) { + if (STRPREFIX(disk->wwn, "0x")) + virBufferAsprintf(&opt, ",wwn=%s", disk->wwn); + else + virBufferAsprintf(&opt, ",wwn=0x%s", disk->wwn); + } if (disk->vendor) virBufferAsprintf(&opt, ",vendor=%s", disk->vendor); diff --git a/src/util/virutil.c b/src/util/virutil.c index 0e4063b..6890362 100644 --- a/src/util/virutil.c +++ b/src/util/virutil.c @@ -3228,12 +3228,18 @@ bool virIsDevMapperDevice(const char *dev_name ATTRIBUTE_UNUSED) bool virValidateWWN(const char *wwn) { int i; + const char *p = wwn; - for (i = 0; wwn[i]; i++) - if (!c_isxdigit(wwn[i])) + if (STRPREFIX(wwn, "0x")) { + p += 2; + } + + for (i = 0; p[i]; i++) { + if (!c_isxdigit(p[i])) break; + } - if (i != 16 || wwn[i]) { + if (i != 16 || p[i]) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("Malformed wwn: %s")); return false; diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args index 1633d29..3b9693c 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-ide-wwn.args @@ -2,5 +2,5 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \ /usr/bin/qemu -S -M pc -m 214 -smp 1 -nographic -nodefaults \ -monitor unix:/tmp/test-monitor,server,nowait -no-acpi -boot c -usb \ -drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-ide0-0-1,serial=WD-WMAP9A966149 \ --device ide-hd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,wwn=5000c50015ea71ad \ +-device ide-hd,bus=ide.0,unit=1,drive=drive-ide0-0-1,id=ide0-0-1,wwn=0x5000c50015ea71ad \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args index 0393640..0dd2aa9 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.args @@ -5,7 +5,7 @@ LC_ALL=C PATH=/bin HOME=/home/test USER=test LOGNAME=test \ -device lsi,id=scsi1,bus=pci.0,addr=0x4 \ -usb \ -drive file=/dev/HostVG/QEMUGuest1,if=none,id=drive-scsi0-0-1-0 \ --device scsi-cd,bus=scsi0.0,channel=0,scsi-id=1,lun=0,drive=drive-scsi0-0-1-0,id=scsi0-0-1-0,wwn=5000c50015ea71ac \ +-device scsi-cd,bus=scsi0.0,channel=0,scsi-id=1,lun=0,drive=drive-scsi0-0-1-0,id=scsi0-0-1-0,wwn=0x5000c50015ea71ac \ -drive file=/dev/HostVG/QEMUGuest2,if=none,id=drive-scsi0-0-0-0 \ --device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,wwn=5000c50015ea71ad \ +-device scsi-hd,bus=scsi0.0,channel=0,scsi-id=0,lun=0,drive=drive-scsi0-0-0-0,id=scsi0-0-0-0,wwn=0x5000c50015ea71ad \ -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x5 diff --git a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml index dc35548..caf957b 100644 --- a/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml +++ b/tests/qemuxml2argvdata/qemuxml2argv-disk-scsi-disk-wwn.xml @@ -25,7 +25,7 @@ <source dev='/dev/HostVG/QEMUGuest2'/> <target dev='sdb' bus='scsi'/> <address type='drive' controller='0' bus='0' target='0' unit='0'/> - <wwn>5000c50015ea71ad</wwn> + <wwn>0x5000c50015ea71ad</wwn> </disk> <controller type='usb' index='0'/> <controller type='scsi' index='0' model='virtio-scsi'/> -- 1.8.1.4 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list