mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-24 22:55:23 +00:00
dd725c53e9
When we shutdown/reboot a guest using agent-mode, if the guest itself blocks infinitely, libvirt would block in qemuAgentShutdown() forever. Thus, we set a timeout for shutdown/reboot, from our experience, 60 seconds would be fine. Signed-off-by: Zhang Bo <oscar.zhangbo@huawei.com> Signed-off-by: Wang Yufei <james.wangyufei@huawei.com>
107 lines
4.0 KiB
C
107 lines
4.0 KiB
C
/* -*- c -*-
|
|
* libvirt-qemu.h: Interfaces specific for QEMU/KVM driver
|
|
* Summary: qemu specific interfaces
|
|
* Description: Provides the interfaces of the libvirt library to handle
|
|
* qemu specific methods
|
|
*
|
|
* Copyright (C) 2010-2014 Red Hat, Inc.
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library. If not, see
|
|
* <http://www.gnu.org/licenses/>.
|
|
*
|
|
* Author: Chris Lalancette <clalance@redhat.com>
|
|
*/
|
|
|
|
#ifndef __VIR_QEMU_H__
|
|
# define __VIR_QEMU_H__
|
|
|
|
# include <libvirt/libvirt.h>
|
|
|
|
# ifdef __cplusplus
|
|
extern "C" {
|
|
# endif
|
|
|
|
typedef enum {
|
|
VIR_DOMAIN_QEMU_MONITOR_COMMAND_DEFAULT = 0,
|
|
VIR_DOMAIN_QEMU_MONITOR_COMMAND_HMP = (1 << 0), /* cmd is in HMP */
|
|
} virDomainQemuMonitorCommandFlags;
|
|
|
|
int virDomainQemuMonitorCommand(virDomainPtr domain, const char *cmd,
|
|
char **result, unsigned int flags);
|
|
|
|
virDomainPtr virDomainQemuAttach(virConnectPtr domain,
|
|
unsigned int pid_value,
|
|
unsigned int flags);
|
|
|
|
typedef enum {
|
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_MIN = -2,
|
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_BLOCK = -2,
|
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_DEFAULT = -1,
|
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT = 0,
|
|
VIR_DOMAIN_QEMU_AGENT_COMMAND_SHUTDOWN = 60,
|
|
} virDomainQemuAgentCommandTimeoutValues;
|
|
|
|
char *virDomainQemuAgentCommand(virDomainPtr domain, const char *cmd,
|
|
int timeout, unsigned int flags);
|
|
|
|
/**
|
|
* virConnectDomainQemuMonitorEventCallback:
|
|
* @conn: the connection pointer
|
|
* @dom: the domain pointer
|
|
* @event: the name of the event
|
|
* @seconds: the qemu timestamp of the event: seconds since Epoch, or -1 if
|
|
* not available
|
|
* @micros: the qemu timestamp of the event: microseconds within the second
|
|
* @details: the JSON details of the event, if any were given
|
|
* @opaque: application specified data
|
|
*
|
|
* The callback signature to use when registering for a qemu monitor
|
|
* event with virConnectDomainQemuMonitorEventRegister().
|
|
*/
|
|
typedef void (*virConnectDomainQemuMonitorEventCallback)(virConnectPtr conn,
|
|
virDomainPtr dom,
|
|
const char *event,
|
|
long long seconds,
|
|
unsigned int micros,
|
|
const char *details,
|
|
void *opaque);
|
|
|
|
|
|
typedef enum {
|
|
/* Event filter is a regex rather than a literal string */
|
|
VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_REGEX = (1 << 0),
|
|
|
|
/* Event filter is case insensitive */
|
|
VIR_CONNECT_DOMAIN_QEMU_MONITOR_EVENT_REGISTER_NOCASE = (1 << 1),
|
|
} virConnectDomainQemuMonitorEventRegisterFlags;
|
|
|
|
|
|
int virConnectDomainQemuMonitorEventRegister(virConnectPtr conn,
|
|
virDomainPtr dom,
|
|
const char *event,
|
|
virConnectDomainQemuMonitorEventCallback cb,
|
|
void *opaque,
|
|
virFreeCallback freecb,
|
|
unsigned int flags);
|
|
|
|
int virConnectDomainQemuMonitorEventDeregister(virConnectPtr conn,
|
|
int callbackID);
|
|
|
|
|
|
# ifdef __cplusplus
|
|
}
|
|
# endif
|
|
|
|
#endif /* __VIR_QEMU_H__ */
|