From 6e2665f6dc298487497eaf18c11a0f74f687d092 Mon Sep 17 00:00:00 2001 Message-Id: <6e2665f6dc298487497eaf18c11a0f74f687d092.1305127059.git.jdenemar@redhat.com> From: Eric Blake <eblake@redhat.com> Date: Mon, 9 May 2011 17:22:12 -0600 Subject: [PATCH] Add smbios element to schema and configuration to HVM os https://bugzilla.redhat.com/show_bug.cgi?id=661365 the element has a mode attribute allowing only 3 values: - emulate: use the smbios emulation from the hypervisor - host: try to use the smbios values from the node - sysinfo: grab the values from the <sysinfo> fields * docs/schemas/domain.rng: extend the schemas * src/conf/domain_conf.h: add the flag to the domain config * src/conf/domain_conf.h: parse and serialize the smbios if present (cherry picked from commit d528b52ff96aaef1d7e58e91bc276bd1d5d6ece2) Conflicts: docs/schemas/domain.rng - context --- docs/schemas/domain.rng | 16 ++++++++++++++++ src/conf/domain_conf.c | 32 ++++++++++++++++++++++++++++++++ src/conf/domain_conf.h | 11 +++++++++++ 3 files changed, 59 insertions(+), 0 deletions(-) diff --git a/docs/schemas/domain.rng b/docs/schemas/domain.rng index d8c24ea..89fc5dd 100644 --- a/docs/schemas/domain.rng +++ b/docs/schemas/domain.rng @@ -122,6 +122,9 @@ <ref name="osbootdev"/> </oneOrMore> </choice> + <optional> + <ref name="smbios"/> + </optional> </interleave> </element> </define> @@ -1697,6 +1700,19 @@ </data> </define> + <define name="smbios"> + <element name="smbios"> + <attribute name="mode"> + <choice> + <value>emulate</value> + <value>host</value> + <value>sysinfo</value> + </choice> + </attribute> + <empty/> + </element> + </define> + <define name="address"> <element name="address"> <choice> diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 716f2a4..eebc504 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -192,6 +192,12 @@ VIR_ENUM_IMPL(virDomainSoundModel, VIR_DOMAIN_SOUND_MODEL_LAST, VIR_ENUM_IMPL(virDomainSysinfo, VIR_DOMAIN_SYSINFO_LAST, "smbios") +VIR_ENUM_IMPL(virDomainSmbiosMode, VIR_DOMAIN_SMBIOS_LAST, + "none", + "emulate", + "host", + "sysinfo") + VIR_ENUM_IMPL(virDomainWatchdogModel, VIR_DOMAIN_WATCHDOG_MODEL_LAST, "i6300esb", "ib700") @@ -4813,6 +4819,20 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, if (def->sysinfo == NULL) goto error; } + tmp = virXPathString("string(./os/smbios/@mode)", ctxt); + if (tmp) { + int mode; + + if ((mode = virDomainSmbiosModeTypeFromString(tmp)) < 0) { + virDomainReportError(VIR_ERR_INTERNAL_ERROR, + _("unknown smbios mode '%s'"), tmp); + goto error; + } + def->os.smbios_mode = mode; + VIR_FREE(tmp); + } else { + def->os.smbios_mode = VIR_DOMAIN_SMBIOS_NONE; /* not present */ + } /* Auto-add any implied controllers which aren't present */ @@ -6384,6 +6404,18 @@ char *virDomainDefFormat(virDomainDefPtr def, } } + if (def->os.smbios_mode) { + const char *mode; + + mode = virDomainSmbiosModeTypeToString(def->os.smbios_mode); + if (mode == NULL) { + virDomainReportError(VIR_ERR_INTERNAL_ERROR, + _("unexpected smbios mode %d"), def->os.smbios_mode); + goto cleanup; + } + virBufferVSprintf(&buf, " <smbios mode='%s'/>\n", mode); + } + virBufferAddLit(&buf, " </os>\n"); if (def->features) { diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 606d6c7..5a48231 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -585,6 +585,15 @@ struct _virSysinfoDef { char *system_sku; }; +enum virDomainSmbiosMode { + VIR_DOMAIN_SMBIOS_NONE, + VIR_DOMAIN_SMBIOS_EMULATE, + VIR_DOMAIN_SMBIOS_HOST, + VIR_DOMAIN_SMBIOS_SYSINFO, + + VIR_DOMAIN_SMBIOS_LAST +}; + /* Flags for the 'type' field in next struct */ enum virDomainDeviceType { VIR_DOMAIN_DEVICE_DISK, @@ -666,6 +675,7 @@ struct _virDomainOSDef { char *loader; char *bootloader; char *bootloaderArgs; + int smbios_mode; }; enum virDomainSeclabelType { @@ -1137,6 +1147,7 @@ VIR_ENUM_DECL(virDomainChrTarget) VIR_ENUM_DECL(virDomainChr) VIR_ENUM_DECL(virDomainSoundModel) VIR_ENUM_DECL(virDomainSysinfo) +VIR_ENUM_DECL(virDomainSmbiosMode) VIR_ENUM_DECL(virDomainWatchdogModel) VIR_ENUM_DECL(virDomainWatchdogAction) VIR_ENUM_DECL(virDomainVideo) -- 1.7.5.rc3