qemu/migration.h
<<
>>
Prefs
   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
 105#endif
 106