1/* 2 * QEMU live migration 3 * 4 * Copyright IBM, Corp. 2008 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2. See 10 * the COPYING file in the top-level directory. 11 * 12 */ 13 14#ifndef QEMU_MIGRATION_H 15#define QEMU_MIGRATION_H 16 17#include "qemu-common.h" 18 19#define MIG_STATE_ERROR -1 20#define MIG_STATE_COMPLETED 0 21#define MIG_STATE_CANCELLED 1 22#define MIG_STATE_ACTIVE 2 23 24typedef struct MigrationState MigrationState; 25 26struct MigrationState 27{ 28 /* FIXME: add more accessors to print migration info */ 29 void (*cancel)(MigrationState *s); 30 int (*get_status)(MigrationState *s); 31 void (*release)(MigrationState *s); 32}; 33 34typedef struct FdMigrationState FdMigrationState; 35 36struct FdMigrationState 37{ 38 MigrationState mig_state; 39 int64_t bandwidth_limit; 40 QEMUFile *file; 41 int fd; 42 Monitor *mon_resume; 43 int state; 44 int (*get_error)(struct FdMigrationState*); 45 int (*close)(struct FdMigrationState*); 46 int (*write)(struct FdMigrationState*, const void *, size_t); 47 void *opaque; 48}; 49 50void qemu_start_incoming_migration(const char *uri); 51 52void do_migrate(Monitor *mon, int detach, const char *uri); 53 54void do_migrate_cancel(Monitor *mon); 55 56void do_migrate_set_speed(Monitor *mon, const char *value); 57 58uint64_t migrate_max_downtime(void); 59 60void do_migrate_set_downtime(Monitor *mon, const char *value); 61 62void do_info_migrate(Monitor *mon); 63 64int exec_start_incoming_migration(const char *host_port); 65 66MigrationState *exec_start_outgoing_migration(const char *host_port, 67 int64_t bandwidth_limit, 68 int detach); 69 70int tcp_start_incoming_migration(const char *host_port); 71 72MigrationState *tcp_start_outgoing_migration(const char *host_port, 73 int64_t bandwidth_limit, 74 int detach); 75 76void migrate_fd_monitor_suspend(FdMigrationState *s); 77 78void migrate_fd_error(FdMigrationState *s); 79 80void migrate_fd_cleanup(FdMigrationState *s); 81 82void migrate_fd_put_notify(void *opaque); 83 84ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size); 85 86void migrate_fd_connect(FdMigrationState *s); 87 88void migrate_fd_put_ready(void *opaque); 89 90int migrate_fd_get_status(MigrationState *mig_state); 91 92void migrate_fd_cancel(MigrationState *mig_state); 93 94void migrate_fd_release(MigrationState *mig_state); 95 96void migrate_fd_wait_for_unfreeze(void *opaque); 97 98int migrate_fd_close(void *opaque); 99 100static inline FdMigrationState *migrate_to_fms(MigrationState *mig_state) 101{ 102 return container_of(mig_state, FdMigrationState, mig_state); 103} 104 105uint64_t ram_bytes_remaining(void); 106uint64_t ram_bytes_transferred(void); 107uint64_t ram_bytes_total(void); 108 109int ram_save_live(QEMUFile *f, int stage, void *opaque); 110int ram_load(QEMUFile *f, void *opaque, int version_id); 111 112#endif 113