#define VIR_FROM_THIS VIR_FROM_QEMU
-static char *qemudEscape(const char *in, int shell)
+#define QEMU_CMD_PROMPT "\n(qemu) "
+#define QEMU_PASSWD_PROMPT "Password: "
+
+/* Return -1 for error, 0 for success */
+typedef int qemuMonitorExtraPromptHandler(const virDomainObjPtr vm,
+ const char *buf,
+ const char *prompt,
+ void *data);
+
+
+static char *qemuMonitorEscape(const char *in, int shell)
{
int len = 0;
int i, j;
return out;
}
-static char *qemudEscapeMonitorArg(const char *in)
+static char *qemuMonitorEscapeArg(const char *in)
{
- return qemudEscape(in, 0);
+ return qemuMonitorEscape(in, 0);
}
-static char *qemudEscapeShellArg(const char *in)
+static char *qemuMonitorEscapeShell(const char *in)
{
- return qemudEscape(in, 1);
+ return qemuMonitorEscape(in, 1);
}
/* Throw away any data available on the monitor
}
static int
-qemudMonitorSendUnix(const virDomainObjPtr vm,
- const char *cmd,
- size_t cmdlen,
- int scm_fd)
+qemuMonitorSendUnix(const virDomainObjPtr vm,
+ const char *cmd,
+ size_t cmdlen,
+ int scm_fd)
{
struct msghdr msg;
struct iovec iov[1];
}
static int
-qemudMonitorSend(const virDomainObjPtr vm,
- const char *cmd,
- int scm_fd)
+qemuMonitorSend(const virDomainObjPtr vm,
+ const char *cmd,
+ int scm_fd)
{
char *full;
size_t len;
switch (vm->monitor_chr->type) {
case VIR_DOMAIN_CHR_TYPE_UNIX:
- if (qemudMonitorSendUnix(vm, full, len, scm_fd) < 0)
+ if (qemuMonitorSendUnix(vm, full, len, scm_fd) < 0)
goto out;
break;
default:
return ret;
}
-int
-qemudMonitorCommandWithHandler(const virDomainObjPtr vm,
- const char *cmd,
- const char *extraPrompt,
- qemudMonitorExtraPromptHandler extraHandler,
- void *handlerData,
- int scm_fd,
- char **reply) {
+static int
+qemuMonitorCommandWithHandler(const virDomainObjPtr vm,
+ const char *cmd,
+ const char *extraPrompt,
+ qemuMonitorExtraPromptHandler extraHandler,
+ void *handlerData,
+ int scm_fd,
+ char **reply) {
int size = 0;
char *buf = NULL;
qemuMonitorDiscardPendingData(vm);
VIR_DEBUG("Send '%s'", cmd);
- if (qemudMonitorSend(vm, cmd, scm_fd) < 0)
+ if (qemuMonitorSend(vm, cmd, scm_fd) < 0)
return -1;
*reply = NULL;
};
static int
-qemudMonitorCommandSimpleExtraHandler(const virDomainObjPtr vm,
- const char *buf ATTRIBUTE_UNUSED,
- const char *prompt ATTRIBUTE_UNUSED,
- void *data_)
+qemuMonitorCommandSimpleExtraHandler(const virDomainObjPtr vm,
+ const char *buf ATTRIBUTE_UNUSED,
+ const char *prompt ATTRIBUTE_UNUSED,
+ void *data_)
{
struct extraHandlerData *data = data_;
if (!data->first)
return 0;
- if (qemudMonitorSend(vm, data->reply, -1) < 0)
+ if (qemuMonitorSend(vm, data->reply, -1) < 0)
return -1;
data->first = false;
return 0;
}
-int
-qemudMonitorCommandExtra(const virDomainObjPtr vm,
+static int
+qemuMonitorCommandExtra(const virDomainObjPtr vm,
const char *cmd,
const char *extra,
const char *extraPrompt,
data.reply = extra;
data.first = true;
- return qemudMonitorCommandWithHandler(vm, cmd, extraPrompt,
- qemudMonitorCommandSimpleExtraHandler,
- &data, scm_fd, reply);
+ return qemuMonitorCommandWithHandler(vm, cmd, extraPrompt,
+ qemuMonitorCommandSimpleExtraHandler,
+ &data, scm_fd, reply);
}
-int
-qemudMonitorCommandWithFd(const virDomainObjPtr vm,
+static int
+qemuMonitorCommandWithFd(const virDomainObjPtr vm,
const char *cmd,
int scm_fd,
char **reply) {
- return qemudMonitorCommandExtra(vm, cmd, NULL, NULL, scm_fd, reply);
+ return qemuMonitorCommandExtra(vm, cmd, NULL, NULL, scm_fd, reply);
}
-int
-qemudMonitorCommand(const virDomainObjPtr vm,
+static int
+qemuMonitorCommand(const virDomainObjPtr vm,
const char *cmd,
char **reply) {
- return qemudMonitorCommandWithFd(vm, cmd, -1, reply);
+ return qemuMonitorCommandWithFd(vm, cmd, -1, reply);
}
}
static int
-qemudMonitorSendVolumePassphrase(const virDomainObjPtr vm,
- const char *buf,
- const char *prompt,
- void *data)
+qemuMonitorSendVolumePassphrase(const virDomainObjPtr vm,
+ const char *buf,
+ const char *prompt,
+ void *data)
{
virConnectPtr conn = data;
char *passphrase, *path;
if (passphrase == NULL)
return -1;
- res = qemudMonitorSend(vm, passphrase, -1);
+ res = qemuMonitorSend(vm, passphrase, -1);
memset(passphrase, 0, passphrase_len);
VIR_FREE(passphrase);
const virDomainObjPtr vm) {
char *reply;
- if (qemudMonitorCommandWithHandler(vm, "cont", ") is encrypted.",
- qemudMonitorSendVolumePassphrase, conn,
- -1, &reply) < 0)
+ if (qemuMonitorCommandWithHandler(vm, "cont", ") is encrypted.",
+ qemuMonitorSendVolumePassphrase, conn,
+ -1, &reply) < 0)
return -1;
qemudDebug ("%s: cont reply: %s", vm->def->name, info);
VIR_FREE(reply);
qemuMonitorStopCPUs(const virDomainObjPtr vm) {
char *info;
- if (qemudMonitorCommand(vm, "stop", &info) < 0) {
+ if (qemuMonitorCommand(vm, "stop", &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("cannot stop CPU execution"));
return -1;
int qemuMonitorSystemPowerdown(const virDomainObjPtr vm) {
char *info;
- if (qemudMonitorCommand(vm, "system_powerdown", &info) < 0) {
+ if (qemuMonitorCommand(vm, "system_powerdown", &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("system shutdown operation failed"));
return -1;
pid_t *cpupids = NULL;
size_t ncpupids = 0;
- if (qemudMonitorCommand(vm, "info cpus", &qemucpus) < 0) {
+ if (qemuMonitorCommand(vm, "info cpus", &qemucpus) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("cannot run monitor command to fetch CPU thread info"));
return -1;
int ret = -1;
char *offset;
- if (qemudMonitorCommand(vm, "info balloon", &reply) < 0) {
+ if (qemuMonitorCommand(vm, "info balloon", &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("could not query memory balloon allocation"));
return -1;
const char *p, *eol;
int devnamelen = strlen(devname);
- if (qemudMonitorCommand (vm, "info blockstats", &info) < 0) {
+ if (qemuMonitorCommand (vm, "info blockstats", &info) < 0) {
qemudReportError (NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("'info blockstats' command failed"));
goto cleanup;
const char *password)
{
char *info = NULL;
- if (qemudMonitorCommandExtra(vm, "change vnc password",
- password,
- QEMU_PASSWD_PROMPT,
- -1, &info) < 0) {
+ if (qemuMonitorCommandExtra(vm, "change vnc password",
+ password,
+ QEMU_PASSWD_PROMPT,
+ -1, &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("setting VNC password failed"));
return -1;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("could not balloon memory allocation"));
VIR_FREE(cmd);
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("could not eject media on %s"), devname);
goto cleanup;
char *safepath = NULL;
int ret = -1;
- if (!(safepath = qemudEscapeMonitorArg(newmedia))) {
+ if (!(safepath = qemuMonitorEscapeArg(newmedia))) {
virReportOOMError(NULL);
goto cleanup;
}
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("could not eject media on %s"), devname);
goto cleanup;
char *safepath = NULL;
int ret = -1;
- if (!(safepath = qemudEscapeMonitorArg(path))) {
+ if (!(safepath = qemuMonitorEscapeArg(path))) {
virReportOOMError(NULL);
goto cleanup;
}
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("could save memory region to '%s'"), path);
goto cleanup;
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &info) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("could restrict migration speed"));
goto cleanup;
*remaining = 0;
*total = 0;
- if (qemudMonitorCommand(vm, "info migration", &reply) < 0) {
+ if (qemuMonitorCommand(vm, "info migration", &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("cannot query migration status"));
return -1;
char *cmd = NULL;
char *info = NULL;
int ret = -1;
- char *safedest = qemudEscapeMonitorArg(dest);
+ char *safedest = qemuMonitorEscapeArg(dest);
if (!safedest) {
virReportOOMError(NULL);
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &info) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
_("unable to start migration to %s"), dest);
goto cleanup;
}
/* Migrate to file */
- safe_target = qemudEscapeShellArg(target);
+ safe_target = qemuMonitorEscapeShell(target);
if (!safe_target) {
virReportOOMError(NULL);
goto cleanup;
int ret = -1;
char *info = NULL;
- safepath = qemudEscapeMonitorArg(path);
+ safepath = qemuMonitorEscapeArg(path);
if (!safepath) {
virReportOOMError(NULL);
return -1;
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &info) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &info) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
"%s", _("cannot run monitor command to add usb disk"));
goto cleanup;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("cannot attach usb device"));
goto cleanup;
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("cannot attach host pci device"));
goto cleanup;
int tryOldSyntax = 0;
int ret = -1;
- safe_path = qemudEscapeMonitorArg(path);
+ safe_path = qemuMonitorEscapeArg(path);
if (!safe_path) {
virReportOOMError(NULL);
return -1;
goto cleanup;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("cannot attach %s disk %s"), bus, path);
goto cleanup;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to add NIC with '%s'"), cmd);
goto cleanup;
}
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
"%s", _("failed to remove PCI device"));
goto cleanup;
return -1;
}
- if (qemudMonitorCommandWithFd(vm, cmd, fd, &reply) < 0) {
+ if (qemuMonitorCommandWithFd(vm, cmd, fd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to pass fd to qemu with '%s'"), cmd);
goto cleanup;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to close fd in qemu with '%s'"), cmd);
goto cleanup;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to close fd in qemu with '%s'"), cmd);
goto cleanup;
return -1;
}
- if (qemudMonitorCommand(vm, cmd, &reply) < 0) {
+ if (qemuMonitorCommand(vm, cmd, &reply) < 0) {
qemudReportError(NULL, NULL, NULL, VIR_ERR_OPERATION_FAILED,
_("failed to remove host metnwork in qemu with '%s'"), cmd);
goto cleanup;