diff options
-rw-r--r-- | docs/misc/xl-disk-configuration.txt | 7 | ||||
-rw-r--r-- | tools/hotplug/Linux/block | 2 | ||||
-rwxr-xr-x | tools/libxl/check-xl-disk-parse | 39 | ||||
-rw-r--r-- | tools/libxl/libxl.c | 46 | ||||
-rw-r--r-- | tools/libxl/libxl_device.c | 24 | ||||
-rw-r--r-- | tools/libxl/libxlu_disk_i.h | 2 | ||||
-rw-r--r-- | tools/libxl/libxlu_disk_l.c | 643 | ||||
-rw-r--r-- | tools/libxl/libxlu_disk_l.h | 10 | ||||
-rw-r--r-- | tools/libxl/libxlu_disk_l.l | 19 |
9 files changed, 429 insertions, 363 deletions
diff --git a/docs/misc/xl-disk-configuration.txt b/docs/misc/xl-disk-configuration.txt index 5da5e11ea4..86c16be03a 100644 --- a/docs/misc/xl-disk-configuration.txt +++ b/docs/misc/xl-disk-configuration.txt @@ -160,7 +160,10 @@ script=<script> --------------- Specifies that <target> is not a normal host path, but rather -information to be interpreted by /etc/xen/scripts/block-<script>. +information to be interpreted by the executable program <script>, +(looked for in /etc/xen/scripts, if it doesn't contain a slash). + +These scripts are normally called "block-<script>". @@ -204,7 +207,7 @@ Supported values: iscsi: nbd: enbd: drbd: In xend and old versions of libxl it was necessary to specify the "script" (see above) with a prefix. For compatibility, these four prefixes are recognised as specifying the corresponding script. They -are equivalent to "script=<script>". +are equivalent to "script=block-<script>". <deprecated-prefix>: diff --git a/tools/hotplug/Linux/block b/tools/hotplug/Linux/block index 3b1a52915a..da26e221dc 100644 --- a/tools/hotplug/Linux/block +++ b/tools/hotplug/Linux/block @@ -342,4 +342,4 @@ esac # If we've reached here, $t is neither phy nor file, so fire a helper script. [ -x ${XEN_SCRIPT_DIR}/block-"$t" ] && \ - ${XEN_SCRIPT_DIR}/block-"$t" "$command" $node + ${XEN_SCRIPT_DIR}/block-"$t" "$command" diff --git a/tools/libxl/check-xl-disk-parse b/tools/libxl/check-xl-disk-parse index ffe3613bde..41fb7afa2a 100755 --- a/tools/libxl/check-xl-disk-parse +++ b/tools/libxl/check-xl-disk-parse @@ -142,5 +142,44 @@ disk: { EOF one 0 vdev=hdc,access=r,devtype=cdrom,format=empty +one 0 vdev=hdc,access=r,devtype=cdrom + +expected <<EOF +disk: { + "backend_domid": 0, + "pdev_path": "iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost", + "vdev": "xvda", + "backend": "unknown", + "format": "raw", + "script": "block-iscsi", + "removable": 0, + "readwrite": 1, + "is_cdrom": 0 +} + +EOF + +# http://backdrift.org/xen-block-iscsi-script-with-multipath-support +one 0 iscsi:iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost,xvda,w +one 0 vdev=xvda,access=w,script=block-iscsi,target=iqn.2001-05.com.equallogic:0-8a0906-23fe93404-c82797962054a96d-examplehost + +expected <<EOF +disk: { + "backend_domid": 0, + "pdev_path": "app01", + "vdev": "hda", + "backend": "unknown", + "format": "raw", + "script": "block-drbd", + "removable": 0, + "readwrite": 1, + "is_cdrom": 0 +} + +EOF + +# http://lists.linbit.com/pipermail/drbd-user/2008-September/010221.html +# http://www.drbd.org/users-guide-emb/s-xen-configure-domu.html +one 0 drbd:app01,hda,w complete diff --git a/tools/libxl/libxl.c b/tools/libxl/libxl.c index 726a70ebb0..cab41ed163 100644 --- a/tools/libxl/libxl.c +++ b/tools/libxl/libxl.c @@ -1796,9 +1796,9 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, STATE_AO_GC(aodev->ao); flexarray_t *front = NULL; flexarray_t *back = NULL; - char *dev; + char *dev, *script; libxl__device *device; - int major, minor, rc; + int rc; libxl_ctx *ctx = gc->owner; xs_transaction_t t = XBT_NULL; @@ -1833,13 +1833,6 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, goto out_free; } - if (disk->script) { - LIBXL__LOG(ctx, LIBXL__LOG_ERROR, "External block scripts" - " not yet supported, sorry"); - rc = ERROR_INVAL; - goto out_free; - } - GCNEW(device); rc = libxl__device_from_disk(gc, domid, disk, device); if (rc != 0) { @@ -1851,18 +1844,16 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, switch (disk->backend) { case LIBXL_DISK_BACKEND_PHY: dev = disk->pdev_path; - do_backend_phy: - libxl__device_physdisk_major_minor(dev, &major, &minor); - flexarray_append(back, "physical-device"); - flexarray_append(back, libxl__sprintf(gc, "%x:%x", major, minor)); + script = libxl__abs_path(gc, disk->script ?: "block", + libxl__xen_script_dir_path()); + + do_backend_phy: flexarray_append(back, "params"); flexarray_append(back, dev); - flexarray_append(back, "script"); - flexarray_append(back, GCSPRINTF("%s/%s", - libxl__xen_script_dir_path(), - "block")); + assert(script); + flexarray_append_pair(back, "script", script); assert(device->backend_kind == LIBXL__DEVICE_KIND_VBD); break; @@ -1879,10 +1870,12 @@ static void device_disk_add(libxl__egc *egc, uint32_t domid, libxl__device_disk_string_of_format(disk->format), disk->pdev_path)); - flexarray_append(back, "script"); - flexarray_append(back, GCSPRINTF("%s/%s", - libxl__xen_script_dir_path(), - "blktap")); + /* + * tap devices do not support custom block scripts and + * always use the plain block script. + */ + script = libxl__abs_path(gc, "block", + libxl__xen_script_dir_path()); /* now create a phy device to export the device to the guest */ goto do_backend_phy; @@ -2582,13 +2575,10 @@ void libxl__device_nic_add(libxl__egc *egc, uint32_t domid, flexarray_append(back, "1"); flexarray_append(back, "state"); flexarray_append(back, libxl__sprintf(gc, "%d", 1)); - if (nic->script) { - flexarray_append(back, "script"); - flexarray_append(back, nic->script[0]=='/' ? nic->script - : libxl__sprintf(gc, "%s/%s", - libxl__xen_script_dir_path(), - nic->script)); - } + if (nic->script) + flexarray_append_pair(back, "script", + libxl__abs_path(gc, nic->script, + libxl__xen_script_dir_path())); if (nic->ifname) { flexarray_append(back, "vifname"); diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c index 1bb0044c74..8e8410e214 100644 --- a/tools/libxl/libxl_device.c +++ b/tools/libxl/libxl_device.c @@ -147,18 +147,26 @@ typedef struct { } disk_try_backend_args; static int disk_try_backend(disk_try_backend_args *a, - libxl_disk_backend backend) { + libxl_disk_backend backend) + { + libxl__gc *gc = a->gc; /* returns 0 (ie, DISK_BACKEND_UNKNOWN) on failure, or * backend on success */ - libxl_ctx *ctx = libxl__gc_owner(a->gc); - switch (backend) { + libxl_ctx *ctx = libxl__gc_owner(gc); + switch (backend) { case LIBXL_DISK_BACKEND_PHY: if (!(a->disk->format == LIBXL_DISK_FORMAT_RAW || a->disk->format == LIBXL_DISK_FORMAT_EMPTY)) { goto bad_format; } + if (a->disk->script) { + LOG(DEBUG, "Disk vdev=%s, uses script=... assuming phy backend", + a->disk->vdev); + return backend; + } + if (libxl__try_phy_backend(a->stab.st_mode)) return backend; @@ -168,6 +176,8 @@ static int disk_try_backend(disk_try_backend_args *a, return 0; case LIBXL_DISK_BACKEND_TAP: + if (a->disk->script) goto bad_script; + if (!libxl__blktap_enabled(a->gc)) { LIBXL__LOG(ctx, LIBXL__LOG_DEBUG, "Disk vdev=%s, backend tap" " unsuitable because blktap not available", @@ -181,6 +191,7 @@ static int disk_try_backend(disk_try_backend_args *a, return backend; case LIBXL_DISK_BACKEND_QDISK: + if (a->disk->script) goto bad_script; return backend; default: @@ -198,6 +209,11 @@ static int disk_try_backend(disk_try_backend_args *a, libxl_disk_backend_to_string(backend), libxl_disk_format_to_string(a->disk->format)); return 0; + + bad_script: + LOG(DEBUG, "Disk vdev=%s, backend %s not compatible with script=...", + a->disk->vdev, libxl_disk_backend_to_string(backend)); + return 0; } int libxl__device_disk_set_backend(libxl__gc *gc, libxl_device_disk *disk) { @@ -220,7 +236,7 @@ int libxl__device_disk_set_backend(libxl__gc *gc, libxl_device_disk *disk) { return ERROR_INVAL; } memset(&a.stab, 0, sizeof(a.stab)); - } else { + } else if (!disk->script) { if (stat(disk->pdev_path, &a.stab)) { LIBXL__LOG_ERRNO(ctx, LIBXL__LOG_ERROR, "Disk vdev=%s " "failed to stat: %s", diff --git a/tools/libxl/libxlu_disk_i.h b/tools/libxl/libxlu_disk_i.h index 37246f22bf..4fccd4a2e5 100644 --- a/tools/libxl/libxlu_disk_i.h +++ b/tools/libxl/libxlu_disk_i.h @@ -1,8 +1,6 @@ #ifndef LIBXLU_DISK_I_H #define LIBXLU_DISK_I_H -#include "libxl_osdeps.h" /* must come before any other headers */ - #include "libxlu_internal.h" diff --git a/tools/libxl/libxlu_disk_l.c b/tools/libxl/libxlu_disk_l.c index f6903853ee..4c68034d95 100644 --- a/tools/libxl/libxlu_disk_l.c +++ b/tools/libxl/libxlu_disk_l.c @@ -1,6 +1,10 @@ #line 2 "libxlu_disk_l.c" +#line 31 "libxlu_disk_l.l" +#include "libxl_osdeps.h" /* must come before any other headers */ + -#line 4 "libxlu_disk_l.c" + +#line 8 "libxlu_disk_l.c" #define YY_INT_ALIGNED short int @@ -366,7 +370,7 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_acclist[456] = +static yyconst flex_int16_t yy_acclist[447] = { 0, 24, 24, 26, 22, 23, 25, 8193, 22, 23, 25, 16385, 8193, 22, 25,16385, 22, 23, 25, 23, 25, @@ -379,77 +383,76 @@ static yyconst flex_int16_t yy_acclist[456] = 8213, 22,16405, 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, 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, - 8213, 22, 8213, 22, 8213, 12, 22, 17, 8213, 22, - 16405, 22, 22, 22, 22, 22, 22, 22, 8213, 22, - 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, 22, 22, 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,16398,16405, 22, 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, 8206, - 8213, 22, 8206, 8213, 22, 8206, 22, 8206, 8213, 22, - 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, 8206, 8213, 22, 8206, 8213, - 22, 8206, 8213, 8206, 22, 8206, 22, 10, 12, 10, - 15, 8213, 22,16405, 11, 12, 11, 7, 7, 12, - 22, 6, 12, 6, 6, 12, 6, 12, 2, 2, - - 12, 8206, 22,16398, 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 + 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 } ; -static yyconst flex_int16_t yy_accept[257] = +static yyconst flex_int16_t yy_accept[252] = { 0, 1, 1, 1, 2, 3, 4, 7, 12, 16, 19, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66, 68, 69, 70, 71, 73, 76, 78, 79, 80, 81, 84, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, - 97, 98, 99, 100, 101, 102, 103, 105, 107, 108, - 110, 112, 113, 114, 115, 116, 117, 118, 119, 120, + 97, 98, 99, 100, 101, 102, 103, 104, 106, 108, + 109, 111, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, - 131, 133, 135, 136, 137, 138, 142, 143, 144, 145, - 146, 147, 148, 149, 152, 156, 157, 162, 163, 164, - - 169, 170, 171, 172, 173, 176, 179, 181, 183, 184, - 186, 187, 191, 192, 193, 194, 195, 198, 201, 203, - 205, 208, 211, 213, 215, 216, 219, 222, 224, 226, - 227, 228, 229, 230, 233, 236, 238, 240, 241, 242, - 244, 245, 248, 251, 253, 255, 256, 260, 265, 266, - 269, 272, 274, 276, 277, 280, 283, 285, 287, 288, - 289, 292, 295, 297, 299, 300, 301, 302, 304, 305, - 306, 307, 308, 311, 314, 316, 318, 319, 320, 323, - 326, 328, 330, 333, 336, 338, 340, 341, 342, 343, - 344, 345, 347, 349, 350, 351, 352, 354, 355, 358, - - 361, 363, 365, 366, 369, 372, 374, 376, 377, 378, - 380, 381, 385, 387, 388, 389, 391, 392, 394, 395, - 397, 399, 400, 402, 405, 406, 408, 411, 414, 416, - 418, 420, 421, 422, 424, 425, 426, 429, 432, 434, - 436, 437, 438, 439, 440, 441, 442, 444, 446, 447, - 449, 451, 452, 454, 456, 456 + 131, 132, 133, 135, 137, 138, 139, 140, 144, 145, + 146, 147, 148, 149, 150, 151, 156, 160, 161, 166, + + 167, 168, 173, 174, 175, 176, 177, 180, 183, 185, + 187, 188, 190, 191, 195, 196, 197, 200, 203, 205, + 207, 210, 213, 215, 217, 220, 223, 225, 227, 228, + 231, 234, 236, 238, 239, 240, 241, 242, 245, 248, + 250, 252, 253, 254, 256, 257, 260, 263, 265, 267, + 268, 272, 275, 278, 280, 282, 283, 286, 289, 291, + 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 } ; static yyconst flex_int32_t yy_ec[256] = @@ -492,244 +495,238 @@ static yyconst flex_int32_t yy_meta[34] = 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[313] = +static yyconst flex_int16_t yy_base[308] = { 0, - 0, 0, 572, 560, 559, 551, 32, 35, 662, 662, - 44, 62, 30, 40, 32, 50, 533, 49, 47, 59, - 68, 525, 69, 517, 72, 0, 662, 515, 662, 83, - 91, 0, 0, 100, 501, 109, 0, 78, 51, 86, - 89, 74, 96, 105, 109, 110, 111, 112, 117, 73, - 119, 118, 121, 120, 122, 0, 134, 0, 0, 138, - 0, 0, 495, 130, 144, 129, 143, 145, 146, 147, - 148, 149, 153, 154, 155, 158, 161, 165, 166, 170, - 180, 0, 0, 662, 171, 201, 176, 175, 178, 183, - 465, 182, 190, 455, 212, 188, 221, 208, 224, 234, - - 209, 230, 236, 221, 244, 0, 247, 0, 184, 248, - 244, 269, 231, 247, 251, 258, 272, 0, 279, 0, - 283, 0, 286, 0, 255, 290, 0, 293, 0, 270, - 281, 455, 254, 297, 0, 0, 0, 0, 294, 662, - 295, 308, 0, 310, 0, 257, 319, 328, 304, 331, - 0, 0, 0, 0, 335, 0, 0, 0, 0, 316, - 338, 0, 0, 0, 0, 333, 336, 447, 662, 429, - 338, 340, 348, 0, 0, 0, 0, 428, 351, 0, - 355, 0, 359, 0, 362, 0, 357, 427, 308, 369, - 426, 662, 425, 662, 346, 365, 423, 662, 371, 0, - - 0, 0, 0, 378, 0, 0, 0, 0, 380, 421, - 662, 388, 420, 0, 419, 662, 373, 418, 662, 372, - 382, 417, 662, 398, 416, 662, 400, 0, 402, 0, - 0, 385, 415, 662, 390, 275, 409, 0, 0, 0, - 0, 405, 404, 406, 264, 412, 224, 129, 662, 87, - 662, 47, 662, 662, 662, 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 + 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, + 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, + 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, + + 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, + 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 } ; -static yyconst flex_int16_t yy_def[313] = +static yyconst flex_int16_t yy_def[308] = { 0, - 255, 1, 256, 256, 255, 257, 258, 258, 255, 255, - 259, 259, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 260, 255, 257, 255, 261, - 258, 262, 262, 263, 12, 257, 264, 12, 12, 12, + 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, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 260, 261, 262, 262, 265, - 266, 266, 255, 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, 12, 12, 12, 12, - 265, 266, 266, 255, 12, 267, 12, 12, 12, 12, - 12, 12, 12, 36, 268, 12, 269, 12, 12, 270, - - 12, 12, 12, 12, 271, 272, 267, 272, 12, 12, - 12, 273, 12, 12, 12, 257, 274, 275, 268, 275, - 276, 277, 269, 277, 12, 278, 279, 270, 279, 12, - 12, 280, 12, 271, 272, 272, 281, 281, 12, 255, - 12, 282, 283, 273, 283, 12, 284, 285, 257, 274, - 275, 275, 286, 286, 276, 277, 277, 287, 287, 12, - 278, 279, 279, 288, 288, 12, 12, 289, 255, 290, - 12, 12, 282, 283, 283, 291, 291, 292, 293, 294, - 284, 294, 295, 296, 285, 296, 257, 297, 12, 298, - 289, 255, 299, 255, 12, 300, 301, 255, 293, 294, - - 294, 302, 302, 295, 296, 296, 303, 303, 257, 304, - 255, 305, 306, 306, 299, 255, 12, 307, 255, 307, - 307, 301, 255, 285, 304, 255, 308, 309, 305, 309, - 306, 12, 307, 255, 307, 307, 308, 309, 309, 310, - 310, 12, 307, 307, 311, 307, 307, 312, 255, 307, - 255, 312, 255, 255, 0, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255 + 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 } ; -static yyconst flex_int16_t yy_nxt[696] = +static yyconst flex_int16_t yy_nxt[690] = { 0, 6, 7, 8, 9, 6, 6, 6, 6, 10, 11, 12, 13, 14, 15, 16, 17, 17, 18, 17, 17, 17, 17, 19, 17, 20, 21, 22, 23, 24, 17, 25, 17, 17, 31, 31, 32, 31, 31, 32, 35, 33, 35, 41, 33, 28, 28, 28, 29, 34, 35, - 249, 36, 37, 42, 43, 38, 35, 48, 35, 35, - 35, 39, 28, 28, 28, 29, 34, 44, 35, 36, - 37, 40, 46, 45, 65, 49, 47, 35, 35, 50, - 52, 35, 35, 35, 54, 28, 58, 35, 55, 64, - 254, 59, 31, 31, 32, 35, 75, 66, 35, 33, - - 28, 28, 28, 29, 68, 35, 48, 28, 37, 60, - 60, 60, 61, 60, 35, 67, 60, 62, 35, 35, - 35, 35, 72, 71, 73, 69, 35, 35, 35, 35, - 35, 35, 253, 80, 76, 70, 28, 58, 35, 35, - 28, 82, 59, 85, 77, 78, 83, 79, 87, 74, - 76, 86, 35, 35, 35, 35, 35, 35, 35, 90, - 94, 95, 35, 35, 35, 97, 88, 35, 91, 92, - 35, 99, 100, 89, 35, 35, 93, 101, 98, 35, - 35, 102, 28, 82, 35, 35, 96, 35, 83, 109, - 112, 35, 35, 35, 76, 97, 110, 35, 104, 35, - - 103, 105, 105, 60, 106, 105, 139, 115, 105, 108, - 111, 114, 117, 117, 60, 118, 117, 35, 35, 117, - 120, 121, 121, 60, 122, 121, 130, 251, 121, 124, - 35, 100, 125, 35, 126, 126, 60, 127, 126, 35, - 35, 126, 129, 131, 132, 35, 28, 135, 133, 28, - 137, 140, 136, 35, 147, 138, 35, 35, 148, 146, - 35, 29, 170, 35, 35, 178, 35, 249, 141, 142, - 142, 60, 143, 142, 28, 151, 142, 145, 219, 35, - 152, 28, 153, 160, 149, 28, 156, 154, 28, 158, - 35, 157, 28, 162, 159, 28, 164, 166, 163, 28, - - 135, 165, 244, 35, 35, 136, 171, 29, 172, 167, - 28, 174, 28, 176, 187, 212, 175, 35, 177, 179, - 179, 60, 180, 179, 188, 35, 179, 182, 183, 183, - 60, 184, 183, 28, 151, 183, 186, 28, 156, 152, - 28, 162, 35, 157, 190, 35, 163, 35, 196, 35, - 28, 174, 189, 28, 200, 35, 175, 28, 202, 201, - 29, 28, 205, 203, 28, 207, 195, 206, 219, 209, - 208, 63, 214, 28, 200, 234, 220, 221, 217, 201, - 28, 205, 35, 29, 235, 234, 206, 224, 227, 227, - 60, 228, 227, 219, 35, 227, 230, 232, 242, 236, - - 28, 207, 28, 238, 28, 240, 208, 219, 239, 219, - 241, 28, 238, 245, 35, 219, 243, 239, 219, 211, - 198, 234, 194, 231, 226, 247, 223, 246, 216, 169, - 211, 198, 194, 250, 26, 26, 26, 26, 28, 28, - 28, 30, 30, 30, 30, 35, 35, 35, 35, 56, - 192, 56, 56, 57, 57, 57, 57, 59, 169, 59, - 59, 34, 34, 34, 34, 63, 63, 116, 63, 81, - 81, 81, 81, 83, 113, 83, 83, 107, 107, 107, - 107, 119, 119, 119, 119, 123, 123, 123, 123, 128, - 128, 128, 128, 134, 134, 134, 134, 136, 84, 136, - - 136, 144, 144, 144, 144, 150, 150, 150, 150, 152, - 35, 152, 152, 155, 155, 155, 155, 157, 29, 157, - 157, 161, 161, 161, 161, 163, 53, 163, 163, 168, - 168, 168, 168, 138, 51, 138, 138, 173, 173, 173, - 173, 175, 35, 175, 175, 181, 181, 181, 181, 185, - 185, 185, 185, 154, 29, 154, 154, 159, 255, 159, - 159, 165, 27, 165, 165, 191, 191, 191, 191, 193, - 193, 193, 193, 177, 27, 177, 177, 197, 197, 197, - 197, 199, 199, 199, 199, 201, 255, 201, 201, 204, - 204, 204, 204, 206, 255, 206, 206, 210, 210, 210, - - 210, 213, 213, 213, 213, 215, 215, 215, 215, 218, - 218, 218, 218, 222, 222, 222, 222, 203, 255, 203, - 203, 208, 255, 208, 208, 225, 225, 225, 225, 229, - 229, 229, 229, 214, 255, 214, 214, 233, 233, 233, - 233, 237, 237, 237, 237, 239, 255, 239, 239, 241, - 255, 241, 241, 248, 248, 248, 248, 252, 252, 252, - 252, 5, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255 - + 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, + 59, 48, 31, 31, 32, 60, 35, 71, 67, 33, + + 28, 28, 28, 29, 35, 35, 35, 28, 37, 61, + 61, 61, 62, 61, 35, 70, 61, 63, 66, 35, + 49, 35, 35, 72, 74, 35, 69, 35, 75, 35, + 35, 35, 35, 88, 35, 35, 82, 78, 35, 28, + 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, + 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, + 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, + 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, + 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, + 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 } ; -static yyconst flex_int16_t yy_chk[696] = +static yyconst flex_int16_t yy_chk[690] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 7, 7, 7, 8, 8, 8, 13, - 7, 15, 13, 8, 11, 11, 11, 11, 11, 14, - 252, 11, 11, 14, 15, 11, 19, 19, 18, 16, - 39, 11, 12, 12, 12, 12, 12, 16, 20, 12, - 12, 12, 18, 16, 39, 20, 18, 21, 23, 21, - 23, 25, 50, 42, 25, 30, 30, 38, 25, 38, - 250, 30, 31, 31, 31, 40, 50, 40, 41, 31, - - 34, 34, 34, 34, 42, 43, 43, 34, 34, 36, - 36, 36, 36, 36, 44, 41, 36, 36, 45, 46, - 47, 48, 47, 46, 48, 44, 49, 52, 51, 54, - 53, 55, 248, 54, 55, 45, 57, 57, 66, 64, - 60, 60, 57, 64, 52, 53, 60, 53, 66, 49, - 51, 65, 67, 65, 68, 69, 70, 71, 72, 69, - 73, 74, 73, 74, 75, 76, 67, 76, 70, 71, - 77, 78, 78, 68, 78, 79, 72, 78, 77, 80, - 85, 79, 81, 81, 88, 87, 75, 89, 81, 87, - 90, 92, 90, 109, 96, 96, 88, 96, 85, 93, - - 80, 86, 86, 86, 86, 86, 109, 93, 86, 86, - 89, 92, 95, 95, 95, 95, 95, 98, 101, 95, - 95, 97, 97, 97, 97, 97, 101, 247, 97, 97, - 104, 99, 98, 99, 100, 100, 100, 100, 100, 102, - 113, 100, 100, 102, 103, 103, 105, 105, 104, 107, - 107, 110, 105, 111, 114, 107, 114, 110, 115, 113, - 115, 116, 133, 133, 125, 146, 146, 245, 111, 112, - 112, 112, 112, 112, 117, 117, 112, 112, 236, 130, - 117, 119, 119, 125, 116, 121, 121, 119, 123, 123, - 131, 121, 126, 126, 123, 128, 128, 130, 126, 134, - - 134, 128, 236, 139, 141, 134, 139, 149, 141, 131, - 142, 142, 144, 144, 149, 189, 142, 189, 144, 147, - 147, 147, 147, 147, 160, 160, 147, 147, 148, 148, - 148, 148, 148, 150, 150, 148, 148, 155, 155, 150, - 161, 161, 166, 155, 167, 167, 161, 171, 172, 172, - 173, 173, 166, 179, 179, 195, 173, 181, 181, 179, - 187, 183, 183, 181, 185, 185, 171, 183, 196, 187, - 185, 190, 190, 199, 199, 220, 196, 196, 195, 199, - 204, 204, 217, 209, 220, 221, 204, 209, 212, 212, - 212, 212, 212, 235, 232, 212, 212, 217, 232, 221, - - 224, 224, 227, 227, 229, 229, 224, 243, 227, 244, - 229, 237, 237, 242, 242, 246, 235, 237, 233, 225, - 222, 218, 215, 213, 210, 244, 197, 243, 193, 191, - 188, 178, 170, 246, 256, 256, 256, 256, 257, 257, - 257, 258, 258, 258, 258, 259, 259, 259, 259, 260, - 168, 260, 260, 261, 261, 261, 261, 262, 132, 262, - 262, 263, 263, 263, 263, 264, 264, 94, 264, 265, - 265, 265, 265, 266, 91, 266, 266, 267, 267, 267, - 267, 268, 268, 268, 268, 269, 269, 269, 269, 270, - 270, 270, 270, 271, 271, 271, 271, 272, 63, 272, - - 272, 273, 273, 273, 273, 274, 274, 274, 274, 275, - 35, 275, 275, 276, 276, 276, 276, 277, 28, 277, - 277, 278, 278, 278, 278, 279, 24, 279, 279, 280, - 280, 280, 280, 281, 22, 281, 281, 282, 282, 282, - 282, 283, 17, 283, 283, 284, 284, 284, 284, 285, - 285, 285, 285, 286, 6, 286, 286, 287, 5, 287, - 287, 288, 4, 288, 288, 289, 289, 289, 289, 290, - 290, 290, 290, 291, 3, 291, 291, 292, 292, 292, - 292, 293, 293, 293, 293, 294, 0, 294, 294, 295, - 295, 295, 295, 296, 0, 296, 296, 297, 297, 297, - - 297, 298, 298, 298, 298, 299, 299, 299, 299, 300, - 300, 300, 300, 301, 301, 301, 301, 302, 0, 302, - 302, 303, 0, 303, 303, 304, 304, 304, 304, 305, - 305, 305, 305, 306, 0, 306, 306, 307, 307, 307, - 307, 308, 308, 308, 308, 309, 0, 309, 309, 310, - 0, 310, 310, 311, 311, 311, 311, 312, 312, 312, - 312, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, - 255, 255, 255, 255, 255 - + 7, 41, 13, 8, 11, 11, 11, 11, 11, 47, + 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, + 30, 18, 31, 31, 31, 30, 40, 45, 40, 31, + + 34, 34, 34, 34, 39, 42, 46, 34, 34, 36, + 36, 36, 36, 36, 43, 43, 36, 36, 39, 44, + 44, 50, 48, 46, 48, 49, 42, 51, 49, 52, + 53, 54, 55, 66, 56, 66, 55, 56, 65, 58, + 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, + 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, + 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, + 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, + 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, + 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 } ; #define YY_TRAILING_MASK 0x2000 @@ -776,7 +773,8 @@ goto find_rule; \ * syntax; if the target string has to contain "," or ":" the new * syntax's "target=" should be used. */ -#line 31 "libxlu_disk_l.l" + +#line 35 "libxlu_disk_l.l" #include "libxlu_disk_i.h" #define YY_NO_INPUT @@ -885,7 +883,7 @@ static int vdev_and_devtype(DiskParseContext *dpc, char *str) { #define DPC ((DiskParseContext*)yyextra) -#line 889 "libxlu_disk_l.c" +#line 887 "libxlu_disk_l.c" #define INITIAL 0 #define LEXERR 1 @@ -1121,12 +1119,12 @@ YY_DECL register int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; -#line 151 "libxlu_disk_l.l" +#line 155 "libxlu_disk_l.l" /*----- the scanner rules which do the parsing -----*/ -#line 1130 "libxlu_disk_l.c" +#line 1128 "libxlu_disk_l.c" if ( !yyg->yy_init ) { @@ -1190,14 +1188,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 >= 256 ) + if ( yy_current_state >= 251 ) 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 != 255 ); + while ( yy_current_state != 250 ); yy_find_action: yy_current_state = *--yyg->yy_state_ptr; @@ -1247,72 +1245,72 @@ do_action: /* This label is used only to access EOF actions. */ case 1: /* rule 1 can match eol */ YY_RULE_SETUP -#line 155 "libxlu_disk_l.l" +#line 159 "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 159 "libxlu_disk_l.l" +#line 163 "libxlu_disk_l.l" { STRIP(','); setformat(DPC, FROMEQUALS); } YY_BREAK case 3: YY_RULE_SETUP -#line 161 "libxlu_disk_l.l" +#line 165 "libxlu_disk_l.l" { DPC->disk->is_cdrom = 1; } YY_BREAK case 4: YY_RULE_SETUP -#line 162 "libxlu_disk_l.l" +#line 166 "libxlu_disk_l.l" { DPC->disk->is_cdrom = 1; } YY_BREAK case 5: YY_RULE_SETUP -#line 163 "libxlu_disk_l.l" +#line 167 "libxlu_disk_l.l" { DPC->disk->is_cdrom = 0; } YY_BREAK case 6: /* rule 6 can match eol */ YY_RULE_SETUP -#line 164 "libxlu_disk_l.l" +#line 168 "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 166 "libxlu_disk_l.l" +#line 170 "libxlu_disk_l.l" { STRIP(','); setaccess(DPC, FROMEQUALS); } YY_BREAK case 8: /* rule 8 can match eol */ YY_RULE_SETUP -#line 167 "libxlu_disk_l.l" +#line 171 "libxlu_disk_l.l" { STRIP(','); setbackendtype(DPC,FROMEQUALS); } YY_BREAK case 9: /* rule 9 can match eol */ YY_RULE_SETUP -#line 169 "libxlu_disk_l.l" +#line 173 "libxlu_disk_l.l" { STRIP(','); SAVESTRING("vdev", vdev, FROMEQUALS); } YY_BREAK case 10: /* rule 10 can match eol */ YY_RULE_SETUP -#line 170 "libxlu_disk_l.l" +#line 174 "libxlu_disk_l.l" { STRIP(','); SAVESTRING("script", script, FROMEQUALS); } YY_BREAK /* the target magic parameter, eats the rest of the string */ case 11: YY_RULE_SETUP -#line 174 "libxlu_disk_l.l" +#line 178 "libxlu_disk_l.l" { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); } YY_BREAK /* unknown parameters */ case 12: /* rule 12 can match eol */ YY_RULE_SETUP -#line 178 "libxlu_disk_l.l" +#line 182 "libxlu_disk_l.l" { xlu__disk_err(DPC,yytext,"unknown parameter"); } YY_BREAK /* deprecated prefixes */ @@ -1320,7 +1318,7 @@ YY_RULE_SETUP * matched the whole string, so these patterns take precedence */ case 13: YY_RULE_SETUP -#line 185 "libxlu_disk_l.l" +#line 189 "libxlu_disk_l.l" { STRIP(':'); DPC->had_depr_prefix=1; DEPRECATE("use `[format=]...,'"); @@ -1329,24 +1327,31 @@ YY_RULE_SETUP YY_BREAK case 14: YY_RULE_SETUP -#line 191 "libxlu_disk_l.l" +#line 195 "libxlu_disk_l.l" { - STRIP(':'); + char *newscript; + STRIP(':'); DPC->had_depr_prefix=1; DEPRECATE("use `script=...'"); - SAVESTRING("script", script, yytext); - } + if (asprintf(&newscript, "block-%s", yytext) < 0) { + xlu__disk_err(DPC,yytext,"unable to format script"); + return 0; + } + savestring(DPC, "script respecified", + &DPC->disk->script, newscript); + free(newscript); + } YY_BREAK case 15: *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 197 "libxlu_disk_l.l" +#line 208 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 16: YY_RULE_SETUP -#line 198 "libxlu_disk_l.l" +#line 209 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 17: @@ -1354,7 +1359,7 @@ case 17: yyg->yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 199 "libxlu_disk_l.l" +#line 210 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 18: @@ -1362,7 +1367,7 @@ case 18: yyg->yy_c_buf_p = yy_cp = yy_bp + 6; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 200 "libxlu_disk_l.l" +#line 211 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 19: @@ -1370,7 +1375,7 @@ case 19: yyg->yy_c_buf_p = yy_cp = yy_bp + 5; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 201 "libxlu_disk_l.l" +#line 212 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 20: @@ -1378,13 +1383,13 @@ case 20: yyg->yy_c_buf_p = yy_cp = yy_bp + 4; YY_DO_BEFORE_ACTION; /* set up yytext again */ YY_RULE_SETUP -#line 202 "libxlu_disk_l.l" +#line 213 "libxlu_disk_l.l" { DPC->had_depr_prefix=1; DEPRECATE(0); } YY_BREAK case 21: /* rule 21 can match eol */ YY_RULE_SETUP -#line 204 "libxlu_disk_l.l" +#line 215 "libxlu_disk_l.l" { xlu__disk_err(DPC,yytext,"unknown deprecated disk prefix"); return 0; @@ -1394,7 +1399,7 @@ YY_RULE_SETUP case 22: /* rule 22 can match eol */ YY_RULE_SETUP -#line 211 "libxlu_disk_l.l" +#line 222 "libxlu_disk_l.l" { STRIP(','); @@ -1423,7 +1428,7 @@ YY_RULE_SETUP YY_BREAK case 23: YY_RULE_SETUP -#line 237 "libxlu_disk_l.l" +#line 248 "libxlu_disk_l.l" { BEGIN(LEXERR); yymore(); @@ -1431,17 +1436,17 @@ YY_RULE_SETUP YY_BREAK case 24: YY_RULE_SETUP -#line 241 "libxlu_disk_l.l" +#line 252 "libxlu_disk_l.l" { xlu__disk_err(DPC,yytext,"bad disk syntax"); return 0; } YY_BREAK case 25: YY_RULE_SETUP -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" YY_FATAL_ERROR( "flex scanner jammed" ); YY_BREAK -#line 1445 "libxlu_disk_l.c" +#line 1450 "libxlu_disk_l.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(LEXERR): yyterminate(); @@ -1705,7 +1710,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 >= 256 ) + if ( yy_current_state >= 251 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1729,11 +1734,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 >= 256 ) + if ( yy_current_state >= 251 ) 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 == 255); + yy_is_jam = (yy_current_state == 250); if ( ! yy_is_jam ) *yyg->yy_state_ptr++ = yy_current_state; @@ -2533,4 +2538,4 @@ void xlu__disk_yyfree (void * ptr , yyscan_t yyscanner) #define YYTABLES_NAME "yytables" -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" diff --git a/tools/libxl/libxlu_disk_l.h b/tools/libxl/libxlu_disk_l.h index 26c9a860d4..de039081b0 100644 --- a/tools/libxl/libxlu_disk_l.h +++ b/tools/libxl/libxlu_disk_l.h @@ -3,8 +3,12 @@ #define xlu__disk_yyIN_HEADER 1 #line 6 "libxlu_disk_l.h" +#line 31 "libxlu_disk_l.l" +#include "libxl_osdeps.h" /* must come before any other headers */ -#line 8 "libxlu_disk_l.h" + + +#line 12 "libxlu_disk_l.h" #define YY_INT_ALIGNED short int @@ -340,8 +344,8 @@ extern int xlu__disk_yylex (yyscan_t yyscanner); #undef YY_DECL #endif -#line 244 "libxlu_disk_l.l" +#line 255 "libxlu_disk_l.l" -#line 346 "libxlu_disk_l.h" +#line 350 "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 f4e6b1abf3..bee16a10d0 100644 --- a/tools/libxl/libxlu_disk_l.l +++ b/tools/libxl/libxlu_disk_l.l @@ -27,6 +27,10 @@ * syntax's "target=" should be used. */ +%top{ +#include "libxl_osdeps.h" /* must come before any other headers */ +} + %{ #include "libxlu_disk_i.h" @@ -188,11 +192,18 @@ target=.* { STRIP(','); SAVESTRING("target", pdev_path, FROMEQUALS); } setformat(DPC, yytext); } -iscsi:|e?nbd:drbd:/.* { - STRIP(':'); +(iscsi|e?nbd|drbd):/.* { + char *newscript; + STRIP(':'); DPC->had_depr_prefix=1; DEPRECATE("use `script=...'"); - SAVESTRING("script", script, yytext); - } + if (asprintf(&newscript, "block-%s", yytext) < 0) { + xlu__disk_err(DPC,yytext,"unable to format script"); + return 0; + } + savestring(DPC, "script respecified", + &DPC->disk->script, newscript); + free(newscript); + } tapdisk:/.* { DPC->had_depr_prefix=1; DEPRECATE(0); } tap2?:/.* { DPC->had_depr_prefix=1; DEPRECATE(0); } |