mirror of https://gitee.com/openkylin/libvirt.git
agent: add virDrvDomainQemuAgentCommand prototype for drivers.
Add virDrvDomainQemuAgentCommand prototype for drivers. Add virDomainQemuAgentCommand() for virDrvDomainQemuAgentCommand. Signed-off-by: MATSUDA Daiki <matsudadik@intellilink.co.jp>
This commit is contained in:
parent
ff049d227b
commit
847fc9945e
|
@ -51,6 +51,9 @@ typedef enum {
|
||||||
VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
|
||||||
} virDomainQemuAgentCommandTimeoutValues;
|
} virDomainQemuAgentCommandTimeoutValues;
|
||||||
|
|
||||||
|
char *virDomainQemuAgentCommand(virDomainPtr domain, const char *cmd,
|
||||||
|
int timeout, unsigned int flags);
|
||||||
|
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -431,6 +431,7 @@ skip_impl = (
|
||||||
|
|
||||||
qemu_skip_impl = (
|
qemu_skip_impl = (
|
||||||
'virDomainQemuMonitorCommand',
|
'virDomainQemuMonitorCommand',
|
||||||
|
'virDomainQemuAgentCommand',
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -701,6 +701,9 @@ typedef int
|
||||||
typedef int
|
typedef int
|
||||||
(*virDrvDomainQemuMonitorCommand)(virDomainPtr domain, const char *cmd,
|
(*virDrvDomainQemuMonitorCommand)(virDomainPtr domain, const char *cmd,
|
||||||
char **result, unsigned int flags);
|
char **result, unsigned int flags);
|
||||||
|
typedef char *
|
||||||
|
(*virDrvDomainQemuAgentCommand)(virDomainPtr domain, const char *cmd,
|
||||||
|
int timeout, unsigned int flags);
|
||||||
|
|
||||||
/* Choice of unsigned int rather than pid_t is intentional. */
|
/* Choice of unsigned int rather than pid_t is intentional. */
|
||||||
typedef virDomainPtr
|
typedef virDomainPtr
|
||||||
|
@ -1064,6 +1067,7 @@ struct _virDriver {
|
||||||
virDrvDomainGetDiskErrors domainGetDiskErrors;
|
virDrvDomainGetDiskErrors domainGetDiskErrors;
|
||||||
virDrvDomainSetMetadata domainSetMetadata;
|
virDrvDomainSetMetadata domainSetMetadata;
|
||||||
virDrvDomainGetMetadata domainGetMetadata;
|
virDrvDomainGetMetadata domainGetMetadata;
|
||||||
|
virDrvDomainQemuAgentCommand qemuDomainArbitraryAgentCommand;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef int
|
typedef int
|
||||||
|
|
|
@ -185,3 +185,57 @@ error:
|
||||||
virDispatchError(conn);
|
virDispatchError(conn);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* virDomainQemuAgentCommand:
|
||||||
|
* @domain: a domain object
|
||||||
|
* @cmd: the guest agent command string
|
||||||
|
* @timeout: timeout seconds
|
||||||
|
* @flags: execution flags
|
||||||
|
*
|
||||||
|
* Execute an arbitrary Guest Agent command.
|
||||||
|
*
|
||||||
|
* Issue @cmd to the guest agent running in @domain.
|
||||||
|
* @timeout must be -2, -1, 0 or positive.
|
||||||
|
* VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK(-2): meaning to block forever waiting for
|
||||||
|
* a result.
|
||||||
|
* VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT(-1): use default timeout value.
|
||||||
|
* VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT(0): does not wait.
|
||||||
|
* positive value: wait for @timeout seconds
|
||||||
|
*
|
||||||
|
* Returns strings if success, NULL in failure.
|
||||||
|
*/
|
||||||
|
char *
|
||||||
|
virDomainQemuAgentCommand(virDomainPtr domain,
|
||||||
|
const char *cmd,
|
||||||
|
int timeout,
|
||||||
|
unsigned int flags)
|
||||||
|
{
|
||||||
|
virConnectPtr conn;
|
||||||
|
|
||||||
|
VIR_DEBUG("domain=%p, cmd=%s, timeout=%d, flags=%x",
|
||||||
|
domain, cmd, timeout, flags);
|
||||||
|
|
||||||
|
if (!VIR_IS_CONNECTED_DOMAIN(domain)) {
|
||||||
|
virLibDomainError(NULL, VIR_ERR_INVALID_DOMAIN, __FUNCTION__);
|
||||||
|
virDispatchError(NULL);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (domain->conn->flags & VIR_CONNECT_RO) {
|
||||||
|
virLibDomainError(NULL, VIR_ERR_OPERATION_DENIED, __FUNCTION__);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
conn = domain->conn;
|
||||||
|
|
||||||
|
if (conn->driver->qemuDomainArbitraryAgentCommand) {
|
||||||
|
return conn->driver->qemuDomainArbitraryAgentCommand(domain, cmd,
|
||||||
|
timeout, flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
virLibConnError(conn, VIR_ERR_NO_SUPPORT, __FUNCTION__);
|
||||||
|
|
||||||
|
/* Copy to connection error object for back compatibility */
|
||||||
|
virDispatchError(conn);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
|
@ -19,3 +19,8 @@ LIBVIRT_QEMU_0.9.4 {
|
||||||
global:
|
global:
|
||||||
virDomainQemuAttach;
|
virDomainQemuAttach;
|
||||||
} LIBVIRT_QEMU_0.8.3;
|
} LIBVIRT_QEMU_0.8.3;
|
||||||
|
|
||||||
|
LIBVIRT_QEMU_0.10.1 {
|
||||||
|
global:
|
||||||
|
virDomainQemuAgentCommand;
|
||||||
|
} LIBVIRT_QEMU_0.9.4;
|
||||||
|
|
Loading…
Reference in New Issue