WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device des

To: xen-devel@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-devel] [PATCH 10 of 10] libxl: "script:" prefix in block device description to setup vbd by hotplug scripts
From: Marek Marczykowski <marmarek@xxxxxxxxxxxx>
Date: Fri, 03 Jun 2011 00:35:40 +0200
Cc: marmarek@xxxxxxxxxxxx
Delivery-date: Thu, 02 Jun 2011 15:46:00 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <patchbomb.1307054130@devel14>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
References: <patchbomb.1307054130@devel14>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
User-agent: Mercurial-patchbomb/1.8.2
# HG changeset patch
# User Marek Marczykowski <marmarek@xxxxxxxxxxxx>
# Date 1306963204 -7200
# Node ID 1e3bf3cb3944402e01c57c400a02fe4293153458
# Parent  10bdf8aa5b8a1cb2178f2b9cbcc9ce2fd5644403
libxl: "script:" prefix in block device description to setup vbd by hotplug 
scripts

Implements old behaviour of block-attach - only write parameters to xenstore
and left all work for hotplug scripts. Allows to directly reuse xen block
scripts (and maybe some custom ones). Example use:

xl block-attach vm "script:nbd 1.1.1.1 9999" xvdg w

Signed-off-by: Marek Marczykowski <marmarek@xxxxxxxxxxxx>

diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c
--- a/tools/libxl/libxl.c
+++ b/tools/libxl/libxl.c
@@ -896,6 +896,13 @@
         }
     }
 
+    if (disk->backend == DISK_BACKEND_SCRIPT) {
+        delimiter = strchr(file_name, ':');
+        if (!delimiter)
+            return ERROR_INVAL;
+        return 0;
+    }
+
     if ( stat(file_name, &stat_buf) != 0 ) {
         LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "failed to stat %s", 
file_name);
         return ERROR_INVAL;
@@ -965,6 +972,24 @@
 
             device.backend_kind = DEVICE_VBD;
             break;
+        case DISK_BACKEND_SCRIPT:
+                       {
+                               char *delimiter;
+                               backend_type = libxl__strdup(&gc, 
disk->pdev_path);
+                               delimiter = strchr(backend_type, ':');
+                               if (!delimiter) {
+                                       rc = ERROR_FAIL;
+                                       goto out_free;
+                               }
+                               *delimiter = '\0';
+                               flexarray_append(back, "params");
+                               flexarray_append(back, delimiter+1);
+                flexarray_append(back, "scripted");
+                flexarray_append(back, "1");
+
+                               device.backend_kind = DEVICE_VBD;
+                       }
+            break;
         case DISK_BACKEND_TAP:
             if (libxl__blktap_enabled(&gc) && disk->format != 
DISK_FORMAT_EMPTY) {
                 const char *dev = libxl__blktap_devpath(&gc,
@@ -1060,7 +1085,7 @@
     device.backend_domid    = disk->backend_domid;
     device.backend_devid    = devid;
     device.backend_kind     = 
-        (disk->backend == DISK_BACKEND_PHY) ? DEVICE_VBD : DEVICE_TAP;
+        (disk->backend == DISK_BACKEND_PHY || disk->backend == 
DISK_BACKEND_SCRIPT) ? DEVICE_VBD : DEVICE_TAP;
     device.domid            = disk->domid;
     device.devid            = devid;
     device.kind             = DEVICE_VBD;
diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h
--- a/tools/libxl/libxl.h
+++ b/tools/libxl/libxl.h
@@ -185,6 +185,7 @@
     DISK_BACKEND_PHY,
     DISK_BACKEND_TAP,
     DISK_BACKEND_QDISK,
+    DISK_BACKEND_SCRIPT,
 } libxl_disk_backend;
 
 typedef enum {
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -139,6 +139,7 @@
         case DISK_BACKEND_QDISK: return "qdisk";
         case DISK_BACKEND_TAP: return "tap";
         case DISK_BACKEND_PHY: return "phy";
+        case DISK_BACKEND_SCRIPT: return "script";
         default: return NULL;
     }
 }
diff --git a/tools/libxl/libxl_utils.c b/tools/libxl/libxl_utils.c
--- a/tools/libxl/libxl_utils.c
+++ b/tools/libxl/libxl_utils.c
@@ -282,6 +282,8 @@
 
     if (!strcmp(s, "phy")) {
         *backend = DISK_BACKEND_PHY;
+    } else if (!strcmp(s, "script")) {
+        *backend = DISK_BACKEND_SCRIPT;
     } else if (!strcmp(s, "file")) {
         *backend = DISK_BACKEND_TAP;
     } else if (!strcmp(s, "tap")) {
@@ -553,8 +555,13 @@
     disk->domid = domid;
     be_path = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/backend", 
diskpath));
     disk->pdev_path = strdup(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/params", be_path)));
-    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
be_path));
-    libxl_string_to_backend(ctx, val, &(disk->backend));
+    val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/scripted", 
be_path));
+    if (val && atoi(val))
+        disk->backend = DISK_BACKEND_SCRIPT;
+    else {
+        val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/type", 
be_path));
+        libxl_string_to_backend(ctx, val, &(disk->backend));
+    }
     disk->vdev = strdup(libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, 
"%s/dev", be_path)));
     val = libxl__xs_read(&gc, XBT_NULL, libxl__sprintf(&gc, "%s/removable", 
be_path));
     disk->unpluggable = !strcmp(val, "1");
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -481,6 +481,10 @@
                     state = DSTATE_PHYSPATH;
                     disk->format = DISK_FORMAT_RAW;
                     disk->backend = DISK_BACKEND_PHY;
+                }else if ( !strcmp(tok, "script") ) {
+                    state = DSTATE_PHYSPATH;
+                    disk->format = DISK_FORMAT_RAW;
+                    disk->backend = DISK_BACKEND_SCRIPT;
                 }else if ( !strcmp(tok, "file") ) {
                     state = DSTATE_PHYSPATH;
                     disk->format = DISK_FORMAT_RAW;
@@ -4435,6 +4439,8 @@
     tok = strtok(argv[optind+1], ":");
     if (!strcmp(tok, "phy")) {
         disk.backend = DISK_BACKEND_PHY;
+    } else if (!strcmp(tok, "script")) {
+        disk.backend = DISK_BACKEND_SCRIPT;
     } else if (!strcmp(tok, "file")) {
         disk.backend = DISK_BACKEND_TAP;
     } else if (!strcmp(tok, "tap")) {



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel