On Wed, Jan 08, 2025 at 19:42:57 +0000, Daniel P. Berrangé wrote: > The daemons are wired up to shutdown in responsible to UNIX process > signals, as well as in response to login1 dbus signals, or loss of > desktop session. The latter two options can optionally preserve state > (ie running VMs). > > In non-systemd environments, as well as for testing, it would be useful > to have a way to trigger shutdown with state preservation more directly. > > Thus a new admin protocol API is introduced > > virAdmConnectDaemonShutdown > > which will trigger a daemon shutdown, and preserve running VMs if the > VIR_DAEMON_SHUTDOWN_PRESERVE flag is set. > > It has a corresponding 'virt-admin daemon-shutdown [--preserve]' command > binding. > > Signed-off-by: Daniel P. Berrangé <berrange@xxxxxxxxxx> > --- > include/libvirt/libvirt-admin.h | 13 +++++++++ > src/admin/admin_protocol.x | 11 +++++++- > src/admin/admin_server_dispatch.c | 13 +++++++++ > src/admin/libvirt-admin.c | 33 +++++++++++++++++++++++ > src/admin/libvirt_admin_public.syms | 5 ++++ > src/rpc/virnetdaemon.c | 4 +++ > tools/virt-admin.c | 41 +++++++++++++++++++++++++++++ > 7 files changed, 119 insertions(+), 1 deletion(-) Test failure after this patch (and also present at the end of the series): ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 LC_CTYPE=en_US.UTF-8 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 LC_ALL='' MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 LANG=C MALLOC_PERTURB_=118 MESON_TEST_ITERATION=1 /bin/python3 /home/pipo/libvirt/scripts/check-remote-protocol.py admin_protocol virt_admin_driver /home/pipo/build/libvirt/gcc/src/admin/libvirt_admin_driver.a /bin/pdwtags /home/pipo/build/libvirt/gcc/../../../libvirt/src/admin_protocol-structs ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― ✀ ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――― --- /home/pipo/build/libvirt/gcc/../../../libvirt/src/admin_protocol-structs 2024-11-15 08:32:02.517209576 +0100 +++ - 2025-01-30 10:34:46.127808492 +0100 @@ -148,6 +148,9 @@ u_int timeout; u_int flags; }; +struct admin_connect_daemon_shutdown_args { + u_int flags; +}; enum admin_procedure { ADMIN_PROC_CONNECT_OPEN = 1, ADMIN_PROC_CONNECT_CLOSE = 2, @@ -168,4 +171,5 @@ ADMIN_PROC_CONNECT_SET_LOGGING_FILTERS = 17, ADMIN_PROC_SERVER_UPDATE_TLS_FILES = 18, ADMIN_PROC_CONNECT_SET_DAEMON_TIMEOUT = 19, + ADMIN_PROC_CONNECT_DAEMON_SHUTDOWN = 20, }; ――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――――