X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=migration.h;h=21707922ef602a4348cee83e52b9389fd57ea444;hb=refs%2Fheads%2Fstable-0.14;hp=61f77bd89a47521b1744d671e307972206816c83;hpb=5bb7910af031cce09cc619b982d39dc889776f65;p=qemu.git diff --git a/migration.h b/migration.h index 61f77bd89..21707922e 100644 --- a/migration.h +++ b/migration.h @@ -14,6 +14,10 @@ #ifndef QEMU_MIGRATION_H #define QEMU_MIGRATION_H +#include "qdict.h" +#include "qemu-common.h" +#include "notify.h" + #define MIG_STATE_ERROR -1 #define MIG_STATE_COMPLETED 0 #define MIG_STATE_CANCELLED 1 @@ -27,17 +31,112 @@ struct MigrationState void (*cancel)(MigrationState *s); int (*get_status)(MigrationState *s); void (*release)(MigrationState *s); + int blk; + int shared; }; -void qemu_start_incoming_migration(const char *uri); +typedef struct FdMigrationState FdMigrationState; -void do_migrate(int detach, const char *uri); +struct FdMigrationState +{ + MigrationState mig_state; + int64_t bandwidth_limit; + QEMUFile *file; + int fd; + Monitor *mon; + int state; + int (*get_error)(struct FdMigrationState*); + int (*close)(struct FdMigrationState*); + int (*write)(struct FdMigrationState*, const void *, size_t); + void *opaque; +}; -void do_migrate_cancel(void); +void process_incoming_migration(QEMUFile *f); -void do_migrate_set_speed(const char *value); +int qemu_start_incoming_migration(const char *uri); -void do_info_migrate(void); +int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data); -#endif +int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data); + +int do_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret_data); + +uint64_t migrate_max_downtime(void); + +int do_migrate_set_downtime(Monitor *mon, const QDict *qdict, + QObject **ret_data); + +void do_info_migrate_print(Monitor *mon, const QObject *data); + +void do_info_migrate(Monitor *mon, QObject **ret_data); + +int exec_start_incoming_migration(const char *host_port); + +MigrationState *exec_start_outgoing_migration(Monitor *mon, + const char *host_port, + int64_t bandwidth_limit, + int detach, + int blk, + int inc); + +int tcp_start_incoming_migration(const char *host_port); + +MigrationState *tcp_start_outgoing_migration(Monitor *mon, + const char *host_port, + int64_t bandwidth_limit, + int detach, + int blk, + int inc); + +int unix_start_incoming_migration(const char *path); + +MigrationState *unix_start_outgoing_migration(Monitor *mon, + const char *path, + int64_t bandwidth_limit, + int detach, + int blk, + int inc); + +int fd_start_incoming_migration(const char *path); + +MigrationState *fd_start_outgoing_migration(Monitor *mon, + const char *fdname, + int64_t bandwidth_limit, + int detach, + int blk, + int inc); +void migrate_fd_monitor_suspend(FdMigrationState *s, Monitor *mon); + +void migrate_fd_error(FdMigrationState *s); + +int migrate_fd_cleanup(FdMigrationState *s); + +void migrate_fd_put_notify(void *opaque); + +ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size); + +void migrate_fd_connect(FdMigrationState *s); + +void migrate_fd_put_ready(void *opaque); + +int migrate_fd_get_status(MigrationState *mig_state); + +void migrate_fd_cancel(MigrationState *mig_state); + +void migrate_fd_release(MigrationState *mig_state); + +void migrate_fd_wait_for_unfreeze(void *opaque); + +int migrate_fd_close(void *opaque); + +static inline FdMigrationState *migrate_to_fms(MigrationState *mig_state) +{ + return container_of(mig_state, FdMigrationState, mig_state); +} + +void add_migration_state_change_notifier(Notifier *notify); +void remove_migration_state_change_notifier(Notifier *notify); +int get_migration_state(void); + +#endif