# -*- Mode: Python -*-
# vim: filetype=python
#

##
# *********
# Migration
# *********
##

{ 'include': 'common.json' }
{ 'include': 'sockets.json' }

##
# @MigrationRAMStats:
#
# Detailed migration status.
#
# @transferred: amount of bytes already transferred to the target VM
#
# @remaining: amount of bytes remaining to be transferred to the
#     target VM
#
# @total: total amount of bytes involved in the migration process
#
# @duplicate: number of duplicate (zero) pages (since 1.2)
#
# @normal: number of normal pages (since 1.2)
#
# @normal-bytes: number of normal bytes sent (since 1.2)
#
# @dirty-pages-rate: number of pages dirtied by second by the guest
#     (since 1.3)
#
# @mbps: throughput in megabits/sec.  (since 1.6)
#
# @dirty-sync-count: number of times that dirty ram was synchronized
#     (since 2.1)
#
# @postcopy-requests: The number of page requests received from the
#     destination (since 2.7)
#
# @page-size: The number of bytes per page for the various page-based
#     statistics (since 2.10)
#
# @multifd-bytes: The number of bytes sent through multifd (since 3.0)
#
# @pages-per-second: the number of memory pages transferred per second
#     (Since 4.0)
#
# @precopy-bytes: The number of bytes sent in the pre-copy phase
#     (since 7.0).
#
# @downtime-bytes: The number of bytes sent while the guest is paused
#     (since 7.0).
#
# @postcopy-bytes: The number of bytes sent during the post-copy phase
#     (since 7.0).
#
# @dirty-sync-missed-zero-copy: Number of times dirty RAM
#     synchronization could not avoid copying dirty pages.  This is
#     between 0 and @dirty-sync-count * @multifd-channels.
#     (since 7.1)
#
# Since: 0.14
##
{ 'struct': 'MigrationRAMStats',
  'data': {'transferred': 'int', 'remaining': 'int', 'total': 'int' ,
           'duplicate': 'int',
           'normal': 'int',
           'normal-bytes': 'int', 'dirty-pages-rate': 'int',
           'mbps': 'number', 'dirty-sync-count': 'int',
           'postcopy-requests': 'int', 'page-size': 'int',
           'multifd-bytes': 'uint64', 'pages-per-second': 'uint64',
           'precopy-bytes': 'uint64', 'downtime-bytes': 'uint64',
           'postcopy-bytes': 'uint64',
           'dirty-sync-missed-zero-copy': 'uint64' } }

##
# @XBZRLECacheStats:
#
# Detailed XBZRLE migration cache statistics
#
# @cache-size: XBZRLE cache size
#
# @bytes: amount of bytes already transferred to the target VM
#
# @pages: amount of pages transferred to the target VM
#
# @cache-miss: number of cache miss
#
# @cache-miss-rate: rate of cache miss (since 2.1)
#
# @encoding-rate: rate of encoded bytes (since 5.1)
#
# @overflow: number of overflows
#
# Since: 1.2
##
{ 'struct': 'XBZRLECacheStats',
  'data': {'cache-size': 'size', 'bytes': 'int', 'pages': 'int',
           'cache-miss': 'int', 'cache-miss-rate': 'number',
           'encoding-rate': 'number', 'overflow': 'int' } }

##
# @CompressionStats:
#
# Detailed migration compression statistics
#
# @pages: amount of pages compressed and transferred to the target VM
#
# @busy: count of times that no free thread was available to compress
#     data
#
# @busy-rate: rate of thread busy
#
# @compressed-size: amount of bytes after compression
#
# @compression-rate: rate of compressed size
#
# Since: 3.1
##
{ 'struct': 'CompressionStats',
  'data': {'pages': 'int', 'busy': 'int', 'busy-rate': 'number',
           'compressed-size': 'int', 'compression-rate': 'number' } }

##
# @MigrationStatus:
#
# An enumeration of migration status.
#
# @none: no migration has ever happened.
#
# @setup: migration process has been initiated.
#
# @cancelling: in the process of cancelling migration.
#
# @cancelled: cancelling migration is finished.
#
# @active: in the process of doing migration.
#
# @postcopy-active: like active, but now in postcopy mode.
#     (since 2.5)
#
# @postcopy-device: like postcopy-active, but the destination is still
#     loading device state and is not running yet.  If migration fails
#     during this state, the source side will resume.  If there is no
#     return-path from destination to source, this state is skipped.
#     (since 10.2)
#
# @postcopy-paused: during postcopy but paused.  (since 3.0)
#
# @postcopy-recover-setup: setup phase for a postcopy recovery
#     process, preparing for a recovery phase to start.  (since 9.1)
#
# @postcopy-recover: trying to recover from a paused postcopy.
#     (since 3.0)
#
# @completed: migration is finished.
#
# @failing: error occurred during migration, clean-up underway.
#     (since 11.0)
#
# @failed: error occurred during migration, clean-up done.
#
# @colo: VM is in the process of fault tolerance, VM can not get into
#     this state unless colo capability is enabled for migration.
#     (since 2.8)
#
# @pre-switchover: Paused before device serialisation.  (since 2.11)
#
# @device: During device serialisation (also known as switchover
#     phase).  Before 9.2, this is only used when (1) in precopy, and
#     (2) when pre-switchover capability is enabled.  After 10.0, this
#     state will always be present for every migration procedure as
#     the switchover phase.  (since 2.11)
#
# @wait-unplug: wait for device unplug request by guest OS to be
#     completed.  (since 4.2)
#
# Since: 2.3
##
{ 'enum': 'MigrationStatus',
  'data': [ 'none', 'setup', 'cancelling', 'cancelled',
            'active', 'postcopy-device', 'postcopy-active',
            'postcopy-paused', 'postcopy-recover-setup',
            'postcopy-recover', 'completed', 'failing', 'failed',
            'colo', 'pre-switchover', 'device', 'wait-unplug' ] }

##
# @VfioStats:
#
# Detailed VFIO devices migration statistics
#
# @transferred: amount of bytes transferred to the target VM by VFIO
#     devices
#
# Since: 5.2
##
{ 'struct': 'VfioStats',
  'data': {'transferred': 'int' } }

