1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- /*
- * migration yank functions
- *
- * Copyright (c) Lukas Straub <lukasstraub2@web.de>
- *
- * This work is licensed under the terms of the GNU GPL, version 2 or later.
- * See the COPYING file in the top-level directory.
- */
- #include "qemu/osdep.h"
- #include "qapi/error.h"
- #include "io/channel.h"
- #include "yank_functions.h"
- #include "qemu/yank.h"
- #include "io/channel-socket.h"
- #include "io/channel-tls.h"
- #include "qemu-file.h"
- void migration_yank_iochannel(void *opaque)
- {
- QIOChannel *ioc = QIO_CHANNEL(opaque);
- qio_channel_shutdown(ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL);
- }
- /* Return whether yank is supported on this ioc */
- static bool migration_ioc_yank_supported(QIOChannel *ioc)
- {
- return object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_SOCKET) ||
- object_dynamic_cast(OBJECT(ioc), TYPE_QIO_CHANNEL_TLS);
- }
- void migration_ioc_register_yank(QIOChannel *ioc)
- {
- if (migration_ioc_yank_supported(ioc)) {
- yank_register_function(MIGRATION_YANK_INSTANCE,
- migration_yank_iochannel,
- QIO_CHANNEL(ioc));
- }
- }
- void migration_ioc_unregister_yank(QIOChannel *ioc)
- {
- if (migration_ioc_yank_supported(ioc)) {
- yank_unregister_function(MIGRATION_YANK_INSTANCE,
- migration_yank_iochannel,
- QIO_CHANNEL(ioc));
- }
- }
- void migration_ioc_unregister_yank_from_file(QEMUFile *file)
- {
- QIOChannel *ioc = qemu_file_get_ioc(file);
- if (ioc) {
- /*
- * For migration qemufiles, we'll always reach here. Though we'll skip
- * calls from e.g. savevm/loadvm as they don't use yank.
- */
- migration_ioc_unregister_yank(ioc);
- }
- }
|