From 1f2bd1072a9abbafb8a264f0c985fb8575b64cd7 Mon Sep 17 00:00:00 2001 From: Jean-Baptiste Rouault Date: Wed, 11 Jul 2012 12:16:34 +0200 Subject: [PATCH] vmx: handle shared folders formatting This patch adds support for generating vmx files with shared folders enabled. Update test suite accordingly. --- src/vmx/vmx.c | 59 +++++++++++++++++++++- src/vmx/vmx.h | 3 ++ tests/xml2vmxdata/xml2vmx-sharedfolder.vmx | 18 +++++++ tests/xml2vmxdata/xml2vmx-sharedfolder.xml | 14 +++++ tests/xml2vmxtest.c | 2 + 5 files changed, 95 insertions(+), 1 deletion(-) create mode 100644 tests/xml2vmxdata/xml2vmx-sharedfolder.vmx create mode 100644 tests/xml2vmxdata/xml2vmx-sharedfolder.xml diff --git a/src/vmx/vmx.c b/src/vmx/vmx.c index 3f05b168dc..e9131272f8 100644 --- a/src/vmx/vmx.c +++ b/src/vmx/vmx.c @@ -261,6 +261,29 @@ def->disks[0]... +################################################################################ +## filesystems ################################################################# + + isolation.tools.hgfs.disable = "false" # defaults to "true" + +def->nfss = 1 <=> sharedFolder.maxNum = "1" # must match the number of shared folders + + sharedFolder[0..n] -> + +def->fss[0]... <=> sharedFolder0.present = "true" # defaults to "false" + sharedFolder0.enabled = "true" # defaults to "false" + sharedFolder0.expiration = "never" # defaults to "never" + sharedFolder0.readAccess = "true" # defaults to "false" +->type = _FS_TYPE_MOUNT +->fsdriver +->accessmode +->wrpolicy +->src = <=> sharedFolder0.hostPath = "" # defaults to ? +->dst = <=> sharedFolder0.guestName = "" +->readonly = <=> sharedFolder0.writeAccess = "" # "true" -> = 0, "false" -> = 1 + + + ################################################################################ ## nets ######################################################################## @@ -3138,7 +3161,16 @@ virVMXFormatConfig(virVMXContext *ctx, virCapsPtr caps, virDomainDefPtr def, } /* def:fss */ - /* FIXME */ + if (def->nfss > 0) { + virBufferAddLit(&buffer, "isolation.tools.hgfs.disable = \"false\"\n"); + virBufferAsprintf(&buffer, "sharedFolder.maxNum = \"%d\"\n", def->nfss); + } + + for (i = 0; i < def->nfss; ++i) { + if (virVMXFormatFileSystem(def->fss[i], i, &buffer) < 0) { + goto cleanup; + } + } /* def:nets */ for (i = 0; i < def->nnets; ++i) { @@ -3491,6 +3523,31 @@ virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def, +int +virVMXFormatFileSystem(virDomainFSDefPtr def, int number, virBufferPtr buffer) +{ + if (def->type != VIR_DOMAIN_FS_TYPE_MOUNT) { + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, + _("Only '%s' filesystem type is supported"), + virDomainFSTypeToString(VIR_DOMAIN_FS_TYPE_MOUNT)); + return -1; + } + + virBufferAsprintf(buffer, "sharedFolder%d.present = \"true\"\n", number); + virBufferAsprintf(buffer, "sharedFolder%d.enabled = \"true\"\n", number); + virBufferAsprintf(buffer, "sharedFolder%d.readAccess = \"true\"\n", number); + virBufferAsprintf(buffer, "sharedFolder%d.writeAccess = \"%s\"\n", number, + def->readonly ? "false" : "true"); + virBufferAsprintf(buffer, "sharedFolder%d.hostPath = \"%s\"\n", number, + def->src); + virBufferAsprintf(buffer, "sharedFolder%d.guestName = \"%s\"\n", number, + def->dst); + + return 0; +} + + + int virVMXFormatEthernet(virDomainNetDefPtr def, int controller, virBufferPtr buffer) diff --git a/src/vmx/vmx.h b/src/vmx/vmx.h index 4d546607be..64f5abce00 100644 --- a/src/vmx/vmx.h +++ b/src/vmx/vmx.h @@ -120,6 +120,9 @@ int virVMXFormatCDROM(virVMXContext *ctx, virDomainDiskDefPtr def, int virVMXFormatFloppy(virVMXContext *ctx, virDomainDiskDefPtr def, virBufferPtr buffer, bool floppy_present[2]); +int virVMXFormatFileSystem(virDomainFSDefPtr def, int number, + virBufferPtr buffer); + int virVMXFormatEthernet(virDomainNetDefPtr def, int controller, virBufferPtr buffer); diff --git a/tests/xml2vmxdata/xml2vmx-sharedfolder.vmx b/tests/xml2vmxdata/xml2vmx-sharedfolder.vmx new file mode 100644 index 0000000000..15a322a93e --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-sharedfolder.vmx @@ -0,0 +1,18 @@ +.encoding = "UTF-8" +config.version = "8" +virtualHW.version = "4" +guestOS = "other" +uuid.bios = "56 4d 9b ef ac d9 b4 e0-c8 f0 ae a8 b9 10 35 15" +displayName = "sharedFolder" +memsize = "4" +numvcpus = "1" +floppy0.present = "false" +floppy1.present = "false" +isolation.tools.hgfs.disable = "false" +sharedFolder.maxNum = "1" +sharedFolder0.present = "true" +sharedFolder0.enabled = "true" +sharedFolder0.readAccess = "true" +sharedFolder0.writeAccess = "true" +sharedFolder0.hostPath = "/path/to/shared" +sharedFolder0.guestName = "shared" diff --git a/tests/xml2vmxdata/xml2vmx-sharedfolder.xml b/tests/xml2vmxdata/xml2vmx-sharedfolder.xml new file mode 100644 index 0000000000..2cc87d5968 --- /dev/null +++ b/tests/xml2vmxdata/xml2vmx-sharedfolder.xml @@ -0,0 +1,14 @@ + + sharedFolder + 564d9bef-acd9-b4e0-c8f0-aea8b9103515 + 4096 + + hvm + + + + + + + + diff --git a/tests/xml2vmxtest.c b/tests/xml2vmxtest.c index 60a24b2a6b..451b1e4822 100644 --- a/tests/xml2vmxtest.c +++ b/tests/xml2vmxtest.c @@ -255,6 +255,8 @@ mymain(void) DO_TEST("floppy-file", "floppy-file", 4); DO_TEST("floppy-device", "floppy-device", 4); + DO_TEST("sharedfolder", "sharedfolder", 4); + DO_TEST("ethernet-e1000", "ethernet-e1000", 4); DO_TEST("ethernet-vmxnet2", "ethernet-vmxnet2", 4);