##
# @MigrationInfo:
#
# Information about current migration process.
#
# @status: `MigrationStatus` describing the current migration status.
#     If this field is not returned, no migration process has been
#     initiated
#
# @ram: Detailed migration RAM statistics, only returned if migration
#     is in progress or completed (since 1.2)
#
# @xbzrle-cache: `XBZRLECacheStats` containing detailed XBZRLE
#     migration statistics, only returned if XBZRLE feature is on and
#     status is 'active' or 'completed' (since 1.2)
#
# @total-time: total amount of milliseconds since migration started.
#     If migration has ended, it returns the total migration time.
#     (since 1.2)
#
# @downtime: only present when migration finishes correctly total
#     downtime in milliseconds for the guest.  (since 1.3)
#
# @expected-downtime: only present while migration is active expected
#     downtime in milliseconds for the guest in last walk of the dirty
#     bitmap.  (since 1.3)
#
# @setup-time: amount of setup time in milliseconds *before* the
#     iterations begin but *after* the QMP command is issued.  This is
#     designed to provide an accounting of any activities (such as
#     RDMA pinning) which may be expensive, but do not actually occur
#     during the iterative migration rounds themselves.  (since 1.6)
#
# @cpu-throttle-percentage: percentage of time guest cpus are being
#     throttled during auto-converge.  This is only present when
#     auto-converge has started throttling guest cpus.  (Since 2.7)
#
# @error-desc: the human readable error description string.  Clients
#     should not attempt to parse the error strings.  (Since 2.7)
#
# @postcopy-blocktime: total time when all vCPU were blocked during
#     postcopy live migration.  This is only present when the
#     postcopy-blocktime migration capability is enabled.  (Since 3.0)
#
# @postcopy-vcpu-blocktime: list of the postcopy blocktime per vCPU.
#     This is only present when the postcopy-blocktime migration
#     capability is enabled.  (Since 3.0)
#
# @postcopy-latency: average remote page fault latency (in ns).  Note
#     that this doesn't include all faults, but only the ones that
#     require a remote page request.  So it should be always bigger
#     than the real average page fault latency.  This is only present
#     when the postcopy-blocktime migration capability is enabled.
#     (Since 10.1)
#
# @postcopy-latency-dist: remote page fault latency distributions.
#     Each element of the array is the number of faults that fall into
#     the bucket period.  For the N-th bucket (N>=0), the latency
#     window is [2^Nus, 2^(N+1)us).  For example, the 8th element
#     stores how many remote faults got resolved within [256us, 512us)
#     window.  This is only present when the postcopy-blocktime
#     migration capability is enabled.  (Since 10.1)
#
# @postcopy-vcpu-latency: average remote page fault latency per vCPU
#     (in ns).  It has the same definition of @postcopy-latency, but
#     instead this is the per-vCPU statistics.  This is only present
#     when the postcopy-blocktime migration capability is enabled.
#     (Since 10.1)
#
# @postcopy-non-vcpu-latency: average remote page fault latency for
#     all faults happened in non-vCPU threads (in ns).  It has the
#     same definition of @postcopy-latency but this only provides
#     statistics to non-vCPU faults.  This is only present when the
#     postcopy-blocktime migration capability is enabled.
#     (Since 10.1)
#
# @socket-address: Only used for tcp, to know what the real port is
#     (Since 4.0)
#
# @vfio: `VfioStats` containing detailed VFIO devices migration
#     statistics, only returned if VFIO device is present, migration
#     is supported by all VFIO devices and status is 'active' or
#     'completed' (since 5.2)
#
# @blocked-reasons: A list of reasons an outgoing migration is
#     blocked.  Present and non-empty when migration is blocked.
#     (since 6.0)
#
# @dirty-limit-throttle-time-per-round: Maximum throttle time (in
#     microseconds) of virtual CPUs each dirty ring full round, which
#     shows how `MigrationCapability` dirty-limit affects the guest
#     during live migration.  (Since 8.1)
#
# @dirty-limit-ring-full-time: Estimated average dirty ring full time
#     (in microseconds) for each dirty ring full round.  The value
#     equals the dirty ring memory size divided by the average dirty
#     page rate of the virtual CPU, which can be used to observe the
#     average memory load of the virtual CPU indirectly.  Note that
#     zero means guest doesn't dirty memory.  (Since 8.1)
#
# @remaining: amount of bytes remaining to be migrated system-wide,
#     includes both RAM and all devices (like VFIO).  (Since 11.1)
#
# Features:
#
# @unstable: Members @postcopy-latency, @postcopy-vcpu-latency,
#     @postcopy-latency-dist, @postcopy-non-vcpu-latency are
#     experimental.
#
# Since: 0.14
##
{ 'struct': 'MigrationInfo',
  'data': {'*status': 'MigrationStatus', '*ram': 'MigrationRAMStats',
           '*remaining': 'size',
           '*vfio': 'VfioStats',
           '*xbzrle-cache': 'XBZRLECacheStats',
           '*total-time': 'int',
           '*expected-downtime': 'int',
           '*downtime': 'int',
           '*setup-time': 'int',
           '*cpu-throttle-percentage': 'int',
           '*error-desc': 'str',
           '*blocked-reasons': ['str'],
           '*postcopy-blocktime': 'uint32',
           '*postcopy-vcpu-blocktime': ['uint32'],
           '*postcopy-latency': {
               'type': 'uint64', 'features': [ 'unstable' ] },
           '*postcopy-latency-dist': {
               'type': ['uint64'], 'features': [ 'unstable' ] },
           '*postcopy-vcpu-latency': {
               'type': ['uint64'], 'features': [ 'unstable' ] },
           '*postcopy-non-vcpu-latency': {
               'type': 'uint64', 'features': [ 'unstable' ] },
           '*socket-address': ['SocketAddress'],
           '*dirty-limit-throttle-time-per-round': 'uint64',
           '*dirty-limit-ring-full-time': 'uint64'} }

##
# @query-migrate:
#
# Return information about current migration process.  If migration is
# active there will be another json-object with RAM migration status.
#
# Since: 0.14
#
# .. qmp-example::
#    :title: Before the first migration
#
#     -> { "execute": "query-migrate" }
#     <- { "return": {} }
#
# .. qmp-example::
#    :title: Migration is done and has succeeded
#
#     -> { "execute": "query-migrate" }
#     <- { "return": {
#             "status": "completed",
#             "total-time":12345,
#             "setup-time":12345,
#             "downtime":12345,
#             "ram":{
#               "transferred":123,
#               "remaining":123,
#               "total":246,
#               "duplicate":123,
#               "normal":123,
#               "normal-bytes":123456,
#               "dirty-sync-count":15
#             }
#          }
#        }
#
# .. qmp-example::
#    :title: Migration is done and has failed
#
#     -> { "execute": "query-migrate" }
#     <- { "return": { "status": "failed" } }
#
# .. qmp-example::
#    :title: Migration is being performed
#
#     -> { "execute": "query-migrate" }
#     <- {
#           "return":{
#              "status":"active",
#              "total-time":12345,
#              "setup-time":12345,
#              "expected-downtime":12345,
#              "ram":{
#                 "transferred":123,
#                 "remaining":123,
#                 "total":246,
#                 "duplicate":123,
#                 "normal":123,
#                 "normal-bytes":123456,
#                 "dirty-sync-count":15
#              }
#           }
#        }
#
# .. qmp-example::
#    :title: Migration is being performed and XBZRLE is active
#
#     -> { "execute": "query-migrate" }
#     <- {
#           "return":{
#              "status":"active",
#              "total-time":12345,
#              "setup-time":12345,
#              "expected-downtime":12345,
#              "ram":{
#                 "total":1057024,
#                 "remaining":1053304,
#                 "transferred":3720,
#                 "duplicate":10,
#                 "normal":3333,
#                 "normal-bytes":3412992,
#                 "dirty-sync-count":15
#              },
#              "xbzrle-cache":{
#                 "cache-size":67108864,
#                 "bytes":20971520,
#                 "pages":2444343,
#                 "cache-miss":2244,
#                 "cache-miss-rate":0.123,
#                 "encoding-rate":80.1,
#                 "overflow":34434
#              }
#           }
#        }
##
{ 'command': 'query-migrate', 'returns': 'MigrationInfo' }

##
# @MigrationCapability:
#
# Migration capabilities enumeration
#
# @xbzrle: Migration supports xbzrle (Xor Based Zero Run Length
#     Encoding).  This feature allows us to minimize migration traffic
#     for certain work loads, by sending compressed difference of the
#     pages
#
# @rdma-pin-all: Controls whether or not the entire VM memory
#     footprint is mlock()'d on demand or all at once.  Refer to
#     docs/rdma.txt for usage.  Disabled by default.  (since 2.0)
#
# @events: generate events for each migration state change (since 2.4)
#
# @auto-converge: If enabled, QEMU will automatically throttle down
#     the guest to speed up convergence of RAM migration.  (since 1.6)
#
# @postcopy-ram: Start executing on the migration target before all of
#     RAM has been migrated, pulling the remaining pages along as
#     needed.  The capacity must have the same setting on both source
#     and target or migration will not even start.  **Note:** if the
#     migration fails during postcopy the VM will fail.  (since 2.6)
#
# @x-colo: If enabled, migration will never end, and the state of the
#     VM on the primary side will be migrated continuously to the VM
#     on secondary side, this process is called COarse-Grain LOck
#     Stepping (COLO) for Non-stop Service.  (since 2.8)
#
# @release-ram: if enabled, QEMU will free the migrated ram pages on
#     the source during postcopy-ram migration.  (since 2.9)
#
# @return-path: If enabled, migration will use the return path even
#     for precopy.  (since 2.10)
#
# @pause-before-switchover: Pause outgoing migration before
#     serialising device state and before disabling block IO
#     (since 2.11)
#
# @multifd: Use more than one fd for migration (since 4.0)
#
# @dirty-bitmaps: If enabled, QEMU will migrate named dirty bitmaps.
#     (since 2.12)
#
# @postcopy-blocktime: Calculate downtime for postcopy live migration
#     (since 3.0)
#
# @late-block-activate: If enabled, the destination will not activate
#     block devices (and thus take locks) immediately at the end of
#     migration.  (since 3.0)
#
# @x-ignore-shared: If enabled, QEMU will not migrate shared memory
#     that is accessible on the destination machine.  (since 4.0)
#
# @validate-uuid: Send the UUID of the source to allow the destination
#     to ensure it is the same.  (since 4.2)
#
# @background-snapshot: If enabled, the migration stream will be a
#     snapshot of the VM exactly at the point when the migration
#     procedure starts.  The VM RAM is saved with running VM.
#     (since 6.0)
#
# @zero-copy-send: Controls behavior on sending memory pages on
#     migration.  When true, enables a zero-copy mechanism for sending
#     memory pages, if host supports it.  Requires that QEMU be
#     permitted to use locked memory for guest RAM pages.  (since 7.1)
#
# @postcopy-preempt: If enabled, the migration process will allow
#     postcopy requests to preempt precopy stream, so postcopy
#     requests will be handled faster.  This is a performance feature
#     and should not affect the correctness of postcopy migration.
#     (since 7.1)
#
# @switchover-ack: If enabled, migration will not stop the source VM
#     and complete the migration until the destination has
#     acknowledged that it is OK to switch over.  The acknowledgement
#     may depend, for example, on some device's data being loaded in
#     the destination before doing switchover.  This can reduce
#     downtime if devices that support this capability are present.
#     Capability @return-path must be enabled to use it.  (since 8.1)
#
# @dirty-limit: If enabled, migration will throttle vCPUs as needed to
#     keep their dirty page rate within @vcpu-dirty-limit.  This can
#     improve responsiveness of large guests during live migration,
#     and can result in more stable read performance.  Requires KVM
#     with accelerator property "dirty-ring-size" set.  (Since 8.1)
#
# @mapped-ram: Migrate using fixed offsets in the migration file for
#     each RAM page.  Requires a migration URI that supports seeking,
#     such as a file.  (since 9.0)
#
# Features:
#
# @unstable: Members @x-colo and @x-ignore-shared are experimental.
#
# Since: 1.2
##
{ 'enum': 'MigrationCapability',
  'data': ['xbzrle', 'rdma-pin-all', 'auto-converge',
           'events', 'postcopy-ram',
           { 'name': 'x-colo', 'features': [ 'unstable' ] },
           'release-ram',
           'return-path', 'pause-before-switchover', 'multifd',
           'dirty-bitmaps', 'postcopy-blocktime', 'late-block-activate',
           { 'name': 'x-ignore-shared', 'features': [ 'unstable' ] },
           'validate-uuid', 'background-snapshot',
           'zero-copy-send', 'postcopy-preempt', 'switchover-ack',
           'dirty-limit', 'mapped-ram'] }

