mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-03 17:47:15 +03:00
qemu: monitor: Implement monitor code for 'set-action' command
Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
feb0a0c7f5
commit
32c5d30f4d
@ -4609,3 +4609,19 @@ qemuMonitorQueryDirtyRate(qemuMonitor *mon,
|
||||
|
||||
return qemuMonitorJSONQueryDirtyRate(mon, info);
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
qemuMonitorSetAction(qemuMonitor *mon,
|
||||
qemuMonitorActionShutdown shutdown,
|
||||
qemuMonitorActionReboot reboot,
|
||||
qemuMonitorActionWatchdog watchdog,
|
||||
qemuMonitorActionPanic panic)
|
||||
{
|
||||
VIR_DEBUG("shutdown=%u, reboot=%u, watchdog=%u panic=%u",
|
||||
shutdown, reboot, watchdog, panic);
|
||||
|
||||
QEMU_CHECK_MONITOR(mon);
|
||||
|
||||
return qemuMonitorJSONSetAction(mon, shutdown, reboot, watchdog, panic);
|
||||
}
|
||||
|
@ -101,6 +101,48 @@ struct _qemuMonitorRdmaGidStatus {
|
||||
};
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_KEEP, /* do not change the current setting */
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_POWEROFF,
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_PAUSE,
|
||||
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_LAST
|
||||
} qemuMonitorActionShutdown;
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_MONITOR_ACTION_REBOOT_KEEP, /* do not change the current setting */
|
||||
QEMU_MONITOR_ACTION_REBOOT_RESET,
|
||||
QEMU_MONITOR_ACTION_REBOOT_SHUTDOWN,
|
||||
|
||||
QEMU_MONITOR_ACTION_REBOOT_LAST
|
||||
} qemuMonitorActionReboot;
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_KEEP, /* do not change the current setting */
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_RESET,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_SHUTDOWN,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_POWEROFF,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_PAUSE,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_DEBUG,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_NONE,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_INJECT_NMI,
|
||||
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_LAST
|
||||
} qemuMonitorActionWatchdog;
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_MONITOR_ACTION_PANIC_KEEP, /* do not change the current setting */
|
||||
QEMU_MONITOR_ACTION_PANIC_PAUSE,
|
||||
QEMU_MONITOR_ACTION_PANIC_SHUTDOWN,
|
||||
QEMU_MONITOR_ACTION_PANIC_NONE,
|
||||
|
||||
QEMU_MONITOR_ACTION_PANIC_LAST
|
||||
} qemuMonitorActionPanic;
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_MONITOR_JOB_TYPE_UNKNOWN, /* internal value, not exposed by qemu */
|
||||
QEMU_MONITOR_JOB_TYPE_COMMIT,
|
||||
@ -1488,3 +1530,10 @@ struct _qemuMonitorDirtyRateInfo {
|
||||
int
|
||||
qemuMonitorQueryDirtyRate(qemuMonitor *mon,
|
||||
qemuMonitorDirtyRateInfo *info);
|
||||
|
||||
int
|
||||
qemuMonitorSetAction(qemuMonitor *mon,
|
||||
qemuMonitorActionShutdown shutdown,
|
||||
qemuMonitorActionReboot reboot,
|
||||
qemuMonitorActionWatchdog watchdog,
|
||||
qemuMonitorActionPanic panic);
|
||||
|
@ -9325,3 +9325,82 @@ qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,
|
||||
|
||||
return qemuMonitorJSONExtractDirtyRateInfo(data, info);
|
||||
}
|
||||
|
||||
|
||||
VIR_ENUM_DECL(qemuMonitorActionShutdown);
|
||||
VIR_ENUM_IMPL(qemuMonitorActionShutdown,
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_LAST,
|
||||
"",
|
||||
"poweroff",
|
||||
"pause");
|
||||
|
||||
VIR_ENUM_DECL(qemuMonitorActionReboot);
|
||||
VIR_ENUM_IMPL(qemuMonitorActionReboot,
|
||||
QEMU_MONITOR_ACTION_REBOOT_LAST,
|
||||
"",
|
||||
"reset",
|
||||
"shutdown");
|
||||
|
||||
VIR_ENUM_DECL(qemuMonitorActionWatchdog);
|
||||
VIR_ENUM_IMPL(qemuMonitorActionWatchdog,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_LAST,
|
||||
"",
|
||||
"reset",
|
||||
"shutdown",
|
||||
"poweroff",
|
||||
"pause",
|
||||
"debug",
|
||||
"none",
|
||||
"inject-nmi");
|
||||
|
||||
VIR_ENUM_DECL(qemuMonitorActionPanic);
|
||||
VIR_ENUM_IMPL(qemuMonitorActionPanic,
|
||||
QEMU_MONITOR_ACTION_PANIC_LAST,
|
||||
"",
|
||||
"pause",
|
||||
"shutdown",
|
||||
"none");
|
||||
|
||||
|
||||
int
|
||||
qemuMonitorJSONSetAction(qemuMonitor *mon,
|
||||
qemuMonitorActionShutdown shutdown,
|
||||
qemuMonitorActionReboot reboot,
|
||||
qemuMonitorActionWatchdog watchdog,
|
||||
qemuMonitorActionPanic panic)
|
||||
{
|
||||
g_autoptr(virJSONValue) cmd = NULL;
|
||||
g_autoptr(virJSONValue) reply = NULL;
|
||||
const char *actionShutdown = NULL;
|
||||
const char *actionReboot = NULL;
|
||||
const char *actionWatchdog = NULL;
|
||||
const char *actionPanic = NULL;
|
||||
|
||||
if (shutdown != QEMU_MONITOR_ACTION_SHUTDOWN_KEEP)
|
||||
actionShutdown = qemuMonitorActionShutdownTypeToString(shutdown);
|
||||
|
||||
if (reboot != QEMU_MONITOR_ACTION_REBOOT_KEEP)
|
||||
actionReboot = qemuMonitorActionRebootTypeToString(reboot);
|
||||
|
||||
if (watchdog != QEMU_MONITOR_ACTION_WATCHDOG_KEEP)
|
||||
actionWatchdog = qemuMonitorActionWatchdogTypeToString(watchdog);
|
||||
|
||||
if (panic != QEMU_MONITOR_ACTION_PANIC_KEEP)
|
||||
actionPanic = qemuMonitorActionPanicTypeToString(panic);
|
||||
|
||||
if (!(cmd = qemuMonitorJSONMakeCommand("set-action",
|
||||
"S:shutdown", actionShutdown,
|
||||
"S:reboot", actionReboot,
|
||||
"S:watchdog", actionWatchdog,
|
||||
"S:panic", actionPanic,
|
||||
NULL)))
|
||||
return -1;
|
||||
|
||||
if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0)
|
||||
return -1;
|
||||
|
||||
if (qemuMonitorJSONCheckError(cmd, reply) < 0)
|
||||
return -1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -703,3 +703,10 @@ qemuMonitorJSONStartDirtyRateCalc(qemuMonitor *mon,
|
||||
int
|
||||
qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,
|
||||
qemuMonitorDirtyRateInfo *info);
|
||||
|
||||
int
|
||||
qemuMonitorJSONSetAction(qemuMonitor *mon,
|
||||
qemuMonitorActionShutdown shutdown,
|
||||
qemuMonitorActionReboot reboot,
|
||||
qemuMonitorActionWatchdog watchdog,
|
||||
qemuMonitorActionPanic panic);
|
||||
|
@ -1204,6 +1204,11 @@ GEN_TEST_FUNC(qemuMonitorJSONBitmapRemove, "foodev", "newnode")
|
||||
GEN_TEST_FUNC(qemuMonitorJSONJobDismiss, "jobname")
|
||||
GEN_TEST_FUNC(qemuMonitorJSONJobComplete, "jobname")
|
||||
GEN_TEST_FUNC(qemuMonitorJSONBlockJobCancel, "jobname", true)
|
||||
GEN_TEST_FUNC(qemuMonitorJSONSetAction,
|
||||
QEMU_MONITOR_ACTION_SHUTDOWN_PAUSE,
|
||||
QEMU_MONITOR_ACTION_REBOOT_RESET,
|
||||
QEMU_MONITOR_ACTION_WATCHDOG_SHUTDOWN,
|
||||
QEMU_MONITOR_ACTION_PANIC_SHUTDOWN)
|
||||
|
||||
static int
|
||||
testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
|
||||
@ -3067,6 +3072,7 @@ mymain(void)
|
||||
DO_TEST_GEN(qemuMonitorJSONJobDismiss);
|
||||
DO_TEST_GEN(qemuMonitorJSONJobComplete);
|
||||
DO_TEST_GEN(qemuMonitorJSONBlockJobCancel);
|
||||
DO_TEST_GEN(qemuMonitorJSONSetAction);
|
||||
DO_TEST(qemuMonitorJSONGetBalloonInfo);
|
||||
DO_TEST(qemuMonitorJSONGetBlockInfo);
|
||||
DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo);
|
||||
|
Loading…
x
Reference in New Issue
Block a user