2
0

migration.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  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. #ifndef QEMU_MIGRATION_H
  14. #define QEMU_MIGRATION_H
  15. #define MIG_STATE_ERROR -1
  16. #define MIG_STATE_COMPLETED 0
  17. #define MIG_STATE_CANCELLED 1
  18. #define MIG_STATE_ACTIVE 2
  19. typedef struct MigrationState MigrationState;
  20. struct MigrationState
  21. {
  22. /* FIXME: add more accessors to print migration info */
  23. void (*cancel)(MigrationState *s);
  24. int (*get_status)(MigrationState *s);
  25. void (*release)(MigrationState *s);
  26. };
  27. typedef struct FdMigrationState FdMigrationState;
  28. struct FdMigrationState
  29. {
  30. MigrationState mig_state;
  31. int64_t bandwidth_limit;
  32. QEMUFile *file;
  33. int fd;
  34. int detach;
  35. int state;
  36. int (*get_error)(struct FdMigrationState*);
  37. int (*close)(struct FdMigrationState*);
  38. int (*write)(struct FdMigrationState*, const void *, size_t);
  39. void *opaque;
  40. };
  41. void qemu_start_incoming_migration(const char *uri);
  42. void do_migrate(int detach, const char *uri);
  43. void do_migrate_cancel(void);
  44. void do_migrate_set_speed(const char *value);
  45. void do_info_migrate(void);
  46. int exec_start_incoming_migration(const char *host_port);
  47. MigrationState *exec_start_outgoing_migration(const char *host_port,
  48. int64_t bandwidth_limit,
  49. int detach);
  50. int tcp_start_incoming_migration(const char *host_port);
  51. MigrationState *tcp_start_outgoing_migration(const char *host_port,
  52. int64_t bandwidth_limit,
  53. int detach);
  54. void migrate_fd_error(FdMigrationState *s);
  55. void migrate_fd_cleanup(FdMigrationState *s);
  56. void migrate_fd_put_notify(void *opaque);
  57. ssize_t migrate_fd_put_buffer(void *opaque, const void *data, size_t size);
  58. void migrate_fd_connect(FdMigrationState *s);
  59. void migrate_fd_put_ready(void *opaque);
  60. int migrate_fd_get_status(MigrationState *mig_state);
  61. void migrate_fd_cancel(MigrationState *mig_state);
  62. void migrate_fd_release(MigrationState *mig_state);
  63. void migrate_fd_wait_for_unfreeze(void *opaque);
  64. int migrate_fd_close(void *opaque);
  65. static inline FdMigrationState *migrate_to_fms(MigrationState *mig_state)
  66. {
  67. return container_of(mig_state, FdMigrationState, mig_state);
  68. }
  69. #endif