All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks
@ 2012-08-06 21:51 Daniel De Graaf
  2012-08-07  9:36 ` Ian Campbell
  2012-08-31  8:04 ` Ian Campbell
  0 siblings, 2 replies; 10+ messages in thread
From: Daniel De Graaf @ 2012-08-06 21:51 UTC (permalink / raw)
  To: Ian Campbell, Ian Jackson; +Cc: Daniel De Graaf, xen-devel

Allow specification of backend domains for disks, either in the config
file or via xl block-attach.

A version of this patch was submitted in October 2011 but was not
suitable at the time because libxl did not support the "script=" option
for disks in libxl. Now that this option exists, it is possible to
specify a backend domain without needing to duplicate the device tree of
domain providing the disk in the domain using libxl; just specify
script=/bin/true (or any more useful script) to prevent the block script
from running in the domain using libxl.

In order to support named backend domains like network-attach, the
prototype of xlu_disk_parse in libxlutil.h needs a libxl_ctx. Without
this parameter, it would only be only possible to support numeric domain
IDs in the block device specification.

Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

---

This patch does not include the changes to tools/libxl/libxlu_disk_l.c
and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
changes due to different generator versions.

 tools/libxl/libxlu_disk.c   |   3 +-
 tools/libxl/libxlu_disk_i.h |   3 +-
 tools/libxl/libxlu_disk_l.c | 581 ++++++++++++++++++++++----------------------
 tools/libxl/libxlu_disk_l.h |  24 +-
 tools/libxl/libxlu_disk_l.l |   8 +
 tools/libxl/libxlutil.h     |   2 +-
 tools/libxl/xl_cmdimpl.c    |   6 +-
 7 files changed, 319 insertions(+), 308 deletions(-)