##
# @MigrationCapabilityStatus:
#
# Migration capability information
#
# @capability: capability enum
#
# @state: capability state bool
#
# Since: 1.2
##
{ 'struct': 'MigrationCapabilityStatus',
  'data': { 'capability': 'MigrationCapability', 'state': 'bool' } }

##
# @migrate-set-capabilities:
#
# Enable/Disable the following migration capabilities (like xbzrle)
#
# @capabilities: json array of capability modifications to make
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "migrate-set-capabilities" , "arguments":
#          { "capabilities": [ { "capability": "xbzrle", "state": true } ] } }
#     <- { "return": {} }
##
{ 'command': 'migrate-set-capabilities',
  'data': { 'capabilities': ['MigrationCapabilityStatus'] } }

##
# @query-migrate-capabilities:
#
# Return information about the current migration capabilities status
#
# Since: 1.2
#
# .. qmp-example::
#
#     -> { "execute": "query-migrate-capabilities" }
#     <- { "return": [
#           {"state": false, "capability": "xbzrle"},
#           {"state": false, "capability": "rdma-pin-all"},
#           {"state": false, "capability": "auto-converge"},
#           {"state": true, "capability": "events"},
#           {"state": false, "capability": "postcopy-ram"},
#           {"state": false, "capability": "x-colo"}
#        ]}
##
{ 'command': 'query-migrate-capabilities', 'returns':   ['MigrationCapabilityStatus']}

##
# @MultiFDCompression:
#
# An enumeration of multifd compression methods.
#
# @none: no compression.
#
# @zlib: use zlib compression method.
#
# @zstd: use zstd compression method.
#
# @qatzip: use qatzip compression method.  (Since 9.2)
#
# @qpl: use qpl compression method.  Query Processing Library(qpl) is
#     based on the deflate compression algorithm and use the Intel
#     In-Memory Analytics Accelerator(IAA) accelerated compression and
#     decompression.  (Since 9.1)
#
# @uadk: use UADK library compression method.  (Since 9.1)
#
# Since: 5.0
##
{ 'enum': 'MultiFDCompression',
  'prefix': 'MULTIFD_COMPRESSION',
  'data': [ 'none', 'zlib',
            { 'name': 'zstd', 'if': 'CONFIG_ZSTD' },
            { 'name': 'qatzip', 'if': 'CONFIG_QATZIP'},
            { 'name': 'qpl', 'if': 'CONFIG_QPL' },
            { 'name': 'uadk', 'if': 'CONFIG_UADK' } ] }

##
# @MigMode:
#
# @normal: the original form of migration.  (since 8.2)
#
# @cpr-reboot: The `migrate` command stops the VM and saves state to
#     the URI.  After quitting QEMU, the user resumes by running QEMU
#     -incoming.
#
#     This mode allows the user to quit QEMU, optionally update and
#     reboot the OS, and restart QEMU.  If the user reboots, the URI
#     must persist across the reboot, such as by using a file.
#
#     Unlike normal mode, the use of certain local storage options
#     does not block the migration, but the user must not modify the
#     contents of guest block devices between the quit and restart.
#
#     This mode supports VFIO devices provided the user first puts the
#     guest in the suspended runstate, such as by issuing
#     `guest-suspend-ram` to the QEMU guest agent.
#
#     Best performance is achieved when the memory backend is shared
#     and the @x-ignore-shared migration capability is set, but this
#     is not required.  Further, if the user reboots before restarting
#     such a configuration, the shared memory must persist across the
#     reboot, such as by backing it with a dax device.
#
#     @cpr-reboot may not be used with postcopy, background-snapshot,
#     or COLO.
#
#     (since 8.2)
#
# @cpr-transfer: This mode allows the user to transfer a guest to a
#     new QEMU instance on the same host with minimal guest pause
#     time by preserving guest RAM in place.
#
#     Devices and their pinned pages are also preserved for VFIO and
#     IOMMUFD.  (since 10.1)
#
#     The user starts new QEMU on the same host as old QEMU, with
#     command-line arguments to create the same machine, plus the
#     -incoming option for the main migration channel, like normal
#     live migration.  In addition, the user adds a second -incoming
#     option with channel type "cpr".  This CPR channel must support
#     file descriptor transfer with SCM_RIGHTS, i.e. it must be a UNIX
#     domain socket.
#
#     To initiate CPR, the user issues a migrate command to old QEMU,
#     adding a second migration channel of type "cpr" in the channels
#     argument.  Old QEMU stops the VM, saves state to the migration
#     channels, and enters the postmigrate state.  Execution resumes
#     in new QEMU.
#
#     New QEMU reads the CPR channel before opening a monitor, hence
#     the CPR channel cannot be specified in the list of channels for
#     a `migrate-incoming` command.  It may only be specified on the
#     command line.
#
#     The main channel address cannot be a file type, and for an
#     inet socket, the port cannot be 0 (meaning dynamically choose
#     a port).
#
#     Memory-backend objects must have the share=on attribute, but
#     memory-backend-epc is not supported.  The VM must be started
#     with the '-machine aux-ram-share=on' option.
#
#     When using -incoming defer, you must issue the `migrate` command
#     to old QEMU before issuing any monitor commands to new QEMU.
#     However, new QEMU does not open and read the migration stream
#     until you issue the `migrate-incoming` command.
#
#     (since 10.0)
#
# @cpr-exec: The migrate command stops the VM, saves state to the
#     migration channel, directly exec's a new version of QEMU on the
#     same host, replacing the original process while retaining its
#     PID, and loads state from the channel.  Guest RAM is preserved
#     in place.  Devices and their pinned pages are also preserved for
#     VFIO and IOMMUFD.
#
#     Old QEMU starts new QEMU by exec'ing the command specified by
#     the @cpr-exec-command parameter.  The command may be a direct
#     invocation of new QEMU, or may be a wrapper that exec's the new
#     QEMU binary.
#
#     Because old QEMU terminates when new QEMU starts, one cannot
#     stream data between the two, so the channel must be a type, such
#     as a file, that accepts all data before old QEMU exits.
#     Otherwise, old QEMU may quietly block writing to the channel.
#
#     Memory-backend objects must have the share=on attribute, but
#     memory-backend-epc is not supported.  The VM must be started
#     with the '-machine aux-ram-share=on' option.
#
#     (since 10.2)
##
{ 'enum': 'MigMode',
  'data': [ 'normal', 'cpr-reboot', 'cpr-transfer', 'cpr-exec' ] }

##
# @ZeroPageDetection:
#
# @none: Do not perform zero page checking.
#
# @legacy: Perform zero page checking in main migration thread.
#
# @multifd: Perform zero page checking in multifd sender thread if
#     multifd migration is enabled, else in the main migration thread
#     as for @legacy.
#
# Since: 9.0
##
{ 'enum': 'ZeroPageDetection',
  'data': [ 'none', 'legacy', 'multifd' ] }

##
# @BitmapMigrationBitmapAliasTransform:
#
# @persistent: If present, the bitmap will be made persistent or
#     transient depending on this parameter.
#
# Since: 6.0
##
{ 'struct': 'BitmapMigrationBitmapAliasTransform',
  'data': {
      '*persistent': 'bool'
  } }

##
# @BitmapMigrationBitmapAlias:
#
# @name: The name of the bitmap.
#
# @alias: An alias name for migration (for example the bitmap name on
#     the opposite site).
#
# @transform: Allows the modification of the migrated bitmap.
#     (since 6.0)
#
# Since: 5.2
##
{ 'struct': 'BitmapMigrationBitmapAlias',
  'data': {
      'name': 'str',
      'alias': 'str',
      '*transform': 'BitmapMigrationBitmapAliasTransform'
  } }

