[libvirt] [PATCH] libxl: support sexpr in native to XML conversion

Jim Fehlig jfehlig at suse.com
Mon Mar 10 17:52:50 UTC 2014


Supporting sexpr in connectDomainXMLFromNative in the libxl driver
adds flexibility for users importing legacy Xen configuration into
libvirt.  E.g. this patch allows importing previous xend-managed
domains from /var/lib/xend/domains/<dom-uuid>/config.sxp into the
libvirt libxl driver.

Signed-off-by: Jim Fehlig <jfehlig at suse.com>
---
 src/libxl/libxl_driver.c | 40 +++++++++++++++++++++++++++-------------
 1 file changed, 27 insertions(+), 13 deletions(-)

diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index a79efcb..65d80a2 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -46,6 +46,7 @@
 #include "libxl_driver.h"
 #include "libxl_conf.h"
 #include "xen_xm.h"
+#include "xen_sxpr.h"
 #include "virtypedparam.h"
 #include "viruri.h"
 #include "virstring.h"
@@ -62,6 +63,7 @@
 #define LIBXL_DOM_REQ_HALT     4
 
 #define LIBXL_CONFIG_FORMAT_XM "xen-xm"
+#define LIBXL_CONFIG_FORMAT_SEXPR "xen-sxpr"
 
 /* Number of Xen scheduler parameters */
 #define XEN_SCHED_CREDIT_NPARAM   2
@@ -2867,8 +2869,9 @@ libxlDomainGetXMLDesc(virDomainPtr dom, unsigned int flags)
 }
 
 static char *
-libxlConnectDomainXMLFromNative(virConnectPtr conn, const char * nativeFormat,
-                                const char * nativeConfig,
+libxlConnectDomainXMLFromNative(virConnectPtr conn,
+                                const char *nativeFormat,
+                                const char *nativeConfig,
                                 unsigned int flags)
 {
     libxlDriverPrivatePtr driver = conn->privateData;
@@ -2882,22 +2885,33 @@ libxlConnectDomainXMLFromNative(virConnectPtr conn, const char * nativeFormat,
     if (virConnectDomainXMLFromNativeEnsureACL(conn) < 0)
         goto cleanup;
 
-    if (STRNEQ(nativeFormat, LIBXL_CONFIG_FORMAT_XM)) {
+    if (STREQ(nativeFormat, LIBXL_CONFIG_FORMAT_XM)) {
+        if (!(conf = virConfReadMem(nativeConfig, strlen(nativeConfig), 0)))
+            goto cleanup;
+
+        if (!(def = xenParseXM(conf,
+                               cfg->verInfo->xen_version_major,
+                               cfg->caps))) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("parsing xm config failed"));
+            goto cleanup;
+        }
+    } else if (STREQ(nativeFormat, LIBXL_CONFIG_FORMAT_SEXPR)) {
+        /* only support latest xend config format */
+        if (!(def = xenParseSxprString(nativeConfig,
+                                       XEND_CONFIG_VERSION_3_1_0,
+                                       NULL,
+                                       -1))) {
+            virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                           _("parsing sxpr config failed"));
+            goto cleanup;
+        }
+    } else {
         virReportError(VIR_ERR_INVALID_ARG,
                        _("unsupported config type %s"), nativeFormat);
         goto cleanup;
     }
 
-    if (!(conf = virConfReadMem(nativeConfig, strlen(nativeConfig), 0)))
-        goto cleanup;
-
-    if (!(def = xenParseXM(conf,
-                           cfg->verInfo->xen_version_major,
-                           cfg->caps))) {
-        virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("parsing xm config failed"));
-        goto cleanup;
-    }
-
     xml = virDomainDefFormat(def, VIR_DOMAIN_XML_INACTIVE);
 
 cleanup:
-- 
1.8.1.4




More information about the libvir-list mailing list