Re: [libvirt] [PATCH 1/6] Change the internal domain conf representation of localtime/utc
On Thu, Feb 18, 2010 at 05:54:27PM +, Daniel P. Berrange wrote: > The XML will soon be extended to allow more than just a simple > localtime/utc boolean flag. This change replaces the plain > 'int localtime' with a separate struct to prepare for future > extension > > * src/conf/domain_conf.c, src/conf/domain_conf.h: Add a new > virDomainClockDef structure > * src/libvirt_private.syms: Export virDomainClockOffsetTypeToString > and virDomainClockOffsetTypeFromString > * src/qemu/qemu_conf.c, src/vbox/vbox_tmpl.c, src/xen/xend_internal.c, > src/xen/xm_internal.c: Updated to use new structure for localtime > --- > src/conf/domain_conf.c | 19 +++ > src/conf/domain_conf.h | 16 +++- > src/libvirt_private.syms |2 ++ > src/qemu/qemu_conf.c | 11 +-- > src/vbox/vbox_tmpl.c |2 +- > src/xen/xend_internal.c | 16 +++- > src/xen/xm_internal.c| 21 ++--- > 7 files changed, 71 insertions(+), 16 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 561fa22..f86b4eb 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c > @@ -229,6 +229,10 @@ VIR_ENUM_IMPL(virDomainNetdevMacvtap, > VIR_DOMAIN_NETDEV_MACVTAP_MODE_LAST, >"private", >"bridge") > > +VIR_ENUM_IMPL(virDomainClockOffset, VIR_DOMAIN_CLOCK_OFFSET_LAST, > + "utc", > + "localtime"); > + > #define virDomainReportError(code, fmt...) \ > virReportErrorHelper(NULL, VIR_FROM_DOMAIN, code, __FILE__, \ > __FUNCTION__, __LINE__, fmt) > @@ -3478,9 +3482,16 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr > caps, > > > tmp = virXPathString("string(./clock/@offset)", ctxt); > -if (tmp && STREQ(tmp, "localtime")) > -def->localtime = 1; > -VIR_FREE(tmp); > +if (tmp) { > +if ((def->clock.offset = virDomainClockOffsetTypeFromString(tmp)) < > 0) { > +virDomainReportError(VIR_ERR_INTERNAL_ERROR, > + _("unknown clock offset '%s'"), tmp); > +goto error; > +} > +VIR_FREE(tmp); > +} else { > +def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC; > +} > > def->os.bootloader = virXPathString("string(./bootloader)", ctxt); > def->os.bootloaderArgs = virXPathString("string(./bootloader_args)", > ctxt); > @@ -5389,7 +5400,7 @@ char *virDomainDefFormat(virDomainDefPtr def, > goto cleanup; > > virBufferVSprintf(&buf, " \n", > - def->localtime ? "localtime" : "utc"); > + virDomainClockOffsetTypeToString(def->clock.offset)); > > if (virDomainLifecycleDefFormat(&buf, def->onPoweroff, > "on_poweroff") < 0) > diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > index 231d8c8..fbbe683 100644 > --- a/src/conf/domain_conf.h > +++ b/src/conf/domain_conf.h > @@ -609,6 +609,19 @@ struct _virSecurityLabelDef { > int type; > }; > > +enum virDomainClockOffsetType { > +VIR_DOMAIN_CLOCK_OFFSET_UTC = 0, > +VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1, > + > +VIR_DOMAIN_CLOCK_OFFSET_LAST, > +}; > + > +typedef struct _virDomainClockDef virDomainClockDef; > +typedef virDomainClockDef *virDomainClockDefPtr; > +struct _virDomainClockDef { > +int offset; > +}; > + > #define VIR_DOMAIN_CPUMASK_LEN 1024 > > /* Guest VM main configuration */ > @@ -637,7 +650,7 @@ struct _virDomainDef { > char *emulator; > int features; > > -int localtime; > +virDomainClockDef clock; > > int ngraphics; > virDomainGraphicsDefPtr *graphics; > @@ -911,6 +924,7 @@ VIR_ENUM_DECL(virDomainGraphics) > /* from libvirt.h */ > VIR_ENUM_DECL(virDomainState) > VIR_ENUM_DECL(virDomainSeclabel) > +VIR_ENUM_DECL(virDomainClockOffset) > > VIR_ENUM_DECL(virDomainNetdevMacvtap) > > diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms > index aa826d6..1af34bd 100644 > --- a/src/libvirt_private.syms > +++ b/src/libvirt_private.syms > @@ -190,6 +190,8 @@ virDomainDefAddDiskControllers; > virDomainDefClearPCIAddresses; > virDomainDefClearDeviceAliases; > virDomainDeviceInfoIterate; > +virDomainClockOffsetTypeToString; > +virDomainClockOffsetTypeFromString; > > > # domain_event.h > diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c > index c9fe55b..a207fc7 100644 > --- a/src/qemu/qemu_conf.c > +++ b/src/qemu/qemu_conf.c > @@ -3400,8 +3400,14 @@ int qemudBuildCommandLine(virConnectPtr conn, > } > } > > -if (def->localtime) > +if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME) > ADD_ARG_LIT("-localtime"); > +else if (def->clock.offset != VIR_DOMAIN_CLOCK_OFFSET_UTC) { > +qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, > +_("unsupported clock offset '%s'"), > +
[libvirt] [PATCH 1/6] Change the internal domain conf representation of localtime/utc
The XML will soon be extended to allow more than just a simple localtime/utc boolean flag. This change replaces the plain 'int localtime' with a separate struct to prepare for future extension * src/conf/domain_conf.c, src/conf/domain_conf.h: Add a new virDomainClockDef structure * src/libvirt_private.syms: Export virDomainClockOffsetTypeToString and virDomainClockOffsetTypeFromString * src/qemu/qemu_conf.c, src/vbox/vbox_tmpl.c, src/xen/xend_internal.c, src/xen/xm_internal.c: Updated to use new structure for localtime --- src/conf/domain_conf.c | 19 +++ src/conf/domain_conf.h | 16 +++- src/libvirt_private.syms |2 ++ src/qemu/qemu_conf.c | 11 +-- src/vbox/vbox_tmpl.c |2 +- src/xen/xend_internal.c | 16 +++- src/xen/xm_internal.c| 21 ++--- 7 files changed, 71 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 561fa22..f86b4eb 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -229,6 +229,10 @@ VIR_ENUM_IMPL(virDomainNetdevMacvtap, VIR_DOMAIN_NETDEV_MACVTAP_MODE_LAST, "private", "bridge") +VIR_ENUM_IMPL(virDomainClockOffset, VIR_DOMAIN_CLOCK_OFFSET_LAST, + "utc", + "localtime"); + #define virDomainReportError(code, fmt...) \ virReportErrorHelper(NULL, VIR_FROM_DOMAIN, code, __FILE__, \ __FUNCTION__, __LINE__, fmt) @@ -3478,9 +3482,16 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps, tmp = virXPathString("string(./clock/@offset)", ctxt); -if (tmp && STREQ(tmp, "localtime")) -def->localtime = 1; -VIR_FREE(tmp); +if (tmp) { +if ((def->clock.offset = virDomainClockOffsetTypeFromString(tmp)) < 0) { +virDomainReportError(VIR_ERR_INTERNAL_ERROR, + _("unknown clock offset '%s'"), tmp); +goto error; +} +VIR_FREE(tmp); +} else { +def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC; +} def->os.bootloader = virXPathString("string(./bootloader)", ctxt); def->os.bootloaderArgs = virXPathString("string(./bootloader_args)", ctxt); @@ -5389,7 +5400,7 @@ char *virDomainDefFormat(virDomainDefPtr def, goto cleanup; virBufferVSprintf(&buf, " \n", - def->localtime ? "localtime" : "utc"); + virDomainClockOffsetTypeToString(def->clock.offset)); if (virDomainLifecycleDefFormat(&buf, def->onPoweroff, "on_poweroff") < 0) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 231d8c8..fbbe683 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -609,6 +609,19 @@ struct _virSecurityLabelDef { int type; }; +enum virDomainClockOffsetType { +VIR_DOMAIN_CLOCK_OFFSET_UTC = 0, +VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1, + +VIR_DOMAIN_CLOCK_OFFSET_LAST, +}; + +typedef struct _virDomainClockDef virDomainClockDef; +typedef virDomainClockDef *virDomainClockDefPtr; +struct _virDomainClockDef { +int offset; +}; + #define VIR_DOMAIN_CPUMASK_LEN 1024 /* Guest VM main configuration */ @@ -637,7 +650,7 @@ struct _virDomainDef { char *emulator; int features; -int localtime; +virDomainClockDef clock; int ngraphics; virDomainGraphicsDefPtr *graphics; @@ -911,6 +924,7 @@ VIR_ENUM_DECL(virDomainGraphics) /* from libvirt.h */ VIR_ENUM_DECL(virDomainState) VIR_ENUM_DECL(virDomainSeclabel) +VIR_ENUM_DECL(virDomainClockOffset) VIR_ENUM_DECL(virDomainNetdevMacvtap) diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index aa826d6..1af34bd 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -190,6 +190,8 @@ virDomainDefAddDiskControllers; virDomainDefClearPCIAddresses; virDomainDefClearDeviceAliases; virDomainDeviceInfoIterate; +virDomainClockOffsetTypeToString; +virDomainClockOffsetTypeFromString; # domain_event.h diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index c9fe55b..a207fc7 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -3400,8 +3400,14 @@ int qemudBuildCommandLine(virConnectPtr conn, } } -if (def->localtime) +if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME) ADD_ARG_LIT("-localtime"); +else if (def->clock.offset != VIR_DOMAIN_CLOCK_OFFSET_UTC) { +qemuReportError(VIR_ERR_CONFIG_UNSUPPORTED, +_("unsupported clock offset '%s'"), +virDomainClockOffsetTypeToString(def->clock.offset)); +goto error; +} if ((qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT) && def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) @@ -5218,6 +5224,7 @@ virDomainDefPtr qemuParseCommandLine(virCapsPtr caps, def->id = -1; def->memory = def->maxmem = 64 * 1024;
[libvirt] [PATCH 1/6] Change the internal domain conf representation of localtime/utc
The XML will soon be extended to allow more than just a simple localtime/utc boolean flag. This change replaces the plain 'int localtime' with a separate struct to prepare for future extension * src/conf/domain_conf.c, src/conf/domain_conf.h: Add a new virDomainClockDef structure * src/libvirt_private.syms: Export virDomainClockOffsetTypeToString and virDomainClockOffsetTypeFromString * src/qemu/qemu_conf.c, src/vbox/vbox_tmpl.c, src/xen/xend_internal.c, src/xen/xm_internal.c: Updated to use new structure for localtime --- src/conf/domain_conf.c | 20 src/conf/domain_conf.h | 16 +++- src/libvirt_private.syms |2 ++ src/qemu/qemu_conf.c | 11 +-- src/vbox/vbox_tmpl.c |2 +- src/xen/xend_internal.c | 16 +++- src/xen/xm_internal.c| 21 ++--- 7 files changed, 72 insertions(+), 16 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 766993c..1daf6f4 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -222,6 +222,11 @@ VIR_ENUM_IMPL(virDomainSeclabel, VIR_DOMAIN_SECLABEL_LAST, "dynamic", "static") +VIR_ENUM_IMPL(virDomainClockOffset, VIR_DOMAIN_CLOCK_OFFSET_LAST, + "utc", + "localtime"); + + #define virDomainReportError(conn, code, fmt...) \ virReportErrorHelper(conn, VIR_FROM_DOMAIN, code, __FILE__,\ __FUNCTION__, __LINE__, fmt) @@ -3464,9 +3469,16 @@ static virDomainDefPtr virDomainDefParseXML(virConnectPtr conn, tmp = virXPathString(conn, "string(./clock/@offset)", ctxt); -if (tmp && STREQ(tmp, "localtime")) -def->localtime = 1; -VIR_FREE(tmp); +if (tmp) { +if ((def->clock.offset = virDomainClockOffsetTypeFromString(tmp)) < 0) { +virDomainReportError(conn, VIR_ERR_INTERNAL_ERROR, + _("unknown clock offset '%s'"), tmp); +goto error; +} +VIR_FREE(tmp); +} else { +def->clock.offset = VIR_DOMAIN_CLOCK_OFFSET_UTC; +} def->os.bootloader = virXPathString(conn, "string(./bootloader)", ctxt); def->os.bootloaderArgs = virXPathString(conn, "string(./bootloader_args)", ctxt); @@ -5408,7 +5420,7 @@ char *virDomainDefFormat(virConnectPtr conn, goto cleanup; virBufferVSprintf(&buf, " \n", - def->localtime ? "localtime" : "utc"); + virDomainClockOffsetTypeToString(def->clock.offset)); if (virDomainLifecycleDefFormat(conn, &buf, def->onPoweroff, "on_poweroff") < 0) diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 0b79e88..5653b18 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -594,6 +594,19 @@ struct _virSecurityLabelDef { int type; }; +enum virDomainClockOffsetType { +VIR_DOMAIN_CLOCK_OFFSET_UTC = 0, +VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME = 1, + +VIR_DOMAIN_CLOCK_OFFSET_LAST, +}; + +typedef struct _virDomainClockDef virDomainClockDef; +typedef virDomainClockDef *virDomainClockDefPtr; +struct _virDomainClockDef { +int offset; +}; + #define VIR_DOMAIN_CPUMASK_LEN 1024 /* Guest VM main configuration */ @@ -622,7 +635,7 @@ struct _virDomainDef { char *emulator; int features; -int localtime; +virDomainClockDef clock; int ngraphics; virDomainGraphicsDefPtr *graphics; @@ -914,5 +927,6 @@ VIR_ENUM_DECL(virDomainGraphics) /* from libvirt.h */ VIR_ENUM_DECL(virDomainState) VIR_ENUM_DECL(virDomainSeclabel) +VIR_ENUM_DECL(virDomainClockOffset) #endif /* __DOMAIN_CONF_H */ diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index e5e8860..e882ae4 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -188,6 +188,8 @@ virDomainDefAddDiskControllers; virDomainDefClearPCIAddresses; virDomainDefClearDeviceAliases; virDomainDeviceInfoIterate; +virDomainClockOffsetTypeToString; +virDomainClockOffsetTypeFromString; # domain_event.h diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 389db7b..8109820 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -3312,8 +3312,14 @@ int qemudBuildCommandLine(virConnectPtr conn, } } -if (def->localtime) +if (def->clock.offset == VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME) ADD_ARG_LIT("-localtime"); +else if (def->clock.offset != VIR_DOMAIN_CLOCK_OFFSET_UTC) { +qemudReportError(conn, NULL, NULL, VIR_ERR_CONFIG_UNSUPPORTED, + _("unsupported clock offset '%s'"), + virDomainClockOffsetTypeToString(def->clock.offset)); +goto error; +} if ((qemuCmdFlags & QEMUD_CMD_FLAG_NO_REBOOT) && def->onReboot != VIR_DOMAIN_LIFECYCLE_RESTART) @@ -5127,6 +5133,7 @@ virDomainDefPtr qemuParseCommandLine(virConnectPtr conn, def->id