diff options
author | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-11-11 16:46:33 +0000 |
---|---|---|
committer | aliguori <aliguori@c046a42c-6fe2-441c-8c8c-71466251a162> | 2008-11-11 16:46:33 +0000 |
commit | 065e281356282f59386272aa50590b566a1809d9 (patch) | |
tree | 98f265501e5474327a5138bf9ca38736c15f4b38 /migration.h | |
parent | a74b4d2c23a5da45a5ef9eec18ce00923b6bab15 (diff) |
Reintroduce migrate-to-exec: support (Charles Duffy)
KVM's live migration support included support for exec: URLs, allowing system
state to be written or received via an arbitrary popen()ed subprocess. This
provides a convenient way to pipe state through a compression algorithm or an
arbitrary network transport on its way to its destination, and a convenient way
to write state to disk; libvirt's qemu driver currently uses migration to exec:
targets for this latter purpose.
This version of the patch refactors now-common code from migrate-tcp.c into
migrate.c.
Signed-off-by: Charles Duffy <Charles_Duffy@messageone.com>
Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@5694 c046a42c-6fe2-441c-8c8c-71466251a162
Diffstat (limited to 'migration.h')
-rw-r--r-- | migration.h | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/migration.h b/migration.h index 9947f6a45..953ec704d 100644 --- a/migration.h +++ b/migration.h @@ -29,6 +29,22 @@ struct MigrationState void (*release)(MigrationState *s); }; +typedef struct FdMigrationState FdMigrationState; + +struct FdMigrationState +{ + MigrationState mig_state; + int64_t bandwidth_limit; + QEMUFile *file; + int fd; + int detach; + int state; + int (*get_error)(struct FdMigrationState*); + int (*close)(struct FdMigrationState*); + int (*write)(struct FdMigrationState*, const void *, size_t); + void *opaque; +}; + void qemu_start_incoming_migration(const char *uri); void do_migrate(int detach, const char *uri); @@ -39,11 +55,44 @@ void do_migrate_set_speed(const char *value); void do_info_migrate(void); +int exec_start_incoming_migration(const char *host_port); + +MigrationState *exec_start_outgoing_migration(const char *host_port, + int64_t bandwidth_limit, + int detach); + int tcp_start_incoming_migration(const char *host_port); MigrationState *tcp_start_outgoing_migration(const char *host_port, int64_t bandwidth_limit, int detach); +void migrate_fd_error(FdMigrationState *s); + +void 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); +} + #endif |