mirror of
https://github.com/libvirt/libvirt.git
synced 2025-02-25 18:55:26 -06: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);
|
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 {
|
typedef enum {
|
||||||
QEMU_MONITOR_JOB_TYPE_UNKNOWN, /* internal value, not exposed by qemu */
|
QEMU_MONITOR_JOB_TYPE_UNKNOWN, /* internal value, not exposed by qemu */
|
||||||
QEMU_MONITOR_JOB_TYPE_COMMIT,
|
QEMU_MONITOR_JOB_TYPE_COMMIT,
|
||||||
@ -1488,3 +1530,10 @@ struct _qemuMonitorDirtyRateInfo {
|
|||||||
int
|
int
|
||||||
qemuMonitorQueryDirtyRate(qemuMonitor *mon,
|
qemuMonitorQueryDirtyRate(qemuMonitor *mon,
|
||||||
qemuMonitorDirtyRateInfo *info);
|
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);
|
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
|
int
|
||||||
qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,
|
qemuMonitorJSONQueryDirtyRate(qemuMonitor *mon,
|
||||||
qemuMonitorDirtyRateInfo *info);
|
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(qemuMonitorJSONJobDismiss, "jobname")
|
||||||
GEN_TEST_FUNC(qemuMonitorJSONJobComplete, "jobname")
|
GEN_TEST_FUNC(qemuMonitorJSONJobComplete, "jobname")
|
||||||
GEN_TEST_FUNC(qemuMonitorJSONBlockJobCancel, "jobname", true)
|
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
|
static int
|
||||||
testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
|
testQemuMonitorJSONqemuMonitorJSONNBDServerStart(const void *opaque)
|
||||||
@ -3067,6 +3072,7 @@ mymain(void)
|
|||||||
DO_TEST_GEN(qemuMonitorJSONJobDismiss);
|
DO_TEST_GEN(qemuMonitorJSONJobDismiss);
|
||||||
DO_TEST_GEN(qemuMonitorJSONJobComplete);
|
DO_TEST_GEN(qemuMonitorJSONJobComplete);
|
||||||
DO_TEST_GEN(qemuMonitorJSONBlockJobCancel);
|
DO_TEST_GEN(qemuMonitorJSONBlockJobCancel);
|
||||||
|
DO_TEST_GEN(qemuMonitorJSONSetAction);
|
||||||
DO_TEST(qemuMonitorJSONGetBalloonInfo);
|
DO_TEST(qemuMonitorJSONGetBalloonInfo);
|
||||||
DO_TEST(qemuMonitorJSONGetBlockInfo);
|
DO_TEST(qemuMonitorJSONGetBlockInfo);
|
||||||
DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo);
|
DO_TEST(qemuMonitorJSONGetAllBlockStatsInfo);
|
||||||
|
Loading…
Reference in New Issue
Block a user