##
# @BitmapMigrationNodeAlias:
#
# Maps a block node name and the bitmaps it has to aliases for dirty
# bitmap migration.
#
# @node-name: A block node name.
#
# @alias: An alias block node name for migration (for example the node
#     name on the opposite site).
#
# @bitmaps: Mappings for the bitmaps on this node.
#
# Since: 5.2
##
{ 'struct': 'BitmapMigrationNodeAlias',
  'data': {
      'node-name': 'str',
      'alias': 'str',
      'bitmaps': [ 'BitmapMigrationBitmapAlias' ]
  } }

##
# @MigrationParameter:
#
# Migration parameters enumeration.  The enumeration values mirror the
# members of @MigrationParameters.
#
# Features:
#
# @unstable: Members @x-checkpoint-delay, @x-rdma-chunk-size, and
#     @x-vcpu-dirty-limit-period are experimental.
#
# Since: 2.4
##
{ 'enum': 'MigrationParameter',
  'data': ['announce-initial', 'announce-max',
           'announce-rounds', 'announce-step',
           'throttle-trigger-threshold',
           'cpu-throttle-initial', 'cpu-throttle-increment',
           'cpu-throttle-tailslow',
           'tls-creds', 'tls-hostname', 'tls-authz', 'max-bandwidth',
           'avail-switchover-bandwidth', 'downtime-limit',
           { 'name': 'x-checkpoint-delay', 'features': [ 'unstable' ] },
           'multifd-channels',
           'xbzrle-cache-size', 'max-postcopy-bandwidth',
           'max-cpu-throttle', 'multifd-compression',
           'multifd-zlib-level', 'multifd-zstd-level',
           'multifd-qatzip-level',
           'block-bitmap-mapping',
           { 'name': 'x-vcpu-dirty-limit-period', 'features': ['unstable'] },
           'vcpu-dirty-limit',
           'mode',
           'zero-page-detection',
           'direct-io',
           { 'name': 'x-rdma-chunk-size', 'features': [ 'unstable' ] },
           'cpr-exec-command'] }

##
# @migrate-set-parameters:
#
# Set migration parameters.  All arguments are optional.
#
# Since: 2.4
#
# .. qmp-example::
#
#     -> { "execute": "migrate-set-parameters" ,
#          "arguments": { "multifd-channels": 5 } }
#     <- { "return": {} }
##
{ 'command': 'migrate-set-parameters', 'boxed': true,
  'data': 'MigrationParameters' }

##
# @MigrationParameters:
#
# @announce-initial: Initial delay (in milliseconds) before sending
#     the first announce (Since 4.0)
#
# @announce-max: Maximum delay (in milliseconds) between packets in
#     the announcement (Since 4.0)
#
# @announce-rounds: Number of self-announce packets sent after
#     migration (Since 4.0)
#
# @announce-step: Increase in delay (in milliseconds) between
#     subsequent packets in the announcement (Since 4.0)
#
# @throttle-trigger-threshold: The ratio of bytes_dirty_period and
#     bytes_xfer_period to trigger throttling.  It is expressed as
#     percentage.  The default value is 50.  (Since 5.0)
#
# @cpu-throttle-initial: Initial percentage of time guest cpus are
#     throttled when migration auto-converge is activated.  The
#     default value is 20.  (Since 2.7)
#
# @cpu-throttle-increment: throttle percentage increase each time
#     auto-converge detects that migration is not making progress.
#     The default value is 10.  (Since 2.7)
#
# @cpu-throttle-tailslow: Make CPU throttling slower at tail stage.
#     At the tail stage of throttling, the Guest is very sensitive to
#     CPU percentage while the @cpu-throttle -increment is excessive
#     usually at tail stage.  If this parameter is true, we will
#     compute the ideal CPU percentage used by the Guest, which may
#     exactly make the dirty rate match the dirty rate threshold.
#     Then we will choose a smaller throttle increment between the one
#     specified by @cpu-throttle-increment and the one generated by
#     ideal CPU percentage.  Therefore, it is compatible to
#     traditional throttling, meanwhile the throttle increment won't
#     be excessive at tail stage.  The default value is false.
#     (Since 5.1)
#
# @tls-creds: ID of the 'tls-creds' object that provides credentials
#     for establishing a TLS connection over the migration data
#     channel.  On the outgoing side of the migration, the credentials
#     must be for a 'client' endpoint, while for the incoming side the
#     credentials must be for a 'server' endpoint.  Setting this to a
#     non-empty string enables TLS for all migrations.  An empty
#     string means that QEMU will use plain text mode for migration,
#     rather than TLS.  This is the default.  (Since 2.7)
#
# @tls-hostname: migration target's hostname for validating the
#     server's x509 certificate identity.  If empty, QEMU will use the
#     hostname from the migration URI, if any.  A non-empty value is
#     required when using x509 based TLS credentials and the migration
#     URI does not include a hostname, such as fd: or exec: based
#     migration.  (Since 2.7)
#
#     Note: empty value works only since 2.9.
#
# @tls-authz: ID of the 'authz' object subclass that provides access
#     control checking of the TLS x509 certificate distinguished name.
#     This object is only resolved at time of use, so can be deleted
#     and recreated on the fly while the migration server is active.
#     If missing, it will default to denying access (Since 4.0)
#
# @max-bandwidth: maximum speed for migration, in bytes per second.
#     (Since 2.8)
#
# @avail-switchover-bandwidth: to set the available bandwidth that
#     migration can use during switchover phase, in bytes per
#     second.  **Note:** this does not limit the bandwidth during
#     switchover, but only for calculations when making decisions to
#     switch over.  By default, this value is zero, which means QEMU
#     will estimate the bandwidth automatically.  This can be set
#     when the estimated value is not accurate, while the user is
#     able to guarantee such bandwidth is available when switching
#     over.  When specified correctly, this can make the switchover
#     decision much more accurate.  (Since 8.2)
#
# @downtime-limit: set maximum tolerated downtime for migration.
#     maximum downtime in milliseconds (Since 2.8)
#
# @x-checkpoint-delay: The delay time (in ms) between two COLO
#     checkpoints in periodic mode.  (Since 2.8)
#
# @multifd-channels: Number of channels used to migrate data in
#     parallel.  This is the same number that the number of sockets
#     used for migration.  The default value is 2 (since 4.0)
#
# @xbzrle-cache-size: cache size to be used by XBZRLE migration.  It
#     needs to be a multiple of the target page size and a power of 2
#     (Since 2.11)
#
# @max-postcopy-bandwidth: Background transfer bandwidth during
#     postcopy.  Defaults to 0 (unlimited).  In bytes per second.
#     (Since 3.0)
#
# @max-cpu-throttle: maximum cpu throttle percentage.  Defaults to 99.
#     (Since 3.1)
#
# @multifd-compression: Which compression method to use.  Defaults to
#     none.  (Since 5.0)
#
# @multifd-zlib-level: Set the compression level to be used in live
#     migration, the compression level is an integer between 0 and 9,
#     where 0 means no compression, 1 means the best compression
#     speed, and 9 means best compression ratio which will consume
#     more CPU.  Defaults to 1.  (Since 5.0)
#
# @multifd-qatzip-level: Set the compression level to be used in live
#     migration.  The level is an integer between 1 and 9, where 1
#     means the best compression speed, and 9 means the best
#     compression ratio which will consume more CPU.  Defaults to 1.
#     (Since 9.2)
#
# @multifd-zstd-level: Set the compression level to be used in live
#     migration, the compression level is an integer between 0 and 20,
#     where 0 means no compression, 1 means the best compression
#     speed, and 20 means best compression ratio which will consume
#     more CPU.  Defaults to 1.  (Since 5.0)
#
# @block-bitmap-mapping: Maps block nodes and bitmaps on them to
#     aliases for the purpose of dirty bitmap migration.  Such aliases
#     may for example be the corresponding names on the opposite site.
#     The mapping must be one-to-one, but not necessarily complete: On
#     the source, unmapped bitmaps and all bitmaps on unmapped nodes
#     will be ignored.  On the destination, encountering an unmapped
#     alias in the incoming migration stream will result in a report,
#     and all further bitmap migration data will then be discarded.
#     Note that the destination does not know about bitmaps it does
#     not receive, so there is no limitation or requirement regarding
#     the number of bitmaps received, or how they are named, or on
#     which nodes they are placed.  By default (when this parameter
#     has never been set), bitmap names are mapped to themselves.
#     Nodes are mapped to their block device name if there is one, and
#     to their node name otherwise.  (Since 5.2)
#
# @x-vcpu-dirty-limit-period: Periodic time (in milliseconds) of dirty
#     limit during live migration.  Should be in the range 1 to
#     1000ms.  Defaults to 1000ms.  (Since 8.1)
#
# @vcpu-dirty-limit: Dirtyrate limit (MB/s) during live migration.
#     Defaults to 1.  (Since 8.1)
#
# @mode: Migration mode.  See description in `MigMode`.  Default is
#     'normal'.  (Since 8.2)
#
# @zero-page-detection: Whether and how to detect zero pages.  See
#     description in `ZeroPageDetection`.  Default is 'multifd'.
#     (since 9.0)
#
# @direct-io: Open migration files with O_DIRECT when possible.  This
#     only has effect if the @mapped-ram capability is enabled.
#     (Since 9.1)
#
# @cpr-exec-command: Command to start the new QEMU process when @mode
#     is @cpr-exec.  The first list element is the program's filename,
#     the remainder its arguments.  (Since 10.2)
#
# @x-rdma-chunk-size: RDMA memory registration chunk size in bytes.
#     Default is 1MiB.  Must be a power of 2 in the range
#     [1MiB, 1024MiB].  Only applies when migrating via RDMA.
#     Must be set to the same value on both source and destination
#     before migration starts.  (Since 11.1)
#
# Features:
#
# @unstable: Members @x-checkpoint-delay, @x-rdma-chunk-size, and
#     @x-vcpu-dirty-limit-period are experimental.
#
# Since: 2.4
##
{ 'struct': 'MigrationParameters',
  'data': { '*announce-initial': 'size',
            '*announce-max': 'size',
            '*announce-rounds': 'size',
            '*announce-step': 'size',
            '*throttle-trigger-threshold': 'uint8',
            '*cpu-throttle-initial': 'uint8',
            '*cpu-throttle-increment': 'uint8',
            '*cpu-throttle-tailslow': 'bool',
            '*tls-creds': 'StrOrNull',
            '*tls-hostname': 'StrOrNull',
            '*tls-authz': 'StrOrNull',
            '*max-bandwidth': 'size',
            '*avail-switchover-bandwidth': 'size',
            '*downtime-limit': 'uint64',
            '*x-checkpoint-delay': { 'type': 'uint32',
                                     'features': [ 'unstable' ] },
            '*multifd-channels': 'uint8',
            '*xbzrle-cache-size': 'size',
            '*max-postcopy-bandwidth': 'size',
            '*max-cpu-throttle': 'uint8',
            '*multifd-compression': 'MultiFDCompression',
            '*multifd-zlib-level': 'uint8',
            '*multifd-qatzip-level': 'uint8',
            '*multifd-zstd-level': 'uint8',
            '*block-bitmap-mapping': [ 'BitmapMigrationNodeAlias' ],
            '*x-vcpu-dirty-limit-period': { 'type': 'uint64',
                                            'features': [ 'unstable' ] },
            '*vcpu-dirty-limit': 'uint64',
            '*mode': 'MigMode',
            '*zero-page-detection': 'ZeroPageDetection',
            '*direct-io': 'bool',
            '*x-rdma-chunk-size': { 'type': 'uint64',
                                    'features': [ 'unstable' ] },
            '*cpr-exec-command': [ 'str' ]} }

