Re: [libvirt] [PATCH 1/6] Change the internal domain conf representation of localtime/utc

2010-03-01 Thread Daniel Veillard
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

2010-02-18 Thread Daniel P. Berrange
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

2010-02-02 Thread Daniel P. Berrange
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