const char *src = NULL;
const char *dst = NULL;
const char *mode = NULL;
+ const char *bootable = NULL;
/* Again dealing with (vbd...) vs (tap ...) differences */
if (sexpr_lookup(node, "device/vbd")) {
src = sexpr_node(node, "device/vbd/uname");
dst = sexpr_node(node, "device/vbd/dev");
mode = sexpr_node(node, "device/vbd/mode");
+ bootable = sexpr_node(node, "device/vbd/bootable");
} else if (sexpr_lookup(node, "device/tap2")) {
src = sexpr_node(node, "device/tap2/uname");
dst = sexpr_node(node, "device/tap2/dev");
mode = sexpr_node(node, "device/tap2/mode");
+ bootable = sexpr_node(node, "device/tap2/bootable");
} else {
src = sexpr_node(node, "device/tap/uname");
dst = sexpr_node(node, "device/tap/dev");
mode = sexpr_node(node, "device/tap/mode");
+ bootable = sexpr_node(node, "device/tap/bootable");
}
if (VIR_ALLOC(disk) < 0)
if (VIR_REALLOC_N(def->disks, def->ndisks+1) < 0)
goto no_memory;
- def->disks[def->ndisks++] = disk;
+ /* re-order disks if there is a bootable device */
+ if (STREQ_NULLABLE(bootable, "1")) {
+ def->disks[def->ndisks++] = def->disks[0];
+ def->disks[0] = disk;
+ } else {
+ def->disks[def->ndisks++] = disk;
+ }
disk = NULL;
}
}