##
# @query-migrate-parameters:
#
# Return information about the current migration parameters.  Optional
# members of the return value are always present, except
# @block-bitmap-mapping, which is only present if it has been
# previously set.
#
# Since: 2.4
#
# .. qmp-example::
#
#     -> { "execute": "query-migrate-parameters" }
#     <- { "return": {
#              "multifd-channels": 2,
#              "cpu-throttle-increment": 10,
#              "cpu-throttle-initial": 20,
#              "max-bandwidth": 33554432,
#              "downtime-limit": 300
#           }
#        }
##
{ 'command': 'query-migrate-parameters',
  'returns': 'MigrationParameters' }

##
# @migrate-start-postcopy:
#
# Followup to a migration command to switch the migration to postcopy
# mode.  The postcopy-ram capability must be set on both source and
# destination before the original migration command.
#
# Since: 2.5
#
# .. qmp-example::
#
#     -> { "execute": "migrate-start-postcopy" }
#     <- { "return": {} }
##
{ 'command': 'migrate-start-postcopy' }

##
# @MIGRATION:
#
# Emitted when a migration event happens
#
# @status: `MigrationStatus` describing the current migration status.
#
# Since: 2.4
#
# .. qmp-example::
#
#     <- {"timestamp": {"seconds": 1432121972, "microseconds": 744001},
#         "event": "MIGRATION",
#         "data": {"status": "completed"} }
##
{ 'event': 'MIGRATION',
  'data': {'status': 'MigrationStatus'}}

##
# @MIGRATION_PASS:
#
# Emitted from the source side of a migration at the start of each
# pass (when it syncs the dirty bitmap)
#
# @pass: An incrementing count (starting at 1 on the first pass)
#
# Since: 2.6
#
# .. qmp-example::
#
#     <- { "timestamp": {"seconds": 1449669631, "microseconds": 239225},
#           "event": "MIGRATION_PASS", "data": {"pass": 2} }
##
{ 'event': 'MIGRATION_PASS',
  'data': { 'pass': 'int' } }

##
# @COLOMessage:
#
# The message transmission between Primary side and Secondary side.
#
# @checkpoint-ready: Secondary VM (SVM) is ready for checkpointing
#
# @checkpoint-request: Primary VM (PVM) tells SVM to prepare for
#     checkpointing
#
# @checkpoint-reply: SVM gets PVM's checkpoint request
#
# @vmstate-send: VM's state will be sent by PVM.
#
# @vmstate-size: The total size of VMstate.
#
# @vmstate-received: VM's state has been received by SVM.
#
# @vmstate-loaded: VM's state has been loaded by SVM.
#
# Since: 2.8
##
{ 'enum': 'COLOMessage',
  'data': [ 'checkpoint-ready', 'checkpoint-request', 'checkpoint-reply',
            'vmstate-send', 'vmstate-size', 'vmstate-received',
            'vmstate-loaded' ] }

##
# @COLOMode:
#
# The COLO current mode.
#
# @none: COLO is disabled.
#
# @primary: COLO node in primary side.
#
# @secondary: COLO node in slave side.
#
# Since: 2.8
##
{ 'enum': 'COLOMode',
  'data': [ 'none', 'primary', 'secondary'] }