diff --git a/tools/libxl/libxlu_disk.c b/tools/libxl/libxlu_disk.c
index 18fe386..1e6caca 100644
--- a/tools/libxl/libxlu_disk.c
+++ b/tools/libxl/libxlu_disk.c
@@ -48,7 +48,7 @@ static void dpc_dispose(DiskParseContext *dpc) {
 
 int xlu_disk_parse(XLU_Config *cfg,
                    int nspecs, const char *const *specs,
-                   libxl_device_disk *disk) {
+                   libxl_device_disk *disk, libxl_ctx *ctx) {
     DiskParseContext dpc;
     int i, e;
 
@@ -56,6 +56,7 @@ int xlu_disk_parse(XLU_Config *cfg,
     dpc.cfg = cfg;
     dpc.scanner = 0;
     dpc.disk = disk;
+    dpc.ctx = ctx;
 
     disk->readwrite = 1;
 
diff --git a/tools/libxl/libxlu_disk_i.h b/tools/libxl/libxlu_disk_i.h
index 4fccd4a..c220bcf 100644
--- a/tools/libxl/libxlu_disk_i.h
+++ b/tools/libxl/libxlu_disk_i.h
@@ -2,7 +2,7 @@
 #define LIBXLU_DISK_I_H
 
 #include "libxlu_internal.h"
-
+#include "libxl_utils.h"
 
 typedef struct {
     XLU_Config *cfg;
@@ -12,6 +12,7 @@ typedef struct {
     libxl_device_disk *disk;
     int access_set, had_depr_prefix;
     const char *spec;
+    libxl_ctx *ctx;
 } DiskParseContext;
 
 void xlu__disk_err(DiskParseContext *dpc, const char *erroneous,
diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c
index 4c68034..4e17f7c 100644
--- a/tools/libxl/libxlu_disk_l.c
+++ b/tools/libxl/libxlu_disk_l.c
@@ -58,6 +58,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -88,8 +89,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -163,15 +162,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 /* The state buf must be large enough to hold one state per character in the main buffer.
@@ -361,8 +352,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
 	*yy_cp = '\0'; \
 	yyg->yy_c_buf_p = yy_cp;
 
-#define YY_NUM_RULES 25
-#define YY_END_OF_BUFFER 26
+#define YY_NUM_RULES 26
+#define YY_END_OF_BUFFER 27
 /* This struct is not used in this scanner,
    but its presence is necessary. */
 struct yy_trans_info
@@ -370,60 +361,61 @@ struct yy_trans_info
 	flex_int32_t yy_verify;
 	flex_int32_t yy_nxt;
 	};
-static yyconst flex_int16_t yy_acclist[447] =
+static yyconst flex_int16_t yy_acclist[460] =
     {   0,
-       24,   24,   26,   22,   23,   25, 8193,   22,   23,   25,
-    16385, 8193,   22,   25,16385,   22,   23,   25,   23,   25,
-       22,   23,   25,   22,   23,   25,   22,   23,   25,   22,
-       23,   25,   22,   23,   25,   22,   23,   25,   22,   23,
-       25,   22,   23,   25,   22,   23,   25,   22,   23,   25,
-       22,   23,   25,   22,   23,   25,   22,   23,   25,   22,
-       23,   25,   22,   23,   25,   24,   25,   25,   22,   22,
-     8193,   22, 8193,   22,16385, 8193,   22, 8193,   22,   22,
-     8213,   22,16405,   22,   22,   22,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-
-       22,   22,   24, 8193,   22, 8193,   22, 8193, 8213,   22,
-     8213,   22, 8213,   12,   22,   22,   22,   22,   22,   22,
-       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
-       22,   22, 8213,   22, 8213,   22, 8213,   12,   22,   17,
-     8213,   22,16405,   22,   22,   22,   22,   22,   22,   22,
-     8206, 8213,   22,16398,16405,   20, 8213,   22,16405,   22,
-     8205, 8213,   22,16397,16405,   22,   22, 8208, 8213,   22,
-    16400,16405,   22,   22,   22,   22,   17, 8213,   22,   17,
-     8213,   22,   17,   22,   17, 8213,   22,    3,   22,   22,
-       19, 8213,   22,16405,   22,   22, 8206, 8213,   22, 8206,
-
-     8213,   22, 8206,   22, 8206, 8213,   20, 8213,   22,   20,
-     8213,   22,   20,   22,   20, 8213, 8205, 8213,   22, 8205,
-     8213,   22, 8205,   22, 8205, 8213,   22, 8208, 8213,   22,
-     8208, 8213,   22, 8208,   22, 8208, 8213,   22,   22,    9,
-       22,   17, 8213,   22,   17, 8213,   22,   17, 8213,   17,
-       22,   17,   22,    3,   22,   22,   19, 8213,   22,   19,
-     8213,   22,   19,   22,   19, 8213,   22,   18, 8213,   22,
-    16405, 8206, 8213,   22, 8206, 8213,   22, 8206, 8213, 8206,
-       22, 8206,   20, 8213,   22,   20, 8213,   22,   20, 8213,
-       20,   22,   20, 8205, 8213,   22, 8205, 8213,   22, 8205,
-
-     8213, 8205,   22, 8205,   22, 8208, 8213,   22, 8208, 8213,
-       22, 8208, 8213, 8208,   22, 8208,   22,   22,    9,   12,
-        9,    7,   22,   22,   19, 8213,   22,   19, 8213,   22,
-       19, 8213,   19,   22,   19,    2,   18, 8213,   22,   18,
-     8213,   22,   18,   22,   18, 8213,   10,   22,   11,    9,
-        9,   12,    7,   12,    7,   22,    6,    2,   12,    2,
-       18, 8213,   22,   18, 8213,   22,   18, 8213,   18,   22,
-       18,   10,   12,   10,   15, 8213,   22,16405,   11,   12,
-       11,    7,    7,   12,   22,    6,   12,    6,    6,   12,
-        6,   12,    2,    2,   12,   10,   10,   12,   15, 8213,
-
-       22,   15, 8213,   22,   15,   22,   15, 8213,   11,   12,
-       22,    6,    6,   12,    6,    6,   15, 8213,   22,   15,
-     8213,   22,   15, 8213,   15,   22,   15,   22,    6,    6,
-        8,    6,    5,    6,    8,   12,    8,    4,    6,    5,
-        6,    8,    8,   12,    4,    6
+       25,   25,   27,   23,   24,   26, 8193,   23,   24,   26,
+    16385, 8193,   23,   26,16385,   23,   24,   26,   24,   26,
+       23,   24,   26,   23,   24,   26,   23,   24,   26,   23,
+       24,   26,   23,   24,   26,   23,   24,   26,   23,   24,
+       26,   23,   24,   26,   23,   24,   26,   23,   24,   26,
+       23,   24,   26,   23,   24,   26,   23,   24,   26,   23,
+       24,   26,   23,   24,   26,   25,   26,   26,   23,   23,
+     8193,   23, 8193,   23,16385, 8193,   23, 8193,   23,   23,
+     8214,   23,16406,   23,   23,   23,   23,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+
+       23,   23,   25, 8193,   23, 8193,   23, 8193, 8214,   23,
+     8214,   23, 8214,   13,   23,   23,   23,   23,   23,   23,
+       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
+       23,   23, 8214,   23, 8214,   23, 8214,   13,   23,   18,
+     8214,   23,16406,   23,   23,   23,   23,   23,   23,   23,
+     8207, 8214,   23,16399,16406,   21, 8214,   23,16406,   23,
+     8206, 8214,   23,16398,16406,   23,   23, 8209, 8214,   23,
+    16401,16406,   23,   23,   23,   23,   18, 8214,   23,   18,
+     8214,   23,   18,   23,   18, 8214,   23,    3,   23,   23,
+       20, 8214,   23,16406,   23,   23, 8207, 8214,   23, 8207,
+
+     8214,   23, 8207,   23, 8207, 8214,   21, 8214,   23,   21,
+     8214,   23,   21,   23,   21, 8214, 8206, 8214,   23, 8206,
+     8214,   23, 8206,   23, 8206, 8214,   23, 8209, 8214,   23,
+     8209, 8214,   23, 8209,   23, 8209, 8214,   23,   23,   10,
+       23,   18, 8214,   23,   18, 8214,   23,   18, 8214,   18,
+       23,   18,   23,    3,   23,   23,   20, 8214,   23,   20,
+     8214,   23,   20,   23,   20, 8214,   23,   19, 8214,   23,
+    16406, 8207, 8214,   23, 8207, 8214,   23, 8207, 8214, 8207,
+       23, 8207,   21, 8214,   23,   21, 8214,   23,   21, 8214,
+       21,   23,   21, 8206, 8214,   23, 8206, 8214,   23, 8206,
+
+     8214, 8206,   23, 8206,   23, 8209, 8214,   23, 8209, 8214,
+       23, 8209, 8214, 8209,   23, 8209,   23,   23,   10,   13,
+       10,    7,   23,   23,   20, 8214,   23,   20, 8214,   23,
+       20, 8214,   20,   23,   20,    2,   19, 8214,   23,   19,
+     8214,   23,   19,   23,   19, 8214,   11,   23,   12,   10,
+       10,   13,    7,   13,    7,   23,   23,    6,    2,   13,
+        2,   19, 8214,   23,   19, 8214,   23,   19, 8214,   19,
+       23,   19,   11,   13,   11,   16, 8214,   23,16406,   12,
+       13,   12,    7,    7,   13,   23,   23,    6,   13,    6,
+        6,   13,    6,   13,    2,    2,   13,   11,   11,   13,
+
+       16, 8214,   23,   16, 8214,   23,   16,   23,   16, 8214,
+       12,   13,   23,   23,    6,    6,   13,    6,    6,   16,
+     8214,   23,   16, 8214,   23,   16, 8214,   16,   23,   16,
+       23,   23,    6,    6,   23,    8,    6,    5,    6,   23,
+        8,   13,    8,    4,    6,    5,    6,    9,    8,    8,
+       13,    4,    6,    9,   13,    9,    9,    9,   13
     } ;
 
-static yyconst flex_int16_t yy_accept[252] =
+static yyconst flex_int16_t yy_accept[263] =
     {   0,
         1,    1,    1,    2,    3,    4,    7,   12,   16,   19,
        21,   24,   27,   30,   33,   36,   39,   42,   45,   48,
@@ -445,14 +437,15 @@ static yyconst flex_int16_t yy_accept[252] =
       293,  294,  297,  300,  302,  304,  305,  306,  309,  312,
       314,  316,  317,  318,  319,  321,  322,  323,  324,  325,
       328,  331,  333,  335,  336,  337,  340,  343,  345,  347,
-      348,  349,  350,  351,  353,  355,  356,  357,  358,  360,
-
-      361,  364,  367,  369,  371,  372,  374,  375,  379,  381,
-      382,  383,  385,  386,  388,  389,  391,  393,  394,  396,
-      397,  399,  402,  405,  407,  409,  411,  412,  413,  415,
-      416,  417,  420,  423,  425,  427,  428,  429,  430,  431,
-      432,  433,  435,  437,  438,  440,  442,  443,  445,  447,
-      447
+      348,  349,  350,  351,  353,  355,  356,  357,  358,  359,
+
+      361,  362,  365,  368,  370,  372,  373,  375,  376,  380,
+      382,  383,  384,  386,  387,  388,  390,  391,  393,  395,
+      396,  398,  399,  401,  404,  407,  409,  411,  413,  414,
+      415,  416,  418,  419,  420,  423,  426,  428,  430,  431,
+      432,  433,  434,  435,  436,  437,  438,  440,  441,  443,
+      444,  446,  448,  449,  450,  452,  454,  456,  457,  458,
+      460,  460
     } ;
 
 static yyconst flex_int32_t yy_ec[256] =
@@ -495,83 +488,85 @@ static yyconst flex_int32_t yy_meta[34] =
         1,    1,    1
     } ;
 
-static yyconst flex_int16_t yy_base[308] =
+static yyconst flex_int16_t yy_base[321] =
     {   0,
-        0,    0,  546,  538,  533,  521,   32,   35,  656,  656,
-       44,   62,   30,   41,   50,   51,  507,   64,   47,   66,
-       67,  499,   68,  487,   72,    0,  656,  465,  656,   87,
-       91,    0,    0,  100,  452,  109,    0,   74,   95,   87,
+        0,    0,  644,  632,  623,  595,   32,   35,  670,  670,
+       44,   62,   30,   41,   50,   51,  577,   64,   47,   66,
+       67,  565,   68,  561,   72,    0,  670,  563,  670,   87,
+       91,    0,    0,  100,  553,  109,    0,   74,   95,   87,
        32,   96,  105,  110,   77,   97,   40,  113,  116,  112,
       118,  120,  121,  122,  123,  125,    0,  137,    0,    0,
-      147,    0,    0,  449,  129,  126,  134,  143,  145,  147,
+      147,    0,    0,  551,  129,  126,  134,  143,  145,  147,
       148,  149,  151,  153,  156,  160,  155,  167,  162,  175,
-      168,  159,  188,    0,    0,  656,  166,  197,  179,  185,
-      176,  200,  435,  186,  193,  216,  225,  205,  234,  221,
+      168,  159,  188,    0,    0,  670,  166,  197,  179,  185,
+      176,  200,  537,  186,  193,  216,  225,  205,  234,  221,
 
       237,  247,  204,  230,  244,  213,  254,    0,  256,    0,
       251,  258,  254,  279,  256,  259,  267,    0,  269,    0,
       286,    0,  288,    0,  290,    0,  297,    0,  267,  299,
-        0,  301,    0,  288,  297,  421,  302,  310,    0,    0,
-        0,    0,  305,  656,  307,  319,    0,  321,    0,  322,
+        0,  301,    0,  288,  297,  535,  302,  310,    0,    0,
+        0,    0,  305,  670,  307,  319,    0,  321,    0,  322,
       332,  335,    0,    0,    0,    0,  339,    0,    0,    0,
         0,  342,    0,    0,    0,    0,  340,  349,    0,    0,
-        0,    0,  337,  345,  420,  656,  419,  346,  350,  358,
-        0,    0,    0,    0,  418,  360,    0,  362,    0,  417,
-      319,  369,  416,  656,  415,  656,  276,  364,  414,  656,
-
-      375,    0,    0,    0,    0,  413,  656,  384,  412,    0,
-      410,  656,  370,  409,  656,  370,  378,  408,  656,  366,
-      656,  394,    0,  396,    0,    0,  380,  316,  656,  377,
-      387,  398,    0,    0,    0,    0,  399,  402,  407,  271,
-      406,  228,  200,  656,  175,  656,   77,  656,  656,  656,
-      428,  432,  435,  439,  443,  447,  451,  455,  459,  463,
-      467,  471,  475,  479,  483,  487,  491,  495,  499,  503,
-      507,  511,  515,  519,  523,  527,  531,  535,  539,  543,
-      547,  551,  555,  559,  563,  567,  571,  575,  579,  583,
-      587,  591,  595,  599,  603,  607,  611,  615,  619,  623,
-
-      627,  631,  635,  639,  643,  647,  651
+        0,    0,  337,  345,  527,  670,  519,  346,  351,  359,
+        0,    0,    0,    0,  511,  361,    0,  363,    0,  499,
+      319,  370,  471,  670,  464,  670,  359,  276,  367,  455,
+
+      670,  373,    0,    0,    0,    0,  447,  670,  383,  429,
+        0,  428,  670,  368,  371,  425,  670,  385,  389,  422,
+      670,  421,  670,  391,    0,  399,    0,    0,  414,  387,
+      419,  670,  395,  400,  402,    0,    0,    0,    0,  399,
+      403,  406,  411,  404,  417,  412,  416,  409,  316,  670,
+      271,  670,  228,  200,  670,  670,  175,  670,   77,  670,
+      670,  434,  438,  441,  445,  449,  453,  457,  461,  465,
+      469,  473,  477,  481,  485,  489,  493,  497,  501,  505,
+      509,  513,  517,  521,  525,  529,  533,  537,  541,  545,
+      549,  553,  557,  561,  565,  569,  573,  577,  581,  585,
+
+      589,  593,  597,  601,  605,  609,  613,  617,  621,  625,
+      629,  633,  637,  641,  645,  649,  653,  657,  661,  665
     } ;
 
-static yyconst flex_int16_t yy_def[308] =
+static yyconst flex_int16_t yy_def[321] =
     {   0,
-      250,    1,  251,  251,  250,  252,  253,  253,  250,  250,
-      254,  254,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,  255,  250,  252,  250,  256,
-      253,  257,  257,  258,   12,  252,  259,   12,   12,   12,
+      261,    1,  262,  262,  261,  263,  264,  264,  261,  261,
+      265,  265,   12,   12,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,  266,  261,  263,  261,  267,
+      264,  268,  268,  269,   12,  263,  270,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,   12,   12,   12,   12,  255,  256,  257,  257,
-      260,  261,  261,  250,   12,   12,   12,   12,   12,   12,
+       12,   12,   12,   12,   12,   12,  266,  267,  268,  268,
+      271,  272,  272,  261,   12,   12,   12,   12,   12,   12,
        12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
-       12,   12,  260,  261,  261,  250,   12,  262,   12,   12,
-       12,   12,   12,   12,   12,  263,  264,   12,  265,   12,
-
-       12,  266,   12,   12,   12,   12,  267,  268,  262,  268,
-       12,   12,   12,  269,   12,   12,  270,  271,  263,  271,
-      272,  273,  264,  273,  274,  275,  265,  275,   12,  276,
-      277,  266,  277,   12,   12,  278,   12,  267,  268,  268,
-      279,  279,   12,  250,   12,  280,  281,  269,  281,   12,
-      282,  270,  271,  271,  283,  283,  272,  273,  273,  284,
-      284,  274,  275,  275,  285,  285,   12,  276,  277,  277,
-      286,  286,   12,   12,  287,  250,  288,   12,   12,  280,
-      281,  281,  289,  289,  290,  291,  292,  282,  292,  293,
-       12,  294,  287,  250,  295,  250,   12,  296,  297,  250,
-
-      291,  292,  292,  298,  298,  299,  250,  300,  301,  301,
-      295,  250,   12,  302,  250,  302,  302,  297,  250,  299,
-      250,  303,  304,  300,  304,  301,   12,  302,  250,  302,
-      302,  303,  304,  304,  305,  305,   12,  302,  302,  306,
-      302,  302,  307,  250,  302,  250,  307,  250,  250,    0,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-
-      250,  250,  250,  250,  250,  250,  250
+       12,   12,  271,  272,  272,  261,   12,  273,   12,   12,
+       12,   12,   12,   12,   12,  274,  275,   12,  276,   12,
+
+       12,  277,   12,   12,   12,   12,  278,  279,  273,  279,
+       12,   12,   12,  280,   12,   12,  281,  282,  274,  282,
+      283,  284,  275,  284,  285,  286,  276,  286,   12,  287,
+      288,  277,  288,   12,   12,  289,   12,  278,  279,  279,
+      290,  290,   12,  261,   12,  291,  292,  280,  292,   12,
+      293,  281,  282,  282,  294,  294,  283,  284,  284,  295,
+      295,  285,  286,  286,  296,  296,   12,  287,  288,  288,
+      297,  297,   12,   12,  298,  261,  299,   12,   12,  291,
+      292,  292,  300,  300,  301,  302,  303,  293,  303,  304,
+       12,  305,  298,  261,  306,  261,   12,   12,  307,  308,
+
+      261,  302,  303,  303,  309,  309,  310,  261,  311,  312,
+      312,  306,  261,   12,   12,  313,  261,  313,  313,  308,
+      261,  310,  261,  314,  315,  311,  315,  312,   12,   12,
+      313,  261,  313,  313,  314,  315,  315,  316,  316,   12,
+       12,  313,  313,   12,  317,  313,  313,   12,  318,  261,
+      313,  261,  319,  318,  261,  261,  320,  261,  320,  261,
+        0,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261
     } ;
 
-static yyconst flex_int16_t yy_nxt[690] =
+static yyconst flex_int16_t yy_nxt[704] =
     {   0,
         6,    7,    8,    9,    6,    6,    6,    6,   10,   11,
        12,   13,   14,   15,   16,   17,   17,   18,   17,   17,
@@ -581,7 +576,7 @@ static yyconst flex_int16_t yy_nxt[690] =
        35,   36,   37,   73,   42,   38,   35,   49,   68,   35,
        35,   39,   28,   28,   28,   29,   34,   43,   45,   36,
        37,   40,   44,   35,   46,   35,   35,   35,   51,   53,
-      244,   35,   50,   35,   55,   65,   35,   47,   56,   28,
+      258,   35,   50,   35,   55,   65,   35,   47,   56,   28,
        59,   48,   31,   31,   32,   60,   35,   71,   67,   33,
 
        28,   28,   28,   29,   35,   35,   35,   28,   37,   61,
@@ -591,66 +586,69 @@ static yyconst flex_int16_t yy_nxt[690] =
        59,   77,   87,   35,   76,   60,   80,   79,   81,   28,
        84,   78,   35,   89,   35,   85,   35,   35,   35,   75,
        35,   92,   35,   96,   35,   35,   90,   97,   35,   35,
-       93,   35,   94,   91,   99,   35,   35,   35,  249,  100,
+       93,   35,   94,   91,   99,   35,   35,   35,  260,  100,
        95,  101,  102,  104,   35,   35,   98,  103,   35,  105,
        28,   84,  111,  106,   35,   35,   85,  107,  107,   61,
 
-      108,  107,   35,  248,  107,  110,  112,  114,  113,   35,
+      108,  107,   35,  250,  107,  110,  112,  114,  113,   35,
        75,   78,   99,   35,   35,  116,  117,  117,   61,  118,
       117,  134,   35,  117,  120,  121,  121,   61,  122,  121,
-       35,  246,  121,  124,  125,  125,   61,  126,  125,   35,
+       35,  258,  121,  124,  125,  125,   61,  126,  125,   35,
       137,  125,  128,  135,  102,  129,   35,  130,  130,   61,
       131,  130,  136,   35,  130,  133,   28,  139,   28,  141,
        35,  144,  140,   35,  142,   35,  151,   35,   35,   28,
-      153,   28,  155,  143,  244,  154,   35,  156,  145,  146,
+      153,   28,  155,  143,  256,  154,   35,  156,  145,  146,
       146,   61,  147,  146,  150,   35,  146,  149,   28,  158,
        28,  160,   28,  163,  159,  167,  161,   35,  164,   28,
 
-      165,   28,  169,   28,  171,  166,   35,  170,  213,  172,
-      177,   35,   28,  139,   35,  173,   35,  178,  140,  215,
-      179,   28,  181,   28,  183,  174,  208,  182,   35,  184,
+      165,   28,  169,   28,  171,  166,   35,  170,  215,  172,
+      177,   35,   28,  139,   35,  173,   35,  178,  140,  255,
+      179,   28,  181,   28,  183,  174,  209,  182,   35,  184,
       185,   35,  186,  186,   61,  187,  186,   28,  153,  186,
       189,   28,  158,  154,   28,  163,   35,  159,  190,   35,
-      164,   28,  169,  192,   35,   35,  191,  170,  198,   35,
-       28,  181,   28,  202,   28,  204,  182,  215,  203,  207,
-      205,   64,  210,  229,  197,  216,  217,   28,  202,   35,
-      215,  229,  230,  203,  222,  222,   61,  223,  222,   35,
-      215,  222,  225,  237,  227,  231,   28,  233,   28,  235,
-
-       28,  233,  234,  238,  236,  215,  234,  240,   35,  215,
-      215,  200,  229,  196,  239,  226,  221,  219,  212,  176,
-      207,  200,  196,  194,  176,  241,  242,  245,   26,   26,
-       26,   26,   28,   28,   28,   30,   30,   30,   30,   35,
-       35,   35,   35,   57,  115,   57,   57,   58,   58,   58,
-       58,   60,   86,   60,   60,   34,   34,   34,   34,   64,
-       64,   35,   64,   83,   83,   83,   83,   85,   29,   85,
-       85,  109,  109,  109,  109,  119,  119,  119,  119,  123,
-      123,  123,  123,  127,  127,  127,  127,  132,  132,  132,
-      132,  138,  138,  138,  138,  140,   54,  140,  140,  148,
-
-      148,  148,  148,  152,  152,  152,  152,  154,   52,  154,
-      154,  157,  157,  157,  157,  159,   35,  159,  159,  162,
-      162,  162,  162,  164,   29,  164,  164,  168,  168,  168,
-      168,  170,  250,  170,  170,  175,  175,  175,  175,  142,
-       27,  142,  142,  180,  180,  180,  180,  182,   27,  182,
-      182,  188,  188,  188,  188,  156,  250,  156,  156,  161,
-      250,  161,  161,  166,  250,  166,  166,  172,  250,  172,
-      172,  193,  193,  193,  193,  195,  195,  195,  195,  184,
-      250,  184,  184,  199,  199,  199,  199,  201,  201,  201,
-      201,  203,  250,  203,  203,  206,  206,  206,  206,  209,
-
-      209,  209,  209,  211,  211,  211,  211,  214,  214,  214,
-      214,  218,  218,  218,  218,  205,  250,  205,  205,  220,
-      220,  220,  220,  224,  224,  224,  224,  210,  250,  210,
-      210,  228,  228,  228,  228,  232,  232,  232,  232,  234,
-      250,  234,  234,  236,  250,  236,  236,  243,  243,  243,
-      243,  247,  247,  247,  247,    5,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250
+      164,   28,  169,  192,   35,   35,  191,  170,  197,  199,
+       35,   28,  181,   28,  203,   28,  205,  182,   35,  204,
+      217,  206,   64,  211,  198,   28,  203,   35,  218,  219,
+       35,  204,  214,  224,  224,   61,  225,  224,  232,  229,
+      224,  227,  232,   28,  236,  230,   35,  233,  217,  237,
+
+      241,   28,  238,  217,   28,  236,  234,  239,   35,  217,
+      237,  245,   35,   35,  217,  217,  244,  253,   35,  252,
+      250,  242,  217,  240,  208,  201,  248,  243,  232,  246,
+      247,  196,  228,  251,   26,   26,   26,   26,   28,   28,
+       28,   30,   30,   30,   30,   35,   35,   35,   35,   57,
+      223,   57,   57,   58,   58,   58,   58,   60,  221,   60,
+       60,   34,   34,   34,   34,   64,   64,  213,   64,   83,
+       83,   83,   83,   85,  176,   85,   85,  109,  109,  109,
+      109,  119,  119,  119,  119,  123,  123,  123,  123,  127,
+      127,  127,  127,  132,  132,  132,  132,  138,  138,  138,
+
+      138,  140,  208,  140,  140,  148,  148,  148,  148,  152,
+      152,  152,  152,  154,  201,  154,  154,  157,  157,  157,
+      157,  159,  196,  159,  159,  162,  162,  162,  162,  164,
+      194,  164,  164,  168,  168,  168,  168,  170,  176,  170,
+      170,  175,  175,  175,  175,  142,  115,  142,  142,  180,
+      180,  180,  180,  182,   86,  182,  182,  188,  188,  188,
+      188,  156,   35,  156,  156,  161,   29,  161,  161,  166,
+       54,  166,  166,  172,   52,  172,  172,  193,  193,  193,
+      193,  195,  195,  195,  195,  184,   35,  184,  184,  200,
+      200,  200,  200,  202,  202,  202,  202,  204,   29,  204,
+
+      204,  207,  207,  207,  207,  210,  210,  210,  210,  212,
+      212,  212,  212,  216,  216,  216,  216,  220,  220,  220,
+      220,  206,  261,  206,  206,  222,  222,  222,  222,  226,
+      226,  226,  226,  211,   27,  211,  211,  231,  231,  231,
+      231,  235,  235,  235,  235,  237,   27,  237,  237,  239,
+      261,  239,  239,  249,  249,  249,  249,  254,  254,  254,
+      254,  257,  257,  257,  257,  259,  259,  259,  259,    5,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+
+      261,  261,  261
     } ;
 
-static yyconst flex_int16_t yy_chk[690] =
+static yyconst flex_int16_t yy_chk[704] =
     {   0,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
         1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -660,7 +658,7 @@ static yyconst flex_int16_t yy_chk[690] =
        14,   11,   11,   47,   14,   11,   19,   19,   41,   15,
        16,   11,   12,   12,   12,   12,   12,   14,   16,   12,
        12,   12,   15,   18,   16,   20,   21,   23,   21,   23,
-      247,   25,   20,   38,   25,   38,   45,   18,   25,   30,
+      259,   25,   20,   38,   25,   38,   45,   18,   25,   30,
        30,   18,   31,   31,   31,   30,   40,   45,   40,   31,
 
        34,   34,   34,   34,   39,   42,   46,   34,   34,   36,
@@ -670,63 +668,66 @@ static yyconst flex_int16_t yy_chk[690] =
        58,   51,   65,   67,   50,   58,   54,   53,   54,   61,
        61,   52,   68,   67,   69,   61,   70,   71,   72,   70,
        73,   71,   74,   75,   77,   75,   68,   76,   82,   76,
-       72,   79,   73,   69,   78,   87,   78,   81,  245,   79,
+       72,   79,   73,   69,   78,   87,   78,   81,  257,   79,
        74,   80,   80,   81,   80,   91,   77,   80,   89,   82,
        83,   83,   89,   87,   90,   94,   83,   88,   88,   88,
 
-       88,   88,   95,  243,   88,   88,   90,   92,   91,   92,
+       88,   88,   95,  254,   88,   88,   90,   92,   91,   92,
        95,   98,   98,  103,   98,   94,   96,   96,   96,   96,
        96,  103,  106,   96,   96,   97,   97,   97,   97,   97,
-      100,  242,   97,   97,   99,   99,   99,   99,   99,  104,
+      100,  253,   97,   97,   99,   99,   99,   99,   99,  104,
       106,   99,   99,  104,  101,  100,  101,  102,  102,  102,
       102,  102,  105,  105,  102,  102,  107,  107,  109,  109,
       111,  112,  107,  113,  109,  115,  116,  112,  116,  117,
-      117,  119,  119,  111,  240,  117,  129,  119,  113,  114,
-      114,  114,  114,  114,  115,  197,  114,  114,  121,  121,
+      117,  119,  119,  111,  251,  117,  129,  119,  113,  114,
+      114,  114,  114,  114,  115,  198,  114,  114,  121,  121,
       123,  123,  125,  125,  121,  129,  123,  134,  125,  127,
 
-      127,  130,  130,  132,  132,  127,  135,  130,  197,  132,
-      137,  137,  138,  138,  143,  134,  145,  143,  138,  228,
+      127,  130,  130,  132,  132,  127,  135,  130,  198,  132,
+      137,  137,  138,  138,  143,  134,  145,  143,  138,  249,
       145,  146,  146,  148,  148,  135,  191,  146,  191,  148,
       150,  150,  151,  151,  151,  151,  151,  152,  152,  151,
       151,  157,  157,  152,  162,  162,  173,  157,  167,  167,
-      162,  168,  168,  174,  174,  178,  173,  168,  179,  179,
-      180,  180,  186,  186,  188,  188,  180,  198,  186,  220,
-      188,  192,  192,  216,  178,  198,  198,  201,  201,  213,
-      230,  217,  216,  201,  208,  208,  208,  208,  208,  227,
-      231,  208,  208,  227,  213,  217,  222,  222,  224,  224,
-
-      232,  232,  222,  230,  224,  238,  232,  237,  237,  241,
-      239,  218,  214,  211,  231,  209,  206,  199,  195,  193,
-      190,  185,  177,  175,  136,  238,  239,  241,  251,  251,
-      251,  251,  252,  252,  252,  253,  253,  253,  253,  254,
-      254,  254,  254,  255,   93,  255,  255,  256,  256,  256,
-      256,  257,   64,  257,  257,  258,  258,  258,  258,  259,
-      259,   35,  259,  260,  260,  260,  260,  261,   28,  261,
-      261,  262,  262,  262,  262,  263,  263,  263,  263,  264,
-      264,  264,  264,  265,  265,  265,  265,  266,  266,  266,
-      266,  267,  267,  267,  267,  268,   24,  268,  268,  269,
-
-      269,  269,  269,  270,  270,  270,  270,  271,   22,  271,
-      271,  272,  272,  272,  272,  273,   17,  273,  273,  274,
-      274,  274,  274,  275,    6,  275,  275,  276,  276,  276,
-      276,  277,    5,  277,  277,  278,  278,  278,  278,  279,
-        4,  279,  279,  280,  280,  280,  280,  281,    3,  281,
-      281,  282,  282,  282,  282,  283,    0,  283,  283,  284,
-        0,  284,  284,  285,    0,  285,  285,  286,    0,  286,
-      286,  287,  287,  287,  287,  288,  288,  288,  288,  289,
-        0,  289,  289,  290,  290,  290,  290,  291,  291,  291,
-      291,  292,    0,  292,  292,  293,  293,  293,  293,  294,
-
-      294,  294,  294,  295,  295,  295,  295,  296,  296,  296,
-      296,  297,  297,  297,  297,  298,    0,  298,  298,  299,
-      299,  299,  299,  300,  300,  300,  300,  301,    0,  301,
-      301,  302,  302,  302,  302,  303,  303,  303,  303,  304,
-        0,  304,  304,  305,    0,  305,  305,  306,  306,  306,
-      306,  307,  307,  307,  307,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
-      250,  250,  250,  250,  250,  250,  250,  250,  250
+      162,  168,  168,  174,  174,  178,  173,  168,  178,  179,
+      179,  180,  180,  186,  186,  188,  188,  180,  197,  186,
+      199,  188,  192,  192,  178,  202,  202,  214,  199,  199,
+      215,  202,  197,  209,  209,  209,  209,  209,  218,  214,
+      209,  209,  219,  224,  224,  215,  230,  218,  233,  224,
+
+      230,  226,  226,  234,  235,  235,  219,  226,  240,  242,
+      235,  241,  241,  244,  243,  246,  240,  248,  248,  247,
+      245,  233,  231,  229,  222,  220,  244,  234,  216,  242,
+      243,  212,  210,  246,  262,  262,  262,  262,  263,  263,
+      263,  264,  264,  264,  264,  265,  265,  265,  265,  266,
+      207,  266,  266,  267,  267,  267,  267,  268,  200,  268,
+      268,  269,  269,  269,  269,  270,  270,  195,  270,  271,
+      271,  271,  271,  272,  193,  272,  272,  273,  273,  273,
+      273,  274,  274,  274,  274,  275,  275,  275,  275,  276,
+      276,  276,  276,  277,  277,  277,  277,  278,  278,  278,
+
+      278,  279,  190,  279,  279,  280,  280,  280,  280,  281,
+      281,  281,  281,  282,  185,  282,  282,  283,  283,  283,
+      283,  284,  177,  284,  284,  285,  285,  285,  285,  286,
+      175,  286,  286,  287,  287,  287,  287,  288,  136,  288,
+      288,  289,  289,  289,  289,  290,   93,  290,  290,  291,
+      291,  291,  291,  292,   64,  292,  292,  293,  293,  293,
+      293,  294,   35,  294,  294,  295,   28,  295,  295,  296,
+       24,  296,  296,  297,   22,  297,  297,  298,  298,  298,
+      298,  299,  299,  299,  299,  300,   17,  300,  300,  301,
+      301,  301,  301,  302,  302,  302,  302,  303,    6,  303,
+
+      303,  304,  304,  304,  304,  305,  305,  305,  305,  306,
+      306,  306,  306,  307,  307,  307,  307,  308,  308,  308,
+      308,  309,    5,  309,  309,  310,  310,  310,  310,  311,
+      311,  311,  311,  312,    4,  312,  312,  313,  313,  313,
+      313,  314,  314,  314,  314,  315,    3,  315,  315,  316,
+        0,  316,  316,  317,  317,  317,  317,  318,  318,  318,
+      318,  319,  319,  319,  319,  320,  320,  320,  320,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
+
+      261,  261,  261
     } ;
 
 #define YY_TRAILING_MASK 0x2000
@@ -856,6 +857,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
     else xlu__disk_err(dpc,str,"unknown value for backendtype");
 }
 
+/* Sets ->backend_domid from the string. */
+static void setbackend(DiskParseContext *dpc, const char *str) {
+    if (libxl_name_to_domid(dpc->ctx, str, &dpc->disk->backend_domid)) {
+        xlu__disk_err(dpc,str,"unknown domain for backend");
+    }
+}
+
 #define DEPRECATE(usewhatinstead) /* not currently reported */
 
 /* Handles a vdev positional parameter which includes a devtype. */
@@ -883,7 +891,7 @@ static int vdev_and_devtype(DiskParseContext *dpc, char *str) {
 #define DPC ((DiskParseContext*)yyextra)
 
 
-#line 887 "libxlu_disk_l.c"
+#line 895 "libxlu_disk_l.c"
 
 #define INITIAL 0
 #define LEXERR 1
@@ -980,6 +988,10 @@ int xlu__disk_yyget_lineno (yyscan_t yyscanner );
 
 void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
 
+int xlu__disk_yyget_column  (yyscan_t yyscanner );
+
+void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -1012,12 +1024,7 @@ static int input (yyscan_t yyscanner );
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Copy whatever the last rule matched to the standard output. */
@@ -1036,7 +1043,7 @@ static int input (yyscan_t yyscanner );
 	if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
 		{ \
 		int c = '*'; \
-		size_t n; \
+		unsigned n; \
 		for ( n = 0; n < max_size && \
 			     (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
 			buf[n] = (char) c; \
@@ -1119,12 +1126,12 @@ YY_DECL
 	register int yy_act;
     struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
 
-#line 155 "libxlu_disk_l.l"
+#line 162 "libxlu_disk_l.l"
 
 
  /*----- the scanner rules which do the parsing -----*/
 
-#line 1128 "libxlu_disk_l.c"
+#line 1135 "libxlu_disk_l.c"
 
 	if ( !yyg->yy_init )
 		{
@@ -1188,14 +1195,14 @@ yy_match:
 			while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 				{
 				yy_current_state = (int) yy_def[yy_current_state];
-				if ( yy_current_state >= 251 )
+				if ( yy_current_state >= 262 )
 					yy_c = yy_meta[(unsigned int) yy_c];
 				}
 			yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
 			*yyg->yy_state_ptr++ = yy_current_state;
 			++yy_cp;
 			}
-		while ( yy_current_state != 250 );
+		while ( yy_current_state != 261 );
 
 yy_find_action:
 		yy_current_state = *--yyg->yy_state_ptr;
@@ -1245,89 +1252,95 @@ do_action:	/* This label is used only to access EOF actions. */
 case 1:
 /* rule 1 can match eol */
 YY_RULE_SETUP
-#line 159 "libxlu_disk_l.l"
+#line 166 "libxlu_disk_l.l"
 { /* ignore whitespace before parameters */ }
 	YY_BREAK
 /* ordinary parameters setting enums or strings */
 case 2:
 /* rule 2 can match eol */
 YY_RULE_SETUP
-#line 163 "libxlu_disk_l.l"
+#line 170 "libxlu_disk_l.l"
 { STRIP(','); setformat(DPC, FROMEQUALS); }
 	YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 165 "libxlu_disk_l.l"
+#line 172 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 1; }
 	YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 166 "libxlu_disk_l.l"
+#line 173 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 1; }
 	YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 167 "libxlu_disk_l.l"
+#line 174 "libxlu_disk_l.l"
 { DPC->disk->is_cdrom = 0; }
 	YY_BREAK
 case 6:
 /* rule 6 can match eol */
 YY_RULE_SETUP
-#line 168 "libxlu_disk_l.l"
+#line 175 "libxlu_disk_l.l"
 { xlu__disk_err(DPC,yytext,"unknown value for type"); }
 	YY_BREAK
 case 7:
 /* rule 7 can match eol */
 YY_RULE_SETUP
-#line 170 "libxlu_disk_l.l"
+#line 177 "libxlu_disk_l.l"
 { STRIP(','); setaccess(DPC, FROMEQUALS); }
 	YY_BREAK
 case 8:
 /* rule 8 can match eol */
 YY_RULE_SETUP
-#line 171 "libxlu_disk_l.l"
+#line 178 "libxlu_disk_l.l"
 { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
 	YY_BREAK
 case 9:
 /* rule 9 can match eol */
 YY_RULE_SETUP
-#line 173 "libxlu_disk_l.l"
-{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
+#line 179 "libxlu_disk_l.l"
+{ STRIP(','); setbackend(DPC,FROMEQUALS); }
 	YY_BREAK
 case 10:
 /* rule 10 can match eol */
 YY_RULE_SETUP
-#line 174 "libxlu_disk_l.l"
+#line 181 "libxlu_disk_l.l"
+{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
+	YY_BREAK
+case 11:
+/* rule 11 can match eol */
+YY_RULE_SETUP
+#line 182 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
 	YY_BREAK
 /* the target magic parameter, eats the rest of the string */
-case 11:
+case 12:
 YY_RULE_SETUP
-#line 178 "libxlu_disk_l.l"
+#line 186 "libxlu_disk_l.l"
 { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); }
 	YY_BREAK
 /* unknown parameters */
-case 12:
-/* rule 12 can match eol */
+case 13:
+/* rule 13 can match eol */
 YY_RULE_SETUP
-#line 182 "libxlu_disk_l.l"
+#line 190 "libxlu_disk_l.l"
 { xlu__disk_err(DPC,yytext,"unknown parameter"); }
 	YY_BREAK
 /* deprecated prefixes */
 /* the "/.*" in these patterns ensures that they count as if they
    * matched the whole string, so these patterns take precedence */
-case 13:
+case 14:
 YY_RULE_SETUP
-#line 189 "libxlu_disk_l.l"
+#line 197 "libxlu_disk_l.l"
 {
                     STRIP(':');
                     DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'");
                     setformat(DPC, yytext);
                  }
 	YY_BREAK
-case 14:
+case 15:
 YY_RULE_SETUP
-#line 195 "libxlu_disk_l.l"
+#line 203 "libxlu_disk_l.l"
 {
                     char *newscript;
                     STRIP(':');
@@ -1341,65 +1354,65 @@ YY_RULE_SETUP
                     free(newscript);
                 }
 	YY_BREAK
-case 15:
+case 16:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 8;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 208 "libxlu_disk_l.l"
+#line 216 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 16:
+case 17:
 YY_RULE_SETUP
-#line 209 "libxlu_disk_l.l"
+#line 217 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 17:
+case 18:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 210 "libxlu_disk_l.l"
+#line 218 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 18:
+case 19:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 211 "libxlu_disk_l.l"
+#line 219 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 19:
+case 20:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 212 "libxlu_disk_l.l"
+#line 220 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 20:
+case 21:
 *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
 yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
 YY_DO_BEFORE_ACTION; /* set up yytext again */
 YY_RULE_SETUP
-#line 213 "libxlu_disk_l.l"
+#line 221 "libxlu_disk_l.l"
 { DPC->had_depr_prefix=1; DEPRECATE(0); }
 	YY_BREAK
-case 21:
-/* rule 21 can match eol */
+case 22:
+/* rule 22 can match eol */
 YY_RULE_SETUP
-#line 215 "libxlu_disk_l.l"
+#line 223 "libxlu_disk_l.l"
 {
 		  xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix");
 		  return 0;
 		}
 	YY_BREAK
 /* positional parameters */
-case 22:
-/* rule 22 can match eol */
+case 23:
+/* rule 23 can match eol */
 YY_RULE_SETUP
-#line 222 "libxlu_disk_l.l"
+#line 230 "libxlu_disk_l.l"
 {
     STRIP(',');
 
@@ -1426,27 +1439,27 @@ YY_RULE_SETUP
     }
 }
 	YY_BREAK
-case 23:
+case 24:
 YY_RULE_SETUP
-#line 248 "libxlu_disk_l.l"
+#line 256 "libxlu_disk_l.l"
 {
     BEGIN(LEXERR);
     yymore();
 }
 	YY_BREAK
-case 24:
+case 25:
 YY_RULE_SETUP
-#line 252 "libxlu_disk_l.l"
+#line 260 "libxlu_disk_l.l"
 {
     xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0;
 }
 	YY_BREAK
-case 25:
+case 26:
 YY_RULE_SETUP
-#line 255 "libxlu_disk_l.l"
+#line 263 "libxlu_disk_l.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
 	YY_BREAK
-#line 1450 "libxlu_disk_l.c"
+#line 1463 "libxlu_disk_l.c"
 			case YY_STATE_EOF(INITIAL):
 			case YY_STATE_EOF(LEXERR):
 				yyterminate();
@@ -1710,7 +1723,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 		while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 			{
 			yy_current_state = (int) yy_def[yy_current_state];
-			if ( yy_current_state >= 251 )
+			if ( yy_current_state >= 262 )
 				yy_c = yy_meta[(unsigned int) yy_c];
 			}
 		yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
@@ -1734,11 +1747,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
 	while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
 		{
 		yy_current_state = (int) yy_def[yy_current_state];
-		if ( yy_current_state >= 251 )
+		if ( yy_current_state >= 262 )
 			yy_c = yy_meta[(unsigned int) yy_c];
 		}
 	yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-	yy_is_jam = (yy_current_state == 250);
+	yy_is_jam = (yy_current_state == 261);
 	if ( ! yy_is_jam )
 		*yyg->yy_state_ptr++ = yy_current_state;
 
@@ -2147,8 +2160,8 @@ YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char * yystr , yyscan_t yyscan
 
 /** Setup the input buffer state to scan the given bytes. The next call to xlu__disk_yylex() will
  * scan from a @e copy of @a bytes.
- * @param yybytes the byte buffer to scan
- * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ * @param bytes the byte buffer to scan
+ * @param len the number of bytes in the buffer pointed to by @a bytes.
  * @param yyscanner The scanner object.
  * @return the newly allocated buffer state object.
  */
@@ -2538,4 +2551,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner)
 
 #define YYTABLES_NAME "yytables"
 
-#line 255 "libxlu_disk_l.l"
+#line 263 "libxlu_disk_l.l"
diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h
index de03908..247a0d7 100644
--- a/tools/libxl/libxlu_disk_l.h
+++ b/tools/libxl/libxlu_disk_l.h
@@ -62,6 +62,7 @@ typedef int flex_int32_t;
 typedef unsigned char flex_uint8_t; 
 typedef unsigned short int flex_uint16_t;
 typedef unsigned int flex_uint32_t;
+#endif /* ! C99 */
 
 /* Limits of integral types. */
 #ifndef INT8_MIN
@@ -92,8 +93,6 @@ typedef unsigned int flex_uint32_t;
 #define UINT32_MAX             (4294967295U)
 #endif
 
-#endif /* ! C99 */
-
 #endif /* ! FLEXINT_H */
 
 #ifdef __cplusplus
@@ -136,15 +135,7 @@ typedef void* yyscan_t;
 
 /* Size of default input buffer. */
 #ifndef YY_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k.
- * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
- * Ditto for the __ia64__ case accordingly.
- */
-#define YY_BUF_SIZE 32768
-#else
 #define YY_BUF_SIZE 16384
-#endif /* __ia64__ */
 #endif
 
 #ifndef YY_TYPEDEF_YY_BUFFER_STATE
@@ -280,6 +271,10 @@ int xlu__disk_yyget_lineno (yyscan_t yyscanner );
 
 void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
 
+int xlu__disk_yyget_column  (yyscan_t yyscanner );
+
+void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
+
 /* Macros after this point can all be overridden by user definitions in
  * section 1.
  */
@@ -306,12 +301,7 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
 
 /* Amount of stuff to slurp up with each read. */
 #ifndef YY_READ_BUF_SIZE
-#ifdef __ia64__
-/* On IA-64, the buffer size is 16k, not 8k */
-#define YY_READ_BUF_SIZE 16384
-#else
 #define YY_READ_BUF_SIZE 8192
-#endif /* __ia64__ */
 #endif
 
 /* Number of entries by which start-condition stack grows. */
@@ -344,8 +334,8 @@ extern int xlu__disk_yylex (yyscan_t yyscanner);
 #undef YY_DECL
 #endif
 
-#line 255 "libxlu_disk_l.l"
+#line 263 "libxlu_disk_l.l"
 
-#line 350 "libxlu_disk_l.h"
+#line 340 "libxlu_disk_l.h"
 #undef xlu__disk_yyIN_HEADER
 #endif /* xlu__disk_yyHEADER_H */
diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
index bee16a1..6bd48e8 100644
--- a/tools/libxl/libxlu_disk_l.l
+++ b/tools/libxl/libxlu_disk_l.l
@@ -113,6 +113,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
     else xlu__disk_err(dpc,str,"unknown value for backendtype");
 }
 
+/* Sets ->backend_domid from the string. */
+static void setbackend(DiskParseContext *dpc, const char *str) {
+    if (libxl_name_to_domid(dpc->ctx, str, &dpc->disk->backend_domid)) {
+        xlu__disk_err(dpc,str,"unknown domain for backend");
+    }
+}
+
 #define DEPRECATE(usewhatinstead) /* not currently reported */
 
 /* Handles a vdev positional parameter which includes a devtype. */
@@ -169,6 +176,7 @@ devtype=[^,]*,?	{ xlu__disk_err(DPC,yytext,"unknown value for type"); }
 
 access=[^,]*,?	{ STRIP(','); setaccess(DPC, FROMEQUALS); }
 backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
+backenddomain=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
 
 vdev=[^,]*,?	{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
 script=[^,]*,?	{ STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
index 0333e55..87eb399 100644
--- a/tools/libxl/libxlutil.h
+++ b/tools/libxl/libxlutil.h
@@ -72,7 +72,7 @@ const char *xlu_cfg_get_listitem(const XLU_ConfigList*, int entry);
  */
 
 int xlu_disk_parse(XLU_Config *cfg, int nspecs, const char *const *specs,
-                   libxl_device_disk *disk);
+                   libxl_device_disk *disk, libxl_ctx *ctx);
   /* disk must have been initialised.
    *
    * On error, returns errno value.  Bad strings cause EINVAL and
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 138cd72..fd00d61 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -420,7 +420,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
         if (!*config) { perror("xlu_cfg_init"); exit(-1); }
     }
 
-    e = xlu_disk_parse(*config, nspecs, specs, disk);
+    e = xlu_disk_parse(*config, nspecs, specs, disk, ctx);
     if (e == EINVAL) exit(-1);
     if (e) {
         fprintf(stderr,"xlu_disk_parse failed: %s\n",strerror(errno));
@@ -5335,7 +5335,7 @@ int main_networkdetach(int argc, char **argv)
 int main_blockattach(int argc, char **argv)
 {
     int opt;
-    uint32_t fe_domid, be_domid = 0;
+    uint32_t fe_domid;
     libxl_device_disk disk = { 0 };
     XLU_Config *config = 0;
 
@@ -5351,8 +5351,6 @@ int main_blockattach(int argc, char **argv)
     parse_disk_config_multistring
         (&config, argc-optind, (const char* const*)argv + optind, &disk);
 
-    disk.backend_domid = be_domid;
-
     if (dryrun_only) {
         char *json = libxl_device_disk_to_json(ctx, &disk);
         printf("disk: %s\n", json);
-- 
1.7.11.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks
  2012-08-06 21:51 [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks Daniel De Graaf
@ 2012-08-07  9:36 ` Ian Campbell
  2012-08-07 10:38   ` Ian Jackson
  2012-08-07 13:56   ` Daniel De Graaf
  2012-08-31  8:04 ` Ian Campbell
  1 sibling, 2 replies; 10+ messages in thread
From: Ian Campbell @ 2012-08-07  9:36 UTC (permalink / raw)
  To: Daniel De Graaf; +Cc: Ian Jackson, xen-devel

On Mon, 2012-08-06 at 22:51 +0100, Daniel De Graaf wrote:
> Allow specification of backend domains for disks, either in the config
> file or via xl block-attach.
> 
> A version of this patch was submitted in October 2011 but was not
> suitable at the time because libxl did not support the "script=" option
> for disks in libxl. Now that this option exists, it is possible to
> specify a backend domain without needing to duplicate the device tree of
> domain providing the disk in the domain using libxl; just specify
> script=/bin/true (or any more useful script) to prevent the block script
> from running in the domain using libxl.

You can also set run_hotplug_scripts=0 in /etc/xen/xl.conf which causes
the scripts to be run from udev again -- which means they should run in
the appropriate domain automatically. (although I confess I don't
understand the reliance on script= here, so perhaps I've got the totally
wrong end of the stick)

Given that this patch was originally posted so long ago, that the
script= stuff just went in, that driver domains were on the TODO at one
point (I think) and the relative simplicity of this patch I'm leaning
towards taking this in 4.2.

> In order to support named backend domains like network-attach, the
> prototype of xlu_disk_parse in libxlutil.h needs a libxl_ctx. Without
> this parameter, it would only be only possible to support numeric domain
> IDs in the block device specification.

I'm not sure if using libxl in libxlu is a layering violation or not
(perhaps Ian J has an opinion), but I suppose it is acceptable (the
alternative is a twisty maze of callbacks).

If we are going to expose libxl down to libxlu maybe we should go all
the way and add the ctx to the XLU_Config?

> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
> 
> ---
> 
> This patch does not include the changes to tools/libxl/libxlu_disk_l.c
> and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
> changes due to different generator versions.

I'm afraid it did, but I've ignored them.

>  tools/libxl/libxlu_disk.c   |   3 +-
>  tools/libxl/libxlu_disk_i.h |   3 +-
>  tools/libxl/libxlu_disk_l.c | 581 ++++++++++++++++++++++----------------------
>  tools/libxl/libxlu_disk_l.h |  24 +-
>  tools/libxl/libxlu_disk_l.l |   8 +
>  tools/libxl/libxlutil.h     |   2 +-
>  tools/libxl/xl_cmdimpl.c    |   6 +-

This patch should also touch docs/misc/xl-disk-configuration.txt.

[...]
> @@ -169,6 +176,7 @@ devtype=[^,]*,?     { xlu__disk_err(DPC,yytext,"unknown value for type"); }
> 
>  access=[^,]*,? { STRIP(','); setaccess(DPC, FROMEQUALS); }
>  backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
> +backenddomain=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }

Is this compatible with xend? Grep doesn't show the string
"backenddomain" at all. Maybe xend simply didn't have this
functionality?

xl seems to use just backend for network devices. They probably ought to
match.

>  vdev=[^,]*,?   { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
>  script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
> diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
> index 0333e55..87eb399 100644
> --- a/tools/libxl/libxlutil.h
> +++ b/tools/libxl/libxlutil.h
> @@ -72,7 +72,7 @@ const char *xlu_cfg_get_listitem(const XLU_ConfigList*, int entry);
>   */
> 
>  int xlu_disk_parse(XLU_Config *cfg, int nspecs, const char *const *specs,
> -                   libxl_device_disk *disk);
> +                   libxl_device_disk *disk, libxl_ctx *ctx);
>    /* disk must have been initialised.
>     *
>     * On error, returns errno value.  Bad strings cause EINVAL and
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 138cd72..fd00d61 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -420,7 +420,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
>          if (!*config) { perror("xlu_cfg_init"); exit(-1); }
>      }
> 
> -    e = xlu_disk_parse(*config, nspecs, specs, disk);
> +    e = xlu_disk_parse(*config, nspecs, specs, disk, ctx);
>      if (e == EINVAL) exit(-1);
>      if (e) {
>          fprintf(stderr,"xlu_disk_parse failed: %s\n",strerror(errno));
> @@ -5335,7 +5335,7 @@ int main_networkdetach(int argc, char **argv)
>  int main_blockattach(int argc, char **argv)
>  {
>      int opt;
> -    uint32_t fe_domid, be_domid = 0;
> +    uint32_t fe_domid;
>      libxl_device_disk disk = { 0 };
>      XLU_Config *config = 0;
> 
> @@ -5351,8 +5351,6 @@ int main_blockattach(int argc, char **argv)
>      parse_disk_config_multistring
>          (&config, argc-optind, (const char* const*)argv + optind, &disk);
> 
> -    disk.backend_domid = be_domid;
> -

xm block-attach's syntax was (allegedly): 
        Usage: xm block-attach <Domain> <BackDev> <FrontDev> <Mode> [BackDomain]

i.e. it accepted backdomain on the command line. Do we want/need to
support that? I'd be happy enough not to.

>      if (dryrun_only) {
>          char *json = libxl_device_disk_to_json(ctx, &disk);
>          printf("disk: %s\n", json);
> --
> 1.7.11.2
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks
  2012-08-07  9:36 ` Ian Campbell
@ 2012-08-07 10:38   ` Ian Jackson
  2012-08-07 13:56   ` Daniel De Graaf
  1 sibling, 0 replies; 10+ messages in thread
From: Ian Jackson @ 2012-08-07 10:38 UTC (permalink / raw)
  To: Ian Campbell; +Cc: Daniel De Graaf, xen-devel

Ian Campbell writes ("Re: [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks"):
> On Mon, 2012-08-06 at 22:51 +0100, Daniel De Graaf wrote:
> > Allow specification of backend domains for disks, either in the config
> > file or via xl block-attach.
> > 
> > A version of this patch was submitted in October 2011 but was not
> > suitable at the time because libxl did not support the "script=" option
> > for disks in libxl. Now that this option exists, it is possible to
> > specify a backend domain without needing to duplicate the device tree of
> > domain providing the disk in the domain using libxl; just specify
> > script=/bin/true (or any more useful script) to prevent the block script
> > from running in the domain using libxl.

Thanks, Daniel!

> Given that this patch was originally posted so long ago, that the
> script= stuff just went in, that driver domains were on the TODO at one
> point (I think) and the relative simplicity of this patch I'm leaning
> towards taking this in 4.2.

The patch looks good to me and it improves a regression compared to
xend, the fixing of which is one of our goals for 4.2.  So I think
this is fine.

> I'm not sure if using libxl in libxlu is a layering violation or not
> (perhaps Ian J has an opinion), but I suppose it is acceptable (the
> alternative is a twisty maze of callbacks).

No, it's not a layering violation.

The only question in my mind was whether the libxl domain config
struct (in the IDL) should contain (perhaps optionally) the name, so
that the lookup is done at a slightly better time, but the result
would not be pretty at all and I think it's better this way.

> If we are going to expose libxl down to libxlu maybe we should go all
> the way and add the ctx to the XLU_Config?

Yes, I think that would be better.

Ian.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks
  2012-08-07  9:36 ` Ian Campbell
  2012-08-07 10:38   ` Ian Jackson
@ 2012-08-07 13:56   ` Daniel De Graaf
  1 sibling, 0 replies; 10+ messages in thread
From: Daniel De Graaf @ 2012-08-07 13:56 UTC (permalink / raw)
  To: Ian Campbell; +Cc: Ian Jackson, xen-devel

On 08/07/2012 05:36 AM, Ian Campbell wrote:
> On Mon, 2012-08-06 at 22:51 +0100, Daniel De Graaf wrote:
>> Allow specification of backend domains for disks, either in the config
>> file or via xl block-attach.
>>
>> A version of this patch was submitted in October 2011 but was not
>> suitable at the time because libxl did not support the "script=" option
>> for disks in libxl. Now that this option exists, it is possible to
>> specify a backend domain without needing to duplicate the device tree of
>> domain providing the disk in the domain using libxl; just specify
>> script=/bin/true (or any more useful script) to prevent the block script
>> from running in the domain using libxl.
> 
> You can also set run_hotplug_scripts=0 in /etc/xen/xl.conf which causes
> the scripts to be run from udev again -- which means they should run in
> the appropriate domain automatically. (although I confess I don't
> understand the reliance on script= here, so perhaps I've got the totally
> wrong end of the stick)

No, I just missed that setting that option would also do this.

> Given that this patch was originally posted so long ago, that the
> script= stuff just went in, that driver domains were on the TODO at one
> point (I think) and the relative simplicity of this patch I'm leaning
> towards taking this in 4.2.
> 
>> In order to support named backend domains like network-attach, the
>> prototype of xlu_disk_parse in libxlutil.h needs a libxl_ctx. Without
>> this parameter, it would only be only possible to support numeric domain
>> IDs in the block device specification.
> 
> I'm not sure if using libxl in libxlu is a layering violation or not
> (perhaps Ian J has an opinion), but I suppose it is acceptable (the
> alternative is a twisty maze of callbacks).
> 
> If we are going to expose libxl down to libxlu maybe we should go all
> the way and add the ctx to the XLU_Config?
> 
>> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
>>
>> ---
>>
>> This patch does not include the changes to tools/libxl/libxlu_disk_l.c
>> and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
>> changes due to different generator versions.
> 
> I'm afraid it did, but I've ignored them.
> 
>>  tools/libxl/libxlu_disk.c   |   3 +-
>>  tools/libxl/libxlu_disk_i.h |   3 +-
>>  tools/libxl/libxlu_disk_l.c | 581 ++++++++++++++++++++++----------------------
>>  tools/libxl/libxlu_disk_l.h |  24 +-
>>  tools/libxl/libxlu_disk_l.l |   8 +
>>  tools/libxl/libxlutil.h     |   2 +-
>>  tools/libxl/xl_cmdimpl.c    |   6 +-
> 
> This patch should also touch docs/misc/xl-disk-configuration.txt.

I'll add that in v2.

> [...]
>> @@ -169,6 +176,7 @@ devtype=[^,]*,?     { xlu__disk_err(DPC,yytext,"unknown value for type"); }
>>
>>  access=[^,]*,? { STRIP(','); setaccess(DPC, FROMEQUALS); }
>>  backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
>> +backenddomain=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
> 
> Is this compatible with xend? Grep doesn't show the string
> "backenddomain" at all. Maybe xend simply didn't have this
> functionality?

The implementation I have for xend was in the comma-separated syntax only,
but I think that may have been due to non-upstreamed patches.
 
> xl seems to use just backend for network devices. They probably ought to
> match.

Originally I had the patch using "backend" but received comments that it could
be confused with backendtype. Matching the network device specification is a
good idea, and I'm fine with either name.
 
>>  vdev=[^,]*,?   { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
>>  script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
>> diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
>> index 0333e55..87eb399 100644
>> --- a/tools/libxl/libxlutil.h
>> +++ b/tools/libxl/libxlutil.h
>> @@ -72,7 +72,7 @@ const char *xlu_cfg_get_listitem(const XLU_ConfigList*, int entry);
>>   */
>>
>>  int xlu_disk_parse(XLU_Config *cfg, int nspecs, const char *const *specs,
>> -                   libxl_device_disk *disk);
>> +                   libxl_device_disk *disk, libxl_ctx *ctx);
>>    /* disk must have been initialised.
>>     *
>>     * On error, returns errno value.  Bad strings cause EINVAL and
>> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
>> index 138cd72..fd00d61 100644
>> --- a/tools/libxl/xl_cmdimpl.c
>> +++ b/tools/libxl/xl_cmdimpl.c
>> @@ -420,7 +420,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
>>          if (!*config) { perror("xlu_cfg_init"); exit(-1); }
>>      }
>>
>> -    e = xlu_disk_parse(*config, nspecs, specs, disk);
>> +    e = xlu_disk_parse(*config, nspecs, specs, disk, ctx);
>>      if (e == EINVAL) exit(-1);
>>      if (e) {
>>          fprintf(stderr,"xlu_disk_parse failed: %s\n",strerror(errno));
>> @@ -5335,7 +5335,7 @@ int main_networkdetach(int argc, char **argv)
>>  int main_blockattach(int argc, char **argv)
>>  {
>>      int opt;
>> -    uint32_t fe_domid, be_domid = 0;
>> +    uint32_t fe_domid;
>>      libxl_device_disk disk = { 0 };
>>      XLU_Config *config = 0;
>>
>> @@ -5351,8 +5351,6 @@ int main_blockattach(int argc, char **argv)
>>      parse_disk_config_multistring
>>          (&config, argc-optind, (const char* const*)argv + optind, &disk);
>>
>> -    disk.backend_domid = be_domid;
>> -
> 
> xm block-attach's syntax was (allegedly): 
>         Usage: xm block-attach <Domain> <BackDev> <FrontDev> <Mode> [BackDomain]
> 
> i.e. it accepted backdomain on the command line. Do we want/need to
> support that? I'd be happy enough not to.
> 
>>      if (dryrun_only) {
>>          char *json = libxl_device_disk_to_json(ctx, &disk);
>>          printf("disk: %s\n", json);
>> --
>> 1.7.11.2
>>
> 
> 
> 


-- 
Daniel De Graaf
National Security Agency

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks
  2012-08-06 21:51 [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks Daniel De Graaf
  2012-08-07  9:36 ` Ian Campbell
@ 2012-08-31  8:04 ` Ian Campbell
  2012-09-05 17:05   ` [PATCH v2] " Daniel De Graaf
  1 sibling, 1 reply; 10+ messages in thread
From: Ian Campbell @ 2012-08-31  8:04 UTC (permalink / raw)
  To: Daniel De Graaf; +Cc: Ian Jackson, xen-devel

Hi Daniel,
On Mon, 2012-08-06 at 22:51 +0100, Daniel De Graaf wrote:
> Allow specification of backend domains for disks, either in the config
> file or via xl block-attach.

Were you intending to resubmit this patch for 4.2? We're pretty close to
cutting what we hope will be the final RC.

We are intending to take a slightly more liberal than normal approach to
backports for 4.2.1 to allow xl features which improve xm parity, so
this might be a candidate for that.

Ian.

> A version of this patch was submitted in October 2011 but was not
> suitable at the time because libxl did not support the "script=" option
> for disks in libxl. Now that this option exists, it is possible to
> specify a backend domain without needing to duplicate the device tree of
> domain providing the disk in the domain using libxl; just specify
> script=/bin/true (or any more useful script) to prevent the block script
> from running in the domain using libxl.
> 
> In order to support named backend domains like network-attach, the
> prototype of xlu_disk_parse in libxlutil.h needs a libxl_ctx. Without
> this parameter, it would only be only possible to support numeric domain
> IDs in the block device specification.
> 
> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
> 
> ---
> 
> This patch does not include the changes to tools/libxl/libxlu_disk_l.c
> and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
> changes due to different generator versions.
> 
>  tools/libxl/libxlu_disk.c   |   3 +-
>  tools/libxl/libxlu_disk_i.h |   3 +-
>  tools/libxl/libxlu_disk_l.c | 581 ++++++++++++++++++++++----------------------
>  tools/libxl/libxlu_disk_l.h |  24 +-
>  tools/libxl/libxlu_disk_l.l |   8 +
>  tools/libxl/libxlutil.h     |   2 +-
>  tools/libxl/xl_cmdimpl.c    |   6 +-
>  7 files changed, 319 insertions(+), 308 deletions(-)
> 
> diff --git a/tools/libxl/libxlu_disk.c b/tools/libxl/libxlu_disk.c
> index 18fe386..1e6caca 100644
> --- a/tools/libxl/libxlu_disk.c
> +++ b/tools/libxl/libxlu_disk.c
> @@ -48,7 +48,7 @@ static void dpc_dispose(DiskParseContext *dpc) {
> 
>  int xlu_disk_parse(XLU_Config *cfg,
>                     int nspecs, const char *const *specs,
> -                   libxl_device_disk *disk) {
> +                   libxl_device_disk *disk, libxl_ctx *ctx) {
>      DiskParseContext dpc;
>      int i, e;
> 
> @@ -56,6 +56,7 @@ int xlu_disk_parse(XLU_Config *cfg,
>      dpc.cfg = cfg;
>      dpc.scanner = 0;
>      dpc.disk = disk;
> +    dpc.ctx = ctx;
> 
>      disk->readwrite = 1;
> 
> diff --git a/tools/libxl/libxlu_disk_i.h b/tools/libxl/libxlu_disk_i.h
> index 4fccd4a..c220bcf 100644
> --- a/tools/libxl/libxlu_disk_i.h
> +++ b/tools/libxl/libxlu_disk_i.h
> @@ -2,7 +2,7 @@
>  #define LIBXLU_DISK_I_H
> 
>  #include "libxlu_internal.h"
> -
> +#include "libxl_utils.h"
> 
>  typedef struct {
>      XLU_Config *cfg;
> @@ -12,6 +12,7 @@ typedef struct {
>      libxl_device_disk *disk;
>      int access_set, had_depr_prefix;
>      const char *spec;
> +    libxl_ctx *ctx;
>  } DiskParseContext;
> 
>  void xlu__disk_err(DiskParseContext *dpc, const char *erroneous,
> diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c
> index 4c68034..4e17f7c 100644
> --- a/tools/libxl/libxlu_disk_l.c
> +++ b/tools/libxl/libxlu_disk_l.c
> @@ -58,6 +58,7 @@ typedef int flex_int32_t;
>  typedef unsigned char flex_uint8_t;
>  typedef unsigned short int flex_uint16_t;
>  typedef unsigned int flex_uint32_t;
> +#endif /* ! C99 */
> 
>  /* Limits of integral types. */
>  #ifndef INT8_MIN
> @@ -88,8 +89,6 @@ typedef unsigned int flex_uint32_t;
>  #define UINT32_MAX             (4294967295U)
>  #endif
> 
> -#endif /* ! C99 */
> -
>  #endif /* ! FLEXINT_H */
> 
>  #ifdef __cplusplus
> @@ -163,15 +162,7 @@ typedef void* yyscan_t;
> 
>  /* Size of default input buffer. */
>  #ifndef YY_BUF_SIZE
> -#ifdef __ia64__
> -/* On IA-64, the buffer size is 16k, not 8k.
> - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
> - * Ditto for the __ia64__ case accordingly.
> - */
> -#define YY_BUF_SIZE 32768
> -#else
>  #define YY_BUF_SIZE 16384
> -#endif /* __ia64__ */
>  #endif
> 
>  /* The state buf must be large enough to hold one state per character in the main buffer.
> @@ -361,8 +352,8 @@ static void yy_fatal_error (yyconst char msg[] ,yyscan_t yyscanner );
>         *yy_cp = '\0'; \
>         yyg->yy_c_buf_p = yy_cp;
> 
> -#define YY_NUM_RULES 25
> -#define YY_END_OF_BUFFER 26
> +#define YY_NUM_RULES 26
> +#define YY_END_OF_BUFFER 27
>  /* This struct is not used in this scanner,
>     but its presence is necessary. */
>  struct yy_trans_info
> @@ -370,60 +361,61 @@ struct yy_trans_info
>         flex_int32_t yy_verify;
>         flex_int32_t yy_nxt;
>         };
> -static yyconst flex_int16_t yy_acclist[447] =
> +static yyconst flex_int16_t yy_acclist[460] =
>      {   0,
> -       24,   24,   26,   22,   23,   25, 8193,   22,   23,   25,
> -    16385, 8193,   22,   25,16385,   22,   23,   25,   23,   25,
> -       22,   23,   25,   22,   23,   25,   22,   23,   25,   22,
> -       23,   25,   22,   23,   25,   22,   23,   25,   22,   23,
> -       25,   22,   23,   25,   22,   23,   25,   22,   23,   25,
> -       22,   23,   25,   22,   23,   25,   22,   23,   25,   22,
> -       23,   25,   22,   23,   25,   24,   25,   25,   22,   22,
> -     8193,   22, 8193,   22,16385, 8193,   22, 8193,   22,   22,
> -     8213,   22,16405,   22,   22,   22,   22,   22,   22,   22,
> -       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
> -
> -       22,   22,   24, 8193,   22, 8193,   22, 8193, 8213,   22,
> -     8213,   22, 8213,   12,   22,   22,   22,   22,   22,   22,
> -       22,   22,   22,   22,   22,   22,   22,   22,   22,   22,
> -       22,   22, 8213,   22, 8213,   22, 8213,   12,   22,   17,
> -     8213,   22,16405,   22,   22,   22,   22,   22,   22,   22,
> -     8206, 8213,   22,16398,16405,   20, 8213,   22,16405,   22,
> -     8205, 8213,   22,16397,16405,   22,   22, 8208, 8213,   22,
> -    16400,16405,   22,   22,   22,   22,   17, 8213,   22,   17,
> -     8213,   22,   17,   22,   17, 8213,   22,    3,   22,   22,
> -       19, 8213,   22,16405,   22,   22, 8206, 8213,   22, 8206,
> -
> -     8213,   22, 8206,   22, 8206, 8213,   20, 8213,   22,   20,
> -     8213,   22,   20,   22,   20, 8213, 8205, 8213,   22, 8205,
> -     8213,   22, 8205,   22, 8205, 8213,   22, 8208, 8213,   22,
> -     8208, 8213,   22, 8208,   22, 8208, 8213,   22,   22,    9,
> -       22,   17, 8213,   22,   17, 8213,   22,   17, 8213,   17,
> -       22,   17,   22,    3,   22,   22,   19, 8213,   22,   19,
> -     8213,   22,   19,   22,   19, 8213,   22,   18, 8213,   22,
> -    16405, 8206, 8213,   22, 8206, 8213,   22, 8206, 8213, 8206,
> -       22, 8206,   20, 8213,   22,   20, 8213,   22,   20, 8213,
> -       20,   22,   20, 8205, 8213,   22, 8205, 8213,   22, 8205,
> -
> -     8213, 8205,   22, 8205,   22, 8208, 8213,   22, 8208, 8213,
> -       22, 8208, 8213, 8208,   22, 8208,   22,   22,    9,   12,
> -        9,    7,   22,   22,   19, 8213,   22,   19, 8213,   22,
> -       19, 8213,   19,   22,   19,    2,   18, 8213,   22,   18,
> -     8213,   22,   18,   22,   18, 8213,   10,   22,   11,    9,
> -        9,   12,    7,   12,    7,   22,    6,    2,   12,    2,
> -       18, 8213,   22,   18, 8213,   22,   18, 8213,   18,   22,
> -       18,   10,   12,   10,   15, 8213,   22,16405,   11,   12,
> -       11,    7,    7,   12,   22,    6,   12,    6,    6,   12,
> -        6,   12,    2,    2,   12,   10,   10,   12,   15, 8213,
> -
> -       22,   15, 8213,   22,   15,   22,   15, 8213,   11,   12,
> -       22,    6,    6,   12,    6,    6,   15, 8213,   22,   15,
> -     8213,   22,   15, 8213,   15,   22,   15,   22,    6,    6,
> -        8,    6,    5,    6,    8,   12,    8,    4,    6,    5,
> -        6,    8,    8,   12,    4,    6
> +       25,   25,   27,   23,   24,   26, 8193,   23,   24,   26,
> +    16385, 8193,   23,   26,16385,   23,   24,   26,   24,   26,
> +       23,   24,   26,   23,   24,   26,   23,   24,   26,   23,
> +       24,   26,   23,   24,   26,   23,   24,   26,   23,   24,
> +       26,   23,   24,   26,   23,   24,   26,   23,   24,   26,
> +       23,   24,   26,   23,   24,   26,   23,   24,   26,   23,
> +       24,   26,   23,   24,   26,   25,   26,   26,   23,   23,
> +     8193,   23, 8193,   23,16385, 8193,   23, 8193,   23,   23,
> +     8214,   23,16406,   23,   23,   23,   23,   23,   23,   23,
> +       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
> +
> +       23,   23,   25, 8193,   23, 8193,   23, 8193, 8214,   23,
> +     8214,   23, 8214,   13,   23,   23,   23,   23,   23,   23,
> +       23,   23,   23,   23,   23,   23,   23,   23,   23,   23,
> +       23,   23, 8214,   23, 8214,   23, 8214,   13,   23,   18,
> +     8214,   23,16406,   23,   23,   23,   23,   23,   23,   23,
> +     8207, 8214,   23,16399,16406,   21, 8214,   23,16406,   23,
> +     8206, 8214,   23,16398,16406,   23,   23, 8209, 8214,   23,
> +    16401,16406,   23,   23,   23,   23,   18, 8214,   23,   18,
> +     8214,   23,   18,   23,   18, 8214,   23,    3,   23,   23,
> +       20, 8214,   23,16406,   23,   23, 8207, 8214,   23, 8207,
> +
> +     8214,   23, 8207,   23, 8207, 8214,   21, 8214,   23,   21,
> +     8214,   23,   21,   23,   21, 8214, 8206, 8214,   23, 8206,
> +     8214,   23, 8206,   23, 8206, 8214,   23, 8209, 8214,   23,
> +     8209, 8214,   23, 8209,   23, 8209, 8214,   23,   23,   10,
> +       23,   18, 8214,   23,   18, 8214,   23,   18, 8214,   18,
> +       23,   18,   23,    3,   23,   23,   20, 8214,   23,   20,
> +     8214,   23,   20,   23,   20, 8214,   23,   19, 8214,   23,
> +    16406, 8207, 8214,   23, 8207, 8214,   23, 8207, 8214, 8207,
> +       23, 8207,   21, 8214,   23,   21, 8214,   23,   21, 8214,
> +       21,   23,   21, 8206, 8214,   23, 8206, 8214,   23, 8206,
> +
> +     8214, 8206,   23, 8206,   23, 8209, 8214,   23, 8209, 8214,
> +       23, 8209, 8214, 8209,   23, 8209,   23,   23,   10,   13,
> +       10,    7,   23,   23,   20, 8214,   23,   20, 8214,   23,
> +       20, 8214,   20,   23,   20,    2,   19, 8214,   23,   19,
> +     8214,   23,   19,   23,   19, 8214,   11,   23,   12,   10,
> +       10,   13,    7,   13,    7,   23,   23,    6,    2,   13,
> +        2,   19, 8214,   23,   19, 8214,   23,   19, 8214,   19,
> +       23,   19,   11,   13,   11,   16, 8214,   23,16406,   12,
> +       13,   12,    7,    7,   13,   23,   23,    6,   13,    6,
> +        6,   13,    6,   13,    2,    2,   13,   11,   11,   13,
> +
> +       16, 8214,   23,   16, 8214,   23,   16,   23,   16, 8214,
> +       12,   13,   23,   23,    6,    6,   13,    6,    6,   16,
> +     8214,   23,   16, 8214,   23,   16, 8214,   16,   23,   16,
> +       23,   23,    6,    6,   23,    8,    6,    5,    6,   23,
> +        8,   13,    8,    4,    6,    5,    6,    9,    8,    8,
> +       13,    4,    6,    9,   13,    9,    9,    9,   13
>      } ;
> 
> -static yyconst flex_int16_t yy_accept[252] =
> +static yyconst flex_int16_t yy_accept[263] =
>      {   0,
>          1,    1,    1,    2,    3,    4,    7,   12,   16,   19,
>         21,   24,   27,   30,   33,   36,   39,   42,   45,   48,
> @@ -445,14 +437,15 @@ static yyconst flex_int16_t yy_accept[252] =
>        293,  294,  297,  300,  302,  304,  305,  306,  309,  312,
>        314,  316,  317,  318,  319,  321,  322,  323,  324,  325,
>        328,  331,  333,  335,  336,  337,  340,  343,  345,  347,
> -      348,  349,  350,  351,  353,  355,  356,  357,  358,  360,
> -
> -      361,  364,  367,  369,  371,  372,  374,  375,  379,  381,
> -      382,  383,  385,  386,  388,  389,  391,  393,  394,  396,
> -      397,  399,  402,  405,  407,  409,  411,  412,  413,  415,
> -      416,  417,  420,  423,  425,  427,  428,  429,  430,  431,
> -      432,  433,  435,  437,  438,  440,  442,  443,  445,  447,
> -      447
> +      348,  349,  350,  351,  353,  355,  356,  357,  358,  359,
> +
> +      361,  362,  365,  368,  370,  372,  373,  375,  376,  380,
> +      382,  383,  384,  386,  387,  388,  390,  391,  393,  395,
> +      396,  398,  399,  401,  404,  407,  409,  411,  413,  414,
> +      415,  416,  418,  419,  420,  423,  426,  428,  430,  431,
> +      432,  433,  434,  435,  436,  437,  438,  440,  441,  443,
> +      444,  446,  448,  449,  450,  452,  454,  456,  457,  458,
> +      460,  460
>      } ;
> 
>  static yyconst flex_int32_t yy_ec[256] =
> @@ -495,83 +488,85 @@ static yyconst flex_int32_t yy_meta[34] =
>          1,    1,    1
>      } ;
> 
> -static yyconst flex_int16_t yy_base[308] =
> +static yyconst flex_int16_t yy_base[321] =
>      {   0,
> -        0,    0,  546,  538,  533,  521,   32,   35,  656,  656,
> -       44,   62,   30,   41,   50,   51,  507,   64,   47,   66,
> -       67,  499,   68,  487,   72,    0,  656,  465,  656,   87,
> -       91,    0,    0,  100,  452,  109,    0,   74,   95,   87,
> +        0,    0,  644,  632,  623,  595,   32,   35,  670,  670,
> +       44,   62,   30,   41,   50,   51,  577,   64,   47,   66,
> +       67,  565,   68,  561,   72,    0,  670,  563,  670,   87,
> +       91,    0,    0,  100,  553,  109,    0,   74,   95,   87,
>         32,   96,  105,  110,   77,   97,   40,  113,  116,  112,
>        118,  120,  121,  122,  123,  125,    0,  137,    0,    0,
> -      147,    0,    0,  449,  129,  126,  134,  143,  145,  147,
> +      147,    0,    0,  551,  129,  126,  134,  143,  145,  147,
>        148,  149,  151,  153,  156,  160,  155,  167,  162,  175,
> -      168,  159,  188,    0,    0,  656,  166,  197,  179,  185,
> -      176,  200,  435,  186,  193,  216,  225,  205,  234,  221,
> +      168,  159,  188,    0,    0,  670,  166,  197,  179,  185,
> +      176,  200,  537,  186,  193,  216,  225,  205,  234,  221,
> 
>        237,  247,  204,  230,  244,  213,  254,    0,  256,    0,
>        251,  258,  254,  279,  256,  259,  267,    0,  269,    0,
>        286,    0,  288,    0,  290,    0,  297,    0,  267,  299,
> -        0,  301,    0,  288,  297,  421,  302,  310,    0,    0,
> -        0,    0,  305,  656,  307,  319,    0,  321,    0,  322,
> +        0,  301,    0,  288,  297,  535,  302,  310,    0,    0,
> +        0,    0,  305,  670,  307,  319,    0,  321,    0,  322,
>        332,  335,    0,    0,    0,    0,  339,    0,    0,    0,
>          0,  342,    0,    0,    0,    0,  340,  349,    0,    0,
> -        0,    0,  337,  345,  420,  656,  419,  346,  350,  358,
> -        0,    0,    0,    0,  418,  360,    0,  362,    0,  417,
> -      319,  369,  416,  656,  415,  656,  276,  364,  414,  656,
> -
> -      375,    0,    0,    0,    0,  413,  656,  384,  412,    0,
> -      410,  656,  370,  409,  656,  370,  378,  408,  656,  366,
> -      656,  394,    0,  396,    0,    0,  380,  316,  656,  377,
> -      387,  398,    0,    0,    0,    0,  399,  402,  407,  271,
> -      406,  228,  200,  656,  175,  656,   77,  656,  656,  656,
> -      428,  432,  435,  439,  443,  447,  451,  455,  459,  463,
> -      467,  471,  475,  479,  483,  487,  491,  495,  499,  503,
> -      507,  511,  515,  519,  523,  527,  531,  535,  539,  543,
> -      547,  551,  555,  559,  563,  567,  571,  575,  579,  583,
> -      587,  591,  595,  599,  603,  607,  611,  615,  619,  623,
> -
> -      627,  631,  635,  639,  643,  647,  651
> +        0,    0,  337,  345,  527,  670,  519,  346,  351,  359,
> +        0,    0,    0,    0,  511,  361,    0,  363,    0,  499,
> +      319,  370,  471,  670,  464,  670,  359,  276,  367,  455,
> +
> +      670,  373,    0,    0,    0,    0,  447,  670,  383,  429,
> +        0,  428,  670,  368,  371,  425,  670,  385,  389,  422,
> +      670,  421,  670,  391,    0,  399,    0,    0,  414,  387,
> +      419,  670,  395,  400,  402,    0,    0,    0,    0,  399,
> +      403,  406,  411,  404,  417,  412,  416,  409,  316,  670,
> +      271,  670,  228,  200,  670,  670,  175,  670,   77,  670,
> +      670,  434,  438,  441,  445,  449,  453,  457,  461,  465,
> +      469,  473,  477,  481,  485,  489,  493,  497,  501,  505,
> +      509,  513,  517,  521,  525,  529,  533,  537,  541,  545,
> +      549,  553,  557,  561,  565,  569,  573,  577,  581,  585,
> +
> +      589,  593,  597,  601,  605,  609,  613,  617,  621,  625,
> +      629,  633,  637,  641,  645,  649,  653,  657,  661,  665
>      } ;
> 
> -static yyconst flex_int16_t yy_def[308] =
> +static yyconst flex_int16_t yy_def[321] =
>      {   0,
> -      250,    1,  251,  251,  250,  252,  253,  253,  250,  250,
> -      254,  254,   12,   12,   12,   12,   12,   12,   12,   12,
> -       12,   12,   12,   12,   12,  255,  250,  252,  250,  256,
> -      253,  257,  257,  258,   12,  252,  259,   12,   12,   12,
> +      261,    1,  262,  262,  261,  263,  264,  264,  261,  261,
> +      265,  265,   12,   12,   12,   12,   12,   12,   12,   12,
> +       12,   12,   12,   12,   12,  266,  261,  263,  261,  267,
> +      264,  268,  268,  269,   12,  263,  270,   12,   12,   12,
>         12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
> -       12,   12,   12,   12,   12,   12,  255,  256,  257,  257,
> -      260,  261,  261,  250,   12,   12,   12,   12,   12,   12,
> +       12,   12,   12,   12,   12,   12,  266,  267,  268,  268,
> +      271,  272,  272,  261,   12,   12,   12,   12,   12,   12,
>         12,   12,   12,   12,   12,   12,   12,   12,   12,   12,
> -       12,   12,  260,  261,  261,  250,   12,  262,   12,   12,
> -       12,   12,   12,   12,   12,  263,  264,   12,  265,   12,
> -
> -       12,  266,   12,   12,   12,   12,  267,  268,  262,  268,
> -       12,   12,   12,  269,   12,   12,  270,  271,  263,  271,
> -      272,  273,  264,  273,  274,  275,  265,  275,   12,  276,
> -      277,  266,  277,   12,   12,  278,   12,  267,  268,  268,
> -      279,  279,   12,  250,   12,  280,  281,  269,  281,   12,
> -      282,  270,  271,  271,  283,  283,  272,  273,  273,  284,
> -      284,  274,  275,  275,  285,  285,   12,  276,  277,  277,
> -      286,  286,   12,   12,  287,  250,  288,   12,   12,  280,
> -      281,  281,  289,  289,  290,  291,  292,  282,  292,  293,
> -       12,  294,  287,  250,  295,  250,   12,  296,  297,  250,
> -
> -      291,  292,  292,  298,  298,  299,  250,  300,  301,  301,
> -      295,  250,   12,  302,  250,  302,  302,  297,  250,  299,
> -      250,  303,  304,  300,  304,  301,   12,  302,  250,  302,
> -      302,  303,  304,  304,  305,  305,   12,  302,  302,  306,
> -      302,  302,  307,  250,  302,  250,  307,  250,  250,    0,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -
> -      250,  250,  250,  250,  250,  250,  250
> +       12,   12,  271,  272,  272,  261,   12,  273,   12,   12,
> +       12,   12,   12,   12,   12,  274,  275,   12,  276,   12,
> +
> +       12,  277,   12,   12,   12,   12,  278,  279,  273,  279,
> +       12,   12,   12,  280,   12,   12,  281,  282,  274,  282,
> +      283,  284,  275,  284,  285,  286,  276,  286,   12,  287,
> +      288,  277,  288,   12,   12,  289,   12,  278,  279,  279,
> +      290,  290,   12,  261,   12,  291,  292,  280,  292,   12,
> +      293,  281,  282,  282,  294,  294,  283,  284,  284,  295,
> +      295,  285,  286,  286,  296,  296,   12,  287,  288,  288,
> +      297,  297,   12,   12,  298,  261,  299,   12,   12,  291,
> +      292,  292,  300,  300,  301,  302,  303,  293,  303,  304,
> +       12,  305,  298,  261,  306,  261,   12,   12,  307,  308,
> +
> +      261,  302,  303,  303,  309,  309,  310,  261,  311,  312,
> +      312,  306,  261,   12,   12,  313,  261,  313,  313,  308,
> +      261,  310,  261,  314,  315,  311,  315,  312,   12,   12,
> +      313,  261,  313,  313,  314,  315,  315,  316,  316,   12,
> +       12,  313,  313,   12,  317,  313,  313,   12,  318,  261,
> +      313,  261,  319,  318,  261,  261,  320,  261,  320,  261,
> +        0,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261
>      } ;
> 
> -static yyconst flex_int16_t yy_nxt[690] =
> +static yyconst flex_int16_t yy_nxt[704] =
>      {   0,
>          6,    7,    8,    9,    6,    6,    6,    6,   10,   11,
>         12,   13,   14,   15,   16,   17,   17,   18,   17,   17,
> @@ -581,7 +576,7 @@ static yyconst flex_int16_t yy_nxt[690] =
>         35,   36,   37,   73,   42,   38,   35,   49,   68,   35,
>         35,   39,   28,   28,   28,   29,   34,   43,   45,   36,
>         37,   40,   44,   35,   46,   35,   35,   35,   51,   53,
> -      244,   35,   50,   35,   55,   65,   35,   47,   56,   28,
> +      258,   35,   50,   35,   55,   65,   35,   47,   56,   28,
>         59,   48,   31,   31,   32,   60,   35,   71,   67,   33,
> 
>         28,   28,   28,   29,   35,   35,   35,   28,   37,   61,
> @@ -591,66 +586,69 @@ static yyconst flex_int16_t yy_nxt[690] =
>         59,   77,   87,   35,   76,   60,   80,   79,   81,   28,
>         84,   78,   35,   89,   35,   85,   35,   35,   35,   75,
>         35,   92,   35,   96,   35,   35,   90,   97,   35,   35,
> -       93,   35,   94,   91,   99,   35,   35,   35,  249,  100,
> +       93,   35,   94,   91,   99,   35,   35,   35,  260,  100,
>         95,  101,  102,  104,   35,   35,   98,  103,   35,  105,
>         28,   84,  111,  106,   35,   35,   85,  107,  107,   61,
> 
> -      108,  107,   35,  248,  107,  110,  112,  114,  113,   35,
> +      108,  107,   35,  250,  107,  110,  112,  114,  113,   35,
>         75,   78,   99,   35,   35,  116,  117,  117,   61,  118,
>        117,  134,   35,  117,  120,  121,  121,   61,  122,  121,
> -       35,  246,  121,  124,  125,  125,   61,  126,  125,   35,
> +       35,  258,  121,  124,  125,  125,   61,  126,  125,   35,
>        137,  125,  128,  135,  102,  129,   35,  130,  130,   61,
>        131,  130,  136,   35,  130,  133,   28,  139,   28,  141,
>         35,  144,  140,   35,  142,   35,  151,   35,   35,   28,
> -      153,   28,  155,  143,  244,  154,   35,  156,  145,  146,
> +      153,   28,  155,  143,  256,  154,   35,  156,  145,  146,
>        146,   61,  147,  146,  150,   35,  146,  149,   28,  158,
>         28,  160,   28,  163,  159,  167,  161,   35,  164,   28,
> 
> -      165,   28,  169,   28,  171,  166,   35,  170,  213,  172,
> -      177,   35,   28,  139,   35,  173,   35,  178,  140,  215,
> -      179,   28,  181,   28,  183,  174,  208,  182,   35,  184,
> +      165,   28,  169,   28,  171,  166,   35,  170,  215,  172,
> +      177,   35,   28,  139,   35,  173,   35,  178,  140,  255,
> +      179,   28,  181,   28,  183,  174,  209,  182,   35,  184,
>        185,   35,  186,  186,   61,  187,  186,   28,  153,  186,
>        189,   28,  158,  154,   28,  163,   35,  159,  190,   35,
> -      164,   28,  169,  192,   35,   35,  191,  170,  198,   35,
> -       28,  181,   28,  202,   28,  204,  182,  215,  203,  207,
> -      205,   64,  210,  229,  197,  216,  217,   28,  202,   35,
> -      215,  229,  230,  203,  222,  222,   61,  223,  222,   35,
> -      215,  222,  225,  237,  227,  231,   28,  233,   28,  235,
> -
> -       28,  233,  234,  238,  236,  215,  234,  240,   35,  215,
> -      215,  200,  229,  196,  239,  226,  221,  219,  212,  176,
> -      207,  200,  196,  194,  176,  241,  242,  245,   26,   26,
> -       26,   26,   28,   28,   28,   30,   30,   30,   30,   35,
> -       35,   35,   35,   57,  115,   57,   57,   58,   58,   58,
> -       58,   60,   86,   60,   60,   34,   34,   34,   34,   64,
> -       64,   35,   64,   83,   83,   83,   83,   85,   29,   85,
> -       85,  109,  109,  109,  109,  119,  119,  119,  119,  123,
> -      123,  123,  123,  127,  127,  127,  127,  132,  132,  132,
> -      132,  138,  138,  138,  138,  140,   54,  140,  140,  148,
> -
> -      148,  148,  148,  152,  152,  152,  152,  154,   52,  154,
> -      154,  157,  157,  157,  157,  159,   35,  159,  159,  162,
> -      162,  162,  162,  164,   29,  164,  164,  168,  168,  168,
> -      168,  170,  250,  170,  170,  175,  175,  175,  175,  142,
> -       27,  142,  142,  180,  180,  180,  180,  182,   27,  182,
> -      182,  188,  188,  188,  188,  156,  250,  156,  156,  161,
> -      250,  161,  161,  166,  250,  166,  166,  172,  250,  172,
> -      172,  193,  193,  193,  193,  195,  195,  195,  195,  184,
> -      250,  184,  184,  199,  199,  199,  199,  201,  201,  201,
> -      201,  203,  250,  203,  203,  206,  206,  206,  206,  209,
> -
> -      209,  209,  209,  211,  211,  211,  211,  214,  214,  214,
> -      214,  218,  218,  218,  218,  205,  250,  205,  205,  220,
> -      220,  220,  220,  224,  224,  224,  224,  210,  250,  210,
> -      210,  228,  228,  228,  228,  232,  232,  232,  232,  234,
> -      250,  234,  234,  236,  250,  236,  236,  243,  243,  243,
> -      243,  247,  247,  247,  247,    5,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250
> +      164,   28,  169,  192,   35,   35,  191,  170,  197,  199,
> +       35,   28,  181,   28,  203,   28,  205,  182,   35,  204,
> +      217,  206,   64,  211,  198,   28,  203,   35,  218,  219,
> +       35,  204,  214,  224,  224,   61,  225,  224,  232,  229,
> +      224,  227,  232,   28,  236,  230,   35,  233,  217,  237,
> +
> +      241,   28,  238,  217,   28,  236,  234,  239,   35,  217,
> +      237,  245,   35,   35,  217,  217,  244,  253,   35,  252,
> +      250,  242,  217,  240,  208,  201,  248,  243,  232,  246,
> +      247,  196,  228,  251,   26,   26,   26,   26,   28,   28,
> +       28,   30,   30,   30,   30,   35,   35,   35,   35,   57,
> +      223,   57,   57,   58,   58,   58,   58,   60,  221,   60,
> +       60,   34,   34,   34,   34,   64,   64,  213,   64,   83,
> +       83,   83,   83,   85,  176,   85,   85,  109,  109,  109,
> +      109,  119,  119,  119,  119,  123,  123,  123,  123,  127,
> +      127,  127,  127,  132,  132,  132,  132,  138,  138,  138,
> +
> +      138,  140,  208,  140,  140,  148,  148,  148,  148,  152,
> +      152,  152,  152,  154,  201,  154,  154,  157,  157,  157,
> +      157,  159,  196,  159,  159,  162,  162,  162,  162,  164,
> +      194,  164,  164,  168,  168,  168,  168,  170,  176,  170,
> +      170,  175,  175,  175,  175,  142,  115,  142,  142,  180,
> +      180,  180,  180,  182,   86,  182,  182,  188,  188,  188,
> +      188,  156,   35,  156,  156,  161,   29,  161,  161,  166,
> +       54,  166,  166,  172,   52,  172,  172,  193,  193,  193,
> +      193,  195,  195,  195,  195,  184,   35,  184,  184,  200,
> +      200,  200,  200,  202,  202,  202,  202,  204,   29,  204,
> +
> +      204,  207,  207,  207,  207,  210,  210,  210,  210,  212,
> +      212,  212,  212,  216,  216,  216,  216,  220,  220,  220,
> +      220,  206,  261,  206,  206,  222,  222,  222,  222,  226,
> +      226,  226,  226,  211,   27,  211,  211,  231,  231,  231,
> +      231,  235,  235,  235,  235,  237,   27,  237,  237,  239,
> +      261,  239,  239,  249,  249,  249,  249,  254,  254,  254,
> +      254,  257,  257,  257,  257,  259,  259,  259,  259,    5,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +
> +      261,  261,  261
>      } ;
> 
> -static yyconst flex_int16_t yy_chk[690] =
> +static yyconst flex_int16_t yy_chk[704] =
>      {   0,
>          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
>          1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
> @@ -660,7 +658,7 @@ static yyconst flex_int16_t yy_chk[690] =
>         14,   11,   11,   47,   14,   11,   19,   19,   41,   15,
>         16,   11,   12,   12,   12,   12,   12,   14,   16,   12,
>         12,   12,   15,   18,   16,   20,   21,   23,   21,   23,
> -      247,   25,   20,   38,   25,   38,   45,   18,   25,   30,
> +      259,   25,   20,   38,   25,   38,   45,   18,   25,   30,
>         30,   18,   31,   31,   31,   30,   40,   45,   40,   31,
> 
>         34,   34,   34,   34,   39,   42,   46,   34,   34,   36,
> @@ -670,63 +668,66 @@ static yyconst flex_int16_t yy_chk[690] =
>         58,   51,   65,   67,   50,   58,   54,   53,   54,   61,
>         61,   52,   68,   67,   69,   61,   70,   71,   72,   70,
>         73,   71,   74,   75,   77,   75,   68,   76,   82,   76,
> -       72,   79,   73,   69,   78,   87,   78,   81,  245,   79,
> +       72,   79,   73,   69,   78,   87,   78,   81,  257,   79,
>         74,   80,   80,   81,   80,   91,   77,   80,   89,   82,
>         83,   83,   89,   87,   90,   94,   83,   88,   88,   88,
> 
> -       88,   88,   95,  243,   88,   88,   90,   92,   91,   92,
> +       88,   88,   95,  254,   88,   88,   90,   92,   91,   92,
>         95,   98,   98,  103,   98,   94,   96,   96,   96,   96,
>         96,  103,  106,   96,   96,   97,   97,   97,   97,   97,
> -      100,  242,   97,   97,   99,   99,   99,   99,   99,  104,
> +      100,  253,   97,   97,   99,   99,   99,   99,   99,  104,
>        106,   99,   99,  104,  101,  100,  101,  102,  102,  102,
>        102,  102,  105,  105,  102,  102,  107,  107,  109,  109,
>        111,  112,  107,  113,  109,  115,  116,  112,  116,  117,
> -      117,  119,  119,  111,  240,  117,  129,  119,  113,  114,
> -      114,  114,  114,  114,  115,  197,  114,  114,  121,  121,
> +      117,  119,  119,  111,  251,  117,  129,  119,  113,  114,
> +      114,  114,  114,  114,  115,  198,  114,  114,  121,  121,
>        123,  123,  125,  125,  121,  129,  123,  134,  125,  127,
> 
> -      127,  130,  130,  132,  132,  127,  135,  130,  197,  132,
> -      137,  137,  138,  138,  143,  134,  145,  143,  138,  228,
> +      127,  130,  130,  132,  132,  127,  135,  130,  198,  132,
> +      137,  137,  138,  138,  143,  134,  145,  143,  138,  249,
>        145,  146,  146,  148,  148,  135,  191,  146,  191,  148,
>        150,  150,  151,  151,  151,  151,  151,  152,  152,  151,
>        151,  157,  157,  152,  162,  162,  173,  157,  167,  167,
> -      162,  168,  168,  174,  174,  178,  173,  168,  179,  179,
> -      180,  180,  186,  186,  188,  188,  180,  198,  186,  220,
> -      188,  192,  192,  216,  178,  198,  198,  201,  201,  213,
> -      230,  217,  216,  201,  208,  208,  208,  208,  208,  227,
> -      231,  208,  208,  227,  213,  217,  222,  222,  224,  224,
> -
> -      232,  232,  222,  230,  224,  238,  232,  237,  237,  241,
> -      239,  218,  214,  211,  231,  209,  206,  199,  195,  193,
> -      190,  185,  177,  175,  136,  238,  239,  241,  251,  251,
> -      251,  251,  252,  252,  252,  253,  253,  253,  253,  254,
> -      254,  254,  254,  255,   93,  255,  255,  256,  256,  256,
> -      256,  257,   64,  257,  257,  258,  258,  258,  258,  259,
> -      259,   35,  259,  260,  260,  260,  260,  261,   28,  261,
> -      261,  262,  262,  262,  262,  263,  263,  263,  263,  264,
> -      264,  264,  264,  265,  265,  265,  265,  266,  266,  266,
> -      266,  267,  267,  267,  267,  268,   24,  268,  268,  269,
> -
> -      269,  269,  269,  270,  270,  270,  270,  271,   22,  271,
> -      271,  272,  272,  272,  272,  273,   17,  273,  273,  274,
> -      274,  274,  274,  275,    6,  275,  275,  276,  276,  276,
> -      276,  277,    5,  277,  277,  278,  278,  278,  278,  279,
> -        4,  279,  279,  280,  280,  280,  280,  281,    3,  281,
> -      281,  282,  282,  282,  282,  283,    0,  283,  283,  284,
> -        0,  284,  284,  285,    0,  285,  285,  286,    0,  286,
> -      286,  287,  287,  287,  287,  288,  288,  288,  288,  289,
> -        0,  289,  289,  290,  290,  290,  290,  291,  291,  291,
> -      291,  292,    0,  292,  292,  293,  293,  293,  293,  294,
> -
> -      294,  294,  294,  295,  295,  295,  295,  296,  296,  296,
> -      296,  297,  297,  297,  297,  298,    0,  298,  298,  299,
> -      299,  299,  299,  300,  300,  300,  300,  301,    0,  301,
> -      301,  302,  302,  302,  302,  303,  303,  303,  303,  304,
> -        0,  304,  304,  305,    0,  305,  305,  306,  306,  306,
> -      306,  307,  307,  307,  307,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250,  250,
> -      250,  250,  250,  250,  250,  250,  250,  250,  250
> +      162,  168,  168,  174,  174,  178,  173,  168,  178,  179,
> +      179,  180,  180,  186,  186,  188,  188,  180,  197,  186,
> +      199,  188,  192,  192,  178,  202,  202,  214,  199,  199,
> +      215,  202,  197,  209,  209,  209,  209,  209,  218,  214,
> +      209,  209,  219,  224,  224,  215,  230,  218,  233,  224,
> +
> +      230,  226,  226,  234,  235,  235,  219,  226,  240,  242,
> +      235,  241,  241,  244,  243,  246,  240,  248,  248,  247,
> +      245,  233,  231,  229,  222,  220,  244,  234,  216,  242,
> +      243,  212,  210,  246,  262,  262,  262,  262,  263,  263,
> +      263,  264,  264,  264,  264,  265,  265,  265,  265,  266,
> +      207,  266,  266,  267,  267,  267,  267,  268,  200,  268,
> +      268,  269,  269,  269,  269,  270,  270,  195,  270,  271,
> +      271,  271,  271,  272,  193,  272,  272,  273,  273,  273,
> +      273,  274,  274,  274,  274,  275,  275,  275,  275,  276,
> +      276,  276,  276,  277,  277,  277,  277,  278,  278,  278,
> +
> +      278,  279,  190,  279,  279,  280,  280,  280,  280,  281,
> +      281,  281,  281,  282,  185,  282,  282,  283,  283,  283,
> +      283,  284,  177,  284,  284,  285,  285,  285,  285,  286,
> +      175,  286,  286,  287,  287,  287,  287,  288,  136,  288,
> +      288,  289,  289,  289,  289,  290,   93,  290,  290,  291,
> +      291,  291,  291,  292,   64,  292,  292,  293,  293,  293,
> +      293,  294,   35,  294,  294,  295,   28,  295,  295,  296,
> +       24,  296,  296,  297,   22,  297,  297,  298,  298,  298,
> +      298,  299,  299,  299,  299,  300,   17,  300,  300,  301,
> +      301,  301,  301,  302,  302,  302,  302,  303,    6,  303,
> +
> +      303,  304,  304,  304,  304,  305,  305,  305,  305,  306,
> +      306,  306,  306,  307,  307,  307,  307,  308,  308,  308,
> +      308,  309,    5,  309,  309,  310,  310,  310,  310,  311,
> +      311,  311,  311,  312,    4,  312,  312,  313,  313,  313,
> +      313,  314,  314,  314,  314,  315,    3,  315,  315,  316,
> +        0,  316,  316,  317,  317,  317,  317,  318,  318,  318,
> +      318,  319,  319,  319,  319,  320,  320,  320,  320,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +      261,  261,  261,  261,  261,  261,  261,  261,  261,  261,
> +
> +      261,  261,  261
>      } ;
> 
>  #define YY_TRAILING_MASK 0x2000
> @@ -856,6 +857,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
>      else xlu__disk_err(dpc,str,"unknown value for backendtype");
>  }
> 
> +/* Sets ->backend_domid from the string. */
> +static void setbackend(DiskParseContext *dpc, const char *str) {
> +    if (libxl_name_to_domid(dpc->ctx, str, &dpc->disk->backend_domid)) {
> +        xlu__disk_err(dpc,str,"unknown domain for backend");
> +    }
> +}
> +
>  #define DEPRECATE(usewhatinstead) /* not currently reported */
> 
>  /* Handles a vdev positional parameter which includes a devtype. */
> @@ -883,7 +891,7 @@ static int vdev_and_devtype(DiskParseContext *dpc, char *str) {
>  #define DPC ((DiskParseContext*)yyextra)
> 
> 
> -#line 887 "libxlu_disk_l.c"
> +#line 895 "libxlu_disk_l.c"
> 
>  #define INITIAL 0
>  #define LEXERR 1
> @@ -980,6 +988,10 @@ int xlu__disk_yyget_lineno (yyscan_t yyscanner );
> 
>  void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
> 
> +int xlu__disk_yyget_column  (yyscan_t yyscanner );
> +
> +void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
> +
>  /* Macros after this point can all be overridden by user definitions in
>   * section 1.
>   */
> @@ -1012,12 +1024,7 @@ static int input (yyscan_t yyscanner );
> 
>  /* Amount of stuff to slurp up with each read. */
>  #ifndef YY_READ_BUF_SIZE
> -#ifdef __ia64__
> -/* On IA-64, the buffer size is 16k, not 8k */
> -#define YY_READ_BUF_SIZE 16384
> -#else
>  #define YY_READ_BUF_SIZE 8192
> -#endif /* __ia64__ */
>  #endif
> 
>  /* Copy whatever the last rule matched to the standard output. */
> @@ -1036,7 +1043,7 @@ static int input (yyscan_t yyscanner );
>         if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
>                 { \
>                 int c = '*'; \
> -               size_t n; \
> +               unsigned n; \
>                 for ( n = 0; n < max_size && \
>                              (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
>                         buf[n] = (char) c; \
> @@ -1119,12 +1126,12 @@ YY_DECL
>         register int yy_act;
>      struct yyguts_t * yyg = (struct yyguts_t*)yyscanner;
> 
> -#line 155 "libxlu_disk_l.l"
> +#line 162 "libxlu_disk_l.l"
> 
> 
>   /*----- the scanner rules which do the parsing -----*/
> 
> -#line 1128 "libxlu_disk_l.c"
> +#line 1135 "libxlu_disk_l.c"
> 
>         if ( !yyg->yy_init )
>                 {
> @@ -1188,14 +1195,14 @@ yy_match:
>                         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
>                                 {
>                                 yy_current_state = (int) yy_def[yy_current_state];
> -                               if ( yy_current_state >= 251 )
> +                               if ( yy_current_state >= 262 )
>                                         yy_c = yy_meta[(unsigned int) yy_c];
>                                 }
>                         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
>                         *yyg->yy_state_ptr++ = yy_current_state;
>                         ++yy_cp;
>                         }
> -               while ( yy_current_state != 250 );
> +               while ( yy_current_state != 261 );
> 
>  yy_find_action:
>                 yy_current_state = *--yyg->yy_state_ptr;
> @@ -1245,89 +1252,95 @@ do_action:      /* This label is used only to access EOF actions. */
>  case 1:
>  /* rule 1 can match eol */
>  YY_RULE_SETUP
> -#line 159 "libxlu_disk_l.l"
> +#line 166 "libxlu_disk_l.l"
>  { /* ignore whitespace before parameters */ }
>         YY_BREAK
>  /* ordinary parameters setting enums or strings */
>  case 2:
>  /* rule 2 can match eol */
>  YY_RULE_SETUP
> -#line 163 "libxlu_disk_l.l"
> +#line 170 "libxlu_disk_l.l"
>  { STRIP(','); setformat(DPC, FROMEQUALS); }
>         YY_BREAK
>  case 3:
>  YY_RULE_SETUP
> -#line 165 "libxlu_disk_l.l"
> +#line 172 "libxlu_disk_l.l"
>  { DPC->disk->is_cdrom = 1; }
>         YY_BREAK
>  case 4:
>  YY_RULE_SETUP
> -#line 166 "libxlu_disk_l.l"
> +#line 173 "libxlu_disk_l.l"
>  { DPC->disk->is_cdrom = 1; }
>         YY_BREAK
>  case 5:
>  YY_RULE_SETUP
> -#line 167 "libxlu_disk_l.l"
> +#line 174 "libxlu_disk_l.l"
>  { DPC->disk->is_cdrom = 0; }
>         YY_BREAK
>  case 6:
>  /* rule 6 can match eol */
>  YY_RULE_SETUP
> -#line 168 "libxlu_disk_l.l"
> +#line 175 "libxlu_disk_l.l"
>  { xlu__disk_err(DPC,yytext,"unknown value for type"); }
>         YY_BREAK
>  case 7:
>  /* rule 7 can match eol */
>  YY_RULE_SETUP
> -#line 170 "libxlu_disk_l.l"
> +#line 177 "libxlu_disk_l.l"
>  { STRIP(','); setaccess(DPC, FROMEQUALS); }
>         YY_BREAK
>  case 8:
>  /* rule 8 can match eol */
>  YY_RULE_SETUP
> -#line 171 "libxlu_disk_l.l"
> +#line 178 "libxlu_disk_l.l"
>  { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
>         YY_BREAK
>  case 9:
>  /* rule 9 can match eol */
>  YY_RULE_SETUP
> -#line 173 "libxlu_disk_l.l"
> -{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
> +#line 179 "libxlu_disk_l.l"
> +{ STRIP(','); setbackend(DPC,FROMEQUALS); }
>         YY_BREAK
>  case 10:
>  /* rule 10 can match eol */
>  YY_RULE_SETUP
> -#line 174 "libxlu_disk_l.l"
> +#line 181 "libxlu_disk_l.l"
> +{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
> +       YY_BREAK
> +case 11:
> +/* rule 11 can match eol */
> +YY_RULE_SETUP
> +#line 182 "libxlu_disk_l.l"
>  { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
>         YY_BREAK
>  /* the target magic parameter, eats the rest of the string */
> -case 11:
> +case 12:
>  YY_RULE_SETUP
> -#line 178 "libxlu_disk_l.l"
> +#line 186 "libxlu_disk_l.l"
>  { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); }
>         YY_BREAK
>  /* unknown parameters */
> -case 12:
> -/* rule 12 can match eol */
> +case 13:
> +/* rule 13 can match eol */
>  YY_RULE_SETUP
> -#line 182 "libxlu_disk_l.l"
> +#line 190 "libxlu_disk_l.l"
>  { xlu__disk_err(DPC,yytext,"unknown parameter"); }
>         YY_BREAK
>  /* deprecated prefixes */
>  /* the "/.*" in these patterns ensures that they count as if they
>     * matched the whole string, so these patterns take precedence */
> -case 13:
> +case 14:
>  YY_RULE_SETUP
> -#line 189 "libxlu_disk_l.l"
> +#line 197 "libxlu_disk_l.l"
>  {
>                      STRIP(':');
>                      DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'");
>                      setformat(DPC, yytext);
>                   }
>         YY_BREAK
> -case 14:
> +case 15:
>  YY_RULE_SETUP
> -#line 195 "libxlu_disk_l.l"
> +#line 203 "libxlu_disk_l.l"
>  {
>                      char *newscript;
>                      STRIP(':');
> @@ -1341,65 +1354,65 @@ YY_RULE_SETUP
>                      free(newscript);
>                  }
>         YY_BREAK
> -case 15:
> +case 16:
>  *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
>  yyg->yy_c_buf_p = yy_cp = yy_bp + 8;
>  YY_DO_BEFORE_ACTION; /* set up yytext again */
>  YY_RULE_SETUP
> -#line 208 "libxlu_disk_l.l"
> +#line 216 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 16:
> +case 17:
>  YY_RULE_SETUP
> -#line 209 "libxlu_disk_l.l"
> +#line 217 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 17:
> +case 18:
>  *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
>  yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
>  YY_DO_BEFORE_ACTION; /* set up yytext again */
>  YY_RULE_SETUP
> -#line 210 "libxlu_disk_l.l"
> +#line 218 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 18:
> +case 19:
>  *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
>  yyg->yy_c_buf_p = yy_cp = yy_bp + 6;
>  YY_DO_BEFORE_ACTION; /* set up yytext again */
>  YY_RULE_SETUP
> -#line 211 "libxlu_disk_l.l"
> +#line 219 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 19:
> +case 20:
>  *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
>  yyg->yy_c_buf_p = yy_cp = yy_bp + 5;
>  YY_DO_BEFORE_ACTION; /* set up yytext again */
>  YY_RULE_SETUP
> -#line 212 "libxlu_disk_l.l"
> +#line 220 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 20:
> +case 21:
>  *yy_cp = yyg->yy_hold_char; /* undo effects of setting up yytext */
>  yyg->yy_c_buf_p = yy_cp = yy_bp + 4;
>  YY_DO_BEFORE_ACTION; /* set up yytext again */
>  YY_RULE_SETUP
> -#line 213 "libxlu_disk_l.l"
> +#line 221 "libxlu_disk_l.l"
>  { DPC->had_depr_prefix=1; DEPRECATE(0); }
>         YY_BREAK
> -case 21:
> -/* rule 21 can match eol */
> +case 22:
> +/* rule 22 can match eol */
>  YY_RULE_SETUP
> -#line 215 "libxlu_disk_l.l"
> +#line 223 "libxlu_disk_l.l"
>  {
>                   xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix");
>                   return 0;
>                 }
>         YY_BREAK
>  /* positional parameters */
> -case 22:
> -/* rule 22 can match eol */
> +case 23:
> +/* rule 23 can match eol */
>  YY_RULE_SETUP
> -#line 222 "libxlu_disk_l.l"
> +#line 230 "libxlu_disk_l.l"
>  {
>      STRIP(',');
> 
> @@ -1426,27 +1439,27 @@ YY_RULE_SETUP
>      }
>  }
>         YY_BREAK
> -case 23:
> +case 24:
>  YY_RULE_SETUP
> -#line 248 "libxlu_disk_l.l"
> +#line 256 "libxlu_disk_l.l"
>  {
>      BEGIN(LEXERR);
>      yymore();
>  }
>         YY_BREAK
> -case 24:
> +case 25:
>  YY_RULE_SETUP
> -#line 252 "libxlu_disk_l.l"
> +#line 260 "libxlu_disk_l.l"
>  {
>      xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0;
>  }
>         YY_BREAK
> -case 25:
> +case 26:
>  YY_RULE_SETUP
> -#line 255 "libxlu_disk_l.l"
> +#line 263 "libxlu_disk_l.l"
>  YY_FATAL_ERROR( "flex scanner jammed" );
>         YY_BREAK
> -#line 1450 "libxlu_disk_l.c"
> +#line 1463 "libxlu_disk_l.c"
>                         case YY_STATE_EOF(INITIAL):
>                         case YY_STATE_EOF(LEXERR):
>                                 yyterminate();
> @@ -1710,7 +1723,7 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
>                 while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
>                         {
>                         yy_current_state = (int) yy_def[yy_current_state];
> -                       if ( yy_current_state >= 251 )
> +                       if ( yy_current_state >= 262 )
>                                 yy_c = yy_meta[(unsigned int) yy_c];
>                         }
>                 yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> @@ -1734,11 +1747,11 @@ static int yy_get_next_buffer (yyscan_t yyscanner)
>         while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
>                 {
>                 yy_current_state = (int) yy_def[yy_current_state];
> -               if ( yy_current_state >= 251 )
> +               if ( yy_current_state >= 262 )
>                         yy_c = yy_meta[(unsigned int) yy_c];
>                 }
>         yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
> -       yy_is_jam = (yy_current_state == 250);
> +       yy_is_jam = (yy_current_state == 261);
>         if ( ! yy_is_jam )
>                 *yyg->yy_state_ptr++ = yy_current_state;
> 
> @@ -2147,8 +2160,8 @@ YY_BUFFER_STATE xlu__disk_yy_scan_string (yyconst char * yystr , yyscan_t yyscan
> 
>  /** Setup the input buffer state to scan the given bytes. The next call to xlu__disk_yylex() will
>   * scan from a @e copy of @a bytes.
> - * @param yybytes the byte buffer to scan
> - * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
> + * @param bytes the byte buffer to scan
> + * @param len the number of bytes in the buffer pointed to by @a bytes.
>   * @param yyscanner The scanner object.
>   * @return the newly allocated buffer state object.
>   */
> @@ -2538,4 +2551,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner)
> 
>  #define YYTABLES_NAME "yytables"
> 
> -#line 255 "libxlu_disk_l.l"
> +#line 263 "libxlu_disk_l.l"
> diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h
> index de03908..247a0d7 100644
> --- a/tools/libxl/libxlu_disk_l.h
> +++ b/tools/libxl/libxlu_disk_l.h
> @@ -62,6 +62,7 @@ typedef int flex_int32_t;
>  typedef unsigned char flex_uint8_t;
>  typedef unsigned short int flex_uint16_t;
>  typedef unsigned int flex_uint32_t;
> +#endif /* ! C99 */
> 
>  /* Limits of integral types. */
>  #ifndef INT8_MIN
> @@ -92,8 +93,6 @@ typedef unsigned int flex_uint32_t;
>  #define UINT32_MAX             (4294967295U)
>  #endif
> 
> -#endif /* ! C99 */
> -
>  #endif /* ! FLEXINT_H */
> 
>  #ifdef __cplusplus
> @@ -136,15 +135,7 @@ typedef void* yyscan_t;
> 
>  /* Size of default input buffer. */
>  #ifndef YY_BUF_SIZE
> -#ifdef __ia64__
> -/* On IA-64, the buffer size is 16k, not 8k.
> - * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case.
> - * Ditto for the __ia64__ case accordingly.
> - */
> -#define YY_BUF_SIZE 32768
> -#else
>  #define YY_BUF_SIZE 16384
> -#endif /* __ia64__ */
>  #endif
> 
>  #ifndef YY_TYPEDEF_YY_BUFFER_STATE
> @@ -280,6 +271,10 @@ int xlu__disk_yyget_lineno (yyscan_t yyscanner );
> 
>  void xlu__disk_yyset_lineno (int line_number ,yyscan_t yyscanner );
> 
> +int xlu__disk_yyget_column  (yyscan_t yyscanner );
> +
> +void xlu__disk_yyset_column (int column_no ,yyscan_t yyscanner );
> +
>  /* Macros after this point can all be overridden by user definitions in
>   * section 1.
>   */
> @@ -306,12 +301,7 @@ static int yy_flex_strlen (yyconst char * ,yyscan_t yyscanner);
> 
>  /* Amount of stuff to slurp up with each read. */
>  #ifndef YY_READ_BUF_SIZE
> -#ifdef __ia64__
> -/* On IA-64, the buffer size is 16k, not 8k */
> -#define YY_READ_BUF_SIZE 16384
> -#else
>  #define YY_READ_BUF_SIZE 8192
> -#endif /* __ia64__ */
>  #endif
> 
>  /* Number of entries by which start-condition stack grows. */
> @@ -344,8 +334,8 @@ extern int xlu__disk_yylex (yyscan_t yyscanner);
>  #undef YY_DECL
>  #endif
> 
> -#line 255 "libxlu_disk_l.l"
> +#line 263 "libxlu_disk_l.l"
> 
> -#line 350 "libxlu_disk_l.h"
> +#line 340 "libxlu_disk_l.h"
>  #undef xlu__disk_yyIN_HEADER
>  #endif /* xlu__disk_yyHEADER_H */
> diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
> index bee16a1..6bd48e8 100644
> --- a/tools/libxl/libxlu_disk_l.l
> +++ b/tools/libxl/libxlu_disk_l.l
> @@ -113,6 +113,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
>      else xlu__disk_err(dpc,str,"unknown value for backendtype");
>  }
> 
> +/* Sets ->backend_domid from the string. */
> +static void setbackend(DiskParseContext *dpc, const char *str) {
> +    if (libxl_name_to_domid(dpc->ctx, str, &dpc->disk->backend_domid)) {
> +        xlu__disk_err(dpc,str,"unknown domain for backend");
> +    }
> +}
> +
>  #define DEPRECATE(usewhatinstead) /* not currently reported */
> 
>  /* Handles a vdev positional parameter which includes a devtype. */
> @@ -169,6 +176,7 @@ devtype=[^,]*,?     { xlu__disk_err(DPC,yytext,"unknown value for type"); }
> 
>  access=[^,]*,? { STRIP(','); setaccess(DPC, FROMEQUALS); }
>  backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
> +backenddomain=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
> 
>  vdev=[^,]*,?   { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
>  script=[^,]*,? { STRIP(','); SAVESTRING("script", script, FROMEQUALS); }
> diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
> index 0333e55..87eb399 100644
> --- a/tools/libxl/libxlutil.h
> +++ b/tools/libxl/libxlutil.h
> @@ -72,7 +72,7 @@ const char *xlu_cfg_get_listitem(const XLU_ConfigList*, int entry);
>   */
> 
>  int xlu_disk_parse(XLU_Config *cfg, int nspecs, const char *const *specs,
> -                   libxl_device_disk *disk);
> +                   libxl_device_disk *disk, libxl_ctx *ctx);
>    /* disk must have been initialised.
>     *
>     * On error, returns errno value.  Bad strings cause EINVAL and
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 138cd72..fd00d61 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -420,7 +420,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
>          if (!*config) { perror("xlu_cfg_init"); exit(-1); }
>      }
> 
> -    e = xlu_disk_parse(*config, nspecs, specs, disk);
> +    e = xlu_disk_parse(*config, nspecs, specs, disk, ctx);
>      if (e == EINVAL) exit(-1);
>      if (e) {
>          fprintf(stderr,"xlu_disk_parse failed: %s\n",strerror(errno));
> @@ -5335,7 +5335,7 @@ int main_networkdetach(int argc, char **argv)
>  int main_blockattach(int argc, char **argv)
>  {
>      int opt;
> -    uint32_t fe_domid, be_domid = 0;
> +    uint32_t fe_domid;
>      libxl_device_disk disk = { 0 };
>      XLU_Config *config = 0;
> 
> @@ -5351,8 +5351,6 @@ int main_blockattach(int argc, char **argv)
>      parse_disk_config_multistring
>          (&config, argc-optind, (const char* const*)argv + optind, &disk);
> 
> -    disk.backend_domid = be_domid;
> -
>      if (dryrun_only) {
>          char *json = libxl_device_disk_to_json(ctx, &disk);
>          printf("disk: %s\n", json);
> --
> 1.7.11.2
> 

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [PATCH v2] libxl: Support backend domain ID for disks
  2012-08-31  8:04 ` Ian Campbell
@ 2012-09-05 17:05   ` Daniel De Graaf
  2012-09-06  7:26     ` Ian Campbell
  2012-10-09 15:23     ` Ian Jackson
  0 siblings, 2 replies; 10+ messages in thread
From: Daniel De Graaf @ 2012-09-05 17:05 UTC (permalink / raw)
  To: Ian.Campbell; +Cc: Daniel De Graaf, Ian.Jackson, xen-devel

Allow specification of backend domains for disks, either in the config
file or via xl block-attach. This functionality was supported in xend
(via an optional command line parameter to block-attach), so should also
be supported with libxl.

In order to support named backend domains like network-attach, a valid
libxl_ctx must now be passed to xlu_cfg_init.

Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

---

This patch does not include the changes to tools/libxl/libxlu_disk_l.c
and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
changes due to different generator versions.

 docs/misc/xl-disk-configuration.txt | 12 ++++++++++++
 tools/libxl/libxlu_cfg.c            |  4 +++-
 tools/libxl/libxlu_disk_l.l         |  9 +++++++++
 tools/libxl/libxlu_internal.h       |  1 +
 tools/libxl/libxlutil.h             |  3 ++-
 tools/libxl/xl.c                    |  2 +-
 tools/libxl/xl_cmdimpl.c            | 20 +++++++++-----------
 7 files changed, 37 insertions(+), 14 deletions(-)

diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt
index 86c16be..5bd456d 100644
--- a/docs/misc/xl-disk-configuration.txt
+++ b/docs/misc/xl-disk-configuration.txt
@@ -139,6 +139,18 @@ cdrom
 Convenience alias for "devtype=cdrom".
 
 
+backend=<domain-name>
+---------------------
+
+Description:           Designates a backend domain for the device
+Supported values:      Valid domain names
+Mandatory:             No
+
+Specifies the backend domain which this device should attach to. This
+defaults to domain 0. Specifying another domain requires setting up a
+driver domain which is outside the scope of this document.
+
+
 backendtype=<backend-type>
 --------------------------
 
diff --git a/tools/libxl/libxlu_cfg.c b/tools/libxl/libxlu_cfg.c
index 22adcb0..1d086b4 100644
--- a/tools/libxl/libxlu_cfg.c
+++ b/tools/libxl/libxlu_cfg.c
@@ -25,13 +25,15 @@
 #include "libxlu_cfg_l.h"
 #include "libxlu_cfg_i.h"
 
-XLU_Config *xlu_cfg_init(FILE *report, const char *report_source) {
+XLU_Config *xlu_cfg_init(FILE *report, const char *report_source,
+                         libxl_ctx *ctx) {
     XLU_Config *cfg;
 
     cfg= malloc(sizeof(*cfg));
     if (!cfg) return 0;
 
     cfg->report= report;
+    cfg->ctx = ctx;
     cfg->config_source= strdup(report_source);
     if (!cfg->config_source) { free(cfg); return 0; }
 
diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
index bee16a1..8cfc16e 100644
--- a/tools/libxl/libxlu_disk_l.l
+++ b/tools/libxl/libxlu_disk_l.l
@@ -33,6 +33,7 @@
 
 %{
 #include "libxlu_disk_i.h"
+#include "libxl_utils.h"
 
 #define YY_NO_INPUT
 
@@ -113,6 +114,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
     else xlu__disk_err(dpc,str,"unknown value for backendtype");
 }
 
+/* Sets ->backend_domid from the string. */
+static void setbackend(DiskParseContext *dpc, const char *str) {
+    if (libxl_name_to_domid(dpc->cfg->ctx, str, &dpc->disk->backend_domid)) {
+        xlu__disk_err(dpc,str,"unknown domain for backend");
+    }
+}
+
 #define DEPRECATE(usewhatinstead) /* not currently reported */
 
 /* Handles a vdev positional parameter which includes a devtype. */
@@ -168,6 +176,7 @@ devtype=disk,?	{ DPC->disk->is_cdrom = 0; }
 devtype=[^,]*,?	{ xlu__disk_err(DPC,yytext,"unknown value for type"); }
 
 access=[^,]*,?	{ STRIP(','); setaccess(DPC, FROMEQUALS); }
+backend=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
 backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
 
 vdev=[^,]*,?	{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
diff --git a/tools/libxl/libxlu_internal.h b/tools/libxl/libxlu_internal.h
index 7579158..5a9cf6d 100644
--- a/tools/libxl/libxlu_internal.h
+++ b/tools/libxl/libxlu_internal.h
@@ -39,6 +39,7 @@ struct XLU_Config {
     XLU_ConfigSetting *settings;
     FILE *report;
     char *config_source;
+    libxl_ctx *ctx;
 };
 
 typedef struct {
diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
index 0333e55..1de23e7 100644
--- a/tools/libxl/libxlutil.h
+++ b/tools/libxl/libxlutil.h
@@ -24,7 +24,8 @@
 typedef struct XLU_Config XLU_Config;
 typedef struct XLU_ConfigList XLU_ConfigList;
 
-XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename);
+XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename,
+                         libxl_ctx *ctx);
   /* 0 means we got ENOMEM. */
   /* report_filename is copied; report is saved and must remain valid
    *  until the Config is destroyed. */
diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
index f31e836..32a5c32 100644
--- a/tools/libxl/xl.c
+++ b/tools/libxl/xl.c
@@ -56,7 +56,7 @@ static void parse_global_config(const char *configfile,
     int e;
     const char *buf;
 
-    config = xlu_cfg_init(stderr, configfile);
+    config = xlu_cfg_init(stderr, configfile, ctx);
     if (!config) {
         fprintf(stderr, "Failed to allocate for configuration\n");
         exit(1);
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index 2d6ab97..eaebbeb 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -427,7 +427,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
     libxl_device_disk_init(disk);
 
     if (!*config) {
-        *config = xlu_cfg_init(stderr, "command line");
+        *config = xlu_cfg_init(stderr, "command line", ctx);
         if (!*config) { perror("xlu_cfg_init"); exit(-1); }
     }
 
@@ -583,7 +583,7 @@ static void parse_config_data(const char *config_source,
     libxl_domain_create_info *c_info = &d_config->c_info;
     libxl_domain_build_info *b_info = &d_config->b_info;
 
-    config= xlu_cfg_init(stderr, config_source);
+    config= xlu_cfg_init(stderr, config_source, ctx);
     if (!config) {
         fprintf(stderr, "Failed to allocate for configuration\n");
         exit(1);
@@ -2473,7 +2473,7 @@ static void pcidetach(const char *dom, const char *bdf, int force)
 
     libxl_device_pci_init(&pcidev);
     
-    config = xlu_cfg_init(stderr, "command line");
+    config = xlu_cfg_init(stderr, "command line", ctx);
     if (!config) { perror("xlu_cfg_inig"); exit(-1); }
 
     if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
@@ -2520,7 +2520,7 @@ static void pciattach(const char *dom, const char *bdf, const char *vs)
 
     libxl_device_pci_init(&pcidev);
 
-    config = xlu_cfg_init(stderr, "command line");
+    config = xlu_cfg_init(stderr, "command line", ctx);
     if (!config) { perror("xlu_cfg_inig"); exit(-1); }
 
     if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
@@ -2586,7 +2586,7 @@ static void pciassignable_add(const char *bdf, int rebind)
 
     libxl_device_pci_init(&pcidev);
 
-    config = xlu_cfg_init(stderr, "command line");
+    config = xlu_cfg_init(stderr, "command line", ctx);
     if (!config) { perror("xlu_cfg_init"); exit(-1); }
 
     if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
@@ -2624,7 +2624,7 @@ static void pciassignable_remove(const char *bdf, int rebind)
 
     libxl_device_pci_init(&pcidev);
 
-    config = xlu_cfg_init(stderr, "command line");
+    config = xlu_cfg_init(stderr, "command line", ctx);
     if (!config) { perror("xlu_cfg_init"); exit(-1); }
 
     if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
@@ -5321,7 +5321,7 @@ int main_networkattach(int argc, char **argv)
         return 1;
     }
 
-    config= xlu_cfg_init(stderr, "command line");
+    config= xlu_cfg_init(stderr, "command line", ctx);
     if (!config) {
         fprintf(stderr, "Failed to allocate for configuration\n");
         return 1;
@@ -5467,7 +5467,7 @@ int main_networkdetach(int argc, char **argv)
 int main_blockattach(int argc, char **argv)
 {
     int opt;
-    uint32_t fe_domid, be_domid = 0;
+    uint32_t fe_domid;
     libxl_device_disk disk = { 0 };
     XLU_Config *config = 0;
 
@@ -5483,8 +5483,6 @@ int main_blockattach(int argc, char **argv)
     parse_disk_config_multistring
         (&config, argc-optind, (const char* const*)argv + optind, &disk);
 
-    disk.backend_domid = be_domid;
-
     if (dryrun_only) {
         char *json = libxl_device_disk_to_json(ctx, &disk);
         printf("disk: %s\n", json);
@@ -6078,7 +6076,7 @@ int main_cpupoolcreate(int argc, char **argv)
         config_len += strlen(extra_config) + 1;
     }
 
-    config = xlu_cfg_init(stderr, config_src);
+    config = xlu_cfg_init(stderr, config_src, ctx);
     if (!config) {
         fprintf(stderr, "Failed to allocate for configuration\n");
         goto out;
-- 
1.7.11.4

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] libxl: Support backend domain ID for disks
  2012-09-05 17:05   ` [PATCH v2] " Daniel De Graaf
@ 2012-09-06  7:26     ` Ian Campbell
  2012-09-06 12:24       ` Daniel De Graaf
  2012-10-09 15:23     ` Ian Jackson
  1 sibling, 1 reply; 10+ messages in thread
From: Ian Campbell @ 2012-09-06  7:26 UTC (permalink / raw)
  To: Daniel De Graaf; +Cc: Ian Jackson, xen-devel

On Wed, 2012-09-05 at 18:05 +0100, Daniel De Graaf wrote:
> Allow specification of backend domains for disks, either in the config
> file or via xl block-attach. This functionality was supported in xend
> (via an optional command line parameter to block-attach), so should also
> be supported with libxl.
> 
> In order to support named backend domains like network-attach, a valid
> libxl_ctx must now be passed to xlu_cfg_init.
> 
> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>

Sorry but I think in the end this has missed the cut-off for 4.2.0 (we
are cutting the final RC tomorrow).

We should be branching soon after the final RC which means 4.3
development will open in unstable shortly. We should take this into
unstable then and consider it for 4.2.1.

In the meantime I suppose we should mention this in the release notes.

> 
> ---
> 
> This patch does not include the changes to tools/libxl/libxlu_disk_l.c
> and tools/libxl/libxlu_disk_l.h because the diffs contain unrelated
> changes due to different generator versions.
> 
>  docs/misc/xl-disk-configuration.txt | 12 ++++++++++++
>  tools/libxl/libxlu_cfg.c            |  4 +++-
>  tools/libxl/libxlu_disk_l.l         |  9 +++++++++
>  tools/libxl/libxlu_internal.h       |  1 +
>  tools/libxl/libxlutil.h             |  3 ++-
>  tools/libxl/xl.c                    |  2 +-
>  tools/libxl/xl_cmdimpl.c            | 20 +++++++++-----------
>  7 files changed, 37 insertions(+), 14 deletions(-)
> 
> diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt
> index 86c16be..5bd456d 100644
> --- a/docs/misc/xl-disk-configuration.txt
> +++ b/docs/misc/xl-disk-configuration.txt
> @@ -139,6 +139,18 @@ cdrom
>  Convenience alias for "devtype=cdrom".
>  
> 
> +backend=<domain-name>
> +---------------------
> +
> +Description:           Designates a backend domain for the device
> +Supported values:      Valid domain names
> +Mandatory:             No
> +
> +Specifies the backend domain which this device should attach to. This
> +defaults to domain 0. Specifying another domain requires setting up a
> +driver domain which is outside the scope of this document.
> +
> +
>  backendtype=<backend-type>
>  --------------------------
>  
> diff --git a/tools/libxl/libxlu_cfg.c b/tools/libxl/libxlu_cfg.c
> index 22adcb0..1d086b4 100644
> --- a/tools/libxl/libxlu_cfg.c
> +++ b/tools/libxl/libxlu_cfg.c
> @@ -25,13 +25,15 @@
>  #include "libxlu_cfg_l.h"
>  #include "libxlu_cfg_i.h"
>  
> -XLU_Config *xlu_cfg_init(FILE *report, const char *report_source) {
> +XLU_Config *xlu_cfg_init(FILE *report, const char *report_source,
> +                         libxl_ctx *ctx) {
>      XLU_Config *cfg;
>  
>      cfg= malloc(sizeof(*cfg));
>      if (!cfg) return 0;
>  
>      cfg->report= report;
> +    cfg->ctx = ctx;
>      cfg->config_source= strdup(report_source);
>      if (!cfg->config_source) { free(cfg); return 0; }
>  
> diff --git a/tools/libxl/libxlu_disk_l.l b/tools/libxl/libxlu_disk_l.l
> index bee16a1..8cfc16e 100644
> --- a/tools/libxl/libxlu_disk_l.l
> +++ b/tools/libxl/libxlu_disk_l.l
> @@ -33,6 +33,7 @@
>  
>  %{
>  #include "libxlu_disk_i.h"
> +#include "libxl_utils.h"
>  
>  #define YY_NO_INPUT
>  
> @@ -113,6 +114,13 @@ static void setbackendtype(DiskParseContext *dpc, const char *str) {
>      else xlu__disk_err(dpc,str,"unknown value for backendtype");
>  }
>  
> +/* Sets ->backend_domid from the string. */
> +static void setbackend(DiskParseContext *dpc, const char *str) {
> +    if (libxl_name_to_domid(dpc->cfg->ctx, str, &dpc->disk->backend_domid)) {
> +        xlu__disk_err(dpc,str,"unknown domain for backend");
> +    }
> +}
> +
>  #define DEPRECATE(usewhatinstead) /* not currently reported */
>  
>  /* Handles a vdev positional parameter which includes a devtype. */
> @@ -168,6 +176,7 @@ devtype=disk,?	{ DPC->disk->is_cdrom = 0; }
>  devtype=[^,]*,?	{ xlu__disk_err(DPC,yytext,"unknown value for type"); }
>  
>  access=[^,]*,?	{ STRIP(','); setaccess(DPC, FROMEQUALS); }
> +backend=[^,]*,? { STRIP(','); setbackend(DPC,FROMEQUALS); }
>  backendtype=[^,]*,? { STRIP(','); setbackendtype(DPC,FROMEQUALS); }
>  
>  vdev=[^,]*,?	{ STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); }
> diff --git a/tools/libxl/libxlu_internal.h b/tools/libxl/libxlu_internal.h
> index 7579158..5a9cf6d 100644
> --- a/tools/libxl/libxlu_internal.h
> +++ b/tools/libxl/libxlu_internal.h
> @@ -39,6 +39,7 @@ struct XLU_Config {
>      XLU_ConfigSetting *settings;
>      FILE *report;
>      char *config_source;
> +    libxl_ctx *ctx;
>  };
>  
>  typedef struct {
> diff --git a/tools/libxl/libxlutil.h b/tools/libxl/libxlutil.h
> index 0333e55..1de23e7 100644
> --- a/tools/libxl/libxlutil.h
> +++ b/tools/libxl/libxlutil.h
> @@ -24,7 +24,8 @@
>  typedef struct XLU_Config XLU_Config;
>  typedef struct XLU_ConfigList XLU_ConfigList;
>  
> -XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename);
> +XLU_Config *xlu_cfg_init(FILE *report, const char *report_filename,
> +                         libxl_ctx *ctx);
>    /* 0 means we got ENOMEM. */
>    /* report_filename is copied; report is saved and must remain valid
>     *  until the Config is destroyed. */
> diff --git a/tools/libxl/xl.c b/tools/libxl/xl.c
> index f31e836..32a5c32 100644
> --- a/tools/libxl/xl.c
> +++ b/tools/libxl/xl.c
> @@ -56,7 +56,7 @@ static void parse_global_config(const char *configfile,
>      int e;
>      const char *buf;
>  
> -    config = xlu_cfg_init(stderr, configfile);
> +    config = xlu_cfg_init(stderr, configfile, ctx);
>      if (!config) {
>          fprintf(stderr, "Failed to allocate for configuration\n");
>          exit(1);
> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
> index 2d6ab97..eaebbeb 100644
> --- a/tools/libxl/xl_cmdimpl.c
> +++ b/tools/libxl/xl_cmdimpl.c
> @@ -427,7 +427,7 @@ static void parse_disk_config_multistring(XLU_Config **config,
>      libxl_device_disk_init(disk);
>  
>      if (!*config) {
> -        *config = xlu_cfg_init(stderr, "command line");
> +        *config = xlu_cfg_init(stderr, "command line", ctx);
>          if (!*config) { perror("xlu_cfg_init"); exit(-1); }
>      }
>  
> @@ -583,7 +583,7 @@ static void parse_config_data(const char *config_source,
>      libxl_domain_create_info *c_info = &d_config->c_info;
>      libxl_domain_build_info *b_info = &d_config->b_info;
>  
> -    config= xlu_cfg_init(stderr, config_source);
> +    config= xlu_cfg_init(stderr, config_source, ctx);
>      if (!config) {
>          fprintf(stderr, "Failed to allocate for configuration\n");
>          exit(1);
> @@ -2473,7 +2473,7 @@ static void pcidetach(const char *dom, const char *bdf, int force)
>  
>      libxl_device_pci_init(&pcidev);
>      
> -    config = xlu_cfg_init(stderr, "command line");
> +    config = xlu_cfg_init(stderr, "command line", ctx);
>      if (!config) { perror("xlu_cfg_inig"); exit(-1); }
>  
>      if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
> @@ -2520,7 +2520,7 @@ static void pciattach(const char *dom, const char *bdf, const char *vs)
>  
>      libxl_device_pci_init(&pcidev);
>  
> -    config = xlu_cfg_init(stderr, "command line");
> +    config = xlu_cfg_init(stderr, "command line", ctx);
>      if (!config) { perror("xlu_cfg_inig"); exit(-1); }
>  
>      if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
> @@ -2586,7 +2586,7 @@ static void pciassignable_add(const char *bdf, int rebind)
>  
>      libxl_device_pci_init(&pcidev);
>  
> -    config = xlu_cfg_init(stderr, "command line");
> +    config = xlu_cfg_init(stderr, "command line", ctx);
>      if (!config) { perror("xlu_cfg_init"); exit(-1); }
>  
>      if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
> @@ -2624,7 +2624,7 @@ static void pciassignable_remove(const char *bdf, int rebind)
>  
>      libxl_device_pci_init(&pcidev);
>  
> -    config = xlu_cfg_init(stderr, "command line");
> +    config = xlu_cfg_init(stderr, "command line", ctx);
>      if (!config) { perror("xlu_cfg_init"); exit(-1); }
>  
>      if (xlu_pci_parse_bdf(config, &pcidev, bdf)) {
> @@ -5321,7 +5321,7 @@ int main_networkattach(int argc, char **argv)
>          return 1;
>      }
>  
> -    config= xlu_cfg_init(stderr, "command line");
> +    config= xlu_cfg_init(stderr, "command line", ctx);
>      if (!config) {
>          fprintf(stderr, "Failed to allocate for configuration\n");
>          return 1;
> @@ -5467,7 +5467,7 @@ int main_networkdetach(int argc, char **argv)
>  int main_blockattach(int argc, char **argv)
>  {
>      int opt;
> -    uint32_t fe_domid, be_domid = 0;
> +    uint32_t fe_domid;
>      libxl_device_disk disk = { 0 };
>      XLU_Config *config = 0;
>  
> @@ -5483,8 +5483,6 @@ int main_blockattach(int argc, char **argv)
>      parse_disk_config_multistring
>          (&config, argc-optind, (const char* const*)argv + optind, &disk);
>  
> -    disk.backend_domid = be_domid;
> -
>      if (dryrun_only) {
>          char *json = libxl_device_disk_to_json(ctx, &disk);
>          printf("disk: %s\n", json);
> @@ -6078,7 +6076,7 @@ int main_cpupoolcreate(int argc, char **argv)
>          config_len += strlen(extra_config) + 1;
>      }
>  
> -    config = xlu_cfg_init(stderr, config_src);
> +    config = xlu_cfg_init(stderr, config_src, ctx);
>      if (!config) {
>          fprintf(stderr, "Failed to allocate for configuration\n");
>          goto out;

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] libxl: Support backend domain ID for disks
  2012-09-06  7:26     ` Ian Campbell
@ 2012-09-06 12:24       ` Daniel De Graaf
  0 siblings, 0 replies; 10+ messages in thread
From: Daniel De Graaf @ 2012-09-06 12:24 UTC (permalink / raw)
  To: Ian Campbell; +Cc: Ian Jackson, xen-devel

On 09/06/2012 03:26 AM, Ian Campbell wrote:
> On Wed, 2012-09-05 at 18:05 +0100, Daniel De Graaf wrote:
>> Allow specification of backend domains for disks, either in the config
>> file or via xl block-attach. This functionality was supported in xend
>> (via an optional command line parameter to block-attach), so should also
>> be supported with libxl.
>>
>> In order to support named backend domains like network-attach, a valid
>> libxl_ctx must now be passed to xlu_cfg_init.
>>
>> Signed-off-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
> 
> Sorry but I think in the end this has missed the cut-off for 4.2.0 (we
> are cutting the final RC tomorrow).
> 
> We should be branching soon after the final RC which means 4.3
> development will open in unstable shortly. We should take this into
> unstable then and consider it for 4.2.1.
> 
> In the meantime I suppose we should mention this in the release notes.
> 

That's fine; I just wanted to be sure that the change to xlu_cfg_init
was noticed and that the API change was noted in 4.2.0 if that is needed
to make this acceptable for 4.2.1. Sorry I didn't get this in earlier; I
didn't notice that you wanted me to resubmit until it was too late.

-- 
Daniel De Graaf
National Security Agency

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] libxl: Support backend domain ID for disks
  2012-09-05 17:05   ` [PATCH v2] " Daniel De Graaf
  2012-09-06  7:26     ` Ian Campbell
@ 2012-10-09 15:23     ` Ian Jackson
  2012-10-09 18:41       ` Daniel De Graaf
  1 sibling, 1 reply; 10+ messages in thread
From: Ian Jackson @ 2012-10-09 15:23 UTC (permalink / raw)
  To: Daniel De Graaf; +Cc: Ian Campbell, xen-devel

Daniel De Graaf writes ("[PATCH v2] libxl: Support backend domain ID for disks"):
> Allow specification of backend domains for disks, either in the config
> file or via xl block-attach. This functionality was supported in xend
> (via an optional command line parameter to block-attach), so should also
> be supported with libxl.
> 
> In order to support named backend domains like network-attach, a valid
> libxl_ctx must now be passed to xlu_cfg_init.

I've been thinking about this and I'm afraid I've come to the
conclusion that the way your new API specifies backend domains is not
the way I think it should be done.

In particular, I think translating the config file from a source text
into an idl configuration structure shouldn't depend on looking up
information like domids.  (The same would be true of DNS names, or
other runtime lookups.)  So I think the backend domain _name_ should
be in the IDL structure.

But of course it should also be possible to specify a domid.

I can think of three (at least superficially) plausible ways to define
this API:

1. The backend domain is specified as a string.  If specifying a domid
   is desired, the string is the domid number in ascii.  Domains whose
   names are entirely valid numbers according to strtoul(,,0) cannot
   be specified as backends by name (or should perhaps be prohibited
   entirely - xl can't handle them anyway).

2. The IDL contains both a string and a number.  If the string is
   provided, it is used; otherwise the number is used.

3. The IDL contains a variadic "domspec" structure which allows the
   domain to be specified (a) not at all (b) as a domid (c) as a
   domain name (d) as a uuid.

Of these I think 3 is probably overkill and either 1 or 2 is
acceptable and I have a marginal preference for 2.

Before you implement any of this I think we should agree whether my
qualm about domain name lookups during config parsing is justified,
and what the right API is.

NB that this complaint does seem perhaps contrary to my intent to add
a libxl context to libxlu parsing calls.  But, having thought about
it, this libxl context should be a "dummy" one which can be used for
memory allocation and logging but which does not support actual Xen
functionality.

Thanks, and sorry to block your useful new functionality on cans of
works.

Ian.

^ permalink raw reply	[flat|nested] 10+ messages in thread

* Re: [PATCH v2] libxl: Support backend domain ID for disks
  2012-10-09 15:23     ` Ian Jackson
@ 2012-10-09 18:41       ` Daniel De Graaf
  0 siblings, 0 replies; 10+ messages in thread
From: Daniel De Graaf @ 2012-10-09 18:41 UTC (permalink / raw)
  To: Ian Jackson; +Cc: Ian Campbell, xen-devel

On 10/09/2012 11:23 AM, Ian Jackson wrote:
> Daniel De Graaf writes ("[PATCH v2] libxl: Support backend domain ID for disks"):
>> Allow specification of backend domains for disks, either in the config
>> file or via xl block-attach. This functionality was supported in xend
>> (via an optional command line parameter to block-attach), so should also
>> be supported with libxl.
>>
>> In order to support named backend domains like network-attach, a valid
>> libxl_ctx must now be passed to xlu_cfg_init.
> 
> I've been thinking about this and I'm afraid I've come to the
> conclusion that the way your new API specifies backend domains is not
> the way I think it should be done.
> 
> In particular, I think translating the config file from a source text
> into an idl configuration structure shouldn't depend on looking up
> information like domids.  (The same would be true of DNS names, or
> other runtime lookups.)  So I think the backend domain _name_ should
> be in the IDL structure.
> 
> But of course it should also be possible to specify a domid.
> 
> I can think of three (at least superficially) plausible ways to define
> this API:
> 
> 1. The backend domain is specified as a string.  If specifying a domid
>    is desired, the string is the domid number in ascii.  Domains whose
>    names are entirely valid numbers according to strtoul(,,0) cannot
>    be specified as backends by name (or should perhaps be prohibited
>    entirely - xl can't handle them anyway).
> 
> 2. The IDL contains both a string and a number.  If the string is
>    provided, it is used; otherwise the number is used.
> 
> 3. The IDL contains a variadic "domspec" structure which allows the
>    domain to be specified (a) not at all (b) as a domid (c) as a
>    domain name (d) as a uuid.
> 
> Of these I think 3 is probably overkill and either 1 or 2 is
> acceptable and I have a marginal preference for 2.
> 
> Before you implement any of this I think we should agree whether my
> qualm about domain name lookups during config parsing is justified,
> and what the right API is.
> 
> NB that this complaint does seem perhaps contrary to my intent to add
> a libxl context to libxlu parsing calls.  But, having thought about
> it, this libxl context should be a "dummy" one which can be used for
> memory allocation and logging but which does not support actual Xen
> functionality.
> 
> Thanks, and sorry to block your useful new functionality on cans of
> works.
> 
> Ian.
> 

I assume that this change would also apply to vfb, vkb, nic, and any new
devices that allow backend domains to be specified (i.e. vtpm). Currently,
the domains have to be specified by name in xl's config file, but I think
that allowing domid there in addition is a good idea.

Method (2) is also simpler for backwards compatibility as it allows the
existing backend_domid fields to remain, supplemented by an entry like
backend_name - so that's my preference.

-- 
Daniel De Graaf
National Security Agency

^ permalink raw reply	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2012-10-09 18:41 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-08-06 21:51 [PATCH RFC/for-4.2?] libxl: Support backend domain ID for disks Daniel De Graaf
2012-08-07  9:36 ` Ian Campbell
2012-08-07 10:38   ` Ian Jackson
2012-08-07 13:56   ` Daniel De Graaf
2012-08-31  8:04 ` Ian Campbell
2012-09-05 17:05   ` [PATCH v2] " Daniel De Graaf
2012-09-06  7:26     ` Ian Campbell
2012-09-06 12:24       ` Daniel De Graaf
2012-10-09 15:23     ` Ian Jackson
2012-10-09 18:41       ` Daniel De Graaf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.