##
# @FailoverStatus:
#
# An enumeration of COLO failover status
#
# @none: no failover has ever happened
#
# @require: got failover requirement but not handled
#
# @active: in the process of doing failover
#
# @completed: finish the process of failover
#
# @relaunch: restart the failover process, from 'none' -> 'completed'
#     (Since 2.9)
#
# Since: 2.8
##
{ 'enum': 'FailoverStatus',
  'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] }

##
# @COLO_EXIT:
#
# Emitted when VM finishes COLO mode due to some errors happening or
# at the request of users.
#
# @mode: report COLO mode when COLO exited.
#
# @reason: describes the reason for the COLO exit.
#
# Since: 3.1
#
# .. qmp-example::
#
#     <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172},
#          "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } }
##
{ 'event': 'COLO_EXIT',
  'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } }

##
# @COLOExitReason:
#
# The reason for a COLO exit.
#
# @none: failover has never happened.  This state does not occur in
#     the `COLO_EXIT` event, and is only visible in the result of
#     `query-colo-status`.
#
# @request: COLO exit is due to an external request.
#
# @error: COLO exit is due to an internal error.
#
# @processing: COLO is currently handling a failover (since 4.0).
#
# Since: 3.1
##
{ 'enum': 'COLOExitReason',
  'data': [ 'none', 'request', 'error' , 'processing' ] }

##
# @x-colo-lost-heartbeat:
#
# Tell QEMU that heartbeat is lost, request it to do takeover
# procedures.  If this command is sent to the PVM, the Primary side
# will exit COLO mode.  If sent to the Secondary, the Secondary side
# will run failover work, then takes over server operation to become
# the service VM.
#
# Features:
#
# @unstable: This command is experimental.
#
# Since: 2.8
#
# .. qmp-example::
#
#     -> { "execute": "x-colo-lost-heartbeat" }
#     <- { "return": {} }
##
{ 'command': 'x-colo-lost-heartbeat',
  'features': [ 'unstable' ],
  'if': 'CONFIG_REPLICATION' }

##
# @migrate_cancel:
#
# Cancel the currently executing migration process.  Allows a new
# migration to be started right after.  When postcopy-ram is in use,
# cancelling is not allowed after the postcopy phase has started.
#
# .. note:: This command succeeds even if there is no migration
#    process running.
#
# Since: 0.14
#
# .. qmp-example::
#
#     -> { "execute": "migrate_cancel" }
#     <- { "return": {} }
##
{ 'command': 'migrate_cancel' }

##
# @migrate-continue:
#
# Continue migration when it's in a paused state.
#
# @state: The state the migration is currently expected to be in
#
# Since: 2.11
#
# .. qmp-example::
#
#     -> { "execute": "migrate-continue" , "arguments":
#          { "state": "pre-switchover" } }
#     <- { "return": {} }
##
{ 'command': 'migrate-continue', 'data': {'state': 'MigrationStatus'} }

##
# @MigrationAddressType:
#
# The migration stream transport mechanisms.
#
# @socket: Migrate via socket.
#
# @exec: Direct the migration stream to another process.
#
# @rdma: Migrate via RDMA.
#
# @file: Direct the migration stream to a file.
#
# Since: 8.2
##
{ 'enum': 'MigrationAddressType',
  'data': [ 'socket', 'exec', 'rdma', 'file' ] }

##
# @FileMigrationArgs:
#
# @filename: The file to receive the migration stream
#
# @offset: The file offset where the migration stream will start
#
# Since: 8.2
##
{ 'struct': 'FileMigrationArgs',
  'data': { 'filename': 'str',
            'offset': 'uint64' } }

##
# @MigrationExecCommand:
#
# @args: command (list head) and arguments to execute.
#
# Since: 8.2
##
{ 'struct': 'MigrationExecCommand',
  'data': {'args': [ 'str' ] } }

##
# @MigrationAddress:
#
# Migration endpoint configuration.
#
# @transport: The migration stream transport mechanism
#
# Since: 8.2
##
{ 'union': 'MigrationAddress',
  'base': { 'transport' : 'MigrationAddressType'},
  'discriminator': 'transport',
  'data': {
    'socket': 'SocketAddress',
    'exec': 'MigrationExecCommand',
    'rdma': 'InetSocketAddress',
    'file': 'FileMigrationArgs' } }

##
# @MigrationChannelType:
#
# The migration channel-type request options.
#
# @main: Main outbound migration channel.
#
# @cpr: Checkpoint and restart state channel.
#
# Since: 8.1
##
{ 'enum': 'MigrationChannelType',
  'data': [ 'main', 'cpr' ] }

##
# @MigrationChannel:
#
# Migration stream channel parameters.
#
# @channel-type: Channel type for transferring packet information.
#
# @addr: Migration endpoint configuration on destination interface.
#
# Since: 8.1
##
{ 'struct': 'MigrationChannel',
  'data': {
      'channel-type': 'MigrationChannelType',
      'addr': 'MigrationAddress' } }

##
# @migrate:
#
# Migrates the current running guest to another Virtual Machine.
#
# @uri: the Uniform Resource Identifier of the destination VM
#
# @channels: list of migration stream channels with each stream in the
#     list connected to a destination interface endpoint.
#
# @resume: when set, use the new uri/channels specified to resume
#     paused postcopy migration.  This flag should only be used if
#     the previous postcopy migration was interrupted.  The command
#     will fail unless migration is in "postcopy-paused" state.
#     (default: false, since 3.0)
#
# Since: 0.14
#
# .. admonition:: Notes
#
#     1. The `query-migrate` command should be used to check
#        migration's progress and final result (this information is
#        provided by the 'status' member).
#
#     2. The uri argument should have the Uniform Resource Identifier
#        of default destination VM.  This connection will be bound to
#        default network.
#
#     3. For now, number of migration streams is restricted to one,
#        i.e. number of items in 'channels' list is just 1.
#
#     4. The 'uri' and 'channels' arguments are mutually exclusive;
#        exactly one of the two should be present.
#
# .. qmp-example::
#
#     -> { "execute": "migrate", "arguments": { "uri": "tcp:0:4446" } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "socket",
#                                        "type": "inet",
#                                        "host": "10.12.34.9",
#                                        "port": "1050" } } ] } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "exec",
#                                        "args": [ "/bin/nc", "-p", "6000",
#                                                  "/some/sock" ] } } ] } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "rdma",
#                                        "host": "10.12.34.9",
#                                        "port": "1050" } } ] } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "file",
#                                        "filename": "/tmp/migfile",
#                                        "offset": "0x1000" } } ] } }
#     <- { "return": {} }
##
{ 'command': 'migrate',
  'data': {'*uri': 'str',
           '*channels': [ 'MigrationChannel' ],
           '*resume': 'bool' } }

##
# @migrate-incoming:
#
# Start an incoming migration.  QEMU must have been started with
# -incoming defer.
#
# @uri: The Uniform Resource Identifier identifying the source or
#     address to listen on
#
# @channels: list of migration stream channels with each stream in the
#     list connected to a destination interface endpoint.
#
# @exit-on-error: Exit on incoming migration failure.  Default true.
#     When set to false, the failure triggers a
#     :qapi:event:`MIGRATION` event, and error details could be
#     retrieved with `query-migrate`.  (since 9.1)
#
# Since: 2.3
#
# .. admonition:: Notes
#
#     1. It's a bad idea to use a string for the uri, but it needs to
#        stay compatible with -incoming and the format of the uri is
#        already exposed above libvirt.
#
#     2. QEMU must be started with -incoming defer to allow
#        `migrate-incoming` to be used.
#
#     3. The uri format is the same as for -incoming
#
#     4. For now, number of migration streams is restricted to one,
#        i.e. number of items in 'channels' list is just 1.
#
#     5. The 'uri' and 'channels' arguments are mutually exclusive;
#        exactly one of the two should be present.
#
# .. qmp-example::
#
#     -> { "execute": "migrate-incoming",
#          "arguments": { "uri": "tcp:0:4446" } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate-incoming",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "socket",
#                                        "type": "inet",
#                                        "host": "10.12.34.9",
#                                        "port": "1050" } } ] } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate-incoming",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "exec",
#                                        "args": [ "/bin/nc", "-p", "6000",
#                                                  "/some/sock" ] } } ] } }
#     <- { "return": {} }
#
#     -> { "execute": "migrate-incoming",
#          "arguments": {
#              "channels": [ { "channel-type": "main",
#                              "addr": { "transport": "rdma",
#                                        "host": "10.12.34.9",
#                                        "port": "1050" } } ] } }
#     <- { "return": {} }
##
{ 'command': 'migrate-incoming',
             'data': {'*uri': 'str',
                      '*channels': [ 'MigrationChannel' ],
                      '*exit-on-error': 'bool' } }

##
# @xen-save-devices-state:
#
# Save the state of all devices to file.  The RAM and the block
# devices of the VM are not saved by this command.
#
# @filename: the file to save the state of the devices to as binary
#     data.  See `xen-save-devices-state`.txt for a description of the
#     binary format.
#
# @live: Optional argument to ask QEMU to treat this command as part
#     of a live migration.  Default to true.  (since 2.11)
#
# Since: 1.1
#
# .. qmp-example::
#
#     -> { "execute": "xen-save-devices-state",
#          "arguments": { "filename": "/tmp/save" } }
#     <- { "return": {} }
##
{ 'command': 'xen-save-devices-state',
  'data': {'filename': 'str', '*live':'bool' } }

##
# @xen-set-global-dirty-log:
#
# Enable or disable the global dirty log mode.
#
# @enable: true to enable, false to disable.
#
# Since: 1.3
#
# .. qmp-example::
#
#     -> { "execute": "xen-set-global-dirty-log",
#          "arguments": { "enable": true } }
#     <- { "return": {} }
##
{ 'command': 'xen-set-global-dirty-log', 'data': { 'enable': 'bool' } }

##
# @xen-load-devices-state:
#
# Load the state of all devices from file.  The RAM and the block
# devices of the VM are not loaded by this command.
#
# @filename: the file to load the state of the devices from as binary
#     data.  See `xen-save-devices-state`.txt for a description of the
#     binary format.
#
# Since: 2.7
#
# .. qmp-example::
#
#     -> { "execute": "xen-load-devices-state",
#          "arguments": { "filename": "/tmp/resume" } }
#     <- { "return": {} }
##
{ 'command': 'xen-load-devices-state', 'data': {'filename': 'str'} }

##
# @xen-set-replication:
#
# Enable or disable replication.
#
# @enable: true to enable, false to disable.
#
# @primary: true for primary or false for secondary.
#
# @failover: true to do failover, false to stop.  Cannot be specified
#     if 'enable' is true.  Default value is false.
#
# .. qmp-example::
#
#     -> { "execute": "xen-set-replication",
#          "arguments": {"enable": true, "primary": false} }
#     <- { "return": {} }
#
# Since: 2.9
##
{ 'command': 'xen-set-replication',
  'data': { 'enable': 'bool', 'primary': 'bool', '*failover': 'bool' },
  'if': 'CONFIG_REPLICATION' }

##
# @ReplicationStatus:
#
# The result format for `query-xen-replication-status`.
#
# @error: true if an error happened, false if replication is normal.
#
# @desc: the human readable error description string, when @error is
#     'true'.
#
# Since: 2.9
##
{ 'struct': 'ReplicationStatus',
  'data': { 'error': 'bool', '*desc': 'str' },
  'if': 'CONFIG_REPLICATION' }

##
# @query-xen-replication-status:
#
# Query replication status while the vm is running.
#
# TODO: This line is a hack to separate the example from the body
#
# .. qmp-example::
#
#     -> { "execute": "query-xen-replication-status" }
#     <- { "return": { "error": false } }
#
# Since: 2.9
##
{ 'command': 'query-xen-replication-status',
  'returns': 'ReplicationStatus',
  'if': 'CONFIG_REPLICATION' }

##
# @xen-colo-do-checkpoint:
#
# Xen uses this command to notify replication to trigger a checkpoint.
#
# .. qmp-example::
#
#     -> { "execute": "xen-colo-do-checkpoint" }
#     <- { "return": {} }
#
# Since: 2.9
##
{ 'command': 'xen-colo-do-checkpoint',
  'if': 'CONFIG_REPLICATION' }

##
# @COLOStatus:
#
# The result format for `query-colo-status`.
#
# @mode: COLO running mode.  If COLO is running, this field will
#     return 'primary' or 'secondary'.
#
# @last-mode: COLO last running mode.  If COLO is running, this field
#     will return same like mode field, after failover we can use this
#     field to get last colo mode.  (since 4.0)
#
# @reason: describes the reason for the COLO exit.
#
# Since: 3.1
##
{ 'struct': 'COLOStatus',
  'data': { 'mode': 'COLOMode', 'last-mode': 'COLOMode',
            'reason': 'COLOExitReason' },
  'if': 'CONFIG_REPLICATION' }

##
# @query-colo-status:
#
# Query COLO status while the vm is running.
#
# TODO: This line is a hack to separate the example from the body
#
# .. qmp-example::
#
#     -> { "execute": "query-colo-status" }
#     <- { "return": { "mode": "primary", "last-mode": "none", "reason": "request" } }
#
# Since: 3.1
##
{ 'command': 'query-colo-status',
  'returns': 'COLOStatus',
  'if': 'CONFIG_REPLICATION' }

##
# @migrate-recover:
#
# Provide a recovery migration stream URI.
#
# @uri: the URI to be used for the recovery of migration stream.
#
# .. qmp-example::
#
#     -> { "execute": "migrate-recover",
#          "arguments": { "uri": "tcp:192.168.1.200:12345" } }
#     <- { "return": {} }
#
# Since: 3.0
##
{ 'command': 'migrate-recover',
  'data': { 'uri': 'str' },
  'allow-oob': true }

##
# @migrate-pause:
#
# Pause a migration.  Currently it only supports postcopy.
#
# .. qmp-example::
#
#     -> { "execute": "migrate-pause" }
#     <- { "return": {} }
#
# Since: 3.0
##
{ 'command': 'migrate-pause', 'allow-oob': true }

##
# @UNPLUG_PRIMARY:
#
# Emitted from source side of a migration when migration state is
# WAIT_UNPLUG.  Device was unplugged by guest operating system.
# Device resources in QEMU are kept on standby to be able to re-plug
# it in case of migration failure.
#
# @device-id: QEMU device id of the unplugged device
#
# Since: 4.2
#
# .. qmp-example::
#
#     <- { "event": "UNPLUG_PRIMARY",
#          "data": { "device-id": "hostdev0" },
#          "timestamp": { "seconds": 1265044230, "microseconds": 450486 } }
##
{ 'event': 'UNPLUG_PRIMARY',
  'data': { 'device-id': 'str' } }

##
# @DirtyRateVcpu:
#
# Dirty rate of vcpu.
#
# @id: vcpu index.
#
# @dirty-rate: dirty rate.
#
# Since: 6.2
##
{ 'struct': 'DirtyRateVcpu',
  'data': { 'id': 'int', 'dirty-rate': 'int64' } }

##
# @DirtyRateStatus:
#
# Dirty page rate measurement status.
#
# @unstarted: measuring thread has not been started yet
#
# @measuring: measuring thread is running
#
# @measured: dirty page rate is measured and the results are available
#
# Since: 5.2
##
{ 'enum': 'DirtyRateStatus',
  'data': [ 'unstarted', 'measuring', 'measured'] }

##
# @DirtyRateMeasureMode:
#
# Method used to measure dirty page rate.  Differences between
# available methods are explained in `calc-dirty-rate`.
#
# @page-sampling: use page sampling
#
# @dirty-ring: use dirty ring
#
# @dirty-bitmap: use dirty bitmap
#
# Since: 6.2
##
{ 'enum': 'DirtyRateMeasureMode',
  'data': ['page-sampling', 'dirty-ring', 'dirty-bitmap'] }

##
# @TimeUnit:
#
# Specifies unit in which time-related value is specified.
#
# @second: value is in seconds
#
# @millisecond: value is in milliseconds
#
# Since: 8.2
##
{ 'enum': 'TimeUnit',
  'data': ['second', 'millisecond'] }

##
# @DirtyRateInfo:
#
# Information about measured dirty page rate.
#
# @dirty-rate: an estimate of the dirty page rate of the VM in units
#     of MiB/s.  Value is present only when @status is 'measured'.
#
# @status: current status of dirty page rate measurements
#
# @start-time: start time in units of second for calculation
#
# @calc-time: time period for which dirty page rate was measured,
#     expressed and rounded down to @calc-time-unit.
#
# @calc-time-unit: time unit of @calc-time  (Since 8.2)
#
# @sample-pages: number of sampled pages per GiB of guest memory.
#     Valid only in page-sampling mode (Since 6.1)
#
# @mode: mode that was used to measure dirty page rate (Since 6.2)
#
# @vcpu-dirty-rate: dirty rate for each vCPU if dirty-ring mode was
#     specified (Since 6.2)
#
# Since: 5.2
##
{ 'struct': 'DirtyRateInfo',
  'data': {'*dirty-rate': 'int64',
           'status': 'DirtyRateStatus',
           'start-time': 'int64',
           'calc-time': 'int64',
           'calc-time-unit': 'TimeUnit',
           'sample-pages': 'uint64',
           'mode': 'DirtyRateMeasureMode',
           '*vcpu-dirty-rate': [ 'DirtyRateVcpu' ] } }

##
# @calc-dirty-rate:
#
# Start measuring dirty page rate of the VM.  Results can be retrieved
# with `query-dirty-rate` after measurements are completed.
#
# Dirty page rate is the number of pages changed in a given time
# period expressed in MiB/s.  The following methods of calculation are
# available:
#
# 1. In page sampling mode, a random subset of pages are selected and
#    hashed twice: once at the beginning of measurement time period,
#    and once again at the end.  If two hashes for some page are
#    different, the page is counted as changed.  Since this method
#    relies on sampling and hashing, calculated dirty page rate is
#    only an estimate of its true value.  Increasing @sample-pages
#    improves estimation quality at the cost of higher computational
#    overhead.
#
# 2. Dirty bitmap mode captures writes to memory (for example by
#    temporarily revoking write access to all pages) and counting page
#    faults.  Information about modified pages is collected into a
#    bitmap, where each bit corresponds to one guest page.  This mode
#    requires that KVM accelerator property "dirty-ring-size" is *not*
#    set.
#
# 3. Dirty ring mode is similar to dirty bitmap mode, but the
#    information about modified pages is collected into ring buffer.
#    This mode tracks page modification per each vCPU separately.  It
#    requires that KVM accelerator property "dirty-ring-size" is set.
#
# @calc-time: time period for which dirty page rate is calculated.  By
#     default it is specified in seconds, but the unit can be set
#     explicitly with @calc-time-unit.  Note that larger @calc-time
#     values will typically result in smaller dirty page rates because
#     page dirtying is a one-time event.  Once some page is counted as
#     dirty during @calc-time period, further writes to this page will
#     not increase dirty page rate anymore.
#
# @calc-time-unit: time unit in which @calc-time is specified.  By
#     default it is seconds.  (Since 8.2)
#
# @sample-pages: number of sampled pages per each GiB of guest memory.
#     Default value is 512.  For 4KiB guest pages this corresponds to
#     sampling ratio of 0.2%.  This argument is used only in page
#     sampling mode.  (Since 6.1)
#
# @mode: mechanism for tracking dirty pages.  Default value is
#     'page-sampling'.  Others are 'dirty-bitmap' and 'dirty-ring'.
#     (Since 6.1)
#
# Since: 5.2
#
# .. qmp-example::
#
#     -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 1,
#                                                     "sample-pages": 512} }
#     <- { "return": {} }
#
# .. qmp-example::
#    :annotated:
#
#    Measure dirty rate using dirty bitmap for 500 milliseconds::
#
#     -> {"execute": "calc-dirty-rate", "arguments": {"calc-time": 500,
#         "calc-time-unit": "millisecond", "mode": "dirty-bitmap"} }
#
#     <- { "return": {} }
##
{ 'command': 'calc-dirty-rate', 'data': {'calc-time': 'int64',
                                         '*calc-time-unit': 'TimeUnit',
                                         '*sample-pages': 'int',
                                         '*mode': 'DirtyRateMeasureMode'} }

##
# @query-dirty-rate:
#
# Query results of the most recent invocation of `calc-dirty-rate`.
#
# @calc-time-unit: time unit in which to report calculation time.
#     By default it is reported in seconds.  (Since 8.2)
#
# Since: 5.2
#
# .. qmp-example::
#    :title: Measurement is in progress
#
#     <- {"status": "measuring", "sample-pages": 512,
#         "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
#         "calc-time-unit": "second"}
#
# .. qmp-example::
#    :title: Measurement has been completed
#
#     <- {"status": "measured", "sample-pages": 512, "dirty-rate": 108,
#         "mode": "page-sampling", "start-time": 1693900454, "calc-time": 10,
#         "calc-time-unit": "second"}
##
{ 'command': 'query-dirty-rate', 'data': {'*calc-time-unit': 'TimeUnit' },
                                 'returns': 'DirtyRateInfo' }

##
# @DirtyLimitInfo:
#
# Dirty page rate limit information of a virtual CPU.
#
# @cpu-index: index of a virtual CPU.
#
# @limit-rate: upper limit of dirty page rate (MB/s) for a virtual
#     CPU, 0 means unlimited.
#
# @current-rate: current dirty page rate (MB/s) for a virtual CPU.
#
# Since: 7.1
##
{ 'struct': 'DirtyLimitInfo',
  'data': { 'cpu-index': 'int',
            'limit-rate': 'uint64',
            'current-rate': 'uint64' } }

##
# @set-vcpu-dirty-limit:
#
# Set the upper limit of dirty page rate for virtual CPUs.
#
# Requires KVM with accelerator property "dirty-ring-size" set.  A
# virtual CPU's dirty page rate is a measure of its memory load.  To
# observe dirty page rates, use `calc-dirty-rate`.
#
# @cpu-index: index of a virtual CPU, default is all.
#
# @dirty-rate: upper limit of dirty page rate (MB/s) for virtual CPUs.
#
# Since: 7.1
#
# .. qmp-example::
#
#     -> {"execute": "set-vcpu-dirty-limit"}
#         "arguments": { "dirty-rate": 200,
#                        "cpu-index": 1 } }
#     <- { "return": {} }
##
{ 'command': 'set-vcpu-dirty-limit',
  'data': { '*cpu-index': 'int',
            'dirty-rate': 'uint64' } }

##
# @cancel-vcpu-dirty-limit:
#
# Cancel the upper limit of dirty page rate for virtual CPUs.
#
# Cancel the dirty page limit for the vCPU which has been set with
# `set-vcpu-dirty-limit` command.  Note that this command requires
# support from dirty ring, same as the `set-vcpu-dirty-limit`.
#
# @cpu-index: index of a virtual CPU, default is all.
#
# Since: 7.1
#
# .. qmp-example::
#
#     -> {"execute": "cancel-vcpu-dirty-limit"},
#         "arguments": { "cpu-index": 1 } }
#     <- { "return": {} }
##
{ 'command': 'cancel-vcpu-dirty-limit',
  'data': { '*cpu-index': 'int'} }

##
# @query-vcpu-dirty-limit:
#
# Return information about virtual CPU dirty page rate limits, if any.
#
# Since: 7.1
#
# .. qmp-example::
#
#     -> {"execute": "query-vcpu-dirty-limit"}
#     <- {"return": [
#            { "limit-rate": 60, "current-rate": 3, "cpu-index": 0},
#            { "limit-rate": 60, "current-rate": 3, "cpu-index": 1}]}
##
{ 'command': 'query-vcpu-dirty-limit',
  'returns': [ 'DirtyLimitInfo' ] }

##
# @snapshot-save:
#
# Save a VM snapshot
#
# @job-id: identifier for the newly created job
#
# @tag: name of the snapshot to create
#
# @vmstate: block device node name to save vmstate to
#
# @devices: list of block device node names to save a snapshot to
#
# Applications should not assume that the snapshot save is complete
# when this command returns.  The job commands / events must be used
# to determine completion and to fetch details of any errors that
# arise.
#
# Note that execution of the guest CPUs may be stopped during the time
# it takes to save the snapshot.  A future version of QEMU may ensure
# CPUs are executing continuously.
#
# It is strongly recommended that @devices contain all writable block
# device nodes if a consistent snapshot is required.
#
# If @tag already exists, an error will be reported
#
# .. qmp-example::
#
#     -> { "execute": "snapshot-save",
#          "arguments": {
#             "job-id": "snapsave0",
#             "tag": "my-snap",
#             "vmstate": "disk0",
#             "devices": ["disk0", "disk1"]
#          }
#        }
#     <- { "return": { } }
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1432121972, "microseconds": 744001},
#         "data": {"status": "created", "id": "snapsave0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1432122172, "microseconds": 744001},
#         "data": {"status": "running", "id": "snapsave0"}}
#     <- {"event": "STOP",
#         "timestamp": {"seconds": 1432122372, "microseconds": 744001} }
#     <- {"event": "RESUME",
#         "timestamp": {"seconds": 1432122572, "microseconds": 744001} }
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1432122772, "microseconds": 744001},
#         "data": {"status": "waiting", "id": "snapsave0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1432122972, "microseconds": 744001},
#         "data": {"status": "pending", "id": "snapsave0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1432123172, "microseconds": 744001},
#         "data": {"status": "concluded", "id": "snapsave0"}}
#     -> {"execute": "query-jobs"}
#     <- {"return": [{"current-progress": 1,
#                     "status": "concluded",
#                     "total-progress": 1,
#                     "type": "snapshot-save",
#                     "id": "snapsave0"}]}
#
# Since: 6.0
##
{ 'command': 'snapshot-save',
  'data': { 'job-id': 'str',
            'tag': 'str',
            'vmstate': 'str',
            'devices': ['str'] } }

##
# @snapshot-load:
#
# Load a VM snapshot
#
# @job-id: identifier for the newly created job
#
# @tag: name of the snapshot to load.
#
# @vmstate: block device node name to load vmstate from
#
# @devices: list of block device node names to load a snapshot from
#
# Applications should not assume that the snapshot load is complete
# when this command returns.  The job commands / events must be used
# to determine completion and to fetch details of any errors that
# arise.
#
# Note that execution of the guest CPUs will be stopped during the
# time it takes to load the snapshot.
#
# It is strongly recommended that @devices contain all writable block
# device nodes that can have changed since the original
# `snapshot-save` command execution.
#
# .. qmp-example::
#
#     -> { "execute": "snapshot-load",
#          "arguments": {
#             "job-id": "snapload0",
#             "tag": "my-snap",
#             "vmstate": "disk0",
#             "devices": ["disk0", "disk1"]
#          }
#        }
#     <- { "return": { } }
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1472124172, "microseconds": 744001},
#         "data": {"status": "created", "id": "snapload0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1472125172, "microseconds": 744001},
#         "data": {"status": "running", "id": "snapload0"}}
#     <- {"event": "STOP",
#         "timestamp": {"seconds": 1472125472, "microseconds": 744001} }
#     <- {"event": "RESUME",
#         "timestamp": {"seconds": 1472125872, "microseconds": 744001} }
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1472126172, "microseconds": 744001},
#         "data": {"status": "waiting", "id": "snapload0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1472127172, "microseconds": 744001},
#         "data": {"status": "pending", "id": "snapload0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1472128172, "microseconds": 744001},
#         "data": {"status": "concluded", "id": "snapload0"}}
#     -> {"execute": "query-jobs"}
#     <- {"return": [{"current-progress": 1,
#                     "status": "concluded",
#                     "total-progress": 1,
#                     "type": "snapshot-load",
#                     "id": "snapload0"}]}
#
# Since: 6.0
##
{ 'command': 'snapshot-load',
  'data': { 'job-id': 'str',
            'tag': 'str',
            'vmstate': 'str',
            'devices': ['str'] } }

##
# @snapshot-delete:
#
# Delete a VM snapshot
#
# @job-id: identifier for the newly created job
#
# @tag: name of the snapshot to delete.
#
# @devices: list of block device node names to delete a snapshot from
#
# Applications should not assume that the snapshot delete is complete
# when this command returns.  The job commands / events must be used
# to determine completion and to fetch details of any errors that
# arise.
#
# .. qmp-example::
#
#     -> { "execute": "snapshot-delete",
#          "arguments": {
#             "job-id": "snapdelete0",
#             "tag": "my-snap",
#             "devices": ["disk0", "disk1"]
#          }
#        }
#     <- { "return": { } }
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1442124172, "microseconds": 744001},
#         "data": {"status": "created", "id": "snapdelete0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1442125172, "microseconds": 744001},
#         "data": {"status": "running", "id": "snapdelete0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1442126172, "microseconds": 744001},
#         "data": {"status": "waiting", "id": "snapdelete0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1442127172, "microseconds": 744001},
#         "data": {"status": "pending", "id": "snapdelete0"}}
#     <- {"event": "JOB_STATUS_CHANGE",
#         "timestamp": {"seconds": 1442128172, "microseconds": 744001},
#         "data": {"status": "concluded", "id": "snapdelete0"}}
#     -> {"execute": "query-jobs"}
#     <- {"return": [{"current-progress": 1,
#                     "status": "concluded",
#                     "total-progress": 1,
#                     "type": "snapshot-delete",
#                     "id": "snapdelete0"}]}
#
# Since: 6.0
##
{ 'command': 'snapshot-delete',
  'data': { 'job-id': 'str',
            'tag': 'str',
            'devices': ['str'] } }
